// 打印前监听事件 function OnDocumentBeforePrint(doc) { return } //切换窗口时触发的事件 function OnWindowActivate() { var l_doc = wps.WpsApplication().ActiveDocument SetCurrDocEnvProp(l_doc) // 设置当前文档对应的用户名 // showOATab(); // 根据文件是否为OA文件来显示OA菜单再进行刷新按钮 if (pCheckIfOADoc()) { setTimeout(activeTab, 500) // 激活页面必须要页签显示出来,所以做0.5秒延迟 wps .WpsApplication() .CommandBars.ExecuteMso('KsoEx_RevisionCommentModify_Disable') // wps.WpsApplication().ActiveDocument.ActiveWindow.ActivePane.View.RevisionsMode = // GetDocParamsValue(l_doc, 'RevisionsMode') //不允许另存为 if (GetDocParamsValue(l_doc, 'Persist') == true) { wps.Application.CommandBars.SetEnabledMso('FileSaveAsMenu', true) wps.Application.CommandBars.SetEnabledMso('FileSaveAs', true) } else { wps.Application.CommandBars.SetEnabledMso('FileSaveAsMenu', false) wps.Application.CommandBars.SetEnabledMso('FileSaveAs', false) } } else { // wps // .WpsApplication() // .CommandBars.ExecuteMso('KsoEx_RevisionCommentModify_Enable') // wps.WpsApplication().ActiveDocument.ActiveWindow.ActivePane.View.RevisionsMode = 1 wps .WpsApplication() .CommandBars.ExecuteMso('KsoEx_RevisionCommentModify_Enable') wps.Application.CommandBars.SetEnabledMso('FileSaveAsMenu', true) wps.Application.CommandBars.SetEnabledMso('FileSaveAs', true) } return } /** * 作用:判断OA文档是否被另存为了 */ function CheckIfOADocSaveAs(doc) { if (!doc) { return } // 获取OA文档的原始保存路径 var l_Path = GetDocParamsValue(doc, constStrEnum.SourcePath) // 原路径和当前文件的路径对比 return l_Path == doc.FullName } // 当文件保存前触发的事件 function OnDocumentBeforeSave(doc) { //设置变量,判断是否当前用户按了自定义的OA文件保存按钮 var l_IsOADocButtonSave = false l_IsOADocButtonSave = wps.PluginStorage.getItem(constStrEnum.OADocUserSave) //根据传入参数判断当前文档是否能另存为,默认不能另存为 if (pCheckCurrOADocCanSaveAs(doc) == false) { //先根据OA助手的默认设置判断是否允许OA文档另存为操作 //0.如果配置文件:OA文档不允许另存为,则再判断 //1.先判断是否是在线文档且是通过WPS自身按钮或快捷键保存,则取消弹出另存到本地的弹出框 if (pIsOnlineOADoc(doc) == true && l_IsOADocButtonSave == false) { alert('来自OA的不落地文档,禁止另存为本地文档!') //如果是OA文档,则禁止另存为 wps.ApiEvent.Cancel = true } //2.如果是落地打开的OA文档并且通过WPS自身按钮或者快捷键保存,则执行保存到本地临时目录,取消弹出对话框 if (pIsOnlineOADoc(doc) == false && l_IsOADocButtonSave == false) { //用户手动另存为操作时,在这里被屏蔽掉 doc.Save() //如果是OA文档,则禁止另存为 //wps.ApiEvent.Cancel = true; } } //保存文档后,也要刷新一下Ribbon按钮的状态 showOATab() // return; return false } //文档保存前关闭事件 /** * 作用: * @param {*} doc */ function OnDocumentBeforeClose(doc) { loginfo('用户点击关闭') var l_bIsOADoc = false l_bIsOADoc = CheckIfDocIsOADoc(doc) //判断是否OA文档要关闭 if (l_bIsOADoc == false) { // 非OA文档不做处理 return } if (!Heart.GetCurrentDocs()[GetUniqueId(doc)]) { return } //强制取消保存,并执行OA逻辑 wps.ApiEvent.Cancel = true //只读文档 var docparams = GetDocParamsValues(doc) if ( doc.ProtectionType == WdProtectionType.wdAllowOnlyFormFields || doc.ProtectionType == WdProtectionType.wdAllowOnlyReading || docparams.action == 'convertpdf' || docparams.action == 'convertofd' || docparams.action == 'printdocument' || docparams.action == 'saveAs' ) { clearWaterMark(doc, docparams) loginfo(`文件[${doc.Name}] ${docparams.action} 关闭不上传`) setTimeout(function () { Heart.CloseOADocument(doc) doc.Close() }, 100) return } if ( doc.Saved == true && doc.CurrentRsid == docparams[constStrEnum.OriginalRsid] ) { //无任何修改 loginfo(`文件[${doc.Name}] 无修改 关闭不上传`) setTimeout(function () { Heart.CloseOADocument(doc) doc.Close() }, 100) return } if (doc.Saved == false) { var online = Heart.IsOASystemOnline() ShowConfirm('是否保存并上传服务器', 'warning', { title: '提醒', btns: [ { key: 'yes', text: '保存', primary: true, close: true, callback: function () { //手动修复window Modal阻断的情况 if (online) Heart.OASystemOnLine() doc.Save() doc.Close() }, }, { key: 'no', text: '不保存', close: true, danger: true, callback: function () { // Heart.CloseOADocument(doc) doc.Saved = true doc.Close(WdSaveOptions.wdDoNotSaveChange) }, }, { key: 'cancel', text: '取消', close: true, }, ], }) return } //检测lockfailcallback var lockfail = GetDocParamsValue(doc, 'LockError') if (!!lockfail) { var callback = window[lockfail.callback] if (callback) { callback(doc, lockfail.msg) return } } UploadFileToServer(doc) } //文档保存后关闭事件 function OnDocumentAfterClose(doc) { var l_bIsOADoc = false l_bIsOADoc = CheckIfDocIsOADoc(doc) //判断是否OA文档要关闭 if (l_bIsOADoc == false) { // 非OA文档不做处理 return } //隐藏前置 hiddenIfNoDocument(1) var params = GetDocParamsValues(doc) var filename = getParamFormIndiDocxForm(params.fileInfo, 'file_name') //清空心跳记录 Heart.CloseOADocument(doc) OAWebNotice(filename) //统一提醒 var filepath = doc.FullName //这里wps返回返回的路径和实际保存路径的间隔符不一致,所以全部替换掉 // var filemoved = // params.TempLocalFile.replace(/[\/\\]/gi, '') != // filepath.replace(/[\/\\]/gi, '') var persistdoc = GetDocParamsValue(doc, 'Persist') == true // || filemoved pRemoveDocParam(doc) // 关闭文档时,移除PluginStorage对象的参数 pSetWPSAppUserName() // 判断文档关闭后,如果系统已经没有打开的文档了,则设置回初始用户名 setTimeout(stopRefreshToken, 1e3) //一秒之后执行清理RefreshToken setTimeout(() => { if (!persistdoc) wps.FileSystem.Remove(filepath) //删除临时文件 wps.FileSystem.Remove(params.TempLocalFile) // closeWpsIfNoDocument(params) hiddenIfNoDocument(0) }, 500) } function stopRefreshToken() { if (gettokenid) { const docs = wps.Application.Documents for (let i = 0; i < docs.Count; i++) { const doc = docs.Item(i) if (CheckIfDocIsOADoc(doc)) return } //没有OA文档 clearTimeout(gettokenid) gettokenid = null } } //文档打开事件 function OnDocumentOpen(doc) { //设置当前新增文档是否来自OA的文档 if (wps.PluginStorage.getItem(constStrEnum.IsInCurrOADocOpen) == false) { //如果是用户自己在WPS环境打开文档,则设置非OA文档标识 pSetNoneOADocFlag(doc) } OnWindowActivate() ChangeOATabOnDocOpen() //打开文档后,默认打开Tab页 } //新建文档事件 function OnDocumentNew(doc) { //设置当前新增文档是否来自OA的文档 if (wps.PluginStorage.getItem(constStrEnum.IsInCurrOADocOpen) == false) { //如果是用户自己在WPS环境打开文档,则设置非OA文档标识 pSetNoneOADocFlag(doc) } ChangeOATabOnDocOpen() // 打开OA助手Tab菜单页 wps.ribbonUI.Invalidate() // 刷新Ribbon按钮的状态 } /** * 作用:根据当前活动文档的情况判断,当前文档适用的系统参数,例如:当前文档对应的用户名称等 */ function SetCurrDocEnvProp(doc) { if (!doc) return var l_bIsOADoc = false l_bIsOADoc = pCheckIfOADoc(doc) //如果是OA文件,则按OA传来的用户名设置WPS OA助手WPS用户名设置按钮冲突 if (l_bIsOADoc == true) { var l_userName = GetDocParamsValue(doc, constStrEnum.userName) if (l_userName != '') { wps.WpsApplication().UserName = l_userName return } } //如果是非OA文件或者参数的值是空值,则按WPS安装默认用户名设置 wps.WpsApplication().UserName = wps.PluginStorage.getItem( constStrEnum.WPSInitUserName ) } /* 入口参数:doc 功能说明:判断当前文档是否能另存为本地文件 返回值:布尔值true or false */ function pCheckCurrOADocCanSaveAs(doc) { //如果是非OA文档,则允许另存为 if (CheckIfDocIsOADoc(doc) == false) return true //对于来自OA系统的文档,则获取该文档对应的属性参数 var l_CanSaveAs = GetDocParamsValue(doc, constStrEnum.CanSaveAs) //判断OA传入的参数 if (typeof l_CanSaveAs == 'boolean') { return l_CanSaveAs } return false } /** * 作用:判断文档关闭后,如果系统已经没有打开的文档了,则设置回初始用户名 */ function pSetWPSAppUserName() { //文档全部关闭的情况下,把WPS初始启动的用户名设置回去 if (wps.WpsApplication().Documents.Count == 1) { var l_strUserName = wps.PluginStorage.getItem(constStrEnum.WPSInitUserName) wps.WpsApplication().UserName = l_strUserName } } /** * 作用:文档关闭后,删除对应的PluginStorage内的参数信息 * 返回值:没有返回值 * @param {*} doc */ function pRemoveDocParam(doc) { if (!doc) return wps.PluginStorage.removeItem(GetUniqueId(doc)) return } /** * 作用:判断当前文档是否从OA来的文档,如果非OA文档(就是本地新建或打开的文档,则设置EnumOAFlag 标识) * 作用:设置非OA文档的标识状态 * @param {*} doc * 返回值:无 */ function pSetNoneOADocFlag(doc) { if (!doc) return // var l_param = wps.PluginStorage.getItem(doc.DocID); //定义JSON文档参数 // var l_objParams = new Object(); // if (l_param) { // l_objParams = JSON.parse(l_param); // } // l_objParams.isOA = EnumOAFlag.DocFromNoOA; // 新增非OA打开文档属性 // wps.PluginStorage.setItem(doc.DocID, JSON.stringify(l_objParams)); // 存入内存中 SetDocParamsValue(doc, 'isOA', EnumOAFlag.DocFromNoOA) } /** * 作用:根据设置判断打开文件是否默认激活OA助手工具Tab菜单 * 返回值:无 */ function ChangeOATabOnDocOpen() { var l_ShowOATab = true //默认打开 l_ShowOATab = wps.PluginStorage.getItem(constStrEnum.ShowOATabDocActive) if (l_ShowOATab == true) { wps.ribbonUI.ActivateTab('WeOfficeWPSExtTab') //新建文档时,自动切换到OA助手状态 } }