/**/
let attr = {
copyCut:{}
}
export default {
template: `
`,
props: [],
data(){
return {
rightMenu:{
menus:[
{icon:"fa-folder-open",name:"打开",action:"open",show:true},
{icon:"fa-edit",name:"编辑",action:"edit",show:true},
{icon:"fa-object-ungroup",name:"批量添加到",action:"addAll",show:true,children:[]},
{icon:"fa-upload",name:"上传",action:"upload",show:true,children:[
{name:"上传文件夹",action:"newFolderUpload",show:true,iconUrl:"modules/win11/imgs/folder-sm.png"},
{name:"上传文件",action:"newFileUpload",show:true,iconUrl: "imgs/file_icon/txt.png"}
]},
{icon:"fa-download",name:"下载",action:"download",show:true},
{icon:"fa-share-alt",name:"共享",action:"share",show:true},
{icon:"fa-sign-in",name:"打开方式",action:"openWith",show:true,children:[]},
{isHr:true,show:true},
{icon:"fa-file-archive-o",name:"添加到\"压缩文件.zip\"",action:"addzip",show:true},
{icon:"fa-inbox",name:"解压到当前文件夹",action:"subzipc",show:true},
{isHr:true,show:true},
{icon:"fa-th-large",name:"查看",show:true,action:"view",children:[
{name:"大图标",action:"largeIcon",type:"dotIcon"},
{name:"中等图标",action:"mediumIcon",type:"dotIcon"},
{name:"小图标",action:"smallIcon",type:"dotIcon"},
{isHr:true},
{name:"显示桌面图标",action:"showIcon",type:"checkIcon"}
]},{icon:"fa-scissors",name:"排序方式",action:"sortby",show:true,children:[
{name:"名称",action:"sortName",type:"dotIcon"},
{name:"大小",action:"sortSize",type:"dotIcon"},
{name:"修改日期",action:"sortDate",type:"dotIcon"}
]},{icon:"fa-refresh",name:"刷新",action:"refresh"},
{isHr:true,show:true},
{icon:"fa-plus",name:"新建",show:true,action:"new",children:[]},
{isHr:true,show:true},
{icon:"fa-scissors",name:"剪切",action:"cut",show:true},
{icon:"fa-copy",name:"复制",action:"copy",show:false},
{icon:"fa-clipboard",name:"粘贴",action:"paste",show:true},
{isHr:true,show:true},
{icon:"fa-trash",name:"删除",action:"remove",show:true},
{icon:"fa-reply",name:"恢复",action:"restore",show:true},
{icon:"fa-trash",name:"彻底删除",action:"removeRecycle",show:true},
{icon:"fa-trash",name:"清空回收站",action:"clearRecycle",show:true},
{icon:"fa-i-cursor",name:"重命名",action:"rename",show:true},
{isHr:true,show:true},
{icon:"fa-magic",name:"个性化",action:"theme",show:true},
{icon:"fa-info",name:"属性",action:"prop",show:true},
{icon:"fa-expand",name:"全屏模式",action:"fullscreen",show:true},
{icon:"fa-compress",name:"退出全屏",action:"exitFullscreen",show:true},
{icon:"fa-comment-o",name:"意见反馈",action:"feedback",show:true},
],
checkMap:{},
show:false,
position:{
left:0,
top:0
}
}
}
},
methods: {
toUploadCommon:function (refs,pathField){
var that = this;
var fileList = that.$refs[refs].files;
var files = [];
for (let i = 0; i < fileList.length; i++) {
files.push(fileList[i]);
}
that.$refs[refs].value = "";
var groupId = utils.uuid();
var parentPath = attr.selectData.parentPath;
var parentTitle = attr.selectData.parentTitle;
var app = webos.el.findParentComponent(that,"app-component");
var desktop = app.$refs['desktop'];
for (let i = 0; i < files.length; i++) {
var file = files[i];
webos.fileSystem.addUploadFile({
file:file,
fullPath:"/"+file[pathField],
path:parentPath,
pathName:parentTitle,
sourceName:"本地",
callback:desktop.uploadFileCallback,
groupId:groupId
});
}
},
toUploadDir:function (){
this.toUploadCommon("upload-dir","webkitRelativePath");
},
toUploadFile:function (){
this.toUploadCommon("upload-file","name");
},
getSelectType:function (target){
var ele = webos.el.isInClass(target,"webos-file-panel");
//-1未选择,不在面板,0未选择,在面板,1单选文件,2.单选文件夹,3.同类文件多选,4,不同类多选(文件,文件夹)
var data = {selectType:-1}
if(!ele){
return data;
};
data.panel = ele;
data.parentPath = ele.dataset.path;
data.parentTitle = ele.dataset.title;
var eles = ele.querySelectorAll(".select.webos-file");
if(eles.length == 0){
data.selectType = 0;
return data;
};
data.fileEles = eles;
var files = [];
for (let i = 0; i < eles.length; i++) {
var tmp = eles[i];
var file = {
path:tmp.dataset.path,
type:tmp.dataset.type,
name:tmp.dataset.name,
icon:tmp.dataset.icon
};
file.ext = file.type=="2"?"":webos.util.getExtByName(file.name);
files.push(file);
};
data.files = files;
if(eles.length == 1){
data.selectType = data.files[0].type == "2"?2:1;
return data;
};
var tl = true;
var ext = data.files[0].ext;
for(let i=0;idocument.body.clientWidth/2+100){
left = left - 311;
}
if(left>document.body.clientWidth-311){
left = document.body.clientWidth-311;
}
var top = e.clientY;
that.$nextTick(function (){
if(top>document.body.clientHeight/2){
var actmenu = document.querySelector(".right-menu-component");
top = top - actmenu.offsetHeight;
}
that.rightMenu.position.left = left;
that.rightMenu.position.top = top;
that.rightMenu.show = true;
});
},
init:async function(){
var that = this;
//右键配置
var rightMenuConfig = await webos.softUserData.syncObject("settings_right_menu");
if(rightMenuConfig.largeIcon === undefined){
rightMenuConfig = {"largeIcon":false,"mediumIcon":true,"smallIcon":false,"showIcon":true,"sortName":"asc","sortSize":false,"sortDate":false};
}
that.setConfig(rightMenuConfig,false);
var hasLogin = await webos.user.hasLogin();
if(!hasLogin){
return;
};
var addall = [];
var openwith = [];
var newsz = [];
var newList = [
{name:"文件夹",action:"newFolder",show:true,iconUrl:"modules/win11/imgs/folder-sm.png"},
{name:"文本文档",action:"newText",show:true,iconUrl: "imgs/file_icon/txt.png"}
];
var list = await webos.ioFileAss.list();
if(list){
for (let i = 0; i < list.length; i++) {
var one = list[i];
var menu = {name:one.actionName,action:"addAllExt",iconUrl:one.iconUrl,ext:one.ext,url:one.url,show:true,appName:one.appName,expAction:one.expAction};
if(one.action == "addall"){
menu.action = "addAllExt";
addall.push(menu);
}else if(one.action == "openwith"){
menu.action = "openWithExt";
openwith.push(menu);
}else if(one.action == "new"){
menu.action = "newExt";
newsz.push(menu);
}
}
};
that.rightMenu.menus.forEach(function (item){
if(item.action == "openWith"){
item.children = [];
item.children = item.children.concat(openwith);
}else if(item.action == "addAll"){
item.children = [];
item.children = item.children.concat(addall);
}else if(item.action == "new"){
item.children = newList;
item.children = item.children.concat(newsz);
}
})
},
desktopTzCopy:async function (files,e){
const that = this;
attr.selectData = that.getSelectType(e.target);
attr.copyCut.files = files;
if(attr.copyCut.files.length>0){
attr.copyCut.has = true;
attr.copyCut.type = "copy";
attr.copyCut.parentPath = webos.util.getParentPath(files[0].path);
}
await this.menuAction(e,{action:"paste"});
},
menuAction:async function (e,menu){
var that = this;
var app = webos.el.findParentComponent(that,"app-component");
let desktop = app.$refs['desktop'];
let fileExplorer = null;
if(attr.selectData.panel.classList.contains("file-explorer")){
var wins = desktop.$refs["wins_dialog"];
var ele = webos.el.isInClass(attr.selectData.panel,"file-explorer-component");
var winId = ele.id;
for (let i = 0; i < wins.length; i++) {
var win = wins[i];
if(win.$props["win"].id == winId){
fileExplorer = win.$refs["appComponent"];
break;
}
}
}
if(["addAll","openWith","new","view","sortby","upload"].includes(menu.action)){
return;
}else if(["cut","copy"].includes(menu.action)){
attr.copyCut.files = attr.selectData.files;
if(attr.copyCut.files.length>0){
attr.copyCut.has = true;
attr.copyCut.type = menu.action;
attr.copyCut.parentPath = attr.selectData.parentPath;
}
}else if(menu.action == "paste"){
if(!attr.copyCut.has){
webos.message.error("请选择文件后操作");
return;
}
attr.copyCut.has = false;
const parentPath = attr.selectData.parentPath;
var func = "";
let title = "";
if(attr.copyCut.type == "cut"){
//移动
func = "move";
title = "移动";
}else if(attr.copyCut.type == "copy"){
//复制
func = "copy";
title = "复制";
}else{
webos.message.error("暂不支持此操作");
return;
}
if(parentPath == attr.copyCut.parentPath){
if(func == "move"){
webos.message.error("移动必须在不同的目录");
return;
}
}
let files = attr.copyCut.files;
if(fileExplorer){
fileExplorer.fileExplorerLoading(true);
}
let sourceParent = "";
const sourceChildren = [];
const sourceTypes = [];
for (let i = 0; i < files.length; i++) {
let tmpSz = files[i].path.split("/");
sourceChildren.push(tmpSz[tmpSz.length-1]);
sourceTypes.push(files[i].type*1);
if(i == 0){
tmpSz.length = tmpSz.length - 1;
sourceParent = tmpSz.join("/");
}
}
let data = await webos.fileSystem[func]({"sourceParent":sourceParent,"sourceChildren":sourceChildren,"sourceTypes":sourceTypes,"target":parentPath});
if(fileExplorer){
fileExplorer.fileExplorerLoading(false);
}
let fileName = "";
if(files.length == 1){
fileName = files[0].name;
}else if(files.length > 1){
fileName = files.length+"个项目";
}
if(!data || data == "0"){
webos.message.error(fileName+title+"失败");
if(fileExplorer){
fileExplorer.fileListAction(parentPath);
}else{
desktop.refreshDesktop();
}
return;
}
if(data == "1"){
webos.message.success(fileName+title+"成功");
if(fileExplorer){
fileExplorer.fileListAction(parentPath);
}else{
desktop.refreshDesktop();
}
return;
}
const taskId = data;
let errorTimes = 0;
const task = {
id:taskId,
groupId:taskId,
canInterrupt:false,
cancelType:1,
taskType:func
}
let hasUpload = false;
let confirmIng = false;
const serverAction = setInterval(async function () {
if(confirmIng){
return;
}
var taskData = await webos.fileSystem.serverJd(taskId);
if(!taskData){
errorTimes++;
if(errorTimes>20){
clearInterval(serverAction);
}
return;
}
//sourceName,sd,jd,loaded,size,status,exp,targetName,currentFileName
for(var key in taskData){
if(key == "targetName"){
continue;
}
if(key == "currentFileName"){
continue;
}
if(key == "exp"){
continue;
}
task[key] = taskData[key];
}
task.status = hasUpload?1:0;
task.pathName = taskData.targetName;
task.name = taskData.currentFileName;
task.methodName = title;
await desktop.uploadFileCallback(task);
hasUpload = true;
if(taskData.status == 2 || taskData.status == 3){
task.status = 2;
await desktop.uploadFileCallback(task);
if(taskData.status == 3){
webos.message.error(task.sourceName+title+"部分失败,请手动检查");
}
clearInterval(serverAction);
//刷新目录
if(fileExplorer){
fileExplorer.fileListAction(parentPath);
}else{
desktop.refreshDesktop();
}
}else if(taskData.status == 4){
//前端实现
let expData = JSON.parse(taskData.exp);
if(expData.type == "2"){
//前端复制
confirmIng = true;
if(fileExplorer){
fileExplorer.fileListAction(parentPath);
}else{
desktop.refreshDesktop();
}
utils.$.confirm("检测到"+expData.files.length+"个文件无法秒传,建议选用浏览器传输,是否继续?
确定:则选用浏览器传输(推荐)
取消:则继续采用服务器传输(不推荐)
",async function (flag){
if(flag){
//前端传输,先中断数据
task.status = 5;
await desktop.uploadFileCallback(task);
clearInterval(serverAction);
webos.fileSystem.webCrossCopy(expData.files,task.sourceName,taskData.targetName,desktop.uploadFileCallback);
}else{
//服务器传输,进行确认
var flag2 = await webos.fileSystem.serverConfirm(taskId);
if(!flag2){
webos.message.error(webos.context.get("lastErrorReqMsg"));
task.status = 5;
await desktop.uploadFileCallback(task);
clearInterval(serverAction);
}
}
confirmIng = false;
});
}else{
task.status = 5;
await desktop.uploadFileCallback(task);
clearInterval(serverAction);
}
}
},1000);
if(fileExplorer){
fileExplorer.fileListAction(parentPath);
}else{
desktop.refreshDesktop();
}
}else if(menu.action == "refresh"){
//刷新
if(menu.allFilePanel){
desktop.refreshDesktop();
var wins = desktop.$refs["wins_dialog"];
if(wins){
for (let i = 0; i < wins.length; i++) {
var win = wins[i];
var tmpApp = win.$refs["appComponent"];
if(!tmpApp){
continue;
}
if(!tmpApp.fileListAction){
continue;
}
tmpApp.fileListAction(tmpApp.$data.dataPath);
}
}
}else{
if(fileExplorer){
fileExplorer.fileListAction(attr.selectData.parentPath);
}else{
desktop.refreshDesktop();
}
}
}else if(["fullscreen","exitFullscreen"].includes(menu.action)){
webos.util.fullScreen(menu.action == "fullscreen");
}else if(["feedback"].includes(menu.action)){
var a = document.createElement("a");
a.href = "https://support.qq.com/product/464670";
a.target = "_blank";
a.click();
}else if(menu.action == "addAllExt"){
//批量添加到
var url = menu.url;
var flag = await webos.util.setBigData("addAllFiles",attr.selectData.files);
if(!flag){
webos.message.error("批量添加失败");
return;
}
desktop.openFile(url+"?action=addall&expAction="+menu.expAction,4,menu.appName,menu.iconUrl);
}else if(menu.action == "openWithExt"){
//更换打开方式
var file = attr.selectData.files[0];
var fileUrl = await webos.fileSystem.zl(file.path);
var url = menu.url+"?action=openwith&expAction="+menu.expAction+"&url="+encodeURIComponent(fileUrl)+"&ext="+encodeURIComponent(file.ext)+"&fname="+encodeURIComponent(file.name)+"&path="+encodeURIComponent(file.path)+"&icon="+encodeURIComponent(file.icon);
desktop.openFile(url,4,menu.appName,menu.iconUrl);
}else if(menu.action == "open" || menu.action == "edit"){
var file = attr.selectData.files[0];
if(fileExplorer && attr.selectData.selectType == 2){
//窗口中打开文件夹
fileExplorer.fileListAction(file.path);
}else{
//桌面打开文件或者文件夹
desktop.openFile(file.path,attr.selectData.selectType,file.name,"",menu.action);
}
}else if(menu.action == "newFolder"){
var parentPath = attr.selectData.parentPath;
var files;
if(fileExplorer){
files = fileExplorer.contentFiles;
}else{
files = desktop.files;
}
var getNewMainName = function (name,index,files){
var has = false;
var tmpName = name + "("+index+")";
if(index === 0){
tmpName = name;
}
for(let i=0; i