550 lines
16 KiB
JavaScript
550 lines
16 KiB
JavaScript
|
// packageB/pages/files/files.js
|
||
|
import { imageUrl } from '../../../utils/image';
|
||
|
import { req, addShareLog } from '../../../utils/service';
|
||
|
import { STATIC_DOMAIN, URL } from '../../../utils/config';
|
||
|
import { timeFormat, twoWayBinding, shareAddRetailParam, getFileSize } from '../../../utils/util';
|
||
|
import { fileTypeActions, filterTypeActions, showFileTypeSheet, showFilterTypeSheet, catalogue, modalFuns, panelBar, sharePanel, initIconPath, requestSreId, getLogRouteId } from './config';
|
||
|
import { choseFiles, choseImageConfirm, choseVideoConfirm, uploadLargeFile, choseFilesConfirm } from '../../../utils/uploadFile';
|
||
|
const { globalData } = getApp();
|
||
|
Page({
|
||
|
renameAfterUpload:false,
|
||
|
renameFileId:'',
|
||
|
newSreId:'',
|
||
|
/**
|
||
|
* 页面的初始数据
|
||
|
*/
|
||
|
data: {
|
||
|
imageUrl, fileTypeActions, filterTypeActions, sharePanel,
|
||
|
currentPage:1,
|
||
|
fileTypeIndex:0,
|
||
|
filterTypeIndex:1,
|
||
|
directoryId:'0', //父文件夹id, 最外层传0
|
||
|
keyword:'',//搜索关键字
|
||
|
loadingState:1,
|
||
|
dataList:[],
|
||
|
catalogue,
|
||
|
showSearch:false, //是否显示筛选
|
||
|
uploadProgress:0,
|
||
|
showModal:false,
|
||
|
directoryName:'',
|
||
|
isEdit:false,
|
||
|
modalFunIndex:0,
|
||
|
modalFuns,
|
||
|
panelBar,
|
||
|
renameType:0, //0文件夹 1 文件
|
||
|
renameData:'', //重命名的文件,或文件夹
|
||
|
showMoveFile:false, //是否显示移动文件
|
||
|
newFileName:'',
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* 生命周期函数--监听页面加载
|
||
|
*/
|
||
|
onLoad: function (options) {
|
||
|
this.getDirectoryList();
|
||
|
this.getUserAuth();
|
||
|
},
|
||
|
getUserAuth:function(){
|
||
|
let accountLogin = wx.getStorageSync('accountLogin');
|
||
|
if(accountLogin.userType == 2 && accountLogin.schoolManager){
|
||
|
this.setData({isSchoolManager:true})
|
||
|
}
|
||
|
},
|
||
|
initIconPath(suffix){
|
||
|
let { fileIcons } = imageUrl;
|
||
|
const isVideo = /mp4|mpg|mpeg|dat|asf|avi|rm|rmvb|mov|wmv|flv|mkv/,
|
||
|
isAudio = /avi|wmv|mpg|mpeg|mov|rm|ram|swf|flv|mp4|mp3|wma|avi|rm|rmvb|flv|mpg|mkv|m4a/,
|
||
|
isImage = /jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg/,
|
||
|
isFile = /pptx|ppt|xlsx|xls|doc|docx|pdf|wps/,
|
||
|
isDocx = /doc|docx/,
|
||
|
isPptx = /ppt|pptx/,
|
||
|
isXlsx = /xlsx|xls/,
|
||
|
isPdf = /pdf/;
|
||
|
if(isDocx.test(suffix)) return `${fileIcons}doc.png`;
|
||
|
if(suffix == 'fbx') return `${fileIcons}fbx.png`;
|
||
|
if(suffix == 'folder') return `${fileIcons}folder.png`;
|
||
|
if(isAudio.test(suffix)) return `${fileIcons}music.png`;
|
||
|
if(isPptx.test(suffix)) return `${fileIcons}pptx.png`;
|
||
|
if(isXlsx.test(suffix)) return `${fileIcons}xlsx.png`;
|
||
|
if(isPdf.test(suffix)) return `${fileIcons}pdf.png`;
|
||
|
return imageUrl.fileDefault
|
||
|
},
|
||
|
getDirectoryList(reachBottom = false){
|
||
|
let { directoryId, keyword } = this.data, { dataList, fileTypeActions, filterTypeActions, fileTypeIndex, filterTypeIndex } = this.data;
|
||
|
let param = {
|
||
|
busType:'document_cloud',
|
||
|
directoryId,
|
||
|
keyword,
|
||
|
fileType:fileTypeActions[fileTypeIndex].type,
|
||
|
withDirectory:true,
|
||
|
currentPage:this.data.currentPage,
|
||
|
pageSize:30
|
||
|
}
|
||
|
req('GET',URL.getFiles,param,{},false).then(data=>{
|
||
|
data.directoryList.map(c=>{
|
||
|
c.gmtCreate = timeFormat('yyyy-MM-dd hh:mm',c.gmtCreate);
|
||
|
c.thumb = `${imageUrl.fileIcons}folder.png`;
|
||
|
c.checked = false;
|
||
|
})
|
||
|
data.fileList.map(c=>{
|
||
|
c.gmtCreate = timeFormat('yyyy-MM-dd hh:mm',c.gmtCreate);
|
||
|
c.fileSize = getFileSize(c.fileSize);
|
||
|
c.checked = false;
|
||
|
if(c.thumb){
|
||
|
c.thumb = /http|https/.test(c.thumb)?c.thumb:STATIC_DOMAIN + c.thumb;
|
||
|
let index = c.thumb.lastIndexOf('.');
|
||
|
if( /jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg/.test(c.suffix)) c.thumb = `${c.thumb.substring(0,index)}!small${c.thumb.substring(index,c.thumb.length)}`;
|
||
|
}else{
|
||
|
c.thumb = initIconPath(c.suffix);
|
||
|
}
|
||
|
})
|
||
|
if(reachBottom){
|
||
|
let { directoryList, fileList } = dataList;
|
||
|
directoryList = [...directoryList,...data.directoryList];
|
||
|
fileList = [...fileList,...data.fileList];
|
||
|
dataList = {directoryList,fileList}
|
||
|
}else{
|
||
|
dataList = data;
|
||
|
}
|
||
|
|
||
|
this.setData({
|
||
|
dataList,
|
||
|
loadingState:0
|
||
|
})
|
||
|
})
|
||
|
},
|
||
|
/**
|
||
|
* 生命周期函数--监听页面初次渲染完成
|
||
|
*/
|
||
|
onReady: function () {
|
||
|
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* 生命周期函数--监听页面显示
|
||
|
*/
|
||
|
onShow: function () {
|
||
|
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* 生命周期函数--监听页面隐藏
|
||
|
*/
|
||
|
onHide: function () {
|
||
|
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* 生命周期函数--监听页面卸载
|
||
|
*/
|
||
|
onUnload: function () {
|
||
|
if(this.data.timer) clearInterval(this.data.timer)
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* 页面相关事件处理函数--监听用户下拉动作
|
||
|
*/
|
||
|
onPullDownRefresh: function () {
|
||
|
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* 页面上拉触底事件的处理函数
|
||
|
*/
|
||
|
onReachBottom: function () {
|
||
|
this.setData({currentPage:this.data.currentPage+1})
|
||
|
this.getDirectoryList(true)
|
||
|
},
|
||
|
// 关闭筛选模态框
|
||
|
onClickHide(){
|
||
|
this.setData({
|
||
|
showFilterTypeModal:false,
|
||
|
showFileTypeModal:false
|
||
|
})
|
||
|
},
|
||
|
//选择筛选类型
|
||
|
choseType(e){
|
||
|
let { index, cate } = e.currentTarget.dataset;
|
||
|
this.setData({[cate]:index})
|
||
|
this.onClickHide();
|
||
|
if(cate == 'fileTypeIndex'){
|
||
|
this.setData({currentPage:1})
|
||
|
this.getDirectoryList();
|
||
|
}
|
||
|
if(cate == 'filterTypeIndex'){
|
||
|
this.setData({
|
||
|
isTile:index == 0 ? true : false
|
||
|
})
|
||
|
}
|
||
|
},
|
||
|
// 选择根目录
|
||
|
choseCatelogue(e){
|
||
|
let { index } = e.currentTarget.dataset, { catalogue } = this.data;
|
||
|
if(index == catalogue.length-1) return;
|
||
|
catalogue = catalogue.splice(0,index+1);
|
||
|
this.setData({
|
||
|
directoryId:catalogue[index].directoryId,
|
||
|
catalogue
|
||
|
})
|
||
|
this.setData({currentPage:1})
|
||
|
this.getDirectoryList();
|
||
|
},
|
||
|
// 折叠搜索
|
||
|
foldSearch(){
|
||
|
let { showSearch } = this.data;
|
||
|
this.setData({showSearch:!showSearch})
|
||
|
if(showSearch){
|
||
|
this.setData({currentPage:1})
|
||
|
this.getDirectoryList();
|
||
|
}
|
||
|
},
|
||
|
// 输入内容
|
||
|
inputSearchWord(e){
|
||
|
this.setData({keyword:e.detail})
|
||
|
},
|
||
|
// 搜索
|
||
|
onSearchBegin(e){
|
||
|
this.setData({currentPage:1})
|
||
|
this.getDirectoryList();
|
||
|
},
|
||
|
// 点击按钮
|
||
|
showActionSheet(){
|
||
|
let { directoryId } = this.data;
|
||
|
wx.showActionSheet({
|
||
|
itemList: ['新建文件夹','图片','视频','文件'],
|
||
|
success:res=>{
|
||
|
switch(res.tapIndex){
|
||
|
case 0:
|
||
|
this.setData({
|
||
|
modalFunIndex:0
|
||
|
})
|
||
|
this.foldModal();
|
||
|
break;
|
||
|
case 1:
|
||
|
this.choseFiles('image',directoryId,'document_cloud');
|
||
|
break;
|
||
|
case 2:
|
||
|
this.choseFiles('video',directoryId,'document_cloud');
|
||
|
break;
|
||
|
case 3:
|
||
|
this.choseFiles('fiels',directoryId,'document_cloud');
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
},
|
||
|
foldModal(){
|
||
|
let { showModal } = this.data;
|
||
|
this.setData({
|
||
|
showModal:!showModal
|
||
|
})
|
||
|
if(showModal) this.cancelEdit();
|
||
|
},
|
||
|
// 显示重命名
|
||
|
showRename(){
|
||
|
let { dataList, renameType, modalFuns, modalFunIndex } = this.data, total = 0, one = '';
|
||
|
dataList.directoryList.map(c=>{
|
||
|
if(c.checked){
|
||
|
total ++ ;
|
||
|
one = c;
|
||
|
renameType = 0
|
||
|
}
|
||
|
})
|
||
|
dataList.fileList.map(c=>{
|
||
|
if(c.checked){
|
||
|
total ++ ;
|
||
|
one = c;
|
||
|
renameType = 1
|
||
|
}
|
||
|
})
|
||
|
if(total == 0){
|
||
|
wx.showToast({
|
||
|
title: '未选择文件',
|
||
|
icon:'none'
|
||
|
})
|
||
|
return;
|
||
|
}
|
||
|
if(total > 1){
|
||
|
wx.showToast({
|
||
|
title: '重命名不支持多个文件修改',
|
||
|
icon:"none"
|
||
|
})
|
||
|
return;
|
||
|
}
|
||
|
modalFunIndex = 1;
|
||
|
modalFuns[modalFunIndex].value = renameType != 1 ? one.directoryName : one.fileName;
|
||
|
this.setData({modalFunIndex,renameData:one,renameType, modalFuns})
|
||
|
this.foldModal();
|
||
|
},
|
||
|
// 取消管理
|
||
|
cancelEdit(){
|
||
|
let { dataList } = this.data;
|
||
|
dataList.directoryList.map(c=>c.checked = false);
|
||
|
dataList.fileList.map(c=>c.checked = false);
|
||
|
this.setData({
|
||
|
isEdit:false,
|
||
|
dataList
|
||
|
})
|
||
|
},
|
||
|
createNewFolderConfirm(){
|
||
|
let { directoryId, directoryName } = this.data;
|
||
|
if(!directoryName || !directoryName.trim()){
|
||
|
wx.showToast({
|
||
|
title: '文件夹名不能为空!',
|
||
|
icon:'none'
|
||
|
})
|
||
|
return;
|
||
|
}
|
||
|
req('POST',URL.addDirectory,{},{busType:'document_cloud',directoryId,directoryName},false).then(data=>{
|
||
|
this.foldModal();
|
||
|
this.setData({currentPage:1})
|
||
|
this.getDirectoryList();
|
||
|
if(this.data.showMoveFile) this.selectComponent('#moveFiles').getDirectoryList();
|
||
|
}).catch(err=>{
|
||
|
console.log(err)
|
||
|
wx.showToast({
|
||
|
title: err.message,
|
||
|
icon:'none'
|
||
|
})
|
||
|
})
|
||
|
},
|
||
|
// 重命名
|
||
|
renameFile(){
|
||
|
let { newFileName, renameData, renameType } = this.data;
|
||
|
if(typeof(newFileName) == 'object'){
|
||
|
wx.showToast({
|
||
|
title: '请输入文件名!',
|
||
|
icon:'none'
|
||
|
})
|
||
|
return;
|
||
|
}
|
||
|
if(newFileName.trim() == ''){
|
||
|
wx.showToast({
|
||
|
title: '请输入文件名!',
|
||
|
icon:'none'
|
||
|
})
|
||
|
return;
|
||
|
}
|
||
|
let param = renameType != 1 ? {"busType": "document_cloud","directoryName": newFileName,directoryId:renameData.directoryId} : {"busType": "document_cloud",fileName:newFileName,fileId:renameData.fileId},
|
||
|
url = renameType != 1 ? URL.renameDirectory : URL.renameFile;
|
||
|
wx.showLoading({
|
||
|
title: '加载中…',
|
||
|
mask:true
|
||
|
})
|
||
|
req('POST',url,{},param,false).then(data=>{
|
||
|
wx.hideLoading();
|
||
|
wx.showToast({
|
||
|
title: '修改成功!',
|
||
|
icon:'none'
|
||
|
})
|
||
|
this.foldModal();
|
||
|
this.setData({currentPage:1})
|
||
|
this.getDirectoryList();
|
||
|
}).catch(err=>{
|
||
|
console.log(err)
|
||
|
wx.hideLoading();
|
||
|
wx.showToast({
|
||
|
title: '修改失败,请重试!',
|
||
|
icon:'none'
|
||
|
})
|
||
|
})
|
||
|
},
|
||
|
// 删除文件
|
||
|
deleteFile(e){
|
||
|
let { dataList } = this.data,param = {
|
||
|
busType:'document_cloud',
|
||
|
directoryIds:[],
|
||
|
fileIds:[]
|
||
|
},toastText = '确定要删除所选文件吗?';
|
||
|
dataList.directoryList.map(c=>c.checked ? param.directoryIds.push(c.directoryId):'');
|
||
|
dataList.fileList.map(c=> c.checked ? param.fileIds.push(c.fileId):'' );
|
||
|
if(param.directoryIds.length+param.fileIds.length == 0){
|
||
|
wx.showToast({
|
||
|
title: '请选择要删除的文件!',
|
||
|
icon:'none'
|
||
|
})
|
||
|
return;
|
||
|
}
|
||
|
if(param.directoryIds.length && !param.fileIds.length){
|
||
|
toastText = '确定要删除已选文件夹吗?文件夹内文件也会一并删除!';
|
||
|
}
|
||
|
if(param.directoryIds.length && param.fileIds.length){
|
||
|
toastText = '确定要删除已选文件和文件夹吗?文件夹内文件也会一并删除!'
|
||
|
}
|
||
|
wx.showModal({
|
||
|
title:'提示',
|
||
|
content:toastText,
|
||
|
success:res=>{
|
||
|
if(res.confirm){
|
||
|
req('POST',URL.delFile,{},param,false).then(data=>{
|
||
|
wx.showToast({
|
||
|
title: '删除成功!',
|
||
|
icon:'none'
|
||
|
})
|
||
|
this.setData({currentPage:1})
|
||
|
this.getDirectoryList();
|
||
|
this.cancelEdit();
|
||
|
}).catch(err=>{
|
||
|
this.cancelEdit();
|
||
|
wx.showToast({
|
||
|
title: err.message,
|
||
|
icon:'none'
|
||
|
})
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
},
|
||
|
returnUploadPath(data){
|
||
|
// let { modalFuns } = this.data;
|
||
|
// modalFuns[1].value = data.sourceName;
|
||
|
// let renameData = {
|
||
|
// fileId:data.commonSourceId
|
||
|
// }
|
||
|
// this.setData({modalFunIndex:1,renameData,renameType:1, modalFuns,showModal:true})
|
||
|
this.setData({currentPage:1})
|
||
|
this.getDirectoryList();
|
||
|
},
|
||
|
// 点击移动文件
|
||
|
moveFile(){
|
||
|
let { dataList } = this.data, moveNumber = 0, param = {
|
||
|
busType: "document_cloud",
|
||
|
directoryIds: [],
|
||
|
fileIds: [],
|
||
|
targetDirectoryId: ''
|
||
|
};
|
||
|
dataList.directoryList.map(c=>c.checked ? param.directoryIds.push(c.directoryId):'');
|
||
|
dataList.fileList.map(c=> c.checked ? param.fileIds.push(c.fileId):'' );
|
||
|
moveNumber = param.directoryIds.length + param.fileIds.length;
|
||
|
if(moveNumber < 1){
|
||
|
wx.showToast({
|
||
|
title: '请选择文件',
|
||
|
icon:'none'
|
||
|
})
|
||
|
return;
|
||
|
}
|
||
|
this.setData({showMoveFile:true,moveNumber,moveFileParam:param})
|
||
|
},
|
||
|
// 移动文件到文件夹
|
||
|
moveFileToFolder(directoryId){
|
||
|
let { moveFileParam } = this.data;
|
||
|
moveFileParam.targetDirectoryId = directoryId;
|
||
|
req('POST',URL.moveFile,{},moveFileParam,false).then(data=>{
|
||
|
wx.showToast({
|
||
|
title: '移动成功!',
|
||
|
icon:'none'
|
||
|
})
|
||
|
this.setData({showMoveFile:false,isEdit:false})
|
||
|
this.setData({currentPage:1})
|
||
|
this.getDirectoryList();
|
||
|
}).catch(err=>{
|
||
|
wx.showToast({
|
||
|
title: err.message,
|
||
|
icon:'none'
|
||
|
})
|
||
|
})
|
||
|
},
|
||
|
// 长按显示操作框
|
||
|
showEditActionSheet(e){
|
||
|
let { cate } = e.currentTarget.dataset,isOnlyShare = false;
|
||
|
console.log(e)
|
||
|
let itemList = cate == 'directoryList' ? ['重命名','移动至','删除'] : ['重命名','移动至','删除','分享']
|
||
|
let { isSchoolManager } = this.data;
|
||
|
if(!isSchoolManager){
|
||
|
if(cate == 'directoryList') return;
|
||
|
itemList = ['分享']
|
||
|
isOnlyShare = true;
|
||
|
}
|
||
|
wx.showActionSheet({
|
||
|
itemList,
|
||
|
success:res=>{
|
||
|
if(isOnlyShare) this[panelBar[3].fn]();
|
||
|
else this[panelBar[res.tapIndex].fn]();
|
||
|
},
|
||
|
fail:err=>{
|
||
|
console.log(err)
|
||
|
this.cancelEdit();
|
||
|
},
|
||
|
complete:res=>{
|
||
|
console.log(res)
|
||
|
}
|
||
|
})
|
||
|
},
|
||
|
// 显示分享框
|
||
|
showSharePanel(e){
|
||
|
this.setData({
|
||
|
'sharePanel.isShow':true
|
||
|
})
|
||
|
},
|
||
|
// 关闭分享框
|
||
|
onClose(e){
|
||
|
this.setData({
|
||
|
'sharePanel.isShow':false
|
||
|
})
|
||
|
this.cancelEdit();
|
||
|
},
|
||
|
// 点击分享选项
|
||
|
onSelect(e){
|
||
|
console.log(e)
|
||
|
if(e.detail.icon == 'link'){
|
||
|
let { dataList } = this.data;
|
||
|
let one = dataList.fileList.filter(c=>c.checked);
|
||
|
one = one[0];
|
||
|
let url = `${wx.getStorageSync('otherHttpsecondLevelDomain')}${one.downloadUrl}&tr=1`;
|
||
|
wx.setClipboardData({
|
||
|
data: url,
|
||
|
success:res=>{
|
||
|
wx.showToast({
|
||
|
title: '链接已复制,快去分享给朋友吧!',
|
||
|
icon:'none'
|
||
|
})
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
},
|
||
|
onShareAppMessage:function(e) {
|
||
|
console.log(e)
|
||
|
if(e.from === 'button'){
|
||
|
let param = this.getShareFileParam();
|
||
|
console.log(param)
|
||
|
this.setData({'sharePanel.isShow':false})
|
||
|
|
||
|
return param;
|
||
|
}
|
||
|
if(e.from === 'menu'){
|
||
|
let { hisImageUrl, otherVCardInfo, cardIdStr, visitingCardIdStr, navBar } = globalData,basePath = '';
|
||
|
basePath = '/pages/cardDetail/cardDetail'
|
||
|
let path = `${basePath}?sourceType=share&cardIdStr=${encodeURIComponent(cardIdStr)}&shareCardIdStr=${encodeURIComponent(visitingCardIdStr)}&serverName=${wx.getStorageSync('otherSecondLevelDomain')}`;
|
||
|
let title = otherVCardInfo.shareTitle || `这是我的电子名片,分享给您!`;
|
||
|
path = shareAddRetailParam(path)
|
||
|
path += `&sreId=${encodeURIComponent(this.newSreId)}&routeId=${this.newRouteId}`;
|
||
|
return {
|
||
|
path,
|
||
|
imageUrl:hisImageUrl,
|
||
|
title
|
||
|
}
|
||
|
}
|
||
|
|
||
|
},
|
||
|
|
||
|
getShareFileParam:function(e) {
|
||
|
let { dataList } = this.data;
|
||
|
let one = dataList.fileList.filter(c=>c.checked);
|
||
|
one = one[0];
|
||
|
console.log(one)
|
||
|
let path = `/packageB/pages/file-share/file-share?fileId=${one.fileId}&serverName=${wx.getStorageSync('otherSecondLevelDomain')}&cardIdStr=${encodeURIComponent(wx.getStorageSync('cardIdStr'))}`,
|
||
|
imageUrl = one.thumb,
|
||
|
title = one.fileName;
|
||
|
path = shareAddRetailParam(path)
|
||
|
// requestSreId(one.fileId).then(data=>{
|
||
|
// this.newSreId = data;
|
||
|
// addShareLog(title,25,one.fileId,'',1,3,this.newSreId,'');
|
||
|
// })
|
||
|
|
||
|
return { path, imageUrl, title }
|
||
|
},
|
||
|
showFileTypeSheet, showFilterTypeSheet, twoWayBinding,
|
||
|
choseFiles, choseImageConfirm, choseVideoConfirm, uploadLargeFile, choseFilesConfirm, initIconPath
|
||
|
})
|