123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361 |
- // 打印前监听事件
- 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助手状态
- }
- }
|