giime 0.9.4 → 0.9.5
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/dist/index.css +127 -127
- package/es/giime/index.mjs +1 -1
- package/es/giime/version.d.ts +1 -1
- package/es/giime/version.mjs +1 -1
- package/es/giime/version.mjs.map +1 -1
- package/es/hooks/base/index.mjs +1 -1
- package/es/hooks/base/useDownload/index.d.ts +10 -3
- package/es/hooks/base/useDownload/index.mjs +5 -1
- package/es/hooks/base/useDownload/index.mjs.map +1 -1
- package/es/hooks/index.mjs +1 -1
- package/es/index.css +127 -127
- package/lib/giime/index.js +1 -0
- package/lib/giime/index.js.map +1 -1
- package/lib/giime/version.d.ts +1 -1
- package/lib/giime/version.js +1 -1
- package/lib/giime/version.js.map +1 -1
- package/lib/hooks/base/index.js +1 -0
- package/lib/hooks/base/index.js.map +1 -1
- package/lib/hooks/base/useDownload/index.d.ts +10 -3
- package/lib/hooks/base/useDownload/index.js +5 -0
- package/lib/hooks/base/useDownload/index.js.map +1 -1
- package/lib/hooks/index.js +1 -0
- package/lib/hooks/index.js.map +1 -1
- package/lib/index.css +127 -127
- package/package.json +1 -1
package/dist/index.css
CHANGED
|
@@ -887,24 +887,6 @@ video {
|
|
|
887
887
|
.gm-group:hover .group-hover\:gm-block {
|
|
888
888
|
display: block;
|
|
889
889
|
}
|
|
890
|
-
.gm-number-interval-single[data-v-4e6f4d6f] {
|
|
891
|
-
border-radius: var(--el-input-border-radius, var(--el-border-radius-base));
|
|
892
|
-
box-shadow: 0 0 0 1px var(--el-input-border-color, var(--el-border-color)) inset;
|
|
893
|
-
background-color: var(--el-input-bg-color, var(--el-fill-color-blank));
|
|
894
|
-
}
|
|
895
|
-
.gm-number-interval-single[data-v-4e6f4d6f] [data-v-4e6f4d6f] .el-input__wrapper {
|
|
896
|
-
box-shadow: none;
|
|
897
|
-
background: none;
|
|
898
|
-
}
|
|
899
|
-
|
|
900
|
-
.gm-number-interval-close[data-v-4e6f4d6f] {
|
|
901
|
-
display: none;
|
|
902
|
-
color: var(--el-input-icon-color, var(--el-text-color-placeholder));
|
|
903
|
-
}
|
|
904
|
-
|
|
905
|
-
.gm-number-interval-single[data-v-4e6f4d6f]:hover .gm-number-interval-close[data-v-4e6f4d6f] {
|
|
906
|
-
display: flex;
|
|
907
|
-
}
|
|
908
890
|
.gm-flex-center[data-v-c17deec9] {
|
|
909
891
|
align-items: center;
|
|
910
892
|
}
|
|
@@ -912,55 +894,49 @@ video {
|
|
|
912
894
|
.gm-flex-justify-between[data-v-c17deec9] {
|
|
913
895
|
justify-content: space-between;
|
|
914
896
|
}
|
|
915
|
-
[data-v-
|
|
916
|
-
|
|
917
|
-
}
|
|
918
|
-
|
|
919
|
-
[data-v-050a4f74] .gmTableNoBorder .el-table__inner-wrapper:before {
|
|
920
|
-
height: 0;
|
|
921
|
-
}
|
|
922
|
-
|
|
923
|
-
[data-v-050a4f74] .gmTableNoBorder.el-table--border .el-table__inner-wrapper:after {
|
|
924
|
-
height: 0;
|
|
925
|
-
}
|
|
926
|
-
|
|
927
|
-
[data-v-050a4f74] .gmTableNoBorder.el-table--border:after {
|
|
928
|
-
height: 0;
|
|
929
|
-
}
|
|
930
|
-
|
|
931
|
-
[data-v-050a4f74] .gmTableNoBorder.el-table--border:before {
|
|
932
|
-
height: 0;
|
|
897
|
+
.circular[data-v-d7b04fae] {
|
|
898
|
+
animation: loading-rotate-d7b04fae 2s linear infinite;
|
|
933
899
|
}
|
|
934
900
|
|
|
935
|
-
[data-v-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
}
|
|
942
|
-
[data-v-3f2c8504] .gmTableNoBorder .el-table__body .el-table__cell {
|
|
943
|
-
border-right: none;
|
|
901
|
+
.path[data-v-d7b04fae] {
|
|
902
|
+
animation: loading-dash-d7b04fae 1.5s ease-in-out infinite;
|
|
903
|
+
stroke-dasharray: 90, 150;
|
|
904
|
+
stroke-dashoffset: 0;
|
|
905
|
+
stroke: var(--el-color-primary);
|
|
906
|
+
stroke-linecap: round;
|
|
944
907
|
}
|
|
945
908
|
|
|
946
|
-
|
|
947
|
-
|
|
909
|
+
@keyframes loading-rotate-d7b04fae {
|
|
910
|
+
to {
|
|
911
|
+
transform: rotate(360deg);
|
|
912
|
+
}
|
|
948
913
|
}
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
914
|
+
@keyframes loading-dash-d7b04fae {
|
|
915
|
+
0% {
|
|
916
|
+
stroke-dasharray: 1, 200;
|
|
917
|
+
stroke-dashoffset: 0;
|
|
918
|
+
}
|
|
919
|
+
50% {
|
|
920
|
+
stroke-dasharray: 90, 150;
|
|
921
|
+
stroke-dashoffset: -40px;
|
|
922
|
+
}
|
|
923
|
+
100% {
|
|
924
|
+
stroke-dasharray: 90, 150;
|
|
925
|
+
stroke-dashoffset: -120px;
|
|
926
|
+
}
|
|
952
927
|
}
|
|
953
928
|
|
|
954
|
-
[data-v-
|
|
955
|
-
|
|
929
|
+
.gm-range-number .el-form-item[data-v-1ae16d96] {
|
|
930
|
+
margin: 0;
|
|
956
931
|
}
|
|
957
932
|
|
|
958
|
-
[data-v-
|
|
959
|
-
|
|
933
|
+
.gm-upload-pro-preview-dialog[data-v-80b383d8] [data-v-80b383d8] .el-dialog__body {
|
|
934
|
+
padding: 0;
|
|
960
935
|
}
|
|
961
936
|
|
|
962
|
-
[data-v-
|
|
963
|
-
|
|
937
|
+
.gm-upload-pro-file-picture-card[data-v-80b383d8] [data-v-80b383d8] .el-upload-list__item, .gm-upload-pro-file-picture-card[data-v-80b383d8] [data-v-80b383d8] .el-upload--picture-card {
|
|
938
|
+
width: auto;
|
|
939
|
+
height: auto;
|
|
964
940
|
}
|
|
965
941
|
.gm-upload-pro-file {
|
|
966
942
|
line-height: normal;
|
|
@@ -1000,93 +976,50 @@ video {
|
|
|
1000
976
|
.gm-upload-pro-file-disabled .el-upload-list__item-status-label {
|
|
1001
977
|
display: none;
|
|
1002
978
|
}
|
|
1003
|
-
.gm-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
.gm-upload-pro-file-picture-card[data-v-80b383d8] [data-v-80b383d8] .el-upload-list__item, .gm-upload-pro-file-picture-card[data-v-80b383d8] [data-v-80b383d8] .el-upload--picture-card {
|
|
1008
|
-
width: auto;
|
|
1009
|
-
height: auto;
|
|
979
|
+
.gm-number-interval-single[data-v-4e6f4d6f] {
|
|
980
|
+
border-radius: var(--el-input-border-radius, var(--el-border-radius-base));
|
|
981
|
+
box-shadow: 0 0 0 1px var(--el-input-border-color, var(--el-border-color)) inset;
|
|
982
|
+
background-color: var(--el-input-bg-color, var(--el-fill-color-blank));
|
|
1010
983
|
}
|
|
1011
|
-
.gm-
|
|
1012
|
-
|
|
984
|
+
.gm-number-interval-single[data-v-4e6f4d6f] [data-v-4e6f4d6f] .el-input__wrapper {
|
|
985
|
+
box-shadow: none;
|
|
986
|
+
background: none;
|
|
1013
987
|
}
|
|
1014
988
|
|
|
1015
|
-
.gm-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
}
|
|
1019
|
-
.gm-upload-file {
|
|
1020
|
-
line-height: normal;
|
|
1021
|
-
}
|
|
1022
|
-
.gm-upload-file li > .el-checkbox {
|
|
1023
|
-
position: absolute;
|
|
1024
|
-
left: 10px;
|
|
1025
|
-
top: 0;
|
|
1026
|
-
z-index: 9;
|
|
1027
|
-
}
|
|
1028
|
-
.gm-upload-file .el-upload-list--picture-card {
|
|
1029
|
-
gap: 10px;
|
|
1030
|
-
}
|
|
1031
|
-
.gm-upload-file .el-upload-list__item {
|
|
1032
|
-
margin: 0;
|
|
1033
|
-
border: none;
|
|
1034
|
-
}
|
|
1035
|
-
.gm-upload-file .el-upload-list__item-file-name {
|
|
1036
|
-
line-height: normal;
|
|
989
|
+
.gm-number-interval-close[data-v-4e6f4d6f] {
|
|
990
|
+
display: none;
|
|
991
|
+
color: var(--el-input-icon-color, var(--el-text-color-placeholder));
|
|
1037
992
|
}
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
border: none;
|
|
1041
|
-
width: 100%;
|
|
1042
|
-
height: 100%;
|
|
993
|
+
|
|
994
|
+
.gm-number-interval-single[data-v-4e6f4d6f]:hover .gm-number-interval-close[data-v-4e6f4d6f] {
|
|
1043
995
|
display: flex;
|
|
1044
996
|
}
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
.gm-upload-file-disabled .el-upload--picture-card {
|
|
1050
|
-
display: none;
|
|
997
|
+
[data-v-79615afd] .gmSearchForm .el-form-item {
|
|
998
|
+
margin-right: 0;
|
|
999
|
+
margin-bottom: 4px;
|
|
1051
1000
|
}
|
|
1052
|
-
|
|
1053
|
-
|
|
1001
|
+
[data-v-050a4f74] .gmTableNoBorder .el-table__body .el-table__cell {
|
|
1002
|
+
border-right: none;
|
|
1054
1003
|
}
|
|
1055
1004
|
|
|
1056
|
-
|
|
1057
|
-
|
|
1005
|
+
[data-v-050a4f74] .gmTableNoBorder .el-table__inner-wrapper:before {
|
|
1006
|
+
height: 0;
|
|
1058
1007
|
}
|
|
1059
1008
|
|
|
1060
|
-
|
|
1061
|
-
|
|
1009
|
+
[data-v-050a4f74] .gmTableNoBorder.el-table--border .el-table__inner-wrapper:after {
|
|
1010
|
+
height: 0;
|
|
1062
1011
|
}
|
|
1063
1012
|
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
stroke-dasharray: 90, 150;
|
|
1067
|
-
stroke-dashoffset: 0;
|
|
1068
|
-
stroke: var(--el-color-primary);
|
|
1069
|
-
stroke-linecap: round;
|
|
1013
|
+
[data-v-050a4f74] .gmTableNoBorder.el-table--border:after {
|
|
1014
|
+
height: 0;
|
|
1070
1015
|
}
|
|
1071
1016
|
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
transform: rotate(360deg);
|
|
1075
|
-
}
|
|
1017
|
+
[data-v-050a4f74] .gmTableNoBorder.el-table--border:before {
|
|
1018
|
+
height: 0;
|
|
1076
1019
|
}
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
stroke-dashoffset: 0;
|
|
1081
|
-
}
|
|
1082
|
-
50% {
|
|
1083
|
-
stroke-dasharray: 90, 150;
|
|
1084
|
-
stroke-dashoffset: -40px;
|
|
1085
|
-
}
|
|
1086
|
-
100% {
|
|
1087
|
-
stroke-dasharray: 90, 150;
|
|
1088
|
-
stroke-dashoffset: -120px;
|
|
1089
|
-
}
|
|
1020
|
+
|
|
1021
|
+
[data-v-050a4f74] .gmTableNoBorder .el-table__border-left-patch {
|
|
1022
|
+
height: 0;
|
|
1090
1023
|
}
|
|
1091
1024
|
|
|
1092
1025
|
.pagination-container[data-v-47d35e7b] {
|
|
@@ -1153,6 +1086,29 @@ video {
|
|
|
1153
1086
|
border-radius: 10px;
|
|
1154
1087
|
background: #eee;
|
|
1155
1088
|
}
|
|
1089
|
+
[data-v-3f2c8504] .gmTableNoBorder .el-table__body .el-table__cell {
|
|
1090
|
+
border-right: none;
|
|
1091
|
+
}
|
|
1092
|
+
|
|
1093
|
+
[data-v-3f2c8504] .gmTableNoBorder .el-table__inner-wrapper:before {
|
|
1094
|
+
height: 0;
|
|
1095
|
+
}
|
|
1096
|
+
|
|
1097
|
+
[data-v-3f2c8504] .gmTableNoBorder.el-table--border .el-table__inner-wrapper:after {
|
|
1098
|
+
height: 0;
|
|
1099
|
+
}
|
|
1100
|
+
|
|
1101
|
+
[data-v-3f2c8504] .gmTableNoBorder.el-table--border:after {
|
|
1102
|
+
height: 0;
|
|
1103
|
+
}
|
|
1104
|
+
|
|
1105
|
+
[data-v-3f2c8504] .gmTableNoBorder.el-table--border:before {
|
|
1106
|
+
height: 0;
|
|
1107
|
+
}
|
|
1108
|
+
|
|
1109
|
+
[data-v-3f2c8504] .gmTableNoBorder .el-table__border-left-patch {
|
|
1110
|
+
height: 0;
|
|
1111
|
+
}
|
|
1156
1112
|
@charset "UTF-8";
|
|
1157
1113
|
.table-custom-header-drawer .el-drawer__header {
|
|
1158
1114
|
padding: 10px 15px;
|
|
@@ -1208,4 +1164,48 @@ video {
|
|
|
1208
1164
|
box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.1);
|
|
1209
1165
|
border-radius: 10px;
|
|
1210
1166
|
background: #eee;
|
|
1167
|
+
}
|
|
1168
|
+
.gm-upload-preview-dialog[data-v-c615121c] [data-v-c615121c] .el-dialog__body {
|
|
1169
|
+
padding: 0;
|
|
1170
|
+
}
|
|
1171
|
+
|
|
1172
|
+
.gm-upload-file-picture-card[data-v-c615121c] [data-v-c615121c] .el-upload-list__item, .gm-upload-file-picture-card[data-v-c615121c] [data-v-c615121c] .el-upload--picture-card {
|
|
1173
|
+
width: auto;
|
|
1174
|
+
height: auto;
|
|
1175
|
+
}
|
|
1176
|
+
.gm-upload-file {
|
|
1177
|
+
line-height: normal;
|
|
1178
|
+
}
|
|
1179
|
+
.gm-upload-file li > .el-checkbox {
|
|
1180
|
+
position: absolute;
|
|
1181
|
+
left: 10px;
|
|
1182
|
+
top: 0;
|
|
1183
|
+
z-index: 9;
|
|
1184
|
+
}
|
|
1185
|
+
.gm-upload-file .el-upload-list--picture-card {
|
|
1186
|
+
gap: 10px;
|
|
1187
|
+
}
|
|
1188
|
+
.gm-upload-file .el-upload-list__item {
|
|
1189
|
+
margin: 0;
|
|
1190
|
+
border: none;
|
|
1191
|
+
}
|
|
1192
|
+
.gm-upload-file .el-upload-list__item-file-name {
|
|
1193
|
+
line-height: normal;
|
|
1194
|
+
}
|
|
1195
|
+
.gm-upload-file .el-upload-dragger {
|
|
1196
|
+
padding: 0;
|
|
1197
|
+
border: none;
|
|
1198
|
+
width: 100%;
|
|
1199
|
+
height: 100%;
|
|
1200
|
+
display: flex;
|
|
1201
|
+
}
|
|
1202
|
+
.gm-upload-file .el-upload--picture-card {
|
|
1203
|
+
border: none;
|
|
1204
|
+
}
|
|
1205
|
+
|
|
1206
|
+
.gm-upload-file-disabled .el-upload--picture-card {
|
|
1207
|
+
display: none;
|
|
1208
|
+
}
|
|
1209
|
+
.gm-upload-file-disabled .el-upload-list__item-status-label {
|
|
1210
|
+
display: none;
|
|
1211
1211
|
}
|
package/es/giime/index.mjs
CHANGED
|
@@ -335,7 +335,7 @@ export { vSee } from '../components/src/directives/see/directive.mjs';
|
|
|
335
335
|
export { GmVSeeDirective } from '../components/src/directives/see/index.mjs';
|
|
336
336
|
export { useCheckAll } from '../hooks/base/useCheckAll/index.mjs';
|
|
337
337
|
export { useIDBKeyval } from '../hooks/base/useIDBKeyval/index.mjs';
|
|
338
|
-
export { ensureFilenameWithExtension, getFileExtension, getUrlFilename, useDownload } from '../hooks/base/useDownload/index.mjs';
|
|
338
|
+
export { ensureFilenameWithExtension, getFileExtension, getUrlExtension, getUrlFilename, useDownload } from '../hooks/base/useDownload/index.mjs';
|
|
339
339
|
export { useLoading } from '../hooks/base/useLoading/index.mjs';
|
|
340
340
|
export { useTimeoutPromise } from '../hooks/base/useTimeout/index.mjs';
|
|
341
341
|
export { useRectSelect } from '../hooks/base/useRectSelect/index.mjs';
|
package/es/giime/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const version = "0.9.
|
|
1
|
+
export declare const version = "0.9.5";
|
package/es/giime/version.mjs
CHANGED
package/es/giime/version.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.mjs","sources":["../../../../packages/giime/version.ts"],"sourcesContent":["export const version = '0.9.
|
|
1
|
+
{"version":3,"file":"version.mjs","sources":["../../../../packages/giime/version.ts"],"sourcesContent":["export const version = '0.9.5-beta.1';\n"],"names":[],"mappings":"AAAO,MAAM,OAAA,GAAU;;;;"}
|
package/es/hooks/base/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { useCheckAll } from './useCheckAll/index.mjs';
|
|
2
2
|
export { useIDBKeyval } from './useIDBKeyval/index.mjs';
|
|
3
|
-
export { ensureFilenameWithExtension, getFileExtension, getUrlFilename, useDownload } from './useDownload/index.mjs';
|
|
3
|
+
export { ensureFilenameWithExtension, getFileExtension, getUrlExtension, getUrlFilename, useDownload } from './useDownload/index.mjs';
|
|
4
4
|
export { useLoading } from './useLoading/index.mjs';
|
|
5
5
|
export { useTimeoutPromise } from './useTimeout/index.mjs';
|
|
6
6
|
export { useRectSelect } from './useRectSelect/index.mjs';
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import type { AxiosResponse } from 'axios';
|
|
2
2
|
export interface DownloadOptions {
|
|
3
|
-
/**
|
|
3
|
+
/** 自定义文件名(可选)。如果想保证文件下载顺序,推荐使用 getUrlExtension 自行修改文件名 */
|
|
4
4
|
filename?: string;
|
|
5
5
|
}
|
|
6
6
|
export interface DateownloadZipItem {
|
|
7
7
|
url: string;
|
|
8
|
-
/**
|
|
8
|
+
/** 自定义文件名(可选)。如果想保证文件下载顺序,推荐使用 getUrlExtension 自行修改文件名 */
|
|
9
9
|
filename?: string;
|
|
10
10
|
}
|
|
11
11
|
export interface DownloadFolderItem {
|
|
12
12
|
url: string;
|
|
13
13
|
/** 资源所在文件夹名称多级使用 / 隔开 例如:一级文件夹/二级文件夹/三级文件夹 */
|
|
14
14
|
folder?: string;
|
|
15
|
-
/**
|
|
15
|
+
/** 自定义文件名(可选)。如果想保证文件下载顺序,推荐使用 getUrlExtension 自行修改文件名 */
|
|
16
16
|
filename?: string;
|
|
17
17
|
}
|
|
18
18
|
export declare const useDownload: () => {
|
|
@@ -41,3 +41,10 @@ export declare const getFileExtension: (filename: string) => string;
|
|
|
41
41
|
* @returns 带有扩展名的文件名
|
|
42
42
|
*/
|
|
43
43
|
export declare const ensureFilenameWithExtension: (filename: string | undefined, url: string) => string;
|
|
44
|
+
/**
|
|
45
|
+
* 从 URL 中提取文件扩展名
|
|
46
|
+
* @param url 文件URL
|
|
47
|
+
* @returns 文件扩展名
|
|
48
|
+
* 例如:https://example.com/path/to/image.png?token=abc 返回 .png
|
|
49
|
+
*/
|
|
50
|
+
export declare const getUrlExtension: (url: string) => string;
|
|
@@ -261,6 +261,10 @@ const ensureFilenameWithExtension = (filename, url) => {
|
|
|
261
261
|
const extension = getFileExtension(urlFilename);
|
|
262
262
|
return filename + extension;
|
|
263
263
|
};
|
|
264
|
+
const getUrlExtension = (url) => {
|
|
265
|
+
const urlFilename = getUrlFilename(url);
|
|
266
|
+
return getFileExtension(urlFilename);
|
|
267
|
+
};
|
|
264
268
|
|
|
265
|
-
export { ensureFilenameWithExtension, getFileExtension, getUrlFilename, useDownload };
|
|
269
|
+
export { ensureFilenameWithExtension, getFileExtension, getUrlExtension, getUrlFilename, useDownload };
|
|
266
270
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../../../packages/hooks/base/useDownload/index.ts"],"sourcesContent":["import { h, ref } from 'vue';\nimport FileSaver from 'file-saver';\n\nimport GmNotification from '@giime/components/src/plugins/notification';\nimport { v4 as uuidv4 } from 'uuid';\nimport JSZip from 'jszip';\nimport { GmMessage } from '@giime/components/src/plugins/message';\nimport type { AxiosResponse } from 'axios';\nimport { isString } from '@giime/utils';\n\nexport interface DownloadOptions {\n /** 自定义文件名(一般情况下不建议修改,系统会自动从 URL 中提取文件名) */\n filename?: string;\n}\nexport interface DateownloadZipItem {\n url: string;\n /** 自定义文件名(一般情况下不建议修改,系统会自动从 URL 中提取文件名) */\n filename?: string;\n}\n\nexport interface DownloadFolderItem {\n url: string;\n /** 资源所在文件夹名称多级使用 / 隔开 例如:一级文件夹/二级文件夹/三级文件夹 */\n folder?: string;\n /** 自定义文件名(一般情况下不建议修改,系统会自动从 URL 中提取文件名) */\n filename?: string;\n}\n\nexport const useDownload = () => {\n /**\n * 通过url下载\n * @param url 文件URL\n * @param options 下载配置(一般情况下无需传入 filename,系统会自动从 URL 中提取文件名)\n */\n const downloadByUrl = async (url: string, options?: DownloadOptions) => {\n const filename = options?.filename || getUrlFilename(url);\n const curId = uuidv4();\n const modalInfo = GmNotification({\n title: '下载中',\n message: h('div', { className: curId }, [`当前下载进度 0%`]),\n duration: 0,\n });\n try {\n await createDownload({\n url,\n filename,\n uuid: curId,\n });\n } finally {\n modalInfo.close();\n }\n };\n /**\n * 通过接口响应结果下载\n * @param res 接口响应对象\n * @param options 下载配置(一般情况下无需传入 filename,系统会自动从响应头中提取文件名)\n */\n const downloadByRes = async (res: AxiosResponse<any, any>, options?: DownloadOptions) => {\n const filename =\n options?.filename || getFileNameFromContentDisposition(res?.headers?.['content-disposition'] || res?.headers?.['Content-Disposition']);\n const resBlob = await res.data;\n const curId = uuidv4();\n const modalInfo = GmNotification({\n title: '下载中',\n message: h('div', { className: curId }, [`当前下载进度 0%`]),\n duration: 0,\n });\n // 设置type类型\n const blob = new Blob([resBlob]);\n const fileUrl = window.URL.createObjectURL(blob);\n try {\n await createDownload({\n url: fileUrl,\n filename,\n uuid: curId,\n });\n } finally {\n modalInfo.close();\n }\n };\n /**\n * 下载多文件 转为zip\n * @param fileList 文件列表(一般情况下每项无需传入 filename,系统会自动从 URL 中提取文件名)\n * @param filename zip文件名\n */\n const downloadToZip = async (fileList: DateownloadZipItem[], filename: string) => {\n return new Promise((resolve, reject) => {\n const currentContentClass = `message${Date.now()}`;\n const downloadCount = ref(0);\n const len = fileList.length;\n const modalInfo = GmNotification({\n title: '下载中',\n message: h('div', [h('div', { className: currentContentClass }, [`总下载文件数:${len},已下载文件数:${downloadCount.value}`])]),\n duration: 0,\n });\n // h('div', { className: currentClass }, [`当前下载进度 ${progress.value}%`]),\n const zipInstance = new JSZip();\n for (let i = 0; i < len; i++) {\n const currentItem = fileList[i];\n // const fileBlob = await\n const downblobOptions = {\n url: currentItem.url,\n filename: ensureFilenameWithExtension(currentItem.filename, currentItem.url),\n isZip: true,\n };\n createDownload(downblobOptions)\n .then(res => {\n zipInstance.file(downblobOptions.filename, res);\n downloadCount.value++;\n editElementContent(currentContentClass, `总下载文件数:${len},已下载文件数:${downloadCount.value}`);\n if (downloadCount.value == len) {\n editElementContent(currentContentClass, `正在合并...`);\n zipInstance\n .generateAsync({ type: 'blob' })\n .then(async res => {\n modalInfo.close();\n\n const fileUrl = window.URL.createObjectURL(res);\n // FileSaver.saveAs(res, filename);\n await downloadByUrl(fileUrl, { filename });\n resolve(true);\n })\n .catch(error => {\n console.error('error', error);\n reject(error);\n });\n }\n })\n .catch(error => {\n reject(error);\n modalInfo.close();\n });\n }\n });\n };\n const createDownload = (options: { url: string; filename: string; uuid?: string; isZip?: boolean }) => {\n return new Promise<Blob>((resolve, reject) => {\n // 创建一个新的 XMLHttpRequest 对象\n const xhr = new XMLHttpRequest();\n // 初始化一个GET请求\n xhr.open('GET', options.url, true);\n xhr.responseType = 'blob'; // 设置响应类型为blob,以便处理二进制文件\n\n // 监听 progress 事件\n xhr.onprogress = function (event) {\n if (event.lengthComputable) {\n const percentComplete = Math.floor((event.loaded / event.total) * 100);\n if (options.uuid) {\n editElementContent(options.uuid, `当前下载进度 ${percentComplete}%`);\n }\n }\n };\n\n // 监听 load 事件,表示下载完成\n xhr.onload = function (e) {\n const eventTarget = e.target as XMLHttpRequest;\n if ([200, 304].includes(eventTarget.status)) {\n const blob = eventTarget.response;\n // const url = window.URL.createObjectURL(blob);\n if (!options.isZip) {\n FileSaver.saveAs(blob, options.filename);\n GmNotification({\n type: 'success',\n title: '温馨提示',\n message: '下载完成',\n duration: 3000,\n });\n }\n\n resolve(blob);\n } else if (eventTarget.status === 404) {\n GmMessage.error('文件不存在,或已被删除');\n reject(e);\n } else {\n GmMessage.error('下载异常,请重试!');\n reject(e);\n }\n };\n\n // 监听 error 事件\n xhr.onerror = function (e) {\n GmMessage.error('下载异常,请重试');\n reject(e);\n };\n\n // 发送请求\n xhr.send();\n });\n };\n\n /**\n * - 下载文件夹和文件 支持文件夹结构\n *\n * - 如果下载多级文件夹则文件所属文件夹路径使用 / 隔开\n *\n * - 文件夹路径folder结构为:一级文件夹/二级文件夹/三级文件夹...\n * @param fileList 文件列表(一般情况下每项无需传入 filename,系统会自动从 URL 中提取文件名)\n * @param zipName zip文件名,默认为 '资源+当前时间戳'\n */\n const downloadFolderToZip = async (fileList: DownloadFolderItem[], zipName?: string) => {\n const finalZipName = zipName || `资源${Date.now()}`;\n const currentContentClass = `message${Date.now()}`;\n const downloadCount = ref(0);\n const errorCount = ref(0);\n const totalCount = fileList.length;\n\n const modalInfo = GmNotification({\n title: '下载中',\n message: h('div', [\n h('div', { className: currentContentClass }, [`总文件数:${totalCount},已下载:${downloadCount.value},失败:${errorCount.value}`]),\n ]),\n duration: 0,\n });\n\n const zipInstance = new JSZip();\n const concurrentLimit = 5;\n let currentIndex = 0;\n\n const downloadSingleFile = async (item: DownloadFolderItem): Promise<void> => {\n try {\n // 如果 url 为空,只创建文件夹(如果有 folder 的话)\n if (!item.url) {\n if (item.folder) {\n zipInstance.folder(item.folder);\n }\n downloadCount.value++;\n editElementContent(currentContentClass, `总文件数:${totalCount},已下载:${downloadCount.value},失败:${errorCount.value}`);\n return;\n }\n\n // 确保文件名不为空且包含正确的扩展名\n const finalFilename = ensureFilenameWithExtension(item.filename, item.url);\n\n const blob = await createDownload({\n url: item.url,\n filename: finalFilename,\n isZip: true,\n });\n\n // 构建文件在zip中的路径,使用处理后的文件名\n const filePath = item.folder ? `${item.folder}/${finalFilename}` : finalFilename;\n zipInstance.file(filePath, blob);\n\n downloadCount.value++;\n editElementContent(currentContentClass, `总文件数:${totalCount},已下载:${downloadCount.value},失败:${errorCount.value}`);\n } catch (error) {\n console.error(`下载文件失败: ${item.filename}`, error);\n errorCount.value++;\n editElementContent(currentContentClass, `总文件数:${totalCount},已下载:${downloadCount.value},失败:${errorCount.value}`);\n }\n };\n\n const processNextBatch = async (): Promise<void> => {\n const batch: Promise<void>[] = [];\n\n for (let i = 0; i < concurrentLimit && currentIndex < fileList.length; i++) {\n const item = fileList[currentIndex++];\n batch.push(downloadSingleFile(item));\n }\n\n if (batch.length > 0) {\n await Promise.all(batch);\n if (currentIndex < fileList.length) {\n await processNextBatch();\n }\n }\n };\n\n try {\n await processNextBatch();\n\n editElementContent(currentContentClass, `正在打包zip文件...`);\n\n const zipBlob = await zipInstance.generateAsync({ type: 'blob' });\n modalInfo.close();\n\n FileSaver.saveAs(zipBlob, `${finalZipName}.zip`);\n\n if (errorCount.value > 0) {\n GmNotification({\n type: 'warning',\n title: '温馨提示',\n message: `成功下载 ${downloadCount.value} 个文件,${errorCount.value} 个文件下载失败`,\n duration: 5000,\n });\n } else {\n GmNotification({\n type: 'success',\n title: '温馨提示',\n message: `成功下载 ${downloadCount.value} 个文件`,\n duration: 3000,\n });\n }\n\n return true;\n } catch (error) {\n modalInfo.close();\n GmMessage.error('打包下载失败,请重试');\n throw error;\n }\n };\n\n return { downloadByUrl, downloadByRes, downloadToZip, downloadFolderToZip };\n};\n\n// 动态更新 notify 中的message 信息\nconst editElementContent = (className: string, content: string) => {\n // eslint-disable-next-line unicorn/prefer-query-selector\n const currentEle = document.getElementsByClassName(className)[0];\n if (currentEle) {\n currentEle.innerHTML = content;\n }\n};\n\n/**\n * 从 Content-Disposition 头中解析文件名,兼容 RFC 5987、RFC 6266 和传统标准\n * @param {string} [disposition] - Content-Disposition 头内容\n * @returns {string} 解析后的文件名,默认返回 'file'\n */\nconst getFileNameFromContentDisposition = (disposition?: string) => {\n if (!disposition || !isString(disposition)) {\n return 'file';\n }\n\n const normalized = disposition.replace(/\\s+/g, '');\n\n try {\n // RFC 5987: filename*=UTF-8''encoded-filename\n const rfc5987Match = normalized.match(/filename\\*=UTF-8''([^;]+)/i);\n if (rfc5987Match) {\n return decodeURIComponent(rfc5987Match[1]);\n }\n\n // 标准: filename=\"filename\" 或 filename=filename\n const standardMatch = normalized.match(/filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/i);\n if (standardMatch) {\n return decodeURIComponent(standardMatch[1].replace(/['\"]/g, ''));\n }\n\n return 'file';\n } catch (error) {\n console.error(error);\n return 'filename-error';\n }\n};\n\n/**\n * 从 URL 中提取文件名\n * @param url 文件URL\n * @returns 文件名\n */\nexport const getUrlFilename = (url: string): string => {\n // 先去掉查询参数,再提取文件名(避免查询参数中的 / 干扰)\n const urlWithoutQuery = url.split('?')[0];\n const filename = urlWithoutQuery.split('/').pop() || 'file';\n return filename;\n};\n\n/**\n * 从文件名中提取扩展名\n * @param filename 文件名\n * @returns 扩展名(包含.)或空字符串\n */\nexport const getFileExtension = (filename: string): string => {\n const match = filename.match(/\\.[^./\\\\]+$/);\n return match ? match[0] : '';\n};\n\n/**\n * 确保文件名包含正确的扩展名\n * 如果传入的 filename 没有扩展名,则从 URL 中提取扩展名并追加\n * @param filename 传入的文件名\n * @param url 文件URL\n * @returns 带有扩展名的文件名\n */\nexport const ensureFilenameWithExtension = (filename: string | undefined, url: string): string => {\n // 如果没有传入 filename,直接从 URL 获取\n if (!filename) {\n return getUrlFilename(url);\n }\n\n // 检查 filename 是否已有扩展名\n if (getFileExtension(filename)) {\n return filename;\n }\n\n // 从 URL 中获取扩展名并追加\n const urlFilename = getUrlFilename(url);\n const extension = getFileExtension(urlFilename);\n\n return filename + extension;\n};\n"],"names":["uuidv4","res"],"mappings":";;;;;;;;;AA4BO,MAAM,cAAc,MAAM;AAM/B,EAAA,MAAM,aAAA,GAAgB,OAAO,GAAA,EAAa,OAAA,KAA8B;AACtE,IAAA,MAAM,QAAA,GAAW,OAAA,EAAS,QAAA,IAAY,cAAA,CAAe,GAAG,CAAA;AACxD,IAAA,MAAM,QAAQA,EAAA,EAAO;AACrB,IAAA,MAAM,YAAY,cAAA,CAAe;AAAA,MAC/B,KAAA,EAAO,oBAAA;AAAA,MACP,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,WAAW,KAAA,EAAM,EAAG,CAAC,CAAA,uCAAA,CAAW,CAAC,CAAA;AAAA,MACrD,QAAA,EAAU;AAAA,KACX,CAAA;AACD,IAAA,IAAI;AACF,MAAA,MAAM,cAAA,CAAe;AAAA,QACnB,GAAA;AAAA,QACA,QAAA;AAAA,QACA,IAAA,EAAM;AAAA,OACP,CAAA;AAAA,IACH,CAAA,SAAE;AACA,MAAA,SAAA,CAAU,KAAA,EAAM;AAAA,IAClB;AAAA,EACF,CAAA;AAMA,EAAA,MAAM,aAAA,GAAgB,OAAO,GAAA,EAA8B,OAAA,KAA8B;AACvF,IAAA,MAAM,QAAA,GACJ,OAAA,EAAS,QAAA,IAAY,iCAAA,CAAkC,GAAA,EAAK,OAAA,GAAU,qBAAqB,CAAA,IAAK,GAAA,EAAK,OAAA,GAAU,qBAAqB,CAAC,CAAA;AACvI,IAAA,MAAM,OAAA,GAAU,MAAM,GAAA,CAAI,IAAA;AAC1B,IAAA,MAAM,QAAQA,EAAA,EAAO;AACrB,IAAA,MAAM,YAAY,cAAA,CAAe;AAAA,MAC/B,KAAA,EAAO,oBAAA;AAAA,MACP,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,WAAW,KAAA,EAAM,EAAG,CAAC,CAAA,uCAAA,CAAW,CAAC,CAAA;AAAA,MACrD,QAAA,EAAU;AAAA,KACX,CAAA;AAED,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,CAAC,OAAO,CAAC,CAAA;AAC/B,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,GAAA,CAAI,eAAA,CAAgB,IAAI,CAAA;AAC/C,IAAA,IAAI;AACF,MAAA,MAAM,cAAA,CAAe;AAAA,QACnB,GAAA,EAAK,OAAA;AAAA,QACL,QAAA;AAAA,QACA,IAAA,EAAM;AAAA,OACP,CAAA;AAAA,IACH,CAAA,SAAE;AACA,MAAA,SAAA,CAAU,KAAA,EAAM;AAAA,IAClB;AAAA,EACF,CAAA;AAMA,EAAA,MAAM,aAAA,GAAgB,OAAO,QAAA,EAAgC,QAAA,KAAqB;AAChF,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,MAAM,mBAAA,GAAsB,CAAA,OAAA,EAAU,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA;AAChD,MAAA,MAAM,aAAA,GAAgB,IAAI,CAAC,CAAA;AAC3B,MAAA,MAAM,MAAM,QAAA,CAAS,MAAA;AACrB,MAAA,MAAM,YAAY,cAAA,CAAe;AAAA,QAC/B,KAAA,EAAO,oBAAA;AAAA,QACP,SAAS,CAAA,CAAE,KAAA,EAAO,CAAC,CAAA,CAAE,KAAA,EAAO,EAAE,SAAA,EAAW,mBAAA,IAAuB,CAAC,CAAA,0CAAA,EAAU,GAAG,CAAA,gDAAA,EAAW,aAAA,CAAc,KAAK,CAAA,CAAE,CAAC,CAAC,CAAC,CAAA;AAAA,QACjH,QAAA,EAAU;AAAA,OACX,CAAA;AAED,MAAA,MAAM,WAAA,GAAc,IAAI,KAAA,EAAM;AAC9B,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,CAAA,EAAA,EAAK;AAC5B,QAAA,MAAM,WAAA,GAAc,SAAS,CAAC,CAAA;AAE9B,QAAA,MAAM,eAAA,GAAkB;AAAA,UACtB,KAAK,WAAA,CAAY,GAAA;AAAA,UACjB,QAAA,EAAU,2BAAA,CAA4B,WAAA,CAAY,QAAA,EAAU,YAAY,GAAG,CAAA;AAAA,UAC3E,KAAA,EAAO;AAAA,SACT;AACA,QAAA,cAAA,CAAe,eAAe,CAAA,CAC3B,IAAA,CAAK,CAAA,GAAA,KAAO;AACX,UAAA,WAAA,CAAY,IAAA,CAAK,eAAA,CAAgB,QAAA,EAAU,GAAG,CAAA;AAC9C,UAAA,aAAA,CAAc,KAAA,EAAA;AACd,UAAA,kBAAA,CAAmB,qBAAqB,CAAA,0CAAA,EAAU,GAAG,CAAA,gDAAA,EAAW,aAAA,CAAc,KAAK,CAAA,CAAE,CAAA;AACrF,UAAA,IAAI,aAAA,CAAc,SAAS,GAAA,EAAK;AAC9B,YAAA,kBAAA,CAAmB,qBAAqB,CAAA,2BAAA,CAAS,CAAA;AACjD,YAAA,WAAA,CACG,aAAA,CAAc,EAAE,IAAA,EAAM,MAAA,EAAQ,CAAA,CAC9B,IAAA,CAAK,OAAMC,IAAAA,KAAO;AACjB,cAAA,SAAA,CAAU,KAAA,EAAM;AAEhB,cAAA,MAAM,OAAA,GAAU,MAAA,CAAO,GAAA,CAAI,eAAA,CAAgBA,IAAG,CAAA;AAE9C,cAAA,MAAM,aAAA,CAAc,OAAA,EAAS,EAAE,QAAA,EAAU,CAAA;AACzC,cAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,YACd,CAAC,CAAA,CACA,KAAA,CAAM,CAAA,KAAA,KAAS;AACd,cAAA,OAAA,CAAQ,KAAA,CAAM,SAAS,KAAK,CAAA;AAC5B,cAAA,MAAA,CAAO,KAAK,CAAA;AAAA,YACd,CAAC,CAAA;AAAA,UACL;AAAA,QACF,CAAC,CAAA,CACA,KAAA,CAAM,CAAA,KAAA,KAAS;AACd,UAAA,MAAA,CAAO,KAAK,CAAA;AACZ,UAAA,SAAA,CAAU,KAAA,EAAM;AAAA,QAClB,CAAC,CAAA;AAAA,MACL;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA;AACA,EAAA,MAAM,cAAA,GAAiB,CAAC,OAAA,KAA+E;AACrG,IAAA,OAAO,IAAI,OAAA,CAAc,CAAC,OAAA,EAAS,MAAA,KAAW;AAE5C,MAAA,MAAM,GAAA,GAAM,IAAI,cAAA,EAAe;AAE/B,MAAA,GAAA,CAAI,IAAA,CAAK,KAAA,EAAO,OAAA,CAAQ,GAAA,EAAK,IAAI,CAAA;AACjC,MAAA,GAAA,CAAI,YAAA,GAAe,MAAA;AAGnB,MAAA,GAAA,CAAI,UAAA,GAAa,SAAU,KAAA,EAAO;AAChC,QAAA,IAAI,MAAM,gBAAA,EAAkB;AAC1B,UAAA,MAAM,kBAAkB,IAAA,CAAK,KAAA,CAAO,MAAM,MAAA,GAAS,KAAA,CAAM,QAAS,GAAG,CAAA;AACrE,UAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,YAAA,kBAAA,CAAmB,OAAA,CAAQ,IAAA,EAAM,CAAA,qCAAA,EAAU,eAAe,CAAA,CAAA,CAAG,CAAA;AAAA,UAC/D;AAAA,QACF;AAAA,MACF,CAAA;AAGA,MAAA,GAAA,CAAI,MAAA,GAAS,SAAU,CAAA,EAAG;AACxB,QAAA,MAAM,cAAc,CAAA,CAAE,MAAA;AACtB,QAAA,IAAI,CAAC,GAAA,EAAK,GAAG,EAAE,QAAA,CAAS,WAAA,CAAY,MAAM,CAAA,EAAG;AAC3C,UAAA,MAAM,OAAO,WAAA,CAAY,QAAA;AAEzB,UAAA,IAAI,CAAC,QAAQ,KAAA,EAAO;AAClB,YAAA,SAAA,CAAU,MAAA,CAAO,IAAA,EAAM,OAAA,CAAQ,QAAQ,CAAA;AACvC,YAAA,cAAA,CAAe;AAAA,cACb,IAAA,EAAM,SAAA;AAAA,cACN,KAAA,EAAO,0BAAA;AAAA,cACP,OAAA,EAAS,0BAAA;AAAA,cACT,QAAA,EAAU;AAAA,aACX,CAAA;AAAA,UACH;AAEA,UAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,QACd,CAAA,MAAA,IAAW,WAAA,CAAY,MAAA,KAAW,GAAA,EAAK;AACrC,UAAA,SAAA,CAAU,MAAM,oEAAa,CAAA;AAC7B,UAAA,MAAA,CAAO,CAAC,CAAA;AAAA,QACV,CAAA,MAAO;AACL,UAAA,SAAA,CAAU,MAAM,wDAAW,CAAA;AAC3B,UAAA,MAAA,CAAO,CAAC,CAAA;AAAA,QACV;AAAA,MACF,CAAA;AAGA,MAAA,GAAA,CAAI,OAAA,GAAU,SAAU,CAAA,EAAG;AACzB,QAAA,SAAA,CAAU,MAAM,kDAAU,CAAA;AAC1B,QAAA,MAAA,CAAO,CAAC,CAAA;AAAA,MACV,CAAA;AAGA,MAAA,GAAA,CAAI,IAAA,EAAK;AAAA,IACX,CAAC,CAAA;AAAA,EACH,CAAA;AAWA,EAAA,MAAM,mBAAA,GAAsB,OAAO,QAAA,EAAgC,OAAA,KAAqB;AACtF,IAAA,MAAM,YAAA,GAAe,OAAA,IAAW,CAAA,YAAA,EAAK,IAAA,CAAK,KAAK,CAAA,CAAA;AAC/C,IAAA,MAAM,mBAAA,GAAsB,CAAA,OAAA,EAAU,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA;AAChD,IAAA,MAAM,aAAA,GAAgB,IAAI,CAAC,CAAA;AAC3B,IAAA,MAAM,UAAA,GAAa,IAAI,CAAC,CAAA;AACxB,IAAA,MAAM,aAAa,QAAA,CAAS,MAAA;AAE5B,IAAA,MAAM,YAAY,cAAA,CAAe;AAAA,MAC/B,KAAA,EAAO,oBAAA;AAAA,MACP,OAAA,EAAS,EAAE,KAAA,EAAO;AAAA,QAChB,EAAE,KAAA,EAAO,EAAE,SAAA,EAAW,mBAAA,IAAuB,CAAC,CAAA,8BAAA,EAAQ,UAAU,CAAA,8BAAA,EAAQ,cAAc,KAAK,CAAA,wBAAA,EAAO,UAAA,CAAW,KAAK,EAAE,CAAC;AAAA,OACtH,CAAA;AAAA,MACD,QAAA,EAAU;AAAA,KACX,CAAA;AAED,IAAA,MAAM,WAAA,GAAc,IAAI,KAAA,EAAM;AAC9B,IAAA,MAAM,eAAA,GAAkB,CAAA;AACxB,IAAA,IAAI,YAAA,GAAe,CAAA;AAEnB,IAAA,MAAM,kBAAA,GAAqB,OAAO,IAAA,KAA4C;AAC5E,MAAA,IAAI;AAEF,QAAA,IAAI,CAAC,KAAK,GAAA,EAAK;AACb,UAAA,IAAI,KAAK,MAAA,EAAQ;AACf,YAAA,WAAA,CAAY,MAAA,CAAO,KAAK,MAAM,CAAA;AAAA,UAChC;AACA,UAAA,aAAA,CAAc,KAAA,EAAA;AACd,UAAA,kBAAA,CAAmB,mBAAA,EAAqB,iCAAQ,UAAU,CAAA,8BAAA,EAAQ,cAAc,KAAK,CAAA,wBAAA,EAAO,UAAA,CAAW,KAAK,CAAA,CAAE,CAAA;AAC9G,UAAA;AAAA,QACF;AAGA,QAAA,MAAM,aAAA,GAAgB,2BAAA,CAA4B,IAAA,CAAK,QAAA,EAAU,KAAK,GAAG,CAAA;AAEzE,QAAA,MAAM,IAAA,GAAO,MAAM,cAAA,CAAe;AAAA,UAChC,KAAK,IAAA,CAAK,GAAA;AAAA,UACV,QAAA,EAAU,aAAA;AAAA,UACV,KAAA,EAAO;AAAA,SACR,CAAA;AAGD,QAAA,MAAM,QAAA,GAAW,KAAK,MAAA,GAAS,CAAA,EAAG,KAAK,MAAM,CAAA,CAAA,EAAI,aAAa,CAAA,CAAA,GAAK,aAAA;AACnE,QAAA,WAAA,CAAY,IAAA,CAAK,UAAU,IAAI,CAAA;AAE/B,QAAA,aAAA,CAAc,KAAA,EAAA;AACd,QAAA,kBAAA,CAAmB,mBAAA,EAAqB,iCAAQ,UAAU,CAAA,8BAAA,EAAQ,cAAc,KAAK,CAAA,wBAAA,EAAO,UAAA,CAAW,KAAK,CAAA,CAAE,CAAA;AAAA,MAChH,SAAS,KAAA,EAAO;AACd,QAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,sCAAA,EAAW,IAAA,CAAK,QAAQ,IAAI,KAAK,CAAA;AAC/C,QAAA,UAAA,CAAW,KAAA,EAAA;AACX,QAAA,kBAAA,CAAmB,mBAAA,EAAqB,iCAAQ,UAAU,CAAA,8BAAA,EAAQ,cAAc,KAAK,CAAA,wBAAA,EAAO,UAAA,CAAW,KAAK,CAAA,CAAE,CAAA;AAAA,MAChH;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,mBAAmB,YAA2B;AAClD,MAAA,MAAM,QAAyB,EAAC;AAEhC,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,mBAAmB,YAAA,GAAe,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AAC1E,QAAA,MAAM,IAAA,GAAO,SAAS,YAAA,EAAc,CAAA;AACpC,QAAA,KAAA,CAAM,IAAA,CAAK,kBAAA,CAAmB,IAAI,CAAC,CAAA;AAAA,MACrC;AAEA,MAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,QAAA,MAAM,OAAA,CAAQ,IAAI,KAAK,CAAA;AACvB,QAAA,IAAI,YAAA,GAAe,SAAS,MAAA,EAAQ;AAClC,UAAA,MAAM,gBAAA,EAAiB;AAAA,QACzB;AAAA,MACF;AAAA,IACF,CAAA;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,gBAAA,EAAiB;AAEvB,MAAA,kBAAA,CAAmB,qBAAqB,CAAA,0CAAA,CAAc,CAAA;AAEtD,MAAA,MAAM,UAAU,MAAM,WAAA,CAAY,cAAc,EAAE,IAAA,EAAM,QAAQ,CAAA;AAChE,MAAA,SAAA,CAAU,KAAA,EAAM;AAEhB,MAAA,SAAA,CAAU,MAAA,CAAO,OAAA,EAAS,CAAA,EAAG,YAAY,CAAA,IAAA,CAAM,CAAA;AAE/C,MAAA,IAAI,UAAA,CAAW,QAAQ,CAAA,EAAG;AACxB,QAAA,cAAA,CAAe;AAAA,UACb,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO,0BAAA;AAAA,UACP,SAAS,CAAA,yBAAA,EAAQ,aAAA,CAAc,KAAK,CAAA,yBAAA,EAAQ,WAAW,KAAK,CAAA,2CAAA,CAAA;AAAA,UAC5D,QAAA,EAAU;AAAA,SACX,CAAA;AAAA,MACH,CAAA,MAAO;AACL,QAAA,cAAA,CAAe;AAAA,UACb,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO,0BAAA;AAAA,UACP,OAAA,EAAS,CAAA,yBAAA,EAAQ,aAAA,CAAc,KAAK,CAAA,mBAAA,CAAA;AAAA,UACpC,QAAA,EAAU;AAAA,SACX,CAAA;AAAA,MACH;AAEA,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,SAAA,CAAU,KAAA,EAAM;AAChB,MAAA,SAAA,CAAU,MAAM,8DAAY,CAAA;AAC5B,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF,CAAA;AAEA,EAAA,OAAO,EAAE,aAAA,EAAe,aAAA,EAAe,aAAA,EAAe,mBAAA,EAAoB;AAC5E;AAGA,MAAM,kBAAA,GAAqB,CAAC,SAAA,EAAmB,OAAA,KAAoB;AAEjE,EAAA,MAAM,UAAA,GAAa,QAAA,CAAS,sBAAA,CAAuB,SAAS,EAAE,CAAC,CAAA;AAC/D,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,UAAA,CAAW,SAAA,GAAY,OAAA;AAAA,EACzB;AACF,CAAA;AAOA,MAAM,iCAAA,GAAoC,CAAC,WAAA,KAAyB;AAClE,EAAA,IAAI,CAAC,WAAA,IAAe,CAAC,QAAA,CAAS,WAAW,CAAA,EAAG;AAC1C,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,UAAA,GAAa,WAAA,CAAY,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA;AAEjD,EAAA,IAAI;AAEF,IAAA,MAAM,YAAA,GAAe,UAAA,CAAW,KAAA,CAAM,4BAA4B,CAAA;AAClE,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,OAAO,kBAAA,CAAmB,YAAA,CAAa,CAAC,CAAC,CAAA;AAAA,IAC3C;AAGA,IAAA,MAAM,aAAA,GAAgB,UAAA,CAAW,KAAA,CAAM,yCAAyC,CAAA;AAChF,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,OAAO,mBAAmB,aAAA,CAAc,CAAC,EAAE,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAC,CAAA;AAAA,IACjE;AAEA,IAAA,OAAO,MAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,MAAM,KAAK,CAAA;AACnB,IAAA,OAAO,gBAAA;AAAA,EACT;AACF,CAAA;AAOO,MAAM,cAAA,GAAiB,CAAC,GAAA,KAAwB;AAErD,EAAA,MAAM,eAAA,GAAkB,GAAA,CAAI,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AACxC,EAAA,MAAM,WAAW,eAAA,CAAgB,KAAA,CAAM,GAAG,CAAA,CAAE,KAAI,IAAK,MAAA;AACrD,EAAA,OAAO,QAAA;AACT;AAOO,MAAM,gBAAA,GAAmB,CAAC,QAAA,KAA6B;AAC5D,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,aAAa,CAAA;AAC1C,EAAA,OAAO,KAAA,GAAQ,KAAA,CAAM,CAAC,CAAA,GAAI,EAAA;AAC5B;AASO,MAAM,2BAAA,GAA8B,CAAC,QAAA,EAA8B,GAAA,KAAwB;AAEhG,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,eAAe,GAAG,CAAA;AAAA,EAC3B;AAGA,EAAA,IAAI,gBAAA,CAAiB,QAAQ,CAAA,EAAG;AAC9B,IAAA,OAAO,QAAA;AAAA,EACT;AAGA,EAAA,MAAM,WAAA,GAAc,eAAe,GAAG,CAAA;AACtC,EAAA,MAAM,SAAA,GAAY,iBAAiB,WAAW,CAAA;AAE9C,EAAA,OAAO,QAAA,GAAW,SAAA;AACpB;;;;"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../../../packages/hooks/base/useDownload/index.ts"],"sourcesContent":["import { h, ref } from 'vue';\nimport FileSaver from 'file-saver';\n\nimport GmNotification from '@giime/components/src/plugins/notification';\nimport { v4 as uuidv4 } from 'uuid';\nimport JSZip from 'jszip';\nimport { GmMessage } from '@giime/components/src/plugins/message';\nimport type { AxiosResponse } from 'axios';\nimport { isString } from '@giime/utils';\n\nexport interface DownloadOptions {\n /** 自定义文件名(可选)。如果想保证文件下载顺序,推荐使用 getUrlExtension 自行修改文件名 */\n filename?: string;\n}\nexport interface DateownloadZipItem {\n url: string;\n /** 自定义文件名(可选)。如果想保证文件下载顺序,推荐使用 getUrlExtension 自行修改文件名 */\n filename?: string;\n}\n\nexport interface DownloadFolderItem {\n url: string;\n /** 资源所在文件夹名称多级使用 / 隔开 例如:一级文件夹/二级文件夹/三级文件夹 */\n folder?: string;\n /** 自定义文件名(可选)。如果想保证文件下载顺序,推荐使用 getUrlExtension 自行修改文件名 */\n filename?: string;\n}\n\nexport const useDownload = () => {\n /**\n * 通过url下载\n * @param url 文件URL\n * @param options 下载配置。如果想保证文件下载顺序,推荐使用 getUrlExtension 自行修改文件名\n */\n const downloadByUrl = async (url: string, options?: DownloadOptions) => {\n const filename = options?.filename || getUrlFilename(url);\n const curId = uuidv4();\n const modalInfo = GmNotification({\n title: '下载中',\n message: h('div', { className: curId }, [`当前下载进度 0%`]),\n duration: 0,\n });\n try {\n await createDownload({\n url,\n filename,\n uuid: curId,\n });\n } finally {\n modalInfo.close();\n }\n };\n /**\n * 通过接口响应结果下载\n * @param res 接口响应对象\n * @param options 下载配置。如果想自定义文件名,推荐使用 getUrlExtension 获取扩展名\n */\n const downloadByRes = async (res: AxiosResponse<any, any>, options?: DownloadOptions) => {\n const filename =\n options?.filename || getFileNameFromContentDisposition(res?.headers?.['content-disposition'] || res?.headers?.['Content-Disposition']);\n const resBlob = await res.data;\n const curId = uuidv4();\n const modalInfo = GmNotification({\n title: '下载中',\n message: h('div', { className: curId }, [`当前下载进度 0%`]),\n duration: 0,\n });\n // 设置type类型\n const blob = new Blob([resBlob]);\n const fileUrl = window.URL.createObjectURL(blob);\n try {\n await createDownload({\n url: fileUrl,\n filename,\n uuid: curId,\n });\n } finally {\n modalInfo.close();\n }\n };\n /**\n * 下载多文件 转为zip\n * @param fileList 文件列表。如果想保证文件下载顺序,推荐使用 getUrlExtension 自行修改文件名\n * @param filename zip文件名\n */\n const downloadToZip = async (fileList: DateownloadZipItem[], filename: string) => {\n return new Promise((resolve, reject) => {\n const currentContentClass = `message${Date.now()}`;\n const downloadCount = ref(0);\n const len = fileList.length;\n const modalInfo = GmNotification({\n title: '下载中',\n message: h('div', [h('div', { className: currentContentClass }, [`总下载文件数:${len},已下载文件数:${downloadCount.value}`])]),\n duration: 0,\n });\n // h('div', { className: currentClass }, [`当前下载进度 ${progress.value}%`]),\n const zipInstance = new JSZip();\n for (let i = 0; i < len; i++) {\n const currentItem = fileList[i];\n // const fileBlob = await\n const downblobOptions = {\n url: currentItem.url,\n filename: ensureFilenameWithExtension(currentItem.filename, currentItem.url),\n isZip: true,\n };\n createDownload(downblobOptions)\n .then(res => {\n zipInstance.file(downblobOptions.filename, res);\n downloadCount.value++;\n editElementContent(currentContentClass, `总下载文件数:${len},已下载文件数:${downloadCount.value}`);\n if (downloadCount.value == len) {\n editElementContent(currentContentClass, `正在合并...`);\n zipInstance\n .generateAsync({ type: 'blob' })\n .then(async res => {\n modalInfo.close();\n\n const fileUrl = window.URL.createObjectURL(res);\n // FileSaver.saveAs(res, filename);\n await downloadByUrl(fileUrl, { filename });\n resolve(true);\n })\n .catch(error => {\n console.error('error', error);\n reject(error);\n });\n }\n })\n .catch(error => {\n reject(error);\n modalInfo.close();\n });\n }\n });\n };\n const createDownload = (options: { url: string; filename: string; uuid?: string; isZip?: boolean }) => {\n return new Promise<Blob>((resolve, reject) => {\n // 创建一个新的 XMLHttpRequest 对象\n const xhr = new XMLHttpRequest();\n // 初始化一个GET请求\n xhr.open('GET', options.url, true);\n xhr.responseType = 'blob'; // 设置响应类型为blob,以便处理二进制文件\n\n // 监听 progress 事件\n xhr.onprogress = function (event) {\n if (event.lengthComputable) {\n const percentComplete = Math.floor((event.loaded / event.total) * 100);\n if (options.uuid) {\n editElementContent(options.uuid, `当前下载进度 ${percentComplete}%`);\n }\n }\n };\n\n // 监听 load 事件,表示下载完成\n xhr.onload = function (e) {\n const eventTarget = e.target as XMLHttpRequest;\n if ([200, 304].includes(eventTarget.status)) {\n const blob = eventTarget.response;\n // const url = window.URL.createObjectURL(blob);\n if (!options.isZip) {\n FileSaver.saveAs(blob, options.filename);\n GmNotification({\n type: 'success',\n title: '温馨提示',\n message: '下载完成',\n duration: 3000,\n });\n }\n\n resolve(blob);\n } else if (eventTarget.status === 404) {\n GmMessage.error('文件不存在,或已被删除');\n reject(e);\n } else {\n GmMessage.error('下载异常,请重试!');\n reject(e);\n }\n };\n\n // 监听 error 事件\n xhr.onerror = function (e) {\n GmMessage.error('下载异常,请重试');\n reject(e);\n };\n\n // 发送请求\n xhr.send();\n });\n };\n\n /**\n * - 下载文件夹和文件 支持文件夹结构\n *\n * - 如果下载多级文件夹则文件所属文件夹路径使用 / 隔开\n *\n * - 文件夹路径folder结构为:一级文件夹/二级文件夹/三级文件夹...\n * @param fileList 文件列表。如果想保证文件下载顺序,推荐使用 getUrlExtension 自行修改文件名\n * @param zipName zip文件名,默认为 '资源+当前时间戳'\n */\n const downloadFolderToZip = async (fileList: DownloadFolderItem[], zipName?: string) => {\n const finalZipName = zipName || `资源${Date.now()}`;\n const currentContentClass = `message${Date.now()}`;\n const downloadCount = ref(0);\n const errorCount = ref(0);\n const totalCount = fileList.length;\n\n const modalInfo = GmNotification({\n title: '下载中',\n message: h('div', [\n h('div', { className: currentContentClass }, [`总文件数:${totalCount},已下载:${downloadCount.value},失败:${errorCount.value}`]),\n ]),\n duration: 0,\n });\n\n const zipInstance = new JSZip();\n const concurrentLimit = 5;\n let currentIndex = 0;\n\n const downloadSingleFile = async (item: DownloadFolderItem): Promise<void> => {\n try {\n // 如果 url 为空,只创建文件夹(如果有 folder 的话)\n if (!item.url) {\n if (item.folder) {\n zipInstance.folder(item.folder);\n }\n downloadCount.value++;\n editElementContent(currentContentClass, `总文件数:${totalCount},已下载:${downloadCount.value},失败:${errorCount.value}`);\n return;\n }\n\n // 确保文件名不为空且包含正确的扩展名\n const finalFilename = ensureFilenameWithExtension(item.filename, item.url);\n\n const blob = await createDownload({\n url: item.url,\n filename: finalFilename,\n isZip: true,\n });\n\n // 构建文件在zip中的路径,使用处理后的文件名\n const filePath = item.folder ? `${item.folder}/${finalFilename}` : finalFilename;\n zipInstance.file(filePath, blob);\n\n downloadCount.value++;\n editElementContent(currentContentClass, `总文件数:${totalCount},已下载:${downloadCount.value},失败:${errorCount.value}`);\n } catch (error) {\n console.error(`下载文件失败: ${item.filename}`, error);\n errorCount.value++;\n editElementContent(currentContentClass, `总文件数:${totalCount},已下载:${downloadCount.value},失败:${errorCount.value}`);\n }\n };\n\n const processNextBatch = async (): Promise<void> => {\n const batch: Promise<void>[] = [];\n\n for (let i = 0; i < concurrentLimit && currentIndex < fileList.length; i++) {\n const item = fileList[currentIndex++];\n batch.push(downloadSingleFile(item));\n }\n\n if (batch.length > 0) {\n await Promise.all(batch);\n if (currentIndex < fileList.length) {\n await processNextBatch();\n }\n }\n };\n\n try {\n await processNextBatch();\n\n editElementContent(currentContentClass, `正在打包zip文件...`);\n\n const zipBlob = await zipInstance.generateAsync({ type: 'blob' });\n modalInfo.close();\n\n FileSaver.saveAs(zipBlob, `${finalZipName}.zip`);\n\n if (errorCount.value > 0) {\n GmNotification({\n type: 'warning',\n title: '温馨提示',\n message: `成功下载 ${downloadCount.value} 个文件,${errorCount.value} 个文件下载失败`,\n duration: 5000,\n });\n } else {\n GmNotification({\n type: 'success',\n title: '温馨提示',\n message: `成功下载 ${downloadCount.value} 个文件`,\n duration: 3000,\n });\n }\n\n return true;\n } catch (error) {\n modalInfo.close();\n GmMessage.error('打包下载失败,请重试');\n throw error;\n }\n };\n\n return { downloadByUrl, downloadByRes, downloadToZip, downloadFolderToZip };\n};\n\n// 动态更新 notify 中的message 信息\nconst editElementContent = (className: string, content: string) => {\n // eslint-disable-next-line unicorn/prefer-query-selector\n const currentEle = document.getElementsByClassName(className)[0];\n if (currentEle) {\n currentEle.innerHTML = content;\n }\n};\n\n/**\n * 从 Content-Disposition 头中解析文件名,兼容 RFC 5987、RFC 6266 和传统标准\n * @param {string} [disposition] - Content-Disposition 头内容\n * @returns {string} 解析后的文件名,默认返回 'file'\n */\nconst getFileNameFromContentDisposition = (disposition?: string) => {\n if (!disposition || !isString(disposition)) {\n return 'file';\n }\n\n const normalized = disposition.replace(/\\s+/g, '');\n\n try {\n // RFC 5987: filename*=UTF-8''encoded-filename\n const rfc5987Match = normalized.match(/filename\\*=UTF-8''([^;]+)/i);\n if (rfc5987Match) {\n return decodeURIComponent(rfc5987Match[1]);\n }\n\n // 标准: filename=\"filename\" 或 filename=filename\n const standardMatch = normalized.match(/filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/i);\n if (standardMatch) {\n return decodeURIComponent(standardMatch[1].replace(/['\"]/g, ''));\n }\n\n return 'file';\n } catch (error) {\n console.error(error);\n return 'filename-error';\n }\n};\n\n/**\n * 从 URL 中提取文件名\n * @param url 文件URL\n * @returns 文件名\n */\nexport const getUrlFilename = (url: string): string => {\n // 先去掉查询参数,再提取文件名(避免查询参数中的 / 干扰)\n const urlWithoutQuery = url.split('?')[0];\n const filename = urlWithoutQuery.split('/').pop() || 'file';\n return filename;\n};\n\n/**\n * 从文件名中提取扩展名\n * @param filename 文件名\n * @returns 扩展名(包含.)或空字符串\n */\nexport const getFileExtension = (filename: string): string => {\n const match = filename.match(/\\.[^./\\\\]+$/);\n return match ? match[0] : '';\n};\n\n/**\n * 确保文件名包含正确的扩展名\n * 如果传入的 filename 没有扩展名,则从 URL 中提取扩展名并追加\n * @param filename 传入的文件名\n * @param url 文件URL\n * @returns 带有扩展名的文件名\n */\nexport const ensureFilenameWithExtension = (filename: string | undefined, url: string): string => {\n // 如果没有传入 filename,直接从 URL 获取\n if (!filename) {\n return getUrlFilename(url);\n }\n\n // 检查 filename 是否已有扩展名\n if (getFileExtension(filename)) {\n return filename;\n }\n\n // 从 URL 中获取扩展名并追加\n const urlFilename = getUrlFilename(url);\n const extension = getFileExtension(urlFilename);\n\n return filename + extension;\n};\n/**\n * 从 URL 中提取文件扩展名\n * @param url 文件URL\n * @returns 文件扩展名\n * 例如:https://example.com/path/to/image.png?token=abc 返回 .png\n */\nexport const getUrlExtension = (url: string): string => {\n const urlFilename = getUrlFilename(url);\n return getFileExtension(urlFilename);\n};\n"],"names":["uuidv4","res"],"mappings":"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"}
|
package/es/hooks/index.mjs
CHANGED
|
@@ -2,7 +2,7 @@ import './base/index.mjs';
|
|
|
2
2
|
import './store/index.mjs';
|
|
3
3
|
export { useCheckAll } from './base/useCheckAll/index.mjs';
|
|
4
4
|
export { useIDBKeyval } from './base/useIDBKeyval/index.mjs';
|
|
5
|
-
export { ensureFilenameWithExtension, getFileExtension, getUrlFilename, useDownload } from './base/useDownload/index.mjs';
|
|
5
|
+
export { ensureFilenameWithExtension, getFileExtension, getUrlExtension, getUrlFilename, useDownload } from './base/useDownload/index.mjs';
|
|
6
6
|
export { useLoading } from './base/useLoading/index.mjs';
|
|
7
7
|
export { useTimeoutPromise } from './base/useTimeout/index.mjs';
|
|
8
8
|
export { useRectSelect } from './base/useRectSelect/index.mjs';
|