新增文档上传

This commit is contained in:
龙运模 2024-07-25 19:54:58 +08:00
parent ac1daa1a79
commit 29fa3a9ca4
7 changed files with 345 additions and 38 deletions

View File

@ -0,0 +1,13 @@
<template>
<svg t="1721826146674" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3601" width="200" height="200"><path d="M347.50000039 93.84999981c24.8500002 0 48.75000029 9.60000029 66.69999932 26.75000038l3.30000029 3.29999942 75.75000029 79.85000039c11.25 11.85000029 26.6000001 19.0000002 42.89999942 19.90000019l3.80000039 0.14999942h326.1999999a96.50000039 96.50000039 0 0 1 96.40000019 92.85000029l0.1000002 3.6500001v513.3499998a96.50000039 96.50000039 0 0 1-92.90000039 96.4500003H158.50000039A96.50000039 96.50000039 0 0 1 62 837.2999999L62 833.64999981V190.35000019A96.50000039 96.50000039 0 0 1 154.90000039 93.8999999L158.50000039 93.84999981h189z m-9.70000049 64.34999999H174.6000002a48.2500002 48.2500002 0 0 0-48.2500002 48.2500002V817.4999999a48.2500002 48.2500002 0 0 0 48.2500002 48.2500002H850.0000001a48.2500002 48.2500002 0 0 0 48.25000019-48.2500002V336.34999971a48.2500002 48.2500002 0 0 0-48.25000019-48.24999932H515.2500002a48.2500002 48.2500002 0 0 1-32.9000001-12.95000068l-111.6500001-104.0000001a48.2500002 48.2500002 0 0 0-32.9000001-12.9999999z m174.49999981 257.29999981a32.15000039 32.15000039 0 0 1 32.20000049 32.15000039v96.50000039h96.49999951a32.15000039 32.15000039 0 0 1 0 64.35H544.5000002v96.49999951a32.15000039 32.15000039 0 0 1-64.35 0v-96.49999951h-96.50000039a32.15000039 32.15000039 0 0 1 0-64.35h96.50000039v-96.50000039a32.15000039 32.15000039 0 0 1 32.14999951-32.15000039z" p-id="3602"></path></svg>
</template>
<script>
export default {
name: "CreateFolder"
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,13 @@
<template>
<svg t="1721826224031" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3744" width="200" height="200"><path d="M347.50000039 93.84999981c24.8500002 0 48.75000029 9.60000029 66.69999932 26.75000038l3.30000029 3.29999942 75.75000029 79.85000039c11.25 11.85000029 26.6000001 19.0000002 42.89999942 19.90000019l3.80000039 0.14999942h326.1999999a96.50000039 96.50000039 0 0 1 96.40000019 92.85000029l0.1000002 3.6500001v513.3499998a96.50000039 96.50000039 0 0 1-92.90000039 96.4500003H158.50000039A96.50000039 96.50000039 0 0 1 62 837.2999999L62 833.64999981V190.35000019A96.50000039 96.50000039 0 0 1 154.90000039 93.8999999L158.50000039 93.84999981h189z m-9.70000049 64.34999999H174.6000002a48.2500002 48.2500002 0 0 0-48.2500002 48.2500002V817.4999999a48.2500002 48.2500002 0 0 0 48.2500002 48.2500002H850.0000001a48.2500002 48.2500002 0 0 0 48.25000019-48.2500002V336.34999971a48.2500002 48.2500002 0 0 0-48.25000019-48.24999932H515.2500002a48.2500002 48.2500002 0 0 1-32.9000001-12.95000068l-111.6500001-104.0000001a48.2500002 48.2500002 0 0 0-32.9000001-12.9999999z" p-id="3745"></path><path d="M622.04999961 393.9999998a51.00000029 51.00000029 0 0 1 0 102.00000059 51.00000029 51.00000029 0 0 1 0-102.00000059zM396.00000019 621.45000019a51.00000029 51.00000029 0 1 1 0.0500001-102.00000058 51.00000029 51.00000029 0 0 1-0.05000009 102.00000058z m226.04999942 5.85a51.00000029 51.00000029 0 0 1 0 101.99999971 51.05000039 51.05000039 0 0 1-36-87.00000029 51.00000029 51.00000029 0 0 1 36-14.99999942z m0-107.80000048a74.5999998 74.5999998 0 0 0 74.50000049-74.49999961 74.5999998 74.5999998 0 0 0-127.15000049-52.7000001 74.5999998 74.5999998 0 0 0-18.64999951 74.09999971l-104.65000049 49.10000009a74.09999971 74.09999971 0 0 0-102.74999941 2.3000001c-14.0000001 14.0000001-21.84999961 32.9000001-21.90000059 52.65a74.5999998 74.5999998 0 0 0 107.45000068 66.80000039c10.19999971-5.0000001 19.14999961-12.39999961 26.04999991-21.45000058l94.15000019 47.50000048a74.5999998 74.5999998 0 0 0 125.64999932 67.64999942 74.5999998 74.5999998 0 0 0 0-105.3 74.54999971 74.54999971 0 0 0-89.9499999-11.79999932 74.49999961 74.49999961 0 0 0-27.24999961 27.34999981l-91.35-46.0500003a74.00000039 74.00000039 0 0 0-5.0000001-60.6999999l99.8499999-46.8500001a74.45000039 74.45000039 0 0 0 60.99999961 31.89999991z" p-id="3746"></path></svg>
</template>
<script>
export default {
name: "CreateShare"
}
</script>
<style scoped>
</style>

View File

@ -28,6 +28,8 @@ export { default as AgentMaintenance } from './AgentMaintenance.vue'
export { default as CostAllocation } from './CostAllocation.vue' export { default as CostAllocation } from './CostAllocation.vue'
export { default as DataSource } from './DataSource.vue' export { default as DataSource } from './DataSource.vue'
export { default as MachineRoom } from './MachineRoom.vue' export { default as MachineRoom } from './MachineRoom.vue'
export { default as CreateFolder } from './CreateFolder.vue'
export { default as CreateShare } from './CreateShare.vue'
export { default as Folder } from './Folder.vue' export { default as Folder } from './Folder.vue'
export { default as Pdf } from './Pdf.vue' export { default as Pdf } from './Pdf.vue'
export { default as Excel } from './Excel.vue' export { default as Excel } from './Excel.vue'

View File

@ -217,7 +217,6 @@
delete item.children delete item.children
}) })
this.tableData = response.rows || []; this.tableData = response.rows || [];
console.log('数据处理')
}else{ }else{
this.tableData = response.rows || []; this.tableData = response.rows || [];
} }

View File

@ -14,7 +14,6 @@
<div class="breadcrumb"> <div class="breadcrumb">
<el-breadcrumb separator-icon="el-icon-ArrowRight"> <el-breadcrumb separator-icon="el-icon-ArrowRight">
<el-breadcrumb-item>我的文档</el-breadcrumb-item> <el-breadcrumb-item>我的文档</el-breadcrumb-item>
<!-- <el-breadcrumb-item>固本</el-breadcrumb-item>-->
<!-- <el-breadcrumb-item>中学</el-breadcrumb-item>--> <!-- <el-breadcrumb-item>中学</el-breadcrumb-item>-->
</el-breadcrumb> </el-breadcrumb>
</div> </div>
@ -27,19 +26,33 @@
</el-header> </el-header>
<el-header> <el-header>
<div class="left-panel"> <div class="left-panel">
<el-dropdown> <el-dropdown placement="bottom-start">
<el-button type="primary" :size="size">新建文档</el-button> <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> <template #dropdown>
<el-dropdown-menu> <el-dropdown-menu>
<el-dropdown-item @click="table_show('see')" icon="sc-icon-See">查看详情</el-dropdown-item> <el-dropdown-item @click="add" icon="sc-icon-CreateFolder">创建文件夹</el-dropdown-item>
<el-dropdown-item @click="table_edit('edit')" icon="sc-icon-Edit">编辑公司</el-dropdown-item> <el-dropdown-item @click="table_edit('edit')" icon="sc-icon-CreateShare">创建共享文件夹</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</template> </template>
</el-dropdown> </el-dropdown>
<el-button type="primary" :size="size" icon="el-icon-plus" @click="add">新建文档</el-button> <el-dropdown placement="bottom-start">
<el-button type="primary" :size="size" plain @click="permission">上传</el-button> <el-button type="primary" plain :size="size" style="margin-right: 12px;">上传 <el-icon class="el-icon--right"><el-icon-ArrowDown/></el-icon></el-button>
<el-button type="primary" :size="size" plain @click="permission">操作</el-button> <template #dropdown>
<el-button type="danger" :size="size" plain icon="el-icon-delete" :disabled="selection.length==0" @click="batch_del"></el-button> <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="table_show('see')" icon="sc-icon-Delete">删除</el-dropdown-item>
<el-dropdown-item @click="table_edit('edit')" icon="sc-icon-Edit">重命名</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
<el-button type="primary" plain :size="size" icon="el-icon-sort" :disabled="selection.length==0" @click="batch_del"></el-button>
</div> </div>
<div class="right-panel"> <div class="right-panel">
@ -75,6 +88,8 @@
</el-main> </el-main>
</el-container> </el-container>
<uploadFile ref="uploadFile" @uploadFileSuccess="uploadFileSuccess" title="上传附件"></uploadFile>
<!-- importFile-->
<save-dialog v-if="dialog.save" ref="saveDialog" @success="handleSaveSuccess" @closed="dialog.save=false"></save-dialog> <save-dialog v-if="dialog.save" ref="saveDialog" @success="handleSaveSuccess" @closed="dialog.save=false"></save-dialog>
<!-- <permission-dialog v-if="dialog.permission" ref="permissionDialog" @closed="dialog.permission=false"></permission-dialog>--> <!-- <permission-dialog v-if="dialog.permission" ref="permissionDialog" @closed="dialog.permission=false"></permission-dialog>-->
@ -82,12 +97,14 @@
<script> <script>
import saveDialog from './save' import saveDialog from './save'
import uploadFile from './uploadFile'
// import permissionDialog from './permission' // import permissionDialog from './permission'
export default { export default {
name: 'document', name: 'document',
components: { components: {
saveDialog, saveDialog,
uploadFile
// permissionDialog // permissionDialog
}, },
data() { data() {
@ -129,6 +146,11 @@ export default {
this.$refs.saveDialog.open('show').setData(row) this.$refs.saveDialog.open('show').setData(row)
}) })
}, },
uploadFile(){
this.$nextTick(()=>{
this.$refs.uploadFile.importFile();
})
},
// //
permission(){ permission(){
this.dialog.permission = true this.dialog.permission = true
@ -173,12 +195,12 @@ export default {
}, 500) }, 500)
}, },
// //
upsearch(){ upSearch(){
}, },
//ID //ID
filterTree(id){ filterTree(id){
var target = null; let target = null;
function filter(tree){ function filter(tree){
tree.forEach(item => { tree.forEach(item => {
if(item.id == id){ if(item.id == id){
@ -199,7 +221,11 @@ export default {
}else if(mode=='edit'){ }else if(mode=='edit'){
this.$refs.table.refresh() this.$refs.table.refresh()
} }
} },
uploadFileSuccess(){
this.$refs.table.refresh();
},
} }
} }
</script> </script>

View File

@ -1,14 +1,8 @@
<template> <template>
<el-dialog :title="titleMap[mode]" v-model="visible" :width="500" draggable destroy-on-close @closed="$emit('closed')"> <el-dialog :title="titleMap[mode]" v-model="visible" :width="460" draggable destroy-on-close @closed="$emit('closed')">
<el-form :model="form" :rules="rules" :disabled="mode=='show'" ref="dialogForm" label-width="120px" label-position="right"> <el-form :model="form" :rules="rules" :disabled="mode=='show'" ref="dialogForm" label-width="120px" label-position="top">
<el-form-item label="角色名称" prop="role_name"> <el-form-item label="请输入文件夹名称" prop="name">
<el-input v-model="form.role_name" placeholder="请填写角色名称" clearable></el-input> <el-input v-model="form.name" placeholder="请输入文件夹名称" clearable></el-input>
</el-form-item>
<el-form-item label="状态" prop="active_status">
<el-switch v-model="form.active_status" :active-value="true" :inactive-value="false"></el-switch>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" clearable type="textarea"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
@ -25,7 +19,7 @@ export default {
return { return {
mode: "add", mode: "add",
titleMap: { titleMap: {
add: '新', add: '新建文件夹',
edit: '编辑', edit: '编辑',
show: '查看' show: '查看'
}, },
@ -33,19 +27,14 @@ export default {
isSave: false, isSave: false,
// //
form: { form: {
id:"", parent_id:"",
role_name: "", name: "",
active_status: true,
remark: ""
}, },
// //
rules: { rules: {
role_name: [ name: [
{required: true, message: '请输入角色名称'} {required: true, message: '请输入文件夹名称'}
], ],
active_status: [
{required: true,}
]
} }
} }
}, },
@ -64,7 +53,7 @@ export default {
this.$refs.dialogForm.validate(async (valid) => { this.$refs.dialogForm.validate(async (valid) => {
if (valid) { if (valid) {
this.isSave = true; this.isSave = true;
const res = await this.$API.system.role.add.post(this.form); const res = await this.$API.docs.manager.add.post(this.form);
this.isSave = false; this.isSave = false;
if(res.code == 200){ if(res.code == 200){
this.$emit('success', this.form, this.mode) this.$emit('success', this.form, this.mode)
@ -76,10 +65,8 @@ export default {
}, },
// //
setData(data){ setData(data){
this.form.id = data.id this.form.parent_id = data.id
this.form.role_name = data.role_name this.form.name = data.name
this.form.active_status = data.active_status
this.form.remark = data.remark
} }
} }
} }

View File

@ -0,0 +1,267 @@
<template>
<slot name="header"></slot>
<el-dialog v-bind="$attrs" :title="title" v-model="visible" :width="560" destroy-on-close draggable @closed="visible=false">
<div class="importBody">
<el-upload
class="upload"
:action="oss.host"
:data="upload_data"
:show-file-list="false"
:on-success="handleSuccess"
:on-error="handleError"
:before-upload="beforeUpload"
:http-request="uploadFile"
drag
multiple
:limit="5"
:disabled="importDis"
>
<div v-if="!importTrue">
<el-icon class="el-icon--upload"><sc-icon-UploadExcel /></el-icon>
<div class="el-upload__text">
<span class="laText">请将Excel拖到此处</span>
<span class="tipText">或点击上传</span><em> Excel</em>
</div>
</div>
<div v-else>
<div class="el-upload__text">
<el-icon class="trueIcon el-icon&#45;&#45;upload">
<sc-icon-FormXls />
<!-- <div class="deleteFile" @click="deleteFile"><el-icon class="icon"><el-icon-Close/></el-icon></div>-->
</el-icon>
<div class="el-upload__text">文件已选择最大可以点击立即上传或替换文件</div>
</div>
</div>
<template #tip>
<div class="el-upload__tip">
<span class="tip">最多上传5个文件,单个文件不要超过10M,请上传 xlsx/docx 格式文件</span>
<span class="btn">
<slot name="download"></slot>
</span>
</div>
<div class="importBox" v-if="progressShow">
<div class="item" v-for="item in listProgress" :key="item">
<div class="name">{{item.type_desc}}</div>
<el-progress class="exportPopover" :text-inside="true" :stroke-width="12" :percentage="item.rate" />
</div>
</div>
</template>
</el-upload>
</div>
<template #footer>
<el-button @click="visible=false"> </el-button>
<el-button type="primary" @click="save"> </el-button>
</template>
</el-dialog>
</template>
<script>
import {eventBus} from "@/utils/eventBus"
export default {
name: "uploadFile",
emits: ['closed', "uploadFileSuccess"],
props:{
size:{type:String, default:'small'},
title:{type:String, default: ""},
},
data(){
return{
visible: false,
text:"",
listFile:[],
listProgress:[],
oss:{
host:''
},
upload_data:{},
fileShow:false,
params:{},
importDis:false,
importTrue:false,
progressShow:false,
}
},
setup(){
},
watch:{
},
mounted() {
eventBus.$on('sockBack', this.getWsResult);
},
unmounted() {
eventBus.$off('sockBack', this.getWsResult);
},
methods:{
getWsResult(res){
if(res.data && (res.data.type == 12)){
let flag = this.listProgress.some(em=>em.file_unique_id == res.data.file_unique_id);
if(!flag){
this.listProgress.push(res.data)
}else{
this.listProgress.forEach((em,index)=>{
if(em.file_unique_id == res.data.file_unique_id){
em.rate = res.data.rate
if(res.data.status == 1){
this.listProgress.splice(index,1);
}
}
})
}
this.progressShow = true;
if(this.listProgress.length==0 && res.data.status == 1){
this.progressShow = false;
}
if(res.data.status == 1){
this.$emit('uploadFileSuccess');
}
}
},
//
importFile(){
this.visible = true;
},
//
beforeUpload(file){
// const text = file.name.split('.').pop();
// if(!['xls','xlsx'].includes(text)){
// this.$message.warning(`excel`);
// return false;
// }
// this.progressShow = true;
this.text = file.name;
this.listFile.push(file);
return true
},
async uploadFile() {
try {
const formData = new FormData();
for(let i in this.listFile){
formData.append('files[]', this.listFile[i]);
}
for (const key in this.upload_data) {
formData.append(key, this.upload_data[key]);
}
this.params = formData;
this.importTrue = this.listFile.length>4?true:false;
this.importDis = this.listFile.length>4?true:false;
} catch (error) {
console.log(error)
}
},
deleteFile(){
this.importTrue = false;
setTimeout(()=>{
this.importDis = false;
},100)
},
async save() {
const res = await this.$API.docs.manager.upload.post(this.params);
if (res.code == 200) {
this.$message.success('提交成功,正在上传');
}
},
//
handleSuccess(){
},
//
handleError(){
this.$message.warning('上传失败请重新上传');
}
}
}
</script>
<style scoped lang="scss">
.importBody{
padding: 0 20px;
}
.upload .el-icon--upload{
width: 54px;height: 54px;
}
.upload ::v-deep .el-upload__text{
.trueIcon{
position: relative;
border: 1px solid var(--el-border-color);
border-radius: 4px;
}
.laText{
color: var(--el-color-dark);
}
.tipText{
color: var(--el-text-color-placeholder);
}
.deleteFile{
position: absolute;
right: -6px;
top: -10px;
width: 16px;
height: 16px;
border-radius: 50%;
background: var(--el-color-danger);
display: flex;
align-items: center;
justify-content: center;
.icon{
width: 12px;height: 12px;
color: var(--el-color-white);
}
}
}
.upload ::v-deep .el-upload__tip{
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 15px;
color: var(--el-text-color-placeholder);
.btn{
color: var(--el-color-primary);
cursor: pointer;
}
}
.importBox{
border: 1px solid var(--el-border-color);
padding: 10px 5px;
margin: 15px 0;
border-radius: 4px;
.item{margin-bottom: 10px;}
.item:last-child{margin-bottom: 0;}
.name{margin-bottom: 5px;font-size: 13px;}
.exportPopover ::v-deep .el-progress-bar__innerText{
height: 100%;
display: flex;align-items: center;justify-content: flex-end;
font-size: 10px;
}
}
.errText{
margin: 15px 0 0 0;
padding: 10px;
border-radius: 6px;
background: var(--el-color-danger-light-9);
position: relative;
.name{
color: var(--el-color-danger);
font-size: 12px;
line-height: 20px;
}
.deleteErr{
position: absolute;
right: 4px;
top: 4px;
z-index: 20;
cursor: pointer;
.icon{
font-size: 16px;
}
}
}
</style>