You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

func_docEvents.js 8.6KB

7 months ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. // 打印前监听事件
  2. function OnDocumentBeforePrint(doc) {
  3. return;
  4. }
  5. //切换窗口时触发的事件
  6. function OnWindowActivate() {
  7. var l_doc = wps.WpsApplication().ActiveDocument;
  8. SetCurrDocEnvProp(l_doc); // 设置当前文档对应的用户名
  9. showOATab(); // 根据文件是否为OA文件来显示OA菜单再进行刷新按钮
  10. setTimeout(activeTab, 2000); // 激活页面必须要页签显示出来,所以做1秒延迟
  11. return;
  12. }
  13. /**
  14. * 作用:判断OA文档是否被另存为了
  15. */
  16. function CheckIfOADocSaveAs(doc) {
  17. if (!doc) {
  18. return;
  19. }
  20. // 获取OA文档的原始保存路径
  21. var l_Path = GetDocParamsValue(doc, constStrEnum.SourcePath);
  22. // 原路径和当前文件的路径对比
  23. return l_Path == doc.FullName;
  24. }
  25. // 当文件保存前触发的事件
  26. function OnDocumentBeforeSave(doc) {
  27. //设置变量,判断是否当前用户按了自定义的OA文件保存按钮
  28. if(wps.WpsApplication().ActiveDocument&&doc.DocID==wps.WpsApplication().ActiveDocument.DocID){
  29. var l_IsOADocButtonSave = false;
  30. l_IsOADocButtonSave = wps.PluginStorage.getItem(constStrEnum.OADocUserSave);
  31. //根据传入参数判断当前文档是否能另存为,默认不能另存为
  32. if (pCheckCurrOADocCanSaveAs(doc) == false) { //先根据OA助手的默认设置判断是否允许OA文档另存为操作
  33. //0.如果配置文件:OA文档不允许另存为,则再判断
  34. //1.先判断是否是在线文档且是通过WPS自身按钮或快捷键保存,则取消弹出另存到本地的弹出框
  35. if (pIsOnlineOADoc(doc) == true && l_IsOADocButtonSave == false) {
  36. alert("来自OA的不落地文档,禁止另存为本地文档!");
  37. //如果是OA文档,则禁止另存为
  38. wps.ApiEvent.Cancel = true;
  39. }
  40. //2.如果是落地打开的OA文档并且通过WPS自身按钮或者快捷键保存,则执行保存到本地临时目录,取消弹出对话框
  41. if (pIsOnlineOADoc(doc) == false && l_IsOADocButtonSave == false){
  42. //用户手动另存为操作时,在这里被屏蔽掉
  43. doc.Save();
  44. //如果是OA文档,则禁止另存为
  45. wps.ApiEvent.Cancel = true;
  46. }
  47. }
  48. //保存文档后,也要刷新一下Ribbon按钮的状态
  49. showOATab();
  50. }else{
  51. wps.ApiEvent.Cancel=true;
  52. }
  53. return;
  54. }
  55. //文档保存前关闭事件
  56. /**
  57. * 作用:
  58. * @param {*} doc
  59. */
  60. function OnDocumentBeforeClose(doc) {
  61. console.log('OnDocumentBeforeClose');
  62. var l_fullName = doc.FullName;
  63. var l_bIsOADoc = false;
  64. l_bIsOADoc = CheckIfDocIsOADoc(doc); //判断是否OA文档要关闭
  65. if (l_bIsOADoc == false) { // 非OA文档不做处理
  66. return;
  67. }
  68. //判断是否只读的文档,或受保护的文档,对于只读的文档,不给予保存提示
  69. if (pISOADocReadOnly(doc) == false) {
  70. if (doc.Saved == false) { //如果OA文档关闭前,有未保存的数据
  71. if (wps.confirm("系统文件有改动,是否提交后关闭?" + "\n" + "确认后请按上传按钮执行上传操作。取消则继续关闭文档。")) {
  72. wps.ApiEvent.Cancel = true;
  73. return;
  74. }
  75. }
  76. }
  77. // 有未保存的数据,确认无需保存直接关闭
  78. doc.Close(wps.Enum&&wps.Enum.wdDoNotSaveChanges||0); // 不保存待定的更改。枚举值兼容性写法
  79. closeWpsIfNoDocument(); // 判断WPS中的文件个数是否为0,若为0则关闭WPS函数
  80. wps.FileSystem.Remove(l_fullName);
  81. }
  82. //文档保存后关闭事件
  83. function OnDocumentAfterClose(doc) {
  84. console.log("OnDocumentAfterClose");
  85. var l_NofityURL = GetDocParamsValue(doc, constStrEnum.notifyUrl);
  86. if (l_NofityURL) {
  87. l_NofityURL = l_NofityURL.replace("{?}", "3"); //约定:参数为3则文档关闭
  88. console.log("" + l_NofityURL);
  89. NotifyToServer(l_NofityURL);
  90. }
  91. pRemoveDocParam(doc); // 关闭文档时,移除PluginStorage对象的参数
  92. pSetWPSAppUserName(); // 判断文档关闭后,如果系统已经没有打开的文档了,则设置回初始用户名
  93. }
  94. //文档打开事件
  95. function OnDocumentOpen(doc) {
  96. //设置当前新增文档是否来自OA的文档
  97. // if (wps.PluginStorage.getItem(constStrEnum.IsInCurrOADocOpen) == false) {
  98. // //如果是用户自己在WPS环境打开文档,则设置非OA文档标识
  99. // console.log(wps.PluginStorage.getItem(wps.WpsApplication().ActiveDocument.DocID))
  100. // pSetNoneOADocFlag(doc);
  101. // console.log(wps.PluginStorage.getItem(wps.WpsApplication().ActiveDocument.DocID))
  102. // }
  103. OnWindowActivate();
  104. ChangeOATabOnDocOpen(); //打开文档后,默认打开Tab页
  105. setTimeout(activeTab,2000); // 激活OA助手菜单
  106. }
  107. //新建文档事件
  108. function OnDocumentNew(doc) {
  109. //设置当前新增文档是否来自OA的文档
  110. // if (wps.PluginStorage.getItem(constStrEnum.IsInCurrOADocOpen) == false) {
  111. // //如果是用户自己在WPS环境打开文档,则设置非OA文档标识
  112. // pSetNoneOADocFlag(doc);
  113. // }
  114. ChangeOATabOnDocOpen(); // 打开OA助手Tab菜单页
  115. wps.ribbonUI.Invalidate(); // 刷新Ribbon按钮的状态
  116. }
  117. /**
  118. * 作用:判断当前文档是否是只读文档
  119. * 返回值:布尔
  120. */
  121. function pISOADocReadOnly(doc) {
  122. if (!doc) {
  123. return false;
  124. }
  125. var l_openType = GetDocParamsValue(doc, constStrEnum.openType); // 获取OA传入的参数 openType
  126. if (l_openType == "") {
  127. return false;
  128. }
  129. try {
  130. if (l_openType.protectType != -1) { // -1 为未保护
  131. return true;
  132. }
  133. } catch (err) {
  134. return false;
  135. }
  136. }
  137. /**
  138. * 作用:根据当前活动文档的情况判断,当前文档适用的系统参数,例如:当前文档对应的用户名称等
  139. */
  140. function SetCurrDocEnvProp(doc) {
  141. if (!doc) return;
  142. var l_bIsOADoc = false;
  143. l_bIsOADoc = pCheckIfOADoc(doc);
  144. //如果是OA文件,则按OA传来的用户名设置WPS OA助手WPS用户名设置按钮冲突
  145. if (l_bIsOADoc == true) {
  146. var l_userName = GetDocParamsValue(doc, constStrEnum.userName);
  147. if (l_userName != "") {
  148. wps.WpsApplication().UserName = l_userName;
  149. return;
  150. }
  151. }
  152. //如果是非OA文件或者参数的值是空值,则按WPS安装默认用户名设置
  153. wps.WpsApplication().UserName = wps.PluginStorage.getItem(constStrEnum.WPSInitUserName);
  154. }
  155. /*
  156. 入口参数:doc
  157. 功能说明:判断当前文档是否能另存为本地文件
  158. 返回值:布尔值true or false
  159. */
  160. function pCheckCurrOADocCanSaveAs(doc) {
  161. //如果是非OA文档,则允许另存为
  162. if (CheckIfDocIsOADoc(doc) == false) return true;
  163. //对于来自OA系统的文档,则获取该文档对应的属性参数
  164. var l_CanSaveAs = GetDocParamsValue(doc, constStrEnum.CanSaveAs);
  165. //判断OA传入的参数
  166. if (typeof (l_CanSaveAs) == "boolean") {
  167. return l_CanSaveAs;
  168. }
  169. return false;
  170. }
  171. /**
  172. * 作用:文档关闭后,删除对应的PluginStorage内的参数信息
  173. * 返回值:没有返回值
  174. * @param {*} doc
  175. */
  176. function pRemoveDocParam(doc) {
  177. if (!doc) return;
  178. wps.PluginStorage.removeItem(doc.DocID);
  179. return;
  180. }
  181. /**
  182. * 作用:判断当前文档是否从OA来的文档,如果非OA文档(就是本地新建或打开的文档,则设置EnumOAFlag 标识)
  183. * 作用:设置非OA文档的标识状态
  184. * @param {*} doc
  185. * 返回值:无
  186. */
  187. function pSetNoneOADocFlag(doc) {
  188. if (!doc) return;
  189. var l_param = wps.PluginStorage.getItem(doc.DocID); //定义JSON文档参数
  190. var l_objParams = new Object();
  191. if (l_param) {
  192. l_objParams = JSON.parse(l_param);
  193. }
  194. l_objParams.isOA = EnumOAFlag.DocFromNoOA; // 新增非OA打开文档属性
  195. wps.PluginStorage.setItem(doc.DocID, JSON.stringify(l_objParams)); // 存入内存中
  196. }
  197. /**
  198. * 作用:根据设置判断打开文件是否默认激活OA助手工具Tab菜单
  199. * 返回值:无
  200. */
  201. function ChangeOATabOnDocOpen() {
  202. var l_ShowOATab = true; //默认打开
  203. l_ShowOATab = wps.PluginStorage.getItem(constStrEnum.ShowOATabDocActive);
  204. if (l_ShowOATab == true) {
  205. setTimeout(activeTab,500);
  206. // wps.ribbonUI.ActivateTab("WPSWorkExtTab"); //新建文档时,自动切换到OA助手状态
  207. }
  208. }