|
@@ -64,8 +64,6 @@
|
|
|
@click="handleAddFolder(data)">
|
|
|
新增
|
|
|
</el-button>
|
|
|
-
|
|
|
-
|
|
|
<!-- 修改按钮始终显示 -->
|
|
|
<el-button
|
|
|
size="mini"
|
|
@@ -75,7 +73,6 @@
|
|
|
@click="handleUpdateFolderName(data)">
|
|
|
修改
|
|
|
</el-button>
|
|
|
-
|
|
|
<!-- 删除按钮始终显示 -->
|
|
|
<el-button
|
|
|
size="mini"
|
|
@@ -86,7 +83,6 @@
|
|
|
删除
|
|
|
</el-button>
|
|
|
</el-dropdown-menu>
|
|
|
-
|
|
|
</template>
|
|
|
</el-dropdown>
|
|
|
</span>
|
|
@@ -154,16 +150,16 @@
|
|
|
>上传文件
|
|
|
</el-button>
|
|
|
</el-col>
|
|
|
- <el-col :span="1.5">
|
|
|
- <el-button
|
|
|
- type="warning"
|
|
|
- plain
|
|
|
- icon="el-icon-download"
|
|
|
- size="mini"
|
|
|
- @click="handleExport"
|
|
|
- >导出文件
|
|
|
- </el-button>
|
|
|
- </el-col>
|
|
|
+<!-- <el-col :span="1.5">-->
|
|
|
+<!-- <el-button-->
|
|
|
+<!-- type="warning"-->
|
|
|
+<!-- plain-->
|
|
|
+<!-- icon="el-icon-download"-->
|
|
|
+<!-- size="mini"-->
|
|
|
+<!-- @click="handleExport"-->
|
|
|
+<!-- >导出文件-->
|
|
|
+<!-- </el-button>-->
|
|
|
+<!-- </el-col>-->
|
|
|
<el-col :span="1.5">
|
|
|
<el-button
|
|
|
type="warning"
|
|
@@ -186,7 +182,6 @@
|
|
|
</el-col>
|
|
|
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
|
|
|
</el-row>
|
|
|
-
|
|
|
<!-- 文件列表 --->
|
|
|
<el-table v-loading="loading" :data="fileList" @selection-change="handleSelectionChange">
|
|
|
<el-table-column type="selection" width="50" align="center"/>
|
|
@@ -227,7 +222,7 @@
|
|
|
<el-table-column
|
|
|
label="操作"
|
|
|
align="center"
|
|
|
- width="160"
|
|
|
+ width="200"
|
|
|
class-name="small-padding fixed-width"
|
|
|
>
|
|
|
<template #default="scope">
|
|
@@ -238,6 +233,13 @@
|
|
|
@click="handleDownload(scope.row)"
|
|
|
>下载
|
|
|
</el-button>
|
|
|
+<!-- <el-button-->
|
|
|
+<!-- v-if="['pdf', 'doc', 'docx', 'xls', 'xlsx'].includes(scope.row.fileType.toLowerCase())"-->
|
|
|
+<!-- size="mini"-->
|
|
|
+<!-- type="text"-->
|
|
|
+<!-- icon="el-icon-view"-->
|
|
|
+<!-- @click="handlePreview(scope.row)"-->
|
|
|
+<!-- >预览</el-button>-->
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
@@ -251,6 +253,7 @@
|
|
|
/>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
+
|
|
|
<!-- 新增文件夹对话框 -->
|
|
|
<el-dialog
|
|
|
:title="isAddFolder ? '新增文件夹' : '修改文件夹名称'"
|
|
@@ -279,6 +282,32 @@
|
|
|
</span>
|
|
|
</template>
|
|
|
</el-dialog>
|
|
|
+<!-- <!– 文件预览对话框 –>-->
|
|
|
+<!-- <el-dialog-->
|
|
|
+<!-- :title="previewFile.fileName"-->
|
|
|
+<!-- :visible.sync="previewDialogVisible"-->
|
|
|
+<!-- width="80%"-->
|
|
|
+<!-- :close-on-click-modal="false"-->
|
|
|
+<!-- @closed="handlePreviewClosed"-->
|
|
|
+<!-- >-->
|
|
|
+<!-- <div v-if="previewFile.fileType === 'pdf'" class="preview-container">-->
|
|
|
+<!-- <!– 使用Google Docs在线预览PDF –>-->
|
|
|
+<!-- <iframe-->
|
|
|
+<!-- :src="'https://docs.google.com/gview?url=' + encodeURIComponent(previewFile.url) + '&embedded=true'" style="width:100%; height:600px;"-->
|
|
|
+<!-- frameborder="0"-->
|
|
|
+<!-- ></iframe>-->
|
|
|
+<!-- </div>-->
|
|
|
+<!-- <div v-else-if="['doc', 'docx', 'xls', 'xlsx'].includes(previewFile.fileType)" class="preview-container">-->
|
|
|
+<!-- <!– 使用Office Online Server预览文档 –>-->
|
|
|
+<!-- <iframe-->
|
|
|
+<!-- :src="'https://view.officeapps.live.com/op/embed.aspx?src=' + encodeURIComponent(previewFile.url)" style="width:100%; height:600px;"-->
|
|
|
+<!-- frameborder="0"-->
|
|
|
+<!-- ></iframe>-->
|
|
|
+<!-- </div>-->
|
|
|
+<!-- <div v-else class="preview-container">-->
|
|
|
+<!-- <p>该类型文件不支持在线预览</p>-->
|
|
|
+<!-- </div>-->
|
|
|
+<!-- </el-dialog>-->
|
|
|
|
|
|
<!-- 文件导入对话框 -->
|
|
|
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
|
|
@@ -306,6 +335,33 @@
|
|
|
<el-button @click="upload.open = false">取 消</el-button>
|
|
|
</div>
|
|
|
</el-dialog>
|
|
|
+
|
|
|
+<!-- <!– 文件预览对话框 –>-->
|
|
|
+<!-- <el-dialog-->
|
|
|
+<!-- :title="previewFile.fileName"-->
|
|
|
+<!-- :visible.sync="previewDialogVisible"-->
|
|
|
+<!-- width="80%"-->
|
|
|
+<!-- :close-on-click-modal="false"-->
|
|
|
+<!-- @closed="handlePreviewClosed"-->
|
|
|
+<!-- >-->
|
|
|
+<!-- <div v-if="previewFile.fileType === 'pdf'" class="preview-container">-->
|
|
|
+<!-- <iframe-->
|
|
|
+<!-- :src="'https://docs.google.com/gview?url=' + encodeURIComponent(previewFile.url) + '&embedded=true'"-->
|
|
|
+<!-- style="width:100%; height:600px;"-->
|
|
|
+<!-- frameborder="0"-->
|
|
|
+<!-- ></iframe>-->
|
|
|
+<!-- </div>-->
|
|
|
+<!-- <div v-else-if="['doc', 'docx', 'xls', 'xlsx'].includes(previewFile.fileType)" class="preview-container">-->
|
|
|
+<!-- <iframe-->
|
|
|
+<!-- :src="'https://view.officeapps.live.com/op/embed.aspx?src=' + encodeURIComponent(previewFile.url)"-->
|
|
|
+<!-- style="width:100%; height:600px;"-->
|
|
|
+<!-- frameborder="0"-->
|
|
|
+<!-- ></iframe>-->
|
|
|
+<!-- </div>-->
|
|
|
+<!-- <div v-else class="preview-container">-->
|
|
|
+<!-- <p>该类型文件不支持在线预览</p>-->
|
|
|
+<!-- </div>-->
|
|
|
+<!-- </el-dialog>-->
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
@@ -321,7 +377,15 @@ import {
|
|
|
getFolder,
|
|
|
updateFolder
|
|
|
} from "@/api/system/folder";
|
|
|
-import {addFile, delFile, download, downloadTemplate, listFile, updateFile, updateFileStatus} from "@/api/system/file";
|
|
|
+import {
|
|
|
+ addFile,
|
|
|
+ delFile,
|
|
|
+ download,
|
|
|
+ downloadTemplate,
|
|
|
+ listFile,
|
|
|
+ updateFile,
|
|
|
+ updateFileStatus
|
|
|
+} from "@/api/system/file";
|
|
|
import dict from "@/utils/dict";
|
|
|
import {parseTime} from "@/utils/xzl";
|
|
|
import {listDept} from "@/api/system/dept";
|
|
@@ -392,6 +456,12 @@ export default {
|
|
|
{ required: true, message: '请选择部门', trigger: 'change' }
|
|
|
]
|
|
|
},
|
|
|
+ previewDialogVisible: false,
|
|
|
+ previewFile: {
|
|
|
+ fileName: '',
|
|
|
+ url: '',
|
|
|
+ fileType: ''
|
|
|
+ },
|
|
|
// 是否为新增文件夹操作
|
|
|
isAddFolder: true,
|
|
|
// 当前用户部门ID
|
|
@@ -435,6 +505,7 @@ export default {
|
|
|
status: undefined,
|
|
|
folderId: undefined,
|
|
|
createBy: undefined,
|
|
|
+ deptId: undefined,
|
|
|
beginCreateTime: undefined,
|
|
|
endCreateTime: undefined,
|
|
|
beginUpdateTime: undefined,
|
|
@@ -496,7 +567,6 @@ export default {
|
|
|
this.getConfigKey("sys.user.initPassword").then(response => {
|
|
|
this.initPassword = response.msg;
|
|
|
});
|
|
|
- console.log('dict.type.sys_file_status:', dict.type.sys_file_status);
|
|
|
},
|
|
|
methods: {
|
|
|
parseTime,
|
|
@@ -532,6 +602,7 @@ export default {
|
|
|
this.loading = false;
|
|
|
});
|
|
|
},
|
|
|
+ /** 获取部门下拉树结构 */
|
|
|
getFileTree() {
|
|
|
folderTreeSelectByDeptId().then(response => {
|
|
|
this.fileOptions = response.data;
|
|
@@ -549,23 +620,17 @@ export default {
|
|
|
this.selectedFolderId = data.id;
|
|
|
this.handleQuery();
|
|
|
},
|
|
|
+ /** 获取用户信息 */
|
|
|
getUserInfo() {
|
|
|
- getUserProfile().then(response => {
|
|
|
- this.userDeptId = response.data.deptId;
|
|
|
- });
|
|
|
- },
|
|
|
- // 文件状态修改
|
|
|
- handleStatusChange(row) {
|
|
|
- const text = row.status === "0" ? "启用" : "停用";
|
|
|
- this.$modal.confirm('确认要"' + text + '"文件吗?').then(() => {
|
|
|
- return updateFileStatus(row.fileId, row.status);
|
|
|
- }).then(() => {
|
|
|
- this.$modal.msgSuccess(text + "成功");
|
|
|
- }).catch(() => {
|
|
|
- // 如果接口失败,回滚状态
|
|
|
- row.status = row.status === "0" ? "1" : "0";
|
|
|
- });
|
|
|
+ getUserProfile().then(response => {
|
|
|
+ this.userDeptId = response.data.deptId;
|
|
|
+ // 将部门 ID 赋值给 queryParams
|
|
|
+ this.queryParams.deptId = this.userDeptId;
|
|
|
+ // 调用获取文件列表方法
|
|
|
+ this.getList();
|
|
|
+ });
|
|
|
},
|
|
|
+ /** 重置按钮操作 */
|
|
|
// 取消按钮
|
|
|
cancel() {
|
|
|
this.open = false;
|
|
@@ -591,6 +656,15 @@ export default {
|
|
|
};
|
|
|
this.resetForm("form");
|
|
|
},
|
|
|
+/** 获取部门列表 */
|
|
|
+ async getDeptList() {
|
|
|
+ try {
|
|
|
+ const response = await listDept();
|
|
|
+ this.deptOptions = response.data;
|
|
|
+ } catch (error) {
|
|
|
+ this.$message.error('获取部门列表失败');
|
|
|
+ }
|
|
|
+ },
|
|
|
/** 搜索按钮操作 */
|
|
|
handleQuery() {
|
|
|
this.queryParams.pageNum = 1;
|
|
@@ -617,6 +691,7 @@ export default {
|
|
|
fileType: undefined,
|
|
|
status: undefined,
|
|
|
folderId: undefined,
|
|
|
+ deptId: undefined,
|
|
|
beginCreateTime: undefined,
|
|
|
endCreateTime: undefined,
|
|
|
beginUpdateTime: undefined,
|
|
@@ -722,24 +797,83 @@ export default {
|
|
|
// 支持分页:当前页码 * 每页条数 + 当前行索引
|
|
|
return (this.queryParams.pageNum - 1) * this.queryParams.pageSize + index + 1;
|
|
|
},
|
|
|
-
|
|
|
- async getDeptList() {
|
|
|
+ // 文件状态修改
|
|
|
+ handleStatusChange(row) {
|
|
|
+ const text = row.status === "0" ? "启用" : "停用";
|
|
|
+ this.$modal.confirm('确认要"' + text + '"文件吗?').then(() => {
|
|
|
+ return updateFileStatus(row.fileId, row.status);
|
|
|
+ }).then(() => {
|
|
|
+ this.$modal.msgSuccess(text + "成功");
|
|
|
+ }).catch(() => {
|
|
|
+ // 如果接口失败,回滚状态
|
|
|
+ row.status = row.status === "0" ? "1" : "0";
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 删除文件
|
|
|
+ handleDelete() {
|
|
|
+ if (this.ids.length === 0) {
|
|
|
+ this.$message.warning('您未选择文件,请选择要删除的文件');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ delFile(this.ids).then(() => {
|
|
|
+ this.$modal.msgSuccess("删除成功");
|
|
|
+ this.getList(); // 刷新文件列表
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 文件下载
|
|
|
+ async handleDownload(row) {
|
|
|
try {
|
|
|
- const response = await listDept();
|
|
|
- this.deptOptions = response.data;
|
|
|
+ // 等待Promise解析,获取响应对象
|
|
|
+ const response = await download(row.fileId) // fileId替换为实际的文件标识
|
|
|
+ console.log(row.fileName)
|
|
|
+ this.parseBlob(response, row.fileName)
|
|
|
+
|
|
|
} catch (error) {
|
|
|
- this.$message.error('获取部门列表失败');
|
|
|
+ this.$modal.msgError('下载失败:' + error.message)
|
|
|
}
|
|
|
},
|
|
|
-
|
|
|
+ parseBlob(blob, fileName) {
|
|
|
+ const url = window.URL.createObjectURL(new Blob([blob]))
|
|
|
+ const link = document.createElement('a')
|
|
|
+ link.href = url
|
|
|
+ link.setAttribute('download', fileName) // 设置下载文件名
|
|
|
+ document.body.appendChild(link)
|
|
|
+ link.click()
|
|
|
+ document.body.removeChild(link)
|
|
|
+ window.URL.revokeObjectURL(url) // 释放内存
|
|
|
+ },
|
|
|
+// async handlePreview(row) {
|
|
|
+// try {
|
|
|
+// const response = await getPreviewUrl(row.fileId);
|
|
|
+// if (response.code === 200) {
|
|
|
+// this.previewFile = {
|
|
|
+// fileName: row.fileName,
|
|
|
+// url: response.data.previewUrl,
|
|
|
+// fileType: response.data.fileType
|
|
|
+// };
|
|
|
+// this.previewDialogVisible = true;
|
|
|
+// } else {
|
|
|
+// this.$message.error(response.msg || '获取预览链接失败');
|
|
|
+// }
|
|
|
+// } catch (error) {
|
|
|
+// this.$message.error('文件预览失败:' + error.message);
|
|
|
+// }
|
|
|
+// },
|
|
|
+// // 处理预览对话框关闭
|
|
|
+// handlePreviewClosed() {
|
|
|
+// // 可选:在这里添加清理逻辑,如撤销预览URL等
|
|
|
+// },
|
|
|
// 新增文件夹
|
|
|
- handleAddFolder(data) {
|
|
|
+ async handleAddFolder(data) {
|
|
|
this.isAddFolder = true;
|
|
|
+ let deptId = null;
|
|
|
+ const res = await getFolder(data.id);
|
|
|
+ deptId = res.data?.deptId;
|
|
|
this.folderForm = {
|
|
|
parentId: data.id,
|
|
|
folderName: '',
|
|
|
- deptId: this.userDeptId
|
|
|
- };
|
|
|
+ deptId: deptId
|
|
|
+ };
|
|
|
this.folderDialogVisible = true;
|
|
|
},
|
|
|
// 提交文件夹表单
|
|
@@ -787,7 +921,8 @@ export default {
|
|
|
}).then(({value}) => {
|
|
|
getFolder(data.id).then(res => {
|
|
|
const deptId = res.data.deptId;
|
|
|
- updateFolder({folderId: data.id, folderName: value, deptId: deptId}).then(() => {
|
|
|
+ const createBy = res.data.createBy;
|
|
|
+ updateFolder({folderId: data.id, folderName: value, deptId: deptId,createBy: createBy}).then(() => {
|
|
|
this.$modal.msgSuccess("修改成功");
|
|
|
this.getFileTree(); // 刷新树
|
|
|
});
|
|
@@ -824,37 +959,9 @@ export default {
|
|
|
});
|
|
|
});
|
|
|
},
|
|
|
- handleDelete() {
|
|
|
- if (this.ids.length === 0) {
|
|
|
- this.$message.warning('您未选择文件,请选择要删除的文件');
|
|
|
- return;
|
|
|
- }
|
|
|
- delFile(this.ids).then(() => {
|
|
|
- this.$modal.msgSuccess("删除成功");
|
|
|
- this.getList(); // 刷新文件列表
|
|
|
- });
|
|
|
- },
|
|
|
- async handleDownload(row) {
|
|
|
- try {
|
|
|
- // 等待Promise解析,获取响应对象
|
|
|
- const response = await download(row.fileId) // fileId替换为实际的文件标识
|
|
|
- console.log(row.fileName)
|
|
|
- this.parseBlob(response, row.fileName)
|
|
|
-
|
|
|
- } catch (error) {
|
|
|
- this.$modal.msgError('下载失败:' + error.message)
|
|
|
- }
|
|
|
- },
|
|
|
- parseBlob(blob, fileName) {
|
|
|
- const url = window.URL.createObjectURL(new Blob([blob]))
|
|
|
- const link = document.createElement('a')
|
|
|
- link.href = url
|
|
|
- link.setAttribute('download', fileName) // 设置下载文件名
|
|
|
- document.body.appendChild(link)
|
|
|
- link.click()
|
|
|
- document.body.removeChild(link)
|
|
|
- window.URL.revokeObjectURL(url) // 释放内存
|
|
|
- }
|
|
|
- },
|
|
|
+ }
|
|
|
}
|
|
|
</script>
|
|
|
+
|
|
|
+<style scoped>
|
|
|
+</style>
|