完善文档管理

This commit is contained in:
龙运模
2024-07-27 17:04:28 +08:00
parent fdd217d680
commit 4389884309
9 changed files with 421 additions and 143 deletions
+70 -11
View File
@@ -32,7 +32,7 @@
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item @click="add" icon="sc-icon-CreateFolder">创建文件夹</el-dropdown-item>
<el-dropdown-item @click="table_edit('edit')" icon="sc-icon-CreateShare">创建共享文件夹</el-dropdown-item>
<el-dropdown-item @click="addShare" icon="sc-icon-CreateShare">创建共享文件夹</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
@@ -50,13 +50,16 @@
<el-dropdown-menu>
<el-dropdown-item @click="batch_del" icon="sc-icon-Delete">删除</el-dropdown-item>
<el-dropdown-item @click="table_edit('edit')" icon="sc-icon-Edit">重命名</el-dropdown-item>
<el-dropdown-item @click="share_edit('edit')" icon="sc-icon-ShareBtn">共享</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
<el-button type="primary" plain :size="size" icon="el-icon-sort"></el-button>
</div>
<div class="right-panel">
<scExportList :size="size" @updateShow="exportChangeShow" :exportList="exportList" :show="exportShow" type="14">
<el-button :size="size" icon="sc-icon-Download" @click="exportData">下载</el-button>
</scExportList>
</div>
</el-header>
<el-main class="nopadding">
@@ -70,7 +73,7 @@
</div>
<div class="nameBox" v-else>
<el-icon size="large"><sc-icon-Excel/></el-icon>
<div class="text">{{scope.row.file_name}}</div>
<div class="text">{{scope.row.client_file_name}}</div>
</div>
</template>
<template #size="scope">
@@ -92,18 +95,20 @@
<uploadFile ref="uploadFile" @uploadFileSuccess="uploadFileSuccess" title="上传附件"></uploadFile>
<save-dialog v-if="dialog.save" ref="saveDialog" @success="handleSaveSuccess" @closed="dialog.save=false"></save-dialog>
<shareSave v-if="dialog.shareSave" ref="shareSave" @success="handleSaveSuccess" @closed="dialog.shareSave=false"></shareSave>
</template>
<script>
import saveDialog from './save'
import uploadFile from './uploadFile'
import shareSave from './shareSave'
export default {
name: 'document',
components: {
saveDialog,
uploadFile
uploadFile,
shareSave
},
data() {
return {
@@ -112,9 +117,12 @@ export default {
docsList:[],
docsNextShow:false,
exportShow:false,
exportList:[],
dialog: {
save: false,
permission: false
shareSave: false
},
list:{
apiObj: this.$API.docs.manager.list,
@@ -137,9 +145,41 @@ export default {
this.$refs.saveDialog.open('add').setData(this.params)
})
},
addShare(){
this.dialog.shareSave = true
this.$nextTick(() => {
this.$refs.shareSave.open('add').setData(this.params)
})
},
share_edit(){
let data = this.$TOOL.objCopy(this.params);
let folderList = {
ids:[],
file_type:'folder'
};
let fileList = {
ids:[],
file_type:'file'
};
this.selection.forEach(item=>{
if(item.type == 'folder'){
folderList.ids.push(item.id)
}
if(item.type == 'file'){
fileList.ids.push(item.id)
}
})
data.share = [folderList,fileList];
this.dialog.shareSave = true;
this.$nextTick(() => {
this.$refs.shareSave.open('edit').setData(data)
})
},
//编辑
table_edit(){
if(this.selection.length!=1){
this.$message.warning('有且只能有单条数据编辑');
return
}
let row = this.selection[0];
@@ -158,21 +198,21 @@ export default {
async batch_del(){
const isFolder = this.selection.some(em=>em.type == "folder");
const isFile = this.selection.some(em=>em.type == "file");
if(isFolder && isFile){
this.$message.warning('只能删除同类型的文件,不能同时删除文件和文件夹');
return
}
this.$confirm(`确定删除选中的 ${this.selection.length} 项吗?`, '提示', {
type: 'warning'
}).then(async () => {
const loading = this.$loading();
const params = {ids: this.selection.map(em => em.id)};
let folderList = this.selection.filter(em=>em.type!='file');
let fileList = this.selection.filter(em=>em.type=='file');
let res = {};
if(isFolder){
const params = {ids: folderList.map(em => em.id)};
res = await this.$API.docs.manager.deleteFolder.post(params);
}
if(isFile){
const params = {ids: fileList.map(em => em.id)};
res = await this.$API.docs.manager.deleteFile.post(params);
}
if (res.code == 200) {
@@ -231,6 +271,25 @@ export default {
this.params.folder_id = row.id;
this.$refs.table.upData(this.params);
},
// 导出下载
exportChangeShow(params){
if(params.type == 14){
this.exportShow = params.data.length>0? true:false;
}
},
async exportData() {
const isFolder = this.selection.some(em=>em.type == "folder");
if(isFolder){
this.$message.warning('只能下载文件');
return
}
let params = this.selection.map(em=>em.id);
const res = await this.$API.docs.manager.export.post({file_ids:params});
if(res.code == 200){
this.exportList = res.data;
this.$message.success('操作成功,马上导出');
}
}
}
}
+4
View File
@@ -25,6 +25,7 @@ export default {
},
visible: false,
isSave: false,
file_type:'',
//表单数据
form: {
parent_id:"",
@@ -71,6 +72,9 @@ export default {
if(this.mode == 'edit'){
this.form.parent_id = data.parent_id;
this.form.id = data.id;
if(data.type == 'file'){
this.form.name = data.client_file_name;
}
}
}
}
+17 -131
View File
@@ -19,7 +19,7 @@
</div>
</el-col>
<el-col :span="4">
<el-input type="text" :size="size" prefix-icon="el-icon-Search" placeholder="搜索"></el-input>
<el-input type="text" :size="size" v-model="params.keyword" @input="upSearch" prefix-icon="el-icon-Search" placeholder="搜索"></el-input>
</el-col>
</el-row>
</el-header>
@@ -29,25 +29,7 @@
<el-button type="primary" :size="size" style="margin-right: 12px;">新建文档 <el-icon class="el-icon--right"><el-icon-ArrowDown/></el-icon></el-button>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item @click="add" icon="sc-icon-CreateFolder">创建文件夹</el-dropdown-item>
<el-dropdown-item @click="table_edit('edit')" icon="sc-icon-CreateShare">创建共享文件夹</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
<el-dropdown placement="bottom-start">
<el-button type="primary" plain :size="size" style="margin-right: 12px;">上传 <el-icon class="el-icon--right"><el-icon-ArrowDown/></el-icon></el-button>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item @click="uploadFile" icon="sc-icon-Upload">上传附件</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
<el-dropdown placement="bottom-start">
<el-button type="primary" plain :size="size" style="margin-right: 12px;">操作 <el-icon class="el-icon--right"><el-icon-ArrowDown/></el-icon></el-button>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item @click="batch_del" icon="sc-icon-Delete">删除</el-dropdown-item>
<el-dropdown-item @click="table_edit('edit')" icon="sc-icon-Edit">重命名</el-dropdown-item>
<el-dropdown-item @click="addShare" icon="sc-icon-CreateShare">创建共享文件夹</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
@@ -68,7 +50,7 @@
</div>
<div class="nameBox" v-else>
<el-icon size="large"><sc-icon-Excel/></el-icon>
<div class="text">{{scope.row.file_name}}</div>
<div class="text">{{scope.row.client_file_name}}</div>
</div>
</template>
<template #size="scope">
@@ -88,144 +70,49 @@
</el-main>
</el-container>
<uploadFile ref="uploadFile" @uploadFileSuccess="uploadFileSuccess" title="上传附件"></uploadFile>
<save-dialog v-if="dialog.save" ref="saveDialog" @success="handleSaveSuccess" @closed="dialog.save=false"></save-dialog>
<shareSave v-if="dialog.shareSave" ref="shareSave" @success="handleSaveSuccess" @closed="dialog.shareSave=false"></shareSave>
</template>
<script>
import saveDialog from './save'
import uploadFile from './uploadFile'
import shareSave from './shareSave'
export default {
name: 'share',
components: {
saveDialog,
uploadFile
shareSave
},
data() {
return {
size:'small',
dialog: {
save: false,
permission: false
shareSave: false
},
list:{
apiObj: this.$API.docs.share.list,
column:[]
},
selection: [],
search: {
keyword: null
params: {
keyword: null,
folder_id:"",
name:""
}
}
},
methods: {
//添加
add(){
this.dialog.save = true
this.$nextTick(() => {
this.$refs.saveDialog.open()
})
},
//编辑
table_edit(row){
this.dialog.save = true
this.$nextTick(() => {
this.$refs.saveDialog.open('edit').setData(row)
})
},
//查看
table_show(row){
this.dialog.save = true
this.$nextTick(() => {
this.$refs.saveDialog.open('show').setData(row)
})
},
uploadFile(){
this.$nextTick(()=>{
this.$refs.uploadFile.importFile();
})
},
//权限设置
permission(){
this.dialog.permission = true
this.$nextTick(() => {
this.$refs.permissionDialog.open()
})
},
//删除
async table_del(row){
const reqData = {id: row.id};
const res = await this.$API.demo.post.post(reqData);
if(res.code == 200){
this.$refs.table.refresh()
this.$message.success("删除成功")
}
},
//批量删除
async batch_del(){
const isFolder = this.selection.some(em=>em.type == "folder");
const isFile = this.selection.some(em=>em.type == "file");
if(isFolder && isFile){
this.$message.warning('只能删除同类型的文件,不能同时删除文件和文件夹');
return
}
this.$confirm(`确定删除选中的 ${this.selection.length} 项吗?`, '提示', {
type: 'warning'
}).then(async () => {
const loading = this.$loading();
const params = {ids: this.selection.map(em => em.id)};
let res = {};
if(isFolder){
res = await this.$API.docs.manager.deleteFolder.post(params);
}
if(isFile){
res = await this.$API.docs.manager.deleteFile.post(params);
}
if (res.code == 200) {
this.$refs.table.refresh();
this.$message.success("删除成功");
}
loading.close();
}).catch(() => {
})
},
//表格选择后回调事件
selectionChange(selection){
this.selection = selection;
},
//表格内开关
changeSwitch(val, row){
row.status = row.status == '1'?'0':'1'
row.$switch_status = true;
setTimeout(()=>{
delete row.$switch_status;
row.status = val;
this.$message.success("操作成功")
}, 500)
addShare(){
this.dialog.shareSave = true
this.$nextTick(() => {
this.$refs.shareSave.open('add').setData(this.params)
})
},
//搜索
upSearch(){
},
//根据ID获取树结构
filterTree(id){
let target = null;
function filter(tree){
tree.forEach(item => {
if(item.id == id){
target = item
}
if(item.children){
filter(item.children)
}
})
}
filter(this.$refs.table.tableData)
return target
this.$refs.table.upData(this.params);
},
//本地更新数据
handleSaveSuccess(data, mode){
@@ -235,7 +122,6 @@ export default {
this.$refs.table.refresh()
}
},
uploadFileSuccess(){
this.$refs.table.refresh();
},
+160
View File
@@ -0,0 +1,160 @@
<template>
<el-dialog :title="titleMap[mode]" v-model="visible" :width="460" draggable destroy-on-close @closed="$emit('closed')">
<el-form class="radioItem" :model="form" :rules="rules" :disabled="mode=='show'" ref="dialogForm" label-width="120px" label-position="top">
<div v-if="mode == 'add'">
<div class="checkboxMain">
<el-radio-group v-model="form.share.share_type" @change="shareChange">
<el-radio label="team">部门共享</el-radio>
<el-radio label="user">用户共享</el-radio>
</el-radio-group>
</div>
<el-form-item label="请输入文件夹名称" prop="name" >
<el-input v-model="form.name" placeholder="请输入文件夹名称" clearable></el-input>
</el-form-item>
</div>
<div v-if="mode == 'edit'">
<el-form-item label="选择共享" prop="share_type">
<el-select style="width: 100%;" v-model="form.share_type" @change="shareChange">
<el-option label="部门共享" value="team"></el-option>
<el-option label="用户共享" value="user"></el-option>
</el-select>
</el-form-item>
</div>
<el-form-item label="选择要共享的部门" v-if="(mode!='edit' && form.share.share_type == 'team') || (mode=='edit' && form.share_type == 'team')">
<el-select placeholder="请选择部门" v-model="form.share.share_ids" style="width: 100%;" filterable multiple collapse-tags @visible-change="getTeam">
<el-option :label="item.name" :value="item.id" v-for="item in setMap.teamList" :key="item"></el-option>
</el-select>
</el-form-item>
<el-form-item label="选择要共享的用户" v-if="(mode!='edit' && form.share.share_type == 'user') || (mode=='edit' && form.share_type == 'user')">
<el-select placeholder="请选择用户" v-model="form.share.share_ids" style="width: 100%;" filterable multiple collapse-tags @visible-change="getUser">
<el-option :label="item.name" :value="item.id" v-for="item in setMap.userList" :key="item"></el-option>
</el-select>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="visible=false" >取 消</el-button>
<el-button v-if="mode!='show'" type="primary" :loading="isSave" @click="submit()">保 存</el-button>
</template>
</el-dialog>
</template>
<script>
export default {
name:"shareSave",
emits: ['success', 'closed'],
data() {
return {
mode: "add",
titleMap: {
add: '新建共享文件夹',
edit: '共享文件',
},
visible: false,
isSave: false,
setMap:{
userList:[],
teamList:[]
},
//共享的数据
shareParams:{},
//表单数据
form: {
share_type:"team",
parent_id:"",
name: "",
share:{
share_type:"team",
share_ids:[]
},
},
//验证规则
rules: {
name: [
{required: true, message: '请输入文件夹名称'}
],
}
}
},
mounted() {
},
methods: {
shareChange(){
this.form.share.share_ids = [];
},
async getUser() {
const res = await this.$API.docs.manager.user.post();
if(res.code == 200){
this.setMap.userList = res.data;
}
},
async getTeam() {
const res = await this.$API.docs.manager.dept.post();
if(res.code == 200){
this.setMap.teamList = res.data;
}
},
//显示
open(mode='add'){
this.mode = mode;
this.visible = true;
return this
},
//表单提交方法
submit(){
this.$refs.dialogForm.validate(async (valid) => {
if (valid) {
this.isSave = true;
let res;
if(this.mode == 'add'){
res = await this.$API.docs.manager.add.post(this.form);
}
if(this.mode == 'edit'){
let params = this.setList();
res = await this.$API.docs.share.add.post({share:params});
}
this.isSave = false;
if(res.code == 200){
this.$emit('success', this.form, this.mode)
this.visible = false;
this.$message.success("操作成功")
}
}
})
},
setList(){
let arr = new Array();
if(this.shareParams.share){
this.shareParams.share.forEach(em=>{
em.share_type = this.form.share_type;
em.share_ids = this.form.share.share_ids
})
let shareList = this.shareParams.share.filter(em=>em.ids.length!=0);
arr = shareList;
}
return arr
},
//表单注入数据
setData(data){
this.form.parent_id = data.folder_id;
this.form.name = data.name;
if(this.mode == 'edit'){
this.shareParams = data;
this.form.parent_id = data.parent_id;
this.form.id = data.id;
}
}
}
}
</script>
<style lang="scss" scoped>
.radioItem{
position: relative;
}
.checkboxMain{
position: absolute;right: 0;top: -4px;z-index: 10;
}
</style>