@mijadesign/nut-mcp 1.0.0-alpha.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/README.md +147 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +16 -0
- package/dist/services/aliases.service.d.ts +1 -0
- package/dist/services/aliases.service.js +19 -0
- package/dist/services/doc-parser.service.d.ts +3 -0
- package/dist/services/doc-parser.service.js +162 -0
- package/dist/services/index.services.d.ts +3 -0
- package/dist/services/index.services.js +71 -0
- package/dist/services/paths.service.d.ts +5 -0
- package/dist/services/paths.service.js +18 -0
- package/dist/tools/base.tool.d.ts +8 -0
- package/dist/tools/base.tool.js +27 -0
- package/dist/tools/get-component-doc.tool.d.ts +12 -0
- package/dist/tools/get-component-doc.tool.js +40 -0
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/index.js +4 -0
- package/dist/tools/list-components.tool.d.ts +8 -0
- package/dist/tools/list-components.tool.js +32 -0
- package/dist/tools/search-components.tool.d.ts +12 -0
- package/dist/tools/search-components.tool.js +61 -0
- package/dist/types/index.d.ts +33 -0
- package/dist/types/index.js +1 -0
- package/docs/docs/aliases.json +59 -0
- package/docs/docs/components/base/button/index.md +415 -0
- package/docs/docs/components/base/cell/index.md +279 -0
- package/docs/docs/components/base/configprovider/index.md +215 -0
- package/docs/docs/components/base/image/index.md +282 -0
- package/docs/docs/components/base/overlay/index.md +288 -0
- package/docs/docs/components/dentry/cascader/index.md +1080 -0
- package/docs/docs/components/dentry/checkbox/index.md +842 -0
- package/docs/docs/components/dentry/datepicker/index.md +489 -0
- package/docs/docs/components/dentry/form/index.md +457 -0
- package/docs/docs/components/dentry/input/index.md +257 -0
- package/docs/docs/components/dentry/picker/index.md +621 -0
- package/docs/docs/components/dentry/radio/index.md +364 -0
- package/docs/docs/components/dentry/searchbar/index.md +317 -0
- package/docs/docs/components/dentry/selector/index.md +295 -0
- package/docs/docs/components/dentry/switch/index.md +300 -0
- package/docs/docs/components/dentry/textarea/index.md +231 -0
- package/docs/docs/components/dentry/uploader/index.md +745 -0
- package/docs/docs/components/exhibition/collapse/index.md +339 -0
- package/docs/docs/components/exhibition/swiper/index.md +385 -0
- package/docs/docs/components/exhibition/tag/index.md +253 -0
- package/docs/docs/components/feedback/dialog/index.md +306 -0
- package/docs/docs/components/feedback/drag/index.md +164 -0
- package/docs/docs/components/feedback/empty/index.md +211 -0
- package/docs/docs/components/feedback/infiniteloading/index.md +397 -0
- package/docs/docs/components/feedback/noticebar/index.md +175 -0
- package/docs/docs/components/feedback/popup/index.md +563 -0
- package/docs/docs/components/feedback/pulltorefresh/index.md +254 -0
- package/docs/docs/components/feedback/toast/index.md +355 -0
- package/docs/docs/components/layout/divider/index.md +162 -0
- package/docs/docs/components/layout/grid/index.md +386 -0
- package/docs/docs/components/layout/space/index.md +196 -0
- package/docs/docs/components/nav/tabs/index.md +955 -0
- package/docs/docs/components-index.json +233 -0
- package/package.json +34 -0
|
@@ -0,0 +1,745 @@
|
|
|
1
|
+
---
|
|
2
|
+
order: 27
|
|
3
|
+
demoUrl: 'https://frontend.mishudata.com/mobile/demo/#/dentry/pages/uploader/index'
|
|
4
|
+
group:
|
|
5
|
+
title: 数据录入
|
|
6
|
+
order: 5
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Uploader 上传 <Badge>2.0.0</Badge>
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
用于将本地的图片或文件上传至服务器。
|
|
13
|
+
|
|
14
|
+
## 引入
|
|
15
|
+
|
|
16
|
+
```tsx
|
|
17
|
+
import { Uploader } from '@mijadesign/mjui-react-taro';
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## 示例代码
|
|
21
|
+
|
|
22
|
+
### 基础用法
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
```tsx
|
|
26
|
+
import { AddFill } from '@mijadesign/mobile-icons'
|
|
27
|
+
import { FileItem, Uploader } from '@mijadesign/mjui-react-taro'
|
|
28
|
+
import React, { useState } from 'react'
|
|
29
|
+
|
|
30
|
+
const Demo1 = () => {
|
|
31
|
+
const uploadUrl = 'https://my-json-server.typicode.com/linrufeng/demo/posts'
|
|
32
|
+
const onStart = () => {
|
|
33
|
+
console.log('start触发')
|
|
34
|
+
}
|
|
35
|
+
const [list, setList] = useState<FileItem[]>([])
|
|
36
|
+
return (
|
|
37
|
+
<>
|
|
38
|
+
<div style={{ marginBottom: '10px' }}>点击唤起相册支持拍照和添加图片</div>
|
|
39
|
+
<div style={{ display: 'flex', flexDirection: 'row', flexWrap: 'wrap', gap: '12px' }}>
|
|
40
|
+
<Uploader
|
|
41
|
+
value={list}
|
|
42
|
+
onChange={(files) => {
|
|
43
|
+
const newFiles: FileItem[] = files.map((file) => ({
|
|
44
|
+
...file,
|
|
45
|
+
status: 'success',
|
|
46
|
+
}))
|
|
47
|
+
setTimeout(() => {
|
|
48
|
+
setList(newFiles)
|
|
49
|
+
}, 2000)
|
|
50
|
+
}}
|
|
51
|
+
uploadIcon={<AddFill size={20} color="#006DFC" />}
|
|
52
|
+
uploadLabel={<div style={{ textAlign: 'center' }}>点击选择图片上传</div>}
|
|
53
|
+
onStart={onStart}
|
|
54
|
+
/>
|
|
55
|
+
<Uploader url={uploadUrl} onStart={onStart} />
|
|
56
|
+
<Uploader url={uploadUrl} uploadIcon={<AddFill size={20} color="#006DFC" />} onStart={onStart} />
|
|
57
|
+
</div>
|
|
58
|
+
</>
|
|
59
|
+
)
|
|
60
|
+
}
|
|
61
|
+
export default Demo1
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
>
|
|
65
|
+
> 在使用Uploader组件上传文件时,可能会遇到响应文件信息中文乱码的问题。这通常发生在客户端与服务器端在处理文件编码时不一致的情况下。为了避免这种问题,建议确保服务器端读取文件的编码格式与客户端保持一致。
|
|
66
|
+
|
|
67
|
+
```javascript
|
|
68
|
+
import React from 'react'
|
|
69
|
+
import { Uploader } from '@nutui/nutui-react'
|
|
70
|
+
// Server Demo
|
|
71
|
+
app.post('/upload', upload.single('file'), (req, res) => {
|
|
72
|
+
const fileEncoding = req.headers['x-file-encoding'] || 'UTF-8';
|
|
73
|
+
const fileContent = iconv.decode(Buffer.from(JSON.stringify(req.file), 'binary'), fileEncoding);
|
|
74
|
+
res.json({ success: true, message: 'File uploaded successfully', data: JSON.parse(fileContent) });
|
|
75
|
+
});
|
|
76
|
+
// Client Demo
|
|
77
|
+
<Uploader url={uploadUrl} headers={{'x-file-encoding': 'UTF-8'}} />
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### 基础用法
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
```tsx
|
|
85
|
+
import { Uploader } from '@mijadesign/mjui-react-taro'
|
|
86
|
+
import React from 'react'
|
|
87
|
+
|
|
88
|
+
const Demo2 = () => {
|
|
89
|
+
const uploadUrl = 'https://my-json-server.typicode.com/linrufeng/demo/posts'
|
|
90
|
+
const onStart = () => {
|
|
91
|
+
console.log('start触发')
|
|
92
|
+
}
|
|
93
|
+
return (
|
|
94
|
+
<div>
|
|
95
|
+
<Uploader previewType="list" url={uploadUrl} onStart={onStart} />
|
|
96
|
+
</div>
|
|
97
|
+
)
|
|
98
|
+
}
|
|
99
|
+
export default Demo2
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### 上传状态
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
```tsx
|
|
107
|
+
import { Uploader } from '@mijadesign/mjui-react-taro'
|
|
108
|
+
import { AddFill } from '@mijadesign/mobile-icons'
|
|
109
|
+
import Taro from '@tarojs/taro'
|
|
110
|
+
import React from 'react'
|
|
111
|
+
|
|
112
|
+
const Demo3 = () => {
|
|
113
|
+
const uploadUrl = 'https://my-json-server.typicode.com/linrufeng/demo/posts'
|
|
114
|
+
|
|
115
|
+
const onStart = () => {
|
|
116
|
+
console.log('start触发')
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const colTitleStyle = {
|
|
120
|
+
fontSize: '12px',
|
|
121
|
+
marginBottom: '12px',
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
const onPreview = (currentUrl?: string) => {
|
|
125
|
+
Taro.previewImage({
|
|
126
|
+
current: currentUrl,
|
|
127
|
+
urls: currentUrl ? [currentUrl] : [],
|
|
128
|
+
})
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
return (
|
|
132
|
+
<div style={{ display: 'flex', flexDirection: 'row', flexWrap: 'wrap', gap: '12px' }}>
|
|
133
|
+
<div>
|
|
134
|
+
<div style={colTitleStyle}>默认态</div>
|
|
135
|
+
<Uploader
|
|
136
|
+
url={uploadUrl}
|
|
137
|
+
uploadIcon={<AddFill size={20} color="#006DFC" />}
|
|
138
|
+
uploadLabel={<div style={{ textAlign: 'center' }}>点击选择图片上传</div>}
|
|
139
|
+
onStart={onStart}
|
|
140
|
+
/>
|
|
141
|
+
</div>
|
|
142
|
+
<div>
|
|
143
|
+
<div style={colTitleStyle}>上传中</div>
|
|
144
|
+
<Uploader
|
|
145
|
+
url={uploadUrl}
|
|
146
|
+
defaultValue={[
|
|
147
|
+
{
|
|
148
|
+
name: 'demo.jpg',
|
|
149
|
+
url: 'https://t7.baidu.com/it/u=911582538,1619719529&fm=193&f=GIF',
|
|
150
|
+
status: 'uploading',
|
|
151
|
+
message: '上传中',
|
|
152
|
+
type: 'image',
|
|
153
|
+
uid: '122',
|
|
154
|
+
},
|
|
155
|
+
]}
|
|
156
|
+
onStart={onStart}
|
|
157
|
+
/>
|
|
158
|
+
</div>
|
|
159
|
+
|
|
160
|
+
<div>
|
|
161
|
+
<div style={colTitleStyle}>上传失败</div>
|
|
162
|
+
<Uploader
|
|
163
|
+
url={uploadUrl}
|
|
164
|
+
defaultValue={[
|
|
165
|
+
{
|
|
166
|
+
name: '文件2.png',
|
|
167
|
+
url: 'https://t7.baidu.com/it/u=911582538,1619719529&fm=193&f=GIF',
|
|
168
|
+
status: 'error',
|
|
169
|
+
message: '上传失败',
|
|
170
|
+
type: 'image',
|
|
171
|
+
uid: '123',
|
|
172
|
+
},
|
|
173
|
+
]}
|
|
174
|
+
onStart={onStart}
|
|
175
|
+
onFileItemClick={() => onPreview('https://t7.baidu.com/it/u=911582538,1619719529&fm=193&f=GIF')}
|
|
176
|
+
/>
|
|
177
|
+
</div>
|
|
178
|
+
|
|
179
|
+
<div>
|
|
180
|
+
<div style={colTitleStyle}>上传完成</div>
|
|
181
|
+
<Uploader
|
|
182
|
+
url={uploadUrl}
|
|
183
|
+
defaultValue={[
|
|
184
|
+
{
|
|
185
|
+
name: '文件名称超出可视区域',
|
|
186
|
+
url: 'https://t7.baidu.com/it/u=911582538,1619719529&fm=193&f=GIF',
|
|
187
|
+
status: 'success',
|
|
188
|
+
message: '上传成功',
|
|
189
|
+
type: 'image',
|
|
190
|
+
uid: '125',
|
|
191
|
+
},
|
|
192
|
+
]}
|
|
193
|
+
onStart={onStart}
|
|
194
|
+
onFileItemClick={() => onPreview('https://t7.baidu.com/it/u=911582538,1619719529&fm=193&f=GIF')}
|
|
195
|
+
/>
|
|
196
|
+
</div>
|
|
197
|
+
|
|
198
|
+
<div>
|
|
199
|
+
<div style={colTitleStyle}>上传完成无删除</div>
|
|
200
|
+
<Uploader
|
|
201
|
+
url={uploadUrl}
|
|
202
|
+
defaultValue={[
|
|
203
|
+
{
|
|
204
|
+
name: '文件名称超出可视区域',
|
|
205
|
+
url: 'https://t7.baidu.com/it/u=911582538,1619719529&fm=193&f=GIF',
|
|
206
|
+
status: 'success',
|
|
207
|
+
message: '上传成功',
|
|
208
|
+
type: 'image',
|
|
209
|
+
uid: '125',
|
|
210
|
+
},
|
|
211
|
+
]}
|
|
212
|
+
onStart={onStart}
|
|
213
|
+
deletable={false}
|
|
214
|
+
onFileItemClick={() => onPreview('https://t7.baidu.com/it/u=911582538,1619719529&fm=193&f=GIF')}
|
|
215
|
+
/>
|
|
216
|
+
</div>
|
|
217
|
+
|
|
218
|
+
<div>
|
|
219
|
+
<div style={colTitleStyle}>上传完成无名称</div>
|
|
220
|
+
<Uploader
|
|
221
|
+
url={uploadUrl}
|
|
222
|
+
defaultValue={[
|
|
223
|
+
{
|
|
224
|
+
name: '文件名称超出可视区域',
|
|
225
|
+
url: 'https://t7.baidu.com/it/u=911582538,1619719529&fm=193&f=GIF',
|
|
226
|
+
status: 'success',
|
|
227
|
+
message: '上传成功',
|
|
228
|
+
type: 'image',
|
|
229
|
+
uid: '125',
|
|
230
|
+
},
|
|
231
|
+
]}
|
|
232
|
+
onStart={onStart}
|
|
233
|
+
tips={false}
|
|
234
|
+
/>
|
|
235
|
+
</div>
|
|
236
|
+
</div>
|
|
237
|
+
)
|
|
238
|
+
}
|
|
239
|
+
export default Demo3
|
|
240
|
+
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### 上传文件-基础用法列表展示
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
```tsx
|
|
247
|
+
import { Uploader } from '@mijadesign/mjui-react-taro'
|
|
248
|
+
import Taro from '@tarojs/taro'
|
|
249
|
+
import React from 'react'
|
|
250
|
+
|
|
251
|
+
const Demo13 = () => {
|
|
252
|
+
const uploadUrl = 'https://my-json-server.typicode.com/linrufeng/demo/posts'
|
|
253
|
+
const defaultFileList: any[] = [
|
|
254
|
+
{
|
|
255
|
+
name: '文件名称超出可视区域',
|
|
256
|
+
url: 'https://t7.baidu.com/it/u=911582538,1619719529&fm=193&f=GIF',
|
|
257
|
+
status: 'success',
|
|
258
|
+
message: '上传成功',
|
|
259
|
+
type: 'image',
|
|
260
|
+
uid: '122',
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
name: '文件名称超出可视区域',
|
|
264
|
+
url: 'https://t7.baidu.com/it/u=911582538,1619719529&fm=193&f=GIF',
|
|
265
|
+
status: 'success',
|
|
266
|
+
message: '上传成功',
|
|
267
|
+
type: 'image',
|
|
268
|
+
uid: '123',
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
name: '文件名称超出可视区域',
|
|
272
|
+
url: 'https://t7.baidu.com/it/u=911582538,1619719529&fm=193&f=GIF',
|
|
273
|
+
status: 'success',
|
|
274
|
+
message: '上传成功',
|
|
275
|
+
type: 'image',
|
|
276
|
+
uid: '124',
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
name: '文件名称超出可视区域',
|
|
280
|
+
url: 'https://t7.baidu.com/it/u=911582538,1619719529&fm=193&f=GIF',
|
|
281
|
+
status: 'success',
|
|
282
|
+
message: '上传成功',
|
|
283
|
+
type: 'image',
|
|
284
|
+
uid: '125',
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
name: '文件名称超出可视区域',
|
|
288
|
+
url: 'https://t7.baidu.com/it/u=911582538,1619719529&fm=193&f=GIF',
|
|
289
|
+
status: 'success',
|
|
290
|
+
message: '上传成功',
|
|
291
|
+
type: 'image',
|
|
292
|
+
uid: '126',
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
name: '文件名称超出可视区域',
|
|
296
|
+
url: 'https://t7.baidu.com/it/u=911582538,1619719529&fm=193&f=GIF',
|
|
297
|
+
status: 'success',
|
|
298
|
+
message: '上传成功',
|
|
299
|
+
type: 'image',
|
|
300
|
+
uid: '127',
|
|
301
|
+
},
|
|
302
|
+
]
|
|
303
|
+
const fileList: any[] = [
|
|
304
|
+
{
|
|
305
|
+
name: '文件名称超出可视区域',
|
|
306
|
+
url: 'https://t7.baidu.com/it/u=911582538,1619719529&fm=193&f=GIF',
|
|
307
|
+
status: 'success',
|
|
308
|
+
message: '上传成功',
|
|
309
|
+
type: 'image',
|
|
310
|
+
uid: '124',
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
name: '文件名称超出可视区域',
|
|
314
|
+
url: 'https://t7.baidu.com/it/u=911582538,1619719529&fm=193&f=GIF',
|
|
315
|
+
status: 'success',
|
|
316
|
+
message: 'success',
|
|
317
|
+
type: 'image',
|
|
318
|
+
uid: '125',
|
|
319
|
+
},
|
|
320
|
+
]
|
|
321
|
+
|
|
322
|
+
const colTitleStyle = {
|
|
323
|
+
fontSize: '12px',
|
|
324
|
+
marginBottom: '12px',
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
const onDelete = (file: any, fileList: any) => {
|
|
328
|
+
console.log('delete事件触发', file, fileList)
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
const onPreview = (currentUrl?: string, urls?: any[]) => {
|
|
332
|
+
Taro.previewImage({
|
|
333
|
+
current: currentUrl,
|
|
334
|
+
urls: urls?.map((i) => i?.url) ?? [],
|
|
335
|
+
})
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
return (
|
|
339
|
+
<div style={{ display: 'block' }}>
|
|
340
|
+
<div>
|
|
341
|
+
<div style={colTitleStyle}>当上传图片数量小于等于3个时:</div>
|
|
342
|
+
<Uploader
|
|
343
|
+
multiple
|
|
344
|
+
maxCount={3}
|
|
345
|
+
url={uploadUrl}
|
|
346
|
+
defaultValue={fileList}
|
|
347
|
+
onDelete={onDelete}
|
|
348
|
+
onFileItemClick={(_, index) => {
|
|
349
|
+
onPreview(fileList[index].url, fileList)
|
|
350
|
+
}}
|
|
351
|
+
/>
|
|
352
|
+
</div>
|
|
353
|
+
<div>
|
|
354
|
+
<div style={colTitleStyle}>当上传图片数量大于3个时:</div>
|
|
355
|
+
<Uploader
|
|
356
|
+
multiple
|
|
357
|
+
span={4}
|
|
358
|
+
maxCount={8}
|
|
359
|
+
url={uploadUrl}
|
|
360
|
+
defaultValue={defaultFileList}
|
|
361
|
+
onDelete={onDelete}
|
|
362
|
+
onFileItemClick={(_, index) => {
|
|
363
|
+
onPreview(defaultFileList[index].url, defaultFileList)
|
|
364
|
+
}}
|
|
365
|
+
/>
|
|
366
|
+
</div>
|
|
367
|
+
</div>
|
|
368
|
+
)
|
|
369
|
+
}
|
|
370
|
+
export default Demo13
|
|
371
|
+
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
### 基础用法-上传列表展示
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
```tsx
|
|
378
|
+
import { Button, Uploader } from '@mijadesign/mjui-react-taro'
|
|
379
|
+
import React from 'react'
|
|
380
|
+
|
|
381
|
+
const Demo4 = () => {
|
|
382
|
+
const uploadUrl = 'https://my-json-server.typicode.com/linrufeng/demo/posts'
|
|
383
|
+
const defaultFileList: any[] = [
|
|
384
|
+
{
|
|
385
|
+
name: '文件名称超出可视区域',
|
|
386
|
+
url: 'https://t7.baidu.com/it/u=911582538,1619719529&fm=193&f=GIF',
|
|
387
|
+
status: 'success',
|
|
388
|
+
message: '上传成功',
|
|
389
|
+
type: 'image',
|
|
390
|
+
uid: '122',
|
|
391
|
+
},
|
|
392
|
+
{
|
|
393
|
+
name: '文件名称超出可视区域',
|
|
394
|
+
url: 'https://t7.baidu.com/it/u=911582538,1619719529&fm=193&f=GIF',
|
|
395
|
+
status: 'success',
|
|
396
|
+
message: '上传成功',
|
|
397
|
+
type: 'image',
|
|
398
|
+
uid: '123',
|
|
399
|
+
},
|
|
400
|
+
{
|
|
401
|
+
name: '文件名称超出可视区域',
|
|
402
|
+
url: 'https://t7.baidu.com/it/u=911582538,1619719529&fm=193&f=GIF',
|
|
403
|
+
status: 'success',
|
|
404
|
+
message: '上传成功',
|
|
405
|
+
type: 'image',
|
|
406
|
+
uid: '124',
|
|
407
|
+
},
|
|
408
|
+
{
|
|
409
|
+
name: '文件名称超出可视区域',
|
|
410
|
+
url: 'https://t7.baidu.com/it/u=911582538,1619719529&fm=193&f=GIF',
|
|
411
|
+
status: 'success',
|
|
412
|
+
message: '上传成功',
|
|
413
|
+
type: 'image',
|
|
414
|
+
uid: '125',
|
|
415
|
+
},
|
|
416
|
+
{
|
|
417
|
+
name: '文件名称超出可视区域',
|
|
418
|
+
url: 'https://t7.baidu.com/it/u=911582538,1619719529&fm=193&f=GIF',
|
|
419
|
+
status: 'success',
|
|
420
|
+
message: '上传成功',
|
|
421
|
+
type: 'image',
|
|
422
|
+
uid: '126',
|
|
423
|
+
},
|
|
424
|
+
{
|
|
425
|
+
name: '文件名称超出可视区域',
|
|
426
|
+
url: 'https://t7.baidu.com/it/u=911582538,1619719529&fm=193&f=GIF',
|
|
427
|
+
status: 'success',
|
|
428
|
+
message: '上传成功',
|
|
429
|
+
type: 'image',
|
|
430
|
+
uid: '127',
|
|
431
|
+
},
|
|
432
|
+
]
|
|
433
|
+
|
|
434
|
+
return (
|
|
435
|
+
<Uploader url={uploadUrl} defaultValue={defaultFileList} maxCount={10} multiple previewType="list">
|
|
436
|
+
<Button type="primary" size="small">
|
|
437
|
+
上传文件
|
|
438
|
+
</Button>
|
|
439
|
+
</Uploader>
|
|
440
|
+
)
|
|
441
|
+
}
|
|
442
|
+
export default Demo4
|
|
443
|
+
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
### 直接调起摄像头(移动端生效)
|
|
447
|
+
|
|
448
|
+
|
|
449
|
+
```tsx
|
|
450
|
+
import { Uploader } from '@mijadesign/mjui-react-taro'
|
|
451
|
+
import React from 'react'
|
|
452
|
+
|
|
453
|
+
const Demo6 = () => {
|
|
454
|
+
const uploadUrl = 'https://my-json-server.typicode.com/linrufeng/demo/posts'
|
|
455
|
+
return (
|
|
456
|
+
<div>
|
|
457
|
+
<Uploader url={uploadUrl} sourceType={['camera']} />
|
|
458
|
+
</div>
|
|
459
|
+
)
|
|
460
|
+
}
|
|
461
|
+
export default Demo6
|
|
462
|
+
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
### 使用前摄像头拍摄3s视频并上传(仅支持微信小程序)
|
|
466
|
+
|
|
467
|
+
|
|
468
|
+
```tsx
|
|
469
|
+
import { Uploader } from '@mijadesign/mjui-react-taro'
|
|
470
|
+
import React from 'react'
|
|
471
|
+
|
|
472
|
+
const Demo7 = () => {
|
|
473
|
+
const uploadUrl = 'https://my-json-server.typicode.com/linrufeng/demo/posts'
|
|
474
|
+
return (
|
|
475
|
+
<div>
|
|
476
|
+
<Uploader url={uploadUrl} maxDuration={3} sourceType={['camera']} camera="front" />
|
|
477
|
+
</div>
|
|
478
|
+
)
|
|
479
|
+
}
|
|
480
|
+
export default Demo7
|
|
481
|
+
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
### 限制上传数量5个
|
|
485
|
+
|
|
486
|
+
|
|
487
|
+
```tsx
|
|
488
|
+
import { Uploader } from '@mijadesign/mjui-react-taro'
|
|
489
|
+
import React from 'react'
|
|
490
|
+
|
|
491
|
+
const Demo8 = () => {
|
|
492
|
+
const uploadUrl = 'https://my-json-server.typicode.com/linrufeng/demo/posts'
|
|
493
|
+
return (
|
|
494
|
+
<div>
|
|
495
|
+
<Uploader url={uploadUrl} multiple maxCount={5} />
|
|
496
|
+
</div>
|
|
497
|
+
)
|
|
498
|
+
}
|
|
499
|
+
export default Demo8
|
|
500
|
+
|
|
501
|
+
```
|
|
502
|
+
|
|
503
|
+
### 限制上传大小(每个文件最大不超过50kb)
|
|
504
|
+
|
|
505
|
+
|
|
506
|
+
```tsx
|
|
507
|
+
import { Uploader } from '@mijadesign/mjui-react-taro'
|
|
508
|
+
import Taro from '@tarojs/taro'
|
|
509
|
+
import React from 'react'
|
|
510
|
+
|
|
511
|
+
const Demo9 = () => {
|
|
512
|
+
const uploadUrl = 'https://my-json-server.typicode.com/linrufeng/demo/posts'
|
|
513
|
+
const onOversize = (files: Taro.chooseImage.ImageFile[]) => {
|
|
514
|
+
console.log('oversize触发文件大小不能超过50kb', files)
|
|
515
|
+
}
|
|
516
|
+
return (
|
|
517
|
+
<div>
|
|
518
|
+
<Uploader url={uploadUrl} multiple maxFileSize={1024 * 50} onOversize={onOversize} />
|
|
519
|
+
</div>
|
|
520
|
+
)
|
|
521
|
+
}
|
|
522
|
+
export default Demo9
|
|
523
|
+
|
|
524
|
+
```
|
|
525
|
+
|
|
526
|
+
### 自定义数据 FormData、headers
|
|
527
|
+
|
|
528
|
+
|
|
529
|
+
```tsx
|
|
530
|
+
import { Uploader } from '@mijadesign/mjui-react-taro'
|
|
531
|
+
import React from 'react'
|
|
532
|
+
|
|
533
|
+
const Demo10 = () => {
|
|
534
|
+
const uploadUrl = 'https://my-json-server.typicode.com/linrufeng/demo/posts'
|
|
535
|
+
const formData = {
|
|
536
|
+
custom: 'test',
|
|
537
|
+
}
|
|
538
|
+
return (
|
|
539
|
+
<div>
|
|
540
|
+
<Uploader url={uploadUrl} data={formData} headers={formData} />
|
|
541
|
+
</div>
|
|
542
|
+
)
|
|
543
|
+
}
|
|
544
|
+
export default Demo10
|
|
545
|
+
|
|
546
|
+
```
|
|
547
|
+
|
|
548
|
+
### 自定义 Taro.uploadFile 上传方式(before-xhr-upload)
|
|
549
|
+
|
|
550
|
+
|
|
551
|
+
```tsx
|
|
552
|
+
import { Uploader } from '@mijadesign/mjui-react-taro'
|
|
553
|
+
import React from 'react'
|
|
554
|
+
|
|
555
|
+
const Demo11 = () => {
|
|
556
|
+
const uploadUrl = 'https://my-json-server.typicode.com/linrufeng/demo/posts'
|
|
557
|
+
const beforeXhrUpload = (taroUploadFile: any, options: any) => {
|
|
558
|
+
const uploadTask = taroUploadFile({
|
|
559
|
+
url: options.url,
|
|
560
|
+
filePath: options.taroFilePath,
|
|
561
|
+
fileType: options.fileType,
|
|
562
|
+
header: {
|
|
563
|
+
'Content-Type': 'multipart/form-data',
|
|
564
|
+
...options.headers,
|
|
565
|
+
},
|
|
566
|
+
formData: options.formData,
|
|
567
|
+
name: options.name,
|
|
568
|
+
success(response: { errMsg: any; statusCode: number; data: string }) {
|
|
569
|
+
if (options.xhrState === response.statusCode) {
|
|
570
|
+
options.onSuccess?.(response, options)
|
|
571
|
+
} else {
|
|
572
|
+
options.onFailure?.(response, options)
|
|
573
|
+
}
|
|
574
|
+
},
|
|
575
|
+
fail(e: any) {
|
|
576
|
+
options.onFailure?.(e, options)
|
|
577
|
+
},
|
|
578
|
+
})
|
|
579
|
+
options.onStart?.(options)
|
|
580
|
+
uploadTask.progress((res: { progress: any; totalBytesSent: any; totalBytesExpectedToSend: any }) => {
|
|
581
|
+
options.onProgress?.(res, options)
|
|
582
|
+
})
|
|
583
|
+
}
|
|
584
|
+
return (
|
|
585
|
+
<div>
|
|
586
|
+
<Uploader url={uploadUrl} method="put" beforeXhrUpload={beforeXhrUpload} />
|
|
587
|
+
</div>
|
|
588
|
+
)
|
|
589
|
+
}
|
|
590
|
+
export default Demo11
|
|
591
|
+
|
|
592
|
+
```
|
|
593
|
+
|
|
594
|
+
### 选中文件后,通过按钮手动执行上传
|
|
595
|
+
|
|
596
|
+
|
|
597
|
+
```tsx
|
|
598
|
+
import { Button, Uploader } from '@mijadesign/mjui-react-taro'
|
|
599
|
+
import React, { useRef } from 'react'
|
|
600
|
+
|
|
601
|
+
interface uploadRefState {
|
|
602
|
+
submit: () => void
|
|
603
|
+
clear: () => void
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
const Demo12 = () => {
|
|
607
|
+
const uploadUrl = 'https://my-json-server.typicode.com/linrufeng/demo/posts'
|
|
608
|
+
const uploadRef = useRef<uploadRefState>(null)
|
|
609
|
+
|
|
610
|
+
const submitUpload = () => {
|
|
611
|
+
;(uploadRef.current as uploadRefState).submit()
|
|
612
|
+
}
|
|
613
|
+
const clearUpload = () => {
|
|
614
|
+
;(uploadRef.current as uploadRefState).clear()
|
|
615
|
+
}
|
|
616
|
+
return (
|
|
617
|
+
<div style={{ display: 'block' }}>
|
|
618
|
+
<Uploader url={uploadUrl} maxCount={5} autoUpload={false} ref={uploadRef} />
|
|
619
|
+
<div style={{ display: 'flex', marginTop: '16px' }}>
|
|
620
|
+
<Button type="primary" size="small" onClick={submitUpload} style={{ marginInlineEnd: '10px' }}>
|
|
621
|
+
执行上传
|
|
622
|
+
</Button>
|
|
623
|
+
<Button type="primary" size="small" onClick={clearUpload}>
|
|
624
|
+
手动清空上传
|
|
625
|
+
</Button>
|
|
626
|
+
</div>
|
|
627
|
+
</div>
|
|
628
|
+
)
|
|
629
|
+
}
|
|
630
|
+
export default Demo12
|
|
631
|
+
|
|
632
|
+
```
|
|
633
|
+
|
|
634
|
+
### 禁用状态
|
|
635
|
+
|
|
636
|
+
|
|
637
|
+
```tsx
|
|
638
|
+
import { Uploader } from '@mijadesign/mjui-react-taro'
|
|
639
|
+
import React from 'react'
|
|
640
|
+
|
|
641
|
+
const Demo13 = () => {
|
|
642
|
+
return (
|
|
643
|
+
<div>
|
|
644
|
+
<Uploader disabled />
|
|
645
|
+
</div>
|
|
646
|
+
)
|
|
647
|
+
}
|
|
648
|
+
export default Demo13
|
|
649
|
+
|
|
650
|
+
```
|
|
651
|
+
|
|
652
|
+
## Uploader
|
|
653
|
+
|
|
654
|
+
### Props
|
|
655
|
+
|
|
656
|
+
| 字段 | 说明 | 类型 | 默认值 |
|
|
657
|
+
| --- | --- | --- | --- |
|
|
658
|
+
| autoUpload | 是否在选取文件后立即进行上传,false 时需要手动执行 ref submit 方法进行上传 | `boolean` | `true` |
|
|
659
|
+
| name | `input` 标签 `name` 的名称,发到后台的文件参数名 | `string` | `file` |
|
|
660
|
+
| url | 上传服务器的接口地址 | `string` | `-` |
|
|
661
|
+
| defaultValue | 默认已经上传的文件列表 | `FileType<React.ReactNode>[]` | `[]` |
|
|
662
|
+
| value | 已经上传的文件列表 | `FileType<string>[]` | `[]` |
|
|
663
|
+
| preview | 是否上传成功后展示预览图 | `boolean` | `true` |
|
|
664
|
+
| previewUrl | 当上传非图片('image')格式的默认图片地址 | `string` | `-` |
|
|
665
|
+
| deletable | 是否展示删除按钮 | `boolean` | `true` |
|
|
666
|
+
| method | 上传请求的 http method | `string` | `post` |
|
|
667
|
+
| previewType | 上传列表的内建样式,支持两种基本样式 picture、list | `string` | `picture` |
|
|
668
|
+
| maxFileSize | 可以设定最大上传文件的大小(字节) | `number` \| `string` | `Number.MAX_VALUE` |
|
|
669
|
+
| maxCount | 文件上传数量限制 | `number` \| `string` | `1` |
|
|
670
|
+
| fit | 图片填充模式 | `contain` \| `cover` \| `fill` \| `none` \| `scale-down` | `cover` |
|
|
671
|
+
| sourceType | [选择文件的来源]("https://developers.weixin.qq.com/miniprogram/dev/api/media/video/wx.chooseMedia.html") | `Array` | `['album','camera']` |
|
|
672
|
+
| camera`仅支持WEAPP` | 仅在 `source-type` 为 `camera` 时生效,使用前置或后置摄像头 | `String` | `back` |
|
|
673
|
+
| sizeType | [是否压缩所选文件]("https://developers.weixin.qq.com/miniprogram/dev/api/media/video/wx.chooseMedia.html") | `Array` | `['original','compressed']` |
|
|
674
|
+
| mediaType`仅支持WEAPP` | [选择文件类型]("https://developers.weixin.qq.com/miniprogram/dev/api/media/video/wx.chooseMedia.html") | `Array` | `['image', 'video']` |
|
|
675
|
+
| maxDuration`仅支持WEAPP` | 拍摄视频最长拍摄时间,单位秒。时间范围为 3s 至 60s 之间。不限制相册。 | `number` | `10` |
|
|
676
|
+
| headers | 设置上传的请求头部 | `object` | `{}` |
|
|
677
|
+
| data | 附加上传的信息 formData | `object` | `{}` |
|
|
678
|
+
| uploadIcon | 上传区域icon| `ReactNode` | `<Addcard />` |
|
|
679
|
+
| uploadLabel | 上传区域图片下方文字 | `string` | `""` |
|
|
680
|
+
| xhrState | 接口响应的成功状态(status)值 | `number` | `200` |
|
|
681
|
+
| disabled | 是否禁用文件上传 | `boolean` | `false` |
|
|
682
|
+
| multiple | 是否支持文件多选 | `boolean` | `false` |
|
|
683
|
+
| timeout | 超时时间,单位为毫秒 | `number` \| `string` | `1000 * 30` |
|
|
684
|
+
| tips | 是否展示描述文案| `boolean` | `true` |
|
|
685
|
+
| span | 上传一行展示| `3` \| `4` | `3` |
|
|
686
|
+
| previewMode | 图片展示模式| `string` | `aspectFill` |
|
|
687
|
+
| beforeXhrUpload | 执行 XHR 上传时,自定义方式 | `(xhr: XMLHttpRequest, options: any) => void` | `-` |
|
|
688
|
+
| beforeDelete | 除文件时的回调,返回值为 false 时不移除。支持返回一个 `Promise` 对象,`Promise` 对象 resolve(false) 或 reject 时不移除 | `(file: FileItem, files: FileItem[]) => boolean` | `-` |
|
|
689
|
+
| onStart | 文件上传开始 | `(option: UploadOptions) => void` | `-` |
|
|
690
|
+
| onProgress | 文件上传的进度 | `(param: {e: ProgressEvent<XMLHttpRequestEventTarget>;option: UploadOptions;percentage: string \| number}) => void` | `-` |
|
|
691
|
+
| onOversize | 文件大小超过限制时触发 | `(param: {responseText: XMLHttpRequest['responseText'];option: UploadOptions;files: FileItem[]}) => void` | `-` |
|
|
692
|
+
| onSuccess | 上传成功 | `(param: {responseText: XMLHttpRequest['responseText'];option: UploadOptions;percentage: string \| number}) => void` | `-` |
|
|
693
|
+
| onFailure | 上传失败 | `(param: {responseText: XMLHttpRequest['responseText'];option: UploadOptions;percentage: string \| number}) => void` | `-` |
|
|
694
|
+
| onChange | 上传文件改变时的状态 | `(param: FileItem[]) => void` | `-` |
|
|
695
|
+
| onDelete | 文件删除之前的状态 | `(file: FileItem, files: FileItem[]) => void` | `-` |
|
|
696
|
+
| onFileItemClick | 文件上传成功后点击触发 | `(file: FileItem, index: number) => void` | `-` |
|
|
697
|
+
|
|
698
|
+
### FileItem
|
|
699
|
+
|
|
700
|
+
| 名称 | 说明 | 默认值 |
|
|
701
|
+
| --- | --- | --- |
|
|
702
|
+
| status | 文件状态值,可选'ready,uploading,success,error,removed' | `ready` |
|
|
703
|
+
| uid | 文件的唯一标识 | `new Date().getTime().toString()` |
|
|
704
|
+
| name | 文件名称 | `-` |
|
|
705
|
+
| url | 文件路径 | `-` |
|
|
706
|
+
| type | 文件类型 | `image/jpeg` |
|
|
707
|
+
| formData | 上传所需的data | `new FormData()` |
|
|
708
|
+
|
|
709
|
+
### Methods
|
|
710
|
+
|
|
711
|
+
通过 ref 可以获取到 Uploader 实例并调用实例方法
|
|
712
|
+
|
|
713
|
+
| 方法名 | 说明 | 参数 | 返回值 |
|
|
714
|
+
| --- | --- | --- | --- |
|
|
715
|
+
| submit | 手动上传模式,执行上传操作 | `-` | `-` |
|
|
716
|
+
| clear | 清空已选择的文件队列(该方法一般配合在手动模式上传时使用) | `index` | `-` |
|
|
717
|
+
|
|
718
|
+
## 主题定制
|
|
719
|
+
|
|
720
|
+
### 样式变量
|
|
721
|
+
|
|
722
|
+
组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 [ConfigProvider 组件](#/zh-CN/component/configprovider)。
|
|
723
|
+
|
|
724
|
+
| 名称 | 说明 | 默认值 |
|
|
725
|
+
| --- | --- | --- |
|
|
726
|
+
| \--nutui-uploader-background | 上传图片的背景颜色 | `$color-background` |
|
|
727
|
+
| \--nutui-uploader-background-disabled | 上传图片禁用状态的背景颜色 | `$color-background` |
|
|
728
|
+
| \--nutui-uploader-image-border | 上传图片的border值 | `0px` |
|
|
729
|
+
| \--nutui-uploader-image-border-radius | 上传图片的border圆角 | `$radius-1` |
|
|
730
|
+
| \--nutui-uploader-image-color | 上传图片的文字颜色 | `$color-text-help` |
|
|
731
|
+
| \--nutui-uploader-image-disabled | 上传图片的禁用状态 | `$color-text-disabled` |
|
|
732
|
+
| \--nutui-uploader-image-height | 上传图片的高度 | `96px` |
|
|
733
|
+
| \--nutui-uploader-image-icon-margin-bottom | 上传区域图片下方文字margin-bottom值 | `$spacing-0` |
|
|
734
|
+
| \--nutui-uploader-image-icon-tip-color | 上传区域图片下方文字颜色 | `$color-text` |
|
|
735
|
+
| \--nutui-uploader-image-icon-tip-font-size | 上传区域图片下方文字大小 | `$font-size-1` |
|
|
736
|
+
| \--nutui-uploader-image-width | 上传图片的宽度 | `96px` |
|
|
737
|
+
| \--nutui-uploader-picture-icon-tip-color | 上传图片icon的文字颜色 | `$color-text` |
|
|
738
|
+
| \--nutui-uploader-preview-close-right | 上传图片关闭按钮的right值 | `0px` |
|
|
739
|
+
| \--nutui-uploader-preview-close-top | 上传图片关闭按钮的top值 | `0px` |
|
|
740
|
+
| \--nutui-uploader-preview-margin-bottom | 上传区域预览margin-bottom的值 | `$spacing-2` |
|
|
741
|
+
| \--nutui-uploader-preview-margin-right | 上传区域预览margin-right的值 | `$spacing-2` |
|
|
742
|
+
| \--nutui-uploader-preview-progress-background | 上传区域预览进度的背景颜色 | `$color-mask-secondary` |
|
|
743
|
+
| \--nutui-uploader-preview-tips-background | 上传图片预览tips下的背景颜色 | `$color-mask` |
|
|
744
|
+
| \--nutui-uploader-preview-tips-height | 上传图片预览tips下的高度 | `24px` |
|
|
745
|
+
| \--nutui-uploader-preview-tips-padding | 上传图片预览tips下的padding值 | `0 $spacing-0` |
|