//切换窗口时触发的事件 function OnWindowActivate() { var l_doc = wps.EtApplication().ActiveWorkbook SetCurrDocEnvProp(l_doc) // 设置当前文档对应的用户名 showOATab() // 根据文件是否为OA文件来显示OA菜单再进行刷新按钮 setTimeout(activeTab, 500) // 激活页面必须要页签显示出来,所以做1秒延迟 return } // 当文件保存前触发的事件 function OnWorkbookBeforeSave(doc) { var ps = {} ps[constStrEnum.CurrentRsid] = Date.now() SetDocParamsValues(doc, ps) } //这里模拟了一个afterclose function offlineAndClose(doc) { Heart.CloseOADocument(doc) closeEtIfNoDocument() } //文档保存前关闭事件 /** * 作用: * @param {*} doc */ function OnWorkbookBeforeClose(doc) { var l_bIsOADoc = false l_bIsOADoc = CheckIfDocIsOADoc(doc) //判断是否OA文档要关闭 if (l_bIsOADoc == false) { // 非OA文档不做处理 return } var docparams = GetDocParamsValues(doc) var filename = getParamFormIndiDocxForm(docparams.fileInfo, 'file_name') if (!Heart.GetCurrentDocs()[GetUniqueId(doc)]) { //代替afterclose //这种情况已经做过离线操作了,所以直接关闭wps OAWebNotice(filename) var filepath = doc.FullName //清理文件 //这里wps返回返回的路径和实际保存路径的间隔符不一致,所以全部替换掉 // var filemoved = // docparams.TempLocalFile.replace(/[\/\\]/gi, '') != // filepath.replace(/[\/\\]/gi, '') var persistdoc = GetDocParamsValue(doc, 'Persist') == true // || filemoved setTimeout(() => { if (!persistdoc) wps.FileSystem.Remove(filepath) //删除临时文件 wps.FileSystem.Remove(docparams.TempLocalFile) //linux另存为不移除原有文件,需要手动处理 closeEtIfNoDocument() }, 500) // closeEtIfNoDocument() return } //强制取消保存,并执行OA逻辑 wps.ApiEvent.Cancel = true // 只读或者无变化操作不上传 if ( docparams.action == 'printdocument' || doc.ProtectionType == WdProtectionType.wdAllowOnlyFormFields ) { loginfo(`文件[${doc.Name}] ${docparams.action} 关闭不上传`) setTimeout(function () { Heart.CloseOADocument(doc) doc.Close() }, 100) return } if (doc.Saved) { if ( docparams[constStrEnum.CurrentRsid] == docparams[constStrEnum.OriginalRsid] ) { loginfo(`文件[${doc.Name}] 无修改 关闭不上传`) setTimeout(function () { Heart.CloseOADocument(doc) doc.Close() }, 100) return } } else { 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.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) // closeEtIfNoDocument() // 判断文件个数是否为0,若为0则关闭组件 } //文档打开事件 function OnWorkbookOpen(doc) { //设置当前新增文档是否来自OA的文档 if (wps.PluginStorage.getItem('IsInCurrOADocOpen') == false) { //如果是用户自己在WPS环境打开文档,则设置非OA文档标识 pSetNoneOADocFlag(doc) } OnWindowActivate() ChangeOATabOnDocOpen() //打开文档后,默认打开Tab页 } //新建文档事件 function OnWorkbookNew(doc) { //设置当前新增文档是否来自OA的文档 if (wps.PluginStorage.getItem('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) { //不允许另存为 if (GetDocParamsValue(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) } //禁用修订按钮 wps.Application.CommandBars.SetEnabledMso('ReviewTrackChangesMenu', false) var l_userName = GetDocParamsValue(doc, 'userName') if (l_userName != '') { wps.EtApplication().UserName = l_userName return } } else { wps.Application.CommandBars.SetEnabledMso('FileSaveAsMenu', true) wps.Application.CommandBars.SetEnabledMso('FileSaveAs', true) wps.Application.CommandBars.SetEnabledMso('ReviewTrackChangesMenu', true) } //如果是非OA文件或者参数的值是空值,则按WPS安装默认用户名设置 wps.EtApplication().UserName = wps.PluginStorage.getItem('WPSInitUserName') } /* 入口参数:doc 功能说明:判断当前文档是否能另存为本地文件 返回值:布尔值true or false */ function pCheckCurrOADocCanSaveAs(doc) { //如果是非OA文档,则允许另存为 if (CheckIfDocIsOADoc(doc) == false) return true //对于来自OA系统的文档,则获取该文档对应的属性参数 var l_CanSaveAs = GetDocParamsValue(doc, 'CanSaveAs') //判断OA传入的参数 if (typeof l_CanSaveAs == 'boolean') { return l_CanSaveAs } return false } /** * 作用:判断文档关闭后,如果系统已经没有打开的文档了,则设置回初始用户名 */ function pSetetAppUserName() { //文档全部关闭的情况下,把WPS初始启动的用户名设置回去 if (wps.EtApplication().Workbooks.Count == 1) { var l_strUserName = wps.PluginStorage.getItem('WPSInitUserName') wps.EtApplication().UserName = l_strUserName } } /** * 作用:文档关闭后,删除对应的PluginStorage内的参数信息 * 返回值:没有返回值 * @param {*} doc */ function pRemoveDocParam(doc) { if (!doc) return wps.PluginStorage.removeItem(doc.FullName) return } /** * 作用:判断当前文档是否从OA来的文档,如果非OA文档(就是本地新建或打开的文档,则设置EnumOAFlag 标识) * 作用:设置非OA文档的标识状态 * @param {*} doc * 返回值:无 */ function pSetNoneOADocFlag(doc) { if (!doc) return var l_param = wps.PluginStorage.getItem(doc.FullName) //定义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.FullName, JSON.stringify(l_objParams)) // 存入内存中 } /** * 作用:根据设置判断打开文件是否默认激活OA助手工具Tab菜单 * 返回值:无 */ function ChangeOATabOnDocOpen() { var l_ShowOATab = true //默认打开 l_ShowOATab = wps.PluginStorage.getItem('ShowOATabDocActive') if (l_ShowOATab == true) { if (wps.ribbonUI) wps.ribbonUI.ActivateTab('WeOfficeWPSExtTab') //新建文档时,自动切换到OA助手状态 else wps.ActivateTab('WeOfficeWPSExtTab') //新建文档时,自动切换到OA助手状态 } } /** * 将文件保存到服务器的逻辑 * @param {wps.document} doc * @returns */ function UploadFileToServer(doc) { if (!Heart.IsOASystemOnline()) { ShowConfirm( '检测到审批单已经关闭,无法继续保存,是否另存本文档?', 'warning', { btns: [ { key: 'close', text: '否', close: true, callback: function () { Heart.CloseOADocument(doc) doc.Close(WdSaveOptions.wdDoNotSaveChange) }, }, { key: 'saveas', text: '是', primary: true, close: true, callback: function () { var dialog = wps.Application.FileDialog(2) dialog.InitialFileName = doc.FullName if (dialog.Show() == -1) { dialog.Execute() SetDocParamsValue(doc, 'Persist', true) Heart.CloseOADocument(doc) doc.Close() } }, }, ], } ) return } ShowLoading('上传中,请稍后...', GetUniqueId(doc)) //水印不保留在文档中 // WaterMark.ClearWaterMark(doc); // doc.Save(); OnBtnSaveToServer(doc) }