Skip to content

Commit 66a621f

Browse files
committed
feat(Upload): add draggable prop
1 parent d0e2681 commit 66a621f

File tree

6 files changed

+196
-0
lines changed

6 files changed

+196
-0
lines changed

db/TDesign.db

0 Bytes
Binary file not shown.

packages/products/tdesign-mobile-vue/src/upload/props.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ export default {
5252
type: Boolean,
5353
default: undefined,
5454
},
55+
/** 是否支持拖拽排序 */
56+
draggable: Boolean,
5557
/** 已上传文件列表,同 `value`。TS 类型:`UploadFile` */
5658
files: {
5759
type: Array as PropType<TdUploadProps['files']>,

packages/products/tdesign-mobile-vue/src/upload/type.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@ export interface TdUploadProps<T extends UploadFile = UploadFile> {
5454
* 是否禁用组件
5555
*/
5656
disabled?: boolean;
57+
/**
58+
* 是否支持拖拽排序
59+
* @default false
60+
*/
61+
draggable?: boolean;
5762
/**
5863
* 已上传文件列表,同 `value`。TS 类型:`UploadFile`
5964
* @default []

packages/products/tdesign-mobile-vue/src/upload/upload.en-US.md

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,79 @@ type | String | - | \- | N
7373
uploadTime | String | - | upload time | N
7474
url | String | - | \- | N
7575
`PlainObject` | \- | - | `PlainObject` is not an attribute of UploadFile,it means you can add and attributes to UploadFile, `type PlainObject = {[key: string]: any}`' | N
76+
77+
## API
78+
79+
80+
### Upload Props
81+
82+
name | type | default | description | required
83+
-- | -- | -- | -- | --
84+
accept | String | - | File types that can be accepted. [W3C](https://www.w3schools.com/tags/att_input_accept.asp)[MDN](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/Input/file) | N
85+
action | String | - | Uploading URL | N
86+
addBtn | Boolean | true | \- | N
87+
addContent | String / Slot / Function | - | Typescript:`string \| TNode`[see more ts definition](https://github.com/Tencent/tdesign-mobile-vue/blob/develop/src/common.ts) | N
88+
allowUploadDuplicateFile | Boolean | false | allow to upload duplicate name files | N
89+
autoUpload | Boolean | true | post upload request automatically after files being selected | N
90+
beforeUpload | Function | - | stop one of files to upload。Typescript:`(file: UploadFile) => boolean \| Promise<boolean>` | N
91+
capture | String | - | \- | N
92+
data | Object | - | extra request data of uploading. `formatRequest` can redefine all request data。Typescript:`Record<string, any> \| ((files: UploadFile[]) => Record<string, any>)` | N
93+
disabled | Boolean | undefined | make upload to be disabled | N
94+
draggable | Boolean | false | Whether to enable drag-and-drop sorting | N
95+
files | Array | [] | `v-model:files` is supported。Typescript:`Array<T>` | N
96+
defaultFiles | Array | [] | uncontrolled property。Typescript:`Array<T>` | N
97+
format | Function | - | to redefine `UploadFile` data structure。Typescript:`(file: File) => UploadFile` | N
98+
formatRequest | Function | - | redefine request data。Typescript:`(requestData: { [key: string]: any }) => { [key: string]: any }` | N
99+
formatResponse | Function | - | redefine response data structure。Typescript:`(response: any, context: FormatResponseContext) => ResponseType` `type ResponseType = { error?: string; url?: string } & Record<string, any>` ` interface FormatResponseContext { file: UploadFile; currentFiles?: UploadFile[] }`[see more ts definition](https://github.com/Tencent/tdesign-mobile-vue/tree/develop/src/upload/type.ts) | N
100+
headers | Object | - | HTTP Request Header。Typescript:`{[key: string]: string}` | N
101+
imageProps | Object | - | Typescript:`ImageProps`[Image API Documents](./image?tab=api)[see more ts definition](https://github.com/Tencent/tdesign-mobile-vue/tree/develop/src/upload/type.ts) | N
102+
max | Number | 0 | max count of files limit | N
103+
method | String | POST | HTTP request method。options: POST/GET/PUT/OPTIONS/PATCH/post/get/put/options/patch | N
104+
multiple | Boolean | false | multiple files uploading | N
105+
preview | Boolean | true | `1.6.0` | N
106+
removeBtn | Boolean | true | \- | N
107+
requestMethod | Function | - | custom upload request method。Typescript:`(files: UploadFile \| UploadFile[]) => Promise<RequestMethodResponse>` `interface RequestMethodResponse { status: 'success' \| 'fail'; error?: string; response: { url?: string; files?: UploadFile[]; [key: string]: any } }`[see more ts definition](https://github.com/Tencent/tdesign-mobile-vue/tree/develop/src/upload/type.ts) | N
108+
sizeLimit | Number / Object | - | files size limit。Typescript:`number \| SizeLimitObj` `interface SizeLimitObj { size: number; unit: SizeUnit ; message?: string }` `type SizeUnitArray = ['B', 'KB', 'MB', 'GB']` `type SizeUnit = SizeUnitArray[number]`[see more ts definition](https://github.com/Tencent/tdesign-mobile-vue/tree/develop/src/upload/type.ts) | N
109+
useMockProgress | Boolean | true | use mock progress, instead of real progress | N
110+
value | Array | [] | file list。`v-model` and `v-model:value` is supported。Typescript:`Array<T>` | N
111+
defaultValue | Array | [] | file list。uncontrolled property。Typescript:`Array<T>` | N
112+
withCredentials | Boolean | false | uploading request with cookie | N
113+
onChange | Function | | Typescript:`(value: Array<T>, context: UploadChangeContext) => void`<br/>trigger on uploaded files change。[see more ts definition](https://github.com/Tencent/tdesign-mobile-vue/tree/develop/src/upload/type.ts)。<br/>`interface UploadChangeContext { e?: MouseEvent \| ProgressEvent; response?: any; trigger: UploadChangeTrigger; index?: number; file?: UploadFile; files?: UploadFile[] }`<br/><br/>`type UploadChangeTrigger = 'add' \| 'remove' \| 'abort' \| 'progress-success' \| 'progress' \| 'progress-fail'`<br/> | N
114+
onClickUpload | Function | | Typescript:`(context: { e: MouseEvent }) => void`<br/> | N
115+
onFail | Function | | Typescript:`(options: UploadFailContext) => void`<br/>`response.error` used for error tips, `formatResponse` can format `response`[see more ts definition](https://github.com/Tencent/tdesign-mobile-vue/tree/develop/src/upload/type.ts)。<br/>`interface UploadFailContext { e?: ProgressEvent; failedFiles: UploadFile[]; currentFiles: UploadFile[]; response?: any; file: UploadFile; XMLHttpRequest?: XMLHttpRequest}`<br/> | N
116+
onPreview | Function | | Typescript:`(options: { file: UploadFile; index: number; e: MouseEvent }) => void`<br/>trigger on preview elements click | N
117+
onProgress | Function | | Typescript:`(options: ProgressContext) => void`<br/>uploading request progress event。[see more ts definition](https://github.com/Tencent/tdesign-mobile-vue/tree/develop/src/upload/type.ts)。<br/>`interface ProgressContext { e?: ProgressEvent; file?: UploadFile; currentFiles: UploadFile[]; percent: number; type: UploadProgressType; XMLHttpRequest?: XMLHttpRequest }`<br/><br/>`type UploadProgressType = 'real' \| 'mock'`<br/> | N
118+
onRemove | Function | | Typescript:`(context: UploadRemoveContext) => void`<br/>trigger on file removed。[see more ts definition](https://github.com/Tencent/tdesign-mobile-vue/tree/develop/src/upload/type.ts)。<br/>`interface UploadRemoveContext { index?: number; file?: UploadFile; e: MouseEvent }`<br/> | N
119+
onSelectChange | Function | | Typescript:`(files: File[], context: UploadSelectChangeContext) => void`<br/>trigger after file choose and before upload。[see more ts definition](https://github.com/Tencent/tdesign-mobile-vue/tree/develop/src/upload/type.ts)。<br/>`interface UploadSelectChangeContext { currentSelectedFiles: UploadFile[] }`<br/> | N
120+
onSuccess | Function | | Typescript:`(context: SuccessContext) => void`<br/>trigger on all files uploaded successfully。[see more ts definition](https://github.com/Tencent/tdesign-mobile-vue/tree/develop/src/upload/type.ts)。<br/>`interface SuccessContext { e?: ProgressEvent; file?: UploadFile; fileList?: UploadFile[]; currentFiles?: UploadFile[]; response?: any; results?: SuccessContext[]; XMLHttpRequest?: XMLHttpRequest }`<br/> | N
121+
onValidate | Function | | Typescript:`(context: { type: UploadValidateType, files: UploadFile[] }) => void`<br/>trigger on length over limit, or trigger on file size over limit。[see more ts definition](https://github.com/Tencent/tdesign-mobile-vue/tree/develop/src/upload/type.ts)。<br/>`type UploadValidateType = 'FILE_OVER_SIZE_LIMIT' \| 'FILES_OVER_LENGTH_LIMIT' \| 'FILTER_FILE_SAME_NAME' \| 'BEFORE_ALL_FILES_UPLOAD' \| 'CUSTOM_BEFORE_UPLOAD'`<br/> | N
122+
123+
### Upload Events
124+
125+
name | params | description
126+
-- | -- | --
127+
change | `(value: Array<T>, context: UploadChangeContext)` | trigger on uploaded files change。[see more ts definition](https://github.com/Tencent/tdesign-mobile-vue/tree/develop/src/upload/type.ts)。<br/>`interface UploadChangeContext { e?: MouseEvent \| ProgressEvent; response?: any; trigger: UploadChangeTrigger; index?: number; file?: UploadFile; files?: UploadFile[] }`<br/><br/>`type UploadChangeTrigger = 'add' \| 'remove' \| 'abort' \| 'progress-success' \| 'progress' \| 'progress-fail'`<br/>
128+
click-upload | `(context: { e: MouseEvent })` | \-
129+
fail | `(options: UploadFailContext)` | `response.error` used for error tips, `formatResponse` can format `response`[see more ts definition](https://github.com/Tencent/tdesign-mobile-vue/tree/develop/src/upload/type.ts)。<br/>`interface UploadFailContext { e?: ProgressEvent; failedFiles: UploadFile[]; currentFiles: UploadFile[]; response?: any; file: UploadFile; XMLHttpRequest?: XMLHttpRequest}`<br/>
130+
preview | `(options: { file: UploadFile; index: number; e: MouseEvent })` | trigger on preview elements click
131+
progress | `(options: ProgressContext)` | uploading request progress event。[see more ts definition](https://github.com/Tencent/tdesign-mobile-vue/tree/develop/src/upload/type.ts)。<br/>`interface ProgressContext { e?: ProgressEvent; file?: UploadFile; currentFiles: UploadFile[]; percent: number; type: UploadProgressType; XMLHttpRequest?: XMLHttpRequest }`<br/><br/>`type UploadProgressType = 'real' \| 'mock'`<br/>
132+
remove | `(context: UploadRemoveContext)` | trigger on file removed。[see more ts definition](https://github.com/Tencent/tdesign-mobile-vue/tree/develop/src/upload/type.ts)。<br/>`interface UploadRemoveContext { index?: number; file?: UploadFile; e: MouseEvent }`<br/>
133+
select-change | `(files: File[], context: UploadSelectChangeContext)` | trigger after file choose and before upload。[see more ts definition](https://github.com/Tencent/tdesign-mobile-vue/tree/develop/src/upload/type.ts)。<br/>`interface UploadSelectChangeContext { currentSelectedFiles: UploadFile[] }`<br/>
134+
success | `(context: SuccessContext)` | trigger on all files uploaded successfully。[see more ts definition](https://github.com/Tencent/tdesign-mobile-vue/tree/develop/src/upload/type.ts)。<br/>`interface SuccessContext { e?: ProgressEvent; file?: UploadFile; fileList?: UploadFile[]; currentFiles?: UploadFile[]; response?: any; results?: SuccessContext[]; XMLHttpRequest?: XMLHttpRequest }`<br/>
135+
validate | `(context: { type: UploadValidateType, files: UploadFile[] })` | trigger on length over limit, or trigger on file size over limit。[see more ts definition](https://github.com/Tencent/tdesign-mobile-vue/tree/develop/src/upload/type.ts)。<br/>`type UploadValidateType = 'FILE_OVER_SIZE_LIMIT' \| 'FILES_OVER_LENGTH_LIMIT' \| 'FILTER_FILE_SAME_NAME' \| 'BEFORE_ALL_FILES_UPLOAD' \| 'CUSTOM_BEFORE_UPLOAD'`<br/>
136+
137+
### UploadFile
138+
139+
name | type | default | description | required
140+
-- | -- | -- | -- | --
141+
lastModified | Number | - | \- | N
142+
name | String | - | \- | N
143+
percent | Number | - | \- | N
144+
raw | Object | - | Typescript:`File` | N
145+
response | Object | - | Typescript:`{ [key: string]: any }` | N
146+
size | Number | - | \- | N
147+
status | String | - | Typescript:` 'success' \| 'fail' \| 'progress' \| 'waiting'` | N
148+
type | String | - | \- | N
149+
uploadTime | String | - | upload time | N
150+
url | String | - | \- | N
151+
`PlainObject` | \- | - | `PlainObject` is not an attribute of UploadFile,it means you can add and attributes to UploadFile, `type PlainObject = {[key: string]: any}`' | N

0 commit comments

Comments
 (0)