Commit 8e0cf39c authored by 黄奎's avatar 黄奎

页面修改

parent 8fd31b04
<template> <template>
<div class="flexOne"> <div class="flexOne">
<div class="myDocumentsNav"> <div class="myDocumentsNav">
<el-button-group v-if='!isChildFiles'> <el-button-group v-if='!isChildFiles'>
<el-button v-if='notFileList.length==1&&fileList.length<1' type="danger" icon="el-icon-download" @click='dowloadSingle()'>下载</el-button> <el-button v-if='notFileList.length==1&&fileList.length<1' type="danger" icon="el-icon-download"
<el-button v-if='fileList.length>0||notFileList.length>0' type="danger" icon="el-icon-download" @click='yzmVisible=true,createCode()'>压缩下载</el-button> @click='dowloadSingle()'>下载</el-button>
<el-button v-if='fileList.length>0||notFileList.length>0' type="danger" @click='moveFiles'>移动到</el-button> <el-button v-if='fileList.length>0||notFileList.length>0' type="danger" icon="el-icon-download"
</el-button-group> @click='yzmVisible=true,createCode()'>压缩下载</el-button>
<el-button-group v-if='isChildFiles'> <el-button v-if='fileList.length>0||notFileList.length>0' type="danger" @click='moveFiles'>移动到</el-button>
<el-button v-if='notFileListInside.length==1&&fileListInside.length<1' type="danger" icon="el-icon-download" @click='dowloadSingleInside()'>下载里</el-button> </el-button-group>
<el-button v-if='fileListInside.length>0||notFileListInside.length>0' type="danger" icon="el-icon-download" @click='yzmVisible=true,createCode()'>压缩下载</el-button> <el-button-group v-if='isChildFiles'>
<el-button v-if='fileListInside.length>0||notFileListInside.length>0' type="danger" @click='moveFiles'>移动到里</el-button> <el-button v-if='notFileListInside.length==1&&fileListInside.length<1' type="danger" icon="el-icon-download"
</el-button-group> @click='dowloadSingleInside()'>下载里</el-button>
<div class="fr" v-if='!isChildFiles'> <el-button v-if='fileListInside.length>0||notFileListInside.length>0' type="danger" icon="el-icon-download"
<el-input class='w200' :placeholder="$t('pub.pleaseImport')" v-model="msg.ShareName" prefix-icon="el-icon-search"></el-input> @click='yzmVisible=true,createCode()'>压缩下载</el-button>
<input type="button" class="hollowFixedBtn" @click='getList()' :value="$t('pub.searchBtn')" /> <el-button v-if='fileListInside.length>0||notFileListInside.length>0' type="danger" @click='moveFiles'>移动到里
</div> </el-button>
</div> </el-button-group>
<div class="myDocumentsLink"> <div class="fr" v-if='!isChildFiles'>
<span @click="resGetList">分享给我的</span> <el-input class='w200' :placeholder="$t('pub.pleaseImport')" v-model="msg.ShareName"
<span v-for="(item,index) in NavList" @click="getNavTree(item,index)">{{item.name}}</span> prefix-icon="el-icon-search"></el-input>
</div> <input type="button" class="hollowFixedBtn" @click='getList()' :value="$t('pub.searchBtn')" />
</div>
</div>
<div class="myDocumentsLink">
<span @click="resGetList">分享给我的</span>
<span v-for="(item,index) in NavList" @click="getNavTree(item,index)">{{item.name}}</span>
</div>
<table class="singeRowTable myDocumentsTable" border="0" cellspacing="0" cellpadding="0"> <table class="singeRowTable myDocumentsTable" border="0" cellspacing="0" cellpadding="0">
<tbody v-if='!isChildFiles'> <tbody v-if='!isChildFiles'>
<tr> <tr>
<th width="400"><input v-model="isCkedAll" type="checkbox" @click='checkedAll()' />文件名</th> <th width="400"><input v-model="isCkedAll" type="checkbox" @click='checkedAll()' />文件名</th>
<th width="200">&nbsp;</th> <th width="200">&nbsp;</th>
<th>大小</th> <th>大小</th>
<th width="200">分享人</th> <th width="200">分享人</th>
<th width="200">接收时间</th> <th width="200">接收时间</th>
</tr> </tr>
<tr v-for="(item,index) in list" @mouseover="enterTr(index)" @mouseleave="leaveTr"> <tr v-for="(item,index) in list" @mouseover="enterTr(index)" @mouseleave="leaveTr">
<td v-if="item.shareFileType==1"> <td v-if="item.shareFileType==1">
<input type="checkbox" :value="item.shareId" v-model="fileList" @change="ckeckedOne"> <input type="checkbox" :value="item.shareId" v-model="fileList" @change="ckeckedOne">
<div @click="getNextLevel(item)" style="cursor: pointer; display: inline-block;"> <div @click="getNextLevel(item)" style="cursor: pointer; display: inline-block;">
<div :class="['fileIcon', item.icons]"></div> <div :class="['fileIcon', item.icons]"></div>
{{item.fileName}} {{item.fileName}}
</div> </div>
</td> </td>
<td v-if="item.shareFileType==2"> <td v-if="item.shareFileType==2">
<input type="checkbox" :value="item.shareId" v-model="notFileList" @change="ckeckedOne"> <input type="checkbox" :value="item.shareId" v-model="notFileList" @change="ckeckedOne">
<div @click="analyzeItem(item)" style="cursor: pointer; display: inline-block;"> <div @click="analyzeItem(item)" style="cursor: pointer; display: inline-block;">
<div :class="['fileIcon', item.icons]"></div> <div :class="['fileIcon', item.icons]"></div>
{{item.fileName}} {{item.fileName}}
</div> </div>
</td> </td>
<td> <td>
<el-row v-if='curIndex==index'> <el-row v-if='curIndex==index'>
<el-button type="primary" icon="el-icon-download" circle @click='downloadOne(item)'></el-button> <el-button type="primary" icon="el-icon-download" circle @click='downloadOne(item)'></el-button>
<el-button type="primary" icon="iconfont icon-move" style='font-size: 14px;' circle @click='moveOneFile(item)'></el-button> <el-button type="primary" icon="iconfont icon-move" style='font-size: 14px;' circle
</el-row> @click='moveOneFile(item)'></el-button>
</td> </el-row>
<td>{{item.fileSize| FileSizeFormat(item.fileSize)}}</td> </td>
<td> <td>{{item.fileSize| FileSizeFormat(item.fileSize)}}</td>
<img style="vertical-align: sub; width: 14px; height: 14px; border-radius: 7px;" v-if="!item.shareUserPhoto" src="../../assets/img/litheader.png" alt=""> <td>
<img style="vertical-align: sub; width: 14px; height: 14px; border-radius: 7px;" v-else :src="item.shareUserPhoto" alt="" :onerror="defaultImg"> <img style="vertical-align: sub; width: 14px; height: 14px; border-radius: 7px;"
{{item.shareUserName}} v-if="!item.shareUserPhoto" src="../../assets/img/litheader.png" alt="">
</td> <img style="vertical-align: sub; width: 14px; height: 14px; border-radius: 7px;" v-else
<td>{{item.createTime}}</td> :src="item.shareUserPhoto" alt="" :onerror="defaultImg">
</tr> {{item.shareUserName}}
</tbody> </td>
<td>{{item.createTime}}</td>
<tbody v-if='isChildFiles'> </tr>
<tr> </tbody>
<th width="400"><input v-model="isCkedAllInside" type="checkbox" @click='checkedAllInside()' />文件名</th>
<th width="400">&nbsp;</th>
<th width="400">大小</th>
</tr>
<tr v-for="(item,index) in nextList" @mouseover="enterTrInside(index)" @mouseleave="leaveTrInside">
<td v-if="item.DataType==0">
<input type="checkbox" :value="item.Id" v-model="fileListInside" @change="ckeckedOneInside">
<div @click="getNextLevelTree(item)" style="cursor: pointer; display: inline-block;">
<div :class="['fileIcon', item.icons]"></div>
{{item.FolderName}}
</div>
</td>
<td v-if="item.DataType==2">
<input type="checkbox" :value="item.Id" v-model="notFileListInside" @change="ckeckedOneInside">
<div @click="analyzeItemInside(item)" style="cursor: pointer; display: inline-block;">
<div :class="['fileIcon', item.icons]"></div>
{{item.FolderName}}
</div>
</td>
<td>
<el-row v-if='insideCurIndex==index'>
<el-button type="primary" icon="el-icon-download" circle @click='downloadOneInside(item)'></el-button>
<el-button type="primary" icon="iconfont icon-move" style='font-size: 14px;' circle @click='moveOneFileInside(item)'></el-button>
</el-row>
</td>
<td>{{item.FileSize| FileSizeFormat(item.FileSize)}}</td>
</tr>
</tbody>
</table>
<el-dialog custom-class='w400' :title="dialogTitle2" :visible.sync="outerVisible2" @close="moveCancel" center>
<el-tree :data="fileTreeList" :props="defaultProps" :check-strictly='true' @check-change="handleNodeChange" node-key="Id" show-checkbox accordion ref="tree">
</el-tree>
<div slot="footer" class="dialog-footer">
<input type="button" class="hollowFixedBtn" :value="$t('pub.cancelBtn')" @click="moveCancel" />
<input type="button" v-if='!isChildFiles' class="normalBtn" :value="$t('pub.sureBtn')" @click="saveMoveFiles" />
<input type="button" v-if='isChildFiles' class="normalBtn" :value="$t('pub.sureBtn')" @click="saveMoveFilesInside" />
</div>
</el-dialog>
<el-dialog custom-class='w800' :title="dialogTitle4" :visible.sync="outerVisible4" center>
<video :src="moviePath" controls="controls" style="width: 100%;">
your browser does not support the video tag
</video>
<div slot="footer" class="dialog-footer">
<input type="button" class="normalBtn" :value="$t('pub.closeSel')" @click="outerVisible4=false" />
</div>
</el-dialog >
<div v-if='audioIsShow' style="position: fixed; bottom: 100px; right: 20px; z-index: 999; border:1px solid #ccc; padding: 10px; background: #eee;">
<i class="el-icon-circle-close-outline" style="float: right; cursor: pointer;" @click="audioIsShow=false,audioPath=''"></i>
<p style="font-size: 12px; margin: 0 0 10px 0;">{{audioName}}</p>
<audio :src="audioPath" controls="controls">
Your browser does not support the audio tag.
</audio>
</div>
<div v-if='picIsShow' class="viewBigPicLayer">
<i class="el-icon-circle-close-outline clolseViewBigPicLayer" @click="picIsShow=false,picObj=[]"></i>
<el-carousel height="600px" :initial-index='initialIndex' :interval="5000" trigger="click">
<el-carousel-item v-for="(item,index) in picObj" :key="index">
<div class="inlineDiv ownScrollbarStyle"><img :src="item" /></div>
</el-carousel-item>
</el-carousel>
</div>
<el-dialog custom-class='w400' title="压缩下载" :visible.sync="yzmVisible" center> <tbody v-if='isChildFiles'>
<p> <tr>
<span>验证码 : </span> <th width="400"><input v-model="isCkedAllInside" type="checkbox" @click='checkedAllInside()' />文件名</th>
<el-input class='w150' type="text" placeholder="请输入验证码" v-model="picLyanzhengma"></el-input> <th width="400">&nbsp;</th>
<input type="button" @click="createCode" class="DocumentLoadVerification" v-model="checkCode"/> <th width="400">大小</th>
</p> </tr>
<div slot="footer" class="dialog-footer"> <tr v-for="(item,index) in nextList" @mouseover="enterTrInside(index)" @mouseleave="leaveTrInside">
<input type="button" class="hollowFixedBtn" :value="$t('pub.cancelBtn')" @click="yzmVisible=false" /> <td v-if="item.DataType==0">
<input v-if='!isChildFiles' type="button" class="normalBtn" :value="$t('pub.sureBtn')" @click="downloadTotal()" /> <input type="checkbox" :value="item.Id" v-model="fileListInside" @change="ckeckedOneInside">
<input v-if='isChildFiles' type="button" class="normalBtn" :value="$t('pub.sureBtn')" @click="downloadTotalInside()" /> <div @click="getNextLevelTree(item)" style="cursor: pointer; display: inline-block;">
</div> <div :class="['fileIcon', item.icons]"></div>
</el-dialog > {{item.FolderName}}
</div>
</div> </td>
</template> <td v-if="item.DataType==2">
<input type="checkbox" :value="item.Id" v-model="notFileListInside" @change="ckeckedOneInside">
<div @click="analyzeItemInside(item)" style="cursor: pointer; display: inline-block;">
<div :class="['fileIcon', item.icons]"></div>
{{item.FolderName}}
</div>
</td>
<td>
<el-row v-if='insideCurIndex==index'>
<el-button type="primary" icon="el-icon-download" circle @click='downloadOneInside(item)'></el-button>
<el-button type="primary" icon="iconfont icon-move" style='font-size: 14px;' circle
@click='moveOneFileInside(item)'></el-button>
</el-row>
</td>
<td>{{item.FileSize| FileSizeFormat(item.FileSize)}}</td>
</tr>
</tbody>
</table>
<script> <el-dialog custom-class='w400' :title="dialogTitle2" :visible.sync="outerVisible2" @close="moveCancel" center>
// let browserMD5File = require('browser-md5-file'); <el-tree :data="fileTreeList" :props="defaultProps" :check-strictly='true' @check-change="handleNodeChange"
export default { node-key="Id" show-checkbox accordion ref="tree">
data() { </el-tree>
return { <div slot="footer" class="dialog-footer">
code:'', <input type="button" class="hollowFixedBtn" :value="$t('pub.cancelBtn')" @click="moveCancel" />
picLyanzhengma:'', <input type="button" v-if='!isChildFiles' class="normalBtn" :value="$t('pub.sureBtn')"
checkCode:'', @click="saveMoveFiles" />
yzmVisible: false, <input type="button" v-if='isChildFiles' class="normalBtn" :value="$t('pub.sureBtn')"
@click="saveMoveFilesInside" />
initialIndex:0, </div>
picObj:[], </el-dialog>
picIsShow:false, <el-dialog custom-class='w800' :title="dialogTitle4" :visible.sync="outerVisible4" center>
audioIsShow:false, <video :src="moviePath" controls="controls" style="width: 100%;">
outerVisible4: false, your browser does not support the video tag
dialogTitle4: '', </video>
moviePath:'', <div slot="footer" class="dialog-footer">
audioPath:'', <input type="button" class="normalBtn" :value="$t('pub.closeSel')" @click="outerVisible4=false" />
picPath:'', </div>
audioName:'', </el-dialog>
headers: { <div v-if='audioIsShow'
'Content-Type': 'application/octet-stream' style="position: fixed; bottom: 100px; right: 20px; z-index: 999; border:1px solid #ccc; padding: 10px; background: #eee;">
}, <i class="el-icon-circle-close-outline" style="float: right; cursor: pointer;"
defaultProps: { @click="audioIsShow=false,audioPath=''"></i>
children: 'ChildFolderList', <p style="font-size: 12px; margin: 0 0 10px 0;">{{audioName}}</p>
label: 'FolderName', <audio :src="audioPath" controls="controls">
}, Your browser does not support the audio tag.
defaultProps1: { </audio>
children: 'ChildList', </div>
label: 'DepartmentName',
disabled: "Disabled"
},
defaultProps2: {
children: 'ChildList',
label: 'DepartmentName',
disabled: "Disabled"
},
defaultProps3: {
children: 'ChildList',
label: 'DepartmentName',
disabled: "Disabled"
},
outerVisible: false,
dialogTitle: '',
outerVisible1: false,
dialogTitle1: '',
outerVisible2: false,
dialogTitle2: '',
outerVisible3: false,
dialogTitle3: '',
isCkedAll: false,
isCkedAllInside: false,
//请求数据
fileList: [], //文件夹
notFileList: [], //文件
fileListInside: [], //文件夹
notFileListInside: [], //文件
saveMsg: [],
msg: {
pageIndex: '1',
pageSize:'9999',
ShareName:''
},
nextMsg:{
ParentId: '0',
FolderName: '',
EmployeeId:'0'
},
addFileMsg: {
FolderName: '',
ParentId: '0',
FolderId: '',
},
updateFileMsg: {
FileId: '0',
FileName: '0'
},
MoveMsg: {
foldId: '0',
folderIds:[],
fileIds:[]
},
shareMsg: {
shareType: '1',
fileIds: [],
targetIds: '',
folderIds: []
},
downloadMsg:{
FolderIdStr:[],
FileIdStr:[]
},
downloadMsgInside:{
FolderIdStr:[],
FileIdStr:[]
},
defaultImg: 'this.src="' + require('../../assets/img/litheader.png') + '"',
//返回数据
NavList:[],
nextList:[],
isChildFiles:false,
curIndex: -1,
insideCurIndex:-1,
list:[],
fileTreeList: [],
NavigationList: [],
WjId: [],
WjjId: [],
WjIdInside: [],
WjjIdInside: [],
arr: [],
departmentList:[],
ckdDepartmentList:[],
ckdDepartmentListId:[],
roleList:[],
ckdRoleList:[],
ckdRoleListId:[],
menberList:[],
ckdMenberList:[],
ckdMenberListId:[],
allLength: 0,
allLengthInside: 0,
rules: { //表单验证
FolderName: [{
required: true,
message: '请输入文件夹名称',
trigger: 'blur'
}]
},
rules1: { //表单验证
FileName: [{
required: true,
message: '请输入文件名称',
trigger: 'blur'
}]
},
srearchKey:""
}
}, <div v-if='picIsShow' class="viewBigPicLayer">
filters: { <i class="el-icon-circle-close-outline clolseViewBigPicLayer" @click="picIsShow=false,picObj=[]"></i>
FileSizeFormat(value) { <el-carousel height="600px" :initial-index='initialIndex' :interval="5000" trigger="click">
if(value == null||value == 0) { <el-carousel-item v-for="(item,index) in picObj" :key="index">
return '-' <div class="inlineDiv ownScrollbarStyle"><img :src="item" /></div>
} </el-carousel-item>
if(value != null) { </el-carousel>
if(value / 1024 < 1) { //kb </div>
return value + 'KB'
}
if(value / 1024 > 1 && value / (1024 * 1024) < 1) { //mb
return(value / 1024).toFixed(2) + 'M'
}
if(value / (1024 * 1024) > 1) { //G
return(value / (1024 * 1024)).toFixed(2) + 'G'
}
}
} <el-dialog custom-class='w400' title="压缩下载" :visible.sync="yzmVisible" center>
}, <p>
methods: { <span>验证码 : </span>
// 图片验证码 <el-input class='w150' type="text" placeholder="请输入验证码" v-model="picLyanzhengma"></el-input>
createCode(){ <input type="button" @click="createCode" class="DocumentLoadVerification" v-model="checkCode" />
//先清空验证码的输入 </p>
this.code = ""; <div slot="footer" class="dialog-footer">
this.checkCode = ""; <input type="button" class="hollowFixedBtn" :value="$t('pub.cancelBtn')" @click="yzmVisible=false" />
this.picLyanzhengma = ""; <input v-if='!isChildFiles' type="button" class="normalBtn" :value="$t('pub.sureBtn')"
//验证码的长度 @click="downloadTotal()" />
var codeLength = 4; <input v-if='isChildFiles' type="button" class="normalBtn" :value="$t('pub.sureBtn')"
//随机数 @click="downloadTotalInside()" />
var random = new Array(0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'); </div>
for(var i = 0; i < codeLength; i++) { </el-dialog>
//取得随机数的索引(0~35)
var index = Math.floor(Math.random()*36);
//根据索引取得随机数加到code上
this.code += random[index];
}
//把code值赋给验证码
this.checkCode = this.code;
},
analyzeItem(obj){
let typeArr=[
{stringArr:'GIF|JPG|JPEG|PNG|BMP',type:1},
{stringArr:'MP3|OGG|AU|AIFF|VQF',type:2},
{stringArr:'AVI|WMV|MPEG|MP4|MOV|MKV|FLV|F4V|M4V|RMVB|RM|3GP|DAT|TS|MTS|VOB',type:3},
{stringArr:'DOCX|DOC|XLSX|XLS|PPT|PPTX',type:4},
{stringArr:'PDF',type:5},
]
let fileTypeNumber; // 判断文件预览类型; 1 图片,2音频,3视频,4,office,, 5 PDF , 6 txt default其他
let fileType=obj.fileUrl.substring(obj.fileUrl.lastIndexOf('.')+1,obj.fileUrl.length).toUpperCase()
typeArr.forEach(x=>{
if(x.stringArr.indexOf(fileType)!='-1')
{
fileTypeNumber=x.type
}
})
switch (fileTypeNumber){
case 1:
this.list.forEach(item=>{
if(item.shareFileType==2){
let fileType=item.fileName.substring(item.fileName.lastIndexOf('.')+1,item.fileName.length).toUpperCase()
if('GIF|JPG|JPEG|PNG|BMP'.indexOf(fileType)!=-1){
this.picObj.push(item.fileUrl)
}
}
})
this.picObj.forEach((x,i)=>{
if(x==obj.fileUrl){
this.initialIndex=i
return false
}
})
this.picIsShow=true
//this.picPath=obj.FilePath
break;
case 2:
this.audioIsShow=true
this.audioName=obj.fileName
this.audioPath=obj.fileUrl
break;
case 3:
this.outerVisible4=true
this.dialogTitle4=obj.fileName
this.moviePath=obj.fileUrl
break;
case 4:
window.open("https://view.officeapps.live.com/op/view.aspx?src="+obj.fileUrl)
break;
case 5:
this.previewPDF(obj.fileUrl)
default:
this.$message.warning('该文件格式暂不支持预览,请下载用相关软件预览!')
break;
}
},
analyzeItemInside(obj){
let typeArr=[
{stringArr:'GIF|JPG|JPEG|PNG|BMP',type:1},
{stringArr:'MP3|OGG|AU|AIFF|VQF',type:2},
{stringArr:'AVI|WMV|MPEG|MP4|MOV|MKV|FLV|F4V|M4V|RMVB|RM|3GP|DAT|TS|MTS|VOB',type:3},
{stringArr:'DOCX|DOC|XLSX|XLS|PPT|PPTX',type:4},
{stringArr:'PDF',type:5},
]
let fileTypeNumber; // 判断文件预览类型; 1 图片,2音频,3视频,4,office,, 5 PDF , 6 txt default其他
let fileType=obj.FilePath.substring(obj.FilePath.lastIndexOf('.')+1,obj.FilePath.length).toUpperCase()
typeArr.forEach(x=>{
if(x.stringArr.indexOf(fileType)!='-1')
{
fileTypeNumber=x.type
}
})
switch (fileTypeNumber){
case 1:
this.nextList.forEach(item=>{
if(item.DataType==2){
let fileType=item.FolderName.substring(item.FolderName.lastIndexOf('.')+1,item.FolderName.length).toUpperCase()
if('GIF|JPG|JPEG|PNG|BMP'.indexOf(fileType)!=-1){
this.picObj.push(item.FilePath)
}
}
})
this.picObj.forEach((x,i)=>{
if(x==obj.FilePath){
this.initialIndex=i
return false
}
})
this.picIsShow=true
//this.picPath=obj.FilePath
break;
case 2:
this.audioIsShow=true
this.audioName=obj.FolderName
this.audioPath=obj.FilePath
break;
case 3:
this.outerVisible4=true
this.dialogTitle4=obj.FolderName
this.moviePath=obj.FilePath
break;
case 4:
window.open("https://view.officeapps.live.com/op/view.aspx?src="+obj.FilePath)
break;
case 5:
this.previewPDF(obj.FilePath)
break
default:
this.$message.warning('该文件格式暂不支持预览,请下载用相关软件预览!')
break;
}
},
resGetList(){
this.msg.ShareName=''
this.isChildFiles=false;
this.isCkedAllInside=false
this.NavList=[]
this.fileListInside=[], //文件夹
this.notFileListInside=[], //文件
this.getList()
},
handleExceed(file, fileList) {
this.$message.warning('一次最多选择5个文件!')
return
}, </div>
uploadFileBtn(file) { //上传 </template>
let that = this
let newArr = [];
newArr.push(file.file)
let path = "/Upload/Temporary/"
this.UploadSelfFileT(path, newArr, x => { <script>
this.saveMsg = [] // let browserMD5File = require('browser-md5-file');
this.saveMsg.push({ export default {
Path: x.data.FilePath, data() {
FileName: file.file.name, return {
MD5Sign: file.file.uid, code: '',
FileSize: (file.file.size / 1024).toFixed(0), picLyanzhengma: '',
FolderId: this.msg.ParentId checkCode: '',
}) yzmVisible: false,
that.apipost('user_cloud_SaveFile', this.saveMsg, res => {
if(res.data.resultCode == 1) {
this.$message.success(res.data.message);
this.$refs.upload.clearFiles();
this.getList()
} else {
this.$message.error(res.data.message);
this.$refs.upload.clearFiles();
}
}, err => {})
});
},
dowloadSingle() {
this.list.forEach(item => {
if(item.shareFileType == 2) {
for(let i = 0; i < this.notFileList.length; i++) {
if(this.notFileList[i] == item.shareId) {
let reg = /^http(s)?:\/\/(.*?)\//
this.downloadFileRename(item.fileUrl.replace(reg,''),item.fileName);
}
}
}
})
},
dowloadSingleInside() {
this.nextList.forEach(item => {
if(item.DataType == 2) {
for(let i = 0; i < this.notFileListInside.length; i++) {
if(this.notFileListInside[i] == item.Id) {
let reg = /^http(s)?:\/\/(.*?)\//
this.downloadFileRename(item.FilePath.replace(reg,''),item.FolderName);
}
}
}
})
},
downloadOne(obj){
if(obj.shareFileType==1){
this.yzmVisible=true
this.createCode()
this.fileList=[]
this.notFileList=[]
this.fileList.push(obj.shareId)
}
if(obj.shareFileType==2){
let reg = /^http(s)?:\/\/(.*?)\//
this.downloadFileRename(obj.fileUrl.replace(reg,''),obj.fileName);
}
},
downloadTotal() {
if(this.picLyanzhengma.toLocaleUpperCase()==this.checkCode){
this.yzmVisible=false
this.$message.info('文件压缩中,请等待..')
this.list.forEach(x=>{
if(this.fileList.length>0){
for (let i=0;i<this.fileList.length;i++) {
if(x.shareFileType==1&&x.shareId==this.fileList[i]){
this.downloadMsg.FolderIdStr.push(x.fileId)
}
}
}else{
this.downloadMsg.folderIds=[]
}
})
this.list.forEach(x=>{
if(this.notFileList.length>0){
for (let i=0;i<this.notFileList.length;i++) {
if(x.shareFileType==2&&x.shareId==this.notFileList[i]){
this.downloadMsg.FileIdStr.push(x.fileId)
}
}
}else{
this.downloadMsg.fileIds=[]
}
})
this.apipost('user_cloud_GetPackageFile',this.downloadMsg, res => {
if(res.data.resultCode == 1) {
const link = document.createElement('a');
let _loadUrl = this.domainManager().DomainUrl;
link.href = _loadUrl+res.data.data;
document.body.appendChild(link);
link.click();
this.apipost('user_cloud_DelPackageFile',{Path:link.href},res=>{
},err=>{})
}else{
this.$message.error(res.data.message)
}
}, err => {})
}else{
this.$message.error('验证码错误!')
}
},
downloadOneInside(obj){
if(obj.DataType==0){
this.yzmVisible=true
this.createCode()
this.fileListInside=[]
this.notFileListInside=[]
this.fileListInside.push(obj.Id)
}
if(obj.DataType==2){
let reg = /^http(s)?:\/\/(.*?)\//
this.downloadFileRename(obj.FilePath.replace(reg,''),obj.FolderName);
}
},
downloadTotalInside() {
if(this.picLyanzhengma.toLocaleUpperCase()==this.checkCode){
this.yzmVisible=false
this.$message.info('文件压缩中,请等待..')
this.downloadMsgInside.FolderIdStr=this.fileListInside
this.downloadMsgInside.FileIdStr=this.notFileListInside
this.apipost('user_cloud_GetPackageFile',this.downloadMsgInside, res => {
if(res.data.resultCode == 1) {
const link = document.createElement('a');
let _loadUrl = this.domainManager().DomainUrl;
link.href = _loadUrl+res.data.data;
document.body.appendChild(link);
link.click();
this.apipost('user_cloud_DelPackageFile',{Path:link.href},res=>{
},err=>{})
}else{
this.$message.error(res.data.message)
}
}, err => {})
}else{
this.$message.error('验证码错误!')
}
},
enterTr(index) {
this.curIndex = index
},
leaveTr() {
this.curIndex = -1;
},
enterTrInside(index) {
this.insideCurIndex = index
},
leaveTrInside() {
this.insideCurIndex = -1;
},
checkedAll() {
if(this.isCkedAll == true) {
this.fileList = []
this.notFileList = []
} else {
this.WjjId.forEach(item => {
this.fileList.push(item)
})
this.WjId.forEach(item => {
this.notFileList.push(item)
})
}
},
checkedAllInside() {
if(this.isCkedAllInside == true) {
this.fileListInside = []
this.notFileListInside = []
} else {
this.WjjIdInside.forEach(item => {
this.fileListInside.push(item)
})
this.WjIdInside.forEach(item => {
this.notFileListInside.push(item)
})
}
},
ckeckedOneInside() {
if(this.fileListInside.length + this.notFileListInside.length < this.allLengthInside) {
this.isCkedAllInside = false
} else {
this.isCkedAllInside = true
}
},
ckeckedOne() {
if(this.fileList.length + this.notFileList.length < this.allLength) {
this.isCkedAll = false
} else {
this.isCkedAll = true
}
},
openAddFilesDialog() {
this.dialogTitle = '新建文件夹'
this.outerVisible = true
},
addFiles() {
this.apipost('user_cloud_AddFolder', this.addFileMsg, res => {
if(res.data.resultCode == 1) {
this.$message.success(res.data.message);
this.getList()
this.outerVisible = false
this.addFileMsg.FolderName = ''
} else { initialIndex: 0,
this.$message.error(res.data.message) picObj: [],
} picIsShow: false,
}, err => {}) audioIsShow: false,
}, outerVisible4: false,
deleteFiles() { dialogTitle4: '',
this.$confirm('删除文件后,分享和子文件将被删除,是否删除?', '提示', { moviePath: '',
confirmButtonText: '确定', audioPath: '',
cancelButtonText: '取消', picPath: '',
type: 'warning' audioName: '',
}).then(() => { headers: {
this.apipost('user_cloud_DelFolder', { 'Content-Type': 'application/octet-stream'
FolderIdStr: this.fileList, },
FileIdStr: this.notFileList defaultProps: {
}, res => { children: 'ChildFolderList',
if(res.data.resultCode == 1) { label: 'FolderName',
this.$message.success(res.data.message); },
this.getList() defaultProps1: {
} else { children: 'ChildList',
this.$message.error(res.data.message) label: 'DepartmentName',
} disabled: "Disabled"
}, err => {}) },
}).catch(() => { defaultProps2: {
this.$message.info('取消删除'); children: 'ChildList',
}); label: 'DepartmentName',
}, disabled: "Disabled"
deleteOne(obj) { },
let fileList = [] defaultProps3: {
let notFileList = [] children: 'ChildList',
let confirmMsg = '' label: 'DepartmentName',
if(obj.DataType == 0) { //文件夹 disabled: "Disabled"
fileList.push(obj.Id) },
confirmMsg = '删除文件夹后,分享和子文件将被删除,是否删除?' outerVisible: false,
dialogTitle: '',
outerVisible1: false,
dialogTitle1: '',
outerVisible2: false,
dialogTitle2: '',
outerVisible3: false,
dialogTitle3: '',
isCkedAll: false,
isCkedAllInside: false,
//请求数据
fileList: [], //文件夹
notFileList: [], //文件
fileListInside: [], //文件夹
notFileListInside: [], //文件
saveMsg: [],
msg: {
pageIndex: '1',
pageSize: '9999',
ShareName: ''
},
nextMsg: {
ParentId: '0',
FolderName: '',
EmployeeId: '0'
},
addFileMsg: {
FolderName: '',
ParentId: '0',
FolderId: '',
},
updateFileMsg: {
FileId: '0',
FileName: '0'
},
MoveMsg: {
foldId: '0',
folderIds: [],
fileIds: []
},
shareMsg: {
shareType: '1',
fileIds: [],
targetIds: '',
folderIds: []
},
downloadMsg: {
FolderIdStr: [],
FileIdStr: []
},
downloadMsgInside: {
FolderIdStr: [],
FileIdStr: []
},
defaultImg: 'this.src="' + require('../../assets/img/litheader.png') + '"',
//返回数据
NavList: [],
nextList: [],
isChildFiles: false,
curIndex: -1,
insideCurIndex: -1,
list: [],
fileTreeList: [],
NavigationList: [],
WjId: [],
WjjId: [],
WjIdInside: [],
WjjIdInside: [],
arr: [],
departmentList: [],
ckdDepartmentList: [],
ckdDepartmentListId: [],
roleList: [],
ckdRoleList: [],
ckdRoleListId: [],
menberList: [],
ckdMenberList: [],
ckdMenberListId: [],
allLength: 0,
allLengthInside: 0,
rules: { //表单验证
FolderName: [{
required: true,
message: '请输入文件夹名称',
trigger: 'blur'
}]
},
rules1: { //表单验证
FileName: [{
required: true,
message: '请输入文件名称',
trigger: 'blur'
}]
},
srearchKey: ""
}
} },
if(obj.DataType == 2) { //文件 filters: {
notFileList.push(obj.Id) FileSizeFormat(value) {
confirmMsg = '删除文件后,分享文件将被删除,是否删除?' if (value == null || value == 0) {
} return '-'
this.$confirm(confirmMsg, '提示', { }
confirmButtonText: '确定', if (value != null) {
cancelButtonText: '取消', if (value / 1024 < 1) { //kb
type: 'warning' return value + 'KB'
}).then(() => { }
this.apipost('user_cloud_DelFolder', { if (value / 1024 > 1 && value / (1024 * 1024) < 1) { //mb
FolderIdStr: fileList, return (value / 1024).toFixed(2) + 'M'
FileIdStr: notFileList }
}, res => { if (value / (1024 * 1024) > 1) { //G
if(res.data.resultCode == 1) { return (value / (1024 * 1024)).toFixed(2) + 'G'
this.$message.success(res.data.message); }
this.getList() }
} else {
this.$message.error(res.data.message)
}
}, err => {})
}).catch(() => {
this.$message.info('取消删除');
});
},
moveFiles() {
this.getTreeList()
this.dialogTitle2 = '移动文件'
this.outerVisible2 = true
},
moveOneFile(obj){
this.fileList = []
this.notFileList = []
if(obj.shareFileType==1){
this.fileList.push(obj.shareId)
}
if(obj.shareFileType==2){
this.notFileList.push(obj.shareId)
}
this.getTreeList()
this.dialogTitle2 = '移动文件'
this.outerVisible2 = true
},
moveOneFileInside(obj){
this.fileListInside = []
this.notFileListInside = []
if(obj.DataType==0){
this.fileListInside.push(obj.Id)
}
if(obj.DataType==2){
this.notFileListInside.push(obj.Id)
}
this.getTreeList()
this.dialogTitle2 = '移动文件'
this.outerVisible2 = true
},
handleNodeChange(data, checked) {
if(checked) {
this.arr.push(data.Id)
this.$refs.tree.setCheckedKeys([data.Id]);
this.MoveMsg.foldId = data.Id;
} else {
if(this.arr.length == 1) {
this.arr = []
this.MoveMsg.foldId = '0'
} else {
this.arr = this.arr.slice(this.arr.length - 1)
this.MoveMsg.foldId = this.arr[this.arr.length - 1]
}
}
},
saveMoveFiles() {
this.list.forEach(x=>{
if(this.fileList.length>0){
for (let i=0;i<this.fileList.length;i++) {
if(x.shareFileType==1&&x.shareId==this.fileList[i]){
this.MoveMsg.folderIds.push(x.fileId)
}
}
}else{
this.MoveMsg.folderIds=[]
}
})
this.list.forEach(x=>{
if(this.notFileList.length>0){
for (let i=0;i<this.notFileList.length;i++) {
if(x.shareFileType==2&&x.shareId==this.notFileList[i]){
this.MoveMsg.fileIds.push(x.fileId)
}
}
}else{
this.MoveMsg.fileIds=[]
}
})
this.apipost('user_cloud_share_file_move', this.MoveMsg, res => {
if(res.data.resultCode == 1) {
this.$message.success(res.data.message);
this.outerVisible2 = false;
this.getList()
} else {
this.$message.error(res.data.message)
}
}, err => {})
},
saveMoveFilesInside() {
this.MoveMsg.folderIds=this.fileListInside
this.MoveMsg.fileIds=this.notFileListInside
this.apipost('user_cloud_share_file_move', this.MoveMsg, res => {
if(res.data.resultCode == 1) {
this.$message.success(res.data.message);
this.outerVisible2 = false;
this.getList()
} else {
this.$message.error(res.data.message)
}
}, err => {})
},
openShareOneDialog(obj) {
if(obj.DataType==0){
this.fileList=[]
this.notFileList=[]
this.fileList.push(obj.Id)
}
if(obj.DataType==2){
this.fileList=[]
this.notFileList=[]
this.notFileList.push(obj.Id)
}
this.outerVisible3 = true
this.dialogTitle3 = '分享文件/文件夹'
this.getDepartment()
this.getRole()
this.getMenber()
},
openShareDialog() {
this.outerVisible3 = true
this.dialogTitle3 = '分享文件/文件夹'
this.getDepartment()
this.getRole()
this.getMenber()
},
shareDeparment(){
this.shareMsg.shareType=1
this.ckdRoleList=[]
this.ckdRoleListId=[]
this.ckdMenberList=[]
this.ckdMenberListId=[]
},
shareRole(){
this.shareMsg.shareType=2
this.ckdDepartmentList=[]
this.ckdDepartmentListId=[]
this.ckdMenberList=[]
this.ckdMenberListId=[]
},
shareMenber(){
this.shareMsg.shareType=3
this.ckdDepartmentList=[]
this.ckdDepartmentListId=[]
this.ckdRoleList=[]
this.ckdRoleListId=[]
},
getDepartment() { //部门
this.apipost('app_get_GetDepartmentListTree', {}, res => {
this.departmentList = res.data.data
}, err => {})
},
DepartmentListNodeChange(data,checked){
if(checked){
this.ckdDepartmentList.push({name:data.DepartmentName,id:data.DepartmentID})
this.ckdDepartmentListId.push(data.DepartmentID)
}
if(!checked){
if(this.ckdDepartmentList.findIndex(item => item.id === data.DepartmentID)!=-1){
this.ckdDepartmentList.splice(this.ckdDepartmentList.findIndex(item => item.id === data.DepartmentID), 1)
}
if(this.ckdDepartmentListId.findIndex(item => item === data.DepartmentID)!=-1){
this.ckdDepartmentListId.splice(this.ckdDepartmentListId.findIndex(item => item === data.DepartmentID), 1)
}
}
},
deleteDepartment(id){
this.ckdDepartmentList.splice(this.ckdDepartmentList.findIndex(item => item.id === id), 1)
this.ckdDepartmentListId.splice(this.ckdDepartmentListId.findIndex(item => item === id), 1) //删除相同id
this.$refs.treeDepartmentList.setCheckedKeys(this.ckdDepartmentListId);
},
getRole() { //岗位
this.apipost('WorkFlow_get_GetDepartMentPost', {}, res => {
this.roleList = res.data.data
}, err => {})
},
roleListNodeChange(data,checked){
if(data.Type == 2 &&checked){
this.ckdRoleList.push({name:data.DepartmentName,id:data.DepartmentId})
this.ckdRoleListId.push(data.DepartmentId)
}
if(data.Type == 2 &&!checked){
if(this.ckdRoleList.findIndex(item => item.id === data.DepartmentId)!=-1){
this.ckdRoleList.splice(this.ckdRoleList.findIndex(item => item.id === data.DepartmentId), 1)
}
if(this.ckdRoleListId.findIndex(item => item === data.DepartmentId)!=-1){
this.ckdRoleListId.splice(this.ckdRoleListId.findIndex(item => item === data.DepartmentId), 1) //删除相同id
}
}
},
deleteRole(id){
this.ckdRoleList.splice(this.ckdRoleList.findIndex(item => item.id === id), 1)
this.ckdRoleListId.splice(this.ckdRoleListId.findIndex(item => item === id), 1)
//删除相同id
this.$refs.treeRole.setCheckedKeys(this.ckdRoleListId);
},
getMenber() { //员工
this.apipost('WorkFlow_get_GetDepartMentEmployee', {}, res => {
this.menberList = res.data.data
}, err => {})
},
MenberListNodeChange(data,checked){
if(data.Type == 2 &&checked){
this.ckdMenberList.push({name:data.DepartmentName,id:data.DepartmentId})
this.ckdMenberListId.push(data.DepartmentId)
}
if(data.Type == 2 &&!checked){
if(this.ckdMenberList.findIndex(item => item.id === data.DepartmentId)!=-1){
this.ckdMenberList.splice(this.ckdMenberList.findIndex(item => item.id === data.DepartmentId), 1)
}
if(this.ckdMenberListId.findIndex(item => item === data.DepartmentId)!=-1){
this.ckdMenberListId.splice(this.ckdMenberListId.findIndex(item => item === data.DepartmentId), 1) //删除相同id
}
}
},
deleteMenber(id){
this.ckdMenberList.splice(this.ckdMenberList.findIndex(item => item.id === id), 1)
this.ckdMenberListId.splice(this.ckdMenberListId.findIndex(item => item === id), 1) //删除相同id
this.$refs.treeMenber.setCheckedKeys(this.ckdMenberListId);
},
saveShareDocument(){
if(this.shareMsg.shareType==1){
this.shareMsg.targetIds=this.ckdDepartmentListId.join(',')
}else if(this.shareMsg.shareType==2){
this.shareMsg.targetIds=this.ckdRoleListId.join(',')
}else{
this.shareMsg.targetIds=this.ckdMenberListId.join(',')
}
this.shareMsg.fileIds=this.notFileList
this.shareMsg.folderIds=this.fileList
this.apipost('user_cloud_file_share',this.shareMsg,res=>{
if(res.data.resultCode == 1) {
this.outerVisible3=false
this.$message.success(res.data.message)
}else{
this.$message.error(res.data.message)
}
},err=>{})
},
updateFiles(obj) {
this.outerVisible = true;
this.dialogTitle = '修改文件夹'
this.addFileMsg.FolderName = obj.FolderName;
this.addFileMsg.FolderId = obj.FolderId;
},
updateOneFile(obj) {
this.outerVisible1 = true;
this.dialogTitle1 = '修改文件'
let index = obj.FolderName.lastIndexOf('.')
if(obj.FolderName &&obj.FolderName!="")
{
this.updateFileMsg.FileName = obj.FolderName.substring(0, index)
}
this.updateFileMsg.FileId = obj.Id
},
saveUpdateFile() {
this.apipost('user_cloud_UpdateFile', this.updateFileMsg, res => {
if(res.data.resultCode == 1) {
this.$message.success(res.data.message);
this.outerVisible = false;
this.getList()
} else {
this.$message.error(res.data.message)
}
}, err => {})
},
getList() {
this.apipost('user_cloud_get_share_tomy', this.msg, res => {
if(res.data.resultCode == 1) {
this.list = res.data.data.pageData
this.isCkedAll = false
this.fileList = []
this.notFileList = []
this.allLength = res.data.data.pageData.length
this.WjjId = []
this.WjId = []
res.data.data.pageData.forEach(item => {
if(item.shareFileType == 1) {
this.WjjId.push(item.shareId)
item.icons=this.loadFileICON('')
}
if(item.shareFileType == 2) {
this.WjId.push(item.shareId)
let fileType=item.fileName.substring(item.fileName.lastIndexOf('.')+1,item.fileName.length).toLowerCase()
item.icons=this.loadFileICON(fileType)
}
})
}
}, err => {})
},
getNextLevel(obj) {
this.addFileMsg.ParentId = obj.fileId
this.nextMsg.ParentId = obj.fileId
this.nextMsg.EmployeeId = obj.ShareEmployeeId
this.isChildFiles=true
this.getNextLevelList()
this.isCkedAll=false
this.fileList = []
this.notFileList = []
this.NavList.push({name:obj.fileName,id:obj.fileId})
},
getNextLevelTree(obj) {
this.nextMsg.ParentId = obj.Id
this.getNextLevelList()
this.NavList.push({name:obj.FolderName,id:obj.Id})
this.isChildFiles=true
this.isCkedAllInside=false
},
getNavTree(obj,index){
this.nextMsg.ParentId = obj.id
this.isCkedAllInside=false
this.getNextLevelList()
this.NavList=this.NavList.slice(0,index+1)
},
getNextLevelList(){
this.apipost('user_cloud_GetFolderList', this.nextMsg, res => {
if(res.data.resultCode == 1) {
this.nextList = res.data.data.data
this.allLengthInside = res.data.data.data.length
this.fileListInside = []
this.notFileListInside = []
this.WjjIdInside= []
this.WjIdInside = []
res.data.data.data.forEach(item => {
if(item.DataType == 0) {
this.WjjIdInside.push(item.Id)
item.icons=this.loadFileICON('')
}
if(item.DataType == 2) {
this.WjIdInside.push(item.Id)
let fileType=item.FolderName.substring(item.FolderName.lastIndexOf('.')+1,item.FolderName.length).toLowerCase()
item.icons=this.loadFileICON(fileType)
}
})
}
}, err => {})
},
getTreeList() {
this.apipost('user_cloud_GetFolderTreeList', {}, res => {
if(res.data.resultCode == 1) {
this.fileTreeList = res.data.data
} else {}
}, err => {})
},
submitForm(addMsg) { //提交创建、修改表单
this.$refs[addMsg].validate((valid) => {
if(valid) {
this.addFiles()
} else {
return false;
}
});
},
closeChangeMachie(done) { //弹出框关闭初始化弹框内表单
done();
this.addFileMsg.FolderName = ''
},
doSearch()
{
this.getList();
},
moveCancel()
{
this.$refs.tree.setCheckedKeys([]);
this.outerVisible2=false;
}
},
mounted() {
let userInfo=this.getLocalStorage();
this.getList()
},
created(){
this.createCode()
}
}
</script>
<style> }
.myDocumentsNav { },
margin: 25px 0; methods: {
} // 图片验证码
createCode() {
.myDocumentsTable td, //先清空验证码的输入
.myDocumentsTable th { this.code = "";
text-align: left!important; this.checkCode = "";
padding-left: 15px; this.picLyanzhengma = "";
} //验证码的长度
var codeLength = 4;
.myDocumentsLink { //随机数
margin: 25px 0; var random = new Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K',
} 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
for (var i = 0; i < codeLength; i++) {
.myDocumentsLink>span { //取得随机数的索引(0~35)
font-size: 12px; var index = Math.floor(Math.random() * 36);
cursor: pointer; //根据索引取得随机数加到code上
color: #E95252; this.code += random[index];
} }
//把code值赋给验证码
.myDocumentsLink>span:not(:last-of-type):hover { this.checkCode = this.code;
text-decoration: underline; },
} analyzeItem(obj) {
let typeArr = [{
.myDocumentsLink>span:not(:last-of-type):after { stringArr: 'GIF|JPG|JPEG|PNG|BMP',
content: '>'; type: 1
margin: 0 3px; },
color: #E95252; {
pointer-events: none; stringArr: 'MP3|OGG|AU|AIFF|VQF',
} type: 2
},
.myDocumentsLink>span:last-child { {
color: #666; stringArr: 'AVI|WMV|MPEG|MP4|MOV|MKV|FLV|F4V|M4V|RMVB|RM|3GP|DAT|TS|MTS|VOB',
cursor: default; type: 3
} },
{
.myDocumentUploadBtn { stringArr: 'DOCX|DOC|XLSX|XLS|PPT|PPTX',
float: left; type: 4
margin-right: 10px; },
} {
stringArr: 'PDF',
.shareDocumentDialog .el-dialog__body { type: 5
padding: 0!important; },
} ]
let fileTypeNumber; // 判断文件预览类型; 1 图片,2音频,3视频,4,office,, 5 PDF , 6 txt default其他
.documentDialogNav { let fileType = obj.fileUrl.substring(obj.fileUrl.lastIndexOf('.') + 1, obj.fileUrl.length).toUpperCase()
background: #E95252; typeArr.forEach(x => {
height: 45px; if (x.stringArr.indexOf(fileType) != '-1') {
} fileTypeNumber = x.type
}
.documentDialogNav>div { })
display: inline-block; switch (fileTypeNumber) {
color: #fff; case 1:
width: 90px; this.list.forEach(item => {
height: 26px; if (item.shareFileType == 2) {
margin-left: 20px; if (item.fileName && item.fileName != "") {
position: relative; let sfileType = item.fileName.substring(item.fileName.lastIndexOf('.') + 1, item.fileName.length)
border-radius: 13px; .toUpperCase()
background: rgba(0, 0, 0, .2); if ('GIF|JPG|JPEG|PNG|BMP'.indexOf(sfileType) != -1) {
text-align: center; this.picObj.push(item.fileUrl)
cursor: pointer; }
} }
}
.documentDialogNav>div .checkIcon { })
width: 0; this.picObj.forEach((x, i) => {
height: 0; if (x == obj.fileUrl) {
border-width: 0 5px 5px; this.initialIndex = i
position: absolute; return false
left: 40px; }
top: 40px;
border-style: solid; })
border-color: transparent transparent #fff; this.picIsShow = true
/*透明 透明 灰*/ //this.picPath=obj.FilePath
} break;
.DocumentLoadVerification{ case 2:
width: 120px; height: 30px; this.audioIsShow = true
border-radius: 4px; this.audioName = obj.fileName
letter-spacing: 5px; this.audioPath = obj.fileUrl
border:none; background: #f56c6c; break;
color: #eee; case 3:
cursor: pointer; this.outerVisible4 = true
} this.dialogTitle4 = obj.fileName
</style> this.moviePath = obj.fileUrl
\ No newline at end of file break;
case 4:
window.open("https://view.officeapps.live.com/op/view.aspx?src=" + obj.fileUrl)
break;
case 5:
this.previewPDF(obj.fileUrl)
default:
this.$message.warning('该文件格式暂不支持预览,请下载用相关软件预览!')
break;
}
},
analyzeItemInside(obj) {
let typeArr = [{
stringArr: 'GIF|JPG|JPEG|PNG|BMP',
type: 1
},
{
stringArr: 'MP3|OGG|AU|AIFF|VQF',
type: 2
},
{
stringArr: 'AVI|WMV|MPEG|MP4|MOV|MKV|FLV|F4V|M4V|RMVB|RM|3GP|DAT|TS|MTS|VOB',
type: 3
},
{
stringArr: 'DOCX|DOC|XLSX|XLS|PPT|PPTX',
type: 4
},
{
stringArr: 'PDF',
type: 5
},
]
let fileTypeNumber; // 判断文件预览类型; 1 图片,2音频,3视频,4,office,, 5 PDF , 6 txt default其他
let fileType = obj.FilePath.substring(obj.FilePath.lastIndexOf('.') + 1, obj.FilePath.length).toUpperCase()
typeArr.forEach(x => {
if (x.stringArr.indexOf(fileType) != '-1') {
fileTypeNumber = x.type
}
})
switch (fileTypeNumber) {
case 1:
this.nextList.forEach(item => {
if (item.DataType == 2) {
let fileType = item.FolderName.substring(item.FolderName.lastIndexOf('.') + 1, item.FolderName
.length).toUpperCase()
if ('GIF|JPG|JPEG|PNG|BMP'.indexOf(fileType) != -1) {
this.picObj.push(item.FilePath)
}
}
})
this.picObj.forEach((x, i) => {
if (x == obj.FilePath) {
this.initialIndex = i
return false
}
})
this.picIsShow = true
//this.picPath=obj.FilePath
break;
case 2:
this.audioIsShow = true
this.audioName = obj.FolderName
this.audioPath = obj.FilePath
break;
case 3:
this.outerVisible4 = true
this.dialogTitle4 = obj.FolderName
this.moviePath = obj.FilePath
break;
case 4:
window.open("https://view.officeapps.live.com/op/view.aspx?src=" + obj.FilePath)
break;
case 5:
this.previewPDF(obj.FilePath)
break
default:
this.$message.warning('该文件格式暂不支持预览,请下载用相关软件预览!')
break;
}
},
resGetList() {
this.msg.ShareName = ''
this.isChildFiles = false;
this.isCkedAllInside = false
this.NavList = []
this.fileListInside = [], //文件夹
this.notFileListInside = [], //文件
this.getList()
},
handleExceed(file, fileList) {
this.$message.warning('一次最多选择5个文件!')
return
},
uploadFileBtn(file) { //上传
let that = this
let newArr = [];
newArr.push(file.file)
let path = "/Upload/Temporary/"
this.UploadSelfFileT(path, newArr, x => {
this.saveMsg = []
this.saveMsg.push({
Path: x.data.FilePath,
FileName: file.file.name,
MD5Sign: file.file.uid,
FileSize: (file.file.size / 1024).toFixed(0),
FolderId: this.msg.ParentId
})
that.apipost('user_cloud_SaveFile', this.saveMsg, res => {
if (res.data.resultCode == 1) {
this.$message.success(res.data.message);
this.$refs.upload.clearFiles();
this.getList()
} else {
this.$message.error(res.data.message);
this.$refs.upload.clearFiles();
}
}, err => {})
});
},
dowloadSingle() {
this.list.forEach(item => {
if (item.shareFileType == 2) {
for (let i = 0; i < this.notFileList.length; i++) {
if (this.notFileList[i] == item.shareId) {
let reg = /^http(s)?:\/\/(.*?)\//
this.downloadFileRename(item.fileUrl.replace(reg, ''), item.fileName);
}
}
}
})
},
dowloadSingleInside() {
this.nextList.forEach(item => {
if (item.DataType == 2) {
for (let i = 0; i < this.notFileListInside.length; i++) {
if (this.notFileListInside[i] == item.Id) {
let reg = /^http(s)?:\/\/(.*?)\//
this.downloadFileRename(item.FilePath.replace(reg, ''), item.FolderName);
}
}
}
})
},
downloadOne(obj) {
if (obj.shareFileType == 1) {
this.yzmVisible = true
this.createCode()
this.fileList = []
this.notFileList = []
this.fileList.push(obj.shareId)
}
if (obj.shareFileType == 2) {
let reg = /^http(s)?:\/\/(.*?)\//
this.downloadFileRename(obj.fileUrl.replace(reg, ''), obj.fileName);
}
},
downloadTotal() {
if (this.picLyanzhengma.toLocaleUpperCase() == this.checkCode) {
this.yzmVisible = false
this.$message.info('文件压缩中,请等待..')
this.list.forEach(x => {
if (this.fileList.length > 0) {
for (let i = 0; i < this.fileList.length; i++) {
if (x.shareFileType == 1 && x.shareId == this.fileList[i]) {
this.downloadMsg.FolderIdStr.push(x.fileId)
}
}
} else {
this.downloadMsg.folderIds = []
}
})
this.list.forEach(x => {
if (this.notFileList.length > 0) {
for (let i = 0; i < this.notFileList.length; i++) {
if (x.shareFileType == 2 && x.shareId == this.notFileList[i]) {
this.downloadMsg.FileIdStr.push(x.fileId)
}
}
} else {
this.downloadMsg.fileIds = []
}
})
this.apipost('user_cloud_GetPackageFile', this.downloadMsg, res => {
if (res.data.resultCode == 1) {
const link = document.createElement('a');
let _loadUrl = this.domainManager().DomainUrl;
link.href = _loadUrl + res.data.data;
document.body.appendChild(link);
link.click();
this.apipost('user_cloud_DelPackageFile', {
Path: link.href
}, res => {}, err => {})
} else {
this.$message.error(res.data.message)
}
}, err => {})
} else {
this.$message.error('验证码错误!')
}
},
downloadOneInside(obj) {
if (obj.DataType == 0) {
this.yzmVisible = true
this.createCode()
this.fileListInside = []
this.notFileListInside = []
this.fileListInside.push(obj.Id)
}
if (obj.DataType == 2) {
let reg = /^http(s)?:\/\/(.*?)\//
this.downloadFileRename(obj.FilePath.replace(reg, ''), obj.FolderName);
}
},
downloadTotalInside() {
if (this.picLyanzhengma.toLocaleUpperCase() == this.checkCode) {
this.yzmVisible = false
this.$message.info('文件压缩中,请等待..')
this.downloadMsgInside.FolderIdStr = this.fileListInside
this.downloadMsgInside.FileIdStr = this.notFileListInside
this.apipost('user_cloud_GetPackageFile', this.downloadMsgInside, res => {
if (res.data.resultCode == 1) {
const link = document.createElement('a');
let _loadUrl = this.domainManager().DomainUrl;
link.href = _loadUrl + res.data.data;
document.body.appendChild(link);
link.click();
this.apipost('user_cloud_DelPackageFile', {
Path: link.href
}, res => {}, err => {})
} else {
this.$message.error(res.data.message)
}
}, err => {})
} else {
this.$message.error('验证码错误!')
}
},
enterTr(index) {
this.curIndex = index
},
leaveTr() {
this.curIndex = -1;
},
enterTrInside(index) {
this.insideCurIndex = index
},
leaveTrInside() {
this.insideCurIndex = -1;
},
checkedAll() {
if (this.isCkedAll == true) {
this.fileList = []
this.notFileList = []
} else {
this.WjjId.forEach(item => {
this.fileList.push(item)
})
this.WjId.forEach(item => {
this.notFileList.push(item)
})
}
},
checkedAllInside() {
if (this.isCkedAllInside == true) {
this.fileListInside = []
this.notFileListInside = []
} else {
this.WjjIdInside.forEach(item => {
this.fileListInside.push(item)
})
this.WjIdInside.forEach(item => {
this.notFileListInside.push(item)
})
}
},
ckeckedOneInside() {
if (this.fileListInside.length + this.notFileListInside.length < this.allLengthInside) {
this.isCkedAllInside = false
} else {
this.isCkedAllInside = true
}
},
ckeckedOne() {
if (this.fileList.length + this.notFileList.length < this.allLength) {
this.isCkedAll = false
} else {
this.isCkedAll = true
}
},
openAddFilesDialog() {
this.dialogTitle = '新建文件夹'
this.outerVisible = true
},
addFiles() {
this.apipost('user_cloud_AddFolder', this.addFileMsg, res => {
if (res.data.resultCode == 1) {
this.$message.success(res.data.message);
this.getList()
this.outerVisible = false
this.addFileMsg.FolderName = ''
} else {
this.$message.error(res.data.message)
}
}, err => {})
},
deleteFiles() {
this.$confirm('删除文件后,分享和子文件将被删除,是否删除?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.apipost('user_cloud_DelFolder', {
FolderIdStr: this.fileList,
FileIdStr: this.notFileList
}, res => {
if (res.data.resultCode == 1) {
this.$message.success(res.data.message);
this.getList()
} else {
this.$message.error(res.data.message)
}
}, err => {})
}).catch(() => {
this.$message.info('取消删除');
});
},
deleteOne(obj) {
let fileList = []
let notFileList = []
let confirmMsg = ''
if (obj.DataType == 0) { //文件夹
fileList.push(obj.Id)
confirmMsg = '删除文件夹后,分享和子文件将被删除,是否删除?'
}
if (obj.DataType == 2) { //文件
notFileList.push(obj.Id)
confirmMsg = '删除文件后,分享文件将被删除,是否删除?'
}
this.$confirm(confirmMsg, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.apipost('user_cloud_DelFolder', {
FolderIdStr: fileList,
FileIdStr: notFileList
}, res => {
if (res.data.resultCode == 1) {
this.$message.success(res.data.message);
this.getList()
} else {
this.$message.error(res.data.message)
}
}, err => {})
}).catch(() => {
this.$message.info('取消删除');
});
},
moveFiles() {
this.getTreeList()
this.dialogTitle2 = '移动文件'
this.outerVisible2 = true
},
moveOneFile(obj) {
this.fileList = []
this.notFileList = []
if (obj.shareFileType == 1) {
this.fileList.push(obj.shareId)
}
if (obj.shareFileType == 2) {
this.notFileList.push(obj.shareId)
}
this.getTreeList()
this.dialogTitle2 = '移动文件'
this.outerVisible2 = true
},
moveOneFileInside(obj) {
this.fileListInside = []
this.notFileListInside = []
if (obj.DataType == 0) {
this.fileListInside.push(obj.Id)
}
if (obj.DataType == 2) {
this.notFileListInside.push(obj.Id)
}
this.getTreeList()
this.dialogTitle2 = '移动文件'
this.outerVisible2 = true
},
handleNodeChange(data, checked) {
if (checked) {
this.arr.push(data.Id)
this.$refs.tree.setCheckedKeys([data.Id]);
this.MoveMsg.foldId = data.Id;
} else {
if (this.arr.length == 1) {
this.arr = []
this.MoveMsg.foldId = '0'
} else {
this.arr = this.arr.slice(this.arr.length - 1)
this.MoveMsg.foldId = this.arr[this.arr.length - 1]
}
}
},
saveMoveFiles() {
this.list.forEach(x => {
if (this.fileList.length > 0) {
for (let i = 0; i < this.fileList.length; i++) {
if (x.shareFileType == 1 && x.shareId == this.fileList[i]) {
this.MoveMsg.folderIds.push(x.fileId)
}
}
} else {
this.MoveMsg.folderIds = []
}
})
this.list.forEach(x => {
if (this.notFileList.length > 0) {
for (let i = 0; i < this.notFileList.length; i++) {
if (x.shareFileType == 2 && x.shareId == this.notFileList[i]) {
this.MoveMsg.fileIds.push(x.fileId)
}
}
} else {
this.MoveMsg.fileIds = []
}
})
this.apipost('user_cloud_share_file_move', this.MoveMsg, res => {
if (res.data.resultCode == 1) {
this.$message.success(res.data.message);
this.outerVisible2 = false;
this.getList()
} else {
this.$message.error(res.data.message)
}
}, err => {})
},
saveMoveFilesInside() {
this.MoveMsg.folderIds = this.fileListInside
this.MoveMsg.fileIds = this.notFileListInside
this.apipost('user_cloud_share_file_move', this.MoveMsg, res => {
if (res.data.resultCode == 1) {
this.$message.success(res.data.message);
this.outerVisible2 = false;
this.getList()
} else {
this.$message.error(res.data.message)
}
}, err => {})
},
openShareOneDialog(obj) {
if (obj.DataType == 0) {
this.fileList = []
this.notFileList = []
this.fileList.push(obj.Id)
}
if (obj.DataType == 2) {
this.fileList = []
this.notFileList = []
this.notFileList.push(obj.Id)
}
this.outerVisible3 = true
this.dialogTitle3 = '分享文件/文件夹'
this.getDepartment()
this.getRole()
this.getMenber()
},
openShareDialog() {
this.outerVisible3 = true
this.dialogTitle3 = '分享文件/文件夹'
this.getDepartment()
this.getRole()
this.getMenber()
},
shareDeparment() {
this.shareMsg.shareType = 1
this.ckdRoleList = []
this.ckdRoleListId = []
this.ckdMenberList = []
this.ckdMenberListId = []
},
shareRole() {
this.shareMsg.shareType = 2
this.ckdDepartmentList = []
this.ckdDepartmentListId = []
this.ckdMenberList = []
this.ckdMenberListId = []
},
shareMenber() {
this.shareMsg.shareType = 3
this.ckdDepartmentList = []
this.ckdDepartmentListId = []
this.ckdRoleList = []
this.ckdRoleListId = []
},
getDepartment() { //部门
this.apipost('app_get_GetDepartmentListTree', {}, res => {
this.departmentList = res.data.data
}, err => {})
},
DepartmentListNodeChange(data, checked) {
if (checked) {
this.ckdDepartmentList.push({
name: data.DepartmentName,
id: data.DepartmentID
})
this.ckdDepartmentListId.push(data.DepartmentID)
}
if (!checked) {
if (this.ckdDepartmentList.findIndex(item => item.id === data.DepartmentID) != -1) {
this.ckdDepartmentList.splice(this.ckdDepartmentList.findIndex(item => item.id === data.DepartmentID), 1)
}
if (this.ckdDepartmentListId.findIndex(item => item === data.DepartmentID) != -1) {
this.ckdDepartmentListId.splice(this.ckdDepartmentListId.findIndex(item => item === data.DepartmentID), 1)
}
}
},
deleteDepartment(id) {
this.ckdDepartmentList.splice(this.ckdDepartmentList.findIndex(item => item.id === id), 1)
this.ckdDepartmentListId.splice(this.ckdDepartmentListId.findIndex(item => item === id), 1) //删除相同id
this.$refs.treeDepartmentList.setCheckedKeys(this.ckdDepartmentListId);
},
getRole() { //岗位
this.apipost('WorkFlow_get_GetDepartMentPost', {}, res => {
this.roleList = res.data.data
}, err => {})
},
roleListNodeChange(data, checked) {
if (data.Type == 2 && checked) {
this.ckdRoleList.push({
name: data.DepartmentName,
id: data.DepartmentId
})
this.ckdRoleListId.push(data.DepartmentId)
}
if (data.Type == 2 && !checked) {
if (this.ckdRoleList.findIndex(item => item.id === data.DepartmentId) != -1) {
this.ckdRoleList.splice(this.ckdRoleList.findIndex(item => item.id === data.DepartmentId), 1)
}
if (this.ckdRoleListId.findIndex(item => item === data.DepartmentId) != -1) {
this.ckdRoleListId.splice(this.ckdRoleListId.findIndex(item => item === data.DepartmentId), 1) //删除相同id
}
}
},
deleteRole(id) {
this.ckdRoleList.splice(this.ckdRoleList.findIndex(item => item.id === id), 1)
this.ckdRoleListId.splice(this.ckdRoleListId.findIndex(item => item === id), 1)
//删除相同id
this.$refs.treeRole.setCheckedKeys(this.ckdRoleListId);
},
getMenber() { //员工
this.apipost('WorkFlow_get_GetDepartMentEmployee', {}, res => {
this.menberList = res.data.data
}, err => {})
},
MenberListNodeChange(data, checked) {
if (data.Type == 2 && checked) {
this.ckdMenberList.push({
name: data.DepartmentName,
id: data.DepartmentId
})
this.ckdMenberListId.push(data.DepartmentId)
}
if (data.Type == 2 && !checked) {
if (this.ckdMenberList.findIndex(item => item.id === data.DepartmentId) != -1) {
this.ckdMenberList.splice(this.ckdMenberList.findIndex(item => item.id === data.DepartmentId), 1)
}
if (this.ckdMenberListId.findIndex(item => item === data.DepartmentId) != -1) {
this.ckdMenberListId.splice(this.ckdMenberListId.findIndex(item => item === data.DepartmentId),
1) //删除相同id
}
}
},
deleteMenber(id) {
this.ckdMenberList.splice(this.ckdMenberList.findIndex(item => item.id === id), 1)
this.ckdMenberListId.splice(this.ckdMenberListId.findIndex(item => item === id), 1) //删除相同id
this.$refs.treeMenber.setCheckedKeys(this.ckdMenberListId);
},
saveShareDocument() {
if (this.shareMsg.shareType == 1) {
this.shareMsg.targetIds = this.ckdDepartmentListId.join(',')
} else if (this.shareMsg.shareType == 2) {
this.shareMsg.targetIds = this.ckdRoleListId.join(',')
} else {
this.shareMsg.targetIds = this.ckdMenberListId.join(',')
}
this.shareMsg.fileIds = this.notFileList
this.shareMsg.folderIds = this.fileList
this.apipost('user_cloud_file_share', this.shareMsg, res => {
if (res.data.resultCode == 1) {
this.outerVisible3 = false
this.$message.success(res.data.message)
} else {
this.$message.error(res.data.message)
}
}, err => {})
},
updateFiles(obj) {
this.outerVisible = true;
this.dialogTitle = '修改文件夹'
this.addFileMsg.FolderName = obj.FolderName;
this.addFileMsg.FolderId = obj.FolderId;
},
updateOneFile(obj) {
this.outerVisible1 = true;
this.dialogTitle1 = '修改文件'
let index = obj.FolderName.lastIndexOf('.')
if (obj.FolderName && obj.FolderName != "") {
this.updateFileMsg.FileName = obj.FolderName.substring(0, index)
}
this.updateFileMsg.FileId = obj.Id
},
saveUpdateFile() {
this.apipost('user_cloud_UpdateFile', this.updateFileMsg, res => {
if (res.data.resultCode == 1) {
this.$message.success(res.data.message);
this.outerVisible = false;
this.getList()
} else {
this.$message.error(res.data.message)
}
}, err => {})
},
getList() {
this.apipost('user_cloud_get_share_tomy', this.msg, res => {
if (res.data.resultCode == 1) {
this.list = res.data.data.pageData
this.isCkedAll = false
this.fileList = []
this.notFileList = []
this.allLength = res.data.data.pageData.length
this.WjjId = []
this.WjId = []
res.data.data.pageData.forEach(item => {
if (item.shareFileType == 1) {
this.WjjId.push(item.shareId)
item.icons = this.loadFileICON('')
}
if (item.shareFileType == 2) {
this.WjId.push(item.shareId)
if (item.fileName && item.fileName != "") {
let fileType = item.fileName.substring(item.fileName.lastIndexOf('.') + 1, item.fileName
.length).toLowerCase()
item.icons = this.loadFileICON(fileType)
}
}
})
}
}, err => {})
},
getNextLevel(obj) {
this.addFileMsg.ParentId = obj.fileId
this.nextMsg.ParentId = obj.fileId
this.nextMsg.EmployeeId = obj.ShareEmployeeId
this.isChildFiles = true
this.getNextLevelList()
this.isCkedAll = false
this.fileList = []
this.notFileList = []
this.NavList.push({
name: obj.fileName,
id: obj.fileId
})
},
getNextLevelTree(obj) {
this.nextMsg.ParentId = obj.Id
this.getNextLevelList()
this.NavList.push({
name: obj.FolderName,
id: obj.Id
})
this.isChildFiles = true
this.isCkedAllInside = false
},
getNavTree(obj, index) {
this.nextMsg.ParentId = obj.id
this.isCkedAllInside = false
this.getNextLevelList()
this.NavList = this.NavList.slice(0, index + 1)
},
getNextLevelList() {
this.apipost('user_cloud_GetFolderList', this.nextMsg, res => {
if (res.data.resultCode == 1) {
this.nextList = res.data.data.data
this.allLengthInside = res.data.data.data.length
this.fileListInside = []
this.notFileListInside = []
this.WjjIdInside = []
this.WjIdInside = []
res.data.data.data.forEach(item => {
if (item.DataType == 0) {
this.WjjIdInside.push(item.Id)
item.icons = this.loadFileICON('')
}
if (item.DataType == 2) {
this.WjIdInside.push(item.Id);
if (item.FolderName && item.FolderName != "") {
let fileType = item.FolderName.substring(item.FolderName.lastIndexOf('.') + 1, item
.FolderName
.length).toLowerCase()
item.icons = this.loadFileICON(fileType)
}
}
})
}
}, err => {})
},
getTreeList() {
this.apipost('user_cloud_GetFolderTreeList', {}, res => {
if (res.data.resultCode == 1) {
this.fileTreeList = res.data.data
} else {}
}, err => {})
},
submitForm(addMsg) { //提交创建、修改表单
this.$refs[addMsg].validate((valid) => {
if (valid) {
this.addFiles()
} else {
return false;
}
});
},
closeChangeMachie(done) { //弹出框关闭初始化弹框内表单
done();
this.addFileMsg.FolderName = ''
},
doSearch() {
this.getList();
},
moveCancel() {
this.$refs.tree.setCheckedKeys([]);
this.outerVisible2 = false;
}
},
mounted() {
let userInfo = this.getLocalStorage();
this.getList()
},
created() {
this.createCode()
}
}
</script>
<style>
.myDocumentsNav {
margin: 25px 0;
}
.myDocumentsTable td,
.myDocumentsTable th {
text-align: left !important;
padding-left: 15px;
}
.myDocumentsLink {
margin: 25px 0;
}
.myDocumentsLink>span {
font-size: 12px;
cursor: pointer;
color: #E95252;
}
.myDocumentsLink>span:not(:last-of-type):hover {
text-decoration: underline;
}
.myDocumentsLink>span:not(:last-of-type):after {
content: '>';
margin: 0 3px;
color: #E95252;
pointer-events: none;
}
.myDocumentsLink>span:last-child {
color: #666;
cursor: default;
}
.myDocumentUploadBtn {
float: left;
margin-right: 10px;
}
.shareDocumentDialog .el-dialog__body {
padding: 0 !important;
}
.documentDialogNav {
background: #E95252;
height: 45px;
}
.documentDialogNav>div {
display: inline-block;
color: #fff;
width: 90px;
height: 26px;
margin-left: 20px;
position: relative;
border-radius: 13px;
background: rgba(0, 0, 0, .2);
text-align: center;
cursor: pointer;
}
.documentDialogNav>div .checkIcon {
width: 0;
height: 0;
border-width: 0 5px 5px;
position: absolute;
left: 40px;
top: 40px;
border-style: solid;
border-color: transparent transparent #fff;
/*透明 透明 灰*/
}
.DocumentLoadVerification {
width: 120px;
height: 30px;
border-radius: 4px;
letter-spacing: 5px;
border: none;
background: #f56c6c;
color: #eee;
cursor: pointer;
}
</style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment