123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521 |
- var EnumOAFlag = {
- DocFromOA: 1,
- DocFromNoOA: 0,
- }
- //记录是否用户点击OA文件的保存按钮
- var EnumDocSaveFlag = {
- OADocSave: 1,
- NoneOADocSave: 0,
- }
- //标识文档的落地模式 本地文档落地 0 ,不落地 1
- var EnumDocLandMode = {
- DLM_LocalDoc: 0,
- DLM_OnlineDoc: 1,
- }
- //加载时会执行的方法
- function OnWPSWorkTabLoad(ribbonUI) {
- wps.ribbonUI = ribbonUI
- if (typeof wps.Enum == 'undefined') {
- // 如果没有内置枚举值
- wps.Enum = WPS_Enum
- }
- //设定记录RSID 用于处理逻辑判断
- wps.Application.Options.StoreRSIDOnSave = true
- OnJSWorkInit() //初始化文档事件(全局参数,挂载监听事件)
- setTimeout(activeTab, 1000) // 激活OA助手菜单
- // OpenTimerRun(OnDocSaveByAutoTimer); //启动定时备份过程
- if (!IsWindows()) {
- constStrEnum.DirSeparator = '/'
- }
- // SetLocalDebug(true); 当前日志自动开启
- return true
- }
- //文档各类初始化工作(WPS Js环境)
- function OnJSWorkInit() {
- wps.Application.ActiveWindow &&
- (wps.Application.ActiveWindow.ActivePane.View.RevisionsMode = 1)
- pInitParameters() //OA助手环境的所有配置控制的初始化过程
- AddDocumentEvent() //挂接文档事件处理函数
- }
- //初始化全局参数
- function pInitParameters() {
- wps.PluginStorage.setItem(
- constStrEnum.OADocUserSave,
- EnumDocSaveFlag.NoneOADocSave
- ) //初始化,没有用户点击保存按钮
- var l_wpsUserName = wps.WpsApplication().UserName
- wps.PluginStorage.setItem(constStrEnum.WPSInitUserName, l_wpsUserName) //在OA助手加载前,先保存用户原有的WPS应用用户名称
- wps.PluginStorage.setItem(constStrEnum.OADocCanSaveAs, false) //默认OA文档不能另存为本地
- wps.PluginStorage.setItem(constStrEnum.AllowOADocReOpen, false) //设置是否允许来自OA的文件再次被打开
- wps.PluginStorage.setItem(constStrEnum.ShowOATabDocActive, false) //设置新打开文档是否默认显示OA助手菜单Tab 默认为false
- wps.PluginStorage.setItem(constStrEnum.DefaultUploadFieldName, 'file') //针对UploadFile方法设置上载字段名称
- wps.PluginStorage.setItem(constStrEnum.AutoSaveToServerTime, '10') //自动保存回OA服务端的时间间隔。如果设置0,则关闭,最小设置3分钟
- wps.PluginStorage.setItem(constStrEnum.TempTimerID, '0') //临时值,用于保存计时器ID的临时值
- // 以下是一些临时状态参数,用于打开文档等的状态判断
- wps.PluginStorage.setItem(constStrEnum.IsInCurrOADocOpen, false) //用于执行来自OA端的新建或打开文档时的状态
- wps.PluginStorage.setItem(constStrEnum.IsInCurrOADocSaveAs, false) //用于执行来自OA端的文档另存为本地的状态
- }
- //挂载WPS的文档事件
- function AddDocumentEvent() {
- wps.ApiEvent.AddApiEventListener('WindowActivate', OnWindowActivate)
- // wps.ApiEvent.AddApiEventListener('DocumentBeforeSave', OnDocumentBeforeSave)
- wps.ApiEvent.AddApiEventListener('DocumentBeforeClose', OnDocumentBeforeClose)
- wps.ApiEvent.AddApiEventListener('DocumentAfterClose', OnDocumentAfterClose)
- // wps.ApiEvent.AddApiEventListener(
- // "DocumentBeforePrint",
- // OnDocumentBeforePrint
- // );
- wps.ApiEvent.AddApiEventListener('DocumentOpen', OnDocumentOpen)
- // wps.ApiEvent.AddApiEventListener("DocumentNew", OnDocumentNew);
- }
- /**
- * 作用: 把当前文档保存为其他格式的文档并上传
- * @param {*} p_FileSuffix 输出的目标格式后缀名,支持:.pdf .uof .uot .ofd
- * @param {*} pShowPrompt 是否弹出用户确认框
- */
- function OnDoChangeToOtherDocFormat(p_FileSuffix, pShowPrompt) {
- var l_suffix = p_FileSuffix // params.suffix;
- if (!l_suffix) {
- return
- }
- //获取当前执行格式转换操作的文档
- var l_doc = wps.WpsApplication().ActiveDocument
- if (!l_doc) {
- return
- }
- if (typeof pShowPrompt == 'undefined') {
- // pShowPrompt = true; //默认设置为弹出用户确认框
- pShowPrompt = false //默认不弹出用户确认
- }
- //默认设置为以当前文件的显示模式输出,即当前为修订则输出带有修订痕迹的
- pDoChangeToOtherDocFormat(l_doc, l_suffix, pShowPrompt, true)
- }
- /**
- * 作用:把当前文档输出为另外的格式保存
- * @param {*} p_Doc 文档对象
- * @param {*} p_Suffix 另存为的目标文件格式
- * @param {*} pShowPrompt 是否弹出用户确认框
- * @param {*} p_ShowRevision :是否强制关闭修订,如果是False,则强制关闭痕迹显示。如果为true则不做控制输出。
- */
- function pDoChangeToOtherDocFormat(
- p_Doc,
- p_Suffix,
- pShowPrompt,
- p_ShowRevision
- ) {
- if (!p_Doc) {
- return
- }
- var l_suffix = p_Suffix
- //获取该文档对应OA参数的上载路径
- var l_uploadPath = GetDocParamsValue(p_Doc, constStrEnum.uploadAppendPath)
- if (l_uploadPath == '' || l_uploadPath == null) {
- l_uploadPath = GetDocParamsValue(p_Doc, constStrEnum.uploadPath)
- }
- var l_FieldName = GetDocParamsValue(p_Doc, constStrEnum.uploadFieldName)
- if (l_FieldName == '') {
- l_FieldName = wps.PluginStorage.getItem(constStrEnum.DefaultUploadFieldName) //默认是'file'
- }
- if (l_uploadPath == '' && pShowPrompt == true) {
- ShowMessage('系统未传入有效上载文件路径!不能继续转换操作。', 'error') //如果OA未传入上载路径,则给予提示
- return
- }
- //已经设置成默认不提醒无需替换ShowConfirm
- if (pShowPrompt == true) {
- if (
- !wps.confirm(
- '当前文档将另存一份' +
- l_suffix +
- ' 格式的副本,并上传到系统后台,请确认 ?'
- )
- ) {
- return
- }
- }
- // 先把文档输出保存为指定的文件格式,再上传到后台
- wps.PluginStorage.setItem(constStrEnum.OADocUserSave, true) //设置一个临时变量,用于在BeforeSave事件中判断
- if (p_ShowRevision == false) {
- // 强制关闭痕迹显示
- var l_SourceName = p_Doc.FullName
- l_NewName = p_Doc.Path + '\\B_' + p_Doc.Name
- p_Doc.SaveAs2(($FileName = l_NewName), ($AddToRecentFiles = false))
- p_Doc.SaveAs2(($FileName = l_SourceName), ($AddToRecentFiles = false))
- //以下以隐藏模式打开另一个文档
- var l_textEncoding = wps.WpsApplication().Options.DefaultTextEncoding //默认 936
- var l_Doc = wps
- .WpsApplication()
- .Documents.Open(
- l_NewName,
- false,
- false,
- false,
- '',
- '',
- false,
- '',
- '',
- 0,
- l_textEncoding,
- false
- )
- l_Doc.TrackRevision = false //关闭修订模式
- l_Doc.ShowRevision = false //隐含属性,隐藏修订模式
- l_Doc.AcceptAllRevisions()
- l_Doc.Save()
- handleFileAndUpload(l_suffix, l_Doc, l_uploadPath, l_FieldName)
- l_Doc.Close()
- wps.FileSystem.Remove(l_NewName) //删除临时文档
- } else {
- handleFileAndUpload(l_suffix, p_Doc, l_uploadPath, l_FieldName)
- }
- wps.PluginStorage.setItem(constStrEnum.OADocUserSave, false)
- return
- }
- //保存到OA后台服务器
- function OnBtnSaveToServer(l_doc) {
- var params = GetDocParamsValues(l_doc)
- var l_uploadPath = params[constStrEnum.uploadPath] // 文件上载路径
- if (!l_uploadPath) {
- return
- }
- var l_FieldName = params[constStrEnum.uploadFieldName] //上载到后台的业务方自定义的字段名称
- if (!l_FieldName) {
- l_FieldName = wps.PluginStorage.getItem(constStrEnum.DefaultUploadFieldName) // 默认为‘file’
- }
- var l_UploadName = params[constStrEnum.uploadFileName] //设置OA传入的文件名称参数
- if (!l_UploadName) {
- //l_UploadName = l_doc.Name //默认文件名称就是当前文件编辑名称
- //默认使用xml中定义的文件名 因为目前uploadFileName前端并没有传
- l_UploadName = GetFileNameByParams(params)
- }
- if (params.action == 'taoda' && !!params.oldDocName)
- l_UploadName = params.oldDocName
- var l_DocPath = l_doc.FullName // 文件所在路径
- loginfo('去水印')
- clearWaterMark(l_doc, params)
- loginfo('去水印完成')
- if (pIsOnlineOADoc(l_doc) == false) {
- //对于本地磁盘文件上传OA,先用Save方法保存后,再上传
- //设置用户保存按钮标志,避免出现禁止OA文件保存的干扰信息
- wps.PluginStorage.setItem(
- constStrEnum.OADocUserSave,
- EnumDocSaveFlag.OADocSave
- )
- loginfo('保存文件' + l_UploadName)
- // l_doc.Saved = false
- l_doc.Saved = false
- l_doc.Save() //执行一次保存方法
- loginfo('保存文件完成' + l_UploadName)
- //设置用户保存按钮标志
- wps.PluginStorage.setItem(
- constStrEnum.OADocUserSave,
- EnumDocSaveFlag.NoneOADocSave
- )
- //落地文档,调用UploadFile方法上传到OA后台
- try {
- //调用OA助手的上传方法
- UploadFile(
- l_UploadName,
- l_DocPath,
- l_uploadPath,
- l_FieldName,
- l_doc,
- function (rps) {
- //延时执行,因为显示loading的页面可能还没有加载完成,注册回调事件。
- //这样loading页窗体就会无法消失
- setTimeout(function () {
- CloseLoading(GetUniqueId(l_doc))
- ShowMessage('上传成功', 'success', 1, true)
- //清空心跳记录
- Heart.CloseOADocument(l_doc)
- OnUploadToServerSuccess(rps)
- hiddenIfNoDocument(1)
- setTimeout(function () {
- l_doc.Close()
- }, 2e2)
- }, 200)
- },
- OnUploadFileFail
- )
- } catch (err) {
- CloseLoading(GetUniqueId(l_doc))
- ShowMessage('上传文件失败!请联系管理员', 'error')
- logerr('上传失败:')
- logerr(rps)
- }
- } else {
- // 不落地的文档,调用 Document 对象的不落地上传方法
- wps.PluginStorage.setItem(
- constStrEnum.OADocUserSave,
- EnumDocSaveFlag.OADocSave
- )
- try {
- //调用不落地上传方法
- l_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(l_doc, constStrEnum.suffix);
- //if (l_suffix == "") {
- //onsole.log("上传需转换的文件后缀名错误,无法进行转换上传!");
- // return;
- //}
- //判断是否同时上传PDF等格式到OA后台
- var l_uploadWithAppendPath = GetDocParamsValue(
- l_doc,
- constStrEnum.uploadWithAppendPath
- ) //标识是否同时上传suffix格式的文档
- if (l_uploadWithAppendPath == '1') {
- //调用转pdf格式函数,强制关闭转换修订痕迹,不弹出用户确认的对话框
- pDoChangeToOtherDocFormat(l_doc, l_suffix, false, false)
- }
- }
- /**
- * 锁异常后,二次提示操作
- * @param {document} doc
- * @param {msg} msg
- */
- function AfterLockError(doc, msg) {
- ShowConfirm(msg, 'warning', {
- title: '无法提交',
- btns: [
- {
- key: 'close',
- text: '确认',
- primary: true,
- callback: function () {
- Heart.CloseOADocument(doc)
- doc.Close()
- },
- },
- {
- key: 'cancel',
- text: '取消',
- },
- ],
- })
- }
- /**
- * 调用文件上传到OA服务端时,
- * @param {*} resp
- */
- function OnUploadToServerSuccess(resp) {
- loginfo('成功上传服务端后的回调:' + resp)
- return
- }
- function OnUploadToServerFail(resp) {
- alert('文件上传失败!')
- }
- //判断当前文档是否是OA文档
- function pCheckIfOADoc() {
- var doc = wps.WpsApplication().ActiveDocument
- if (!doc) return false
- return CheckIfDocIsOADoc(doc)
- }
- //根据传入的doc对象,判断当前文档是否是OA文档
- function CheckIfDocIsOADoc(doc) {
- if (!doc) {
- return false
- }
- var l_isOA = GetDocParamsValue(doc, constStrEnum.isOA)
- if (l_isOA == '') {
- return false
- }
- return l_isOA == EnumOAFlag.DocFromOA ? true : false
- }
- /**
- * 作用:判断是否是不落地文档
- * 参数:doc 文档对象
- * 返回值: 布尔值
- */
- function pIsOnlineOADoc(doc) {
- var l_LandMode = GetDocParamsValue(doc, constStrEnum.OADocLandMode) //获取文档落地模式
- if (l_LandMode == '') {
- //用户本地打开的文档
- return false
- }
- return l_LandMode == EnumDocLandMode.DLM_OnlineDoc
- }
- //自定义菜单按钮的点击执行事件
- function OnAction(control) {
- switch (getControlId(control)) {
- case 'btnRefreshVersion':
- refreshVersion()
- break
- case 'btnShowLogPane':
- ShowLogInfoDialog()
- break
- default:
- break
- }
- return true
- }
- function getControlId(control) {
- var eleId
- if (typeof control == 'object' && arguments.length == 1) {
- //针对Ribbon的按钮的
- eleId = control.Id
- } else if (typeof control == 'undefined' && arguments.length > 1) {
- //针对idMso的
- eleId = arguments[1].Id
- } else if (typeof control == 'boolean' && arguments.length > 1) {
- //针对checkbox的
- eleId = arguments[1].Id
- } else if (typeof control == 'number' && arguments.length > 1) {
- //针对combox的
- eleId = arguments[2].Id
- }
- return eleId
- }
- //xml文件中自定义按钮的文字处理函数
- function OnGetLabel(control) {
- switch (getControlId(control)) {
- // case 'btnLogDebugInfo':
- // return GetLocalDebugBtnText()
- case 'btnShowOAStatus':
- return GetOAStatusBtnText()
- default:
- }
- return ''
- }
- function GetOAStatusBtnText() {
- if (Heart) {
- if (Heart.IsOASystemOnline(false)) {
- return '系统在线'
- } else {
- return '系统离线'
- }
- }
- return '未知'
- }
- /**
- * 刷新加载项
- */
- function refreshVersion() {
- alert('更新加载项后请重新打开WPS')
- }
- function GetLocalDebugBtnText() {
- if (IfLocalDebugInfo()) return '开启本地日志' + Date.now()
- else return '关闭本地日志' + Date.now()
- }
- function GetVersionText() {
- return `当前版本:${GetCurrentVersion()}`
- }
- function ShowLogInfoDialog() {
- wps.ShowDialog(
- GetResourcePath() + 'share/ui/loginfo.html',
- '本地日志',
- 600 * window.devicePixelRatio,
- 600 * window.devicePixelRatio,
- false
- )
- }
- function ShowTabPane() {
- let taskPane = wps.CreateTaskPane(GetUrlPath() + '/ui/taskpane.html')
- taskPane.Title = 'IndiDocx'
- taskPane.DockPosition = wps.Enum.JSKsoEnum_msoCTPDockPositionLeft
- taskPane.Visible = true
- }
- /******** 自定义功能 *********/
- function getTitle() {
- var defaultTitle = 'Indidocx'
- var customertitle = OACustomer.getCustomerTitle('word')
- return customertitle || defaultTitle
- }
- function getCusBtnVisiable(control) {
- var id = getControlId(control)
- if (id.indexOf('cbn') == -1) return false
- var btn = OACustomer.getCustomerBtn('word', id.substr(3))
- return !!btn
- }
- function getCusBtnIcon(control) {
- var id = getControlId(control)
- if (id.indexOf('cbn') == -1) return ''
- var btn = OACustomer.getCustomerBtn('word', id.substr(3))
- return !!btn ? btn.getIcon() : ''
- }
- function getCusBtnLabel(control) {
- var id = getControlId(control)
- if (id.indexOf('cbn') == -1) return false
- var btn = OACustomer.getCustomerBtn('word', id.substr(3))
- return !!btn ? btn.getLabel() : ''
- }
- function onCusBtnAction(control) {
- var id = getControlId(control)
- if (id.indexOf('cbn') == -1) return false
- var btn = OACustomer.getCustomerBtn('word', id.substr(3))
- if (!!btn) btn.onAction()
- wps.ribbonUI.Invalidate()
- return true
- }
|