diff --git a/src/components/Upload/index.vue b/src/components/Upload/index.vue
index 2ae8302f184e8e21e736a4eb853fe318f4ca14be..9b5a8ae867911a33b3ff4d3fece0a41ef33e7958 100644
--- a/src/components/Upload/index.vue
+++ b/src/components/Upload/index.vue
@@ -3,12 +3,31 @@
-
- {{ $t("btnText.chooseFile") }}
-
-
- {{ $t("btnText.delete") }}
-
+
+
+ {{ $t("btnText.chooseFile") }}
+
+
+ {{ $t("btnText.batchDelete") }}
+
+
+
+
+ {{ $t("dialogTipText.fileNums") }}:{{
+ fileTableList.data.length
+ }}/{{ props.maxFileNum }}
+
+
+ {{ $t("dialogTipText.fileSizes") }}:{{ allFileSizesInfo }}/{{
+ maxFileSizesInfo
+ }}
+
+
{{ $t("dialogTipText.continueAdd") }}
@@ -16,8 +35,10 @@
action=""
drag
multiple
+ :limit="props.maxFileNum"
:accept="accept"
:show-file-list="false"
+ :on-exceed="handleExceed"
:on-success="handlsSuccess"
:on-change="handleChange"
:on-progress="handleProgress"
@@ -194,19 +215,35 @@ let selectedFiles: any[] = [];
const multipleSelection = ref([]);
const uploadingList = ref>([]);
const showTaskList = ref(true);
+let allFileSizes = ref(0); // 所有文件大小
+
+let allFileSizesInfo = computed(() => {
+ // 字节转MB:1 MB = 1024 * 1024 bytes
+ if (allFileSizes.value <= 0) return 0;
+ if (allFileSizes.value < 1024) {
+ return allFileSizes.value + "B";
+ } else if (allFileSizes.value / 1024 < 1024) {
+ return (allFileSizes.value / 1024).toFixed(0) + "KB";
+ } else if (allFileSizes.value / 1024 / 1024 < 1024) {
+ return (allFileSizes.value / 1024 / 1024).toFixed(0) + "MB";
+ } else {
+ return (allFileSizes.value / 1024 / 1024 / 1024).toFixed(0) + "GB";
+ }
+});
+
+let maxFileSizesInfo = computed(() => {
+ if (props.maxSize <= 0) return 0;
+ if (props.maxSize < 1) {
+ return (props.maxSize * 1024).toFixed(0) + "MB";
+ } else {
+ return props.maxSize + "GB";
+ }
+});
// 表格实例引用
const fileTableRef = ref();
const handleSelectionChange = (val: TableRow[]) => {
multipleSelection.value = val;
- let allFileSizes = 0;
- val.forEach((item) => {
- allFileSizes += item.file.size as number;
- });
- btnDisabled.value =
- isMaxMemoryOut(allFileSizes, props.maxSize) ||
- val.length > props.maxFileNum ||
- !val.length;
selectedFiles = val.map((item) => {
return {
id: item.id,
@@ -218,6 +255,16 @@ const handleSelectionChange = (val: TableRow[]) => {
};
const hasFiles = computed(() => fileTableList.data.length > 0);
+
+const changeAllSizes = (file: any, type?: string) => {
+ if (type === "add") {
+ allFileSizes.value += file.size as number;
+ } else {
+ allFileSizes.value -= file.size as number;
+ }
+ btnDisabled.value = isMaxMemoryOut(allFileSizes.value, props.maxSize);
+};
+
const handleChange = (file: UploadFile) => {
const item: TableRow = {
id: file.uid,
@@ -225,20 +272,15 @@ const handleChange = (file: UploadFile) => {
size: bytesToSize(file.size as number),
file: file,
};
+ changeAllSizes(file, "add");
fileTableList.data.push(item);
- selectedFiles.push({
- id: item.id,
- name: item.name,
- file: item.file,
- percent: 0,
- });
- // 异步更新选中状态
- nextTick(() => {
- const row = fileTableList.data.find((val) => item.id === val.id);
- if (row) {
- fileTableRef.value.toggleRowSelection(row, true);
- }
- });
+};
+
+// 超出文件数量限制时的处理
+const handleExceed = () => {
+ ElMessage.warning(
+ `超出文件数量限制,最多只能上传 ${props.maxFileNum} 个文件!`
+ );
};
const handleProgress = (e: UploadProgressEvent) => {
@@ -287,13 +329,18 @@ watch(
immediate: true,
}
);
-
+const batchDelete = () => {
+ if (!selectedFiles.length) {
+ ElMessage.warning(`请先选择文件再进行批量删除操作!`);
+ return;
+ }
+ selectedFiles.forEach((item) => item && deleteFile(item));
+};
const deleteFile = (row?: any) => {
if (row) {
const idx = fileTableList.data.findIndex((item: any) => item.id === row.id);
fileTableList.data.splice(idx, 1);
- } else if (selectedFiles.length > 0) {
- selectedFiles.forEach((item) => item && deleteFile(item));
+ changeAllSizes(row.file, "del");
}
};
@@ -330,10 +377,10 @@ const handleLimitSize = (selectedFileData) => {
return flag;
};
-
+// 提交资产库 .zip
const uploadFiles = () => {
if (props.singleFileLimit) {
- if (handleLimitSize(selectedFiles)) {
+ if (handleLimitSize(fileTableList.data)) {
ElMessage({
showClose: true,
message: t("dialogTipText.singleFileSize"),
@@ -346,8 +393,8 @@ const uploadFiles = () => {
}
props?.handleImportLoading(true);
let uploadFileNumber = 0;
- props.handInitTaskList(selectedFiles).then((res: any) => {
- uploadingList.value = selectedFiles.map((item) => {
+ props.handInitTaskList(fileTableList.data).then((res: any) => {
+ uploadingList.value = fileTableList.data.map((item) => {
return {
id: item.id,
name: item.name,
@@ -374,7 +421,7 @@ const uploadFiles = () => {
},
onSuccess: (response: any) => {
uploadFileNumber += 1;
- if (uploadFileNumber === selectedFiles.length) {
+ if (uploadFileNumber === fileTableList.data.length) {
props.handleQueryTaskList();
}
},
@@ -404,14 +451,16 @@ const uploadFiles = () => {
}),
];
uploadingList.value.length && handleToggleUploadNotify();
+ props.handleCancelVisible();
+ fileTableList.data = [];
+ allFileSizes.value = 0;
});
- props.handleCancelVisible();
- fileTableList.data = [];
};
+// 资产库内提交文件 .pdf .ms .docx......
const uploadKnowledgeFile = () => {
if (props.singleFileLimit) {
- if (handleLimitSize(selectedFiles)) {
+ if (handleLimitSize(fileTableList.data)) {
ElMessage({
showClose: true,
message: t("dialogTipText.singleFileSize"),
@@ -424,7 +473,7 @@ const uploadKnowledgeFile = () => {
}
props?.handleImportLoading(true);
let uploadFileNumber = 0;
- uploadingList.value = selectedFiles.map((item) => {
+ uploadingList.value = fileTableList.data.map((item) => {
return {
id: item.id,
name: item.name,
@@ -452,7 +501,7 @@ const uploadKnowledgeFile = () => {
uploadingList.value.length && handleToggleUploadNotify();
},
onSuccess: (response: any) => {
- props.handleQueryTaskList(selectedFiles);
+ props.handleQueryTaskList(fileTableList.data);
uploadFileNumber += 1;
item.percent = 100;
item.uploadStatus = "success";
@@ -463,6 +512,7 @@ const uploadKnowledgeFile = () => {
uploadingList.value.length && handleToggleUploadNotify();
props.handleCancelVisible();
fileTableList.data = [];
+ allFileSizes.value = 0;
};
const handleToggleUploadNotify = () => {
diff --git a/src/lang/package/en.ts b/src/lang/package/en.ts
index 04e4da2f7088220126fd353bd074a54eecb82b1a..053f7248d0b38b54d56f615e4ec9e379f1806b75 100644
--- a/src/lang/package/en.ts
+++ b/src/lang/package/en.ts
@@ -138,6 +138,7 @@ export default {
export: "Export",
edit: "Edit",
delete: "Delete",
+ batchDelete: "Batch Delete",
retry: "Retry",
restart: "Restart",
clearAll: "Clear all",
@@ -183,6 +184,8 @@ export default {
fileName: "File name",
fileSize: "Size",
singleFileSize: "The size of a file cannot exceed 20 MB.",
+ fileNums: "File Number",
+ fileSizes: "File Size",
},
formTipText: {
analyticTip:
diff --git a/src/lang/package/zh-cn.ts b/src/lang/package/zh-cn.ts
index 262688e22f46e14590126c2a5d41b49b2d81a313..1062fd7edc6dd50e642123cd94dfde5120d8fea7 100644
--- a/src/lang/package/zh-cn.ts
+++ b/src/lang/package/zh-cn.ts
@@ -143,6 +143,7 @@ export default {
export: "导出",
edit: "编辑",
delete: "删除",
+ batchDelete: "批量删除",
retry: "重试",
restart: "重启",
clearAll: "全部清空",
@@ -187,6 +188,8 @@ export default {
fileName: "文件名",
fileSize: "大小",
singleFileSize: "单个文件大小不能超过20MB",
+ fileNums: "文件数",
+ fileSizes: "文件大小",
},
formTipText: {
analyticTip:
diff --git a/src/styles/upload.scss b/src/styles/upload.scss
index 4818025ccdcd1a564a3098b440c49637f7237c18..798ad4960737219ef6eea71c9eab91c08bd93021 100644
--- a/src/styles/upload.scss
+++ b/src/styles/upload.scss
@@ -6,6 +6,7 @@
.upload-to-list {
.list-action {
display: flex;
+ justify-content: space-between;
.file-ops {
height: 24px;
@@ -15,13 +16,23 @@
.delFileBtn {
height: 24px;
- padding: 4px 20px;
+ padding: 4px 10px;
font-size: 12px;
span {
min-width: unset !important;
}
}
+
+ .list-action-tip {
+ width: 60%;
+ font-size: var(--o-font-size-info);
+ display: flex;
+ justify-content: end;
+ &>:first-child{
+ margin-right: 15px;
+ }
+ }
}
.list-tip {
@@ -161,7 +172,7 @@
height: 24px;
}
- + .upload-tip {
+ +.upload-tip {
margin-top: 24px;
}
}
@@ -171,13 +182,16 @@
height: 184px;
cursor: default;
background-color: var(--o-bg-color-base);
+
.cell {
font-size: 12px !important;
}
+
.el-table {
::-webkit-scrollbar {
width: 4px !important;
}
+
.el-scrollbar__bar.is-vertical {
width: 4px !important;
}
@@ -220,4 +234,4 @@
.el-progress__text {
font-weight: 600 !important;
}
-}
+}
\ No newline at end of file
diff --git a/src/views/knowledgeFile/index.vue b/src/views/knowledgeFile/index.vue
index d5764527a654b569d7cae8ae4cb7cf04eac2248c..cd78c36d037b1f06af7d5f05b0cb0e3454605c82 100644
--- a/src/views/knowledgeFile/index.vue
+++ b/src/views/knowledgeFile/index.vue
@@ -558,7 +558,7 @@
:tipText="$t('dialogTipText.fileAllFormat')"
accept=".md,.xlsx,.pdf,.doc,.docx,.txt,.pptx,.html"
:maxFileNum="128"
- :maxSize="0.5"
+ :maxSize="0.488"
:handleUploadMyFile="handleUploadMyFile"
:handleQueryTaskList="handleQueryTaskList"
:handleCancelVisible="handleCancelVisible"
diff --git a/src/views/knowledgeFileSection/index.vue b/src/views/knowledgeFileSection/index.vue
index 99ce27716eb006f4eb834875b471202a13b7582e..03064740222b1ef99c1a60d677156a946f79e2c4 100644
--- a/src/views/knowledgeFileSection/index.vue
+++ b/src/views/knowledgeFileSection/index.vue
@@ -238,8 +238,7 @@
- {{ itemText }}
-
+
diff --git a/vite.config.ts b/vite.config.ts
index 3337c7e3620cb59e4b5ca2d3ee68bbdeb4c8cd4e..2c6ec92e85a38f33e681b9a371cfc0c22bc184f0 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -60,10 +60,11 @@ export default defineConfig(({ mode }: ConfigEnv): UserConfig => {
open: true,
proxy: {
"/witchaind/api": {
- target: "http://116.63.144.61:9988",
+ target: "https://euler-copilot-master.test.osinfra.cn/witchaind",
changeOrigin: true,
ws: false,
- rewrite: (path) => path.replace(new RegExp("^" + "/witchaind/api"), ""),
+ secure: false,
+ rewrite: (path) => path.replace(/^\/witchaind\/api/, "/api")
},
},
},