@@ -73,7 +92,7 @@ const onPreview = () => {
{
button
class="o-upload-icon-btn o-upload-icon-retry"
:icon="IconRefresh"
- @click="onFileUploadRetry(props.file)"
+ @click="onFileUploadRetry"
:title="t('upload.retry')"
/>
{
@click="onPreview"
:title="t('upload.preview')"
/>
-
+
{
:icon="IconEdit"
v-if="props.file.status === 'finished'"
class="o-upload-icon-btn o-upload-icon-edit"
- @click="onFileReplace(props.file)"
+ @click="onFileReplace"
:title="t('upload.edit')"
/>
-
+
-
@@ -117,14 +135,23 @@ const onPreview = () => {
:class="{
'is-error': props.file.status === 'failed',
}"
+ @click="onItemClick"
>
-
+
+
{{ props.file.name }}
-
+
{
button
class="o-upload-row-icon o-upload-icon-hover-in o-upload-icon-retry"
:icon="IconRefresh"
- @click="onFileUploadRetry(props.file)"
+ @click="onFileUploadRetry"
:title="t('upload.retry')"
/>
diff --git a/packages/opendesign/src/upload/__demo__/TheIndex.vue b/packages/opendesign/src/upload/__demo__/TheIndex.vue
index 1a1271a007899fa85ef33b8c6fe53b8fe6a0dcf2..516c48c4a0c5f584015dff9eae5c57704714ef1b 100644
--- a/packages/opendesign/src/upload/__demo__/TheIndex.vue
+++ b/packages/opendesign/src/upload/__demo__/TheIndex.vue
@@ -3,11 +3,13 @@ import '../style';
import UploadBasic from './UploadBasic.vue';
import UploadSlots from './UploadSlots.vue';
+import UploadEvent from './UploadEvent.vue';
+
diff --git a/packages/opendesign/src/upload/__demo__/UploadEvent.vue b/packages/opendesign/src/upload/__demo__/UploadEvent.vue
new file mode 100644
index 0000000000000000000000000000000000000000..982b105bcb9f9ceb22d338ae7c42a17106c541e1
--- /dev/null
+++ b/packages/opendesign/src/upload/__demo__/UploadEvent.vue
@@ -0,0 +1,155 @@
+
+
+ Event
+ 上传成功率85% 上传时间:10秒
+
+
+
diff --git a/packages/opendesign/src/upload/__demo__/upload.ts b/packages/opendesign/src/upload/__demo__/upload.ts
index 1ae8edbda325b0118476d8a9fce5a442debcd313..ca5f805b8539427928e12ba5360cb3f33c6dfd17 100644
--- a/packages/opendesign/src/upload/__demo__/upload.ts
+++ b/packages/opendesign/src/upload/__demo__/upload.ts
@@ -25,16 +25,18 @@ export const onAfterSelect = (fileList: FileList): Promise
=> {
);
};
+const SUCCESS_RATE = 0.9;
+const UPLOAD_SPEED = 0.05;
export const mockUpload = (file?: File, onFinished?: (success: boolean) => void, onProgress?: (p: number) => void) => {
if (!file) {
return;
}
let c = 0;
const size = file.size;
- const speed = Math.floor(size * 0.01);
+ const speed = Math.floor(size * UPLOAD_SPEED);
const timer = setInterval(() => {
const r = Math.random();
- if (r > 0.999) {
+ if (r > SUCCESS_RATE) {
console.log(r);
clearInterval(timer);
diff --git a/packages/opendesign/src/upload/style/style.scss b/packages/opendesign/src/upload/style/style.scss
index 2abf46c935df0bac17c157e9b383084296e1a917..de3cc77976ec076fe357da2e412f923c3c8c2bc1 100644
--- a/packages/opendesign/src/upload/style/style.scss
+++ b/packages/opendesign/src/upload/style/style.scss
@@ -35,6 +35,7 @@
.o-upload-row-item {
display: flex;
+ align-items: center;
margin-top: 8px;
padding: 0 4px;
border-radius: var(--upload-item-radius);
@@ -47,6 +48,7 @@
}
}
&.is-error {
+ background-color: var(--upload-item-bg-hover);
.o-upload-icon-hover-in {
opacity: 1;
}
@@ -54,6 +56,12 @@
+ .o-upload-item-tip {
padding-left: 24px;
}
+
+ .o-upload-thumbnail {
+ width: var(--upload-item-picture-size);
+ height: var(--upload-item-picture-size);
+ margin-right: 8px;
+ }
}
.o-upload-row-label {
@@ -327,49 +335,3 @@
border: var(--upload-card-border-error);
}
}
-.o-upload-thumbnail {
- width: 100%;
- height: 100%;
- object-fit: var(--upload-card-img-fit);
- border-radius: inherit;
-}
-.o-upload-icon-file {
- font-size: var(--upload-icon-size-xl);
-}
-.o-upload-card-icons {
- position: absolute;
- left: 0;
- right: 0;
- bottom: 0;
- top: 0;
-
- display: flex;
- align-items: center;
- justify-content: center;
- color: var(--o-color-info1-inverse);
- font-size: var(--upload-icon-size-l);
-
- background-color: var(--upload-card-mask);
-
- opacity: 0;
- transition: opacity var(--o-easing-standard-in) var(--o-duration-m1);
-
- &:hover,
- &.is-show {
- opacity: 1;
- }
-
- > * + * {
- margin-left: 12px;
- }
-
- > .o-upload-icon-btn {
- cursor: pointer;
- &:hover {
- color: var(--upload-card-icon-color-hover);
- }
- &:active {
- color: var(--upload-card-icon-color-active);
- }
- }
-}
diff --git a/packages/opendesign/src/upload/style/var.scss b/packages/opendesign/src/upload/style/var.scss
index fa295694663a8f83af295bbe37ad84e6bde58bde..aa3f296a376eea58e8ac4811da225d0be9ee0ea1 100644
--- a/packages/opendesign/src/upload/style/var.scss
+++ b/packages/opendesign/src/upload/style/var.scss
@@ -9,6 +9,7 @@
--upload-item-bg-hover: var(--o-color-control2-light);
--upload-item-radius: var(--o-radius_control-s);
+ --upload-item-picture-size: var(--o-icon_size-2xl);
--upload-progress-height: 1px;
--upload-progress-radius: var(--upload-progress-height);
diff --git a/packages/opendesign/src/upload/types.ts b/packages/opendesign/src/upload/types.ts
index 73a10801e5ef07d0d3c6194a48037674569700ae..e2dd058285a19fdfd92c25391a9c7656ec8bee85 100644
--- a/packages/opendesign/src/upload/types.ts
+++ b/packages/opendesign/src/upload/types.ts
@@ -7,7 +7,7 @@ export const UploadFileStatusTypes = ['pending', 'uploading', 'finished', 'faile
export type UploadFileStatusT = (typeof UploadFileStatusTypes)[number];
export interface UploadFileT {
- id: string;
+ id: string | number;
name: string;
file?: File; // 上传文件
status?: UploadFileStatusT; // 校验/上传结果