vxe-pc-ui 4.6.45 → 4.6.47
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/index.esm.js +6 -0
- package/es/input/src/input.js +4 -2
- package/es/language/ar-EG.js +1 -0
- package/es/language/de-DE.js +1 -0
- package/es/language/en-US.js +1 -0
- package/es/language/es-ES.js +1 -0
- package/es/language/fr-FR.js +1 -0
- package/es/language/hu-HU.js +1 -0
- package/es/language/hy-AM.js +1 -0
- package/es/language/id-ID.js +1 -0
- package/es/language/it-IT.js +1 -0
- package/es/language/ja-JP.js +1 -0
- package/es/language/ko-KR.js +1 -0
- package/es/language/ms-MY.js +1 -0
- package/es/language/nb-NO.js +1 -0
- package/es/language/pt-BR.js +1 -0
- package/es/language/ru-RU.js +1 -0
- package/es/language/th-TH.js +1 -0
- package/es/language/ug-CN.js +1 -0
- package/es/language/uk-UA.js +1 -0
- package/es/language/uz-UZ.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/select/src/select.js +14 -3
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/ui/index.js +5 -2
- package/es/ui/src/log.js +1 -1
- package/es/upload/src/upload.js +103 -44
- package/es/upload/style.css +45 -10
- package/es/upload/style.min.css +1 -1
- package/es/vxe-upload/style.css +45 -10
- 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.common.js +6 -0
- package/lib/index.umd.js +123 -37
- package/lib/index.umd.min.js +1 -1
- package/lib/input/src/input.js +4 -1
- package/lib/input/src/input.min.js +1 -1
- package/lib/language/ar-EG.js +1 -0
- package/lib/language/ar-EG.min.js +1 -1
- package/lib/language/ar-EG.umd.js +1 -0
- package/lib/language/de-DE.js +1 -0
- package/lib/language/de-DE.min.js +1 -1
- package/lib/language/de-DE.umd.js +1 -0
- 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/fr-FR.js +1 -0
- package/lib/language/fr-FR.min.js +1 -1
- package/lib/language/fr-FR.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/hy-AM.js +1 -0
- package/lib/language/hy-AM.min.js +1 -1
- package/lib/language/hy-AM.umd.js +1 -0
- package/lib/language/id-ID.js +1 -0
- package/lib/language/id-ID.min.js +1 -1
- package/lib/language/id-ID.umd.js +1 -0
- package/lib/language/it-IT.js +1 -0
- package/lib/language/it-IT.min.js +1 -1
- package/lib/language/it-IT.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/ms-MY.js +1 -0
- package/lib/language/ms-MY.min.js +1 -1
- package/lib/language/ms-MY.umd.js +1 -0
- package/lib/language/nb-NO.js +1 -0
- package/lib/language/nb-NO.min.js +1 -1
- package/lib/language/nb-NO.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/th-TH.js +1 -0
- package/lib/language/th-TH.min.js +1 -1
- package/lib/language/th-TH.umd.js +1 -0
- package/lib/language/ug-CN.js +1 -0
- package/lib/language/ug-CN.min.js +1 -1
- package/lib/language/ug-CN.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/uz-UZ.js +1 -0
- package/lib/language/uz-UZ.min.js +1 -1
- package/lib/language/uz-UZ.umd.js +1 -0
- package/lib/language/vi-VN.js +1 -0
- package/lib/language/vi-VN.min.js +1 -1
- package/lib/language/vi-VN.umd.js +1 -0
- 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/select/src/select.js +12 -3
- package/lib/select/src/select.min.js +1 -1
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/ui/index.js +5 -2
- 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 +100 -30
- package/lib/upload/src/upload.min.js +1 -1
- package/lib/upload/style/style.css +45 -10
- package/lib/upload/style/style.min.css +1 -1
- package/lib/vxe-upload/style/style.css +45 -10
- package/lib/vxe-upload/style/style.min.css +1 -1
- package/package.json +1 -1
- package/packages/index.ts +21 -0
- package/packages/input/src/input.ts +4 -2
- package/packages/language/ar-EG.ts +1 -0
- package/packages/language/de-DE.ts +1 -0
- package/packages/language/en-US.ts +1 -0
- package/packages/language/es-ES.ts +1 -0
- package/packages/language/fr-FR.ts +1 -0
- package/packages/language/hu-HU.ts +1 -0
- package/packages/language/hy-AM.ts +1 -0
- package/packages/language/id-ID.ts +1 -0
- package/packages/language/it-IT.ts +1 -0
- package/packages/language/ja-JP.ts +1 -0
- package/packages/language/ko-KR.ts +1 -0
- package/packages/language/ms-MY.ts +1 -0
- package/packages/language/nb-NO.ts +1 -0
- package/packages/language/pt-BR.ts +1 -0
- package/packages/language/ru-RU.ts +1 -0
- package/packages/language/th-TH.ts +1 -0
- package/packages/language/ug-CN.ts +1 -0
- package/packages/language/uk-UA.ts +1 -0
- package/packages/language/uz-UZ.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/select/src/select.ts +13 -3
- package/packages/ui/index.ts +4 -1
- package/packages/upload/src/upload.ts +106 -46
- package/styles/components/upload.scss +74 -25
- package/types/components/column.d.ts +6 -6
- package/types/components/input.d.ts +2 -0
- package/types/components/table-plugins/filters-combination.d.ts +15 -0
- package/types/components/table-plugins/filters-complex-input.d.ts +9 -0
- package/types/components/table-plugins/index.d.ts +2 -0
- package/types/components/upload.d.ts +14 -1
- package/types/ui/global-icon.d.ts +1 -0
- package/types/ui/renderer.d.ts +3 -0
- /package/es/icon/{iconfont.1751536878019.ttf → iconfont.1751618343421.ttf} +0 -0
- /package/es/icon/{iconfont.1751536878019.woff → iconfont.1751618343421.woff} +0 -0
- /package/es/icon/{iconfont.1751536878019.woff2 → iconfont.1751618343421.woff2} +0 -0
- /package/es/{iconfont.1751536878019.ttf → iconfont.1751618343421.ttf} +0 -0
- /package/es/{iconfont.1751536878019.woff → iconfont.1751618343421.woff} +0 -0
- /package/es/{iconfont.1751536878019.woff2 → iconfont.1751618343421.woff2} +0 -0
- /package/lib/icon/style/{iconfont.1751536878019.ttf → iconfont.1751618343421.ttf} +0 -0
- /package/lib/icon/style/{iconfont.1751536878019.woff → iconfont.1751618343421.woff} +0 -0
- /package/lib/icon/style/{iconfont.1751536878019.woff2 → iconfont.1751618343421.woff2} +0 -0
- /package/lib/{iconfont.1751536878019.ttf → iconfont.1751618343421.ttf} +0 -0
- /package/lib/{iconfont.1751536878019.woff → iconfont.1751618343421.woff} +0 -0
- /package/lib/{iconfont.1751536878019.woff2 → iconfont.1751618343421.woff2} +0 -0
|
@@ -1128,7 +1128,17 @@ export default defineVxeComponent({
|
|
|
1128
1128
|
const isDisabled = !isAdd && checkOptionDisabled(isSelected, option, group)
|
|
1129
1129
|
const defaultSlot = slots ? slots.default : null
|
|
1130
1130
|
const optParams = { option, group: null, $select: $xeSelect }
|
|
1131
|
-
|
|
1131
|
+
let optLabel = ''
|
|
1132
|
+
let optVNs: string | VxeComponentSlotType[] = []
|
|
1133
|
+
if (optionSlot) {
|
|
1134
|
+
optVNs = callSlot(optionSlot, optParams)
|
|
1135
|
+
} else if (defaultSlot) {
|
|
1136
|
+
optVNs = callSlot(defaultSlot, optParams)
|
|
1137
|
+
} else {
|
|
1138
|
+
optLabel = getFuncText(option[(isOptGroup ? groupLabelField : labelField) as 'label'])
|
|
1139
|
+
optVNs = optLabel
|
|
1140
|
+
}
|
|
1141
|
+
|
|
1132
1142
|
return isVisible
|
|
1133
1143
|
? h('div', {
|
|
1134
1144
|
key: useKey || optionKey ? optid : cIndex,
|
|
@@ -1139,9 +1149,8 @@ export default defineVxeComponent({
|
|
|
1139
1149
|
'is--add': isAdd,
|
|
1140
1150
|
'is--hover': currentOption && getOptId(currentOption) === optid
|
|
1141
1151
|
}],
|
|
1142
|
-
// attrs
|
|
1143
1152
|
optid: optid,
|
|
1144
|
-
|
|
1153
|
+
title: optLabel || null,
|
|
1145
1154
|
onMousedown: (evnt: MouseEvent) => {
|
|
1146
1155
|
const isLeftBtn = evnt.button === 0
|
|
1147
1156
|
if (isLeftBtn) {
|
|
@@ -1258,6 +1267,7 @@ export default defineVxeComponent({
|
|
|
1258
1267
|
prefixIcon: props.prefixIcon,
|
|
1259
1268
|
suffixIcon: loading ? getIcon().SELECT_LOADED : (visiblePanel ? getIcon().SELECT_OPEN : getIcon().SELECT_CLOSE),
|
|
1260
1269
|
autoFocus: false,
|
|
1270
|
+
title: selectLabel,
|
|
1261
1271
|
modelValue: selectLabel,
|
|
1262
1272
|
onClear: clearEvent,
|
|
1263
1273
|
onClick: clickEvent,
|
package/packages/ui/index.ts
CHANGED
|
@@ -381,7 +381,9 @@ setConfig({
|
|
|
381
381
|
dragToUpload: true,
|
|
382
382
|
// imageConfig: {},
|
|
383
383
|
showLimitSize: true,
|
|
384
|
-
showLimitCount: true
|
|
384
|
+
showLimitCount: true,
|
|
385
|
+
autoSubmit: true,
|
|
386
|
+
maxSimultaneousUploads: 5
|
|
385
387
|
},
|
|
386
388
|
watermark: {
|
|
387
389
|
rotate: -30,
|
|
@@ -504,6 +506,7 @@ setIcon({
|
|
|
504
506
|
UPLOAD_FILE_ADD: iconPrefix + 'upload',
|
|
505
507
|
UPLOAD_FILE_REMOVE: iconPrefix + 'delete',
|
|
506
508
|
UPLOAD_FILE_DOWNLOAD: iconPrefix + 'download',
|
|
509
|
+
UPLOAD_IMAGE_UPLOAD: iconPrefix + 'upload',
|
|
507
510
|
UPLOAD_IMAGE_RE_UPLOAD: iconPrefix + 'repeat',
|
|
508
511
|
UPLOAD_IMAGE_ADD: iconPrefix + 'add',
|
|
509
512
|
UPLOAD_IMAGE_REMOVE: iconPrefix + 'close',
|
|
@@ -28,6 +28,10 @@ export default defineVxeComponent({
|
|
|
28
28
|
type: Boolean as PropType<VxeUploadPropTypes.Disabled>,
|
|
29
29
|
default: null
|
|
30
30
|
},
|
|
31
|
+
autoSubmit: {
|
|
32
|
+
type: Boolean as PropType<VxeUploadPropTypes.AutoSubmit>,
|
|
33
|
+
default: () => getConfig().upload.autoSubmit
|
|
34
|
+
},
|
|
31
35
|
mode: {
|
|
32
36
|
type: String as PropType<VxeUploadPropTypes.Mode>,
|
|
33
37
|
default: () => getConfig().upload.mode
|
|
@@ -117,6 +121,7 @@ export default defineVxeComponent({
|
|
|
117
121
|
type: [String, Number, Function] as PropType<VxeUploadPropTypes.ProgressText>,
|
|
118
122
|
default: () => getConfig().upload.progressText
|
|
119
123
|
},
|
|
124
|
+
showSubmitButton: Boolean as PropType<VxeUploadPropTypes.ShowSubmitButton>,
|
|
120
125
|
autoHiddenButton: {
|
|
121
126
|
type: Boolean as PropType<VxeUploadPropTypes.AutoHiddenButton>,
|
|
122
127
|
default: () => getConfig().upload.autoHiddenButton
|
|
@@ -157,6 +162,10 @@ export default defineVxeComponent({
|
|
|
157
162
|
type: Boolean as PropType<VxeUploadPropTypes.ShowTip>,
|
|
158
163
|
default: () => null
|
|
159
164
|
},
|
|
165
|
+
maxSimultaneousUploads: {
|
|
166
|
+
type: Number as PropType<VxeUploadPropTypes.MaxSimultaneousUploads>,
|
|
167
|
+
default: () => getConfig().upload.maxSimultaneousUploads
|
|
168
|
+
},
|
|
160
169
|
tipText: [String, Number, Function] as PropType<VxeUploadPropTypes.TipText>,
|
|
161
170
|
hintText: String as PropType<VxeUploadPropTypes.HintText>,
|
|
162
171
|
previewMethod: Function as PropType<VxeUploadPropTypes.PreviewMethod>,
|
|
@@ -570,6 +579,7 @@ export default defineVxeComponent({
|
|
|
570
579
|
const cacheItem = fileCacheMaps[fileKey]
|
|
571
580
|
if (cacheItem) {
|
|
572
581
|
cacheItem.percent = 100
|
|
582
|
+
cacheItem.status = 'success'
|
|
573
583
|
}
|
|
574
584
|
Object.assign(item, res)
|
|
575
585
|
dispatchEvent('upload-success', { option: item, data: res }, null)
|
|
@@ -611,7 +621,7 @@ export default defineVxeComponent({
|
|
|
611
621
|
if (uploadFn && cacheItem) {
|
|
612
622
|
const file = cacheItem.file
|
|
613
623
|
cacheItem.loading = true
|
|
614
|
-
cacheItem.status = ''
|
|
624
|
+
cacheItem.status = 'pending'
|
|
615
625
|
cacheItem.percent = 0
|
|
616
626
|
handleUploadResult(item, file).then(() => {
|
|
617
627
|
if (urlMode) {
|
|
@@ -620,8 +630,8 @@ export default defineVxeComponent({
|
|
|
620
630
|
})
|
|
621
631
|
}
|
|
622
632
|
}
|
|
623
|
-
const
|
|
624
|
-
const { multiple, urlMode, showLimitSize, limitSizeText, showLimitCount, limitCountText } = props
|
|
633
|
+
const handleUploadFile = (files: File[], evnt: Event | null) => {
|
|
634
|
+
const { multiple, urlMode, showLimitSize, limitSizeText, showLimitCount, limitCountText, autoSubmit } = props
|
|
625
635
|
const { fileList } = reactData
|
|
626
636
|
const uploadFn = props.uploadMethod || getConfig().upload.uploadMethod
|
|
627
637
|
const keyField = computeKeyField.value
|
|
@@ -716,13 +726,13 @@ export default defineVxeComponent({
|
|
|
716
726
|
if (uploadFn) {
|
|
717
727
|
cacheMaps[fileKey] = {
|
|
718
728
|
file: file,
|
|
719
|
-
loading:
|
|
720
|
-
status: '',
|
|
729
|
+
loading: !!autoSubmit,
|
|
730
|
+
status: 'pending',
|
|
721
731
|
percent: 0
|
|
722
732
|
}
|
|
723
733
|
}
|
|
724
734
|
const item = reactive(fileObj)
|
|
725
|
-
if (uploadFn) {
|
|
735
|
+
if (uploadFn && autoSubmit) {
|
|
726
736
|
uploadPromiseRests.push(
|
|
727
737
|
handleUploadResult(item, file)
|
|
728
738
|
)
|
|
@@ -756,7 +766,7 @@ export default defineVxeComponent({
|
|
|
756
766
|
multiple,
|
|
757
767
|
types: isImage ? imageTypes : fileTypes
|
|
758
768
|
}).then((params) => {
|
|
759
|
-
|
|
769
|
+
handleUploadFile(params.files, evnt)
|
|
760
770
|
return params
|
|
761
771
|
})
|
|
762
772
|
}
|
|
@@ -908,7 +918,7 @@ export default defineVxeComponent({
|
|
|
908
918
|
}
|
|
909
919
|
return
|
|
910
920
|
}
|
|
911
|
-
|
|
921
|
+
handleUploadFile(files, evnt)
|
|
912
922
|
}
|
|
913
923
|
|
|
914
924
|
const handleUploadDropEvent = (evnt: DragEvent) => {
|
|
@@ -1183,6 +1193,43 @@ export default defineVxeComponent({
|
|
|
1183
1193
|
dispatchEvent,
|
|
1184
1194
|
choose () {
|
|
1185
1195
|
return handleChoose(null)
|
|
1196
|
+
},
|
|
1197
|
+
submit (isFull) {
|
|
1198
|
+
const { maxSimultaneousUploads } = props
|
|
1199
|
+
const msNum = XEUtils.toNumber(maxSimultaneousUploads || 1) || 1
|
|
1200
|
+
const { fileList, fileCacheMaps } = reactData
|
|
1201
|
+
const allPendingList = fileList.filter(item => {
|
|
1202
|
+
const fileKey = getFieldKey(item)
|
|
1203
|
+
const cacheItem = fileCacheMaps[fileKey]
|
|
1204
|
+
return cacheItem && (cacheItem.status === 'pending' || (isFull && cacheItem.status === 'error'))
|
|
1205
|
+
})
|
|
1206
|
+
|
|
1207
|
+
const handleSubmit = (item: VxeUploadDefines.FileObjItem): Promise<void> => {
|
|
1208
|
+
const fileKey = getFieldKey(item)
|
|
1209
|
+
const cacheItem = fileCacheMaps[fileKey]
|
|
1210
|
+
if (cacheItem) {
|
|
1211
|
+
const file = cacheItem.file
|
|
1212
|
+
if (file && (cacheItem.status === 'pending' || (isFull && cacheItem.status === 'error'))) {
|
|
1213
|
+
cacheItem.loading = true
|
|
1214
|
+
cacheItem.percent = 0
|
|
1215
|
+
return handleUploadResult(item, file).then(handleNextSubmit)
|
|
1216
|
+
}
|
|
1217
|
+
}
|
|
1218
|
+
return handleNextSubmit()
|
|
1219
|
+
}
|
|
1220
|
+
|
|
1221
|
+
const handleNextSubmit = (): Promise<void> => {
|
|
1222
|
+
if (allPendingList.length) {
|
|
1223
|
+
const item = allPendingList[0]
|
|
1224
|
+
allPendingList.splice(0, 1)
|
|
1225
|
+
return handleSubmit(item).then(handleNextSubmit)
|
|
1226
|
+
}
|
|
1227
|
+
return Promise.resolve()
|
|
1228
|
+
}
|
|
1229
|
+
|
|
1230
|
+
return Promise.all(allPendingList.splice(0, msNum).map(handleSubmit)).then(() => {
|
|
1231
|
+
// 完成
|
|
1232
|
+
})
|
|
1186
1233
|
}
|
|
1187
1234
|
}
|
|
1188
1235
|
|
|
@@ -1192,7 +1239,7 @@ export default defineVxeComponent({
|
|
|
1192
1239
|
Object.assign($xeUpload, uploadMethods, uploadPrivateMethods)
|
|
1193
1240
|
|
|
1194
1241
|
const renderFileItemList = (currList: VxeUploadDefines.FileObjItem[], isMoreView: boolean) => {
|
|
1195
|
-
const { showRemoveButton, showDownloadButton, showProgress, progressText, showPreview, showErrorStatus, dragSort } = props
|
|
1242
|
+
const { showRemoveButton, showDownloadButton, showProgress, progressText, showPreview, showErrorStatus, dragSort, autoSubmit, showSubmitButton } = props
|
|
1196
1243
|
const { fileCacheMaps } = reactData
|
|
1197
1244
|
const isDisabled = computeIsDisabled.value
|
|
1198
1245
|
const formReadonly = computeFormReadonly.value
|
|
@@ -1210,13 +1257,21 @@ export default defineVxeComponent({
|
|
|
1210
1257
|
return currList.map((item, index) => {
|
|
1211
1258
|
const fileKey = getFieldKey(item)
|
|
1212
1259
|
const cacheItem = fileCacheMaps[fileKey]
|
|
1213
|
-
|
|
1214
|
-
|
|
1260
|
+
let isLoading = false
|
|
1261
|
+
let isError = false
|
|
1262
|
+
let isPending = false
|
|
1263
|
+
const fileName = `${item[nameProp] || ''}`
|
|
1264
|
+
if (cacheItem) {
|
|
1265
|
+
isLoading = cacheItem.loading
|
|
1266
|
+
isError = cacheItem.status === 'error'
|
|
1267
|
+
isPending = cacheItem.status === 'pending'
|
|
1268
|
+
}
|
|
1215
1269
|
return h('div', {
|
|
1216
1270
|
key: dragSort ? fileKey : index,
|
|
1217
1271
|
class: ['vxe-upload--file-item', {
|
|
1218
1272
|
'is--preview': showPreview,
|
|
1219
1273
|
'is--loading': isLoading,
|
|
1274
|
+
'is--pending': isPending,
|
|
1220
1275
|
'is--error': isError
|
|
1221
1276
|
}],
|
|
1222
1277
|
fileid: fileKey,
|
|
@@ -1232,12 +1287,13 @@ export default defineVxeComponent({
|
|
|
1232
1287
|
]),
|
|
1233
1288
|
h('div', {
|
|
1234
1289
|
class: 'vxe-upload--file-item-name',
|
|
1290
|
+
title: fileName,
|
|
1235
1291
|
onClick (evnt) {
|
|
1236
1292
|
if (!isLoading && !isError) {
|
|
1237
1293
|
handlePreviewFileEvent(evnt, item)
|
|
1238
1294
|
}
|
|
1239
1295
|
}
|
|
1240
|
-
},
|
|
1296
|
+
}, fileName),
|
|
1241
1297
|
isLoading
|
|
1242
1298
|
? h('div', {
|
|
1243
1299
|
class: 'vxe-upload--file-item-loading-icon'
|
|
@@ -1252,15 +1308,15 @@ export default defineVxeComponent({
|
|
|
1252
1308
|
class: 'vxe-upload--file-item-loading-text'
|
|
1253
1309
|
}, progressText ? XEUtils.toFormatString(`${XEUtils.isFunction(progressText) ? progressText({}) : progressText}`, { percent: cacheItem.percent }) : getI18n('vxe.upload.uploadProgress', [cacheItem.percent]))
|
|
1254
1310
|
: renderEmptyElement($xeUpload),
|
|
1255
|
-
showErrorStatus &&
|
|
1311
|
+
!isLoading && ((isError && showErrorStatus) || (isPending && showSubmitButton && !autoSubmit))
|
|
1256
1312
|
? h('div', {
|
|
1257
|
-
class: 'vxe-upload--
|
|
1313
|
+
class: 'vxe-upload--file-item-rebtn'
|
|
1258
1314
|
}, [
|
|
1259
1315
|
h(VxeButtonComponent, {
|
|
1260
|
-
icon: getIcon().UPLOAD_IMAGE_RE_UPLOAD,
|
|
1316
|
+
icon: isError ? getIcon().UPLOAD_IMAGE_RE_UPLOAD : getIcon().UPLOAD_IMAGE_UPLOAD,
|
|
1261
1317
|
mode: 'text',
|
|
1262
1318
|
status: 'primary',
|
|
1263
|
-
content: getI18n('vxe.upload.reUpload'),
|
|
1319
|
+
content: isError ? getI18n('vxe.upload.reUpload') : getI18n('vxe.upload.manualUpload'),
|
|
1264
1320
|
onClick () {
|
|
1265
1321
|
handleReUpload(item)
|
|
1266
1322
|
}
|
|
@@ -1275,7 +1331,7 @@ export default defineVxeComponent({
|
|
|
1275
1331
|
class: 'vxe-upload--file-item-corner'
|
|
1276
1332
|
}, getSlotVNs(cornerSlot({ option: item, isMoreView, readonly: formReadonly })))
|
|
1277
1333
|
: renderEmptyElement($xeUpload),
|
|
1278
|
-
showDownloadButton && !isLoading
|
|
1334
|
+
showDownloadButton && !(isLoading || isPending)
|
|
1279
1335
|
? h('div', {
|
|
1280
1336
|
class: 'vxe-upload--file-item-download-btn',
|
|
1281
1337
|
onClick (evnt: MouseEvent) {
|
|
@@ -1411,7 +1467,7 @@ export default defineVxeComponent({
|
|
|
1411
1467
|
}
|
|
1412
1468
|
|
|
1413
1469
|
const renderImageItemList = (currList: VxeUploadDefines.FileObjItem[], isMoreView: boolean) => {
|
|
1414
|
-
const { showRemoveButton, showProgress, progressText, showPreview, showErrorStatus, dragSort } = props
|
|
1470
|
+
const { showRemoveButton, showProgress, progressText, showPreview, showErrorStatus, dragSort, autoSubmit, showSubmitButton } = props
|
|
1415
1471
|
const { fileCacheMaps } = reactData
|
|
1416
1472
|
const isDisabled = computeIsDisabled.value
|
|
1417
1473
|
const formReadonly = computeFormReadonly.value
|
|
@@ -1431,14 +1487,21 @@ export default defineVxeComponent({
|
|
|
1431
1487
|
return currList.map((item, index) => {
|
|
1432
1488
|
const fileKey = getFieldKey(item)
|
|
1433
1489
|
const cacheItem = fileCacheMaps[fileKey]
|
|
1434
|
-
|
|
1435
|
-
|
|
1490
|
+
let isLoading = false
|
|
1491
|
+
let isError = false
|
|
1492
|
+
let isPending = false
|
|
1493
|
+
if (cacheItem) {
|
|
1494
|
+
isLoading = cacheItem.loading
|
|
1495
|
+
isError = cacheItem.status === 'error'
|
|
1496
|
+
isPending = cacheItem.status === 'pending'
|
|
1497
|
+
}
|
|
1436
1498
|
return h('div', {
|
|
1437
1499
|
key: dragSort ? fileKey : index,
|
|
1438
1500
|
class: ['vxe-upload--image-item', {
|
|
1439
1501
|
'is--preview': showPreview,
|
|
1440
1502
|
'is--circle': imageOpts.circle,
|
|
1441
1503
|
'is--loading': isLoading,
|
|
1504
|
+
'is--pending': isPending,
|
|
1442
1505
|
'is--error': isError
|
|
1443
1506
|
}],
|
|
1444
1507
|
fileid: fileKey,
|
|
@@ -1448,7 +1511,6 @@ export default defineVxeComponent({
|
|
|
1448
1511
|
h('div', {
|
|
1449
1512
|
class: 'vxe-upload--image-item-box',
|
|
1450
1513
|
style: isMoreView ? null : imgStyle,
|
|
1451
|
-
title: getI18n('vxe.upload.viewItemTitle'),
|
|
1452
1514
|
onClick (evnt) {
|
|
1453
1515
|
if (!isLoading && !isError) {
|
|
1454
1516
|
handlePreviewImageEvent(evnt, item, index)
|
|
@@ -1473,31 +1535,29 @@ export default defineVxeComponent({
|
|
|
1473
1535
|
: renderEmptyElement($xeUpload)
|
|
1474
1536
|
])
|
|
1475
1537
|
: renderEmptyElement($xeUpload),
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
])
|
|
1500
|
-
)
|
|
1538
|
+
h('div', {
|
|
1539
|
+
class: 'vxe-upload--image-item-img-wrapper',
|
|
1540
|
+
title: getI18n('vxe.upload.viewItemTitle')
|
|
1541
|
+
}, [
|
|
1542
|
+
h('img', {
|
|
1543
|
+
class: 'vxe-upload--image-item-img',
|
|
1544
|
+
src: getThumbnailFileUrl(item)
|
|
1545
|
+
})
|
|
1546
|
+
]),
|
|
1547
|
+
!isLoading && ((isError && showErrorStatus) || (isPending && showSubmitButton && !autoSubmit))
|
|
1548
|
+
? h('div', {
|
|
1549
|
+
class: 'vxe-upload--image-item-rebtn'
|
|
1550
|
+
}, [
|
|
1551
|
+
h(VxeButtonComponent, {
|
|
1552
|
+
icon: isError ? getIcon().UPLOAD_IMAGE_RE_UPLOAD : getIcon().UPLOAD_IMAGE_UPLOAD,
|
|
1553
|
+
mode: 'text',
|
|
1554
|
+
status: 'primary',
|
|
1555
|
+
content: isError ? getI18n('vxe.upload.reUpload') : getI18n('vxe.upload.manualUpload'),
|
|
1556
|
+
onClick () {
|
|
1557
|
+
handleReUpload(item)
|
|
1558
|
+
}
|
|
1559
|
+
})
|
|
1560
|
+
])
|
|
1501
1561
|
: renderEmptyElement($xeUpload),
|
|
1502
1562
|
h('div', {
|
|
1503
1563
|
class: 'vxe-upload--image-item-btn-wrapper',
|
|
@@ -86,24 +86,30 @@
|
|
|
86
86
|
padding: var(--vxe-ui-layout-padding-half);
|
|
87
87
|
&:hover {
|
|
88
88
|
background-color: var(--vxe-ui-base-hover-background-color);
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
color: var(--vxe-ui-font-primary-color);
|
|
92
|
-
}
|
|
89
|
+
.vxe-upload--file-item-name {
|
|
90
|
+
color: var(--vxe-ui-font-primary-color);
|
|
93
91
|
}
|
|
94
92
|
}
|
|
95
93
|
&:last-child {
|
|
96
94
|
margin-bottom: 0;
|
|
97
95
|
}
|
|
98
|
-
&.is--loading {
|
|
99
|
-
cursor: progress;
|
|
100
|
-
color: var(--vxe-ui-input-placeholder-color);
|
|
101
|
-
}
|
|
102
96
|
&.is--preview {
|
|
103
97
|
.vxe-upload--file-item-name {
|
|
104
98
|
cursor: pointer;
|
|
105
99
|
}
|
|
106
100
|
}
|
|
101
|
+
&.is--loading {
|
|
102
|
+
cursor: progress;
|
|
103
|
+
color: var(--vxe-ui-input-placeholder-color);
|
|
104
|
+
&:hover {
|
|
105
|
+
.vxe-upload--file-item-name {
|
|
106
|
+
color: var(--vxe-ui-input-placeholder-color);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
&.is--pending {
|
|
111
|
+
color: var(--vxe-ui-input-placeholder-color);
|
|
112
|
+
}
|
|
107
113
|
}
|
|
108
114
|
.vxe-upload--file-over-more {
|
|
109
115
|
display: flex;
|
|
@@ -131,7 +137,7 @@
|
|
|
131
137
|
padding: var(--vxe-ui-layout-padding-half);
|
|
132
138
|
color: var(--vxe-ui-input-placeholder-color);
|
|
133
139
|
}
|
|
134
|
-
.vxe-upload--file-item-
|
|
140
|
+
.vxe-upload--file-item-rebtn {
|
|
135
141
|
padding-right: 0.4em;
|
|
136
142
|
color: var(--vxe-ui-status-error-color);
|
|
137
143
|
text-decoration: none;
|
|
@@ -249,28 +255,48 @@
|
|
|
249
255
|
}
|
|
250
256
|
}
|
|
251
257
|
.vxe-upload--image-item {
|
|
258
|
+
&.is--loading {
|
|
259
|
+
.vxe-upload--image-item-box {
|
|
260
|
+
cursor: progress;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
&:hover,
|
|
264
|
+
&.is--error,
|
|
265
|
+
&.is--pending {
|
|
266
|
+
.vxe-upload--image-item-img-wrapper {
|
|
267
|
+
&::after {
|
|
268
|
+
content: "";
|
|
269
|
+
position: absolute;
|
|
270
|
+
top: 0;
|
|
271
|
+
left: 0;
|
|
272
|
+
width: 100%;
|
|
273
|
+
height: 100%;
|
|
274
|
+
pointer-events: none;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
252
278
|
&:hover {
|
|
253
|
-
|
|
279
|
+
.vxe-upload--image-item-img-wrapper {
|
|
280
|
+
&::after {
|
|
281
|
+
background-color: rgba(0, 0, 0, 0.1);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
&.is--error,
|
|
286
|
+
&.is--pending {
|
|
287
|
+
.vxe-upload--image-item-img-wrapper {
|
|
288
|
+
&::after {
|
|
289
|
+
background-color: rgba(0, 0, 0, 0.4);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
&:hover {
|
|
254
293
|
.vxe-upload--image-item-img-wrapper {
|
|
255
|
-
border-color: var(--vxe-ui-font-primary-color);
|
|
256
294
|
&::after {
|
|
257
|
-
|
|
258
|
-
position: absolute;
|
|
259
|
-
top: 0;
|
|
260
|
-
left: 0;
|
|
261
|
-
width: 100%;
|
|
262
|
-
height: 100%;
|
|
263
|
-
pointer-events: none;
|
|
264
|
-
background-color: rgba(0, 0, 0, 0.1);;
|
|
295
|
+
background-color: rgba(0, 0, 0, 0.5);
|
|
265
296
|
}
|
|
266
297
|
}
|
|
267
298
|
}
|
|
268
299
|
}
|
|
269
|
-
&.is--loading {
|
|
270
|
-
.vxe-upload--image-item-box {
|
|
271
|
-
cursor: progress;
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
300
|
&.is--error {
|
|
275
301
|
.vxe-upload--image-item-img-wrapper {
|
|
276
302
|
border-color: var(--vxe-ui-status-error-color);
|
|
@@ -289,6 +315,10 @@
|
|
|
289
315
|
border-radius: 50%;
|
|
290
316
|
}
|
|
291
317
|
}
|
|
318
|
+
.vxe-upload--image-item-loading,
|
|
319
|
+
.vxe-upload--image-item-rebtn {
|
|
320
|
+
border-radius: 50%;
|
|
321
|
+
}
|
|
292
322
|
}
|
|
293
323
|
}
|
|
294
324
|
.vxe-upload--image-item-img-wrapper {
|
|
@@ -316,10 +346,22 @@
|
|
|
316
346
|
width: 100%;
|
|
317
347
|
height: 100%;
|
|
318
348
|
color: var(--vxe-ui-loading-color);
|
|
319
|
-
background-color:
|
|
349
|
+
background-color: rgba(0, 0, 0, 0.6);
|
|
320
350
|
z-index: 1;
|
|
321
351
|
user-select: none;
|
|
322
352
|
}
|
|
353
|
+
.vxe-upload--image-item-rebtn {
|
|
354
|
+
position: absolute;
|
|
355
|
+
display: flex;
|
|
356
|
+
flex-direction: row;
|
|
357
|
+
justify-content: center;
|
|
358
|
+
align-items: center;
|
|
359
|
+
top: 0;
|
|
360
|
+
left: 0;
|
|
361
|
+
width: 100%;
|
|
362
|
+
height: 100%;
|
|
363
|
+
background-color: rgba(0, 0, 0, 0.6);
|
|
364
|
+
}
|
|
323
365
|
.vxe-upload--image-action-hint {
|
|
324
366
|
font-size: 0.8em;
|
|
325
367
|
word-break: break-all;
|
|
@@ -407,6 +449,13 @@
|
|
|
407
449
|
.vxe-upload--file-list {
|
|
408
450
|
max-height: none;
|
|
409
451
|
}
|
|
452
|
+
.vxe-upload--file-action-btn {
|
|
453
|
+
width: 100%;
|
|
454
|
+
& > .vxe-button {
|
|
455
|
+
width: 100%;
|
|
456
|
+
max-width: 100%;
|
|
457
|
+
}
|
|
458
|
+
}
|
|
410
459
|
}
|
|
411
460
|
.vxe-upload,
|
|
412
461
|
.vxe-upload--more-popup {
|
|
@@ -41,9 +41,9 @@ export namespace VxeColumnPropTypes {
|
|
|
41
41
|
export type ShowOverflow = VxeTablePropTypes.ShowOverflow
|
|
42
42
|
export type ShowHeaderOverflow = ShowOverflow
|
|
43
43
|
export type ShowFooterOverflow = ShowOverflow
|
|
44
|
-
export type ClassName<D = any> = string | ((params: VxeGlobalRendererHandles.
|
|
45
|
-
export type HeaderClassName<D = any> = string | ((params: VxeGlobalRendererHandles.
|
|
46
|
-
export type FooterClassName<D = any> = string | ((params: VxeGlobalRendererHandles.
|
|
44
|
+
export type ClassName<D = any> = string | ((params: VxeGlobalRendererHandles.RenderTableCellParams<D>) => string | any[] | { [key: string]: boolean })
|
|
45
|
+
export type HeaderClassName<D = any> = string | ((params: VxeGlobalRendererHandles.RenderTableHeaderParams<D>) => string | any[] | { [key: string]: boolean })
|
|
46
|
+
export type FooterClassName<D = any> = string | ((params: VxeGlobalRendererHandles.RenderTableFooterParams<D>) => string | any[] | { [key: string]: boolean })
|
|
47
47
|
export type Padding = boolean
|
|
48
48
|
export type VerticalAlign = '' | 'top' | 'center' | null
|
|
49
49
|
|
|
@@ -68,10 +68,10 @@ export namespace VxeColumnPropTypes {
|
|
|
68
68
|
}) => string | number)
|
|
69
69
|
export type SortType = 'auto' | 'string' | 'number' | null
|
|
70
70
|
|
|
71
|
-
export interface FilterItem {
|
|
71
|
+
export interface FilterItem<OD = any> {
|
|
72
72
|
label?: string | number
|
|
73
73
|
value?: any
|
|
74
|
-
data?:
|
|
74
|
+
data?: OD
|
|
75
75
|
resetValue?: any
|
|
76
76
|
checked?: boolean
|
|
77
77
|
}
|
|
@@ -80,7 +80,7 @@ export namespace VxeColumnPropTypes {
|
|
|
80
80
|
* @deprecated
|
|
81
81
|
*/
|
|
82
82
|
export interface Filter extends FilterItem {}
|
|
83
|
-
export type Filters = FilterItem[]
|
|
83
|
+
export type Filters<OD = any> = FilterItem<OD>[]
|
|
84
84
|
|
|
85
85
|
export type FilterMultiple = boolean
|
|
86
86
|
|
|
@@ -29,6 +29,7 @@ export namespace VxeInputPropTypes {
|
|
|
29
29
|
export type ClassName = string
|
|
30
30
|
export type Immediate = boolean
|
|
31
31
|
export type Name = string
|
|
32
|
+
export type Title = string
|
|
32
33
|
export type Type = 'text' | 'search' | 'number' | 'integer' | 'float' | 'password' | 'date' | 'time' | 'datetime' | 'week' | 'month' | 'quarter' | 'year'
|
|
33
34
|
export type Clearable = boolean
|
|
34
35
|
export type Editable = boolean
|
|
@@ -85,6 +86,7 @@ export interface VxeInputProps {
|
|
|
85
86
|
className?: VxeInputPropTypes.ClassName
|
|
86
87
|
immediate?: VxeInputPropTypes.Immediate
|
|
87
88
|
name?: VxeInputPropTypes.Name
|
|
89
|
+
title?: VxeInputPropTypes.Title
|
|
88
90
|
type?: VxeInputPropTypes.Type
|
|
89
91
|
clearable?: VxeInputPropTypes.Clearable
|
|
90
92
|
readonly?: VxeInputPropTypes.Readonly
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export namespace VxeTableFilterCombinationDefines {
|
|
2
|
+
export interface SimpleData {
|
|
3
|
+
checks: string[]
|
|
4
|
+
sVal: string
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export interface CombinationData extends SimpleData {
|
|
8
|
+
sMenu: string
|
|
9
|
+
fType1: 'equal' | 'unequal' | 'gt' | 'ge' | 'lt' | 'le' | 'begin' | 'notbegin' | 'endin' | 'notendin' | 'include' | 'exclude' | ''
|
|
10
|
+
fVal1: string
|
|
11
|
+
fMode: 'and' | 'or' | ''
|
|
12
|
+
fType2: string
|
|
13
|
+
fVal2: string
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -35,6 +35,7 @@ export namespace VxeUploadPropTypes {
|
|
|
35
35
|
export type Mode = null | '' | 'all' | 'image'
|
|
36
36
|
export type Readonly = boolean
|
|
37
37
|
export type Disabled = boolean
|
|
38
|
+
export type AutoSubmit = boolean
|
|
38
39
|
export type ImageTypes = string[]
|
|
39
40
|
export interface ImageConfig {
|
|
40
41
|
width?: VxeImagePropTypes.Width
|
|
@@ -72,6 +73,7 @@ export namespace VxeUploadPropTypes {
|
|
|
72
73
|
export type UrlField = string
|
|
73
74
|
export type SizeField = string
|
|
74
75
|
export type ShowTip = boolean
|
|
76
|
+
export type MaxSimultaneousUploads = number | string
|
|
75
77
|
export type TipText = number | string | ((params: {}) => number | string)
|
|
76
78
|
export type ButtonText = number | string | ((params: {}) => number | string)
|
|
77
79
|
export type ButtonIcon = string
|
|
@@ -83,6 +85,7 @@ export namespace VxeUploadPropTypes {
|
|
|
83
85
|
export type ShowErrorStatus = boolean
|
|
84
86
|
export type ShowProgress = boolean
|
|
85
87
|
export type ProgressText = number | string | ((params: {}) => number | string)
|
|
88
|
+
export type ShowSubmitButton = boolean
|
|
86
89
|
export type AutoHiddenButton = boolean
|
|
87
90
|
export type ShowUploadButton = boolean
|
|
88
91
|
export type PreviewMethod = undefined | ((params: {
|
|
@@ -135,6 +138,7 @@ export interface VxeUploadProps {
|
|
|
135
138
|
mode?: VxeUploadPropTypes.Mode
|
|
136
139
|
readonly?: VxeUploadPropTypes.Readonly
|
|
137
140
|
disabled?: VxeUploadPropTypes.Disabled
|
|
141
|
+
autoSubmit?: VxeUploadPropTypes.AutoSubmit
|
|
138
142
|
imageTypes?: VxeUploadPropTypes.ImageTypes
|
|
139
143
|
imageConfig?: VxeUploadPropTypes.ImageConfig
|
|
140
144
|
/**
|
|
@@ -174,9 +178,14 @@ export interface VxeUploadProps {
|
|
|
174
178
|
showErrorStatus?: VxeUploadPropTypes.ShowErrorStatus
|
|
175
179
|
showProgress?: VxeUploadPropTypes.ShowProgress
|
|
176
180
|
progressText?: VxeUploadPropTypes.ProgressText
|
|
181
|
+
showSubmitButton?: VxeUploadPropTypes.ShowSubmitButton
|
|
177
182
|
autoHiddenButton?: VxeUploadPropTypes.AutoHiddenButton
|
|
178
183
|
showTip?: VxeUploadPropTypes.ShowTip
|
|
179
184
|
tipText?: VxeUploadPropTypes.TipText
|
|
185
|
+
/**
|
|
186
|
+
* 用于 autoSubmit=false,最大同时上传数量
|
|
187
|
+
*/
|
|
188
|
+
maxSimultaneousUploads?: VxeUploadPropTypes.MaxSimultaneousUploads
|
|
180
189
|
previewMethod?: VxeUploadPropTypes.PreviewMethod
|
|
181
190
|
uploadMethod?: VxeUploadPropTypes.UploadMethod
|
|
182
191
|
beforeRemoveMethod?: VxeUploadPropTypes.BeforeRemoveMethod
|
|
@@ -224,6 +233,10 @@ export interface UploadMethods {
|
|
|
224
233
|
files: File[]
|
|
225
234
|
file: File | null
|
|
226
235
|
}>
|
|
236
|
+
/**
|
|
237
|
+
* 用于 auto-upload 模式,手动调用上传附件;如果传 true,这包含未上传和上传失败的都会重新提交
|
|
238
|
+
*/
|
|
239
|
+
submit(isFull?: boolean): Promise<void>
|
|
227
240
|
}
|
|
228
241
|
export interface VxeUploadMethods extends UploadMethods { }
|
|
229
242
|
|
|
@@ -270,7 +283,7 @@ export namespace VxeUploadDefines {
|
|
|
270
283
|
export interface FileCacheItem {
|
|
271
284
|
file: File
|
|
272
285
|
loading: boolean
|
|
273
|
-
status:
|
|
286
|
+
status: 'error' | 'success' | 'pending'
|
|
274
287
|
percent: number
|
|
275
288
|
}
|
|
276
289
|
|
|
@@ -160,6 +160,7 @@ declare module '@vxe-ui/core' {
|
|
|
160
160
|
UPLOAD_FILE_ADD?: string
|
|
161
161
|
UPLOAD_FILE_REMOVE?: string
|
|
162
162
|
UPLOAD_FILE_DOWNLOAD?: string
|
|
163
|
+
UPLOAD_IMAGE_UPLOAD?: string
|
|
163
164
|
UPLOAD_IMAGE_RE_UPLOAD?: string
|
|
164
165
|
UPLOAD_IMAGE_ADD?: string
|
|
165
166
|
UPLOAD_IMAGE_REMOVE?: string
|