Browse Source

导入文件夹

hanyuqing
hanyuqing 4 months ago
parent
commit
323fd8454f
  1. 4
      gyxtp/src/view/articleInfo.vue
  2. 2
      gyxtp/src/view/graphPageCopy0926.vue
  3. 4
      gyxtp/src/view/pointArticleInfo.vue
  4. 2
      gyxtp/src/view/pointInfo.vue
  5. 2
      gyxtp/src/view/small.vue
  6. 4
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/FolderUploadController.java
  7. 250
      ruoyi-ui/src/views/system/SysPoint/index.vue
  8. 24
      ruoyi-ui/src/views/system/fileManage/index.vue

4
gyxtp/src/view/articleInfo.vue

@ -1,7 +1,7 @@
<template>
<div class="about">
<HeaderInfo style="height: 5.65vw;float: left;"></HeaderInfo>
<leftInfo style="width: 5vw;position: absolute;top: 5.4vw;" :leftNum="1" :zhedie="zhedie" v-if="zhedie==0"
<leftInfo style="width: 5vw;position: absolute;top: 5.4vw;" :leftNum="0" :zhedie="zhedie" v-if="zhedie==0"
@show="isZhe"></leftInfo>
<div v-if="zhedie==0" @click="this.zhedie = 1"
style="position: absolute;height: 3vw;width: 3vw;font-size: 2vw;border-radius: 0 50% 50% 0;z-index: 1000;bottom:45%;left:5vw;">
@ -73,7 +73,7 @@
<!-- </div>-->
<!-- </div>-->
<!-- <vue-pdf-embed class="yuanwen" :source=" this.content.uploadUrl" v-if="!notFound"/>-->
<vue-pdf-embed class="yuanwen" :source="`http://localhost/prod-api/api/pdfFile/${srcPdf}`" v-if="!notFound"/>
<vue-pdf-embed class="yuanwen" :source="`http://localhost/dev-api/api/pdfFile/${srcPdf}`" v-if="!notFound"/>
<!-- <div class="yuanwen" v-html="content.content"></div>-->
<!-- <vue-pdf-embed class="yuanwen" :source="`http://localhost/dev-api/api/qwer/新建文本文档.txt`"/>-->
<!-- 新建文本文档-->

2
gyxtp/src/view/graphPageCopy0926.vue

@ -358,7 +358,7 @@ export default {
defaultLineTextOffset_y: -3,
// 使 center
layout: {
layoutName: 'center', // 使 center
layoutName: 'fixed', // 使 center
levelDistance: '1000,1000,1000,1000,3000,3000,3000,3000', //
startAngle: -Math.PI / 2, // -90°
},

4
gyxtp/src/view/pointArticleInfo.vue

@ -1,7 +1,7 @@
<template>
<div class="about">
<HeaderInfo style="height: 5.65vw;float: left;"></HeaderInfo>
<leftInfo style="width: 5vw;position: absolute;top: 5.4vw;" :leftNum="1" :zhedie="zhedie" v-if="zhedie==0"
<leftInfo style="width: 5vw;position: absolute;top: 5.4vw;" :leftNum="3" :zhedie="zhedie" v-if="zhedie==0"
@show="isZhe"></leftInfo>
<div v-if="zhedie==0" @click="this.zhedie = 1"
style="position: absolute;height: 3vw;width: 3vw;font-size: 2vw;border-radius: 0 50% 50% 0;z-index: 1000;bottom:45%;left:5vw;">
@ -73,7 +73,7 @@
<!-- </div>-->
<!-- </div>-->
<!-- <vue-pdf-embed class="yuanwen" :source=" this.content.uploadUrl" />-->
<vue-pdf-embed class="yuanwen" :source="`http://localhost/prod-api/api/pdfFile/${srcPdf}`" v-if="notFound"/>
<vue-pdf-embed class="yuanwen" :source="`http://localhost/dev-api/api/pdfFile/${srcPdf}`" v-if="notFound"/>
<!-- <div class="yuanwen" v-html="content.content"></div>-->
<div v-if="notFound == false" style=" display: grid;
place-items: center;AAAAA

2
gyxtp/src/view/pointInfo.vue

@ -1,7 +1,7 @@
<template>
<div class="about">
<HeaderInfo style="height: 5.65vw;float: left; position: absolute"></HeaderInfo>
<leftInfo style="width: 5vw;position: absolute;top: 5.4vw;" :leftNum="1" :zhedie="0" @show="isZhe"></leftInfo>
<leftInfo style="width: 5vw;position: absolute;top: 5.4vw;" :leftNum="3" :zhedie="0" @show="isZhe"></leftInfo>
<div class="docInfo" >
<div class="bodyDiv" style=" margin-top: 9.65vw;;

2
gyxtp/src/view/small.vue

File diff suppressed because one or more lines are too long

4
ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/FolderUploadController.java

@ -37,7 +37,9 @@ public class FolderUploadController {
private static final String UPLOAD_DIR = "uploads/";
@PostMapping("/upload-folder")
public ResponseEntity<Map<String, Object>> handleFolderUpload(@RequestParam("files") MultipartFile[] files) {
public ResponseEntity<Map<String, Object>> handleFolderUpload(@RequestParam("files") MultipartFile[] files,@RequestParam("type") String type) {
System.out.println("sssss");
System.out.println(type);
Map<String, Object> response = new HashMap<>();
List<String> filePaths = new ArrayList<>();

250
ruoyi-ui/src/views/system/SysPoint/index.vue

@ -78,9 +78,82 @@
@click="handleImportRelation">导入文献
</el-button>
<!-- <el-button v-hasPermi="['system:SysPoint:add']" type="info" plain style="float: left" icon="el-icon-upload2" size="mini"-->
<!-- @click="handleImportRelation2">导入txt-->
<!-- </el-button>-->
<!-- 文件夹上传弹窗 -->
<el-dialog
title="选择文件夹"
:visible.sync="dialogVisible"
width="50%"
:close-on-click-modal="false"
@close="cancelSelect"
:destroy-on-close="true"
>
<div class="folder-upload-container">
<!-- 隐藏的原生 input -->
<input
type="file"
ref="folderInput"
webkitdirectory
directory
multiple
@change="handleFolderSelect"
style="display: none"
/>
<el-radio-group v-model="type" style="margin-bottom: 5px">
<el-radio-button label="CNKI"></el-radio-button>
<el-radio-button label="万方"></el-radio-button>
<el-radio-button label="维普"></el-radio-button>
<el-radio-button label="军事"></el-radio-button>
</el-radio-group>
<!-- 美观的上传区域 -->
<el-card shadow="hover" class="upload-card">
<div
class="upload-area"
@click="triggerFileInput"
v-if="selectedFiles.length === 0"
>
<i class="el-icon-folder-opened upload-icon"></i>
<p class="tip">点击选择文件夹或拖拽文件夹到此处</p>
<p class="sub-tip">支持文件夹上传Chrome/Edge/Firefox</p>
</div>
<!-- 已选择文件列表 -->
<div v-else>
<p class="selected-title">已选择 {{ selectedFiles.length }} 个文件</p>
<el-scrollbar style="max-height: 300px">
<div class="file-list">
<div
class="file-item"
v-for="(file, index) in selectedFiles"
:key="index"
>
<i class="el-icon-document"></i>
<span class="file-name">{{ file.webkitRelativePath }}</span>
<i
class="el-icon-close delete-icon"
@click="removeFile(index)"
></i>
</div>
</div>
</el-scrollbar>
</div>
</el-card>
</div>
<!-- 操作按钮 -->
<div slot="footer" class="dialog-footer">
<el-button @click="cancelSelect">取消</el-button>
<el-button
type="primary"
@click="uploadFolder"
:disabled="selectedFiles.length === 0"
>
开始上传
</el-button>
</div>
</el-dialog>
<el-button v-hasPermi="['system:SysPoint:add']" type="info" plain style="float: left" icon="el-icon-upload2" size="mini"
@click="dialogVisible = true">导入txt
</el-button>
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
@ -198,11 +271,15 @@
<script>
import {listSysPoint, getSysPoint, delSysPoint, addSysPoint, updateSysPoint, deleteAll} from "@/api/system/SysPoint";
import {uploadFolder} from "../../../api/system/file";
export default {
name: "SysPoint",
data() {
return {
dialogVisible: false,
selectedFiles:[],
type:"CNKI",
upload1: {
tip: "准备上传文件",
open: false,
@ -263,6 +340,74 @@ export default {
this.getList();
},
methods: {
cancelSelect() {
this.selectedFiles = [];
if (this.$refs.folderInput) {
this.$refs.folderInput.value = '';
}
this.dialogVisible = false;
},
removeFile(index) {
this.selectedFiles.splice(index, 1);
//
// if (this.selectedFiles.length === 0) {
// this.$refs.folderInput.value = ''; // input
// }
},
//
triggerFileInput() {
this.$refs.folderInput.click();
},
//
handleFolderSelect(e) {
const files = e.target.files;
this.selectedFiles = Array.from(files);
this.$message({
message: `已选择 ${files.length} 个文件`,
type: 'success'
});
},
//
async uploadFolder() {
if (this.selectedFiles.length === 0) {
this.$message.warning('请先选择一个文件夹');
return;
}
const formData = new FormData();
this.selectedFiles.forEach(file => {
formData.append('files', file, file.webkitRelativePath);
});
try {
formData.append("type",this.type)
const response = await uploadFolder(formData);
// code
if (response.code === 200) {
this.$message.success(response.data.message || '上传成功!');
this.dialogVisible = false;
this.selectedFiles = [];
} else {
this.$message.error(response.data.message || '上传失败');
}
} catch (error) {
console.error('上传出错:', error);
//
if (error.response) {
// 2xx
this.$message.error(`服务器错误: ${error.response.status}`);
} else if (error.request) {
//
this.$message.error('网络错误');
} else {
this.$message.error('请求异常');
}
}
},
handleFileSuccess1(response, file, fileList) {
this.upload1.open = false;
this.upload1.isUploading = false;
@ -413,3 +558,102 @@ export default {
}
};
</script>
<style scoped>
.template-list::v-deep .el-table td,
.template-list::v-deep .el-table th {
font-size: 1vw !important;
color: #67C23A;
}
.upload-card {
border: 1px dashed #d9d9d9;
border-radius: 8px;
}
.upload-area {
text-align: center;
padding: 40px 20px;
cursor: pointer;
color: #606266;
}
.upload-area:hover {
background: #f5f7fa;
}
.upload-icon {
font-size: 48px;
color: #409eff;
margin-bottom: 10px;
}
.tip {
font-size: 16px;
margin: 0;
color: #303133;
}
.sub-tip {
font-size: 13px;
color: #909399;
margin-top: 5px;
}
.selected-title {
font-size: 14px;
color: #303133;
margin-bottom: 10px;
}
.file-list {
padding: 0;
list-style: none;
}
.file-item {
display: flex;
align-items: center;
padding: 6px 10px;
font-size: 14px;
color: #606266;
border-bottom: 1px solid #eee;
}
.file-item i {
color: #909399;
margin-right: 8px;
}
.file-name {
font-size: 13px;
color: #333;
word-break: break-all;
}
.dialog-footer {
text-align: right;
}
.file-item {
display: flex;
align-items: center;
padding: 6px 0;
position: relative;
}
.file-name {
flex: 1;
margin-left: 8px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.delete-icon {
font-size: 14px;
color: #909399;
cursor: pointer;
margin-left: 8px;
}
.delete-icon:hover {
color: #f56c6c;
}
</style>

24
ruoyi-ui/src/views/system/fileManage/index.vue

@ -69,9 +69,9 @@
<!-- @change="handleFolderSelect"-->
<!-- />-->
<!-- <button @click="uploadFolder">上传文件夹</button>-->
<!-- <el-button type="primary" size="mini" @click="dialogVisible = true">-->
<!-- 选择并上传文件夹-->
<!-- </el-button>-->
<el-button type="primary" size="mini" @click="dialogVisible = true">
选择并上传文件夹
</el-button>
<!-- 文件夹上传弹窗 -->
<el-dialog
@ -93,7 +93,12 @@
@change="handleFolderSelect"
style="display: none"
/>
<el-radio-group v-model="type" style="margin-bottom: 5px">
<el-radio-button label="CNKI"></el-radio-button>
<el-radio-button label="万方"></el-radio-button>
<el-radio-button label="维普"></el-radio-button>
<el-radio-button label="军事"></el-radio-button>
</el-radio-group>
<!-- 美观的上传区域 -->
<el-card shadow="hover" class="upload-card">
<div
@ -610,6 +615,7 @@ export default {
data() {
return {
type:"CNKI",
selectedFiles: [],
userRemark:"",
options1:[
@ -992,6 +998,7 @@ export default {
});
try {
formData.append("type",this.type)
const response = await uploadFolder(formData);
// code
@ -1877,15 +1884,12 @@ export default {
try {
//
await this.$modal.confirm({
title: '提示',
content: '是否确认重置数据?'
});
await this.$modal.confirm('是否确认重置数据?'
);
//
this.loading = true;
await this.deletAllInfo(); //
reset(); //
await reset(); //
this.getFileListInfo(); //
} catch (error) {
// confirm

Loading…
Cancel
Save