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.

wpp.js 9.7KB

5 months ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. var _wpp = {}
  2. var pluginsMode = location.search.split("=")[1];//截取url中的参数值
  3. var pluginType = WpsInvoke.ClientType.wpp//加载项类型wps,et,wpp
  4. var pluginName = "WppOAAssist";//加载项名称
  5. var wpsClient = new WpsClient(pluginType);//初始化一个多进程对象,多进程时才需要
  6. var clientStr = pluginName + pluginType + "ClientId"
  7. //单进程封装开始
  8. /**
  9. * 此方法是根据wps_sdk.js做的调用方法封装
  10. * 可参照此定义
  11. * @param {*} funcs 这是在WPS加载项内部定义的方法,采用JSON格式(先方法名,再参数)
  12. * @param {*} front 控制着通过页面执行WPS加载项方法,WPS的界面是否在执行时在前台显示
  13. * @param {*} jsPluginsXml 指定一个新的WPS加载项配置文件的地址,动态传递jsplugins.xml模式,例如:http://127.0.0.1:3888/jsplugins.xml
  14. * @param {*} isSilent 隐藏打开WPS,如果需要隐藏,那么需要传递front参数为false
  15. */
  16. function _WpsInvoke(funcs, front, jsPluginsXml,isSilent) {
  17. var info = {};
  18. info.funcs = funcs;
  19. if(isSilent){//隐藏启动时,front必须为false
  20. front=false;
  21. }
  22. /**
  23. * 下面函数为调起WPS,并且执行加载项WpsOAAssist中的函数dispatcher,该函数的参数为业务系统传递过去的info
  24. */
  25. if (pluginsMode != 2) {//单进程
  26. singleInvoke(info,front,jsPluginsXml,isSilent)
  27. } else {//多进程
  28. multInvoke(info,front,jsPluginsXml,isSilent)
  29. }
  30. }
  31. //单进程
  32. function singleInvoke(info,front,jsPluginsXml,isSilent){
  33. WpsInvoke.InvokeAsHttp(pluginType, // 组件类型
  34. pluginName, // 插件名,与wps客户端加载的加载的插件名对应
  35. "dispatcher", // 插件方法入口,与wps客户端加载的加载的插件代码对应,详细见插件代码
  36. info, // 传递给插件的数据
  37. function (result) { // 调用回调,status为0为成功,其他是错误
  38. if (result.status) {
  39. if (result.status == 100) {
  40. WpsInvoke.AuthHttpesCert('请在稍后打开的网页中,点击"高级" => "继续前往",完成授权。')
  41. return;
  42. }
  43. alert(result.message)
  44. } else {
  45. console.log(result.response)
  46. }
  47. },
  48. front,
  49. jsPluginsXml,
  50. isSilent)
  51. /**
  52. * 接受WPS加载项发送的消息
  53. * 接收消息:WpsInvoke.RegWebNotify(type,name,callback)
  54. * WPS客户端返回消息: wps.OAAssist.WebNotify(message)
  55. * @param {*} type 加载项对应的插件类型
  56. * @param {*} name 加载项对应的名字
  57. * @param {func} callback 接收到WPS客户端的消息后的回调函数,参数为接受到的数据
  58. */
  59. WpsInvoke.RegWebNotify(pluginType, pluginName, handleOaMessage)
  60. }
  61. //多进程
  62. function multInvoke(info,front,jsPluginsXml,isSilent){
  63. wpsClient.jsPluginsXml = jsPluginsXml ? jsPluginsXml : "https://127.0.0.1:3888/jsplugins.xml";
  64. if (localStorage.getItem(clientStr)) {
  65. wpsClient.clientId = localStorage.getItem(clientStr)
  66. }
  67. if(isSilent){
  68. wpsClient.StartWpsInSilentMode(pluginName,function(){//隐藏启动后的回调函数
  69. mult(info,front)
  70. })
  71. }else{
  72. mult(info,front)
  73. }
  74. wpsClient.onMessage = handleOaMessage
  75. }
  76. //多进程二次封装
  77. function mult(info,front){
  78. wpsClient.InvokeAsHttp(
  79. pluginName, // 插件名,与wps客户端加载的加载的插件名对应
  80. "dispatcher", // 插件方法入口,与wps客户端加载的加载的插件代码对应,详细见插件代码
  81. info, // 传递给插件的数据        
  82. function (result) { // 调用回调,status为0为成功,其他是错误
  83. if (wpsClient.clientId) {
  84. localStorage.setItem(clientStr, wpsClient.clientId)
  85. }
  86. if (result.status !== 0) {
  87. console.log(result)
  88. if (result.message == '{\"data\": \"Failed to send message to WPS.\"}') {
  89. wpsClient.IsClientRunning(function (status) {
  90. console.log(status)
  91. if (status.response == "Client is running.")
  92. alert("任务发送失败,WPS 正在执行其他任务,请前往WPS完成当前任务")
  93. else {
  94. wpsClient.clientId = "";
  95. wpsClient.notifyRegsitered = false;
  96. localStorage.setItem(clientStr, "")
  97. mult(info)
  98. }
  99. })
  100. return;
  101. }
  102. else if (result.status == 100) {
  103. // WpsInvoke.AuthHttpesCert('请在稍后打开的网页中,点击"高级" => "继续前往",完成授权。')
  104. return;
  105. }
  106. alert(result.message)
  107. } else {
  108. console.log(result.response)
  109. }
  110. },
  111. front)
  112. }
  113. function handleOaMessage(data) {
  114. console.log(data)
  115. }
  116. function GetDemoPath(fileName) {
  117. var url = document.location.host;
  118. return document.location.protocol + "//" + url + "/file/" + fileName;
  119. }
  120. function GetUploadPath() {
  121. var url = document.location.host;
  122. return document.location.protocol + "//" + url + "/Upload";
  123. }
  124. function newDoc() {
  125. _WpsInvoke([{
  126. "OpenDoc": {
  127. showButton: "btnSaveFile;btnSaveAsLocal"
  128. }
  129. }])
  130. }
  131. _wpp['newDoc'] = {
  132. action: newDoc,
  133. code: _WpsInvoke.toString() + "\n\n" + newDoc.toString(),
  134. detail: "\n\
  135. 说明:\n\
  136. 点击按钮,打开演示组件后,新建一个空白演示文档\n\
  137. \n\
  138. 方法使用:\n\
  139. 页面点击按钮,通过wps客户端协议来启动演示组件,调用oaassist插件,执行插件中的js函数OpenDoc,不带文档路径则默认新建一个空白演示文档\n\
  140. funcs参数说明:\n\
  141. OpenDoc方法对应于OA助手dispatcher支持的方法名\n\
  142. showButton 要显示的按钮\n\
  143. "
  144. }
  145. function openDoc() {
  146. var filePath = prompt("请输入打开文件路径(本地或是url):", GetDemoPath("样章.pptx"))
  147. var uploadPath = prompt("请输入文档上传接口:", GetUploadPath())
  148. _WpsInvoke([{
  149. "OpenDoc": {
  150. "docId": "123", // 文档ID
  151. "uploadPath": uploadPath, // 保存文档上传接口
  152. "fileName": filePath,
  153. showButton: "btnSaveFile;btnSaveAsLocal"
  154. }
  155. }])
  156. }
  157. _wpp['openDoc'] = {
  158. action: openDoc,
  159. code: _WpsInvoke.toString() + "\n\n" + openDoc.toString(),
  160. detail: "\n\
  161. 说明:\n\
  162. 点击按钮,输入要打开的文档路径,输入文档上传接口,如果传的不是有效的服务端地址,将无法使用保存上传功能。\n\
  163. 打开演示后,将根据文档路径下载并打开对应的文档,保存将自动上传指定服务器地址\n\
  164. \n\
  165. 方法使用:\n\
  166. 页面点击按钮,通过wps客户端协议来启动演示组件,调用oaassist插件,执行传输数据中的指令\n\
  167. funcs参数信息说明:\n\
  168. OpenDoc方法对应于OA助手dispatcher支持的方法名\n\
  169. docId 文档ID,OA助手用以标记文档的信息,以区分其他文档\n\
  170. uploadPath 保存文档上传接口\n\
  171. fileName 打开的文档路径\n\
  172. showButton 要显示的按钮\n\
  173. "
  174. }
  175. function onlineEditDoc() {
  176. var filePath = prompt("请输入打开文件路径(本地或是url):", GetDemoPath("样章.pptx"))
  177. var uploadPath = prompt("请输入文档上传接口:", GetUploadPath())
  178. _WpsInvoke([{
  179. "OnlineEditDoc": {
  180. "docId": "123", // 文档ID
  181. "uploadPath": uploadPath, // 保存文档上传接口
  182. "fileName": filePath,
  183. showButton: "btnSaveFile;btnSaveAsLocal"
  184. }
  185. }])
  186. }
  187. _wpp['onlineEditDoc'] = {
  188. action: onlineEditDoc,
  189. code: _WpsInvoke.toString() + "\n\n" + onlineEditDoc.toString(),
  190. detail: "\n\
  191. 说明:\n\
  192. 点击按钮,输入要打开的文档路径,输入文档上传接口,如果传的不是有效的服务端地址,将无法使用保存上传功能。\n\
  193. 打开演示后,将根据文档路径下载并打开对应的文档,保存将自动上传指定服务器地址\n\
  194. \n\
  195. 方法使用:\n\
  196. 页面点击按钮,通过wps客户端协议来启动演示组件,调用oaassist插件,执行传输数据中的指令\n\
  197. funcs参数信息说明:\n\
  198. OnlineEditDoc方法对应于OA助手dispatcher支持的方法名\n\
  199. docId 文档ID,OA助手用以标记文档的信息,以区分其他文档\n\
  200. uploadPath 保存文档上传接口\n\
  201. fileName 打开的文档路径\n\
  202. showButton 要显示的按钮\n\
  203. "
  204. }
  205. window.onload = function () {
  206. var btns = document.getElementsByClassName("btn");
  207. for (var i = 0; i < btns.length; i++) {
  208. btns[i].onclick = function (event) {
  209. document.getElementById("blockFunc").style.visibility = "visible";
  210. var btn2 = document.getElementById("demoBtn");
  211. btn2.innerText = this.innerText;
  212. document.getElementById("codeDes").innerText = _wpp[this.id].detail.toString()
  213. document.getElementById("code").innerText = _wpp[this.id].code.toString()
  214. document.getElementById("demoBtn").onclick = _wpp[this.id].action;
  215. hljs.highlightBlock(document.getElementById("code"));
  216. }
  217. }
  218. }