giime 0.8.11 → 0.8.13
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 +66 -65
- package/es/components/src/base/tableColumn/TableColumn.vue2.mjs +5 -5
- package/es/components/src/base/tableColumn/TableColumn.vue2.mjs.map +1 -1
- package/es/components/src/composite/tablePro/TableColumnVNodeRenderer.d.ts +4 -2
- package/es/components/src/composite/tablePro/TableColumnVNodeRenderer.mjs +44 -16
- package/es/components/src/composite/tablePro/TableColumnVNodeRenderer.mjs.map +1 -1
- package/es/components/src/composite/tablePro/TablePro.vue.mjs +1 -1
- package/es/components/src/composite/tablePro/TablePro.vue2.mjs +2 -2
- package/es/components/src/composite/tablePro/TablePro.vue2.mjs.map +1 -1
- package/es/components/src/composite/tablePro/tableColumnPro/TableColumnPro.vue2.mjs +5 -5
- package/es/components/src/composite/tablePro/tableColumnPro/TableColumnPro.vue2.mjs.map +1 -1
- package/es/components/src/composite/tablePro/tableHelper.d.ts +8 -1
- package/es/components/src/composite/tablePro/tableHelper.mjs +10 -1
- package/es/components/src/composite/tablePro/tableHelper.mjs.map +1 -1
- package/es/components/src/composite/uploadFile/UploadFile.vue.d.ts +4 -90
- package/es/components/src/composite/uploadFile/UploadFile.vue.mjs +1 -1
- package/es/components/src/composite/uploadFile/UploadFile.vue2.mjs +47 -41
- package/es/components/src/composite/uploadFile/UploadFile.vue2.mjs.map +1 -1
- package/es/components/src/composite/uploadFile/index.d.ts +4 -190
- package/es/components/src/composite/uploadFile/uploadFile.d.ts +1 -51
- package/es/components/src/composite/uploadFile/uploadFile.mjs +0 -50
- package/es/components/src/composite/uploadFile/uploadFile.mjs.map +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/useDownload/index.mjs +30 -6
- package/es/hooks/base/useDownload/index.mjs.map +1 -1
- package/es/index.css +66 -65
- package/lib/components/src/base/tableColumn/TableColumn.vue2.js +4 -4
- package/lib/components/src/base/tableColumn/TableColumn.vue2.js.map +1 -1
- package/lib/components/src/composite/tablePro/TableColumnVNodeRenderer.d.ts +4 -2
- package/lib/components/src/composite/tablePro/TableColumnVNodeRenderer.js +43 -15
- package/lib/components/src/composite/tablePro/TableColumnVNodeRenderer.js.map +1 -1
- package/lib/components/src/composite/tablePro/TablePro.vue.js +1 -1
- package/lib/components/src/composite/tablePro/TablePro.vue2.js +2 -2
- package/lib/components/src/composite/tablePro/TablePro.vue2.js.map +1 -1
- package/lib/components/src/composite/tablePro/tableColumnPro/TableColumnPro.vue2.js +4 -4
- package/lib/components/src/composite/tablePro/tableColumnPro/TableColumnPro.vue2.js.map +1 -1
- package/lib/components/src/composite/tablePro/tableHelper.d.ts +8 -1
- package/lib/components/src/composite/tablePro/tableHelper.js +10 -1
- package/lib/components/src/composite/tablePro/tableHelper.js.map +1 -1
- package/lib/components/src/composite/uploadFile/UploadFile.vue.d.ts +4 -90
- package/lib/components/src/composite/uploadFile/UploadFile.vue.js +1 -1
- package/lib/components/src/composite/uploadFile/UploadFile.vue2.js +47 -41
- package/lib/components/src/composite/uploadFile/UploadFile.vue2.js.map +1 -1
- package/lib/components/src/composite/uploadFile/index.d.ts +4 -190
- package/lib/components/src/composite/uploadFile/uploadFile.d.ts +1 -51
- package/lib/components/src/composite/uploadFile/uploadFile.js +0 -50
- package/lib/components/src/composite/uploadFile/uploadFile.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/useDownload/index.js +30 -6
- package/lib/hooks/base/useDownload/index.js.map +1 -1
- package/lib/index.css +66 -65
- package/package.json +1 -1
|
@@ -23,41 +23,6 @@ export declare const uploadFileProps: {
|
|
|
23
23
|
type: BooleanConstructor;
|
|
24
24
|
default: boolean;
|
|
25
25
|
};
|
|
26
|
-
/** 文件存储位置 */
|
|
27
|
-
folder: {
|
|
28
|
-
type: StringConstructor;
|
|
29
|
-
default: string;
|
|
30
|
-
};
|
|
31
|
-
/** 文件存储文件夹 */
|
|
32
|
-
seat: {
|
|
33
|
-
type: StringConstructor;
|
|
34
|
-
default: string;
|
|
35
|
-
};
|
|
36
|
-
/** 并行上传数量 */
|
|
37
|
-
parallel: {
|
|
38
|
-
type: NumberConstructor;
|
|
39
|
-
default: null;
|
|
40
|
-
};
|
|
41
|
-
/** 并行分片大小 */
|
|
42
|
-
partSize: {
|
|
43
|
-
type: NumberConstructor;
|
|
44
|
-
default: null;
|
|
45
|
-
};
|
|
46
|
-
/** 阿里oss上传配置 */
|
|
47
|
-
options: {
|
|
48
|
-
type: ObjectConstructor;
|
|
49
|
-
default: () => {};
|
|
50
|
-
};
|
|
51
|
-
/** 阿里oss上传bucket */
|
|
52
|
-
bucket: {
|
|
53
|
-
type: StringConstructor;
|
|
54
|
-
default: string;
|
|
55
|
-
};
|
|
56
|
-
/** 文件存储名称 */
|
|
57
|
-
fileName: {
|
|
58
|
-
type: StringConstructor;
|
|
59
|
-
default: string;
|
|
60
|
-
};
|
|
61
26
|
/** 是否展示删除按钮 */
|
|
62
27
|
showDelete: {
|
|
63
28
|
type: BooleanConstructor;
|
|
@@ -73,21 +38,6 @@ export declare const uploadFileProps: {
|
|
|
73
38
|
type: BooleanConstructor;
|
|
74
39
|
default: boolean;
|
|
75
40
|
};
|
|
76
|
-
/** 文件是否保存入库 */
|
|
77
|
-
saveStore: {
|
|
78
|
-
type: BooleanConstructor;
|
|
79
|
-
default: boolean;
|
|
80
|
-
};
|
|
81
|
-
/** 文件保存入库平台 */
|
|
82
|
-
platform: {
|
|
83
|
-
type: StringConstructor;
|
|
84
|
-
default: string;
|
|
85
|
-
};
|
|
86
|
-
/** cdn */
|
|
87
|
-
cdn: {
|
|
88
|
-
type: StringConstructor;
|
|
89
|
-
default: string;
|
|
90
|
-
};
|
|
91
41
|
/** 缩略图宽度 */
|
|
92
42
|
width: {
|
|
93
43
|
type: NumberConstructor;
|
|
@@ -315,7 +265,7 @@ export declare const uploadFileProps: {
|
|
|
315
265
|
};
|
|
316
266
|
controlslist: {
|
|
317
267
|
type: StringConstructor;
|
|
318
|
-
default: string;
|
|
268
|
+
default: string; /** 是否开启文件多选 */
|
|
319
269
|
};
|
|
320
270
|
oncontextmenu: {
|
|
321
271
|
type: BooleanConstructor;
|
|
@@ -28,41 +28,6 @@ const uploadFileProps = {
|
|
|
28
28
|
type: Boolean,
|
|
29
29
|
default: true
|
|
30
30
|
},
|
|
31
|
-
/** 文件存储位置 */
|
|
32
|
-
folder: {
|
|
33
|
-
type: String,
|
|
34
|
-
default: "uploadFile"
|
|
35
|
-
},
|
|
36
|
-
/** 文件存储文件夹 */
|
|
37
|
-
seat: {
|
|
38
|
-
type: String,
|
|
39
|
-
default: "default"
|
|
40
|
-
},
|
|
41
|
-
/** 并行上传数量 */
|
|
42
|
-
parallel: {
|
|
43
|
-
type: Number,
|
|
44
|
-
default: null
|
|
45
|
-
},
|
|
46
|
-
/** 并行分片大小 */
|
|
47
|
-
partSize: {
|
|
48
|
-
type: Number,
|
|
49
|
-
default: null
|
|
50
|
-
},
|
|
51
|
-
/** 阿里oss上传配置 */
|
|
52
|
-
options: {
|
|
53
|
-
type: Object,
|
|
54
|
-
default: () => ({})
|
|
55
|
-
},
|
|
56
|
-
/** 阿里oss上传bucket */
|
|
57
|
-
bucket: {
|
|
58
|
-
type: String,
|
|
59
|
-
default: "giikin-material"
|
|
60
|
-
},
|
|
61
|
-
/** 文件存储名称 */
|
|
62
|
-
fileName: {
|
|
63
|
-
type: String,
|
|
64
|
-
default: ""
|
|
65
|
-
},
|
|
66
31
|
/** 是否展示删除按钮 */
|
|
67
32
|
showDelete: {
|
|
68
33
|
type: Boolean,
|
|
@@ -78,21 +43,6 @@ const uploadFileProps = {
|
|
|
78
43
|
type: Boolean,
|
|
79
44
|
default: true
|
|
80
45
|
},
|
|
81
|
-
/** 文件是否保存入库 */
|
|
82
|
-
saveStore: {
|
|
83
|
-
type: Boolean,
|
|
84
|
-
default: false
|
|
85
|
-
},
|
|
86
|
-
/** 文件保存入库平台 */
|
|
87
|
-
platform: {
|
|
88
|
-
type: String,
|
|
89
|
-
default: ""
|
|
90
|
-
},
|
|
91
|
-
/** cdn */
|
|
92
|
-
cdn: {
|
|
93
|
-
type: String,
|
|
94
|
-
default: "https://sucai.giikin.cn/"
|
|
95
|
-
},
|
|
96
46
|
/** 缩略图宽度 */
|
|
97
47
|
width: {
|
|
98
48
|
type: Number,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploadFile.mjs","sources":["../../../../../../../packages/components/src/composite/uploadFile/uploadFile.ts"],"sourcesContent":["import { type PropType } from 'vue';\nimport { type UploadFile, type UploadProps, uploadProps } from 'element-plus';\nimport { previewFileProps } from '../previewFile';\nimport { uploadFileProProps } from '../../business/uploadPro';\nexport type { GmUploadProUserFile, GmUploadProUserFileResponse } from '../../business/uploadPro';\n\nexport type GmUploadFile = Partial<UploadFile>;\n\nexport const uploadFileProps = {\n ...uploadProps,\n ...previewFileProps,\n ...uploadFileProProps,\n listType: {\n type: String as PropType<UploadProps['listType']>,\n default: 'picture-card',\n },\n accept: {\n type: String,\n default: '*',\n },\n autoUpload: {\n type: Boolean,\n default: false,\n },\n drag: {\n type: Boolean,\n default: true,\n },\n multiple: {\n type: Boolean,\n default: true,\n },\n /**
|
|
1
|
+
{"version":3,"file":"uploadFile.mjs","sources":["../../../../../../../packages/components/src/composite/uploadFile/uploadFile.ts"],"sourcesContent":["import { type PropType } from 'vue';\nimport { type UploadFile, type UploadProps, uploadProps } from 'element-plus';\nimport { previewFileProps } from '../previewFile';\nimport { uploadFileProProps } from '../../business/uploadPro';\nexport type { GmUploadProUserFile, GmUploadProUserFileResponse } from '../../business/uploadPro';\n\nexport type GmUploadFile = Partial<UploadFile>;\n\nexport const uploadFileProps = {\n ...uploadProps,\n ...previewFileProps,\n ...uploadFileProProps,\n listType: {\n type: String as PropType<UploadProps['listType']>,\n default: 'picture-card',\n },\n accept: {\n type: String,\n default: '*',\n },\n autoUpload: {\n type: Boolean,\n default: false,\n },\n drag: {\n type: Boolean,\n default: true,\n },\n multiple: {\n type: Boolean,\n default: true,\n },\n /** 是否展示删除按钮 */\n showDelete: {\n type: Boolean,\n default: true,\n },\n /** 删除时提示 */\n deleteTip: {\n type: Boolean,\n default: false,\n },\n /** 是否开启文件多选 */\n checkbox: {\n type: Boolean,\n default: true,\n },\n /** 缩略图宽度 */\n width: {\n type: Number,\n default: 120,\n },\n /** 缩略图高度 */\n height: {\n type: Number,\n default: 120,\n },\n};\n"],"names":[],"mappings":";;;;;;AAQO,MAAM,eAAA,GAAkB;AAAA,EAC7B,GAAG,WAAA;AAAA,EACH,GAAG,gBAAA;AAAA,EACH,GAAG,kBAAA;AAAA,EACH,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS;AAAA,GACX;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS;AAAA,GACX;AAAA,EACA,UAAA,EAAY;AAAA,IACV,IAAA,EAAM,OAAA;AAAA,IACN,OAAA,EAAS;AAAA,GACX;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,OAAA;AAAA,IACN,OAAA,EAAS;AAAA,GACX;AAAA,EACA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,OAAA;AAAA,IACN,OAAA,EAAS;AAAA,GACX;AAAA;AAAA,EAEA,UAAA,EAAY;AAAA,IACV,IAAA,EAAM,OAAA;AAAA,IACN,OAAA,EAAS;AAAA,GACX;AAAA;AAAA,EAEA,SAAA,EAAW;AAAA,IACT,IAAA,EAAM,OAAA;AAAA,IACN,OAAA,EAAS;AAAA,GACX;AAAA;AAAA,EAEA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,OAAA;AAAA,IACN,OAAA,EAAS;AAAA,GACX;AAAA;AAAA,EAEA,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS;AAAA,GACX;AAAA;AAAA,EAEA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS;AAAA;AAEb;;;;"}
|
package/es/giime/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const version = "0.8.
|
|
1
|
+
export declare const version = "0.8.13";
|
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.8.
|
|
1
|
+
{"version":3,"file":"version.mjs","sources":["../../../../packages/giime/version.ts"],"sourcesContent":["export const version = '0.8.13';\n"],"names":[],"mappings":"AAAO,MAAM,OAAA,GAAU;;;;"}
|
|
@@ -8,10 +8,6 @@ import '../../../utils/index.mjs';
|
|
|
8
8
|
import { isString } from '../../../utils/src/is.mjs';
|
|
9
9
|
|
|
10
10
|
const useDownload = () => {
|
|
11
|
-
const getUrlFilename = (url) => {
|
|
12
|
-
const filename = url.split("/").pop()?.split("?")[0] || "file";
|
|
13
|
-
return filename;
|
|
14
|
-
};
|
|
15
11
|
const downloadByUrl = async (url, options) => {
|
|
16
12
|
const filename = options?.filename || getUrlFilename(url);
|
|
17
13
|
const curId = v4();
|
|
@@ -66,7 +62,7 @@ const useDownload = () => {
|
|
|
66
62
|
const currentItem = fileList[i];
|
|
67
63
|
const downblobOptions = {
|
|
68
64
|
url: currentItem.url,
|
|
69
|
-
filename: currentItem.filename
|
|
65
|
+
filename: ensureFilenameWithExtension(currentItem.filename, currentItem.url),
|
|
70
66
|
isZip: true
|
|
71
67
|
};
|
|
72
68
|
createDownload(downblobOptions).then((res) => {
|
|
@@ -152,7 +148,15 @@ const useDownload = () => {
|
|
|
152
148
|
let currentIndex = 0;
|
|
153
149
|
const downloadSingleFile = async (item) => {
|
|
154
150
|
try {
|
|
155
|
-
|
|
151
|
+
if (!item.url) {
|
|
152
|
+
if (item.folder) {
|
|
153
|
+
zipInstance.folder(item.folder);
|
|
154
|
+
}
|
|
155
|
+
downloadCount.value++;
|
|
156
|
+
editElementContent(currentContentClass, `\u603B\u6587\u4EF6\u6570\uFF1A${totalCount}\uFF0C\u5DF2\u4E0B\u8F7D\uFF1A${downloadCount.value}\uFF0C\u5931\u8D25\uFF1A${errorCount.value}`);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
const finalFilename = ensureFilenameWithExtension(item.filename, item.url);
|
|
156
160
|
const blob = await createDownload({
|
|
157
161
|
url: item.url,
|
|
158
162
|
filename: finalFilename,
|
|
@@ -237,6 +241,26 @@ const getFileNameFromContentDisposition = (disposition) => {
|
|
|
237
241
|
return "filename-error";
|
|
238
242
|
}
|
|
239
243
|
};
|
|
244
|
+
const getUrlFilename = (url) => {
|
|
245
|
+
const urlWithoutQuery = url.split("?")[0];
|
|
246
|
+
const filename = urlWithoutQuery.split("/").pop() || "file";
|
|
247
|
+
return filename;
|
|
248
|
+
};
|
|
249
|
+
const getFileExtension = (filename) => {
|
|
250
|
+
const match = filename.match(/\.[^./\\]+$/);
|
|
251
|
+
return match ? match[0] : "";
|
|
252
|
+
};
|
|
253
|
+
const ensureFilenameWithExtension = (filename, url) => {
|
|
254
|
+
if (!filename) {
|
|
255
|
+
return getUrlFilename(url);
|
|
256
|
+
}
|
|
257
|
+
if (getFileExtension(filename)) {
|
|
258
|
+
return filename;
|
|
259
|
+
}
|
|
260
|
+
const urlFilename = getUrlFilename(url);
|
|
261
|
+
const extension = getFileExtension(urlFilename);
|
|
262
|
+
return filename + extension;
|
|
263
|
+
};
|
|
240
264
|
|
|
241
265
|
export { useDownload };
|
|
242
266
|
//# 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 filename?: string;\n}\nexport interface DateownloadZipItem {\n url: string;\n filename?: string;\n}\n\nexport interface DownloadFolderItem {\n url: string;\n /** 资源所在文件夹名称多级使用 / 隔开 例如:一级文件夹/二级文件夹/三级文件夹 */\n folder?: string;\n filename?: string;\n}\n\nexport const useDownload = () => {\n const getUrlFilename = (url: string) => {\n const filename = url.split('/').pop()?.split('?')[0] || 'file';\n return filename;\n };\n /**\n * 通过url下载\n * @param url\n * @param options\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\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\n * @param filename\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: currentItem.filename ?? getUrlFilename(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 文件列表\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 // 确保文件名不为空,优先使用传入的filename,否则从URL提取\n const finalFilename = item.filename || getUrlFilename(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"],"names":["uuidv4","res"],"mappings":"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"}
|
|
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 filename?: string;\n}\nexport interface DateownloadZipItem {\n url: string;\n filename?: string;\n}\n\nexport interface DownloadFolderItem {\n url: string;\n /** 资源所在文件夹名称多级使用 / 隔开 例如:一级文件夹/二级文件夹/三级文件夹 */\n folder?: string;\n filename?: string;\n}\n\nexport const useDownload = () => {\n /**\n * 通过url下载\n * @param url\n * @param options\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\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\n * @param filename\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 文件列表\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 */\nconst 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 */\nconst 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 */\nconst 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":"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"}
|
package/es/index.css
CHANGED
|
@@ -883,41 +883,13 @@ video {
|
|
|
883
883
|
.gm-group:hover .group-hover\:gm-block {
|
|
884
884
|
display: block;
|
|
885
885
|
}
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
margin: 0;
|
|
889
|
-
}
|
|
890
|
-
|
|
891
|
-
.circular[data-v-d7b04fae] {
|
|
892
|
-
animation: loading-rotate-d7b04fae 2s linear infinite;
|
|
893
|
-
}
|
|
894
|
-
|
|
895
|
-
.path[data-v-d7b04fae] {
|
|
896
|
-
animation: loading-dash-d7b04fae 1.5s ease-in-out infinite;
|
|
897
|
-
stroke-dasharray: 90, 150;
|
|
898
|
-
stroke-dashoffset: 0;
|
|
899
|
-
stroke: var(--el-color-primary);
|
|
900
|
-
stroke-linecap: round;
|
|
886
|
+
.gm-upload-pro-preview-dialog[data-v-80b383d8] [data-v-80b383d8] .el-dialog__body {
|
|
887
|
+
padding: 0;
|
|
901
888
|
}
|
|
902
889
|
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
}
|
|
907
|
-
}
|
|
908
|
-
@keyframes loading-dash-d7b04fae {
|
|
909
|
-
0% {
|
|
910
|
-
stroke-dasharray: 1, 200;
|
|
911
|
-
stroke-dashoffset: 0;
|
|
912
|
-
}
|
|
913
|
-
50% {
|
|
914
|
-
stroke-dasharray: 90, 150;
|
|
915
|
-
stroke-dashoffset: -40px;
|
|
916
|
-
}
|
|
917
|
-
100% {
|
|
918
|
-
stroke-dasharray: 90, 150;
|
|
919
|
-
stroke-dashoffset: -120px;
|
|
920
|
-
}
|
|
890
|
+
.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 {
|
|
891
|
+
width: auto;
|
|
892
|
+
height: auto;
|
|
921
893
|
}
|
|
922
894
|
.gm-upload-pro-file {
|
|
923
895
|
line-height: normal;
|
|
@@ -957,20 +929,41 @@ video {
|
|
|
957
929
|
.gm-upload-pro-file-disabled .el-upload-list__item-status-label {
|
|
958
930
|
display: none;
|
|
959
931
|
}
|
|
960
|
-
|
|
961
|
-
|
|
932
|
+
|
|
933
|
+
.gm-range-number .el-form-item[data-v-1ae16d96] {
|
|
934
|
+
margin: 0;
|
|
962
935
|
}
|
|
963
936
|
|
|
964
|
-
.
|
|
965
|
-
|
|
966
|
-
height: auto;
|
|
937
|
+
.circular[data-v-d7b04fae] {
|
|
938
|
+
animation: loading-rotate-d7b04fae 2s linear infinite;
|
|
967
939
|
}
|
|
968
|
-
|
|
969
|
-
|
|
940
|
+
|
|
941
|
+
.path[data-v-d7b04fae] {
|
|
942
|
+
animation: loading-dash-d7b04fae 1.5s ease-in-out infinite;
|
|
943
|
+
stroke-dasharray: 90, 150;
|
|
944
|
+
stroke-dashoffset: 0;
|
|
945
|
+
stroke: var(--el-color-primary);
|
|
946
|
+
stroke-linecap: round;
|
|
970
947
|
}
|
|
971
948
|
|
|
972
|
-
|
|
973
|
-
|
|
949
|
+
@keyframes loading-rotate-d7b04fae {
|
|
950
|
+
to {
|
|
951
|
+
transform: rotate(360deg);
|
|
952
|
+
}
|
|
953
|
+
}
|
|
954
|
+
@keyframes loading-dash-d7b04fae {
|
|
955
|
+
0% {
|
|
956
|
+
stroke-dasharray: 1, 200;
|
|
957
|
+
stroke-dashoffset: 0;
|
|
958
|
+
}
|
|
959
|
+
50% {
|
|
960
|
+
stroke-dasharray: 90, 150;
|
|
961
|
+
stroke-dashoffset: -40px;
|
|
962
|
+
}
|
|
963
|
+
100% {
|
|
964
|
+
stroke-dasharray: 90, 150;
|
|
965
|
+
stroke-dashoffset: -120px;
|
|
966
|
+
}
|
|
974
967
|
}
|
|
975
968
|
.gm-number-interval-single[data-v-4e6f4d6f] {
|
|
976
969
|
border-radius: var(--el-input-border-radius, var(--el-border-radius-base));
|
|
@@ -990,45 +983,29 @@ video {
|
|
|
990
983
|
.gm-number-interval-single[data-v-4e6f4d6f]:hover .gm-number-interval-close[data-v-4e6f4d6f] {
|
|
991
984
|
display: flex;
|
|
992
985
|
}
|
|
993
|
-
[data-v-
|
|
994
|
-
|
|
995
|
-
}
|
|
996
|
-
|
|
997
|
-
[data-v-4bbcbf2d] .gmTableNoBorder .el-table__inner-wrapper:before {
|
|
998
|
-
height: 0;
|
|
999
|
-
}
|
|
1000
|
-
|
|
1001
|
-
[data-v-4bbcbf2d] .gmTableNoBorder.el-table--border .el-table__inner-wrapper:after {
|
|
1002
|
-
height: 0;
|
|
1003
|
-
}
|
|
1004
|
-
|
|
1005
|
-
[data-v-4bbcbf2d] .gmTableNoBorder.el-table--border:after {
|
|
1006
|
-
height: 0;
|
|
1007
|
-
}
|
|
1008
|
-
|
|
1009
|
-
[data-v-4bbcbf2d] .gmTableNoBorder.el-table--border:before {
|
|
1010
|
-
height: 0;
|
|
986
|
+
.gm-flex-center[data-v-c17deec9] {
|
|
987
|
+
align-items: center;
|
|
1011
988
|
}
|
|
1012
989
|
|
|
1013
|
-
[data-v-
|
|
1014
|
-
|
|
990
|
+
.gm-flex-justify-between[data-v-c17deec9] {
|
|
991
|
+
justify-content: space-between;
|
|
1015
992
|
}
|
|
1016
993
|
[data-v-79615afd] .gmSearchForm .el-form-item {
|
|
1017
994
|
margin-right: 0;
|
|
1018
995
|
margin-bottom: 4px;
|
|
1019
996
|
}
|
|
1020
|
-
.gm-upload-preview-dialog[data-v-
|
|
997
|
+
.gm-upload-preview-dialog[data-v-c615121c] [data-v-c615121c] .el-dialog__body {
|
|
1021
998
|
padding: 0;
|
|
1022
999
|
}
|
|
1023
1000
|
|
|
1024
|
-
.gm-upload-file-picture-card[data-v-
|
|
1001
|
+
.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 {
|
|
1025
1002
|
width: auto;
|
|
1026
1003
|
height: auto;
|
|
1027
1004
|
}
|
|
1028
1005
|
.gm-upload-file {
|
|
1029
1006
|
line-height: normal;
|
|
1030
1007
|
}
|
|
1031
|
-
.gm-upload-file .el-checkbox {
|
|
1008
|
+
.gm-upload-file li > .el-checkbox {
|
|
1032
1009
|
position: absolute;
|
|
1033
1010
|
left: 10px;
|
|
1034
1011
|
top: 0;
|
|
@@ -1039,6 +1016,7 @@ video {
|
|
|
1039
1016
|
}
|
|
1040
1017
|
.gm-upload-file .el-upload-list__item {
|
|
1041
1018
|
margin: 0;
|
|
1019
|
+
border: none;
|
|
1042
1020
|
}
|
|
1043
1021
|
.gm-upload-file .el-upload-list__item-file-name {
|
|
1044
1022
|
line-height: normal;
|
|
@@ -1083,6 +1061,29 @@ video {
|
|
|
1083
1061
|
[data-v-98c2e804] .gmTableNoBorder .el-table__border-left-patch {
|
|
1084
1062
|
height: 0;
|
|
1085
1063
|
}
|
|
1064
|
+
[data-v-050a4f74] .gmTableNoBorder .el-table__body .el-table__cell {
|
|
1065
|
+
border-right: none;
|
|
1066
|
+
}
|
|
1067
|
+
|
|
1068
|
+
[data-v-050a4f74] .gmTableNoBorder .el-table__inner-wrapper:before {
|
|
1069
|
+
height: 0;
|
|
1070
|
+
}
|
|
1071
|
+
|
|
1072
|
+
[data-v-050a4f74] .gmTableNoBorder.el-table--border .el-table__inner-wrapper:after {
|
|
1073
|
+
height: 0;
|
|
1074
|
+
}
|
|
1075
|
+
|
|
1076
|
+
[data-v-050a4f74] .gmTableNoBorder.el-table--border:after {
|
|
1077
|
+
height: 0;
|
|
1078
|
+
}
|
|
1079
|
+
|
|
1080
|
+
[data-v-050a4f74] .gmTableNoBorder.el-table--border:before {
|
|
1081
|
+
height: 0;
|
|
1082
|
+
}
|
|
1083
|
+
|
|
1084
|
+
[data-v-050a4f74] .gmTableNoBorder .el-table__border-left-patch {
|
|
1085
|
+
height: 0;
|
|
1086
|
+
}
|
|
1086
1087
|
|
|
1087
1088
|
.pagination-container[data-v-47d35e7b] {
|
|
1088
1089
|
background: #fff;
|
|
@@ -25,15 +25,15 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
25
25
|
}, [
|
|
26
26
|
vue.unref(slots).default ? {
|
|
27
27
|
name: "default",
|
|
28
|
-
fn: vue.withCtx((
|
|
29
|
-
|
|
28
|
+
fn: vue.withCtx((scope) => [
|
|
29
|
+
vue.renderSlot(_ctx.$slots, "default", vue.normalizeProps(vue.guardReactiveProps(scope)))
|
|
30
30
|
]),
|
|
31
31
|
key: "0"
|
|
32
32
|
} : void 0,
|
|
33
33
|
vue.unref(slots).header ? {
|
|
34
34
|
name: "header",
|
|
35
|
-
fn: vue.withCtx((
|
|
36
|
-
vue.renderSlot(_ctx.$slots, "header", vue.normalizeProps(vue.guardReactiveProps(
|
|
35
|
+
fn: vue.withCtx((scope) => [
|
|
36
|
+
vue.renderSlot(_ctx.$slots, "header", vue.normalizeProps(vue.guardReactiveProps(scope)))
|
|
37
37
|
]),
|
|
38
38
|
key: "1"
|
|
39
39
|
} : void 0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableColumn.vue2.js","sources":["../../../../../../../packages/components/src/base/tableColumn/TableColumn.vue"],"sourcesContent":["<template>\n <el-table-column v-bind=\"props\">\n <template v-if=\"slots.default\" #default=\"
|
|
1
|
+
{"version":3,"file":"TableColumn.vue2.js","sources":["../../../../../../../packages/components/src/base/tableColumn/TableColumn.vue"],"sourcesContent":["<template>\n <el-table-column v-bind=\"props\">\n <template v-if=\"slots.default\" #default=\"scope\">\n <slot v-bind=\"scope\" />\n </template>\n\n <template v-if=\"slots.header\" #header=\"scope\">\n <slot name=\"header\" v-bind=\"scope\" />\n </template>\n </el-table-column>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useSlots } from 'vue';\nimport { tableColumnProps } from './tableColumn';\n\ndefineOptions({\n name: 'GmTableColumn',\n});\n\nconst slots = useSlots();\nconst props = defineProps(tableColumnProps);\n</script>\n"],"names":["useSlots"],"mappings":";;;;;;;;;;;;;;AAoBA,IAAA,MAAM,QAAQA,YAAA,EAAS;AACvB,IAAA,MAAM,KAAA,GAAQ,OAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { TableColumnProProps } from './tableColumnPro/tableColumnPro';
|
|
2
|
-
import type { PropType } from 'vue';
|
|
2
|
+
import type { PropType, VNode } from 'vue';
|
|
3
3
|
declare const _default: import("vue").DefineComponent<{
|
|
4
4
|
vnode: {
|
|
5
5
|
type: (ObjectConstructor | ArrayConstructor)[];
|
|
@@ -13,7 +13,9 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
13
13
|
type: PropType<TableColumnProProps[]>;
|
|
14
14
|
default: () => never[];
|
|
15
15
|
};
|
|
16
|
-
}, () =>
|
|
16
|
+
}, () => (VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
17
|
+
[key: string]: any;
|
|
18
|
+
}> | null)[], unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
17
19
|
vnode: {
|
|
18
20
|
type: (ObjectConstructor | ArrayConstructor)[];
|
|
19
21
|
required: true;
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var vue = require('vue');
|
|
6
|
-
var tableHelper = require('./tableHelper.js');
|
|
7
6
|
|
|
8
7
|
var TableColumnVNodeRenderer = /* @__PURE__ */ vue.defineComponent({
|
|
9
8
|
functional: true,
|
|
@@ -24,7 +23,6 @@ var TableColumnVNodeRenderer = /* @__PURE__ */ vue.defineComponent({
|
|
|
24
23
|
}
|
|
25
24
|
},
|
|
26
25
|
setup(props) {
|
|
27
|
-
const vnodes = vue.computed(() => tableHelper.getVnodesByGmName(Array.isArray(props.vnode) ? props.vnode : [props.vnode], "GmTableColumnPro"));
|
|
28
26
|
const mergePropsList = vue.computed(() => {
|
|
29
27
|
return props.defaultPropsList.map((it) => {
|
|
30
28
|
const findProp = props.propsList.find((item) => item.prop === it.prop);
|
|
@@ -34,21 +32,51 @@ var TableColumnVNodeRenderer = /* @__PURE__ */ vue.defineComponent({
|
|
|
34
32
|
return it;
|
|
35
33
|
});
|
|
36
34
|
});
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
if (
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
35
|
+
const processVNode = (vnode) => {
|
|
36
|
+
if (!vnode) return null;
|
|
37
|
+
if (vnode.type?.name === "GmTableColumnPro") {
|
|
38
|
+
const propsConfig = mergePropsList.value.find((it) => it.prop === vnode.props?.prop);
|
|
39
|
+
if (propsConfig && (!propsConfig.isShow || propsConfig.type === "edit")) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
if (propsConfig) {
|
|
43
|
+
const newProps = {
|
|
44
|
+
...vnode.props,
|
|
45
|
+
width: propsConfig.width,
|
|
46
|
+
label: propsConfig.label,
|
|
47
|
+
fixed: propsConfig.fixed
|
|
48
|
+
};
|
|
49
|
+
return vue.cloneVNode(vnode, newProps);
|
|
50
|
+
}
|
|
51
|
+
return vnode;
|
|
52
|
+
}
|
|
53
|
+
if (vnode.children) {
|
|
54
|
+
let newChildren = vnode.children;
|
|
55
|
+
if (typeof vnode.children === "object" && vnode.children.default) {
|
|
56
|
+
const originalDefault = vnode.children.default;
|
|
57
|
+
newChildren = {
|
|
58
|
+
...vnode.children,
|
|
59
|
+
default: (slotProps) => {
|
|
60
|
+
const childVnodes = originalDefault(slotProps);
|
|
61
|
+
if (Array.isArray(childVnodes)) {
|
|
62
|
+
return childVnodes.map(processVNode).filter(Boolean);
|
|
63
|
+
}
|
|
64
|
+
return processVNode(childVnodes);
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
} else if (Array.isArray(vnode.children)) {
|
|
68
|
+
newChildren = vnode.children.map(processVNode).filter(Boolean);
|
|
69
|
+
}
|
|
70
|
+
return vue.cloneVNode(vnode, vnode.props, newChildren);
|
|
47
71
|
}
|
|
48
|
-
return
|
|
49
|
-
}
|
|
72
|
+
return vnode;
|
|
73
|
+
};
|
|
50
74
|
const render = vue.computed(() => {
|
|
51
|
-
|
|
75
|
+
const vnodeArray = Array.isArray(props.vnode) ? props.vnode : [props.vnode];
|
|
76
|
+
return vnodeArray.map((vnode) => {
|
|
77
|
+
const processed = processVNode(vnode);
|
|
78
|
+
return processed ? vue.h(processed) : null;
|
|
79
|
+
}).filter(Boolean);
|
|
52
80
|
});
|
|
53
81
|
return () => render.value;
|
|
54
82
|
}
|