systemAddin.js 7.4 KB
/*
 * @Descripttion: 
 * @version: 
 * @Author: 魏永康
 * @Date: 2021-04-20 16:18:53
 * @LastEditors: sueRimn
 * @LastEditTime: 2021-04-25 15:09:17
 */

import {GetDocParamsValue,UploadFile,OnUploadToServerSuccess,OnUploadToServerFail,OnShowDialog,InsertRedHeadDoc,DownloadFile} from "./common.js"
import {constStrEnum,EnumDocSaveFlag} from "./enum.js"

var wps = window.wps||window


// 初始化
 function initWpsAddin() {
    if(wps.FileSystem.Exists(wps.Env.GetTempPath())){
        wps.FileSystem.Remove(wps.Env.GetTempPath());
        wps.FileSystem.Mkdir(wps.Env.GetTempPath())
    }
}

// 保存
function OnSaveToServer() {
    // console.log('SaveToServer');
    var doc = wps.WpsApplication().ActiveDocument;
    if (!doc) {
        alert("空文档不能保存!");
        return;
    }

    var param = wps.PluginStorage.getItem(doc.DocID);

    if(typeof param == "string") param = JSON.parse(param);

    if(param == null || param.OADocLandMode === 0 ) {
        wps.WpsApplication().CommandBars.ExecuteMso("SaveAll");
        return;
    }



    
    let {tokenIdKey,nid,token,openUrl,writeUrl,fullName} = param;
    if(tokenIdKey == null ||nid == null || token == null || openUrl == null || writeUrl == null || fullName == null){
        alert("取参数失败,请确定此文档是OA文档,tokenIdKey,nid,token,openUrl,writeUrl,fullName 参数取值不可为空!")
    }


    // //非OA文档,不能上传到OA
    // if (pCheckIfOADoc() == false) {
    //     alert("非系统打开的文档,不能直接上传到系统!");
    //     return;
    // }

    // //如果是OA打开的文档,并且设置了保护的文档,则不能再上传到OA服务器
    // if (pISOADocReadOnly(doc)) {
    //     wps.alert("系统设置了保护的文档,不能再提交到系统后台。");
    //     return;
    // }

    /**
     * 参数定义:OAAsist.UploadFile(name, path, url, field,  "OnSuccess", "OnFail")
     * 上传一个文件到远程服务器。
     * name:为上传后的文件名称;
     * path:是文件绝对路径;
     * url:为上传地址;
     * field:为请求中name的值;
     * 最后两个参数为回调函数名称;
     */


    var l_showConfirm = wps.PluginStorage.getItem(constStrEnum.Save2OAShowConfirm)
    if (l_showConfirm) {
        if (!wps.confirm("先保存文档,并开始上传到系统后台,请确认?")) {
            return;
        }
    }

    var l_FieldName = GetDocParamsValue(doc, constStrEnum.uploadFieldName); //上载到后台的业务方自定义的字段名称
    if (l_FieldName == "") {
        l_FieldName = wps.PluginStorage.getItem(constStrEnum.DefaultUploadFieldName); // 默认为‘file’
    }

    var l_UploadName = GetDocParamsValue(doc, constStrEnum.uploadFileName); //设置OA传入的文件名称参数
    if (l_UploadName == "") {
        l_UploadName = doc.Name; //默认文件名称就是当前文件编辑名称
    }

    var docPath = doc.FullName; // 文件所在路径

    // if (pIsOnlineOADoc(doc) == false) {
        //对于本地磁盘文件上传OA,先用Save方法保存后,再上传
        //设置用户保存按钮标志,避免出现禁止OA文件保存的干扰信息
        wps.PluginStorage.setItem(constStrEnum.OADocUserSave, EnumDocSaveFlag.OADocSave);
        doc.Save(); //执行一次保存方法
        //设置用户保存按钮标志
        wps.PluginStorage.setItem(constStrEnum.OADocUserSave, EnumDocSaveFlag.NoneOADocSave);
        //落地文档,调用UploadFile方法上传到OA后台
        try {
            //调用OA助手的上传方法
            UploadFile(fullName, docPath, writeUrl, null,param, OnUploadToServerSuccess, OnUploadToServerFail);
        } catch (err) {
            alert("上传文件失败!请检查系统上传参数及网络环境!");
        }
    // } else {
    //     // 不落地的文档,调用 Document 对象的不落地上传方法
    //     wps.PluginStorage.setItem(constStrEnum.OADocUserSave, EnumDocSaveFlag.OADocSave);
    //     try {
    //         //调用不落地上传方法
    //         doc.SaveAsUrl(l_UploadName, l_uploadPath, l_FieldName, "OnUploadToServerSuccess", "OnUploadToServerFail");
    //     } catch (err) {
    //         alert("上传文件失败!请检查系统上传参数及网络环境,重新上传。");
    //     }
    //     wps.PluginStorage.setItem(constStrEnum.OADocUserSave, EnumDocSaveFlag.NoneOADocSave);
    // }

    // //获取OA传入的 转其他格式上传属性
    // var l_suffix = GetDocParamsValue(doc, constStrEnum.suffix);
    // if (l_suffix == "") {
    //     console.log("上传需转换的文件后缀名错误,无法进行转换上传!");
    //     return;
    // }

    //判断是否同时上传PDF等格式到OA后台
    var l_uploadWithAppendPath = GetDocParamsValue(doc, constStrEnum.uploadWithAppendPath); //标识是否同时上传suffix格式的文档
    if (l_uploadWithAppendPath == "1") {
        //调用转pdf格式函数,强制关闭转换修订痕迹,不弹出用户确认的对话框
        // pDoChangeToOtherDocFormat(doc, l_suffix, false, false);
    }
    return;
}

export function OnInsertRedHeaderClick() {
    var l_Doc = wps.WpsApplication().ActiveDocument;
    if (!l_Doc) {
        return;
    }
    var l_insertFileUrl = GetDocParamsValue(l_Doc, constStrEnum.insertFileUrl); //插入文件的位置
    var l_BkFile = GetDocParamsValue(l_Doc, constStrEnum.bkInsertFile);
    if (l_BkFile == "" || l_insertFileUrl == "") {
        var height = 250;
        var width = 400;
        OnShowDialog("redhead.html", "OA助手", width, height);
        return;
    }
    InsertRedHeadDoc(l_Doc);
}


function openWebFile(param){
    if(param == null) {
        return {code:-1,msg:"参数错误!"}
    }

    let {tokenIdKey,nid,token,openUrl,writeUrl,fullName} = param;

    if(tokenIdKey == null ||nid == null || token == null || openUrl == null || writeUrl == null || fullName == null){
        return {code:-1,msg:"参数错误!tokenIdKey,nid,token,openUrl,writeUrl,fullName 不可为空"}
    }

    let url = `${openUrl}?nid=${nid}&token=${token}`;

    DownloadFile(
        url,
        fullName,
        (path) => {
            let doc = wps
                .WpsApplication()
                .Documents.Open(path, false, false, false, "");

            if (!doc) return;
            var l_Param = wps.PluginStorage.getItem(doc.DocID);
            if(l_Param == null) {
                l_Param = param;
            }else if(typeof l_Param == "string"){
                l_Param = JSON.parse(l_Param);
            }
            //增加属性,或设置
            l_Param.OADocLandMode = 0; //设置OA文档的落地标志
            
            //将OA文档落地模式标志存入系统变量对象保存
            
            wps.PluginStorage.setItem(doc.DocID,JSON.stringify(param) );
            // 把WPS对象置前
            wps.WpsApplication().WindowState = 1;
            wps.WpsApplication().Activate();
        }
    );
}

export function onWebEvent(param){
    if(param == undefined || param.eventType == undefined){
        return {code:-1,msg:"无此类型!"}
    }

    let eventType = param.eventType;

    switch (eventType){
        case "openOfficeEidt":
           return openWebFile(param);
        break;

        default: 
            return {code:-1,msg:`无此类型【${eventType}】`}

    }

}

export default {onWebEvent,openWebFile,OnSaveToServer,initWpsAddin}