giime 0.0.29 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/README.md +1 -1
  2. package/dist/index.css +34 -34
  3. package/es/components/src/composite/searchForm/searchFormItems/cascader/SearchFormCascader.vue.d.ts +9 -0
  4. package/es/components/src/composite/searchForm/searchFormItems/cascader/SearchFormCascader.vue2.mjs +2 -1
  5. package/es/components/src/composite/searchForm/searchFormItems/cascader/SearchFormCascader.vue2.mjs.map +1 -1
  6. package/es/components/src/composite/searchForm/searchFormItems/cascader/index.d.ts +9 -0
  7. package/es/components/src/composite/searchForm/searchFormItems/cascader/searchFormCascader.d.ts +4 -0
  8. package/es/components/src/composite/searchForm/searchFormItems/common.d.ts +6 -1
  9. package/es/components/src/composite/searchForm/searchFormItems/common.mjs +7 -1
  10. package/es/components/src/composite/searchForm/searchFormItems/common.mjs.map +1 -1
  11. package/es/components/src/composite/searchForm/searchFormItems/datePicker/SearchFormDatePicker.vue.d.ts +9 -0
  12. package/es/components/src/composite/searchForm/searchFormItems/datePicker/SearchFormDatePicker.vue2.mjs +2 -1
  13. package/es/components/src/composite/searchForm/searchFormItems/datePicker/SearchFormDatePicker.vue2.mjs.map +1 -1
  14. package/es/components/src/composite/searchForm/searchFormItems/datePicker/index.d.ts +9 -0
  15. package/es/components/src/composite/searchForm/searchFormItems/datePicker/searchFormDatePicker.d.ts +4 -0
  16. package/es/components/src/composite/searchForm/searchFormItems/input/SearchFormInput.vue.d.ts +9 -0
  17. package/es/components/src/composite/searchForm/searchFormItems/input/SearchFormInput.vue2.mjs +2 -1
  18. package/es/components/src/composite/searchForm/searchFormItems/input/SearchFormInput.vue2.mjs.map +1 -1
  19. package/es/components/src/composite/searchForm/searchFormItems/input/index.d.ts +9 -0
  20. package/es/components/src/composite/searchForm/searchFormItems/input/searchFormInput.d.ts +4 -0
  21. package/es/components/src/composite/searchForm/searchFormItems/select/SearchFormSelect.vue.d.ts +9 -0
  22. package/es/components/src/composite/searchForm/searchFormItems/select/SearchFormSelect.vue2.mjs +2 -1
  23. package/es/components/src/composite/searchForm/searchFormItems/select/SearchFormSelect.vue2.mjs.map +1 -1
  24. package/es/components/src/composite/searchForm/searchFormItems/select/index.d.ts +9 -0
  25. package/es/components/src/composite/searchForm/searchFormItems/select/searchFormSelect.d.ts +4 -0
  26. package/es/components/src/composite/tablePro/TablePro.vue.d.ts +12 -12
  27. package/es/components/src/composite/tablePro/TablePro.vue.mjs +1 -1
  28. package/es/components/src/composite/tablePro/TablePro.vue2.mjs +4 -5
  29. package/es/components/src/composite/tablePro/TablePro.vue2.mjs.map +1 -1
  30. package/es/components/src/composite/tablePro/index.d.ts +30 -30
  31. package/es/giime/version.d.ts +1 -1
  32. package/es/giime/version.mjs +1 -1
  33. package/es/giime/version.mjs.map +1 -1
  34. package/es/hooks/base/useDownload/index.d.ts +9 -5
  35. package/es/hooks/base/useDownload/index.mjs +81 -107
  36. package/es/hooks/base/useDownload/index.mjs.map +1 -1
  37. package/es/index.css +34 -34
  38. package/lib/components/src/composite/searchForm/searchFormItems/cascader/SearchFormCascader.vue.d.ts +9 -0
  39. package/lib/components/src/composite/searchForm/searchFormItems/cascader/SearchFormCascader.vue2.js +2 -1
  40. package/lib/components/src/composite/searchForm/searchFormItems/cascader/SearchFormCascader.vue2.js.map +1 -1
  41. package/lib/components/src/composite/searchForm/searchFormItems/cascader/index.d.ts +9 -0
  42. package/lib/components/src/composite/searchForm/searchFormItems/cascader/searchFormCascader.d.ts +4 -0
  43. package/lib/components/src/composite/searchForm/searchFormItems/common.d.ts +6 -1
  44. package/lib/components/src/composite/searchForm/searchFormItems/common.js +7 -1
  45. package/lib/components/src/composite/searchForm/searchFormItems/common.js.map +1 -1
  46. package/lib/components/src/composite/searchForm/searchFormItems/datePicker/SearchFormDatePicker.vue.d.ts +9 -0
  47. package/lib/components/src/composite/searchForm/searchFormItems/datePicker/SearchFormDatePicker.vue2.js +2 -1
  48. package/lib/components/src/composite/searchForm/searchFormItems/datePicker/SearchFormDatePicker.vue2.js.map +1 -1
  49. package/lib/components/src/composite/searchForm/searchFormItems/datePicker/index.d.ts +9 -0
  50. package/lib/components/src/composite/searchForm/searchFormItems/datePicker/searchFormDatePicker.d.ts +4 -0
  51. package/lib/components/src/composite/searchForm/searchFormItems/input/SearchFormInput.vue.d.ts +9 -0
  52. package/lib/components/src/composite/searchForm/searchFormItems/input/SearchFormInput.vue2.js +2 -1
  53. package/lib/components/src/composite/searchForm/searchFormItems/input/SearchFormInput.vue2.js.map +1 -1
  54. package/lib/components/src/composite/searchForm/searchFormItems/input/index.d.ts +9 -0
  55. package/lib/components/src/composite/searchForm/searchFormItems/input/searchFormInput.d.ts +4 -0
  56. package/lib/components/src/composite/searchForm/searchFormItems/select/SearchFormSelect.vue.d.ts +9 -0
  57. package/lib/components/src/composite/searchForm/searchFormItems/select/SearchFormSelect.vue2.js +2 -1
  58. package/lib/components/src/composite/searchForm/searchFormItems/select/SearchFormSelect.vue2.js.map +1 -1
  59. package/lib/components/src/composite/searchForm/searchFormItems/select/index.d.ts +9 -0
  60. package/lib/components/src/composite/searchForm/searchFormItems/select/searchFormSelect.d.ts +4 -0
  61. package/lib/components/src/composite/tablePro/TablePro.vue.d.ts +12 -12
  62. package/lib/components/src/composite/tablePro/TablePro.vue.js +1 -1
  63. package/lib/components/src/composite/tablePro/TablePro.vue2.js +4 -5
  64. package/lib/components/src/composite/tablePro/TablePro.vue2.js.map +1 -1
  65. package/lib/components/src/composite/tablePro/index.d.ts +30 -30
  66. package/lib/giime/version.d.ts +1 -1
  67. package/lib/giime/version.js +1 -1
  68. package/lib/giime/version.js.map +1 -1
  69. package/lib/hooks/base/useDownload/index.d.ts +9 -5
  70. package/lib/hooks/base/useDownload/index.js +80 -106
  71. package/lib/hooks/base/useDownload/index.js.map +1 -1
  72. package/lib/index.css +34 -34
  73. package/package.json +3 -1
@@ -2,9 +2,9 @@ import TablePro from './TablePro.vue';
2
2
  export declare const GmTablePro: import("../../../../utils").SFCWithInstall<{
3
3
  new (...args: any[]): import("vue").CreateComponentPublicInstance<Readonly<import("vue").ExtractPropTypes<{
4
4
  sortValue: import("vue").PropType<{
5
- ascs: string;
6
- descs: string;
7
- }>;
5
+ field: string;
6
+ order: "asc" | "desc";
7
+ }[]>;
8
8
  headerCellStyle: {
9
9
  type: ObjectConstructor;
10
10
  default: () => {
@@ -124,9 +124,9 @@ export declare const GmTablePro: import("../../../../utils").SFCWithInstall<{
124
124
  showOverflowTooltip: import("vue").PropType<boolean | Partial<Pick<import("element-plus").ElTooltipProps, "offset" | "appendTo" | "effect" | "placement" | "popperClass" | "popperOptions" | "hideAfter" | "transition" | "enterable" | "showAfter" | "showArrow">> | undefined>;
125
125
  }>> & {
126
126
  "onUpdate:sortValue"?: ((sortValue: {
127
- ascs: string;
128
- descs: string;
129
- }) => any) | undefined;
127
+ field: string;
128
+ order: "asc" | "desc";
129
+ }[]) => any) | undefined;
130
130
  onTableOperate?: ((btn: Record<string, any>, row: Record<string, any>) => any) | undefined;
131
131
  onSelectionChange?: ((value: Record<string, any>[]) => any) | undefined;
132
132
  onSortChange?: ((value: import("element-plus/es/components/table/src/table/defaults.js").Sort) => any) | undefined;
@@ -292,17 +292,17 @@ export declare const GmTablePro: import("../../../../utils").SFCWithInstall<{
292
292
  clearSort: () => void | undefined;
293
293
  }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
294
294
  "update:sortValue": (sortValue: {
295
- ascs: string;
296
- descs: string;
297
- }) => void;
295
+ field: string;
296
+ order: "asc" | "desc";
297
+ }[]) => void;
298
298
  tableOperate: (btn: Record<string, any>, row: Record<string, any>) => void;
299
299
  selectionChange: (value: Record<string, any>[]) => void;
300
300
  sortChange: (value: import("element-plus/es/components/table/src/table/defaults.js").Sort) => void;
301
301
  }, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps & Readonly<import("vue").ExtractPropTypes<{
302
302
  sortValue: import("vue").PropType<{
303
- ascs: string;
304
- descs: string;
305
- }>;
303
+ field: string;
304
+ order: "asc" | "desc";
305
+ }[]>;
306
306
  headerCellStyle: {
307
307
  type: ObjectConstructor;
308
308
  default: () => {
@@ -422,9 +422,9 @@ export declare const GmTablePro: import("../../../../utils").SFCWithInstall<{
422
422
  showOverflowTooltip: import("vue").PropType<boolean | Partial<Pick<import("element-plus").ElTooltipProps, "offset" | "appendTo" | "effect" | "placement" | "popperClass" | "popperOptions" | "hideAfter" | "transition" | "enterable" | "showAfter" | "showArrow">> | undefined>;
423
423
  }>> & {
424
424
  "onUpdate:sortValue"?: ((sortValue: {
425
- ascs: string;
426
- descs: string;
427
- }) => any) | undefined;
425
+ field: string;
426
+ order: "asc" | "desc";
427
+ }[]) => any) | undefined;
428
428
  onTableOperate?: ((btn: Record<string, any>, row: Record<string, any>) => any) | undefined;
429
429
  onSelectionChange?: ((value: Record<string, any>[]) => any) | undefined;
430
430
  onSortChange?: ((value: import("element-plus/es/components/table/src/table/defaults.js").Sort) => any) | undefined;
@@ -464,9 +464,9 @@ export declare const GmTablePro: import("../../../../utils").SFCWithInstall<{
464
464
  Defaults: {};
465
465
  }, Readonly<import("vue").ExtractPropTypes<{
466
466
  sortValue: import("vue").PropType<{
467
- ascs: string;
468
- descs: string;
469
- }>;
467
+ field: string;
468
+ order: "asc" | "desc";
469
+ }[]>;
470
470
  headerCellStyle: {
471
471
  type: ObjectConstructor;
472
472
  default: () => {
@@ -586,9 +586,9 @@ export declare const GmTablePro: import("../../../../utils").SFCWithInstall<{
586
586
  showOverflowTooltip: import("vue").PropType<boolean | Partial<Pick<import("element-plus").ElTooltipProps, "offset" | "appendTo" | "effect" | "placement" | "popperClass" | "popperOptions" | "hideAfter" | "transition" | "enterable" | "showAfter" | "showArrow">> | undefined>;
587
587
  }>> & {
588
588
  "onUpdate:sortValue"?: ((sortValue: {
589
- ascs: string;
590
- descs: string;
591
- }) => any) | undefined;
589
+ field: string;
590
+ order: "asc" | "desc";
591
+ }[]) => any) | undefined;
592
592
  onTableOperate?: ((btn: Record<string, any>, row: Record<string, any>) => any) | undefined;
593
593
  onSelectionChange?: ((value: Record<string, any>[]) => any) | undefined;
594
594
  onSortChange?: ((value: import("element-plus/es/components/table/src/table/defaults.js").Sort) => any) | undefined;
@@ -785,9 +785,9 @@ export declare const GmTablePro: import("../../../../utils").SFCWithInstall<{
785
785
  __isSuspense?: undefined;
786
786
  } & import("vue").ComponentOptionsBase<Readonly<import("vue").ExtractPropTypes<{
787
787
  sortValue: import("vue").PropType<{
788
- ascs: string;
789
- descs: string;
790
- }>;
788
+ field: string;
789
+ order: "asc" | "desc";
790
+ }[]>;
791
791
  headerCellStyle: {
792
792
  type: ObjectConstructor;
793
793
  default: () => {
@@ -907,9 +907,9 @@ export declare const GmTablePro: import("../../../../utils").SFCWithInstall<{
907
907
  showOverflowTooltip: import("vue").PropType<boolean | Partial<Pick<import("element-plus").ElTooltipProps, "offset" | "appendTo" | "effect" | "placement" | "popperClass" | "popperOptions" | "hideAfter" | "transition" | "enterable" | "showAfter" | "showArrow">> | undefined>;
908
908
  }>> & {
909
909
  "onUpdate:sortValue"?: ((sortValue: {
910
- ascs: string;
911
- descs: string;
912
- }) => any) | undefined;
910
+ field: string;
911
+ order: "asc" | "desc";
912
+ }[]) => any) | undefined;
913
913
  onTableOperate?: ((btn: Record<string, any>, row: Record<string, any>) => any) | undefined;
914
914
  onSelectionChange?: ((value: Record<string, any>[]) => any) | undefined;
915
915
  onSortChange?: ((value: import("element-plus/es/components/table/src/table/defaults.js").Sort) => any) | undefined;
@@ -1075,9 +1075,9 @@ export declare const GmTablePro: import("../../../../utils").SFCWithInstall<{
1075
1075
  clearSort: () => void | undefined;
1076
1076
  }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
1077
1077
  "update:sortValue": (sortValue: {
1078
- ascs: string;
1079
- descs: string;
1080
- }) => void;
1078
+ field: string;
1079
+ order: "asc" | "desc";
1080
+ }[]) => void;
1081
1081
  tableOperate: (btn: Record<string, any>, row: Record<string, any>) => void;
1082
1082
  selectionChange: (value: Record<string, any>[]) => void;
1083
1083
  sortChange: (value: import("element-plus/es/components/table/src/table/defaults.js").Sort) => void;
@@ -1 +1 @@
1
- export declare const version = "0.0.29";
1
+ export declare const version = "0.1.0";
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- const version = "0.0.28";
3
+ const version = "0.0.30";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sources":["../../../../packages/giime/version.ts"],"sourcesContent":["export const version = '0.0.28';\n"],"names":[],"mappings":";;AAAO,MAAM,OAAU,GAAA;;;;"}
1
+ {"version":3,"file":"version.js","sources":["../../../../packages/giime/version.ts"],"sourcesContent":["export const version = '0.0.30';\n"],"names":[],"mappings":";;AAAO,MAAM,OAAU,GAAA;;;;"}
@@ -1,9 +1,13 @@
1
- export interface OptionsType {
1
+ import type { AxiosResponse } from 'axios';
2
+ export interface DownloadOptions {
3
+ filename?: string;
4
+ }
5
+ export interface DateownloadZipItem {
2
6
  url: string;
3
- fileName: string;
4
- fileType?: string;
7
+ filename?: string;
5
8
  }
6
9
  export declare const useDownload: () => {
7
- downloadFile: (options: OptionsType) => Promise<void>;
8
- downloadZip: (fileList: OptionsType[], fileName: string) => Promise<void>;
10
+ downloadByUrl: (url: string, options?: DownloadOptions) => Promise<void>;
11
+ downloadByRes: (res: AxiosResponse<any, any>, options?: DownloadOptions) => Promise<void>;
12
+ downloadToZip: (fileList: DateownloadZipItem[], filename: string) => Promise<void>;
9
13
  };
@@ -1,89 +1,50 @@
1
1
  'use strict';
2
2
 
3
3
  var vue = require('vue');
4
+ var FileSaver = require('file-saver');
4
5
  var index = require('../../../components/src/plugins/notification/index.js');
6
+ var uuid = require('uuid');
5
7
  var JSZip = require('jszip');
6
8
 
7
9
  const useDownload = () => {
8
- let xhrInstance;
9
- let downloading = false;
10
- const progress = vue.ref(0);
11
- const currentClass = `class${Date.now()}`;
12
- vue.onBeforeUnmount(() => {
13
- if (xhrInstance) {
14
- xhrInstance.abort();
15
- xhrInstance = null;
16
- }
17
- });
18
- const downloadBlob = (options) => {
19
- return new Promise((resolve, reject) => {
20
- xhrInstance = new XMLHttpRequest();
21
- xhrInstance.responseType = "blob";
22
- xhrInstance.open("get", options.url, true);
23
- xhrInstance.onprogress = (e) => {
24
- progress.value = Math.floor(e.loaded / e.total * 100);
25
- if (!options.isZip) {
26
- editElementContent(currentClass, `\u5F53\u524D\u4E0B\u8F7D\u8FDB\u5EA6 ${progress.value}%`);
27
- }
28
- if (progress.value == 100) {
29
- progress.value = 0;
30
- downloading = false;
31
- }
32
- };
33
- xhrInstance.onloadend = (e) => {
34
- const eventTarget = e.target;
35
- if ([200, 304].includes(eventTarget.status)) {
36
- const blob = eventTarget.response;
37
- if (!options.isZip) {
38
- createDownload(blob, options.fileName, options.fileType);
39
- index.GmNotification({
40
- type: "success",
41
- title: "\u6E29\u99A8\u63D0\u793A",
42
- message: "\u4E0B\u8F7D\u5B8C\u6210",
43
- duration: 3e3
44
- });
45
- }
46
- xhrInstance = null;
47
- resolve(blob);
48
- }
49
- };
50
- xhrInstance.onerror = function(e) {
51
- downloading = false;
52
- index.GmNotification({
53
- type: "error",
54
- title: "\u6E29\u99A8\u63D0\u793A",
55
- message: "\u4E0B\u8F7D\u5F02\u5E38\uFF0C\u8BF7\u91CD\u8BD5",
56
- duration: 1500
57
- });
58
- reject(e);
59
- };
60
- xhrInstance.send();
10
+ const getUrlFilename = (url) => {
11
+ const filename = url.split("/").pop()?.split("?")[0] || "file";
12
+ return filename;
13
+ };
14
+ const downloadByUrl = async (url, options) => {
15
+ const filename = options?.filename || getUrlFilename(url);
16
+ const curId = uuid.v4();
17
+ const modalInfo = index.GmNotification({
18
+ title: "\u4E0B\u8F7D\u4E2D",
19
+ message: vue.h("div", { className: curId }, [`\u5F53\u524D\u4E0B\u8F7D\u8FDB\u5EA6 0%`]),
20
+ duration: 0
21
+ });
22
+ await createDownload({
23
+ url,
24
+ filename,
25
+ uuid: curId
61
26
  });
27
+ modalInfo.close();
62
28
  };
63
- const downloadFile = async (options) => {
64
- try {
65
- if (downloading || !options.url || !options.fileName)
66
- return;
67
- downloading = true;
68
- const fileType = options.fileType || options.url.split(".").pop();
69
- const modalInfo = index.GmNotification({
70
- title: "\u4E0B\u8F7D\u4E2D",
71
- message: vue.h("div", { className: currentClass }, [`\u5F53\u524D\u4E0B\u8F7D\u8FDB\u5EA6 ${progress.value}%`]),
72
- duration: 0
73
- });
74
- const downblobOptions = {
75
- url: options.url,
76
- fileName: options.fileName,
77
- fileType,
78
- isZip: false
79
- };
80
- await downloadBlob(downblobOptions);
81
- modalInfo.close();
82
- } catch (error) {
83
- console.error(error);
84
- }
29
+ const downloadByRes = async (res, options) => {
30
+ const filename = options?.filename || res.headers["Content-Disposition"]?.split("filename=")[1] || "file";
31
+ const resBlob = await res.data;
32
+ const curId = uuid.v4();
33
+ const modalInfo = index.GmNotification({
34
+ title: "\u4E0B\u8F7D\u4E2D",
35
+ message: vue.h("div", { className: curId }, [`\u5F53\u524D\u4E0B\u8F7D\u8FDB\u5EA6 0%`]),
36
+ duration: 0
37
+ });
38
+ const blob = new Blob([resBlob]);
39
+ const fileUrl = window.URL.createObjectURL(blob);
40
+ await createDownload({
41
+ url: fileUrl,
42
+ filename,
43
+ uuid: curId
44
+ });
45
+ modalInfo.close();
85
46
  };
86
- const downloadZip = async (fileList, fileName) => {
47
+ const downloadToZip = async (fileList, filename) => {
87
48
  try {
88
49
  const currentContentClass = `message${Date.now()}`;
89
50
  const downloadCount = vue.ref(0);
@@ -96,28 +57,21 @@ const useDownload = () => {
96
57
  const zipInstance = new JSZip();
97
58
  for (let i = 0; i < len; i++) {
98
59
  const currentItem = fileList[i];
99
- const currentFileType = currentItem.fileType || currentItem.url.split(".").pop();
100
60
  const downblobOptions = {
101
61
  url: currentItem.url,
102
- fileName: currentItem.fileName,
103
- fileType: currentFileType,
62
+ filename: currentItem.filename ?? getUrlFilename(currentItem.url),
104
63
  isZip: true
105
64
  };
106
- downloadBlob(downblobOptions).then((res) => {
107
- zipInstance.file(`${currentItem.fileName}.${currentFileType}`, res);
65
+ createDownload(downblobOptions).then((res) => {
66
+ zipInstance.file(downblobOptions.filename, res);
108
67
  downloadCount.value++;
109
68
  editElementContent(currentContentClass, `\u603B\u4E0B\u8F7D\u6587\u4EF6\u6570\uFF1A${len}\uFF0C\u5DF2\u4E0B\u8F7D\u6587\u4EF6\u6570\uFF1A${downloadCount.value}`);
110
69
  if (downloadCount.value == len) {
111
- downloading = false;
112
- modalInfo.close();
113
- index.GmNotification({
114
- type: "success",
115
- title: "\u6E29\u99A8\u63D0\u793A",
116
- message: "\u4E0B\u8F7D\u5B8C\u6210",
117
- duration: 3e3
118
- });
70
+ editElementContent(currentContentClass, `\u6B63\u5728\u5408\u5E76...`);
119
71
  zipInstance.generateAsync({ type: "blob" }).then((res2) => {
120
- createDownload(res2, fileName, "zip");
72
+ modalInfo.close();
73
+ const fileUrl = window.URL.createObjectURL(res2);
74
+ downloadByUrl(fileUrl, { filename });
121
75
  }).catch((error) => {
122
76
  console.error(error);
123
77
  });
@@ -128,23 +82,43 @@ const useDownload = () => {
128
82
  console.error(error);
129
83
  }
130
84
  };
131
- return {
132
- downloadFile,
133
- downloadZip
85
+ const createDownload = (options) => {
86
+ return new Promise((resolve, reject) => {
87
+ const xhr = new XMLHttpRequest();
88
+ xhr.open("GET", options.url, true);
89
+ xhr.responseType = "blob";
90
+ xhr.onprogress = function(event) {
91
+ if (event.lengthComputable) {
92
+ const percentComplete = Math.floor(event.loaded / event.total * 100);
93
+ if (options.uuid) {
94
+ editElementContent(options.uuid, `\u5F53\u524D\u4E0B\u8F7D\u8FDB\u5EA6 ${percentComplete}%`);
95
+ }
96
+ }
97
+ };
98
+ xhr.onload = function(e) {
99
+ const eventTarget = e.target;
100
+ if ([200, 304].includes(eventTarget.status)) {
101
+ const blob = eventTarget.response;
102
+ if (!options.isZip) {
103
+ FileSaver.saveAs(blob, options.filename);
104
+ index.GmNotification({
105
+ type: "success",
106
+ title: "\u6E29\u99A8\u63D0\u793A",
107
+ message: "\u4E0B\u8F7D\u5B8C\u6210",
108
+ duration: 3e3
109
+ });
110
+ }
111
+ resolve(blob);
112
+ }
113
+ };
114
+ xhr.onerror = function(e) {
115
+ GmMessage.error("\u4E0B\u8F7D\u5F02\u5E38\uFF0C\u8BF7\u91CD\u8BD5");
116
+ reject(e);
117
+ };
118
+ xhr.send();
119
+ });
134
120
  };
135
- };
136
- const createDownload = (blob, fileName, fileType) => {
137
- if (!blob || !fileName || !fileType)
138
- return;
139
- const ele = document.createElement("a");
140
- const url = window.URL.createObjectURL(blob);
141
- ele.style.display = "none";
142
- ele.href = url;
143
- ele.download = `${fileName}.${fileType}`;
144
- document.body.appendChild(ele);
145
- ele.click();
146
- window.URL.revokeObjectURL(url);
147
- document.body.removeChild(ele);
121
+ return { downloadByUrl, downloadByRes, downloadToZip };
148
122
  };
149
123
  const editElementContent = (className, content) => {
150
124
  const currentEle = document.getElementsByClassName(className)[0];
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../../packages/hooks/base/useDownload/index.ts"],"sourcesContent":["import { h, onBeforeUnmount, ref } from 'vue';\r\nimport GmNotification from '@giime/components/src/plugins/notification';\r\nimport JSZip from 'jszip';\r\n\r\n// 参数类型\r\nexport interface OptionsType {\r\n url: string;\r\n fileName: string;\r\n fileType?: string;\r\n}\r\n\r\ninterface DownloadOptionsType extends OptionsType {\r\n isZip: boolean;\r\n fileType: string;\r\n}\r\n\r\nexport const useDownload = () => {\r\n let xhrInstance: XMLHttpRequest | null;\r\n // 是否正在下载\r\n let downloading = false;\r\n // 单文件下载进度\r\n const progress = ref(0);\r\n // 动态生成唯一的 class\r\n const currentClass = `class${Date.now()}`;\r\n onBeforeUnmount(() => {\r\n if (xhrInstance) {\r\n xhrInstance.abort();\r\n xhrInstance = null;\r\n }\r\n });\r\n // 将 url 下载为 blob 文件\r\n const downloadBlob = (options: DownloadOptionsType) => {\r\n return new Promise<Blob>((resolve, reject) => {\r\n xhrInstance = new XMLHttpRequest();\r\n xhrInstance.responseType = 'blob';\r\n xhrInstance.open('get', options.url, true);\r\n xhrInstance.onprogress = e => {\r\n progress.value = Math.floor((e.loaded / e.total) * 100);\r\n if (!options.isZip) {\r\n editElementContent(currentClass, `当前下载进度 ${progress.value}%`);\r\n }\r\n if (progress.value == 100) {\r\n progress.value = 0;\r\n downloading = false;\r\n }\r\n };\r\n xhrInstance.onloadend = e => {\r\n const eventTarget = e.target as XMLHttpRequest;\r\n if ([200, 304].includes(eventTarget.status)) {\r\n const blob = eventTarget.response;\r\n if (!options.isZip) {\r\n createDownload(blob, options.fileName, options.fileType);\r\n GmNotification({\r\n type: 'success',\r\n title: '温馨提示',\r\n message: '下载完成',\r\n duration: 3000,\r\n });\r\n }\r\n xhrInstance = null;\r\n resolve(blob);\r\n }\r\n };\r\n xhrInstance.onerror = function (e) {\r\n downloading = false;\r\n GmNotification({\r\n type: 'error',\r\n title: '温馨提示',\r\n message: '下载异常,请重试',\r\n duration: 1500,\r\n });\r\n reject(e);\r\n };\r\n xhrInstance.send();\r\n });\r\n };\r\n // 下载单文件\r\n const downloadFile = async (options: OptionsType) => {\r\n try {\r\n if (downloading || !options.url || !options.fileName) return;\r\n downloading = true;\r\n const fileType = options.fileType || options.url.split('.').pop()!;\r\n const modalInfo = GmNotification({\r\n title: '下载中',\r\n message: h('div', { className: currentClass }, [`当前下载进度 ${progress.value}%`]),\r\n duration: 0,\r\n });\r\n const downblobOptions = {\r\n url: options.url,\r\n fileName: options.fileName,\r\n fileType,\r\n isZip: false,\r\n };\r\n await downloadBlob(downblobOptions);\r\n modalInfo.close();\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n };\r\n // 下载多文件 转为zip\r\n const downloadZip = async (fileList: OptionsType[], fileName: string) => {\r\n try {\r\n const currentContentClass = `message${Date.now()}`;\r\n const downloadCount = ref(0);\r\n const len = fileList.length;\r\n const modalInfo = GmNotification({\r\n title: '下载中',\r\n message: h('div', [h('div', { className: currentContentClass }, [`总下载文件数:${len},已下载文件数:${downloadCount.value}`])]),\r\n duration: 0,\r\n });\r\n // h('div', { className: currentClass }, [`当前下载进度 ${progress.value}%`]),\r\n const zipInstance = new JSZip();\r\n for (let i = 0; i < len; i++) {\r\n const currentItem = fileList[i];\r\n const currentFileType = currentItem.fileType || currentItem.url.split('.').pop()!;\r\n // const fileBlob = await\r\n const downblobOptions = {\r\n url: currentItem.url,\r\n fileName: currentItem.fileName,\r\n fileType: currentFileType,\r\n isZip: true,\r\n };\r\n downloadBlob(downblobOptions).then(res => {\r\n zipInstance.file(`${currentItem.fileName}.${currentFileType}`, res);\r\n downloadCount.value++;\r\n editElementContent(currentContentClass, `总下载文件数:${len},已下载文件数:${downloadCount.value}`);\r\n if (downloadCount.value == len) {\r\n downloading = false;\r\n modalInfo.close();\r\n GmNotification({\r\n type: 'success',\r\n title: '温馨提示',\r\n message: '下载完成',\r\n duration: 3000,\r\n });\r\n zipInstance\r\n .generateAsync({ type: 'blob' })\r\n .then(res => {\r\n createDownload(res, fileName, 'zip');\r\n })\r\n .catch(error => {\r\n console.error(error);\r\n });\r\n }\r\n });\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n };\r\n\r\n return {\r\n downloadFile,\r\n downloadZip,\r\n };\r\n};\r\n// 创建下载链接 并下载\r\nconst createDownload = (blob: Blob, fileName: string, fileType: string) => {\r\n if (!blob || !fileName || !fileType) return;\r\n const ele = document.createElement('a');\r\n const url = window.URL.createObjectURL(blob);\r\n ele.style.display = 'none';\r\n ele.href = url;\r\n ele.download = `${fileName}.${fileType}`;\r\n document.body.appendChild(ele);\r\n ele.click();\r\n window.URL.revokeObjectURL(url);\r\n document.body.removeChild(ele);\r\n};\r\n\r\n// 动态更新 notify 中的message 信息\r\nconst editElementContent = (className: string, content: string) => {\r\n // eslint-disable-next-line unicorn/prefer-query-selector\r\n const currentEle = document.getElementsByClassName(className)[0];\r\n if (currentEle) {\r\n currentEle.innerHTML = content;\r\n }\r\n};\r\n"],"names":["ref","onBeforeUnmount","GmNotification","h","res"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../../packages/hooks/base/useDownload/index.ts"],"sourcesContent":["import { h, ref } from 'vue';\r\nimport FileSaver from 'file-saver';\r\n\r\nimport GmNotification from '@giime/components/src/plugins/notification';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport JSZip from 'jszip';\r\nimport type { AxiosResponse } from 'axios';\r\n\r\nexport interface DownloadOptions {\r\n filename?: string;\r\n}\r\nexport interface DateownloadZipItem {\r\n url: string;\r\n filename?: string;\r\n}\r\n\r\nexport const useDownload = () => {\r\n const getUrlFilename = (url: string) => {\r\n const filename = url.split('/').pop()?.split('?')[0] || 'file';\r\n return filename;\r\n };\r\n /**\r\n * 通过url下载\r\n * @param url\r\n * @param options\r\n */\r\n const downloadByUrl = async (url: string, options?: DownloadOptions) => {\r\n const filename = options?.filename || getUrlFilename(url);\r\n const curId = uuidv4();\r\n const modalInfo = GmNotification({\r\n title: '下载中',\r\n message: h('div', { className: curId }, [`当前下载进度 0%`]),\r\n duration: 0,\r\n });\r\n await createDownload({\r\n url,\r\n filename,\r\n uuid: curId,\r\n });\r\n modalInfo.close();\r\n };\r\n /**\r\n * 通过接口响应结果下载\r\n * @param res\r\n * @param options\r\n */\r\n const downloadByRes = async (res: AxiosResponse<any, any>, options?: DownloadOptions) => {\r\n const filename = options?.filename || res.headers['Content-Disposition']?.split('filename=')[1] || 'file';\r\n const resBlob = await res.data;\r\n const curId = uuidv4();\r\n const modalInfo = GmNotification({\r\n title: '下载中',\r\n message: h('div', { className: curId }, [`当前下载进度 0%`]),\r\n duration: 0,\r\n });\r\n // 设置type类型\r\n const blob = new Blob([resBlob]);\r\n const fileUrl = window.URL.createObjectURL(blob);\r\n await createDownload({\r\n url: fileUrl,\r\n filename,\r\n uuid: curId,\r\n });\r\n modalInfo.close();\r\n };\r\n /**\r\n * 下载多文件 转为zip\r\n * @param fileList\r\n * @param filename\r\n */\r\n const downloadToZip = async (fileList: DateownloadZipItem[], filename: string) => {\r\n try {\r\n const currentContentClass = `message${Date.now()}`;\r\n const downloadCount = ref(0);\r\n const len = fileList.length;\r\n const modalInfo = GmNotification({\r\n title: '下载中',\r\n message: h('div', [h('div', { className: currentContentClass }, [`总下载文件数:${len},已下载文件数:${downloadCount.value}`])]),\r\n duration: 0,\r\n });\r\n // h('div', { className: currentClass }, [`当前下载进度 ${progress.value}%`]),\r\n const zipInstance = new JSZip();\r\n for (let i = 0; i < len; i++) {\r\n const currentItem = fileList[i];\r\n // const fileBlob = await\r\n const downblobOptions = {\r\n url: currentItem.url,\r\n filename: currentItem.filename ?? getUrlFilename(currentItem.url),\r\n isZip: true,\r\n };\r\n createDownload(downblobOptions).then(res => {\r\n zipInstance.file(downblobOptions.filename, res);\r\n downloadCount.value++;\r\n editElementContent(currentContentClass, `总下载文件数:${len},已下载文件数:${downloadCount.value}`);\r\n if (downloadCount.value == len) {\r\n editElementContent(currentContentClass, `正在合并...`);\r\n\r\n zipInstance\r\n .generateAsync({ type: 'blob' })\r\n .then(res => {\r\n modalInfo.close();\r\n\r\n const fileUrl = window.URL.createObjectURL(res);\r\n // FileSaver.saveAs(res, filename);\r\n downloadByUrl(fileUrl, { filename });\r\n })\r\n .catch(error => {\r\n console.error(error);\r\n });\r\n }\r\n });\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n };\r\n const createDownload = (options: { url: string; filename: string; uuid?: string; isZip?: boolean }) => {\r\n return new Promise<Blob>((resolve, reject) => {\r\n // 创建一个新的 XMLHttpRequest 对象\r\n const xhr = new XMLHttpRequest();\r\n // 初始化一个GET请求\r\n xhr.open('GET', options.url, true);\r\n xhr.responseType = 'blob'; // 设置响应类型为blob,以便处理二进制文件\r\n\r\n // 监听 progress 事件\r\n xhr.onprogress = function (event) {\r\n if (event.lengthComputable) {\r\n const percentComplete = Math.floor((event.loaded / event.total) * 100);\r\n if (options.uuid) {\r\n editElementContent(options.uuid, `当前下载进度 ${percentComplete}%`);\r\n }\r\n }\r\n };\r\n\r\n // 监听 load 事件,表示下载完成\r\n xhr.onload = function (e) {\r\n const eventTarget = e.target as XMLHttpRequest;\r\n if ([200, 304].includes(eventTarget.status)) {\r\n const blob = eventTarget.response;\r\n // const url = window.URL.createObjectURL(blob);\r\n if (!options.isZip) {\r\n FileSaver.saveAs(blob, options.filename);\r\n GmNotification({\r\n type: 'success',\r\n title: '温馨提示',\r\n message: '下载完成',\r\n duration: 3000,\r\n });\r\n }\r\n\r\n resolve(blob);\r\n }\r\n };\r\n\r\n // 监听 error 事件\r\n xhr.onerror = function (e) {\r\n GmMessage.error('下载异常,请重试');\r\n reject(e);\r\n };\r\n\r\n // 发送请求\r\n xhr.send();\r\n });\r\n };\r\n return { downloadByUrl, downloadByRes, downloadToZip };\r\n};\r\n\r\n// 动态更新 notify 中的message 信息\r\nconst editElementContent = (className: string, content: string) => {\r\n // eslint-disable-next-line unicorn/prefer-query-selector\r\n const currentEle = document.getElementsByClassName(className)[0];\r\n if (currentEle) {\r\n currentEle.innerHTML = content;\r\n }\r\n};\r\n"],"names":["uuidv4","GmNotification","h","ref","res"],"mappings":"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"}
package/lib/index.css CHANGED
@@ -1,3 +1,37 @@
1
+ .gm-flex-center[data-v-d1c6dac0] {
2
+ align-items: center;
3
+ }
4
+
5
+ .gm-flex-justify-between[data-v-d1c6dac0] {
6
+ justify-content: space-between;
7
+ }
8
+ [data-v-512cf874] .gmSearchForm .el-form-item {
9
+ margin-right: 8px;
10
+ margin-bottom: 8px;
11
+ }
12
+ [data-v-e38c9d81] .gmTableNoBorder .el-table__body .el-table__cell {
13
+ border-right: none;
14
+ }
15
+
16
+ [data-v-e38c9d81] .gmTableNoBorder .el-table__inner-wrapper:before {
17
+ height: 0;
18
+ }
19
+
20
+ [data-v-e38c9d81] .gmTableNoBorder.el-table--border .el-table__inner-wrapper:after {
21
+ height: 0;
22
+ }
23
+
24
+ [data-v-e38c9d81] .gmTableNoBorder.el-table--border:after {
25
+ height: 0;
26
+ }
27
+
28
+ [data-v-e38c9d81] .gmTableNoBorder.el-table--border:before {
29
+ height: 0;
30
+ }
31
+
32
+ [data-v-e38c9d81] .gmTableNoBorder .el-table__border-left-patch {
33
+ height: 0;
34
+ }
1
35
  /*
2
36
  ! tailwindcss v3.4.1 | MIT License | https://tailwindcss.com
3
37
  *//*
@@ -679,40 +713,6 @@ video {
679
713
  .gm-group:hover .group-hover\:gm-block {
680
714
  display: block;
681
715
  }
682
- .gm-flex-center[data-v-d1c6dac0] {
683
- align-items: center;
684
- }
685
-
686
- .gm-flex-justify-between[data-v-d1c6dac0] {
687
- justify-content: space-between;
688
- }
689
- [data-v-512cf874] .gmSearchForm .el-form-item {
690
- margin-right: 8px;
691
- margin-bottom: 8px;
692
- }
693
- [data-v-9f72778f] .gmTableNoBorder .el-table__body .el-table__cell {
694
- border-right: none;
695
- }
696
-
697
- [data-v-9f72778f] .gmTableNoBorder .el-table__inner-wrapper:before {
698
- height: 0;
699
- }
700
-
701
- [data-v-9f72778f] .gmTableNoBorder.el-table--border .el-table__inner-wrapper:after {
702
- height: 0;
703
- }
704
-
705
- [data-v-9f72778f] .gmTableNoBorder.el-table--border:after {
706
- height: 0;
707
- }
708
-
709
- [data-v-9f72778f] .gmTableNoBorder.el-table--border:before {
710
- height: 0;
711
- }
712
-
713
- [data-v-9f72778f] .gmTableNoBorder .el-table__border-left-patch {
714
- height: 0;
715
- }
716
716
 
717
717
  .pagination-container[data-v-8a95ba6d] {
718
718
  background: #fff;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "giime",
3
- "version": "0.0.29",
3
+ "version": "0.1.0",
4
4
  "description": "A Component Library for Vue 3",
5
5
  "keywords": [
6
6
  "giime",
@@ -63,6 +63,8 @@
63
63
  "clipboard": "^2.0.11",
64
64
  "uuid": "^9.0.1",
65
65
  "jszip": "^3.10.1",
66
+ "file-saver": "^2.0.5",
67
+ "@types/file-saver": "^2.0.7",
66
68
  "@types/lodash": "^4.17.0",
67
69
  "@types/lodash-es": "^4.17.12"
68
70
  },