@cloudbase/weda-ui 3.16.0 → 3.17.0
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/container.js +0 -3
- package/dist/configs/components/wd-ad.d.ts +4 -0
- package/dist/configs/components/wd-ad.js +23 -0
- package/dist/configs/components/wd-cascader.d.ts +4 -0
- package/dist/configs/components/wd-checkbox.d.ts +4 -0
- package/dist/configs/components/wd-code-editor.d.ts +4 -0
- package/dist/configs/components/wd-date-range.d.ts +4 -0
- package/dist/configs/components/wd-date.d.ts +4 -0
- package/dist/configs/components/wd-department.d.ts +6 -0
- package/dist/configs/components/wd-department.js +1 -1
- package/dist/configs/components/wd-form-arr.d.ts +4 -0
- package/dist/configs/components/wd-form-detail.d.ts +4 -0
- package/dist/configs/components/wd-form-obj.d.ts +4 -0
- package/dist/configs/components/wd-input-email.d.ts +4 -0
- package/dist/configs/components/wd-input-number.d.ts +4 -0
- package/dist/configs/components/wd-input-phone.d.ts +4 -0
- package/dist/configs/components/wd-input-url.d.ts +4 -0
- package/dist/configs/components/wd-input.d.ts +4 -0
- package/dist/configs/components/wd-location.d.ts +4 -0
- package/dist/configs/components/wd-member.d.ts +4 -0
- package/dist/configs/components/wd-radio.d.ts +4 -0
- package/dist/configs/components/wd-rating.d.ts +4 -0
- package/dist/configs/components/wd-region.d.ts +4 -0
- package/dist/configs/components/wd-rich-text.d.ts +4 -0
- package/dist/configs/components/wd-select-multiple.d.ts +4 -0
- package/dist/configs/components/wd-select.d.ts +4 -0
- package/dist/configs/components/wd-switch.d.ts +4 -0
- package/dist/configs/components/wd-tag-select.d.ts +4 -0
- package/dist/configs/components/wd-tag.d.ts +4 -0
- package/dist/configs/components/wd-textarea.d.ts +4 -0
- package/dist/configs/components/wd-time.d.ts +4 -0
- package/dist/configs/components/wd-upload-file.d.ts +4 -0
- package/dist/configs/components/wd-upload-image.d.ts +195 -15
- package/dist/configs/components/wd-upload-image.js +125 -6
- package/dist/configs/index.d.ts +492 -4
- package/dist/configs/type-utils/type-form.d.ts +4 -0
- package/dist/configs/type-utils/type-form.js +4 -0
- package/dist/configs/type-utils/x-runtime-default.d.ts +2 -0
- package/dist/configs/type-utils/x-runtime-default.js +2 -0
- package/dist/configs/utils/field.d.ts +1 -0
- package/dist/configs/utils/field.js +95 -0
- package/dist/style/weda-ui.min.css +1 -1
- package/dist/web/components/form/uploader/index.d.ts +1 -0
- package/dist/web/components/form/uploader/index.js +7 -4
- package/dist/web/components/form/uploader/upload/index.d.ts +26 -0
- package/dist/web/components/form/uploader/upload/index.js +200 -0
- package/dist/web/components/form/uploader/uploader.h5.d.ts +6 -1
- package/dist/web/components/form/uploader/uploader.h5.js +26 -94
- package/dist/web/components/form/uploader/uploader.pc.d.ts +1 -1
- package/dist/web/components/form/uploader/uploader.pc.js +30 -100
- package/dist/web/components/form/uploader/util.d.ts +16 -0
- package/dist/web/components/form/uploader/util.js +106 -5
- package/dist/web/components/uploaderView/index.js +1 -1
- package/dist/web/components/wd-ad/wd-ad.js +2 -4
- package/dist/web/components/wd-upload-image/wd-upload-image.js +14 -4
- package/package.json +4 -4
- package/dist/web/components/form/uploader/useUploadFile.d.ts +0 -16
- package/dist/web/components/form/uploader/useUploadFile.js +0 -99
|
@@ -375,6 +375,10 @@ export declare const getFormItemClasses: (classRoot: string, opts?: {
|
|
|
375
375
|
}[];
|
|
376
376
|
export declare const FORM_ITEM_META: {
|
|
377
377
|
group: {
|
|
378
|
+
模板: {
|
|
379
|
+
'x-index': number;
|
|
380
|
+
expand: boolean;
|
|
381
|
+
};
|
|
378
382
|
标签项: {
|
|
379
383
|
'x-index': number;
|
|
380
384
|
expand: boolean;
|
|
@@ -97,6 +97,8 @@ export declare const X_RUNTIME_DEFAULT: {
|
|
|
97
97
|
addRelationButtonText: string;
|
|
98
98
|
_uploadButtonText: string;
|
|
99
99
|
_uploadTipText: string;
|
|
100
|
+
multiton: boolean;
|
|
101
|
+
disableFallbackSharePage: boolean;
|
|
100
102
|
};
|
|
101
103
|
export declare const SINGLE_FOREIGN_FORMATS: (path?: string, hasXEnum?: boolean) => string;
|
|
102
104
|
export declare const MULTIPLE_FOREIGN_FORMATS: (path?: string, hasXEnum?: boolean) => string;
|
|
@@ -97,6 +97,8 @@ export const X_RUNTIME_DEFAULT = {
|
|
|
97
97
|
addRelationButtonText: '去新建',
|
|
98
98
|
_uploadButtonText: '点击上传',
|
|
99
99
|
_uploadTipText: '支持批量上传',
|
|
100
|
+
multiton: false,
|
|
101
|
+
disableFallbackSharePage: false,
|
|
100
102
|
};
|
|
101
103
|
export const SINGLE_FOREIGN_FORMATS = (path = '$self.value', hasXEnum = false) => hasXEnum
|
|
102
104
|
? `['x-enum','father-son','related','many-one','one-one','one-one-r'].includes(${path})`
|
|
@@ -2,3 +2,4 @@ export declare const $table_template: string;
|
|
|
2
2
|
export declare const $attached_template: string;
|
|
3
3
|
export declare const $custom_template: string;
|
|
4
4
|
export declare const $field_template: string;
|
|
5
|
+
export declare const $upload_image_template = "\n[attributes]\nlabelVisible = false\n[[template]]\ncomponent = \"Container\"\n\n [[template.items]]\n component = \"WdButton\"\n [template.items.attributes]\n icon = \"td:upload\"\n iconType = \"text-with-icon\"\n text = \"\u4E0A\u4F20\"\n variant = \"outline\"\n\n [[template.items.listeners]]\n eventName = \"tap\"\n type = \"platform\"\n [template.items.listeners.handler]\n name = \"invoke\"\n module = \"platform\"\n [template.items.listeners.handler.params]\n component = \"{{$self.id}}\"\n method = \"upload\"\n\n [[template.items]]\n component = \"Container\"\n [template.items.attributes.style]\n marginTop = \"10px\"\n display = \"flex\"\n flexWrap = \"wrap\"\n\n [[template.items.items]]\n component = \"Repeater\"\n\n [template.items.items.attributes]\n \":data\" = \"$w.{{$self.id}}?.previewFile||[]\"\n\n suffix = '{{$self.id}}'\n forItem = 'item_{{$self.id}}'\n forIndex = 'index_{{$self.id}}'\n\n [[template.items.items.items]]\n component = \"Container\"\n\n [template.items.items.items.attributes.style]\n margin = \"5px\"\n padding = \"10px\"\n border = \"1px solid #d9d9d9\"\n flexShrink = 0\n width = \"102px\"\n height = \"102px\"\n position = \"relative\"\n\n [[template.items.items.items.items]]\n component = \"WdImage\"\n\n [template.items.items.items.items.attributes]\n alt = \"[\u56FE\u7247]\"\n fit = \"contain\"\n imgPreview = true\n \":src\" = '$w.item_{{$self.id}}.tempUrl||$w.item_{{$self.id}}.cloudId'\n\n [template.items.items.items.items.attributes.style]\n width = \"80px\"\n height = \"80px\"\n\n [[template.items.items.items.items]]\n component = \"WdIcon\"\n\n [template.items.items.items.items.attributes]\n name = \"delete\"\n size = \"sm\"\n\n [template.items.items.items.items.attributes.style]\n position = \"absolute\"\n right = \"5px\"\n top = \"5px\"\n\n [[template.items.items.items.items.listeners]]\n eventName = \"tap\"\n type = \"platform\"\n\n [template.items.items.items.items.listeners.handler]\n name = \"invoke\"\n module = \"platform\"\n\n [template.items.items.items.items.listeners.handler.params]\n component = \"{{$self.id}}\"\n method = \"delete\"\n\n [template.items.items.items.items.listeners.handler.params.params]\n \":cloudId\" = '$w.item_{{$self.id}}.cloudId'\n\n";
|
|
@@ -510,3 +510,98 @@ method = "remove"
|
|
|
510
510
|
|
|
511
511
|
${$add_button_template}
|
|
512
512
|
`;
|
|
513
|
+
// 自定义图片上传模板
|
|
514
|
+
export const $upload_image_template = `
|
|
515
|
+
[attributes]
|
|
516
|
+
labelVisible = false
|
|
517
|
+
[[template]]
|
|
518
|
+
component = "Container"
|
|
519
|
+
|
|
520
|
+
[[template.items]]
|
|
521
|
+
component = "WdButton"
|
|
522
|
+
[template.items.attributes]
|
|
523
|
+
icon = "td:upload"
|
|
524
|
+
iconType = "text-with-icon"
|
|
525
|
+
text = "上传"
|
|
526
|
+
variant = "outline"
|
|
527
|
+
|
|
528
|
+
[[template.items.listeners]]
|
|
529
|
+
eventName = "tap"
|
|
530
|
+
type = "platform"
|
|
531
|
+
[template.items.listeners.handler]
|
|
532
|
+
name = "invoke"
|
|
533
|
+
module = "platform"
|
|
534
|
+
[template.items.listeners.handler.params]
|
|
535
|
+
component = "{{$self.id}}"
|
|
536
|
+
method = "upload"
|
|
537
|
+
|
|
538
|
+
[[template.items]]
|
|
539
|
+
component = "Container"
|
|
540
|
+
[template.items.attributes.style]
|
|
541
|
+
marginTop = "10px"
|
|
542
|
+
display = "flex"
|
|
543
|
+
flexWrap = "wrap"
|
|
544
|
+
|
|
545
|
+
[[template.items.items]]
|
|
546
|
+
component = "Repeater"
|
|
547
|
+
|
|
548
|
+
[template.items.items.attributes]
|
|
549
|
+
":data" = "$w.{{$self.id}}?.previewFile||[]"
|
|
550
|
+
|
|
551
|
+
suffix = '{{$self.id}}'
|
|
552
|
+
forItem = 'item_{{$self.id}}'
|
|
553
|
+
forIndex = 'index_{{$self.id}}'
|
|
554
|
+
|
|
555
|
+
[[template.items.items.items]]
|
|
556
|
+
component = "Container"
|
|
557
|
+
|
|
558
|
+
[template.items.items.items.attributes.style]
|
|
559
|
+
margin = "5px"
|
|
560
|
+
padding = "10px"
|
|
561
|
+
border = "1px solid #d9d9d9"
|
|
562
|
+
flexShrink = 0
|
|
563
|
+
width = "102px"
|
|
564
|
+
height = "102px"
|
|
565
|
+
position = "relative"
|
|
566
|
+
|
|
567
|
+
[[template.items.items.items.items]]
|
|
568
|
+
component = "WdImage"
|
|
569
|
+
|
|
570
|
+
[template.items.items.items.items.attributes]
|
|
571
|
+
alt = "[图片]"
|
|
572
|
+
fit = "contain"
|
|
573
|
+
imgPreview = true
|
|
574
|
+
":src" = '$w.item_{{$self.id}}.tempUrl||$w.item_{{$self.id}}.cloudId'
|
|
575
|
+
|
|
576
|
+
[template.items.items.items.items.attributes.style]
|
|
577
|
+
width = "80px"
|
|
578
|
+
height = "80px"
|
|
579
|
+
|
|
580
|
+
[[template.items.items.items.items]]
|
|
581
|
+
component = "WdIcon"
|
|
582
|
+
|
|
583
|
+
[template.items.items.items.items.attributes]
|
|
584
|
+
name = "delete"
|
|
585
|
+
size = "sm"
|
|
586
|
+
|
|
587
|
+
[template.items.items.items.items.attributes.style]
|
|
588
|
+
position = "absolute"
|
|
589
|
+
right = "5px"
|
|
590
|
+
top = "5px"
|
|
591
|
+
|
|
592
|
+
[[template.items.items.items.items.listeners]]
|
|
593
|
+
eventName = "tap"
|
|
594
|
+
type = "platform"
|
|
595
|
+
|
|
596
|
+
[template.items.items.items.items.listeners.handler]
|
|
597
|
+
name = "invoke"
|
|
598
|
+
module = "platform"
|
|
599
|
+
|
|
600
|
+
[template.items.items.items.items.listeners.handler.params]
|
|
601
|
+
component = "{{$self.id}}"
|
|
602
|
+
method = "delete"
|
|
603
|
+
|
|
604
|
+
[template.items.items.items.items.listeners.handler.params.params]
|
|
605
|
+
":cloudId" = '$w.item_{{$self.id}}.cloudId'
|
|
606
|
+
|
|
607
|
+
`;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
@cloudbase/weda-ui v3.
|
|
2
|
+
@cloudbase/weda-ui v3.17.0
|
|
3
3
|
*/
|
|
4
4
|
@charset "UTF-8";@media (min-width:1024px){.weda-ui .weui-cells{font-size:1em}.weui .weui-cell_active:active{background-color:unset!important}}@font-face{font-family:lcap-icon;font-weight:400;font-style:normal;src:url(data:application/font-woff2;charset=utf-8;base64,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) format('woff2')}.wd-form--vertical-left .wedatea2td-form .weda-formcells__pc.horizontal,.wd-form--vertical-right .wedatea2td-form .weda-formcells__pc.horizontal,.wedatea2td-form--vertical .wd-form--horizontal-left .wd-form-item-wrap,.wedatea2td-form--vertical .wd-form--horizontal-right .wd-form-item-wrap,.wedatea2td-form--vertical .wd-form-item.wd-form-item--horizontal-left .wd-form-item-wrap,.wedatea2td-form--vertical .wd-form-item.wd-form-item--horizontal-right .wd-form-item-wrap,.wedatea2td-form--vertical .wedatea2td-form .weda-formcells__pc.horizontal{flex-direction:column}.g-swiper-item>div>*{max-width:100%;max-height:100%;object-fit:cover;max-width:100%;object-fit:cover;max-width:100%;max-height:100%;object-fit:cover;width:100%;height:auto;max-width:100%;object-fit:cover}.form-detail-wrap .form-detail-content-wrap .form-detail-group-header-container{display:flex;align-items:center;justify-content:space-between}.weda-graphic-card .weda-graphic-card__col .weda-graphic-card__title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.weda-graphic-card .weda-graphic-card__col .weda-graphic-card__desc{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.weda-menu .wedatea2td-menu--light .wedatea2td-menu__list li.is-selected>.wedatea2td-menu__item:hover,.wedatea2td-drawer .wedatea2td-menu--light .wedatea2td-menu__list li .wedatea2td-menu__item:hover{background-color:var(--weda-navigation-menu-hover-color)}.weda-menu-mobile .weda-menu__wrapper{display:flex;align-items:center;justify-content:space-between;box-shadow:0 2px 2px rgba(0,0,0,.05)}.weda-menu .wedatea2td-menu__text .menu-text,.weda-menu__drawer .wedatea2td-menu__text .menu-text{display:flex;justify-content:center;align-items:center}@media (max-width:1024px){.g-swiper .g-swiper__turn-next,.g-swiper .g-swiper__turn-pre{display:none}.modal-table-delete .wedatea2td-dialog__inner,.model-relation-selector-modal .wedatea2td-dialog__inner,.wedatea2td-dialog__inner{min-width:0;width:90%;margin:10px 0}.wedatea2td-form.model-form{width:100%}}.markdown-body .octicon{fill:currentColor}.markdown-body pre{word-wrap:normal}.wd-form-item.wd-pc-rich-text-root .ExEditor-basic,.wd-form-item.wd-pc-rich-text-root .exeditor-toolbar{background-color:inherit}.wd-add-relation-button-wrap{display:flex;align-items:center;color:var(--wd-color-brand,#0052d9);white-space:pre-wrap}.weda-import-csv-file-modal .file-json-map-wrap{display:flex;flex-direction:column;box-sizing:border-box}.weda-import-csv-file-modal .import-file-result-wrap .error-container{display:flex;flex-direction:column}.weda-import-csv-file-modal .import-file-result-wrap .error-content{flex:1}.wd-table-wrap-filter .wedatea2td-input:focus,.wd-table-wrap-filter .wedatea2td-input:hover,.wd-table-wrap-filter .wedatea2td-textarea-group:focus,.wd-table-wrap-filter .wedatea2td-textarea-group:hover,.wd-table-wrap-filter .wedatea2td-textarea:focus,.wd-table-wrap-filter .wedatea2td-textarea:hover,.wedatea2td-overlay .wedatea2td-checkbox:focus,.wedatea2td-overlay .wedatea2td-checkbox:hover,.wedatea2td-overlay input[type=checkbox]:focus,.wedatea2td-overlay input[type=checkbox]:hover{border-color:var(--wd-color-brand,#0052d9)}.weda-ui_mapChoose_search_input_clear{display:flex;justify-content:center}.form-select-map .wedatea2td-dialog__inner{box-shadow:none;min-width:100vw!important}.weda-ui-custom-calendar-op__end,.weda-ui-custom-calendar-op__start{display:flex;align-items:center}.weui-tag span{word-wrap:break-word;word-break:break-word}.weda-ui-user-select-container-list__start .depart-tree .wedatea2td-tree__node.is-selected>.wedatea2td-tree__node-content,.weda-ui-user-select-container-list__start .depart-tree .wedatea2td-tree__node.is-selected>.wedatea2td-tree__node-content .wedatea2td-tree__label,.weda-ui-user-select-container-list__start .wedatea2td-tree.wedatea2td-tree--checkbox-separate .wedatea2td-tree__node.is-selected>.wedatea2td-tree__node-content .wedatea2td-tree__label .wedatea2td-tree__label-title{background-color:var(--wd-color-brand-light,#d4e3fc)}.weda-select-user-dept-breadcrumb{display:flex;align-items:center}.form-location-con_disabled{opacity:.4}body{font-size:var(--wd-font-base)}@font-face{font-family:wd-lcap-icon;font-weight:400;font-style:normal;src:url(data:application/font-woff2;charset=utf-8;base64,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) format("woff2")}.t-icon{speak:none;text-transform:none;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wd-space-align-items--flex-start{align-items:flex-start;align-items:center;align-items:flex-end}.wd-space-justify-content--flex-start{justify-content:flex-start;justify-content:center;justify-content:flex-end}.wd-btn{--wd-btn-sm-padding:0.0625rem calc(var(--wd-space-base) * 2);--wd-btn-md-padding:0.25rem calc(var(--wd-space-base) * 4);--wd-btn-lg-padding:0.4375rem calc(var(--wd-space-base) * 6);--wd-btn-margin-top:0;--wd-btn-margin-top:0;--wd-btn-font-size-sm:var(--wd-font-size-2);--wd-btn-line-height-sm:1.5;--wd-btn-min-height-sm:24px;--wd-btn-font-size-md:var(--wd-font-size-3);--wd-btn-line-height-md:1.5;--wd-btn-min-height-md:32px;--wd-btn-font-size-lg:var(--wd-font-size-4);--wd-btn-line-height-lg:1.5;--wd-btn-min-height-lg:40px;--wd-btn-icon-space-sm:var(--wd-space-base);--wd-btn-icon-space-md:calc(var(--wd-space-base) * 2);--wd-btn-icon-space-lg:calc(var(--wd-space-base) * 3);--wd-btn-icon-size-sm:calc(var(--wd-btn-font-size-sm) + 0.125rem);--wd-btn-icon-size-md:calc(var(--wd-btn-font-size-md) + 0.125rem);--wd-btn-icon-size-lg:calc(var(--wd-btn-font-size-lg) + 0.25rem);--wd-btn-border-radius:var(--wd-border-radius);--wd-btn-color-text:var(--wd-color-text-default);--wd-btn-color-text-inverse:var(--wd-color-text-inverse);--wd-btn-color-text-hover:var(--wd-color-text-default);--wd-btn-color-text-active:var(--wd-color-text-default);--wd-btn-color-text-focus:var(--wd-color-text-default);--wd-btn-color-text-disabled:var(--wd-color-text-disabled);--wd-btn-color-brand:var(--wd-color-brand);--wd-btn-color-brand-hover:var(--wd-color-brand-hover);--wd-btn-color-brand-active:var(--wd-color-brand-active);--wd-btn-color-brand-focus:var(--wd-color-brand-focus);--wd-btn-color-brand-disabled:var(--wd-color-brand-disabled);--wd-btn-color-warning:var(--wd-color-warning);--wd-btn-color-warning-hover:var(--wd-color-warning-hover);--wd-btn-color-warning-active:var(--wd-color-warning-active);--wd-btn-color-warning-focus:var(--wd-color-warning-focus);--wd-btn-color-warning-disabled:var(--wd-color-warning-disabled);--wd-btn-color-error:var(--wd-color-error);--wd-btn-color-error-hover:var(--wd-color-error-hover);--wd-btn-color-error-active:var(--wd-color-error-active);--wd-btn-color-error-focus:var(--wd-color-error-focus);--wd-btn-color-error-disabled:var(--wd-color-error-disabled);--wd-btn-color-gray:var(
|
|
5
5
|
--wd-color-gray-1
|
|
@@ -31,7 +31,8 @@ function UploaderPc(props) {
|
|
|
31
31
|
});
|
|
32
32
|
}
|
|
33
33
|
export default function Uploader(props) {
|
|
34
|
-
|
|
34
|
+
// 数据管理后台中,使用value段传默认值
|
|
35
|
+
const { showShape, value, defaultValue } = props;
|
|
35
36
|
const [imgTypeCls, setImgTypeCls] = React.useState(null);
|
|
36
37
|
React.useEffect(() => {
|
|
37
38
|
// let shapeClass;
|
|
@@ -50,11 +51,13 @@ export default function Uploader(props) {
|
|
|
50
51
|
}
|
|
51
52
|
}, [showShape]);
|
|
52
53
|
const platform = usePlatform();
|
|
54
|
+
// 需要兼容 cloud:和https: 协议,需要兼容 字符串和字符串数组
|
|
55
|
+
const _value = value !== undefined ? value : defaultValue;
|
|
53
56
|
if ((props === null || props === void 0 ? void 0 : props.showType) === 'pc') {
|
|
54
|
-
return _jsx(UploaderPc, { imgTypeCls: imgTypeCls, ...props });
|
|
57
|
+
return _jsx(UploaderPc, { imgTypeCls: imgTypeCls, ...props, defaultValue: _value });
|
|
55
58
|
}
|
|
56
59
|
if ((props === null || props === void 0 ? void 0 : props.showType) === 'h5') {
|
|
57
|
-
return _jsx(UploaderH5, { imgTypeCls: imgTypeCls, ...props });
|
|
60
|
+
return _jsx(UploaderH5, { imgTypeCls: imgTypeCls, ...props, defaultValue: _value });
|
|
58
61
|
}
|
|
59
|
-
return platform === 'h5' ? (_jsx(UploaderH5, { imgTypeCls: imgTypeCls, ...props })) : (_jsx(UploaderPc, { imgTypeCls: imgTypeCls, ...props }));
|
|
62
|
+
return platform === 'h5' ? (_jsx(UploaderH5, { imgTypeCls: imgTypeCls, ...props, defaultValue: _value })) : (_jsx(UploaderPc, { imgTypeCls: imgTypeCls, ...props, defaultValue: _value }));
|
|
60
63
|
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { DataType, EventsType, PreviewFileItemType } from '../../../../../configs/components/wd-upload-image';
|
|
3
|
+
export type TempFileProps = PreviewFileItemType;
|
|
4
|
+
interface UploadProps extends EventsType {
|
|
5
|
+
name?: DataType['name'];
|
|
6
|
+
value?: DataType['value'] | string;
|
|
7
|
+
acceptTypes?: any;
|
|
8
|
+
capture?: any;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
readOnly?: boolean;
|
|
11
|
+
uploadPath?: string;
|
|
12
|
+
multiple?: boolean;
|
|
13
|
+
isCompressBeforeUpload?: DataType['isCompressBeforeUpload'];
|
|
14
|
+
compressQuality?: DataType['compressQuality'];
|
|
15
|
+
compressedHeight?: DataType['compressedHeight'];
|
|
16
|
+
compressedWidth?: DataType['compressedWidth'];
|
|
17
|
+
maxSize?: DataType['maxSize'];
|
|
18
|
+
maxUploadCount?: DataType['maxUploadCount'];
|
|
19
|
+
callbacks?: DataType['callbacks'];
|
|
20
|
+
onChange?: (val?: any) => void;
|
|
21
|
+
setUploadHandle?: (uploadHandle: any) => void;
|
|
22
|
+
children?: any;
|
|
23
|
+
}
|
|
24
|
+
export declare const IMAGE_TYPES: string[];
|
|
25
|
+
export declare const Upload: React.ForwardRefExoticComponent<UploadProps & React.RefAttributes<unknown>>;
|
|
26
|
+
export {};
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React, { forwardRef, useState, useCallback, useEffect, useImperativeHandle } from 'react';
|
|
3
|
+
import { getUuid } from '../../../../utils/tool';
|
|
4
|
+
import { upload as uploadAction, checkBeforeUpload, getPreviewFileMap, getInitTempFile, getBase64 } from '../util';
|
|
5
|
+
import { errorHandler } from '../../../../utils/error';
|
|
6
|
+
import { isNil } from '../../../../utils/lodash';
|
|
7
|
+
import { toBase64Uri } from '../../../../utils/file2base64';
|
|
8
|
+
import { randomStr } from '../../../../utils/platform';
|
|
9
|
+
// 默认图片类型
|
|
10
|
+
export const IMAGE_TYPES = [
|
|
11
|
+
'image/jpg',
|
|
12
|
+
'image/png',
|
|
13
|
+
'image/tif',
|
|
14
|
+
'image/bmp',
|
|
15
|
+
'image/jpeg',
|
|
16
|
+
'image/tiff',
|
|
17
|
+
'image/gif',
|
|
18
|
+
];
|
|
19
|
+
export const Upload = forwardRef(function Upload({ children, ...props }, ref) {
|
|
20
|
+
const { maxUploadCount, acceptTypes, multiple, maxSize, capture, disabled, readOnly, name, isCompressBeforeUpload, compressQuality, compressedHeight, compressedWidth, events, onChange, callbacks, setUploadHandle, value: _value, } = props;
|
|
21
|
+
const inputRef = React.useRef(null);
|
|
22
|
+
const [inputId, setInputId] = useState(() => {
|
|
23
|
+
return getUuid();
|
|
24
|
+
});
|
|
25
|
+
const accepts = React.useMemo(() => {
|
|
26
|
+
var _a;
|
|
27
|
+
return (acceptTypes === null || acceptTypes === void 0 ? void 0 : acceptTypes.length) === 0 ? IMAGE_TYPES.join(',') : (_a = Array.from(new Set(acceptTypes))) === null || _a === void 0 ? void 0 : _a.join(',');
|
|
28
|
+
}, [acceptTypes]);
|
|
29
|
+
const finalMaxImgCount = React.useMemo(() => {
|
|
30
|
+
// eslint-disable-next-line @typescript-eslint/no-magic-numbers
|
|
31
|
+
if (!multiple)
|
|
32
|
+
return 1;
|
|
33
|
+
return maxUploadCount;
|
|
34
|
+
}, [multiple, maxUploadCount]);
|
|
35
|
+
const value = React.useMemo(() => {
|
|
36
|
+
return [].concat(_value).filter((d) => typeof d === 'string' && d !== '');
|
|
37
|
+
}, [_value]);
|
|
38
|
+
// 预览文件列表
|
|
39
|
+
const [previewFile, updatePreviewFile] = useState(() => {
|
|
40
|
+
return getInitTempFile({ value });
|
|
41
|
+
});
|
|
42
|
+
const [config, updateConfig] = useState({
|
|
43
|
+
accepts,
|
|
44
|
+
disabled,
|
|
45
|
+
maxSize,
|
|
46
|
+
maxUploadCount: finalMaxImgCount,
|
|
47
|
+
isCompressBeforeUpload,
|
|
48
|
+
compressQuality,
|
|
49
|
+
compressedHeight,
|
|
50
|
+
compressedWidth,
|
|
51
|
+
});
|
|
52
|
+
const [initFlag, setInitFlag] = useState(false);
|
|
53
|
+
React.useEffect(() => {
|
|
54
|
+
// 预览文件map,缓存临时预览链接,优化上传体验
|
|
55
|
+
const previewFileMap = getPreviewFileMap(previewFile);
|
|
56
|
+
if (value.some((i) => !previewFileMap[i])) {
|
|
57
|
+
updatePreviewFile(getInitTempFile({ value }));
|
|
58
|
+
}
|
|
59
|
+
// value变化的时候判断是否需要重新初始化
|
|
60
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
61
|
+
}, [value]);
|
|
62
|
+
const [uploadInstance, setUploadInstance] = useState({
|
|
63
|
+
config,
|
|
64
|
+
});
|
|
65
|
+
const uploadChange = useCallback(async (e) => {
|
|
66
|
+
const { accepts, maxSize, maxUploadCount } = config;
|
|
67
|
+
let files = [...e.target.files];
|
|
68
|
+
const checked = checkBeforeUpload({
|
|
69
|
+
tempFile: previewFile,
|
|
70
|
+
files,
|
|
71
|
+
accepts,
|
|
72
|
+
maxSize,
|
|
73
|
+
maxUploadCount,
|
|
74
|
+
});
|
|
75
|
+
if (!checked) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
let shouldUploadToCos = true;
|
|
79
|
+
if (typeof (uploadInstance === null || uploadInstance === void 0 ? void 0 : uploadInstance.beforeUpload) === 'function') {
|
|
80
|
+
try {
|
|
81
|
+
const base64Uri = await Promise.all(files.map((file) => toBase64Uri(file)));
|
|
82
|
+
const ret = await uploadInstance.beforeUpload({ files, base64Uri });
|
|
83
|
+
if (typeof ret === 'boolean') {
|
|
84
|
+
shouldUploadToCos = ret;
|
|
85
|
+
}
|
|
86
|
+
else if (Array.isArray(ret) && ret.every((item) => item instanceof File)) {
|
|
87
|
+
files = ret;
|
|
88
|
+
}
|
|
89
|
+
else if (!isNil(ret)) {
|
|
90
|
+
throw new TypeError('web端返回值接受布尔值 / File对象数组');
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
errorHandler({
|
|
95
|
+
code: 'BEFORE_UPLOAD_ERROR',
|
|
96
|
+
error: err,
|
|
97
|
+
});
|
|
98
|
+
shouldUploadToCos = false;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (shouldUploadToCos === false) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
let tempFiles = files.map((i) => ({
|
|
105
|
+
file: i,
|
|
106
|
+
key: randomStr(),
|
|
107
|
+
progress: 0,
|
|
108
|
+
loading: true,
|
|
109
|
+
}));
|
|
110
|
+
tempFiles = await getBase64(tempFiles);
|
|
111
|
+
const allTempFile = [...previewFile, ...tempFiles];
|
|
112
|
+
updatePreviewFile(allTempFile);
|
|
113
|
+
await uploadAction(tempFiles, uploadInstance, allTempFile);
|
|
114
|
+
}, [config, previewFile, uploadInstance]);
|
|
115
|
+
const handleChange = useCallback((allFile = [], isDelete = false) => {
|
|
116
|
+
var _a;
|
|
117
|
+
updatePreviewFile(allFile);
|
|
118
|
+
const getTempFile = (allFile = []) => {
|
|
119
|
+
let value = allFile.map((i) => i === null || i === void 0 ? void 0 : i.cloudId).filter((j) => !!j);
|
|
120
|
+
value = !multiple ? value[0] || '' : value;
|
|
121
|
+
return value;
|
|
122
|
+
};
|
|
123
|
+
const value = getTempFile(allFile);
|
|
124
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(value);
|
|
125
|
+
(_a = events === null || events === void 0 ? void 0 : events.change) === null || _a === void 0 ? void 0 : _a.call(events, { value, isDelete });
|
|
126
|
+
setInputId(getUuid());
|
|
127
|
+
}, [events, multiple, onChange]);
|
|
128
|
+
// 点击上传
|
|
129
|
+
const onClick = useCallback(() => {
|
|
130
|
+
const el = inputRef;
|
|
131
|
+
if (!el || disabled || readOnly) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
el.current.click();
|
|
135
|
+
}, [disabled, readOnly]);
|
|
136
|
+
const deleteFile = useCallback(({ cloudId }) => {
|
|
137
|
+
const fileList = previewFile.filter((d) => d.cloudId !== cloudId);
|
|
138
|
+
handleChange(fileList, true);
|
|
139
|
+
}, [handleChange, previewFile]);
|
|
140
|
+
const destroy = useCallback(() => {
|
|
141
|
+
if (!uploadInstance)
|
|
142
|
+
return;
|
|
143
|
+
setUploadInstance(null);
|
|
144
|
+
}, [setUploadInstance, uploadInstance]);
|
|
145
|
+
const init = useCallback((config) => {
|
|
146
|
+
let _uploadInstance = uploadInstance;
|
|
147
|
+
if (_uploadInstance) {
|
|
148
|
+
destroy();
|
|
149
|
+
}
|
|
150
|
+
_uploadInstance = {
|
|
151
|
+
config,
|
|
152
|
+
onUploadProgress(item) {
|
|
153
|
+
updatePreviewFile((allTempFile) => allTempFile.map((i) => (i.key === item.key ? { ...i, ...item } : i)));
|
|
154
|
+
},
|
|
155
|
+
onComplete(result) {
|
|
156
|
+
handleChange(result);
|
|
157
|
+
},
|
|
158
|
+
onSuccess(item) {
|
|
159
|
+
var _a;
|
|
160
|
+
updatePreviewFile((allTempFile) => allTempFile.map((i) => (i.key === item.key ? { ...i, ...item } : i)));
|
|
161
|
+
(_a = events === null || events === void 0 ? void 0 : events.success) === null || _a === void 0 ? void 0 : _a.call(events, { value: item.cloudId, file: item.file });
|
|
162
|
+
},
|
|
163
|
+
onFail(err) {
|
|
164
|
+
events === null || events === void 0 ? void 0 : events.error(err);
|
|
165
|
+
},
|
|
166
|
+
beforeUpload: callbacks === null || callbacks === void 0 ? void 0 : callbacks.beforeUpload,
|
|
167
|
+
};
|
|
168
|
+
setUploadInstance(_uploadInstance);
|
|
169
|
+
}, [callbacks === null || callbacks === void 0 ? void 0 : callbacks.beforeUpload, destroy, events, handleChange, uploadInstance]);
|
|
170
|
+
useEffect(() => {
|
|
171
|
+
init(config);
|
|
172
|
+
setInitFlag(true);
|
|
173
|
+
return () => {
|
|
174
|
+
destroy();
|
|
175
|
+
};
|
|
176
|
+
}, [config]);
|
|
177
|
+
useEffect(() => {
|
|
178
|
+
if ((events === null || events === void 0 ? void 0 : events.onReady) && initFlag) {
|
|
179
|
+
// eslint-disable-next-line rulesdir/no-trigger-event-in-effect
|
|
180
|
+
events.onReady(uploadInstance);
|
|
181
|
+
}
|
|
182
|
+
// 仅初始化时触发一次
|
|
183
|
+
}, [initFlag]);
|
|
184
|
+
useImperativeHandle(ref, () => {
|
|
185
|
+
const uploadHandle = {
|
|
186
|
+
setConfig: ({ config: _config }) => {
|
|
187
|
+
updateConfig((config) => ({ ...config, ..._config }));
|
|
188
|
+
},
|
|
189
|
+
uploadInstance,
|
|
190
|
+
previewFile,
|
|
191
|
+
upload: onClick,
|
|
192
|
+
delete: deleteFile,
|
|
193
|
+
};
|
|
194
|
+
if (setUploadHandle) {
|
|
195
|
+
setUploadHandle(uploadHandle);
|
|
196
|
+
}
|
|
197
|
+
return uploadHandle;
|
|
198
|
+
}, [deleteFile, onClick, previewFile, setUploadHandle, uploadInstance]);
|
|
199
|
+
return (_jsxs(React.Fragment, { children: [_jsx("input", { ref: inputRef, name: name, disabled: disabled || readOnly, type: "file", onClick: (e) => e.stopPropagation(), style: { display: 'none' }, accept: accepts, multiple: multiple, onChange: uploadChange, ...(capture != null ? { capture } : {}) }, inputId), children] }));
|
|
200
|
+
});
|
|
@@ -10,7 +10,7 @@ export declare function ImageUploaderH5(props: H5UploaderProps): JSX.Element;
|
|
|
10
10
|
interface TempFileProps {
|
|
11
11
|
progress?: number;
|
|
12
12
|
loading?: boolean;
|
|
13
|
-
|
|
13
|
+
cloudId?: string;
|
|
14
14
|
tempUrl?: string;
|
|
15
15
|
key?: string;
|
|
16
16
|
}
|
|
@@ -31,5 +31,10 @@ export interface H5UploaderProps extends Except<CommonFormPropsType, 'events'>,
|
|
|
31
31
|
single?: boolean;
|
|
32
32
|
onChange?: (v: any) => void;
|
|
33
33
|
readOnly?: boolean;
|
|
34
|
+
uploadPath?: string;
|
|
35
|
+
value?: string[] | string;
|
|
36
|
+
tempFile?: any;
|
|
37
|
+
setTempFile?: any;
|
|
38
|
+
setUploadHandle?: (arg?: any) => void;
|
|
34
39
|
}
|
|
35
40
|
export {};
|
|
@@ -2,46 +2,31 @@ 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 { browserEnv
|
|
5
|
+
import { browserEnv } from '../../../utils/platform';
|
|
6
6
|
import { IMAGE_TYPES, encodeConvert } from './uploader.pc';
|
|
7
7
|
import { useTempUrl } from '../../../utils/hooks/use-cloud-id-temp-url';
|
|
8
|
-
import {
|
|
9
|
-
import { isNil } from '../../../utils/lodash';
|
|
10
|
-
import { useUploader } from './useUploadFile';
|
|
11
|
-
import { errorHandler } from '../../../utils/error';
|
|
12
|
-
import { checkAcceptedFiles } from './util';
|
|
8
|
+
import { Upload } from './upload';
|
|
13
9
|
/**
|
|
14
10
|
* H5端
|
|
15
11
|
*/
|
|
16
12
|
export function ImageUploaderH5(props) {
|
|
17
13
|
var _a;
|
|
18
|
-
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;
|
|
14
|
+
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, defaultValue, setUploadHandle: outSetUploadHandle, } = props;
|
|
19
15
|
const layout = _layout !== 'vertical' ? 'horizontal' : 'vertical';
|
|
20
16
|
const layoutCls = layout === 'horizontal' ? 'weda-formcells weui-flex' : '';
|
|
21
17
|
const cls = classNames({
|
|
22
18
|
'weda-ui': true,
|
|
23
19
|
[className]: className,
|
|
24
20
|
});
|
|
25
|
-
const
|
|
26
|
-
const
|
|
21
|
+
const uploadRef = React.useRef(null);
|
|
22
|
+
const [uploadHandle, setUploadHandle] = React.useState({});
|
|
23
|
+
const tempFile = React.useMemo(() => (uploadHandle === null || uploadHandle === void 0 ? void 0 : uploadHandle.previewFile) || [], [uploadHandle === null || uploadHandle === void 0 ? void 0 : uploadHandle.previewFile]);
|
|
24
|
+
const uploading = tempFile === null || tempFile === void 0 ? void 0 : tempFile.some((i) => i.loading);
|
|
27
25
|
const finalMaxImgCount = React.useMemo(() => {
|
|
28
26
|
if (single)
|
|
29
27
|
return 1;
|
|
30
28
|
return maxUploadCount;
|
|
31
29
|
}, [single, maxUploadCount]);
|
|
32
|
-
const deleteFile = (file) => {
|
|
33
|
-
const fileList = tempFile.filter((d) => d.key !== file.key);
|
|
34
|
-
handleChange(fileList, true);
|
|
35
|
-
};
|
|
36
|
-
const handleChange = (allFile = [], isDelete = false) => {
|
|
37
|
-
var _a;
|
|
38
|
-
const value = getTempFile(allFile);
|
|
39
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(value);
|
|
40
|
-
(_a = events === null || events === void 0 ? void 0 : events.change) === null || _a === void 0 ? void 0 : _a.call(events, { value, isDelete });
|
|
41
|
-
};
|
|
42
|
-
const accepts = React.useMemo(() => {
|
|
43
|
-
return acceptTypes.length === 0 ? IMAGE_TYPES : Array.from(new Set(acceptTypes));
|
|
44
|
-
}, [acceptTypes]);
|
|
45
30
|
const showAdd = React.useMemo(() => {
|
|
46
31
|
if (single) {
|
|
47
32
|
// single 模式时,当数组为空且不在上传文件过程中时显示
|
|
@@ -49,82 +34,29 @@ export function ImageUploaderH5(props) {
|
|
|
49
34
|
}
|
|
50
35
|
return tempFile.length < maxUploadCount;
|
|
51
36
|
}, [tempFile, single, maxUploadCount, uploading]);
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
if (
|
|
56
|
-
|
|
57
|
-
message: `上传图片类型错误`,
|
|
58
|
-
icon: 'none',
|
|
59
|
-
});
|
|
60
|
-
return false;
|
|
61
|
-
}
|
|
62
|
-
if (files.some((f) => f.size > maxSize * 1024 * 1024)) {
|
|
63
|
-
alertErrorMessage({
|
|
64
|
-
message: `请上传不超过 ${maxSize}M 的图片`,
|
|
65
|
-
icon: 'none',
|
|
66
|
-
});
|
|
67
|
-
return false;
|
|
37
|
+
const setUploadRef = React.useCallback((uploadHandle) => {
|
|
38
|
+
setUploadHandle(uploadHandle);
|
|
39
|
+
// 兼容云后台数据库中使用uploader组件,未传outSetUploadHandle
|
|
40
|
+
if (outSetUploadHandle) {
|
|
41
|
+
outSetUploadHandle(uploadHandle);
|
|
68
42
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
alertErrorMessage({
|
|
79
|
-
message: `最多只能上传${finalMaxImgCount}张图片`,
|
|
80
|
-
icon: 'none',
|
|
81
|
-
});
|
|
82
|
-
return false;
|
|
83
|
-
}
|
|
84
|
-
let shouldUploadToCos = true;
|
|
85
|
-
if (typeof (callbacks === null || callbacks === void 0 ? void 0 : callbacks.beforeUpload) === 'function') {
|
|
86
|
-
try {
|
|
87
|
-
const base64Uri = await Promise.all(files.map((file) => toBase64Uri(file)));
|
|
88
|
-
const ret = await callbacks.beforeUpload({ files, base64Uri });
|
|
89
|
-
if (typeof ret === 'boolean') {
|
|
90
|
-
shouldUploadToCos = ret;
|
|
91
|
-
}
|
|
92
|
-
else if (Array.isArray(ret) && ret.every((item) => item instanceof File)) {
|
|
93
|
-
files = ret;
|
|
94
|
-
}
|
|
95
|
-
else if (!isNil(ret)) {
|
|
96
|
-
throw new TypeError('web端返回值接受布尔值 / File对象数组');
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
catch (err) {
|
|
100
|
-
errorHandler({
|
|
101
|
-
code: 'BEFORE_UPLOAD_ERROR',
|
|
102
|
-
error: err,
|
|
103
|
-
});
|
|
104
|
-
shouldUploadToCos = false;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
if (shouldUploadToCos === false) {
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
const allFile = await upload(files);
|
|
111
|
-
handleChange(allFile);
|
|
112
|
-
};
|
|
113
|
-
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 }) }), _jsx("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: "-" }), showAdd && !readOnly && (_jsx("li", { className: `weui-uploader__input-box ${imgTypeCls}`, children: !disabled &&
|
|
114
|
-
sourceType !== 'album' &&
|
|
115
|
-
(sourceType === 'camera' ? (_jsx("input", { ref: inputRef, onClick: () => {
|
|
116
|
-
inputRef.current && (inputRef.current.value = '');
|
|
117
|
-
}, "data-testid": "uploaderh5_input", id: "uploaderInput", className: "weui-uploader__input", type: "file", accept: accepts.join(','), multiple: !single && !(browserEnv().android && browserEnv().weixin), capture: true, onChange: uploadChange })) : (_jsx("input", { ref: inputRef, onClick: () => {
|
|
118
|
-
inputRef.current && (inputRef.current.value = '');
|
|
119
|
-
}, "data-testid": "uploaderh5_input", id: "uploaderInput", className: "weui-uploader__input", type: "file", accept: accepts.join(','), multiple: !single && !(browserEnv().android && browserEnv().weixin), onChange: uploadChange }))) }))] }) })] }) }));
|
|
43
|
+
}, [outSetUploadHandle]);
|
|
44
|
+
const multiple = !single && !(browserEnv().android && browserEnv().weixin);
|
|
45
|
+
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 }) }), _jsx("div", { className: "weui-uploader__bd", children: _jsx(Upload, { ...props, acceptTypes: acceptTypes, events: events, capture: sourceType === 'camera' ? 'capture' : null, multiple: multiple, maxSize: maxSize, maxUploadCount: maxUploadCount, disabled: disabled, onChange: onChange, callbacks: callbacks, ref: uploadRef, value: defaultValue, setUploadHandle: setUploadRef, 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: (file) => {
|
|
46
|
+
var _a;
|
|
47
|
+
(_a = uploadRef === null || uploadRef === void 0 ? void 0 : uploadRef.current) === null || _a === void 0 ? void 0 : _a.delete({ cloudId: file.cloudId });
|
|
48
|
+
}, disabled: disabled || readOnly || sourceType === 'album', imgTypeCls: imgTypeCls }, f === null || f === void 0 ? void 0 : f.cloudId))), tempFile.length < 1 && readOnly && _jsx(_Fragment, { children: "-" }), showAdd && !readOnly && (_jsx("li", { className: `weui-uploader__input-box ${imgTypeCls}`, children: !disabled && sourceType !== 'album' && (_jsx("span", { onClick: () => {
|
|
49
|
+
var _a;
|
|
50
|
+
(_a = uploadRef === null || uploadRef === void 0 ? void 0 : uploadRef.current) === null || _a === void 0 ? void 0 : _a.upload();
|
|
51
|
+
}, "data-testid": "uploaderh5_input", id: "uploaderInput", className: "weui-uploader__input" })) }))] }) }) })] }) }));
|
|
120
52
|
}
|
|
121
53
|
function SingleImage({ deleteBySrc, disabled, imgTypeCls, tempFile }) {
|
|
122
|
-
const { progress, loading,
|
|
54
|
+
const { progress, loading, cloudId, tempUrl } = tempFile;
|
|
123
55
|
const cls = classNames({
|
|
124
56
|
'weui-uploader__file': true,
|
|
125
57
|
'weui-uploader__file_status': loading,
|
|
126
58
|
});
|
|
127
|
-
const src =
|
|
59
|
+
const src = cloudId !== null && cloudId !== void 0 ? cloudId : tempUrl;
|
|
128
60
|
const { data: realSrc, error } = useTempUrl(src);
|
|
129
61
|
const encodeSrc = encodeConvert(realSrc !== null && realSrc !== void 0 ? realSrc : tempUrl);
|
|
130
62
|
// 圆括号冲突,加上引号引用url地址
|
|
@@ -145,11 +77,11 @@ function SingleImage({ deleteBySrc, disabled, imgTypeCls, tempFile }) {
|
|
|
145
77
|
},
|
|
146
78
|
});
|
|
147
79
|
};
|
|
148
|
-
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, "%"] })] }));
|
|
80
|
+
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, "%"] })] }, cloudId));
|
|
149
81
|
}
|
|
150
82
|
const UploaderLabel = ({ layout, label, currentCount, maxCount, requiredFlag, labelVisible }) => {
|
|
151
83
|
if (layout === 'horizontal') {
|
|
152
|
-
return (_jsx(React.Fragment, { children:
|
|
84
|
+
return (_jsx(React.Fragment, { children: labelVisible && (_jsx("div", { className: "weda-formcells__label weui-cell", children: _jsxs("div", { children: [requiredFlag && _jsx("label", { className: "weda-formcells__flag", children: "*" }), _jsx("p", { className: "weui-uploader__title", children: label }), _jsxs("div", { className: "weui-uploader__info", children: [_jsx("span", { id: "uploadCount", children: currentCount }), "/", maxCount] })] }) })) }));
|
|
153
85
|
}
|
|
154
|
-
return (_jsx(React.Fragment, { children:
|
|
86
|
+
return (_jsx(React.Fragment, { children: labelVisible && (_jsxs("div", { className: "weda-formcells__label weui-cell", children: [_jsxs("div", { className: "weui-uploader__label", children: [requiredFlag && _jsx("label", { className: "weda-formcells__flag", children: "*" }), _jsx("p", { className: "weui-uploader__title", children: label })] }), _jsxs("div", { className: "weui-uploader__info", children: [_jsx("span", { id: "uploadCount", children: currentCount }), "/", maxCount] })] })) }));
|
|
155
87
|
};
|