import{renderSize,timeFromNow,timeFormat,parseEmoji,booleanIsOnlyEmoji} from '../../utils/util'; import {req} from '../../utils/service'; import {URL} from '../../utils/config'; import {imageUrl} from '../../utils/image' import {choseFiles,choseImageConfirm,choseVideoConfirm,uploadLargeFile,choseFilesConfirm} from '../../utils/uploadFile'; import{initIconPath} from '../file/files-component/config' const {globalData} = getApp(); const DOMAIN = wx.getStorageSync('DOMAIN') Component({ properties:{ }, data: { systemInfo:wx.getSystemInfoSync(), tagStyle:{ img:'width:200px;' }, imageUrl, statusBarHeight:globalData.systemInfo.statusBarHeight, lang:globalData.lang, attributeShow:false, tabList:[{ name:'属性', show:true },{ name:'版本', show:true },{ name:'讨论', show:true },{ name:'动态', show:true } ], selectTabIndex:0, nowList:[ { image:'/images/operateMore/icon_file_lastopen.png', name:'打开', fn:'previewFile' }, { image:'/images/operateMore/icon_file_download.png', name:'下载', fn:'downloadFile' }, { image:'/images/list_icon/icon_file_del.png', name:'删除所有版本记录', fn:'deleteAllVersion' }, { name:'取消', fn:'onCloseShowMore' } ], oldList:[ { image:'/images/operateMore/icon_file_lastopen.png', name:'打开', fn:'previewFile' }, { image:'/images/operateMore/icon_file_download.png', name:'下载', fn:'downloadFile' }, { image:'/images/icons/set_version.png', name:'设置为当前版本', fn:'setVersion' }, { image:'/images/list_icon/icon_file_del.png', name:'删除该版本', fn:'deleteVersion' }, { image:'/images/icons/add_version_intro.png', name:'添加版本说明', fn:'showVersionIntro' }, { image:'/images/list_icon/icon_file_del.png', name:'删除所有版本记录', fn:'deleteAllVersion' }, { name:'取消', fn:'onCloseShowMore' } ], versionIndex:-1, trendsPage:1, versionPage:1, commentsPage:1, comments:'', }, lifetimes:{ ready(){ this.setData({ DOMAIN:wx.getStorageSync('DOMAIN'), }) } }, methods:{ getAttribute(param){ param.size = renderSize(param.size) let {tabList} = this.data,mineEdit = true,delOther = true,role = wx.getStorageSync('options').role let {systemInfo} = this.data,isCover = /jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg/.test(param.fileType)?true:false, scrollHeight = isCover?systemInfo.windowHeight - systemInfo.statusBarHeight - 400:systemInfo.windowHeight - systemInfo.statusBarHeight - 340 // console.log(systemInfo.statusBarHeight,scrollHeight) // console.log(role,param.auth) if(param.isFolder){ tabList[1].show = false } if(param.targetType==1){ tabList[3].show = role['explorer.view'] tabList[2].show = role['explorer.view'] mineEdit = role['explorer.edit'] delOther = role['explorer.edit'] }else{ if(param.auth.indexOf("13") == -1||!role['explorer.view']){ tabList[3].show = false } if(param.auth.indexOf("12") == -1||!role['explorer.view']){ tabList[2].show = false } if(param.auth.indexOf("8") == -1||!role['explorer.edit']||param.auth.indexOf("12") == -1){ mineEdit = false } if(param.auth.indexOf("14") == -1||!role['explorer.edit']){ delOther = false } } this.setData({ scrollHeight, attributeShow:true, dataList:param, sourceID:param.sourceID, isFolder:param.isFolder, tabList, isCover, mineEdit, delOther }) }, getHistory(param){ let DOMAIN = this.data.DOMAIN param.createUserJson.avatar = /http|https/.test(param.createUserJson.avatar) ? param.createUserJson.avatar : DOMAIN + param.createUserJson.avatar param.avatar = param.createUserJson.avatar this.setData({ sourceID:param.sourceID, parentID:param.parentID, name:param.name }) this.getHistoryList() }, updateHistory(){ this.getHistoryList() }, updateNewFile(){ let that = this,{sourceID,parentID,name,dataList} = this.data,itemList = ['视频','图片','文件'],type; const isVideo = /mp4|mpg|mpeg|dat|asf|avi|rm|rmvb|mov|wmv|flv|mkv|vob/, isImage = /jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg/, isFile = /pptx|ppt|xlsx|xls|doc|docx|pdf|wps/; if(isVideo.test(dataList.fileType)){ itemList = ['视频'] type = 1 }else if(isImage.test(dataList.fileType)){ itemList = ['图片'] type = 0 }else if(isFile.test(dataList.fileType)){ itemList = ['文件'] type = 2 }else{ itemList = ['文件'] type = 2 } wx.showActionSheet({ itemList:itemList, success(res){ if (res.tapIndex === 0){ that.addFiles(type,sourceID,parentID,name) }else if (res.tapIndex === 1){ that.addFiles(type,sourceID,parentID,name) }else if (res.tapIndex === 2){ that.addFiles(type,sourceID,parentID,name) } } }) }, addFiles(a,sourceID,parentID,name){ let index = a console.log(a) switch (index) { case 0: this.choseFiles('image', parentID,'cloud',sourceID,name); break; case 1: this.choseFiles('video', parentID,'cloud',sourceID,name); break; case 2: this.choseFiles('fiels', parentID,'cloud',sourceID,name); break; default: break; } }, //上传回调 returnUploadPath(data) { if(this.data.sourceID){ this.getHistoryList(); } }, getHistoryList(reachBottom=false){ let {dataList,sourceID,versionPage,DOMAIN} = this.data, param = { currentPage:versionPage, sourceID:sourceID, } req('GET', URL.getHistoryList,param, {}, false).then(data => { const isImage = /jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg/ data.current.createTime = timeFormat('yyyy/MM/dd hh:mm:ss',data.current.createTime*1000); data.current.avatar = data.current.avatar?(/http|https/.test(data.current.avatar) ? data.current.avatar : DOMAIN + data.current.avatar):'/images/icons/files_avatar.png' data.current.size = renderSize(data.current.size) let index = data.current.downloadUrl.lastIndexOf('.'); if (isImage.test(data.current.fileType)) data.current.thumb = `${data.current.downloadUrl.substring(0,index)}!small${data.current.downloadUrl.substring(index,data.current.downloadUrl.length)}`; if(data.current.thumb){ data.current.thumb = /http|https/.test(data.current.thumb) ? data.current.thumb : DOMAIN + data.current.thumb }else{ data.current.thumb = initIconPath(data.current.fileType) } data.fileList.map(c=>{ c.avatar = c.avatar?(/http|https/.test(c.avatar) ? c.avatar : DOMAIN + c.avatar):'/images/icons/files_avatar.png' c.downloadUrl = /http|https/.test(c.downloadUrl) ? c.downloadUrl : DOMAIN + c.downloadUrl c.createTime = timeFormat('yyyy/MM/dd hh:mm:ss',c.createTime*1000); c.size = renderSize(c.size) if(c.thumb){ c.thumb = /http|https/.test(c.thumb) ? c.thumb : DOMAIN + c.thumb }else{ c.thumb = initIconPath(c.fileType) } }) dataList.thumb = data.current.thumb this.setData({ fileList:data.current, historyList:reachBottom?[...this.data.historyList, ...data.fileList]:data.fileList, historyTotal:reachBottom?this.data.historyTotal:data.total, dataList }) }).catch(err => { console.log(err) wx.showToast({ title: err.message, icon: 'none' }) }) }, getTrends(reachBottom=false){ let {trendsPage,sourceID,isFolder,DOMAIN} = this.data req('GET', URL.getPathLog, {}, { currentPage:trendsPage, isFolder:isFolder, sourceID:sourceID, }, false).then(data => { // console.log(data.list) data.list.map(c=>{ c.avatar = c.avatar?(/http|https/.test(c.avatar) ? c.avatar : DOMAIN + c.avatar):'/images/icons/files_avatar.png' c.time = timeFromNow(c.createTime*1000) c.desc = JSON.parse(c.desc) if(c.type=='recycle'||c.type=='remove'){ c.thumb = '/images/trends_icon/del.png' }else if(c.type=='rename'){ c.thumb = '/images/icons/edit.png' }else if(c.type=='share'){ c.thumb = '/images/trends_icon/link.png' }else if(c.type=='create'){ if(c.desc.createType=='mkfile'||c.desc.createType=='copy'){ c.thumb = '/images/trends_icon/add.png' }else if(c.desc.createType=='upload'){ c.thumb = '/images/trends_icon/upload.png' }else{ c.thumb = '/images/icons/edit.png' } } if(isFolder){ if(c.type == 'recycle') { if(c.desc.content=='restore'){ c.content = '将'+c.name+'从回收站还原' }else if(c.desc.content=='toRecycle'){ c.content = '将'+c.name+'移到了回收站' } }else if(c.type == 'create') { if(c.desc.createType=='uploadNew'){ c.content = '更新了该文件(上传新版本)' }else if(c.desc.createType=='copy'){ c.content = '粘贴新建了'+c.name }else if(c.desc.createType=='upload'){ c.content = '上传了文件'+c.name }else{ c.content = '新建了文件'+c.name } }else if(c.type == 'share') { c.content = 'share' }else if(c.type == 'remove') { c.content = '在此处删除了文件'+c.desc.content }else if(c.type == 'rename') { c.content = '重命名了该文件夹'+c.desc.from+'为'+c.desc.to } }else{ if(c.type == 'recycle') { if(c.desc.content=='restore'){ c.content = '将该文件从回收站还原' }else if(c.desc.content=='toRecycle'){ c.content = '将该文件移到了回收站' } }else if(c.type == 'create') { if(c.desc.createType=='uploadNew'){ c.content = '更新了该文件(上传新版本)' }else{ c.content = '新建了该文件' } }else if(c.type == 'share') { if(c.desc.content=='shareLinkRemove'){ c.content = '关闭了该文件的外链分享' }else if(c.desc.content=='shareLinkEdit'){ c.content = '编辑了该文件的外链分享' }else{ c.content = '将该文件创建了外链分享' } }else if(c.type == 'remove') { c.content = '在此处删除了文件'+c.desc.content }else if(c.type == 'rename') { c.content = '重命名了该文件'+c.desc.from+'为'+c.desc.to } } }) this.setData({ trendsList:reachBottom?[...this.data.trendsList, ...data.list]:data.list, trendsTotal:reachBottom?this.data.trendsTotal:data.total }) }).catch(err => { console.log(err) wx.showToast({ title: err.message, icon: 'none' }) }) }, getComments(reachBottom=false){ let {commentsPage,sourceID,DOMAIN} = this.data req('GET', URL.getComments, {}, { currentPage:commentsPage, pageSize: 40, targetID: sourceID }, false).then(data => { data.list.map(c=>{ c.avatar = c.avatar?(/http|https/.test(c.avatar) ? c.avatar : DOMAIN + c.avatar):'/images/icons/files_avatar.png' c.isMine = c.userID==wx.getStorageSync('userID')?true:false; const regex = new RegExp('src="', 'gi'); c.content = c.content.replace(regex, 'src="'+DOMAIN); // c.content = c.content.replace(/\ { console.log(err) wx.showToast({ title: err.message, icon: 'none' }) }) }, imgtap(e){ if(e.detail.src.split('.cn')[0]=='https://test-static.1x'){ return } let content = this.data.commentsList let imgarr = [],text = ''; let regex = new RegExp(/|\/>)/gi); // 匹配所有图片 let srcReg = /src=[\'\"]?([^\'\"]*)[\'\"]?/i; // 匹配src图片 content.map(c=>{ text+=c.content }) let arrsImg = text.match(regex); // obj.info 后台返回的富文本数据 for (let a = 0; a < arrsImg.length; a++) { let srcs = arrsImg[a].match(srcReg); if(srcs[1].split('.cn')[0]!='https://test-static.1x'){ imgarr.push(srcs[1]) } } wx.previewImage({ current:e.detail.src, urls: imgarr }) }, inputValue(e){ let {value} = e.detail this.setData({ comments:value }) }, // 表情 foldEmoji:function(e){ let flag = !this.data.showEmoji this.setData({ showEmoji:flag, fixedBottom:flag ? 421.42 : 120, }) if(flag){ wx.hideKeyboard({ success: (res) => {}, }) } }, // 选择表情 changeEmoji:function(e){ let { value } = e.detail, { comments } = this.data; comments += value; this.setData({comments}) }, delEmoji:function(e){ let { comments } = this.data; if(comments.length){ comments = comments.substring(0,comments.length-1); this.setData({comments}) } }, showDel(e){ let {id} = e.currentTarget.dataset,that = this wx.showActionSheet({ itemList:['删除'], success(res){ if (res.tapIndex === 0){ wx.showModal({ title: '确定要删除吗?', complete: (res) => { if (res.confirm) { req('POST', URL.delComment, {}, { commentID: id }, false).then(data => { that.setData({ commentsPage:1, showEmoji:false, }) wx.showToast({ title: '删除成功', icon: 'none' }) that.getComments() }).catch(err => { console.log(err) wx.showToast({ title: err.message, icon: 'none' }) }) } } }) } } }) }, showPicture(){ this.triggerEvent("choosePicture",{type:'comment'}) }, confirmPicture(path){ this.setData({ comments:'' }) this.sendComent() }, sendComent(){ let {comments,sourceID} = this.data,regu =/^[ ]+$/ if(comments==''||regu.test(comments)){ wx.showToast({ title: '请输入评论内容', icon:'none' }) return } req('POST', URL.saveComment, {}, { content:comments, targetID: sourceID }, false).then(data => { this.setData({ comments:'', commentsPage:1, showEmoji:false, }) wx.showToast({ title: '发送成功', icon: 'none' }) this.getComments() }).catch(err => { console.log(err) wx.showToast({ title: err.message, icon: 'none' }) }) }, selectTab(e){ let {index} = e.currentTarget.dataset this.setData({ selectTabIndex:index, moreShow:false }) }, onClose(){ this.setData({ attributeShow:false, moreShow:false, selectTabIndex:0, trendsPage:1, versionPage:1, commentsPage:1 }) }, addDesc(e){ this.triggerEvent("onAddDesc",{desc:e.detail.value,sourceID:this.data.dataList.sourceID}) }, showMore(e){ this.onCloseShowMore() let {type} = e.currentTarget.dataset,moreList = [],index if(type==0){ moreList = this.data.nowList }else{ moreList = this.data.oldList index = e.currentTarget.dataset.index } this.setData({ moreList, version:type==0?this.data.fileList:this.data.historyList[index], versionIndex:index }) }, onCloseShowMore(){ this.setData({ moreShow:!this.data.moreShow }) }, //添加版本说明 showVersionIntro(){ let {historyList,versionIndex} = this.data historyList.map(c=>{c.show=false}) historyList[versionIndex].show=true this.setData({ historyList, moreShow:false }) }, setVersionIntro(e){ let {value} = e.detail,{sourceID} = this.data,{id} = e.currentTarget.dataset let param = { detail:value, id: id } req('POST',URL.setVersionIntro,{},param,false).then(data => { wx.showToast({ title: '操作成功', }) this.getHistoryList() }) }, clearVersionIntro(e){ let {sourceID} = this.data,{id} = e.currentTarget.dataset let param = { detail:'', id: id } req('POST',URL.setVersionIntro,{},param,false).then(data => { wx.showToast({ title: '操作成功', }) this.getHistoryList() }) }, //刷新文件列表 setVersionReturn(){ this.triggerEvent('setVersionReturn') }, //设置为当前版本 setVersion(){ let {version,sourceID} = this.data wx.showModal({ title: '提示', content: '确定要回滚到该版本?', success: res => { if (res.confirm) { req('POST',URL.setVersion,{},{id: version.id},false).then(data => { wx.showToast({ title: '操作成功', }) this.getHistoryList() this.onCloseShowMore(); this.setVersionReturn() }) } } }) }, //删除该版本 deleteVersion(){ let {version,sourceID} = this.data wx.showModal({ title: '提示', content: '确定要删除该版本?', success: res => { if (res.confirm) { req('POST',URL.deleteVersion,{},{id: version.id},false).then(data => { wx.showToast({ title: '删除成功', }) this.getHistoryList() this.onCloseShowMore(); this.setVersionReturn() }) } } }) }, // 预览文件 previewFile(e) { let {sourceID,version} = this.data,previewUrl,fileType; version.downloadUrl = /http|https/.test(version.downloadUrl) ? version.downloadUrl : DOMAIN + version.downloadUrl // wx.showLoading({ // title: '加载中…', // mask: true // }) this.onCloseShowMore(); const isVideo = /mp4|mpg|mpeg|dat|asf|avi|rm|rmvb|mov|wmv|flv|mkv|vob/, isAudio = /ram|swf|mp3|wma/, isImage = /jpeg|jpg|gif|png|webp|jfif|bmp|dpg/, isFile = /pptx|ppt|xlsx|xls|doc|docx|pdf|wps/; if (isImage.test(version.fileType)) { wx.previewImage({ urls: [`${version.downloadUrl}`], }) return; } if (isFile.test(version.fileType)) { previewUrl = version.pptPreviewUrl; fileType = 1; } else if (isVideo.test(version.fileType)) { if (version.downloadUrl) previewUrl = /http|https/.test(version.downloadUrl) ? version.downloadUrl :DOMAIN + version.downloadUrl; fileType = 2; } else if (isAudio.test(version.fileType)) { if (version.downloadUrl) previewUrl = /http|https/.test(version.downloadUrl) ? version.downloadUrl :DOMAIN + version.downloadUrl; fileType = 3; }else{ wx.showToast({ title: '该文件不支持预览!', icon: 'none' }) return; } // if (!version.fileType || ['txt', 'rar', 'zip', '7z', 'gz', 'apk','tar'].includes(version.fileType)) { // wx.showToast({ // title: '该文件不支持预览!', // icon: 'none' // }) // return; // } wx.setStorageSync('previewUrl', previewUrl) wx.navigateTo({ url: `/pages/files-preview/files-preview?sourceID=${sourceID}&fileType=${fileType}`, }) }, //下载文件 downloadFile(e){ let {version,sourceID} = this.data if(/jpeg|jpg|gif|png|webp|jfif|bmp|dpg/.test(version.fileType)){ this.downloadImage(version.downloadUrl) }else if(/mp4|mpg|mpeg|dat|asf|avi|rm|rmvb|mov|wmv|flv|mkv/.test(version.fileType)){ req('GET',URL.getPreviewInfo, { busType: 'cloud', sourceID: sourceID }, {}, false).then(data => { if (data.downloadUrl) data.downloadUrl = /http|https/.test(data.downloadUrl) ? data.downloadUrl :DOMAIN + data.downloadUrl; this.downloadVideo(data.downloadUrl,data.name) }) }else if(/pptx|ppt|xlsx|xls|doc|docx|pdf|wps/.test(version.fileType)){ req('GET',URL.getPreviewInfo, { busType: 'cloud', sourceID: sourceID }, {}, false).then(data => { if (data.downloadUrl) data.downloadUrl = /http|https/.test(data.downloadUrl) ? data.downloadUrl :DOMAIN + data.downloadUrl; this.downloadFileOpen(data.downloadUrl) }) }else{ wx.showToast({ title: '暂不支持下载', icon:'none' }) } }, //下载图片 downloadImage(imageUrl){ let that = this var fileN=new Date().valueOf(); var fileP = wx.env.USER_DATA_PATH+'/'+fileN+'.jpg' wx.downloadFile({ url:imageUrl, filePath:fileP,//这里要加这个filePath属性 success:(res)=>{ var filePath = res.filePath; wx.saveImageToPhotosAlbum({ filePath, success:(res)=>{ wx.showToast({title: '保存到相册成功'}); that.onCloseShowMore(); } }) } }) }, //下载视频 downloadVideo(videoUrl,fileName){ let that = this wx.showLoading({ title: '下载中...', }) wx.downloadFile({ url: videoUrl, // 视频资源地址 filePath: wx.env.USER_DATA_PATH + '/' + fileName + '.mp4', header: { "Content-Type":"video/mp4" }, success: res => { wx.hideLoading() let FilePath= res.filePath; // 下载到本地获取临时路径 let fileManager = wx.getFileSystemManager(); // 保存到相册 wx.saveVideoToPhotosAlbum({ // 保存到相册 filePath: FilePath, success: file => { // console.log('saveVideoToPhotosAlbum成功回调file:', file) wx.showToast({ title: '视频保存成功', icon:'none' }) fileManager.unlink({ // 删除临时文件 filePath: wx.env.USER_DATA_PATH + '/' + fileName + '.mp4', }) that.onCloseShowMore(); }, fail: err => { // console.log('saveVideoToPhotosAlbum失败回调err:', err) fileManager.unlink({ // 删除临时文件 filePath: wx.env.USER_DATA_PATH + '/' + fileName + '.mp4' }) wx.showToast({ title: '视频保存失败', icon:'none' }) }, complete() { wx.hideLoading() } }) // }, fail(e) { console.log('失败e', e) wx.showToast({ title: '视频保存失败1', }) }, complete() { // wx.hideLoading(); } }) }, //下载文档 downloadFileOpen(fileUrl){ let that = this wx.downloadFile({ url: fileUrl, success (res) { if (res.statusCode === 200) { console.log(res) const filePath = res.tempFilePath wx.openDocument({ filePath: filePath, showMenu:true, //关键点 success: function (res) { wx.showToast({ title: '打开文档成功', }) that.onCloseShowMore(); } }) } } }) }, //删除所有版本 deleteAllVersion(){ let {sourceID} = this.data wx.showModal({ title: '提示', content: '确定删除所有历史版本记录?', success: res => { if (res.confirm) { req('POST',URL.deleteVersion,{},{sourceID: sourceID},false).then(data => { wx.showToast({ title: '删除成功', }) this.getHistoryList() this.onCloseShowMore(); }) } } }) }, onReachBottom(e){ let {type} = e.currentTarget.dataset,{trendsPage,versionPage,commentsPage} = this.data if(type==1){ trendsPage++ this.setData({ trendsPage:trendsPage }) this.getTrends(true) }else if(type==0){ versionPage++ this.setData({ versionPage:versionPage }) this.getHistoryList(true) }else{ commentsPage++ this.setData({ commentsPage:commentsPage }) this.getComments(true) } }, choseFiles,choseImageConfirm,choseVideoConfirm,uploadLargeFile,choseFilesConfirm,initIconPath }, })