123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324 |
- //切换窗口时触发的事件
- 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)
- }
|