vxe-pc-ui 3.3.0 → 3.3.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.
- package/es/icon/style.css +1 -1
- package/es/language/en-US.js +1 -0
- package/es/language/es-ES.js +1 -0
- package/es/language/hu-HU.js +1 -0
- package/es/language/ja-JP.js +1 -0
- package/es/language/ko-KR.js +1 -0
- package/es/language/pt-BR.js +1 -0
- package/es/language/ru-RU.js +1 -0
- package/es/language/uk-UA.js +1 -0
- package/es/language/vi-VN.js +1 -0
- package/es/language/zh-CHT.js +1 -0
- package/es/language/zh-CN.js +1 -0
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/ui/index.js +2 -1
- package/es/ui/src/log.js +1 -1
- package/es/upload/src/upload.js +117 -25
- package/es/upload/style.css +7 -0
- package/es/upload/style.min.css +1 -1
- package/es/vxe-upload/style.css +7 -0
- package/es/vxe-upload/style.min.css +1 -1
- package/lib/icon/style/style.css +1 -1
- package/lib/icon/style/style.min.css +1 -1
- package/lib/index.umd.js +128 -27
- package/lib/index.umd.min.js +1 -1
- package/lib/language/en-US.js +1 -0
- package/lib/language/en-US.min.js +1 -1
- package/lib/language/en-US.umd.js +1 -0
- package/lib/language/es-ES.js +1 -0
- package/lib/language/es-ES.min.js +1 -1
- package/lib/language/es-ES.umd.js +1 -0
- package/lib/language/hu-HU.js +1 -0
- package/lib/language/hu-HU.min.js +1 -1
- package/lib/language/hu-HU.umd.js +1 -0
- package/lib/language/ja-JP.js +1 -0
- package/lib/language/ja-JP.min.js +1 -1
- package/lib/language/ja-JP.umd.js +1 -0
- package/lib/language/ko-KR.js +1 -0
- package/lib/language/ko-KR.min.js +1 -1
- package/lib/language/ko-KR.umd.js +1 -0
- package/lib/language/pt-BR.js +1 -0
- package/lib/language/pt-BR.min.js +1 -1
- package/lib/language/pt-BR.umd.js +1 -0
- package/lib/language/ru-RU.js +1 -0
- package/lib/language/ru-RU.min.js +1 -1
- package/lib/language/ru-RU.umd.js +1 -0
- package/lib/language/uk-UA.js +1 -0
- package/lib/language/uk-UA.min.js +1 -1
- package/lib/language/uk-UA.umd.js +1 -0
- package/lib/language/vi-VN.js +1 -0
- package/lib/language/vi-VN.min.js +1 -1
- package/lib/language/zh-CHT.js +1 -0
- package/lib/language/zh-CHT.min.js +1 -1
- package/lib/language/zh-CHT.umd.js +1 -0
- package/lib/language/zh-CN.js +1 -0
- package/lib/language/zh-CN.min.js +1 -1
- package/lib/language/zh-CN.umd.js +1 -0
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/ui/index.js +2 -1
- package/lib/ui/index.min.js +1 -1
- package/lib/ui/src/log.js +1 -1
- package/lib/ui/src/log.min.js +1 -1
- package/lib/upload/src/upload.js +124 -24
- package/lib/upload/src/upload.min.js +1 -1
- package/lib/upload/style/style.css +7 -0
- package/lib/upload/style/style.min.css +1 -1
- package/lib/vxe-upload/style/style.css +7 -0
- package/lib/vxe-upload/style/style.min.css +1 -1
- package/package.json +2 -2
- package/packages/language/en-US.ts +1 -0
- package/packages/language/es-ES.ts +1 -0
- package/packages/language/hu-HU.ts +1 -0
- package/packages/language/ja-JP.ts +1 -0
- package/packages/language/ko-KR.ts +1 -0
- package/packages/language/pt-BR.ts +1 -0
- package/packages/language/ru-RU.ts +1 -0
- package/packages/language/uk-UA.ts +1 -0
- package/packages/language/vi-VN.ts +1 -0
- package/packages/language/zh-CHT.ts +1 -0
- package/packages/language/zh-CN.ts +1 -0
- package/packages/ui/index.ts +1 -0
- package/packages/upload/src/upload.ts +125 -24
- package/styles/components/upload.scss +11 -0
- package/types/components/upload.d.ts +6 -1
- /package/es/icon/{iconfont.1731889697627.ttf → iconfont.1731931996427.ttf} +0 -0
- /package/es/icon/{iconfont.1731889697627.woff → iconfont.1731931996427.woff} +0 -0
- /package/es/icon/{iconfont.1731889697627.woff2 → iconfont.1731931996427.woff2} +0 -0
- /package/es/{iconfont.1731889697627.ttf → iconfont.1731931996427.ttf} +0 -0
- /package/es/{iconfont.1731889697627.woff → iconfont.1731931996427.woff} +0 -0
- /package/es/{iconfont.1731889697627.woff2 → iconfont.1731931996427.woff2} +0 -0
- /package/lib/icon/style/{iconfont.1731889697627.ttf → iconfont.1731931996427.ttf} +0 -0
- /package/lib/icon/style/{iconfont.1731889697627.woff → iconfont.1731931996427.woff} +0 -0
- /package/lib/icon/style/{iconfont.1731889697627.woff2 → iconfont.1731931996427.woff2} +0 -0
- /package/lib/{iconfont.1731889697627.ttf → iconfont.1731931996427.ttf} +0 -0
- /package/lib/{iconfont.1731889697627.woff → iconfont.1731931996427.woff} +0 -0
- /package/lib/{iconfont.1731889697627.woff2 → iconfont.1731931996427.woff2} +0 -0
|
@@ -308,6 +308,7 @@ export default {
|
|
|
308
308
|
fileTypeHint: '支持 {0} 文件类型',
|
|
309
309
|
fileSizeHint: '单个文件大小不超过{0}',
|
|
310
310
|
fileCountHint: '最多可上传{0}个文件',
|
|
311
|
+
uploadTypeErr: '文件类型不匹配!',
|
|
311
312
|
overCountErr: '最多只能选择{0}个文件!',
|
|
312
313
|
overCountExtraErr: '已超出最大数量{0}个,超出的{1}个文件将被忽略!',
|
|
313
314
|
overSizeErr: '文件大小最大不能超过{0}!',
|
|
@@ -308,6 +308,7 @@ export default {
|
|
|
308
308
|
fileTypeHint: 'Support {0} file types',
|
|
309
309
|
fileSizeHint: 'Single file size does not exceed {0}',
|
|
310
310
|
fileCountHint: 'Up to {0} file can be uploaded',
|
|
311
|
+
uploadTypeErr: '文件类型不匹配!',
|
|
311
312
|
overCountErr: 'You can only choose {0} file!',
|
|
312
313
|
overCountExtraErr: 'It has exceeded the maximum number {0}, and more than {0} file will be ignored!超出最大数量 1 个,超出的 1 个文件将被忽略!',
|
|
313
314
|
overSizeErr: 'The size of the file is not more than {0}}!',
|
|
@@ -308,6 +308,7 @@ export default {
|
|
|
308
308
|
fileTypeHint: 'Поддерживаемые типы файлов: {0}',
|
|
309
309
|
fileSizeHint: 'Размер одного файла не превышает {0}',
|
|
310
310
|
fileCountHint: 'Можно загрузить до {0} файлов.',
|
|
311
|
+
uploadTypeErr: '文件类型不匹配!',
|
|
311
312
|
overCountErr: 'Можно выбрать только {0} файлов!',
|
|
312
313
|
overCountExtraErr: 'Превышено максимальное количество файлов ({0}). Лишние файлы ({1}) будут проигнорированы!',
|
|
313
314
|
overSizeErr: 'Максимальный размер файла не может превышать {0}!',
|
|
@@ -308,6 +308,7 @@ export default {
|
|
|
308
308
|
fileTypeHint: '支持 {0} 文件类型',
|
|
309
309
|
fileSizeHint: '单个文件大小不超过{0}',
|
|
310
310
|
fileCountHint: '最多可上传{0}个文件',
|
|
311
|
+
uploadTypeErr: '文件类型不匹配!',
|
|
311
312
|
overCountErr: '最多只能选择{0}个文件!',
|
|
312
313
|
overCountExtraErr: '已超出最大数量{0}个,超出的{1}个文件将被忽略!',
|
|
313
314
|
overSizeErr: '文件大小最大不能超过{0}!',
|
|
@@ -308,6 +308,7 @@ export default {
|
|
|
308
308
|
fileTypeHint: '支持 {0} 文件类型',
|
|
309
309
|
fileSizeHint: '单个文件大小不超过{0}',
|
|
310
310
|
fileCountHint: '最多可上传{0}个文件',
|
|
311
|
+
uploadTypeErr: '文件类型不匹配!',
|
|
311
312
|
overCountErr: '最多只能选择{0}个文件!',
|
|
312
313
|
overCountExtraErr: '已超出最大数量{0}个,超出的{1}个文件将被忽略!',
|
|
313
314
|
overSizeErr: '文件大小最大不能超过{0}!',
|
|
@@ -308,6 +308,7 @@ export default {
|
|
|
308
308
|
fileTypeHint: '支援 {0} 文件類型',
|
|
309
309
|
fileSizeHint: '單一檔案大小不超過{0}',
|
|
310
310
|
fileCountHint: '最多可上傳{0}個文件',
|
|
311
|
+
uploadTypeErr: '文件类型不匹配!',
|
|
311
312
|
overCountErr: '最多只能選擇{0}個檔案!',
|
|
312
313
|
overCountExtraErr: '已超出最大數量{0}個,超出的{1}個檔案將被忽略!',
|
|
313
314
|
overSizeErr: '檔案大小最大不能超過{0}!',
|
|
@@ -308,6 +308,7 @@ export default {
|
|
|
308
308
|
fileTypeHint: '支持 {0} 文件类型',
|
|
309
309
|
fileSizeHint: '单个文件大小不超过{0}',
|
|
310
310
|
fileCountHint: '最多可上传{0}个文件',
|
|
311
|
+
uploadTypeErr: '文件类型不匹配!',
|
|
311
312
|
overCountErr: '最多只能选择{0}个文件!',
|
|
312
313
|
overCountExtraErr: '已超出最大数量{0}个,超出的{1}个文件将被忽略!',
|
|
313
314
|
overSizeErr: '文件大小最大不能超过{0}!',
|
package/packages/ui/index.ts
CHANGED
|
@@ -1,19 +1,30 @@
|
|
|
1
1
|
import { PropType, CreateElement, VNode } from 'vue'
|
|
2
2
|
import { defineVxeComponent } from '../../ui/src/comp'
|
|
3
3
|
import XEUtils from 'xe-utils'
|
|
4
|
-
import { VxeUI, getConfig, getI18n, getIcon, globalMixins, createEvent, renderEmptyElement } from '../../ui'
|
|
4
|
+
import { VxeUI, getConfig, getI18n, getIcon, globalMixins, createEvent, globalEvents, renderEmptyElement } from '../../ui'
|
|
5
5
|
import { getSlotVNs } from '../..//ui/src/vn'
|
|
6
6
|
import { errLog } from '../../ui/src/log'
|
|
7
|
-
import { toCssUnit } from '../../ui/src/dom'
|
|
7
|
+
import { getEventTargetNode, toCssUnit } from '../../ui/src/dom'
|
|
8
8
|
import { readLocalFile } from './util'
|
|
9
9
|
import VxeButtonComponent from '../../button/src/button'
|
|
10
10
|
|
|
11
11
|
import type { VxeUploadDefines, VxeUploadPropTypes, UploadReactData, UploadInternalData, VxeUploadEmits, VxeComponentSizeType, VxeFormDefines, VxeFormConstructor, VxeFormPrivateMethods, ValueOf } from '../../../types'
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
function getUniqueKey () {
|
|
14
14
|
return XEUtils.uniqueId()
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
+
function handleTransferFiles (items: DataTransferItemList) {
|
|
18
|
+
const files: File[] = []
|
|
19
|
+
XEUtils.arrayEach(items, item => {
|
|
20
|
+
const file = item.getAsFile()
|
|
21
|
+
if (file) {
|
|
22
|
+
files.push(file)
|
|
23
|
+
}
|
|
24
|
+
})
|
|
25
|
+
return files
|
|
26
|
+
}
|
|
27
|
+
|
|
17
28
|
export default defineVxeComponent({
|
|
18
29
|
name: 'VxeUpload',
|
|
19
30
|
model: {
|
|
@@ -54,6 +65,14 @@ export default defineVxeComponent({
|
|
|
54
65
|
type: Array as PropType<VxeUploadPropTypes.FileTypes>,
|
|
55
66
|
default: () => XEUtils.clone(getConfig().upload.fileTypes, true)
|
|
56
67
|
},
|
|
68
|
+
dragToUpload: {
|
|
69
|
+
type: Boolean as PropType<VxeUploadPropTypes.DragToUpload>,
|
|
70
|
+
default: () => XEUtils.clone(getConfig().upload.dragToUpload, true)
|
|
71
|
+
},
|
|
72
|
+
pasteToUpload: {
|
|
73
|
+
type: Boolean as PropType<VxeUploadPropTypes.PasteToUpload>,
|
|
74
|
+
default: () => XEUtils.clone(getConfig().upload.pasteToUpload, true)
|
|
75
|
+
},
|
|
57
76
|
keyField: String as PropType<VxeUploadPropTypes.KeyField>,
|
|
58
77
|
singleMode: Boolean as PropType<VxeUploadPropTypes.SingleMode>,
|
|
59
78
|
urlMode: Boolean as PropType<VxeUploadPropTypes.UrlMode>,
|
|
@@ -159,6 +178,7 @@ export default defineVxeComponent({
|
|
|
159
178
|
const reactData: UploadReactData = {
|
|
160
179
|
isDrag: false,
|
|
161
180
|
showMorePopup: false,
|
|
181
|
+
isActivated: false,
|
|
162
182
|
fileList: [],
|
|
163
183
|
fileCacheMaps: {}
|
|
164
184
|
}
|
|
@@ -863,6 +883,37 @@ export default defineVxeComponent({
|
|
|
863
883
|
}
|
|
864
884
|
}
|
|
865
885
|
},
|
|
886
|
+
uploadTransferFileEvent (evnt: Event, files: File[]) {
|
|
887
|
+
const $xeUpload = this
|
|
888
|
+
const props = $xeUpload
|
|
889
|
+
const internalData = $xeUpload.internalData
|
|
890
|
+
|
|
891
|
+
const { imageTypes } = props
|
|
892
|
+
const { imagePreviewTypes } = internalData
|
|
893
|
+
const isImage = $xeUpload.computeIsImage
|
|
894
|
+
if (isImage) {
|
|
895
|
+
const pasteImgTypes = imagePreviewTypes.concat(imageTypes && imageTypes.length ? imageTypes : [])
|
|
896
|
+
files = files.filter(file => {
|
|
897
|
+
const fileType = `${file.type.split('/')[1] || ''}`.toLowerCase()
|
|
898
|
+
if (pasteImgTypes.some(type => `${type}`.toLowerCase() === fileType)) {
|
|
899
|
+
return true
|
|
900
|
+
}
|
|
901
|
+
return false
|
|
902
|
+
})
|
|
903
|
+
}
|
|
904
|
+
// 如果全部不满足条件
|
|
905
|
+
if (!files.length) {
|
|
906
|
+
if (VxeUI.modal) {
|
|
907
|
+
VxeUI.modal.notification({
|
|
908
|
+
title: getI18n('vxe.modal.errTitle'),
|
|
909
|
+
status: 'error',
|
|
910
|
+
content: getI18n('vxe.upload.uploadTypeErr')
|
|
911
|
+
})
|
|
912
|
+
}
|
|
913
|
+
return
|
|
914
|
+
}
|
|
915
|
+
$xeUpload.uploadFile(files, evnt)
|
|
916
|
+
},
|
|
866
917
|
handleDropEvent (evnt: DragEvent) {
|
|
867
918
|
const $xeUpload = this
|
|
868
919
|
const reactData = $xeUpload.reactData
|
|
@@ -871,15 +922,11 @@ export default defineVxeComponent({
|
|
|
871
922
|
if (dataTransfer) {
|
|
872
923
|
const { items } = dataTransfer
|
|
873
924
|
if (items && items.length) {
|
|
874
|
-
const files: File[] = []
|
|
875
|
-
Array.from(items).forEach(item => {
|
|
876
|
-
const file = item.getAsFile()
|
|
877
|
-
if (file) {
|
|
878
|
-
files.push(file)
|
|
879
|
-
}
|
|
880
|
-
})
|
|
881
|
-
$xeUpload.uploadFile(files, evnt)
|
|
882
925
|
evnt.preventDefault()
|
|
926
|
+
const files = handleTransferFiles(items)
|
|
927
|
+
if (files.length) {
|
|
928
|
+
$xeUpload.uploadTransferFileEvent(evnt, files)
|
|
929
|
+
}
|
|
883
930
|
}
|
|
884
931
|
}
|
|
885
932
|
reactData.isDrag = false
|
|
@@ -903,11 +950,18 @@ export default defineVxeComponent({
|
|
|
903
950
|
maskClosable: true,
|
|
904
951
|
slots: {
|
|
905
952
|
default (params, h) {
|
|
906
|
-
const { showErrorStatus } = props
|
|
953
|
+
const { showErrorStatus, dragToUpload } = props
|
|
907
954
|
const { isDrag } = reactData
|
|
908
955
|
const isDisabled = $xeUpload.computeIsDisabled
|
|
909
956
|
const { fileList } = reactData
|
|
910
957
|
|
|
958
|
+
const ons: Record<string, any> = {}
|
|
959
|
+
if (dragToUpload) {
|
|
960
|
+
ons.dragover = $xeUpload.handleDragoverEvent
|
|
961
|
+
ons.dragleave = $xeUpload.handleDragleaveEvent
|
|
962
|
+
ons.drop = $xeUpload.handleDropEvent
|
|
963
|
+
}
|
|
964
|
+
|
|
911
965
|
return h('div', {
|
|
912
966
|
class: ['vxe-upload--more-popup', {
|
|
913
967
|
'is--readonly': formReadonly,
|
|
@@ -915,11 +969,7 @@ export default defineVxeComponent({
|
|
|
915
969
|
'show--error': showErrorStatus,
|
|
916
970
|
'is--drag': isDrag
|
|
917
971
|
}],
|
|
918
|
-
on:
|
|
919
|
-
dragover: $xeUpload.handleDragoverEvent,
|
|
920
|
-
dragleave: $xeUpload.handleDragleaveEvent,
|
|
921
|
-
drop: $xeUpload.handleDropEvent
|
|
922
|
-
}
|
|
972
|
+
on: ons
|
|
923
973
|
}, [
|
|
924
974
|
isImage
|
|
925
975
|
? h('div', {
|
|
@@ -950,6 +1000,45 @@ export default defineVxeComponent({
|
|
|
950
1000
|
})
|
|
951
1001
|
}
|
|
952
1002
|
},
|
|
1003
|
+
handleGlobalPasteEvent (evnt: ClipboardEvent) {
|
|
1004
|
+
const $xeUpload = this
|
|
1005
|
+
const props = $xeUpload
|
|
1006
|
+
const reactData = $xeUpload.reactData
|
|
1007
|
+
|
|
1008
|
+
const { pasteToUpload } = props
|
|
1009
|
+
const { isActivated } = reactData
|
|
1010
|
+
if (!isActivated || !pasteToUpload) {
|
|
1011
|
+
return
|
|
1012
|
+
}
|
|
1013
|
+
const clipboardData: DataTransfer = evnt.clipboardData || (evnt as any).originalEvent.clipboardData
|
|
1014
|
+
if (!clipboardData) {
|
|
1015
|
+
return
|
|
1016
|
+
}
|
|
1017
|
+
const { items } = clipboardData
|
|
1018
|
+
if (!items) {
|
|
1019
|
+
return
|
|
1020
|
+
}
|
|
1021
|
+
const files = handleTransferFiles(items)
|
|
1022
|
+
if (files.length) {
|
|
1023
|
+
evnt.preventDefault()
|
|
1024
|
+
$xeUpload.uploadTransferFileEvent(evnt, files)
|
|
1025
|
+
}
|
|
1026
|
+
},
|
|
1027
|
+
handleGlobalMousedownEvent (evnt: MouseEvent) {
|
|
1028
|
+
const $xeUpload = this
|
|
1029
|
+
const reactData = $xeUpload.reactData
|
|
1030
|
+
|
|
1031
|
+
const el = $xeUpload.$refs.refElem
|
|
1032
|
+
const isActivated = getEventTargetNode(evnt, el).flag
|
|
1033
|
+
reactData.isActivated = isActivated
|
|
1034
|
+
},
|
|
1035
|
+
handleGlobalBlurEvent () {
|
|
1036
|
+
const $xeUpload = this
|
|
1037
|
+
const reactData = $xeUpload.reactData
|
|
1038
|
+
|
|
1039
|
+
reactData.isActivated = false
|
|
1040
|
+
},
|
|
1041
|
+
|
|
953
1042
|
//
|
|
954
1043
|
// Render
|
|
955
1044
|
//
|
|
@@ -1396,26 +1485,32 @@ export default defineVxeComponent({
|
|
|
1396
1485
|
const props = $xeUpload
|
|
1397
1486
|
const reactData = $xeUpload.reactData
|
|
1398
1487
|
|
|
1399
|
-
const { showErrorStatus } = props
|
|
1400
|
-
const { isDrag, showMorePopup } = reactData
|
|
1488
|
+
const { showErrorStatus, dragToUpload, pasteToUpload } = props
|
|
1489
|
+
const { isDrag, showMorePopup, isActivated } = reactData
|
|
1401
1490
|
const vSize = $xeUpload.computeSize
|
|
1402
1491
|
const isDisabled = $xeUpload.computeIsDisabled
|
|
1403
1492
|
const formReadonly = $xeUpload.computeFormReadonly
|
|
1404
1493
|
const isImage = $xeUpload.computeIsImage
|
|
1494
|
+
|
|
1495
|
+
const ons: Record<string, any> = {}
|
|
1496
|
+
if (dragToUpload) {
|
|
1497
|
+
ons.dragover = $xeUpload.handleDragoverEvent
|
|
1498
|
+
ons.dragleave = $xeUpload.handleDragleaveEvent
|
|
1499
|
+
ons.drop = $xeUpload.handleDropEvent
|
|
1500
|
+
}
|
|
1501
|
+
|
|
1405
1502
|
return h('div', {
|
|
1406
1503
|
ref: 'refElem',
|
|
1407
1504
|
class: ['vxe-upload', {
|
|
1408
1505
|
[`size--${vSize}`]: vSize,
|
|
1506
|
+
'is--active': isActivated,
|
|
1409
1507
|
'is--readonly': formReadonly,
|
|
1410
1508
|
'is--disabled': isDisabled,
|
|
1509
|
+
'is--paste': pasteToUpload,
|
|
1411
1510
|
'show--error': showErrorStatus,
|
|
1412
1511
|
'is--drag': isDrag
|
|
1413
1512
|
}],
|
|
1414
|
-
on:
|
|
1415
|
-
dragover: $xeUpload.handleDragoverEvent,
|
|
1416
|
-
dragleave: $xeUpload.handleDragleaveEvent,
|
|
1417
|
-
drop: $xeUpload.handleDropEvent
|
|
1418
|
-
}
|
|
1513
|
+
on: ons
|
|
1419
1514
|
}, [
|
|
1420
1515
|
isImage ? $xeUpload.renderImageMode(h) : $xeUpload.renderAllMode(h),
|
|
1421
1516
|
isDrag && !showMorePopup
|
|
@@ -1440,12 +1535,18 @@ export default defineVxeComponent({
|
|
|
1440
1535
|
errLog('vxe.error.errConflicts', ['multiple', 'single-mode'])
|
|
1441
1536
|
}
|
|
1442
1537
|
}
|
|
1538
|
+
globalEvents.on($xeUpload, 'paste', $xeUpload.handleGlobalPasteEvent)
|
|
1539
|
+
globalEvents.on($xeUpload, 'mousedown', $xeUpload.handleGlobalMousedownEvent)
|
|
1540
|
+
globalEvents.on($xeUpload, 'blur', $xeUpload.handleGlobalBlurEvent)
|
|
1443
1541
|
},
|
|
1444
1542
|
beforeDestroy () {
|
|
1445
1543
|
const $xeUpload = this
|
|
1446
1544
|
const reactData = $xeUpload.reactData
|
|
1447
1545
|
|
|
1448
1546
|
reactData.isDrag = false
|
|
1547
|
+
globalEvents.off($xeUpload, 'paste')
|
|
1548
|
+
globalEvents.off($xeUpload, 'mousedown')
|
|
1549
|
+
globalEvents.off($xeUpload, 'blur')
|
|
1449
1550
|
},
|
|
1450
1551
|
render (this: any, h) {
|
|
1451
1552
|
return this.renderVN(h)
|
|
@@ -2,6 +2,17 @@
|
|
|
2
2
|
position: relative;
|
|
3
3
|
color: var(--vxe-ui-font-color);
|
|
4
4
|
font-family: var(--vxe-ui-font-family);
|
|
5
|
+
&.is--active {
|
|
6
|
+
.vxe-upload--image-action-box {
|
|
7
|
+
border-color: var(--vxe-ui-font-primary-color);
|
|
8
|
+
}
|
|
9
|
+
.vxe-upload--file-action-btn {
|
|
10
|
+
& > .vxe-button {
|
|
11
|
+
border-color: var(--vxe-ui-font-primary-color);
|
|
12
|
+
border-style: var(--vxe-ui-upload-file-button-border-style);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
5
16
|
&.show--error {
|
|
6
17
|
.vxe-upload--file-item {
|
|
7
18
|
&.is--error {
|
|
@@ -34,6 +34,8 @@ export namespace VxeUploadPropTypes {
|
|
|
34
34
|
}
|
|
35
35
|
export type FileTypes = string[]
|
|
36
36
|
export type SingleMode = boolean
|
|
37
|
+
export type DragToUpload = boolean
|
|
38
|
+
export type PasteToUpload = boolean
|
|
37
39
|
export type KeyField = string
|
|
38
40
|
export type UrlMode = boolean
|
|
39
41
|
export type Multiple = boolean
|
|
@@ -111,6 +113,8 @@ export interface VxeUploadProps {
|
|
|
111
113
|
fileTypes?: VxeUploadPropTypes.FileTypes
|
|
112
114
|
multiple?: VxeUploadPropTypes.Multiple
|
|
113
115
|
singleMode?: VxeUploadPropTypes.SingleMode
|
|
116
|
+
dragToUpload?: VxeUploadPropTypes.DragToUpload
|
|
117
|
+
pasteToUpload?: VxeUploadPropTypes.PasteToUpload
|
|
114
118
|
keyField?: VxeUploadPropTypes.KeyField
|
|
115
119
|
urlMode?: VxeUploadPropTypes.UrlMode
|
|
116
120
|
/**
|
|
@@ -157,7 +161,8 @@ export interface VxeUploadPrivateComputed extends UploadPrivateComputed { }
|
|
|
157
161
|
|
|
158
162
|
export interface UploadReactData {
|
|
159
163
|
isDrag: boolean
|
|
160
|
-
showMorePopup: boolean
|
|
164
|
+
showMorePopup: boolean
|
|
165
|
+
isActivated: boolean
|
|
161
166
|
fileList: VxeUploadDefines.FileObjItem[]
|
|
162
167
|
fileCacheMaps: Record<string, VxeUploadDefines.FileCacheItem>
|
|
163
168
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|