giime 0.6.36 → 0.6.37

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 (62) hide show
  1. package/dist/index.css +141 -141
  2. package/es/components/src/base/datePicker/DatePicker.vue.d.ts +3 -3
  3. package/es/components/src/base/datePicker/datePicker.d.ts +1 -1
  4. package/es/components/src/base/datePicker/index.d.ts +7 -7
  5. package/es/components/src/business/uploadPro/UploadPro.vue.mjs +1 -1
  6. package/es/components/src/business/uploadPro/UploadPro.vue2.mjs +38 -6
  7. package/es/components/src/business/uploadPro/UploadPro.vue2.mjs.map +1 -1
  8. package/es/components/src/business/uploadPro/uploadPro.mjs +1 -1
  9. package/es/components/src/business/uploadPro/uploadPro.mjs.map +1 -1
  10. package/es/components/src/composite/searchForm/searchFormItems/datePicker/SearchFormDatePicker.vue.d.ts +2 -5
  11. package/es/components/src/composite/searchForm/searchFormItems/datePicker/SearchFormDatePicker.vue2.mjs +6 -2
  12. package/es/components/src/composite/searchForm/searchFormItems/datePicker/SearchFormDatePicker.vue2.mjs.map +1 -1
  13. package/es/components/src/composite/searchForm/searchFormItems/datePicker/index.d.ts +2 -5
  14. package/es/components/src/composite/searchForm/searchFormItems/datePicker/searchFormDatePicker.d.ts +1 -2
  15. package/es/components/src/composite/searchForm/searchFormItems/datePicker/searchFormDatePicker.mjs +2 -2
  16. package/es/components/src/composite/searchForm/searchFormItems/datePicker/searchFormDatePicker.mjs.map +1 -1
  17. package/es/giime/index.mjs +1 -0
  18. package/es/giime/index.mjs.map +1 -1
  19. package/es/giime/version.d.ts +1 -1
  20. package/es/hooks/base/useUploadFile/index.d.ts +8 -1
  21. package/es/hooks/base/useUploadFile/index.mjs +32 -1
  22. package/es/hooks/base/useUploadFile/index.mjs.map +1 -1
  23. package/es/index.css +141 -141
  24. package/es/utils/index.mjs +1 -0
  25. package/es/utils/index.mjs.map +1 -1
  26. package/es/utils/src/date/dateShortcuts.d.ts +2 -2
  27. package/es/utils/src/date/dateShortcuts.mjs +87 -82
  28. package/es/utils/src/date/dateShortcuts.mjs.map +1 -1
  29. package/es/utils/src/file.d.ts +1 -0
  30. package/es/utils/src/file.mjs +1 -0
  31. package/es/utils/src/file.mjs.map +1 -1
  32. package/lib/components/src/base/datePicker/DatePicker.vue.d.ts +3 -3
  33. package/lib/components/src/base/datePicker/datePicker.d.ts +1 -1
  34. package/lib/components/src/base/datePicker/index.d.ts +7 -7
  35. package/lib/components/src/business/uploadPro/UploadPro.vue.js +1 -1
  36. package/lib/components/src/business/uploadPro/UploadPro.vue2.js +38 -6
  37. package/lib/components/src/business/uploadPro/UploadPro.vue2.js.map +1 -1
  38. package/lib/components/src/business/uploadPro/uploadPro.js +1 -1
  39. package/lib/components/src/business/uploadPro/uploadPro.js.map +1 -1
  40. package/lib/components/src/composite/searchForm/searchFormItems/datePicker/SearchFormDatePicker.vue.d.ts +2 -5
  41. package/lib/components/src/composite/searchForm/searchFormItems/datePicker/SearchFormDatePicker.vue2.js +6 -2
  42. package/lib/components/src/composite/searchForm/searchFormItems/datePicker/SearchFormDatePicker.vue2.js.map +1 -1
  43. package/lib/components/src/composite/searchForm/searchFormItems/datePicker/index.d.ts +2 -5
  44. package/lib/components/src/composite/searchForm/searchFormItems/datePicker/searchFormDatePicker.d.ts +1 -2
  45. package/lib/components/src/composite/searchForm/searchFormItems/datePicker/searchFormDatePicker.js +2 -2
  46. package/lib/components/src/composite/searchForm/searchFormItems/datePicker/searchFormDatePicker.js.map +1 -1
  47. package/lib/giime/index.js +5 -0
  48. package/lib/giime/index.js.map +1 -1
  49. package/lib/giime/version.d.ts +1 -1
  50. package/lib/hooks/base/useUploadFile/index.d.ts +8 -1
  51. package/lib/hooks/base/useUploadFile/index.js +32 -1
  52. package/lib/hooks/base/useUploadFile/index.js.map +1 -1
  53. package/lib/index.css +141 -141
  54. package/lib/utils/index.js +5 -0
  55. package/lib/utils/index.js.map +1 -1
  56. package/lib/utils/src/date/dateShortcuts.d.ts +2 -2
  57. package/lib/utils/src/date/dateShortcuts.js +87 -82
  58. package/lib/utils/src/date/dateShortcuts.js.map +1 -1
  59. package/lib/utils/src/file.d.ts +1 -0
  60. package/lib/utils/src/file.js +5 -0
  61. package/lib/utils/src/file.js.map +1 -1
  62. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"UploadPro.vue2.mjs","sources":["../../../../../../../packages/components/src/business/uploadPro/UploadPro.vue"],"sourcesContent":["<template>\n <div>\n <div\n v-loading=\"uploadLoading\"\n ref=\"pasteFileRef\"\n :class=\"{ 'gm-upload-pro-file-picture-card': listType === 'picture-card', 'gm-upload-pro-file-disabled': disabled }\"\n class=\"gm-upload-pro-file\"\n >\n <el-checkbox-group v-model=\"checkoutFiles\">\n <el-upload\n ref=\"uploadFileRef\"\n v-bind=\"props\"\n v-model:file-list=\"fileList\"\n :before-remove=\"beforeRemove\"\n action=\"\"\n :http-request=\"httpRequest\"\n :on-success=\"coverFileSuccess\"\n :on-error=\"coverFileError\"\n >\n <slot v-if=\"!disabled\">\n <template v-if=\"listType === 'picture-card'\">\n <div\n class=\"gm-flex gm-flex-col gm-items-center gm-justify-center gm-rounded-md gm-border gm-border-dashed gm-p-1\"\n style=\"flex-direction: column\"\n :style=\"{ width: width + 'px', height: height + 'px' }\"\n >\n <el-icon :size=\"30\" color=\"#999\">\n <UploadFilled />\n </el-icon>\n <div class=\"el-upload__text gm-text-center !gm-text-xs gm-text-gray-500\">\n 将文件拖到此处,复制粘贴,或 <em class=\"gm-text-blue-700\">点击上传</em>\n </div>\n </div>\n </template>\n <template v-else>\n <el-button type=\"primary\" size=\"default\">点击上传</el-button>\n </template>\n </slot>\n <template v-if=\"showFileList && listType === 'picture-card'\" #file=\"{ file }\">\n <el-checkbox v-if=\"checkbox\" :value=\"file\" />\n <slot name=\"file\" :file=\"file\">\n <div class=\"gm-flex gm-items-center gm-justify-center gm-rounded-md\" :style=\"{ width: width + 'px', height: height + 'px' }\">\n <GmFileComponent :file=\"file\" :size=\"width - 40\" :controls=\"false\" :show-icon=\"true\" />\n </div>\n <div class=\"el-upload-list__item-actions\">\n <span class=\"el-upload-list__item-preview\" @click=\"handlePreview(file)\">\n <el-icon><View /></el-icon>\n </span>\n <span v-if=\"showDelete\" class=\"el-upload-list__item-delete\" @click=\"handleRemove(file, fileList)\">\n <el-icon><Delete /></el-icon>\n </span>\n </div>\n </slot>\n </template>\n <template v-else #file=\"slotValue\">\n <slot name=\"file\" v-bind=\"slotValue\" />\n </template>\n <template v-if=\"slots.trigger\" #trigger>\n <slot name=\"trigger\" />\n </template>\n <template v-if=\"slots.tip\" #tip>\n <div class=\"gm-text-sm\">\n <slot name=\"tip\" />\n </div>\n </template>\n </el-upload>\n </el-checkbox-group>\n\n <GmPreviewFile v-model:dialogVisible=\"dialogVisible\" v-model:file-index=\"fileIndex\" :file-list=\"fileList\" />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ElMessageBox } from 'element-plus';\nimport { computed, ref, useSlots } from 'vue';\n// import { fileValidType } from '@giime/utils/src/file';\n// import { pasteFile } from '@giime/utils/src/pasteFile';\nimport { usePasteFile } from '@giime/hooks/base/usePasteFile';\nimport { GmConfirmBox } from '@giime/components/src/plugins/confirmBox';\nimport { Delete, UploadFilled, View } from '@element-plus/icons-vue';\nimport GmFileComponent from '../../composite/fileComponent';\nimport GmPreviewFile from '../../composite/previewFile';\nimport { GmUploadProUserFileResponse, uploadFileProps } from './uploadPro';\nimport type { UploadFile, UploadFiles, UploadInstance, UploadProps, UploadRawFile } from 'element-plus';\nimport { getGmExports } from '@giime/utils/src/elementPlus/exports';\nimport { useUploadFile } from '@giime/hooks/base/useUploadFile';\n\ndefineOptions({\n name: 'GmUploadPro',\n});\nconst slots = useSlots();\n\nconst props = defineProps(uploadFileProps);\nconst emit = defineEmits([\"handleRemove\"]);\n\n/** 上传文件 */\nconst fileList = defineModel<UploadFile[]>('fileList', { required: true });\n/** 多选数据 */\nconst checkoutFiles = defineModel<any[]>('checkoutFiles', { default: () => [] });\n\n/**上传功能 */\nconst { uploadFile } = useUploadFile();\n\nconst loadingUids = ref<Set<number>>(new Set());\nconst uploadLoading = computed(() => props.showLoading && loadingUids.value.size > 0);\n\n/* 上传 */\nconst httpRequest: UploadProps['httpRequest'] = async options => {\n loadingUids.value.add(options.file.uid);\n return uploadFile(options.file, { domainCode: props.domainCode, sceneCode: props.sceneCode, accept: props.accept, acl: props.acl });\n};\n// 上传成功\nconst coverFileSuccess: UploadProps['onSuccess'] = (response: GmUploadProUserFileResponse, uploadFile, uploadFiles) => {\n loadingUids.value.delete(uploadFile.uid);\n props.onSuccess?.(response, uploadFile, uploadFiles);\n};\n// 上传失败\nconst coverFileError: UploadProps['onError'] = (error, uploadFile, uploadFiles) => {\n loadingUids.value.delete(uploadFile.uid);\n props.onError?.(error, uploadFile, uploadFiles);\n};\n\n/* 删除文件前 */\nconst beforeRemove: UploadProps['beforeRemove'] = (file, files) => {\n if (props.disabled) {\n return false;\n }\n return props.beforeRemove?.(file, files) ?? true;\n};\n\n/* 删除文件 */\nconst removeFile = (file: UploadFile, uploadFiles: UploadFiles) => {\n const index = fileList.value.indexOf(file);\n if (index > -1) {\n fileList.value.splice(index, 1);\n emit('handleRemove', { file, index });\n return props.onRemove?.(file, uploadFiles);\n }\n};\n/**点击删除图标 */\nconst handleRemove = async (file: UploadFile, uploadFiles: UploadFiles) => {\n if (props.deleteTip) {\n await GmConfirmBox({ message: '确定删除该文件吗?' }, async () => {});\n }\n\n removeFile(file, uploadFiles);\n};\n\nconst uploadFileRef = ref<UploadInstance>();\nconst exposeEvents = ['abort', 'submit', 'clearFiles', 'handleStart', 'handleRemove'] as const;\nconst { exposeFns } = getGmExports(uploadFileRef, exposeEvents);\n\nconst pasteFileRef = ref<HTMLElement>();\n\n/** 预览 */\nconst dialogVisible = ref(false);\nconst fileIndex = ref(0);\n/**点击预览 */\nconst handlePreview = (file: UploadFile) => {\n fileIndex.value = fileList.value.indexOf(file);\n dialogVisible.value = true;\n};\n\n//** 复制粘贴 */\nconst { onSuccess, onError } = usePasteFile(pasteFileRef, { accept: props.accept, disabled: props.disabled });\nonSuccess((files: File[]) => {\n if (props.disabled) {\n return;\n }\n if (Array.isArray(files) && files.length > 0) {\n files.forEach(file => {\n if (file instanceof File) {\n const rawFile = file as UploadRawFile;\n uploadFileRef.value?.handleStart(rawFile);\n\n // 粘贴成功自动上传\n if (props.autoUpload) {\n uploadFileRef.value?.submit();\n }\n }\n });\n }\n});\n/**粘贴失败 */\nonError((error: Error) => {\n console.error('粘贴错误:', error);\n ElMessageBox.alert(error.message, '提示', {\n type: 'error',\n });\n});\ndefineExpose({\n ...exposeFns,\n uploadFileRef,\n});\n</script>\n\n<style scoped lang=\"scss\">\n.gm-upload-pro-preview-dialog {\n :deep(.el-dialog__body) {\n padding: 0;\n }\n}\n.gm-upload-pro-file-picture-card {\n :deep(.el-upload-list__item),\n :deep(.el-upload--picture-card) {\n width: auto;\n height: auto;\n }\n}\n</style>\n<style lang=\"scss\">\n.gm-upload-pro-file {\n line-height: normal;\n .el-checkbox-group {\n font-size: unset;\n }\n .el-checkbox {\n position: absolute;\n left: 10px;\n top: 0;\n z-index: 9;\n }\n .el-upload-list--picture-card {\n gap: 10px;\n }\n .el-upload-list__item {\n margin: 0;\n }\n .el-upload-list__item-file-name {\n line-height: 1.7;\n }\n .el-upload-dragger {\n padding: 0;\n border: none;\n width: 100%;\n height: 100%;\n display: flex;\n }\n .el-upload--picture-card {\n border: none;\n }\n}\n.gm-upload-pro-file-disabled {\n .el-upload--picture-card {\n display: none;\n }\n .el-upload-list__item-status-label {\n display: none;\n }\n}\n</style>\n"],"names":["_useModel","uploadFile"],"mappings":"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"}
1
+ {"version":3,"file":"UploadPro.vue2.mjs","sources":["../../../../../../../packages/components/src/business/uploadPro/UploadPro.vue"],"sourcesContent":["<template>\n <div>\n <div\n v-loading=\"uploadLoading\"\n ref=\"pasteFileRef\"\n :class=\"{ 'gm-upload-pro-file-picture-card': listType === 'picture-card', 'gm-upload-pro-file-disabled': disabled }\"\n class=\"gm-upload-pro-file\"\n >\n <el-checkbox-group v-model=\"checkoutFiles\">\n <el-upload\n ref=\"uploadFileRef\"\n v-bind=\"props\"\n v-model:file-list=\"fileList\"\n :before-remove=\"beforeRemove\"\n action=\"\"\n :http-request=\"httpRequest\"\n :on-success=\"coverFileSuccess\"\n :on-error=\"coverFileError\"\n >\n <slot v-if=\"!disabled\">\n <template v-if=\"listType === 'picture-card'\">\n <div\n class=\"gm-flex gm-flex-col gm-items-center gm-justify-center gm-rounded-md gm-border gm-border-dashed gm-p-1\"\n style=\"flex-direction: column\"\n :style=\"{ width: width + 'px', height: height + 'px' }\"\n >\n <el-icon :size=\"30\" color=\"#999\">\n <UploadFilled />\n </el-icon>\n <div class=\"el-upload__text gm-text-center !gm-text-xs gm-text-gray-500\">\n 将文件拖到此处,复制粘贴,或 <em class=\"gm-text-blue-700\">点击上传</em>\n </div>\n </div>\n </template>\n <template v-else>\n <el-button type=\"primary\" size=\"default\">点击上传</el-button>\n </template>\n </slot>\n <template v-if=\"showFileList && listType === 'picture-card'\" #file=\"{ file }\">\n <el-checkbox v-if=\"checkbox\" :value=\"file\" />\n\n <slot name=\"file\" :file=\"file\">\n <div class=\"gm-flex gm-items-center gm-justify-center gm-rounded-md\" :style=\"{ width: width + 'px', height: height + 'px' }\">\n <el-progress\n v-if=\"file.status === 'uploading' || loadingUids.has(file.uid)\"\n :type=\"listType === 'picture-card' ? 'circle' : 'line'\"\n :stroke-width=\"listType === 'picture-card' ? 6 : 2\"\n :percentage=\"Number(file.percentage)\"\n :style=\"\n listType === 'picture-card'\n ? {\n width: width - 20 + 'px',\n height: width - 20 + 'px',\n }\n : 'margin-top: 0.5rem'\n \"\n :width=\"width - 20\"\n />\n\n <GmFileComponent v-else :file=\"file\" :size=\"width - 40\" :controls=\"false\" :show-icon=\"true\" />\n </div>\n <div class=\"el-upload-list__item-actions\">\n <span class=\"el-upload-list__item-preview\" @click=\"handlePreview(file)\">\n <el-icon><View /></el-icon>\n </span>\n <span v-if=\"showDelete\" class=\"el-upload-list__item-delete\" @click=\"handleRemove(file, fileList)\">\n <el-icon><Delete /></el-icon>\n </span>\n </div>\n </slot>\n </template>\n <template v-else #file=\"slotValue\">\n <slot name=\"file\" v-bind=\"slotValue\" />\n </template>\n <template v-if=\"slots.trigger\" #trigger>\n <slot name=\"trigger\" />\n </template>\n <template v-if=\"slots.tip\" #tip>\n <div class=\"gm-text-sm\">\n <slot name=\"tip\" />\n </div>\n </template>\n </el-upload>\n </el-checkbox-group>\n\n <GmPreviewFile v-model:dialogVisible=\"dialogVisible\" v-model:file-index=\"fileIndex\" :file-list=\"fileList\" />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ElMessageBox } from 'element-plus';\nimport { computed, ref, useSlots } from 'vue';\n// import { fileValidType } from '@giime/utils/src/file';\n// import { pasteFile } from '@giime/utils/src/pasteFile';\nimport { usePasteFile } from '@giime/hooks/base/usePasteFile';\nimport { GmConfirmBox } from '@giime/components/src/plugins/confirmBox';\nimport { Delete, UploadFilled, View } from '@element-plus/icons-vue';\nimport GmFileComponent from '../../composite/fileComponent';\nimport GmPreviewFile from '../../composite/previewFile';\nimport { GmUploadProUserFileResponse, uploadFileProps } from './uploadPro';\nimport type { UploadFile, UploadFiles, UploadInstance, UploadProps, UploadRawFile } from 'element-plus';\nimport { getGmExports } from '@giime/utils/src/elementPlus/exports';\nimport { useUploadFile } from '@giime/hooks/base/useUploadFile';\n\ndefineOptions({\n name: 'GmUploadPro',\n});\nconst slots = useSlots();\n\nconst props = defineProps(uploadFileProps);\nconst emit = defineEmits([\"handleRemove\"]);\n\n/** 上传文件 */\nconst fileList = defineModel<UploadFile[]>('fileList', { required: true });\n/** 多选数据 */\nconst checkoutFiles = defineModel<any[]>('checkoutFiles', { default: () => [] });\n/**上传功能 */\nconst { uploadFile, cancelUpload } = useUploadFile();\n\nconst loadingUids = ref<Set<number>>(new Set());\nconst uploadLoading = computed(() => props.showLoading && loadingUids.value.size > 0);\n\n/* 上传 */\nconst httpRequest: UploadProps['httpRequest'] = async options => {\n loadingUids.value.add(options.file.uid);\n return uploadFile(options.file, {\n domainCode: props.domainCode,\n sceneCode: props.sceneCode,\n accept: props.accept,\n acl: props.acl,\n elOptions: options,\n });\n};\n// 上传成功\nconst coverFileSuccess: UploadProps['onSuccess'] = (response: GmUploadProUserFileResponse, uploadFile, uploadFiles) => {\n loadingUids.value.delete(uploadFile.uid);\n props.onSuccess?.(response, uploadFile, uploadFiles);\n};\n// 上传失败\nconst coverFileError: UploadProps['onError'] = (error, uploadFile, uploadFiles) => {\n loadingUids.value.delete(uploadFile.uid);\n props.onError?.(error, uploadFile, uploadFiles);\n};\n\n/* 删除文件前 */\nconst beforeRemove: UploadProps['beforeRemove'] = async (file, files) => {\n if (props.disabled) {\n return false;\n }\n if (props.deleteTip) {\n await GmConfirmBox({ message: '确定删除该文件吗?' }, async () => {});\n }\n // 如果文件正在上传,取消上传请求\n if (file.status === 'uploading' || loadingUids.value.has(file.uid)) {\n cancelUpload(file.uid);\n loadingUids.value.delete(file.uid);\n }\n return props.beforeRemove?.(file, files) ?? true;\n};\n\n/* 删除文件 */\nconst removeFile = (file: UploadFile, uploadFiles: UploadFiles) => {\n // 如果文件正在上传,取消上传请求\n if (file.status === 'uploading' || loadingUids.value.has(file.uid)) {\n cancelUpload(file.uid);\n loadingUids.value.delete(file.uid);\n }\n\n const index = fileList.value.indexOf(file);\n if (index > -1) {\n fileList.value.splice(index, 1);\n emit('handleRemove', { file, index });\n return props.onRemove?.(file, uploadFiles);\n }\n};\n/**点击删除图标 */\nconst handleRemove = async (file: UploadFile, uploadFiles: UploadFiles) => {\n if (props.deleteTip) {\n await GmConfirmBox({ message: '确定删除该文件吗?' }, async () => {});\n }\n\n removeFile(file, uploadFiles);\n};\n\nconst uploadFileRef = ref<UploadInstance>();\nconst exposeEvents = ['abort', 'submit', 'clearFiles', 'handleStart', 'handleRemove'] as const;\nconst { exposeFns } = getGmExports(uploadFileRef, exposeEvents);\n\nconst pasteFileRef = ref<HTMLElement>();\n\n/** 预览 */\nconst dialogVisible = ref(false);\nconst fileIndex = ref(0);\n/**点击预览 */\nconst handlePreview = (file: UploadFile) => {\n fileIndex.value = fileList.value.indexOf(file);\n dialogVisible.value = true;\n};\n\n//** 复制粘贴 */\nconst { onSuccess, onError } = usePasteFile(pasteFileRef, { accept: props.accept, disabled: props.disabled });\nonSuccess((files: File[]) => {\n if (props.disabled) {\n return;\n }\n if (Array.isArray(files) && files.length > 0) {\n files.forEach(file => {\n if (file instanceof File) {\n const rawFile = file as UploadRawFile;\n uploadFileRef.value?.handleStart(rawFile);\n\n // 粘贴成功自动上传\n if (props.autoUpload) {\n uploadFileRef.value?.submit();\n }\n }\n });\n }\n});\n/**粘贴失败 */\nonError((error: Error) => {\n console.error('粘贴错误:', error);\n ElMessageBox.alert(error.message, '提示', {\n type: 'error',\n });\n});\ndefineExpose({\n ...exposeFns,\n uploadFileRef,\n});\n</script>\n\n<style scoped lang=\"scss\">\n.gm-upload-pro-preview-dialog {\n :deep(.el-dialog__body) {\n padding: 0;\n }\n}\n.gm-upload-pro-file-picture-card {\n :deep(.el-upload-list__item),\n :deep(.el-upload--picture-card) {\n width: auto;\n height: auto;\n }\n}\n</style>\n<style lang=\"scss\">\n.gm-upload-pro-file {\n line-height: normal;\n .el-checkbox-group {\n font-size: unset;\n }\n .el-checkbox {\n position: absolute;\n left: 10px;\n top: 0;\n z-index: 9;\n }\n .el-upload-list--picture-card {\n gap: 10px;\n }\n .el-upload-list__item {\n margin: 0;\n }\n .el-upload-list__item-file-name {\n line-height: 1.7;\n }\n .el-upload-dragger {\n padding: 0;\n border: none;\n width: 100%;\n height: 100%;\n display: flex;\n }\n .el-upload--picture-card {\n border: none;\n }\n}\n.gm-upload-pro-file-disabled {\n .el-upload--picture-card {\n display: none;\n }\n .el-upload-list__item-status-label {\n display: none;\n }\n}\n</style>\n"],"names":["_useModel","uploadFile"],"mappings":"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"}
@@ -28,7 +28,7 @@ const uploadFileProps = {
28
28
  /**上传中是否loading */
29
29
  showLoading: {
30
30
  type: Boolean,
31
- default: true
31
+ default: false
32
32
  },
33
33
  /** 是否展示删除按钮 */
34
34
  showDelete: {
@@ -1 +1 @@
1
- {"version":3,"file":"uploadPro.mjs","sources":["../../../../../../../packages/components/src/business/uploadPro/uploadPro.ts"],"sourcesContent":["import { type PropType } from 'vue';\nimport { type UploadFile, type UploadProps, uploadProps, type UploadUserFile } from 'element-plus';\nimport type { ResourceUrlResponse } from '@giime/api/resource/interface';\n// import { previewFileProps } from '../../composite/previewFile/previewFile';\n\nexport const uploadFileProps = {\n ...uploadProps,\n // ...previewFileProps,\n listType: {\n type: String as PropType<UploadProps['listType']>,\n default: 'picture-card',\n },\n drag: {\n type: Boolean,\n default: true,\n },\n /**领域编码 */\n domainCode: {\n type: String,\n },\n /**场景编码 */\n sceneCode: {\n type: String,\n default: 'internal_oss',\n },\n /** 文件权限,默认继承桶 */\n acl: {\n type: String,\n default: 'default',\n },\n /**上传中是否loading */\n showLoading: {\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: false,\n },\n /** 缩略图宽度 */\n width: {\n type: Number,\n default: 120,\n },\n /** 缩略图高度 */\n height: {\n type: Number,\n default: 120,\n },\n};\nexport type GmUploadProUserFileResponse = ResourceUrlResponse;\n\nexport type GmUploadProUserFile = Omit<UploadUserFile, 'response'> & { response?: GmUploadProUserFileResponse };\n"],"names":[],"mappings":";;AAKO,MAAM,eAAkB,GAAA;AAAA,EAC7B,GAAG,WAAA;AAAA;AAAA,EAEH,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,cAAA;AAAA,GACX;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,IAAA;AAAA,GACX;AAAA;AAAA,EAEA,UAAY,EAAA;AAAA,IACV,IAAM,EAAA,MAAA;AAAA,GACR;AAAA;AAAA,EAEA,SAAW,EAAA;AAAA,IACT,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,cAAA;AAAA,GACX;AAAA;AAAA,EAEA,GAAK,EAAA;AAAA,IACH,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,SAAA;AAAA,GACX;AAAA;AAAA,EAEA,WAAa,EAAA;AAAA,IACX,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,IAAA;AAAA,GACX;AAAA;AAAA,EAEA,UAAY,EAAA;AAAA,IACV,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,IAAA;AAAA,GACX;AAAA;AAAA,EAEA,SAAW,EAAA;AAAA,IACT,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,KAAA;AAAA,GACX;AAAA;AAAA,EAEA,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,KAAA;AAAA,GACX;AAAA;AAAA,EAEA,KAAO,EAAA;AAAA,IACL,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,GAAA;AAAA,GACX;AAAA;AAAA,EAEA,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,GAAA;AAAA,GACX;AACF;;;;"}
1
+ {"version":3,"file":"uploadPro.mjs","sources":["../../../../../../../packages/components/src/business/uploadPro/uploadPro.ts"],"sourcesContent":["import { type PropType } from 'vue';\nimport { type UploadFile, type UploadProps, uploadProps, type UploadUserFile } from 'element-plus';\nimport type { ResourceUrlResponse } from '@giime/api/resource/interface';\n// import { previewFileProps } from '../../composite/previewFile/previewFile';\n\nexport const uploadFileProps = {\n ...uploadProps,\n // ...previewFileProps,\n listType: {\n type: String as PropType<UploadProps['listType']>,\n default: 'picture-card',\n },\n drag: {\n type: Boolean,\n default: true,\n },\n /**领域编码 */\n domainCode: {\n type: String,\n },\n /**场景编码 */\n sceneCode: {\n type: String,\n default: 'internal_oss',\n },\n /** 文件权限,默认继承桶 */\n acl: {\n type: String,\n default: 'default',\n },\n /**上传中是否loading */\n showLoading: {\n type: Boolean,\n default: false,\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: false,\n },\n /** 缩略图宽度 */\n width: {\n type: Number,\n default: 120,\n },\n /** 缩略图高度 */\n height: {\n type: Number,\n default: 120,\n },\n};\nexport type GmUploadProUserFileResponse = ResourceUrlResponse;\n\nexport type GmUploadProUserFile = Omit<UploadUserFile, 'response'> & { response?: GmUploadProUserFileResponse };\n"],"names":[],"mappings":";;AAKO,MAAM,eAAkB,GAAA;AAAA,EAC7B,GAAG,WAAA;AAAA;AAAA,EAEH,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,cAAA;AAAA,GACX;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,IAAA;AAAA,GACX;AAAA;AAAA,EAEA,UAAY,EAAA;AAAA,IACV,IAAM,EAAA,MAAA;AAAA,GACR;AAAA;AAAA,EAEA,SAAW,EAAA;AAAA,IACT,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,cAAA;AAAA,GACX;AAAA;AAAA,EAEA,GAAK,EAAA;AAAA,IACH,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,SAAA;AAAA,GACX;AAAA;AAAA,EAEA,WAAa,EAAA;AAAA,IACX,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,KAAA;AAAA,GACX;AAAA;AAAA,EAEA,UAAY,EAAA;AAAA,IACV,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,IAAA;AAAA,GACX;AAAA;AAAA,EAEA,SAAW,EAAA;AAAA,IACT,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,KAAA;AAAA,GACX;AAAA;AAAA,EAEA,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,KAAA;AAAA,GACX;AAAA;AAAA,EAEA,KAAO,EAAA;AAAA,IACL,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,GAAA;AAAA,GACX;AAAA;AAAA,EAEA,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,GAAA;AAAA,GACX;AACF;;;;"}
@@ -10,7 +10,7 @@ declare const _default: import("vue").DefineComponent<{
10
10
  required: true;
11
11
  };
12
12
  type: {
13
- type: import("vue").PropType<"date" | "daterange" | "month" | "year" | "months" | "years" | "dates" | "week" | "datetime" | "datetimerange" | "monthrange" | "yearrange">;
13
+ type: import("vue").PropType<"date" | "daterange" | "month" | "year" | "months" | "years" | "dates" | "week" | "datetimerange" | "datetime" | "monthrange" | "yearrange">;
14
14
  required: true;
15
15
  };
16
16
  shortcuts: {
@@ -30,7 +30,6 @@ declare const _default: import("vue").DefineComponent<{
30
30
  };
31
31
  valueFormat: {
32
32
  type: import("vue").PropType<string | undefined>;
33
- default: string;
34
33
  };
35
34
  startPlaceholder: {
36
35
  type: StringConstructor;
@@ -60,7 +59,7 @@ declare const _default: import("vue").DefineComponent<{
60
59
  required: true;
61
60
  };
62
61
  type: {
63
- type: import("vue").PropType<"date" | "daterange" | "month" | "year" | "months" | "years" | "dates" | "week" | "datetime" | "datetimerange" | "monthrange" | "yearrange">;
62
+ type: import("vue").PropType<"date" | "daterange" | "month" | "year" | "months" | "years" | "dates" | "week" | "datetimerange" | "datetime" | "monthrange" | "yearrange">;
64
63
  required: true;
65
64
  };
66
65
  shortcuts: {
@@ -80,7 +79,6 @@ declare const _default: import("vue").DefineComponent<{
80
79
  };
81
80
  valueFormat: {
82
81
  type: import("vue").PropType<string | undefined>;
83
- default: string;
84
82
  };
85
83
  startPlaceholder: {
86
84
  type: StringConstructor;
@@ -102,7 +100,6 @@ declare const _default: import("vue").DefineComponent<{
102
100
  }, {
103
101
  disabled: boolean;
104
102
  label: string;
105
- valueFormat: string | undefined;
106
103
  noDefaultSync: boolean;
107
104
  }, {}>;
108
105
  export default _default;
@@ -20,6 +20,10 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
20
20
  const emit = __emit;
21
21
  useWatchModelChange(modelValue, { prop: props.prop, noDefaultSync: props.noDefaultSync });
22
22
  const shortcutList = computed(() => Array.isArray(props.shortcuts) ? props.shortcuts : getDateShortcuts(props.type));
23
+ const valueFormat = computed(() => props.valueFormat ?? (props.type === "datetimerange" ? "YYYY-MM-DD HH:mm:ss" : "YYYY-MM-DD"));
24
+ const defaultTime = computed(
25
+ () => props.defaultTime ?? (props.type === "datetimerange" ? [new Date(2e3, 0, 1, 0, 0, 0), new Date(2e3, 0, 1, 23, 59, 59)] : void 0)
26
+ );
23
27
  const onChange = (value) => {
24
28
  emit("change", value);
25
29
  };
@@ -33,7 +37,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
33
37
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event),
34
38
  type: _ctx.type,
35
39
  "range-separator": "-",
36
- "value-format": _ctx.valueFormat,
40
+ "value-format": valueFormat.value,
37
41
  clearable: "",
38
42
  disabled: _ctx.disabled,
39
43
  placeholder: _ctx.label,
@@ -44,7 +48,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
44
48
  },
45
49
  shortcuts: shortcutList.value,
46
50
  defaultValue: _ctx.defaultValue,
47
- defaultTime: _ctx.defaultTime,
51
+ defaultTime: defaultTime.value,
48
52
  onChange
49
53
  }, null, 8, ["modelValue", "type", "value-format", "disabled", "placeholder", "start-placeholder", "end-placeholder", "shortcuts", "defaultValue", "defaultTime"])
50
54
  ]),
@@ -1 +1 @@
1
- {"version":3,"file":"SearchFormDatePicker.vue2.mjs","sources":["../../../../../../../../../packages/components/src/composite/searchForm/searchFormItems/datePicker/SearchFormDatePicker.vue"],"sourcesContent":["<template>\n <gm-form-item :prop=\"prop\">\n <gm-date-picker\n v-model=\"modelValue\"\n :type=\"type\"\n range-separator=\"-\"\n :value-format=\"valueFormat\"\n clearable\n :disabled=\"disabled\"\n :placeholder=\"label\"\n :start-placeholder=\"startPlaceholder ?? `${label}开始日期`\"\n :end-placeholder=\"endPlaceholder ?? `${label}结束日期`\"\n :style=\"{\n '--el-date-editor-width': '100%',\n }\"\n :shortcuts=\"shortcutList\"\n :defaultValue=\"defaultValue\"\n :defaultTime=\"defaultTime\"\n @change=\"onChange\"\n />\n </gm-form-item>\n</template>\n<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport { getDateShortcuts } from '@giime/utils';\nimport { useWatchModelChange } from '../../composables/useWatchModelChange';\n// import { searchFormHandleQueryKey } from '../../searchForm';\nimport { SearchFormDatePickerName, searchFormDatePickerEmits, searchFormDatePickerProps } from './searchFormDatePicker';\nimport type { ModelValueType } from 'element-plus';\nimport type { DatePickerProps } from '@giime/components/src/base/datePicker';\ndefineOptions({\n name: SearchFormDatePickerName,\n});\nconst modelValue = defineModel<DatePickerProps['modelValue'] | undefined>();\nconst props = defineProps(searchFormDatePickerProps);\nconst emit = defineEmits(searchFormDatePickerEmits);\nuseWatchModelChange(modelValue, { prop: props.prop, noDefaultSync: props.noDefaultSync });\n\n// const isRangeType = computed(() => props.type === 'datetimerange' || props.type === 'daterange' || props.type === 'monthrange');\n/**\n * shortcuts赋予默认值\n */\nconst shortcutList = computed(() => (Array.isArray(props.shortcuts) ? props.shortcuts : getDateShortcuts(props.type)));\n// const handleQuery = inject(searchFormHandleQueryKey);\nconst onChange = (value: ModelValueType) => {\n // handleQuery?.();\n emit('change', value);\n};\n</script>\n"],"names":["_useModel"],"mappings":";;;;;;;;;;;;;;;;;AAiCA,IAAM,MAAA,UAAA,GAAaA,QAAsD,CAAA,OAAA,EAAA,YAAC,CAAA,CAAA;AAC1E,IAAA,MAAM,KAAQ,GAAA,OAAA,CAAA;AACd,IAAA,MAAM,IAAO,GAAA,MAAA,CAAA;AACb,IAAoB,mBAAA,CAAA,UAAA,EAAY,EAAE,IAAM,EAAA,KAAA,CAAM,MAAM,aAAe,EAAA,KAAA,CAAM,eAAe,CAAA,CAAA;AAMxF,IAAA,MAAM,YAAe,GAAA,QAAA,CAAS,MAAO,KAAA,CAAM,OAAQ,CAAA,KAAA,CAAM,SAAS,CAAA,GAAI,KAAM,CAAA,SAAA,GAAY,gBAAiB,CAAA,KAAA,CAAM,IAAI,CAAE,CAAA,CAAA;AAErH,IAAM,MAAA,QAAA,GAAW,CAAC,KAA0B,KAAA;AAE1C,MAAA,IAAA,CAAK,UAAU,KAAK,CAAA,CAAA;AAAA,KACtB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"SearchFormDatePicker.vue2.mjs","sources":["../../../../../../../../../packages/components/src/composite/searchForm/searchFormItems/datePicker/SearchFormDatePicker.vue"],"sourcesContent":["<template>\n <gm-form-item :prop=\"prop\">\n <gm-date-picker\n v-model=\"modelValue\"\n :type=\"type\"\n range-separator=\"-\"\n :value-format=\"valueFormat\"\n clearable\n :disabled=\"disabled\"\n :placeholder=\"label\"\n :start-placeholder=\"startPlaceholder ?? `${label}开始日期`\"\n :end-placeholder=\"endPlaceholder ?? `${label}结束日期`\"\n :style=\"{\n '--el-date-editor-width': '100%',\n }\"\n :shortcuts=\"shortcutList\"\n :defaultValue=\"defaultValue\"\n :defaultTime=\"defaultTime\"\n @change=\"onChange\"\n />\n </gm-form-item>\n</template>\n<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport { getDateShortcuts } from '@giime/utils';\nimport { useWatchModelChange } from '../../composables/useWatchModelChange';\n// import { searchFormHandleQueryKey } from '../../searchForm';\nimport { SearchFormDatePickerName, searchFormDatePickerEmits, searchFormDatePickerProps } from './searchFormDatePicker';\nimport type { ModelValueType } from 'element-plus';\nimport type { DatePickerProps } from '@giime/components/src/base/datePicker';\ndefineOptions({\n name: SearchFormDatePickerName,\n});\nconst modelValue = defineModel<DatePickerProps['modelValue'] | undefined>();\nconst props = defineProps(searchFormDatePickerProps);\nconst emit = defineEmits(searchFormDatePickerEmits);\nuseWatchModelChange(modelValue, { prop: props.prop, noDefaultSync: props.noDefaultSync });\n\n// const isRangeType = computed(() => props.type === 'datetimerange' || props.type === 'daterange' || props.type === 'monthrange');\n/**\n * shortcuts赋予默认值\n */\nconst shortcutList = computed(() => (Array.isArray(props.shortcuts) ? props.shortcuts : getDateShortcuts(props.type)));\n\nconst valueFormat = computed(() => props.valueFormat ?? (props.type === 'datetimerange' ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD'));\n\nconst defaultTime = computed(\n () =>\n props.defaultTime ??\n (props.type === 'datetimerange' ? ([new Date(2000, 0, 1, 0, 0, 0), new Date(2000, 0, 1, 23, 59, 59)] as [Date, Date]) : undefined),\n);\n// const handleQuery = inject(searchFormHandleQueryKey);\nconst onChange = (value: ModelValueType) => {\n // handleQuery?.();\n emit('change', value);\n};\n</script>\n"],"names":["_useModel"],"mappings":";;;;;;;;;;;;;;;;;AAiCA,IAAM,MAAA,UAAA,GAAaA,QAAsD,CAAA,OAAA,EAAA,YAAC,CAAA,CAAA;AAC1E,IAAA,MAAM,KAAQ,GAAA,OAAA,CAAA;AACd,IAAA,MAAM,IAAO,GAAA,MAAA,CAAA;AACb,IAAoB,mBAAA,CAAA,UAAA,EAAY,EAAE,IAAM,EAAA,KAAA,CAAM,MAAM,aAAe,EAAA,KAAA,CAAM,eAAe,CAAA,CAAA;AAMxF,IAAA,MAAM,YAAe,GAAA,QAAA,CAAS,MAAO,KAAA,CAAM,OAAQ,CAAA,KAAA,CAAM,SAAS,CAAA,GAAI,KAAM,CAAA,SAAA,GAAY,gBAAiB,CAAA,KAAA,CAAM,IAAI,CAAE,CAAA,CAAA;AAErH,IAAM,MAAA,WAAA,GAAc,SAAS,MAAM,KAAA,CAAM,gBAAgB,KAAM,CAAA,IAAA,KAAS,eAAkB,GAAA,qBAAA,GAAwB,YAAa,CAAA,CAAA,CAAA;AAE/H,IAAA,MAAM,WAAc,GAAA,QAAA;AAAA,MAClB,MACE,KAAM,CAAA,WAAA,KACL,KAAM,CAAA,IAAA,KAAS,kBAAmB,CAAC,IAAI,IAAK,CAAA,GAAA,EAAM,CAAG,EAAA,CAAA,EAAG,GAAG,CAAG,EAAA,CAAC,CAAG,EAAA,IAAI,IAAK,CAAA,GAAA,EAAM,CAAG,EAAA,CAAA,EAAG,EAAI,EAAA,EAAA,EAAI,EAAE,CAAC,CAAqB,GAAA,KAAA,CAAA,CAAA;AAAA,KAC5H,CAAA;AAEA,IAAM,MAAA,QAAA,GAAW,CAAC,KAA0B,KAAA;AAE1C,MAAA,IAAA,CAAK,UAAU,KAAK,CAAA,CAAA;AAAA,KACtB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -10,7 +10,7 @@ export declare const GmSearchFormDatePicker: import("../../../../../../utils").S
10
10
  required: true;
11
11
  };
12
12
  type: {
13
- type: import("vue").PropType<"date" | "daterange" | "month" | "year" | "months" | "years" | "dates" | "week" | "datetime" | "datetimerange" | "monthrange" | "yearrange">;
13
+ type: import("vue").PropType<"date" | "daterange" | "month" | "year" | "months" | "years" | "dates" | "week" | "datetimerange" | "datetime" | "monthrange" | "yearrange">;
14
14
  required: true;
15
15
  };
16
16
  shortcuts: {
@@ -30,7 +30,6 @@ export declare const GmSearchFormDatePicker: import("../../../../../../utils").S
30
30
  };
31
31
  valueFormat: {
32
32
  type: import("vue").PropType<string | undefined>;
33
- default: string;
34
33
  };
35
34
  startPlaceholder: {
36
35
  type: StringConstructor;
@@ -60,7 +59,7 @@ export declare const GmSearchFormDatePicker: import("../../../../../../utils").S
60
59
  required: true;
61
60
  };
62
61
  type: {
63
- type: import("vue").PropType<"date" | "daterange" | "month" | "year" | "months" | "years" | "dates" | "week" | "datetime" | "datetimerange" | "monthrange" | "yearrange">;
62
+ type: import("vue").PropType<"date" | "daterange" | "month" | "year" | "months" | "years" | "dates" | "week" | "datetimerange" | "datetime" | "monthrange" | "yearrange">;
64
63
  required: true;
65
64
  };
66
65
  shortcuts: {
@@ -80,7 +79,6 @@ export declare const GmSearchFormDatePicker: import("../../../../../../utils").S
80
79
  };
81
80
  valueFormat: {
82
81
  type: import("vue").PropType<string | undefined>;
83
- default: string;
84
82
  };
85
83
  startPlaceholder: {
86
84
  type: StringConstructor;
@@ -102,7 +100,6 @@ export declare const GmSearchFormDatePicker: import("../../../../../../utils").S
102
100
  }, {
103
101
  disabled: boolean;
104
102
  label: string;
105
- valueFormat: string | undefined;
106
103
  noDefaultSync: boolean;
107
104
  }, {}>> & Record<string, any>;
108
105
  export type SearchFormDatePickerInstance = InstanceType<typeof SearchFormDatePicker>;
@@ -9,7 +9,7 @@ export declare const searchFormDatePickerProps: {
9
9
  required: true;
10
10
  };
11
11
  type: {
12
- type: PropType<"date" | "daterange" | "month" | "year" | "months" | "years" | "dates" | "week" | "datetime" | "datetimerange" | "monthrange" | "yearrange">;
12
+ type: PropType<"date" | "daterange" | "month" | "year" | "months" | "years" | "dates" | "week" | "datetimerange" | "datetime" | "monthrange" | "yearrange">;
13
13
  required: true;
14
14
  };
15
15
  shortcuts: {
@@ -29,7 +29,6 @@ export declare const searchFormDatePickerProps: {
29
29
  };
30
30
  valueFormat: {
31
31
  type: PropType<string | undefined>;
32
- default: string;
33
32
  };
34
33
  startPlaceholder: {
35
34
  type: StringConstructor;
@@ -22,8 +22,8 @@ const searchFormDatePickerProps = {
22
22
  defaultValue: datePickerProps["defaultValue"],
23
23
  defaultTime: datePickerProps["defaultTime"],
24
24
  valueFormat: {
25
- type: String,
26
- default: "YYYY-MM-DD"
25
+ type: String
26
+ // default: 'YYYY-MM-DD',
27
27
  },
28
28
  startPlaceholder: {
29
29
  type: String
@@ -1 +1 @@
1
- {"version":3,"file":"searchFormDatePicker.mjs","sources":["../../../../../../../../../packages/components/src/composite/searchForm/searchFormItems/datePicker/searchFormDatePicker.ts"],"sourcesContent":["import { datePickerProps } from '@giime/components/src/base/datePicker';\nimport { searchFormCommonProps } from '../common';\nimport type { PropType } from 'vue';\nimport type { DatePickerProps } from '@giime/components/src/base/datePicker';\n\nexport const searchFormDatePickerProps = {\n ...searchFormCommonProps,\n label: {\n type: String,\n default: '',\n },\n prop: {\n type: String,\n required: true as const,\n },\n type: {\n type: String as PropType<DatePickerProps['type']>,\n required: true as const,\n },\n shortcuts: {\n type: Array as PropType<DatePickerProps['shortcuts']>,\n },\n defaultValue: datePickerProps['defaultValue'],\n defaultTime: datePickerProps['defaultTime'],\n valueFormat: {\n type: String as PropType<DatePickerProps['valueFormat']>,\n default: 'YYYY-MM-DD',\n },\n startPlaceholder: {\n type: String,\n },\n endPlaceholder: {\n type: String,\n },\n};\n\nexport const searchFormDatePickerEmits = {\n change: (...value: any[]) => !!value,\n};\nexport const SearchFormDatePickerName = 'GmSearchFormDatePicker';\n"],"names":[],"mappings":";;;;AAKO,MAAM,yBAA4B,GAAA;AAAA,EACvC,GAAG,qBAAA;AAAA,EACH,KAAO,EAAA;AAAA,IACL,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,EAAA;AAAA,GACX;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA,MAAA;AAAA,IACN,QAAU,EAAA,IAAA;AAAA,GACZ;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA,MAAA;AAAA,IACN,QAAU,EAAA,IAAA;AAAA,GACZ;AAAA,EACA,SAAW,EAAA;AAAA,IACT,IAAM,EAAA,KAAA;AAAA,GACR;AAAA,EACA,YAAA,EAAc,gBAAgB,cAAc,CAAA;AAAA,EAC5C,WAAA,EAAa,gBAAgB,aAAa,CAAA;AAAA,EAC1C,WAAa,EAAA;AAAA,IACX,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,YAAA;AAAA,GACX;AAAA,EACA,gBAAkB,EAAA;AAAA,IAChB,IAAM,EAAA,MAAA;AAAA,GACR;AAAA,EACA,cAAgB,EAAA;AAAA,IACd,IAAM,EAAA,MAAA;AAAA,GACR;AACF,EAAA;AAEO,MAAM,yBAA4B,GAAA;AAAA,EACvC,MAAQ,EAAA,CAAA,GAAI,KAAiB,KAAA,CAAC,CAAC,KAAA;AACjC,EAAA;AACO,MAAM,wBAA2B,GAAA;;;;"}
1
+ {"version":3,"file":"searchFormDatePicker.mjs","sources":["../../../../../../../../../packages/components/src/composite/searchForm/searchFormItems/datePicker/searchFormDatePicker.ts"],"sourcesContent":["import { datePickerProps } from '@giime/components/src/base/datePicker';\nimport { searchFormCommonProps } from '../common';\nimport type { PropType } from 'vue';\nimport type { DatePickerProps } from '@giime/components/src/base/datePicker';\n\nexport const searchFormDatePickerProps = {\n ...searchFormCommonProps,\n label: {\n type: String,\n default: '',\n },\n prop: {\n type: String,\n required: true as const,\n },\n type: {\n type: String as PropType<DatePickerProps['type']>,\n required: true as const,\n },\n shortcuts: {\n type: Array as PropType<DatePickerProps['shortcuts']>,\n },\n defaultValue: datePickerProps['defaultValue'],\n defaultTime: datePickerProps['defaultTime'],\n valueFormat: {\n type: String as PropType<DatePickerProps['valueFormat']>,\n // default: 'YYYY-MM-DD',\n },\n startPlaceholder: {\n type: String,\n },\n endPlaceholder: {\n type: String,\n },\n};\n\nexport const searchFormDatePickerEmits = {\n change: (...value: any[]) => !!value,\n};\nexport const SearchFormDatePickerName = 'GmSearchFormDatePicker';\n"],"names":[],"mappings":";;;;AAKO,MAAM,yBAA4B,GAAA;AAAA,EACvC,GAAG,qBAAA;AAAA,EACH,KAAO,EAAA;AAAA,IACL,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,EAAA;AAAA,GACX;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA,MAAA;AAAA,IACN,QAAU,EAAA,IAAA;AAAA,GACZ;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA,MAAA;AAAA,IACN,QAAU,EAAA,IAAA;AAAA,GACZ;AAAA,EACA,SAAW,EAAA;AAAA,IACT,IAAM,EAAA,KAAA;AAAA,GACR;AAAA,EACA,YAAA,EAAc,gBAAgB,cAAc,CAAA;AAAA,EAC5C,WAAA,EAAa,gBAAgB,aAAa,CAAA;AAAA,EAC1C,WAAa,EAAA;AAAA,IACX,IAAM,EAAA,MAAA;AAAA;AAAA,GAER;AAAA,EACA,gBAAkB,EAAA;AAAA,IAChB,IAAM,EAAA,MAAA;AAAA,GACR;AAAA,EACA,cAAgB,EAAA;AAAA,IACd,IAAM,EAAA,MAAA;AAAA,GACR;AACF,EAAA;AAEO,MAAM,yBAA4B,GAAA;AAAA,EACvC,MAAQ,EAAA,CAAA,GAAI,KAAiB,KAAA,CAAC,CAAC,KAAA;AACjC,EAAA;AACO,MAAM,wBAA2B,GAAA;;;;"}
@@ -16,6 +16,7 @@ export { giimeDevProxy } from '../utils/src/http/devProxy.mjs';
16
16
  export { getDomain } from '../utils/src/http/url.mjs';
17
17
  export { getModifiedData, hasOwn, keysOf, resetObject } from '../utils/src/objects.mjs';
18
18
  export { getDateShortcuts } from '../utils/src/date/dateShortcuts.mjs';
19
+ export { genFileId } from 'element-plus';
19
20
  export { base64ToBlob, base64ToFile, blobToBase64, blobToFile, fileMd5, fileToBase64, fileToBlob, fileToUrl, fileValidType, getImageInfo, getVideoInfo, urlToBlob, urlToFile } from '../utils/src/file.mjs';
20
21
  export { compareVersions, isVersionGreaterOrEqual, omitOnEvents, remove } from '../utils/src/general.mjs';
21
22
  export { b64_hmac_md5, b64_md5, hex_hmac_md5, hex_md5, str_hmac_md5, str_md5, ts_md5_file } from '../utils/src/crypto/md5.mjs';
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../packages/giime/index.ts"],"sourcesContent":["import installer from './defaults';\nimport './tailwind.css';\nexport * from '@giime/utils';\nexport * from '@giime/components';\nexport * from '@giime/hooks';\n// export * from '@giime/api'; // 用户通过giime/es/api 导入类型\nexport const install = installer.install;\nexport const version = installer.version;\nexport default installer;\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMO,MAAM,UAAU,SAAU,CAAA,QAAA;AAC1B,MAAM,UAAU,SAAU,CAAA;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../packages/giime/index.ts"],"sourcesContent":["import installer from './defaults';\nimport './tailwind.css';\nexport * from '@giime/utils';\nexport * from '@giime/components';\nexport * from '@giime/hooks';\n// export * from '@giime/api'; // 用户通过giime/es/api 导入类型\nexport const install = installer.install;\nexport const version = installer.version;\nexport default installer;\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMO,MAAM,UAAU,SAAU,CAAA,QAAA;AAC1B,MAAM,UAAU,SAAU,CAAA;;;;"}
@@ -1 +1 @@
1
- export declare const version = "0.6.36";
1
+ export declare const version = "0.6.37";
@@ -1,3 +1,4 @@
1
+ import type { UploadRawFile, UploadRequestOptions } from 'element-plus';
1
2
  export interface UseUploadFileOptions {
2
3
  /**领域编码 */
3
4
  domainCode?: string;
@@ -7,13 +8,19 @@ export interface UseUploadFileOptions {
7
8
  accept?: string;
8
9
  /**文件权限,默认继承桶 */
9
10
  acl?: string;
11
+ /**是否禁止上传文件到存储桶 */
12
+ disablePutFile?: boolean;
13
+ /** */
14
+ elOptions?: UploadRequestOptions;
10
15
  }
11
16
  export declare const useUploadFile: () => {
12
17
  isLoading: import("vue").Ref<boolean>;
13
- uploadFile: (file: File, options?: UseUploadFileOptions) => Promise<{
18
+ uploadFile: (file: UploadRawFile, options?: UseUploadFileOptions) => Promise<{
14
19
  url: string;
15
20
  exists: boolean;
16
21
  uploadUrl: string;
17
22
  key: string;
18
23
  }>;
24
+ cancelUpload: (fileUid: number) => void;
25
+ cancelAllUploads: () => void;
19
26
  };
@@ -4,17 +4,22 @@ import '../../../api/resource/controller/index.mjs';
4
4
  import { fileValidType, fileMd5 } from '../../../utils/src/file.mjs';
5
5
  import { GmMessage } from '../../../components/src/plugins/message/index.mjs';
6
6
  import { useGlobalConfig } from '../useGlobalConfig/index.mjs';
7
+ import { genFileId } from 'element-plus';
7
8
  import { postV1ResourcesUrl } from '../../../api/resource/controller/ZiYuanGuanLi/postV1ResourcesUrl.mjs';
8
9
 
9
10
  const useUploadFile = () => {
10
11
  const isLoading = ref(false);
11
12
  const domainCode = useGlobalConfig("domainCode");
13
+ const abortControllers = ref(/* @__PURE__ */ new Map());
12
14
  const uploadFile = async (file, options) => {
13
15
  const uploadDomainCode = options?.domainCode ?? domainCode.value;
14
16
  if (!uploadDomainCode) {
15
17
  GmMessage.error("\u9886\u57DF\u7F16\u7801\u4E0D\u80FD\u4E3A\u7A7A");
16
18
  throw new Error("\u9886\u57DF\u7F16\u7801\u4E0D\u80FD\u4E3A\u7A7A");
17
19
  }
20
+ const abortController = new AbortController();
21
+ const fileKey = file.uid ?? genFileId();
22
+ abortControllers.value.set(fileKey, abortController);
18
23
  try {
19
24
  isLoading.value = true;
20
25
  if (options?.accept && options?.accept !== "*") {
@@ -44,21 +49,47 @@ const useUploadFile = () => {
44
49
  headers: {
45
50
  "Content-Type": file.type,
46
51
  "x-oss-object-acl ": acl
52
+ },
53
+ signal: abortController.signal,
54
+ onUploadProgress: (progressEvent) => {
55
+ const progressEvt = progressEvent.event;
56
+ progressEvt.percent = progressEvt.total > 0 ? progressEvt.loaded / progressEvt.total * 100 : 0;
57
+ options?.elOptions?.onProgress(progressEvent.event);
47
58
  }
48
59
  });
49
60
  } catch (error) {
61
+ if (axios.isCancel(error) || error?.name === "AbortError") {
62
+ console.log("\u4E0A\u4F20\u8BF7\u6C42\u5DF2\u53D6\u6D88");
63
+ throw error;
64
+ }
50
65
  GmMessage.error("\u63A8\u9001\u81F3\u5B58\u50A8\u6876\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5");
51
66
  throw error;
52
67
  }
53
68
  }
54
69
  return data.data;
55
70
  } finally {
71
+ abortControllers.value.delete(fileKey);
56
72
  isLoading.value = false;
57
73
  }
58
74
  };
75
+ const cancelUpload = (fileUid) => {
76
+ const abortController = abortControllers.value.get(fileUid);
77
+ if (abortController) {
78
+ abortController.abort();
79
+ abortControllers.value.delete(fileUid);
80
+ }
81
+ };
82
+ const cancelAllUploads = () => {
83
+ abortControllers.value.forEach((controller) => {
84
+ controller.abort();
85
+ });
86
+ abortControllers.value.clear();
87
+ };
59
88
  return {
60
89
  isLoading,
61
- uploadFile
90
+ uploadFile,
91
+ cancelUpload,
92
+ cancelAllUploads
62
93
  };
63
94
  };
64
95
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../../../packages/hooks/base/useUploadFile/index.ts"],"sourcesContent":["import axios from 'axios';\nimport { ref } from 'vue';\nimport { postV1ResourcesUrl } from '@giime/api/resource/controller';\nimport { fileMd5, fileValidType } from '@giime/utils/src/file';\nimport { GmMessage } from '@giime/components/src/plugins/message';\nimport { useGlobalConfig } from '@giime/hooks/base/useGlobalConfig';\n\nexport interface UseUploadFileOptions {\n /**领域编码 */\n domainCode?: string;\n /**场景编码 */\n sceneCode?: string;\n /**接受上传的文件类型 */\n accept?: string;\n /**文件权限,默认继承桶 */\n acl?: string;\n}\n\nexport const useUploadFile = () => {\n const isLoading = ref(false);\n const domainCode = useGlobalConfig('domainCode');\n\n const uploadFile = async (file: File, options?: UseUploadFileOptions) => {\n // 领域编码\n const uploadDomainCode = options?.domainCode ?? domainCode.value;\n if (!uploadDomainCode) {\n GmMessage.error('领域编码不能为空');\n throw new Error('领域编码不能为空');\n }\n try {\n isLoading.value = true;\n // 验证文件类型\n if (options?.accept && options?.accept !== '*') {\n const isValidType = fileValidType(file, options.accept);\n if (!isValidType) {\n GmMessage.error(`文件类型不支持,请上传 ${options.accept} 格式的文件`);\n throw new Error(`文件类型不支持,请上传 ${options.accept} 格式的文件`);\n }\n }\n const md5 = await fileMd5(file);\n const acl = options?.acl || 'default';\n const { data } = await postV1ResourcesUrl({\n domainCode: uploadDomainCode, // 领域编码\n sceneCode: options?.sceneCode || 'internal_oss', // 场景编码\n fileName: file.name,\n contentType: file.type,\n md5,\n size: file.size,\n acl, // 文件权限\n });\n\n if (data.data.uploadUrl) {\n try {\n await axios.put(data.data.uploadUrl, file, {\n headers: {\n 'Content-Type': file.type,\n 'x-oss-object-acl ': acl,\n },\n });\n } catch (error) {\n GmMessage.error('推送至存储桶失败,请重试');\n throw error;\n }\n }\n\n return data.data;\n } finally {\n isLoading.value = false;\n }\n };\n return {\n isLoading,\n uploadFile,\n };\n};\n"],"names":[],"mappings":";;;;;;;;AAkBO,MAAM,gBAAgB,MAAM;AACjC,EAAM,MAAA,SAAA,GAAY,IAAI,KAAK,CAAA,CAAA;AAC3B,EAAM,MAAA,UAAA,GAAa,gBAAgB,YAAY,CAAA,CAAA;AAE/C,EAAM,MAAA,UAAA,GAAa,OAAO,IAAA,EAAY,OAAmC,KAAA;AAEvE,IAAM,MAAA,gBAAA,GAAmB,OAAS,EAAA,UAAA,IAAc,UAAW,CAAA,KAAA,CAAA;AAC3D,IAAA,IAAI,CAAC,gBAAkB,EAAA;AACrB,MAAA,SAAA,CAAU,MAAM,kDAAU,CAAA,CAAA;AAC1B,MAAM,MAAA,IAAI,MAAM,kDAAU,CAAA,CAAA;AAAA,KAC5B;AACA,IAAI,IAAA;AACF,MAAA,SAAA,CAAU,KAAQ,GAAA,IAAA,CAAA;AAElB,MAAA,IAAI,OAAS,EAAA,MAAA,IAAU,OAAS,EAAA,MAAA,KAAW,GAAK,EAAA;AAC9C,QAAA,MAAM,WAAc,GAAA,aAAA,CAAc,IAAM,EAAA,OAAA,CAAQ,MAAM,CAAA,CAAA;AACtD,QAAA,IAAI,CAAC,WAAa,EAAA;AAChB,UAAA,SAAA,CAAU,KAAM,CAAA,CAAA,mEAAA,EAAe,OAAQ,CAAA,MAAM,CAAQ,+BAAA,CAAA,CAAA,CAAA;AACrD,UAAA,MAAM,IAAI,KAAA,CAAM,CAAe,mEAAA,EAAA,OAAA,CAAQ,MAAM,CAAQ,+BAAA,CAAA,CAAA,CAAA;AAAA,SACvD;AAAA,OACF;AACA,MAAM,MAAA,GAAA,GAAM,MAAM,OAAA,CAAQ,IAAI,CAAA,CAAA;AAC9B,MAAM,MAAA,GAAA,GAAM,SAAS,GAAO,IAAA,SAAA,CAAA;AAC5B,MAAA,MAAM,EAAE,IAAA,EAAS,GAAA,MAAM,kBAAmB,CAAA;AAAA,QACxC,UAAY,EAAA,gBAAA;AAAA;AAAA,QACZ,SAAA,EAAW,SAAS,SAAa,IAAA,cAAA;AAAA;AAAA,QACjC,UAAU,IAAK,CAAA,IAAA;AAAA,QACf,aAAa,IAAK,CAAA,IAAA;AAAA,QAClB,GAAA;AAAA,QACA,MAAM,IAAK,CAAA,IAAA;AAAA,QACX,GAAA;AAAA;AAAA,OACD,CAAA,CAAA;AAED,MAAI,IAAA,IAAA,CAAK,KAAK,SAAW,EAAA;AACvB,QAAI,IAAA;AACF,UAAA,MAAM,KAAM,CAAA,GAAA,CAAI,IAAK,CAAA,IAAA,CAAK,WAAW,IAAM,EAAA;AAAA,YACzC,OAAS,EAAA;AAAA,cACP,gBAAgB,IAAK,CAAA,IAAA;AAAA,cACrB,mBAAqB,EAAA,GAAA;AAAA,aACvB;AAAA,WACD,CAAA,CAAA;AAAA,iBACM,KAAO,EAAA;AACd,UAAA,SAAA,CAAU,MAAM,0EAAc,CAAA,CAAA;AAC9B,UAAM,MAAA,KAAA,CAAA;AAAA,SACR;AAAA,OACF;AAEA,MAAA,OAAO,IAAK,CAAA,IAAA,CAAA;AAAA,KACZ,SAAA;AACA,MAAA,SAAA,CAAU,KAAQ,GAAA,KAAA,CAAA;AAAA,KACpB;AAAA,GACF,CAAA;AACA,EAAO,OAAA;AAAA,IACL,SAAA;AAAA,IACA,UAAA;AAAA,GACF,CAAA;AACF;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../../packages/hooks/base/useUploadFile/index.ts"],"sourcesContent":["import axios from 'axios';\nimport { ref } from 'vue';\nimport { postV1ResourcesUrl } from '@giime/api/resource/controller';\nimport { fileMd5, fileValidType, genFileId } from '@giime/utils/src/file';\nimport { GmMessage } from '@giime/components/src/plugins/message';\nimport { useGlobalConfig } from '@giime/hooks/base/useGlobalConfig';\nimport type { UploadProgressEvent, UploadRawFile, UploadRequestOptions } from 'element-plus';\n\nexport interface UseUploadFileOptions {\n /**领域编码 */\n domainCode?: string;\n /**场景编码 */\n sceneCode?: string;\n /**接受上传的文件类型 */\n accept?: string;\n /**文件权限,默认继承桶 */\n acl?: string;\n /**是否禁止上传文件到存储桶 */\n disablePutFile?: boolean;\n /** */\n elOptions?: UploadRequestOptions;\n}\n\nexport const useUploadFile = () => {\n const isLoading = ref(false);\n const domainCode = useGlobalConfig('domainCode');\n // 存储每个文件的取消控制器\n const abortControllers = ref<Map<number, AbortController>>(new Map());\n\n const uploadFile = async (file: UploadRawFile, options?: UseUploadFileOptions) => {\n // 领域编码\n const uploadDomainCode = options?.domainCode ?? domainCode.value;\n if (!uploadDomainCode) {\n GmMessage.error('领域编码不能为空');\n throw new Error('领域编码不能为空');\n }\n\n // 创建取消控制器\n const abortController = new AbortController();\n const fileKey = file.uid ?? genFileId();\n abortControllers.value.set(fileKey, abortController);\n\n try {\n isLoading.value = true;\n // 验证文件类型\n if (options?.accept && options?.accept !== '*') {\n const isValidType = fileValidType(file, options.accept);\n if (!isValidType) {\n GmMessage.error(`文件类型不支持,请上传 ${options.accept} 格式的文件`);\n throw new Error(`文件类型不支持,请上传 ${options.accept} 格式的文件`);\n }\n }\n const md5 = await fileMd5(file);\n const acl = options?.acl || 'default';\n const { data } = await postV1ResourcesUrl({\n domainCode: uploadDomainCode, // 领域编码\n sceneCode: options?.sceneCode || 'internal_oss', // 场景编码\n fileName: file.name,\n contentType: file.type,\n md5,\n size: file.size,\n acl, // 文件权限\n });\n\n if (data.data.uploadUrl) {\n try {\n await axios.put(data.data.uploadUrl, file, {\n headers: {\n 'Content-Type': file.type,\n 'x-oss-object-acl ': acl,\n },\n signal: abortController.signal,\n onUploadProgress: progressEvent => {\n const progressEvt = progressEvent.event as UploadProgressEvent;\n progressEvt.percent = progressEvt.total > 0 ? (progressEvt.loaded / progressEvt.total) * 100 : 0;\n options?.elOptions?.onProgress(progressEvent.event);\n },\n });\n } catch (error: any) {\n // 如果是取消请求,不显示错误信息\n if (axios.isCancel(error) || error?.name === 'AbortError') {\n console.log('上传请求已取消');\n throw error;\n }\n GmMessage.error('推送至存储桶失败,请重试');\n throw error;\n }\n }\n\n return data.data;\n } finally {\n // 清理取消控制器\n abortControllers.value.delete(fileKey);\n isLoading.value = false;\n }\n };\n // 取消上传请求\n const cancelUpload = (fileUid: number) => {\n const abortController = abortControllers.value.get(fileUid);\n if (abortController) {\n abortController.abort();\n abortControllers.value.delete(fileUid);\n }\n };\n\n // 取消所有上传请求\n const cancelAllUploads = () => {\n abortControllers.value.forEach(controller => {\n controller.abort();\n });\n abortControllers.value.clear();\n };\n\n return {\n isLoading,\n uploadFile,\n cancelUpload,\n cancelAllUploads,\n };\n};\n"],"names":[],"mappings":"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"}