giime 0.6.3 → 0.6.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.
Files changed (96) hide show
  1. package/dist/index.css +20 -20
  2. package/es/api/materialApi/cross/getAdFileExist.d.ts +1 -0
  3. package/es/api/materialApi/cross/getAdFileExist.mjs.map +1 -1
  4. package/es/components/src/base/chart/Chart.vue.d.ts +2 -2
  5. package/es/components/src/base/chart/index.d.ts +2 -2
  6. package/es/components/src/base/empty/Empty.vue.d.ts +1 -1
  7. package/es/components/src/base/empty/index.d.ts +3 -3
  8. package/es/components/src/business/uploadMaterial/UploadMaterial.vue.d.ts +4 -4
  9. package/es/components/src/business/uploadMaterial/index.d.ts +4 -4
  10. package/es/components/src/business/uploadMaterial/uploadMaterial.d.ts +2 -5
  11. package/es/components/src/business/uploadMaterial/uploadMaterial.mjs.map +1 -1
  12. package/es/components/src/composite/fileComponent/FileComponent.vue.d.ts +1 -1
  13. package/es/components/src/composite/fileComponent/index.d.ts +1 -1
  14. package/es/components/src/composite/importDialog/ImportDialog.vue.d.ts +9 -2
  15. package/es/components/src/composite/importDialog/ImportDialog.vue2.mjs +5 -4
  16. package/es/components/src/composite/importDialog/ImportDialog.vue2.mjs.map +1 -1
  17. package/es/components/src/composite/importDialog/index.d.ts +193 -49
  18. package/es/components/src/composite/previewFile/PreviewFile.vue.d.ts +1 -1
  19. package/es/components/src/composite/previewFile/index.d.ts +1 -1
  20. package/es/components/src/composite/uploadFile/UploadFile.vue.d.ts +5 -5
  21. package/es/components/src/composite/uploadFile/UploadFile.vue.mjs +1 -1
  22. package/es/components/src/composite/uploadFile/UploadFile.vue2.mjs +159 -145
  23. package/es/components/src/composite/uploadFile/UploadFile.vue2.mjs.map +1 -1
  24. package/es/components/src/composite/uploadFile/index.d.ts +12 -12
  25. package/es/giime/index.mjs +2 -1
  26. package/es/giime/index.mjs.map +1 -1
  27. package/es/giime/version.d.ts +1 -1
  28. package/es/giime/version.mjs +1 -1
  29. package/es/giime/version.mjs.map +1 -1
  30. package/es/hooks/base/usePasteFile/index.d.ts +89 -0
  31. package/es/hooks/base/usePasteFile/index.mjs +109 -0
  32. package/es/hooks/base/usePasteFile/index.mjs.map +1 -0
  33. package/es/index.css +20 -20
  34. package/es/utils/index.d.ts +1 -0
  35. package/es/utils/index.mjs +2 -1
  36. package/es/utils/index.mjs.map +1 -1
  37. package/es/utils/src/alioss/aliossPutHook.d.ts +116 -41
  38. package/es/utils/src/alioss/aliossPutHook.mjs +165 -97
  39. package/es/utils/src/alioss/aliossPutHook.mjs.map +1 -1
  40. package/es/utils/src/file.d.ts +7 -0
  41. package/es/utils/src/file.mjs +39 -1
  42. package/es/utils/src/file.mjs.map +1 -1
  43. package/es/utils/src/http/createAxios.d.ts +1 -0
  44. package/es/utils/src/http/createAxios.mjs +5 -2
  45. package/es/utils/src/http/createAxios.mjs.map +1 -1
  46. package/es/utils/src/pasteFile/index.d.ts +33 -0
  47. package/es/utils/src/pasteFile/index.mjs +142 -0
  48. package/es/utils/src/pasteFile/index.mjs.map +1 -0
  49. package/lib/api/materialApi/cross/getAdFileExist.d.ts +1 -0
  50. package/lib/api/materialApi/cross/getAdFileExist.js.map +1 -1
  51. package/lib/components/src/base/chart/Chart.vue.d.ts +2 -2
  52. package/lib/components/src/base/chart/index.d.ts +2 -2
  53. package/lib/components/src/base/empty/Empty.vue.d.ts +1 -1
  54. package/lib/components/src/base/empty/index.d.ts +3 -3
  55. package/lib/components/src/business/uploadMaterial/UploadMaterial.vue.d.ts +4 -4
  56. package/lib/components/src/business/uploadMaterial/index.d.ts +4 -4
  57. package/lib/components/src/business/uploadMaterial/uploadMaterial.d.ts +2 -5
  58. package/lib/components/src/business/uploadMaterial/uploadMaterial.js.map +1 -1
  59. package/lib/components/src/composite/fileComponent/FileComponent.vue.d.ts +1 -1
  60. package/lib/components/src/composite/fileComponent/index.d.ts +1 -1
  61. package/lib/components/src/composite/importDialog/ImportDialog.vue.d.ts +9 -2
  62. package/lib/components/src/composite/importDialog/ImportDialog.vue2.js +4 -3
  63. package/lib/components/src/composite/importDialog/ImportDialog.vue2.js.map +1 -1
  64. package/lib/components/src/composite/importDialog/index.d.ts +193 -49
  65. package/lib/components/src/composite/previewFile/PreviewFile.vue.d.ts +1 -1
  66. package/lib/components/src/composite/previewFile/index.d.ts +1 -1
  67. package/lib/components/src/composite/uploadFile/UploadFile.vue.d.ts +5 -5
  68. package/lib/components/src/composite/uploadFile/UploadFile.vue.js +1 -1
  69. package/lib/components/src/composite/uploadFile/UploadFile.vue2.js +163 -149
  70. package/lib/components/src/composite/uploadFile/UploadFile.vue2.js.map +1 -1
  71. package/lib/components/src/composite/uploadFile/index.d.ts +12 -12
  72. package/lib/giime/index.js +334 -328
  73. package/lib/giime/index.js.map +1 -1
  74. package/lib/giime/version.d.ts +1 -1
  75. package/lib/giime/version.js +1 -1
  76. package/lib/giime/version.js.map +1 -1
  77. package/lib/hooks/base/usePasteFile/index.d.ts +89 -0
  78. package/lib/hooks/base/usePasteFile/index.js +111 -0
  79. package/lib/hooks/base/usePasteFile/index.js.map +1 -0
  80. package/lib/index.css +20 -20
  81. package/lib/utils/index.d.ts +1 -0
  82. package/lib/utils/index.js +6 -0
  83. package/lib/utils/index.js.map +1 -1
  84. package/lib/utils/src/alioss/aliossPutHook.d.ts +116 -41
  85. package/lib/utils/src/alioss/aliossPutHook.js +165 -97
  86. package/lib/utils/src/alioss/aliossPutHook.js.map +1 -1
  87. package/lib/utils/src/file.d.ts +7 -0
  88. package/lib/utils/src/file.js +40 -0
  89. package/lib/utils/src/file.js.map +1 -1
  90. package/lib/utils/src/http/createAxios.d.ts +1 -0
  91. package/lib/utils/src/http/createAxios.js +5 -2
  92. package/lib/utils/src/http/createAxios.js.map +1 -1
  93. package/lib/utils/src/pasteFile/index.d.ts +33 -0
  94. package/lib/utils/src/pasteFile/index.js +146 -0
  95. package/lib/utils/src/pasteFile/index.js.map +1 -0
  96. package/package.json +1 -1
@@ -0,0 +1,142 @@
1
+ class PasteFileError extends Error {
2
+ constructor(message, originalError) {
3
+ super(message);
4
+ this.originalError = originalError;
5
+ this.name = "PasteFileError";
6
+ }
7
+ }
8
+ const generateFileName = (name, ext, prefix = "clipboard") => {
9
+ const timestamp = Date.now();
10
+ const random = Math.floor(Math.random() * 1e4);
11
+ if (name) {
12
+ const hasExtension = /\.[^.]+$/i.test(name);
13
+ if (hasExtension) {
14
+ return `${prefix}_${timestamp}_${random}_${name.split(".")[0]}${name.match(/\.[^.]+$/i)?.[0] || ""}`;
15
+ }
16
+ return `${name}${ext || ".png"}`;
17
+ }
18
+ return `${prefix}_${timestamp}_${random}${ext || ".png"}`;
19
+ };
20
+ const extractImagesFromHtml = (html) => {
21
+ const urls = [];
22
+ const imgRegex = /<img[^>]+src="([^">]+)"/gi;
23
+ let match;
24
+ while ((match = imgRegex.exec(html)) !== null) {
25
+ if (match[1]) {
26
+ urls.push(match[1]);
27
+ }
28
+ }
29
+ return urls;
30
+ };
31
+ const fetchImageAsFile = async (url) => {
32
+ try {
33
+ const response = await fetch(url);
34
+ if (!response.ok) {
35
+ throw new Error(`\u83B7\u53D6\u56FE\u7247\u5931\u8D25: ${response.status} ${response.statusText}`);
36
+ }
37
+ const blob = await response.blob();
38
+ let fileName = url.split("/").pop() || "";
39
+ fileName = fileName.split("?")[0];
40
+ if (!fileName || fileName.length < 3) {
41
+ fileName = generateFileName(void 0, `.${blob.type.split("/")[1] || "png"}`, "image");
42
+ } else {
43
+ fileName = generateFileName(fileName, `.${blob.type.split("/")[1] || fileName.split(".").pop() || "png"}`, "image");
44
+ }
45
+ return new File([blob], fileName, { type: blob.type });
46
+ } catch (error) {
47
+ console.error("\u83B7\u53D6\u56FE\u7247\u6587\u4EF6\u5931\u8D25:", error);
48
+ return null;
49
+ }
50
+ };
51
+ const handleFileItem = (item) => {
52
+ const file = item.getAsFile();
53
+ if (!file) {
54
+ return null;
55
+ }
56
+ const { name, type } = file;
57
+ const ext = name.match(/\.[^.]+?$/i)?.[0] || `.${type.split("/")[1] || "bin"}`;
58
+ const newName = generateFileName(name, ext);
59
+ return new File([file], newName, { type });
60
+ };
61
+ const handleHtmlItem = async (item) => {
62
+ try {
63
+ const html = await new Promise((resolve, reject) => {
64
+ try {
65
+ item.getAsString(resolve);
66
+ } catch (error) {
67
+ reject(new PasteFileError("\u83B7\u53D6HTML\u5185\u5BB9\u5931\u8D25", error));
68
+ }
69
+ });
70
+ const imageUrls = extractImagesFromHtml(html);
71
+ if (imageUrls.length === 0) {
72
+ return [];
73
+ }
74
+ const filePromises = imageUrls.map((url) => fetchImageAsFile(url));
75
+ const files = await Promise.all(filePromises);
76
+ return files.filter((file) => file !== null);
77
+ } catch (error) {
78
+ console.error("\u5904\u7406HTML\u56FE\u7247\u5F15\u7528\u5931\u8D25:", error);
79
+ return [];
80
+ }
81
+ };
82
+ const handleTextItem = async (item) => {
83
+ try {
84
+ const text = await new Promise((resolve, reject) => {
85
+ try {
86
+ item.getAsString(resolve);
87
+ } catch (error) {
88
+ reject(new PasteFileError("\u83B7\u53D6\u6587\u672C\u5185\u5BB9\u5931\u8D25", error));
89
+ }
90
+ });
91
+ const urlRegex = /^(https?:\/\/.*\.(jpeg|jpg|gif|png|webp|bmp|svg))$/i;
92
+ if (urlRegex.test(text.trim())) {
93
+ const file = await fetchImageAsFile(text.trim());
94
+ return file ? [file] : [];
95
+ }
96
+ return [];
97
+ } catch (error) {
98
+ console.error("\u5904\u7406\u6587\u672C\u5185\u5BB9\u5931\u8D25:", error);
99
+ return [];
100
+ }
101
+ };
102
+ const handlePasteEvent = async (e) => {
103
+ try {
104
+ const files = [];
105
+ const items = e.clipboardData?.items;
106
+ if (!items || items.length === 0) {
107
+ return files;
108
+ }
109
+ const filePromises = [];
110
+ for (const item of items) {
111
+ if (item.kind === "file") {
112
+ const file = handleFileItem(item);
113
+ if (file) {
114
+ files.push(file);
115
+ }
116
+ } else if (item.type === "text/html") {
117
+ filePromises.push(handleHtmlItem(item));
118
+ } else if (item.type === "text/plain") {
119
+ filePromises.push(handleTextItem(item));
120
+ }
121
+ }
122
+ if (filePromises.length > 0) {
123
+ const results = await Promise.all(filePromises);
124
+ for (const result of results) {
125
+ if (result) {
126
+ if (Array.isArray(result)) {
127
+ files.push(...result);
128
+ } else {
129
+ files.push(result);
130
+ }
131
+ }
132
+ }
133
+ }
134
+ return files;
135
+ } catch (error) {
136
+ console.error("\u7C98\u8D34\u6587\u4EF6\u5904\u7406\u5931\u8D25:", error);
137
+ throw new PasteFileError("\u7C98\u8D34\u6587\u4EF6\u5904\u7406\u5931\u8D25", error);
138
+ }
139
+ };
140
+
141
+ export { PasteFileError, generateFileName, handlePasteEvent };
142
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../../packages/utils/src/pasteFile/index.ts"],"sourcesContent":["/**\r\n * 粘贴文件处理相关错误类型\r\n */\r\nexport class PasteFileError extends Error {\r\n constructor(\r\n message: string,\r\n public originalError?: unknown,\r\n ) {\r\n super(message);\r\n this.name = 'PasteFileError';\r\n }\r\n}\r\n\r\n/**\r\n * 生成唯一的文件名\r\n * @param name 原始文件名(可选)\r\n * @param ext 文件扩展名(可选)\r\n * @param prefix 文件名前缀(可选),默认为 'clipboard'\r\n * @returns 生成的文件名\r\n */\r\nexport const generateFileName = (name?: string, ext?: string, prefix = 'clipboard'): string => {\r\n // 获取当前时间戳和随机数,用于确保文件名唯一\r\n const timestamp = Date.now();\r\n const random = Math.floor(Math.random() * 10000);\r\n\r\n // 如果提供了原始文件名\r\n if (name) {\r\n // 检查文件名是否已包含扩展名\r\n const hasExtension = /\\.[^.]+$/i.test(name);\r\n\r\n // 如果文件名已包含扩展名,直接使用;否则添加扩展名\r\n if (hasExtension) {\r\n return `${prefix}_${timestamp}_${random}_${name.split('.')[0]}${name.match(/\\.[^.]+$/i)?.[0] || ''}`;\r\n }\r\n\r\n // 如果提供了扩展名,使用提供的扩展名;否则默认使用.png\r\n return `${name}${ext || '.png'}`;\r\n }\r\n\r\n // 如果没有提供原始文件名,生成一个默认文件名\r\n return `${prefix}_${timestamp}_${random}${ext || '.png'}`;\r\n};\r\n\r\n/**\r\n * 从HTML中提取图片URL\r\n * @param html HTML字符串\r\n * @returns 图片URL数组\r\n */\r\nconst extractImagesFromHtml = (html: string): string[] => {\r\n const urls: string[] = [];\r\n const imgRegex = /<img[^>]+src=\"([^\">]+)\"/gi;\r\n let match;\r\n\r\n // 提取所有图片URL\r\n while ((match = imgRegex.exec(html)) !== null) {\r\n if (match[1]) {\r\n urls.push(match[1]);\r\n }\r\n }\r\n\r\n return urls;\r\n};\r\n\r\n/**\r\n * 从URL获取图片文件\r\n * @param url 图片URL\r\n * @returns 文件对象\r\n */\r\nconst fetchImageAsFile = async (url: string): Promise<File | null> => {\r\n try {\r\n // 获取图片数据\r\n const response = await fetch(url);\r\n\r\n if (!response.ok) {\r\n throw new Error(`获取图片失败: ${response.status} ${response.statusText}`);\r\n }\r\n\r\n // 获取图片数据\r\n const blob = await response.blob();\r\n\r\n // 从URL中提取文件名\r\n let fileName = url.split('/').pop() || '';\r\n // 如果文件名包含查询参数,去除查询参数\r\n fileName = fileName.split('?')[0];\r\n\r\n // 如果无法从URL中提取有效文件名,生成一个默认文件名\r\n if (!fileName || fileName.length < 3) {\r\n fileName = generateFileName(undefined, `.${blob.type.split('/')[1] || 'png'}`, 'image');\r\n } else {\r\n // 确保文件名有正确的扩展名\r\n fileName = generateFileName(fileName, `.${blob.type.split('/')[1] || fileName.split('.').pop() || 'png'}`, 'image');\r\n }\r\n\r\n // 创建文件对象\r\n return new File([blob], fileName, { type: blob.type });\r\n } catch (error) {\r\n console.error('获取图片文件失败:', error);\r\n return null;\r\n }\r\n};\r\n\r\n/**\r\n * 处理剪贴板中的文件类型项\r\n * @param item 剪贴板数据项\r\n * @returns 文件对象或null\r\n */\r\nconst handleFileItem = (item: DataTransferItem): File | null => {\r\n const file = item.getAsFile();\r\n\r\n if (!file) {\r\n return null;\r\n }\r\n\r\n // 获取文件名和类型\r\n const { name, type } = file;\r\n\r\n // 获取文件扩展名\r\n const ext = name.match(/\\.[^.]+?$/i)?.[0] || `.${type.split('/')[1] || 'bin'}`;\r\n\r\n // 生成新文件名\r\n const newName = generateFileName(name, ext);\r\n\r\n // 创建新文件\r\n return new File([file], newName, { type });\r\n};\r\n\r\n/**\r\n * 处理剪贴板中的HTML类型项\r\n * @param item 剪贴板数据项\r\n * @returns Promise<File[]> 文件对象数组\r\n */\r\nconst handleHtmlItem = async (item: DataTransferItem): Promise<File[]> => {\r\n try {\r\n // 获取HTML字符串\r\n const html = await new Promise<string>((resolve, reject) => {\r\n try {\r\n item.getAsString(resolve);\r\n } catch (error) {\r\n reject(new PasteFileError('获取HTML内容失败', error));\r\n }\r\n });\r\n\r\n // 提取图片URL\r\n const imageUrls = extractImagesFromHtml(html);\r\n\r\n if (imageUrls.length === 0) {\r\n return [];\r\n }\r\n\r\n // 获取所有图片文件\r\n const filePromises = imageUrls.map(url => fetchImageAsFile(url));\r\n const files = await Promise.all(filePromises);\r\n\r\n // 过滤掉null值\r\n return files.filter((file): file is File => file !== null);\r\n } catch (error) {\r\n console.error('处理HTML图片引用失败:', error);\r\n return [];\r\n }\r\n};\r\n\r\n/**\r\n * 处理剪贴板中的文本类型项(检查是否包含图片URL)\r\n * @param item 剪贴板数据项\r\n * @returns Promise<File[]> 文件对象数组\r\n */\r\nconst handleTextItem = async (item: DataTransferItem): Promise<File[]> => {\r\n try {\r\n // 获取文本内容\r\n const text = await new Promise<string>((resolve, reject) => {\r\n try {\r\n item.getAsString(resolve);\r\n } catch (error) {\r\n reject(new PasteFileError('获取文本内容失败', error));\r\n }\r\n });\r\n\r\n // 检查文本是否是URL\r\n const urlRegex = /^(https?:\\/\\/.*\\.(jpeg|jpg|gif|png|webp|bmp|svg))$/i;\r\n if (urlRegex.test(text.trim())) {\r\n const file = await fetchImageAsFile(text.trim());\r\n return file ? [file] : [];\r\n }\r\n\r\n return [];\r\n } catch (error) {\r\n console.error('处理文本内容失败:', error);\r\n return [];\r\n }\r\n};\r\n\r\n/**\r\n * 处理粘贴事件,返回粘贴的文件数组\r\n * @param e 剪贴板事件对象\r\n * @returns Promise<File[]> 文件对象数组\r\n *\r\n * @example\r\n * ```ts\r\n * // 在事件处理函数中使用\r\n * document.addEventListener('paste', async (e) => {\r\n * const files = await handlePasteEvent(e);\r\n * if (files.length > 0) {\r\n * console.log('粘贴的文件:', files);\r\n * // 处理文件...\r\n * }\r\n * });\r\n * ```\r\n */\r\nexport const handlePasteEvent = async (e: ClipboardEvent): Promise<File[]> => {\r\n try {\r\n // 创建一个空文件数组\r\n const files: File[] = [];\r\n\r\n // 获取剪贴板中的数据项\r\n const items = e.clipboardData?.items;\r\n\r\n // 如果没有数据项,返回空文件数组\r\n if (!items || items.length === 0) {\r\n return files;\r\n }\r\n\r\n // 处理所有数据项\r\n const filePromises: Promise<File | File[] | null>[] = [];\r\n\r\n for (const item of items) {\r\n // 根据数据项类型进行处理\r\n if (item.kind === 'file') {\r\n // 处理文件类型\r\n const file = handleFileItem(item);\r\n if (file) {\r\n files.push(file);\r\n }\r\n } else if (item.type === 'text/html') {\r\n // 处理HTML类型(可能包含图片引用)\r\n filePromises.push(handleHtmlItem(item));\r\n } else if (item.type === 'text/plain') {\r\n // 处理文本类型(可能是图片URL)\r\n filePromises.push(handleTextItem(item));\r\n }\r\n }\r\n\r\n // 等待所有异步处理完成\r\n if (filePromises.length > 0) {\r\n const results = await Promise.all(filePromises);\r\n\r\n // 将结果添加到文件数组中\r\n for (const result of results) {\r\n if (result) {\r\n if (Array.isArray(result)) {\r\n files.push(...result);\r\n } else {\r\n files.push(result);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return files;\r\n } catch (error) {\r\n console.error('粘贴文件处理失败:', error);\r\n throw new PasteFileError('粘贴文件处理失败', error);\r\n }\r\n};\r\n"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ export interface GetAdFileExistResponse {
7
7
  export interface GetAdFileExistResponseData {
8
8
  count: number;
9
9
  url: string;
10
+ id: number;
10
11
  }
11
12
  /**
12
13
  * @description 检测广告素材是否已存在
@@ -1 +1 @@
1
- {"version":3,"file":"getAdFileExist.js","sources":["../../../../../../packages/api/materialApi/cross/getAdFileExist.ts"],"sourcesContent":["import { type AxiosRequestConfig } from 'axios';\r\nimport request from '../request';\r\n\r\nexport interface GetAdFileExistResponse {\r\n code: number;\r\n data: GetAdFileExistResponseData;\r\n comment: string;\r\n}\r\n\r\nexport interface GetAdFileExistResponseData {\r\n count: number;\r\n url: string;\r\n}\r\n\r\n/**\r\n * @description 检测广告素材是否已存在\r\n * @param {string} md5Code 文件md5\r\n * @param {string} ext 文件后缀名\r\n * @return {*}\r\n **/\r\n\r\nexport interface GetAdFileExistParams extends AxiosRequestConfig {\r\n md5Code: string;\r\n ext: string;\r\n}\r\n\r\nexport function getAdFileExist(params: GetAdFileExistParams) {\r\n return request.post<GetAdFileExistResponse>(`/material/work/adFilesExist`, params);\r\n}\r\n"],"names":["request"],"mappings":";;;;AA0BO,SAAS,eAAe,MAA8B,EAAA;AAC3D,EAAO,OAAAA,eAAA,CAAQ,IAA6B,CAAA,CAAA,2BAAA,CAAA,EAA+B,MAAM,CAAA,CAAA;AACnF;;;;"}
1
+ {"version":3,"file":"getAdFileExist.js","sources":["../../../../../../packages/api/materialApi/cross/getAdFileExist.ts"],"sourcesContent":["import { type AxiosRequestConfig } from 'axios';\r\nimport request from '../request';\r\n\r\nexport interface GetAdFileExistResponse {\r\n code: number;\r\n data: GetAdFileExistResponseData;\r\n comment: string;\r\n}\r\n\r\nexport interface GetAdFileExistResponseData {\r\n count: number;\r\n url: string;\r\n id: number;\r\n}\r\n\r\n/**\r\n * @description 检测广告素材是否已存在\r\n * @param {string} md5Code 文件md5\r\n * @param {string} ext 文件后缀名\r\n * @return {*}\r\n **/\r\n\r\nexport interface GetAdFileExistParams extends AxiosRequestConfig {\r\n md5Code: string;\r\n ext: string;\r\n}\r\n\r\nexport function getAdFileExist(params: GetAdFileExistParams) {\r\n return request.post<GetAdFileExistResponse>(`/material/work/adFilesExist`, params);\r\n}\r\n"],"names":["request"],"mappings":";;;;AA2BO,SAAS,eAAe,MAA8B,EAAA;AAC3D,EAAO,OAAAA,eAAA,CAAQ,IAA6B,CAAA,CAAA,2BAAA,CAAA,EAA+B,MAAM,CAAA,CAAA;AACnF;;;;"}
@@ -139,13 +139,13 @@ declare const _default: import("vue").DefineComponent<{
139
139
  dataIndexInside?: number | undefined;
140
140
  }, value: number[]) => boolean;
141
141
  getDataURL: (opts?: {
142
- type?: "svg" | "png" | "jpeg" | undefined;
142
+ type?: "png" | "svg" | "jpeg" | undefined;
143
143
  pixelRatio?: number | undefined;
144
144
  backgroundColor?: import("echarts/types/dist/shared").ZRColor | undefined;
145
145
  excludeComponents?: string[] | undefined;
146
146
  } | undefined) => string;
147
147
  getConnectedDataURL: (opts?: {
148
- type?: "svg" | "png" | "jpeg" | undefined;
148
+ type?: "png" | "svg" | "jpeg" | undefined;
149
149
  pixelRatio?: number | undefined;
150
150
  backgroundColor?: import("echarts/types/dist/shared").ZRColor | undefined;
151
151
  connectedBackgroundColor?: import("echarts/types/dist/shared").ZRColor | undefined;
@@ -138,13 +138,13 @@ export declare const GmChart: import("../../../../utils").SFCWithInstall<import(
138
138
  dataIndexInside?: number | undefined;
139
139
  }, value: number[]) => boolean;
140
140
  getDataURL: (opts?: {
141
- type?: "svg" | "png" | "jpeg" | undefined;
141
+ type?: "png" | "svg" | "jpeg" | undefined;
142
142
  pixelRatio?: number | undefined;
143
143
  backgroundColor?: import("echarts/types/dist/shared.js").ZRColor | undefined;
144
144
  excludeComponents?: string[] | undefined;
145
145
  } | undefined) => string;
146
146
  getConnectedDataURL: (opts?: {
147
- type?: "svg" | "png" | "jpeg" | undefined;
147
+ type?: "png" | "svg" | "jpeg" | undefined;
148
148
  pixelRatio?: number | undefined;
149
149
  backgroundColor?: import("echarts/types/dist/shared.js").ZRColor | undefined;
150
150
  connectedBackgroundColor?: import("echarts/types/dist/shared.js").ZRColor | undefined;
@@ -7,8 +7,8 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{
7
7
  imageSize: NumberConstructor;
8
8
  description: import("element-plus/es/utils").EpPropFinalized<StringConstructor, unknown, unknown, "", boolean>;
9
9
  }>>, {
10
- description: string;
11
10
  image: string;
11
+ description: string;
12
12
  }, {}>, {
13
13
  default?(_: {}): any;
14
14
  image?(_: {}): any;
@@ -9,8 +9,8 @@ export declare const GmEmpty: import("../../../../utils").SFCWithInstall<{
9
9
  imageSize: NumberConstructor;
10
10
  description: import("element-plus/es/utils/index.js").EpPropFinalized<StringConstructor, unknown, unknown, "", boolean>;
11
11
  }>>, {
12
- description: string;
13
12
  image: string;
13
+ description: string;
14
14
  }, true, {}, {}, {
15
15
  P: {};
16
16
  B: {};
@@ -23,8 +23,8 @@ export declare const GmEmpty: import("../../../../utils").SFCWithInstall<{
23
23
  imageSize: NumberConstructor;
24
24
  description: import("element-plus/es/utils/index.js").EpPropFinalized<StringConstructor, unknown, unknown, "", boolean>;
25
25
  }>>, {}, {}, {}, {}, {
26
- description: string;
27
26
  image: string;
27
+ description: string;
28
28
  }>;
29
29
  __isFragment?: undefined;
30
30
  __isTeleport?: undefined;
@@ -34,8 +34,8 @@ export declare const GmEmpty: import("../../../../utils").SFCWithInstall<{
34
34
  imageSize: NumberConstructor;
35
35
  description: import("element-plus/es/utils/index.js").EpPropFinalized<StringConstructor, unknown, unknown, "", boolean>;
36
36
  }>>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, {
37
- description: string;
38
37
  image: string;
38
+ description: string;
39
39
  }, {}, string, {}> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps & (new () => {
40
40
  $slots: {
41
41
  default?(_: {}): any;
@@ -222,7 +222,7 @@ declare const _default: import("vue").DefineComponent<{
222
222
  file: UploadFile;
223
223
  index: number;
224
224
  }) => void;
225
- handleSaveFileSuccess: (file: import("../../../../api/materialApi").PostSaveFileResourcesData) => void;
225
+ handleSaveFileSuccess: (file: import("../../../../utils/src/alioss/aliossPutHook").AliOssResponse) => void;
226
226
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
227
227
  fileList: import("vue").PropType<UploadFiles>;
228
228
  checkoutFiles: import("vue").PropType<any[]>;
@@ -440,7 +440,7 @@ declare const _default: import("vue").DefineComponent<{
440
440
  index: number;
441
441
  }) => any) | undefined;
442
442
  "onUpdate:checkoutFiles"?: ((checkoutFiles: any[]) => any) | undefined;
443
- onHandleSaveFileSuccess?: ((file: import("../../../../api/materialApi").PostSaveFileResourcesData) => any) | undefined;
443
+ onHandleSaveFileSuccess?: ((file: import("../../../../utils/src/alioss/aliossPutHook").AliOssResponse) => any) | undefined;
444
444
  }, {
445
445
  name: string;
446
446
  checkbox: boolean;
@@ -455,10 +455,10 @@ declare const _default: import("vue").DefineComponent<{
455
455
  url: string;
456
456
  method: string;
457
457
  withCredentials: boolean;
458
+ file: Partial<UploadFile>;
458
459
  onError: (error: Error, uploadFile: UploadFile, uploadFiles: UploadFiles) => void;
459
460
  onChange: (uploadFile: UploadFile, uploadFiles: UploadFiles) => void;
460
461
  controls: boolean;
461
- file: Partial<UploadFile>;
462
462
  beforeUpload: (rawFile: UploadRawFile) => import("element-plus/es/utils").Awaitable<boolean | void | Blob | File | null | undefined>;
463
463
  onRemove: (uploadFile: UploadFile, uploadFiles: UploadFiles) => void;
464
464
  onPreview: (uploadFile: UploadFile) => void;
@@ -474,10 +474,10 @@ declare const _default: import("vue").DefineComponent<{
474
474
  field: keyof UploadFile;
475
475
  controlslist: string;
476
476
  oncontextmenu: boolean;
477
+ parallel: number;
477
478
  fileName: string;
478
479
  folder: string;
479
480
  seat: string;
480
- parallel: number;
481
481
  partSize: number;
482
482
  bucket: string;
483
483
  cdn: string;
@@ -222,7 +222,7 @@ export declare const GmUploadMaterial: import("../../../../utils").SFCWithInstal
222
222
  file: import("element-plus").UploadFile;
223
223
  index: number;
224
224
  }) => void;
225
- handleSaveFileSuccess: (file: import("../../../../api/materialApi/index.js").PostSaveFileResourcesData) => void;
225
+ handleSaveFileSuccess: (file: import("../../../../utils/src/alioss/aliossPutHook.js").AliOssResponse) => void;
226
226
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
227
227
  fileList: import("vue").PropType<import("element-plus").UploadFiles>;
228
228
  checkoutFiles: import("vue").PropType<any[]>;
@@ -440,7 +440,7 @@ export declare const GmUploadMaterial: import("../../../../utils").SFCWithInstal
440
440
  index: number;
441
441
  }) => any) | undefined;
442
442
  "onUpdate:checkoutFiles"?: ((checkoutFiles: any[]) => any) | undefined;
443
- onHandleSaveFileSuccess?: ((file: import("../../../../api/materialApi/index.js").PostSaveFileResourcesData) => any) | undefined;
443
+ onHandleSaveFileSuccess?: ((file: import("../../../../utils/src/alioss/aliossPutHook.js").AliOssResponse) => any) | undefined;
444
444
  }, {
445
445
  name: string;
446
446
  checkbox: boolean;
@@ -455,10 +455,10 @@ export declare const GmUploadMaterial: import("../../../../utils").SFCWithInstal
455
455
  url: string;
456
456
  method: string;
457
457
  withCredentials: boolean;
458
+ file: Partial<import("element-plus").UploadFile>;
458
459
  onError: (error: Error, uploadFile: import("element-plus").UploadFile, uploadFiles: import("element-plus").UploadFiles) => void;
459
460
  onChange: (uploadFile: import("element-plus").UploadFile, uploadFiles: import("element-plus").UploadFiles) => void;
460
461
  controls: boolean;
461
- file: Partial<import("element-plus").UploadFile>;
462
462
  beforeUpload: (rawFile: import("element-plus").UploadRawFile) => import("element-plus/es/utils/typescript.js").Awaitable<boolean | void | Blob | File | null | undefined>;
463
463
  onRemove: (uploadFile: import("element-plus").UploadFile, uploadFiles: import("element-plus").UploadFiles) => void;
464
464
  onPreview: (uploadFile: import("element-plus").UploadFile) => void;
@@ -474,10 +474,10 @@ export declare const GmUploadMaterial: import("../../../../utils").SFCWithInstal
474
474
  field: keyof import("element-plus").UploadFile;
475
475
  controlslist: string;
476
476
  oncontextmenu: boolean;
477
+ parallel: number;
477
478
  fileName: string;
478
479
  folder: string;
479
480
  seat: string;
480
- parallel: number;
481
481
  partSize: number;
482
482
  bucket: string;
483
483
  cdn: string;
@@ -1,7 +1,6 @@
1
- import type { PostSaveFileResourcesData } from '../../../../api/materialApi';
2
1
  import type { AliOssResponse } from '../../../../utils/src/alioss/aliossPutHook';
3
2
  export type UploadMaterialResponse = AliOssResponse;
4
- export type SaveFileResourcesFile = PostSaveFileResourcesData;
3
+ export type SaveFileResourcesFile = AliOssResponse;
5
4
  export declare const uploadMaterialProps: {
6
5
  accept: {
7
6
  type: StringConstructor;
@@ -92,11 +91,9 @@ export declare const uploadMaterialProps: {
92
91
  size: {
93
92
  type: NumberConstructor;
94
93
  default: number;
95
- };
96
- /** 文件是否保存入库 */
94
+ }; /** 文件存储路径 */
97
95
  field: {
98
96
  type: import("vue").PropType<keyof import("element-plus").UploadFile>;
99
- /** 文件存储路径 */
100
97
  default: string;
101
98
  };
102
99
  controls: {
@@ -1 +1 @@
1
- {"version":3,"file":"uploadMaterial.js","sources":["../../../../../../../packages/components/src/business/uploadMaterial/uploadMaterial.ts"],"sourcesContent":["import { uploadFileProps } from '../../composite/uploadFile';\r\nimport type { PostSaveFileResourcesData } from '@giime/api/materialApi';\r\nimport type { AliOssResponse } from '@giime/utils/src/alioss/aliossPutHook';\r\n\r\nexport type UploadMaterialResponse = AliOssResponse;\r\n\r\nexport type SaveFileResourcesFile = PostSaveFileResourcesData;\r\n\r\nexport const uploadMaterialProps = {\r\n ...uploadFileProps,\r\n accept: {\r\n type: String,\r\n default: '.jpeg,.png,.jpg,.mp4,.gif,.avi',\r\n },\r\n /** 文件是否保存入库 */\r\n saveStore: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n /** 文件存储路径 */\r\n folder: {\r\n type: String,\r\n default: 'material',\r\n },\r\n};\r\n"],"names":["uploadFileProps"],"mappings":";;;;;AAQO,MAAM,mBAAsB,GAAA;AAAA,EACjC,GAAGA,0BAAA;AAAA,EACH,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,gCAAA;AAAA,GACX;AAAA;AAAA,EAEA,SAAW,EAAA;AAAA,IACT,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,IAAA;AAAA,GACX;AAAA;AAAA,EAEA,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,UAAA;AAAA,GACX;AACF;;;;"}
1
+ {"version":3,"file":"uploadMaterial.js","sources":["../../../../../../../packages/components/src/business/uploadMaterial/uploadMaterial.ts"],"sourcesContent":["import { uploadFileProps } from '../../composite/uploadFile';\r\nimport type { AliOssResponse } from '@giime/utils/src/alioss/aliossPutHook';\r\n\r\nexport type UploadMaterialResponse = AliOssResponse;\r\n\r\nexport type SaveFileResourcesFile = AliOssResponse;\r\n\r\nexport const uploadMaterialProps = {\r\n ...uploadFileProps,\r\n accept: {\r\n type: String,\r\n default: '.jpeg,.png,.jpg,.mp4,.gif,.avi',\r\n },\r\n /** 文件是否保存入库 */\r\n saveStore: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n /** 文件存储路径 */\r\n folder: {\r\n type: String,\r\n default: 'material',\r\n },\r\n};\r\n"],"names":["uploadFileProps"],"mappings":";;;;;AAOO,MAAM,mBAAsB,GAAA;AAAA,EACjC,GAAGA,0BAAA;AAAA,EACH,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,gCAAA;AAAA,GACX;AAAA;AAAA,EAEA,SAAW,EAAA;AAAA,IACT,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,IAAA;AAAA,GACX;AAAA;AAAA,EAEA,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,UAAA;AAAA,GACX;AACF;;;;"}
@@ -60,8 +60,8 @@ declare const _default: import("vue").DefineComponent<{
60
60
  }>>, {
61
61
  size: number;
62
62
  url: string;
63
- controls: boolean;
64
63
  file: Partial<UploadFile>;
64
+ controls: boolean;
65
65
  field: keyof UploadFile;
66
66
  controlslist: string;
67
67
  oncontextmenu: boolean;
@@ -60,8 +60,8 @@ export declare const GmFileComponent: import("../../../../utils").SFCWithInstall
60
60
  }>>, {
61
61
  size: number;
62
62
  url: string;
63
- controls: boolean;
64
63
  file: Partial<import("element-plus").UploadFile>;
64
+ controls: boolean;
65
65
  field: keyof import("element-plus").UploadFile;
66
66
  controlslist: string;
67
67
  oncontextmenu: boolean;
@@ -3,7 +3,7 @@ import type { UploadFile, UploadFiles, UploadRawFile } from 'element-plus';
3
3
  declare function closeDialog(): void;
4
4
  /** 表单重置 */
5
5
  declare function reset(): void;
6
- declare const _default: import("vue").DefineComponent<{
6
+ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{
7
7
  onSuccess: import("element-plus/es/utils").EpPropFinalized<(new (...args: any[]) => (response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) => void) | (() => (response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) => void) | {
8
8
  (): (response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) => void;
9
9
  new (): any;
@@ -111,5 +111,12 @@ declare const _default: import("vue").DefineComponent<{
111
111
  accept: string;
112
112
  httpRequest: import("element-plus").UploadRequestHandler;
113
113
  errorReselect: boolean;
114
- }, {}>;
114
+ }, {}>, {
115
+ default?(_: {}): any;
116
+ }>;
115
117
  export default _default;
118
+ type __VLS_WithTemplateSlots<T, S> = T & {
119
+ new (): {
120
+ $slots: S;
121
+ };
122
+ };
@@ -10,7 +10,7 @@ var iconsVue = require('@element-plus/icons-vue');
10
10
  var importDialog = require('./importDialog.js');
11
11
 
12
12
  const _hoisted_1 = { class: "" };
13
- const _hoisted_2 = { class: "gm-mb-3 gm-bg-[#f5f5f5] gm-p-4" };
13
+ const _hoisted_2 = { class: "gm-mb-2 gm-bg-[#f5f5f5] gm-p-4" };
14
14
  const _hoisted_3 = /* @__PURE__ */ vue.createElementVNode(
15
15
  "p",
16
16
  { class: "gm-mb-3 gm-text-[13px]" },
@@ -151,6 +151,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
151
151
  /* STABLE */
152
152
  }, 8, ["icon"])
153
153
  ]),
154
+ vue.renderSlot(_ctx.$slots, "default"),
154
155
  vue.createVNode(_component_gm_upload, {
155
156
  ref_key: "uploadRef",
156
157
  ref: uploadRef,
@@ -184,8 +185,8 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
184
185
  }, 8, ["file-list", "accept", "before-upload"])
185
186
  ])
186
187
  ]),
187
- _: 1
188
- /* STABLE */
188
+ _: 3
189
+ /* FORWARDED */
189
190
  }, 8, ["modelValue"])
190
191
  ],
191
192
  2112
@@ -1 +1 @@
1
- {"version":3,"file":"ImportDialog.vue2.js","sources":["../../../../../../../packages/components/src/composite/importDialog/ImportDialog.vue"],"sourcesContent":["<template>\r\n <!-- 导入对话框 -->\r\n <gm-dialog v-model=\"dialogVisible\" title=\"导入\" width=\"480px\" append-to-body>\r\n <div class=\" \">\r\n <div class=\"gm-mb-3 gm-bg-[#f5f5f5] gm-p-4\">\r\n <p class=\"gm-mb-3 gm-text-[13px]\">下载导入模板,根据模板提示完善内容</p>\r\n <gm-button :icon=\"Download\" @click.stop=\"emit('downloadTemplate')\"> 下载模板 </gm-button>\r\n </div>\r\n <gm-upload\r\n ref=\"uploadRef\"\r\n v-model:file-list=\"fileList\"\r\n action=\"\"\r\n :limit=\"1\"\r\n drag\r\n :accept=\"accept\"\r\n :http-request=\"httpRequest\"\r\n :on-exceed=\"handleExceed\"\r\n :on-success=\"handleSuccess\"\r\n :on-error=\"handleError\"\r\n :before-upload=\"beforeUpload\"\r\n :auto-upload=\"false\"\r\n class=\"gmUploadEl gm-mb-5\"\r\n >\r\n <el-icon class=\"el-icon--upload\"><upload-filled /></el-icon>\r\n <div class=\"el-upload__text\">将文件拖到此处,或 <em>点击上传</em></div>\r\n <div class=\"gm-text-[#999]\">限制1个文件,新文件将覆盖旧文件</div>\r\n </gm-upload>\r\n </div>\r\n\r\n <template #footer>\r\n <div class=\"dialog-footer\">\r\n <gm-button type=\"primary\" :loading=\"uploadLoading\" @click=\"submitUpload\">导 入</gm-button>\r\n <gm-button @click=\"closeDialog\">取 消</gm-button>\r\n </div>\r\n </template>\r\n </gm-dialog>\r\n</template>\r\n<script lang=\"ts\" setup>\r\nimport { ref } from 'vue';\r\nimport { genFileId } from 'element-plus';\r\nimport { getGmExports } from '@giime/utils/src/elementPlus/exports';\r\nimport { GmMessage } from '@giime/components/src/plugins/message';\r\nimport { Download, UploadFilled } from '@element-plus/icons-vue';\r\nimport { importDialogEmits, importDialogProps } from './importDialog';\r\nimport type { UploadInstance } from '../../base/upload';\r\nimport type { UploadFile, UploadFiles, UploadProps, UploadRawFile, UploadRequestOptions, UploadUserFile } from 'element-plus';\r\n\r\ndefineOptions({\r\n name: 'GmImportDialog',\r\n});\r\nconst props = defineProps(importDialogProps);\r\nconst emit = defineEmits(importDialogEmits);\r\n\r\nconst fileList = ref<UploadUserFile[]>([]);\r\nconst uploadRef = ref<UploadInstance>();\r\n\r\nconst handleExceed: UploadProps['onExceed'] = files => {\r\n uploadRef.value!.clearFiles();\r\n const file = files[0] as UploadRawFile;\r\n file.uid = genFileId();\r\n uploadRef.value!.handleStart(file);\r\n};\r\n\r\nconst submitUpload = () => {\r\n if (fileList.value.length === 0) {\r\n return GmMessage.error('请选择文件');\r\n }\r\n uploadRef.value!.submit();\r\n};\r\n/**\r\n * 编辑表单\r\n */\r\n// const dialogVisible = defineModel<boolean>('dialogVisible', { required: true });\r\nconst dialogVisible = ref(false);\r\n\r\n/** 新增按钮操作 */\r\nconst openDialog = () => {\r\n dialogVisible.value = true;\r\n};\r\n/** 取消按钮 */\r\nfunction closeDialog() {\r\n dialogVisible.value = false;\r\n reset();\r\n}\r\n/** 表单重置 */\r\nfunction reset() {\r\n fileList.value = [];\r\n}\r\n\r\nconst uploadLoading = ref(false);\r\nconst httpRequest = (options: UploadRequestOptions) => {\r\n uploadLoading.value = true;\r\n return props.httpRequest(options);\r\n};\r\n// 上传成功\r\nfunction handleSuccess(response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) {\r\n uploadLoading.value = false;\r\n return props.onSuccess(response, uploadFile, uploadFiles);\r\n}\r\n// 上传失败\r\nconst handleError = (error: Error, uploadFile: UploadFile, uploadFiles: UploadFiles) => {\r\n const file = uploadFile.raw;\r\n if (props.errorReselect && file) {\r\n file.uid = genFileId();\r\n uploadRef.value?.handleStart(file);\r\n }\r\n uploadLoading.value = false;\r\n return props.onError(error, uploadFile, uploadFiles);\r\n};\r\n\r\nconst exposeNames = ['abort', 'submit', 'clearFiles', 'handleStart', 'handleRemove'] as const;\r\nconst { exposeFns } = getGmExports(uploadRef, exposeNames);\r\ndefineExpose({\r\n openDialog,\r\n closeDialog,\r\n reset,\r\n ...exposeFns,\r\n});\r\n</script>\r\n<!-- <style scoped lang=\"scss\">\r\n:deep(.gmUploadEl .el-upload-dragger) {\r\n // background-color: #f5f5f5;\r\n // border: none;\r\n}\r\n</style> -->\r\n"],"names":["ref","genFileId","GmMessage","getGmExports"],"mappings":"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"}
1
+ {"version":3,"file":"ImportDialog.vue2.js","sources":["../../../../../../../packages/components/src/composite/importDialog/ImportDialog.vue"],"sourcesContent":["<template>\n <!-- 导入对话框 -->\n <gm-dialog v-model=\"dialogVisible\" title=\"导入\" width=\"480px\" append-to-body>\n <div class=\" \">\n <div class=\"gm-mb-2 gm-bg-[#f5f5f5] gm-p-4\">\n <p class=\"gm-mb-3 gm-text-[13px]\">下载导入模板,根据模板提示完善内容</p>\n <gm-button :icon=\"Download\" @click.stop=\"emit('downloadTemplate')\"> 下载模板 </gm-button>\n </div>\n <slot />\n <gm-upload\n ref=\"uploadRef\"\n v-model:file-list=\"fileList\"\n action=\"\"\n :limit=\"1\"\n drag\n :accept=\"accept\"\n :http-request=\"httpRequest\"\n :on-exceed=\"handleExceed\"\n :on-success=\"handleSuccess\"\n :on-error=\"handleError\"\n :before-upload=\"beforeUpload\"\n :auto-upload=\"false\"\n class=\"gmUploadEl gm-mb-5\"\n >\n <el-icon class=\"el-icon--upload\"><upload-filled /></el-icon>\n <div class=\"el-upload__text\">将文件拖到此处,或 <em>点击上传</em></div>\n <div class=\"gm-text-[#999]\">限制1个文件,新文件将覆盖旧文件</div>\n </gm-upload>\n </div>\n\n <template #footer>\n <div class=\"dialog-footer\">\n <gm-button type=\"primary\" :loading=\"uploadLoading\" @click=\"submitUpload\">导 入</gm-button>\n <gm-button @click=\"closeDialog\">取 消</gm-button>\n </div>\n </template>\n </gm-dialog>\n</template>\n<script lang=\"ts\" setup>\nimport { ref } from 'vue';\nimport { genFileId } from 'element-plus';\nimport { getGmExports } from '@giime/utils/src/elementPlus/exports';\nimport { GmMessage } from '@giime/components/src/plugins/message';\nimport { Download, UploadFilled } from '@element-plus/icons-vue';\nimport { importDialogEmits, importDialogProps } from './importDialog';\nimport type { UploadInstance } from '../../base/upload';\nimport type { UploadFile, UploadFiles, UploadProps, UploadRawFile, UploadRequestOptions, UploadUserFile } from 'element-plus';\n\ndefineOptions({\n name: 'GmImportDialog',\n});\nconst props = defineProps(importDialogProps);\nconst emit = defineEmits(importDialogEmits);\n\nconst fileList = ref<UploadUserFile[]>([]);\nconst uploadRef = ref<UploadInstance>();\n\nconst handleExceed: UploadProps['onExceed'] = files => {\n uploadRef.value!.clearFiles();\n const file = files[0] as UploadRawFile;\n file.uid = genFileId();\n uploadRef.value!.handleStart(file);\n};\n\nconst submitUpload = () => {\n if (fileList.value.length === 0) {\n return GmMessage.error('请选择文件');\n }\n uploadRef.value!.submit();\n};\n/**\n * 编辑表单\n */\n// const dialogVisible = defineModel<boolean>('dialogVisible', { required: true });\nconst dialogVisible = ref(false);\n\n/** 新增按钮操作 */\nconst openDialog = () => {\n dialogVisible.value = true;\n};\n/** 取消按钮 */\nfunction closeDialog() {\n dialogVisible.value = false;\n reset();\n}\n/** 表单重置 */\nfunction reset() {\n fileList.value = [];\n}\n\nconst uploadLoading = ref(false);\nconst httpRequest = (options: UploadRequestOptions) => {\n uploadLoading.value = true;\n return props.httpRequest(options);\n};\n// 上传成功\nfunction handleSuccess(response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) {\n uploadLoading.value = false;\n return props.onSuccess(response, uploadFile, uploadFiles);\n}\n// 上传失败\nconst handleError = (error: Error, uploadFile: UploadFile, uploadFiles: UploadFiles) => {\n const file = uploadFile.raw;\n if (props.errorReselect && file) {\n file.uid = genFileId();\n uploadRef.value?.handleStart(file);\n }\n uploadLoading.value = false;\n return props.onError(error, uploadFile, uploadFiles);\n};\n\nconst exposeNames = ['abort', 'submit', 'clearFiles', 'handleStart', 'handleRemove'] as const;\nconst { exposeFns } = getGmExports(uploadRef, exposeNames);\ndefineExpose({\n openDialog,\n closeDialog,\n reset,\n ...exposeFns,\n});\n</script>\n<!-- <style scoped lang=\"scss\">\n:deep(.gmUploadEl .el-upload-dragger) {\n // background-color: #f5f5f5;\n // border: none;\n}\n</style> -->\n"],"names":["ref","genFileId","GmMessage","getGmExports"],"mappings":"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"}