No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

func_tabcontrol.js 52KB

hace 7 meses
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431
  1. var EnumOAFlag = {
  2. DocFromOA: 1,
  3. DocFromNoOA: 0
  4. }
  5. //记录是否用户点击OA文件的保存按钮
  6. var EnumDocSaveFlag = {
  7. OADocSave: 1,
  8. NoneOADocSave: 0
  9. }
  10. //标识文档的落地模式 本地文档落地 0 ,不落地 1
  11. var EnumDocLandMode = {
  12. DLM_LocalDoc: 0,
  13. DLM_OnlineDoc: 1
  14. }
  15. //加载时会执行的方法
  16. function OnWPSWorkTabLoad(ribbonUI) {
  17. wps.ribbonUI = ribbonUI;
  18. if (typeof(wps.Enum) == "undefined") { // 如果没有内置枚举值
  19. wps.Enum = WPS_Enum;
  20. }
  21. OnJSWorkInit(); //初始化文档事件(全局参数,挂载监听事件)
  22. // setTimeout(activeTab,2000); // 激活OA助手菜单
  23. OpenTimerRun(OnDocSaveByAutoTimer); //启动定时备份过程
  24. return true;
  25. }
  26. //文档各类初始化工作(WPS Js环境)
  27. function OnJSWorkInit() {
  28. pInitParameters(); //OA助手环境的所有配置控制的初始化过程
  29. AddDocumentEvent(); //挂接文档事件处理函数
  30. }
  31. //初始化全局参数
  32. function pInitParameters() {
  33. wps.PluginStorage.setItem(constStrEnum.OADocUserSave, EnumDocSaveFlag.NoneOADocSave); //初始化,没有用户点击保存按钮
  34. var l_wpsUserName = wps.WpsApplication().UserName;
  35. wps.PluginStorage.setItem(constStrEnum.WPSInitUserName, l_wpsUserName); //在OA助手加载前,先保存用户原有的WPS应用用户名称
  36. wps.PluginStorage.setItem(constStrEnum.OADocCanSaveAs, false); //默认OA文档不能另存为本地
  37. wps.PluginStorage.setItem(constStrEnum.AllowOADocReOpen, false); //设置是否允许来自OA的文件再次被打开
  38. wps.PluginStorage.setItem(constStrEnum.ShowOATabDocActive, false); //设置新打开文档是否默认显示OA助手菜单Tab 默认为false
  39. wps.PluginStorage.setItem(constStrEnum.DefaultUploadFieldName, "file"); //针对UploadFile方法设置上载字段名称
  40. wps.PluginStorage.setItem(constStrEnum.AutoSaveToServerTime, "10"); //自动保存回OA服务端的时间间隔。如果设置0,则关闭,最小设置3分钟
  41. wps.PluginStorage.setItem(constStrEnum.TempTimerID, "0"); //临时值,用于保存计时器ID的临时值
  42. // 以下是一些临时状态参数,用于打开文档等的状态判断
  43. wps.PluginStorage.setItem(constStrEnum.IsInCurrOADocOpen, false); //用于执行来自OA端的新建或打开文档时的状态
  44. wps.PluginStorage.setItem(constStrEnum.IsInCurrOADocSaveAs, false); //用于执行来自OA端的文档另存为本地的状态
  45. wps.PluginStorage.setItem(constStrEnum.RevisionEnableFlag, false) //按钮的标记控制
  46. wps.PluginStorage.setItem(constStrEnum.Save2OAShowConfirm, true); //弹出上传成功后的提示信息
  47. }
  48. //挂载WPS的文档事件
  49. function AddDocumentEvent() {
  50. wps.ApiEvent.AddApiEventListener("WindowActivate", OnWindowActivate);
  51. wps.ApiEvent.AddApiEventListener("DocumentBeforeSave", OnDocumentBeforeSave);
  52. wps.ApiEvent.AddApiEventListener("DocumentBeforeClose", OnDocumentBeforeClose);
  53. wps.ApiEvent.AddApiEventListener("DocumentAfterClose", OnDocumentAfterClose);
  54. wps.ApiEvent.AddApiEventListener("DocumentBeforePrint", OnDocumentBeforePrint);
  55. wps.ApiEvent.AddApiEventListener("DocumentOpen", OnDocumentOpen);
  56. wps.ApiEvent.AddApiEventListener("DocumentNew", OnDocumentNew);
  57. // wps.ApiEvent.AddApiEventListener("NewDocument", OnDocumentNew);
  58. console.log("AddDocumentEvent");
  59. }
  60. /**
  61. * 打开插入书签页面
  62. */
  63. function OnInsertBookmarkToDoc() {
  64. if (!wps.WpsApplication().ActiveDocument) {
  65. return;
  66. }
  67. OnShowDialog("selectBookmark.html", "自定义书签", 700, 440, false);
  68. }
  69. /**
  70. * 作用:打开当前文档的页面设置对话框
  71. */
  72. function OnPageSetupClicked() {
  73. var wpsApp = wps.WpsApplication();
  74. var doc = wpsApp.ActiveDocument;
  75. if (!doc) {
  76. return;
  77. }
  78. wpsApp.Dialogs.Item(wps.Enum&&wps.Enum.wdDialogFilePageSetup||178).Show();
  79. }
  80. /**
  81. * 作用:打开当前文档的打印设置对话框
  82. */
  83. function OnPrintDocBtnClicked() {
  84. var wpsApp = wps.WpsApplication();
  85. var doc = wpsApp.ActiveDocument;
  86. if (!doc) {
  87. return;
  88. }
  89. wpsApp.Dialogs.Item(wps.Enum&&wps.Enum.wdDialogFilePrint||88).Show();
  90. }
  91. /**
  92. * 作用:接受所有修订内容
  93. *
  94. */
  95. function OnAcceptAllRevisions() {
  96. //获取当前文档对象
  97. var l_Doc = wps.WpsApplication().ActiveDocument;
  98. if (!l_Doc) {
  99. return;
  100. }
  101. if (l_Doc.Revisions.Count >= 1) {
  102. if (!wps.confirm("目前有" + l_Doc.Revisions.Count + "个修订信息,是否全部接受?")) {
  103. return;
  104. }
  105. l_Doc.AcceptAllRevisions();
  106. }
  107. }
  108. /**
  109. * 作用:拒绝当前文档的所有修订内容
  110. */
  111. function OnRejectAllRevisions() {
  112. var l_Doc = wps.WpsApplication().ActiveDocument;
  113. if (!l_Doc) {
  114. return;
  115. }
  116. if (l_Doc.Revisions.Count >= 1) {
  117. l_Doc.RejectAllRevisions();
  118. }
  119. }
  120. /**
  121. * 作用:把当前文档修订模式关闭
  122. */
  123. function OnCloseRevisions() {
  124. //获取当前文档对象
  125. var l_Doc = wps.WpsApplication().ActiveDocument;
  126. OnRevisionsSwitch(l_Doc, false);
  127. }
  128. /**
  129. * 作用:把当前文档修订模式打开
  130. */
  131. function OnOpenRevisions() {
  132. //获取当前文档对象
  133. var l_Doc = wps.WpsApplication().ActiveDocument;
  134. OnRevisionsSwitch(l_Doc, true);
  135. }
  136. function OnRevisionsSwitch(doc, openRevisions) {
  137. if (!doc) {
  138. return;
  139. }
  140. var l_activeWindow = doc.ActiveWindow;
  141. if (l_activeWindow) {
  142. var v = l_activeWindow.View;
  143. if (v) {
  144. //WPS 显示使用“修订”功能对文档所作的修订和批注
  145. v.ShowRevisionsAndComments = openRevisions;
  146. //WPS 显示从文本到修订和批注气球之间的连接线
  147. v.RevisionsBalloonShowConnectingLines = openRevisions;
  148. }
  149. if (openRevisions == true) {
  150. //去掉修改痕迹信息框中的接受修订和拒绝修订勾叉,使其不可用
  151. wps.WpsApplication().CommandBars.ExecuteMso("KsoEx_RevisionCommentModify_Disable");
  152. }
  153. //RevisionsMode:
  154. //wdBalloonRevisions 0 在左边距或右边距的气球中显示修订。
  155. //wdInLineRevisions 1 在正文中显示修订,使用删除线表示删除,使用下划线表示插入。
  156. // 这是 Word 早期版本的默认设置。
  157. //wdMixedRevisions 2 不支持。
  158. doc.TrackRevisions = openRevisions; // 开关修订
  159. l_activeWindow.ActivePane.View.RevisionsMode = 2; //2为不支持气球显示。
  160. }
  161. }
  162. /**
  163. * 作用:打开扫描仪
  164. */
  165. function OnOpenScanBtnClicked() {
  166. var doc = wps.WpsApplication().ActiveDocument;
  167. if (!doc) {
  168. return;
  169. }
  170. //打开扫描仪
  171. try {
  172. wps.WpsApplication().WordBasic.InsertImagerScan(); //打开扫描仪
  173. } catch (err) {
  174. alert("打开扫描仪的过程遇到问题。");
  175. }
  176. }
  177. /**
  178. * 作用:在文档的当前光标处插入从前端传递来的图片
  179. * OA参数中 picPath 是需要插入的图片路径
  180. * 图片插入的默认版式是在浮于文档上方
  181. */
  182. function DoInsertPicToDoc() {
  183. console.log("DoInsertPicToDoc...");
  184. var l_doc; //文档对象
  185. l_doc = wps.WpsApplication().ActiveDocument;
  186. if (!l_doc) {
  187. return;
  188. }
  189. //获取当前文档对象对应的OA参数
  190. var l_picPath = GetDocParamsValue(l_doc, constStrEnum.picPath); // 获取OA参数传入的图片路径
  191. if (l_picPath == "") {
  192. // alert("未获取到系统传入的图片URL路径,不能正常插入图片");
  193. // return;
  194. //如果没有传,则默认写一个图片地址
  195. l_picPath="http://127.0.0.1:3888/file/OA模板公章.png"
  196. }
  197. var l_picHeight = GetDocParamsValue(l_doc, constStrEnum.picHeight); //图片高
  198. var l_picWidth = GetDocParamsValue(l_doc, constStrEnum.picWidth); //图片宽
  199. if (l_picHeight == "") { //设定图片高度
  200. l_picHeight = 39.117798; //13.8mm=39.117798磅
  201. }
  202. if (l_picWidth == "") { //设定图片宽度
  203. l_picWidth = 72; //49.7mm=140.880768磅
  204. }
  205. var l_shape = l_doc.Shapes.AddPicture(l_picPath, false, true);
  206. l_shape.Select();
  207. // l_shape.WrapFormat.Type = wps.Enum&&wps.Enum.wdWrapBehind||5; //图片的默认版式为浮于文字上方,可通过此设置图片环绕模式
  208. }
  209. /**
  210. * 作用:模拟插入签章图片
  211. * @param {*} doc 文档对象
  212. * @param {*} picPath 图片路径
  213. * @param {*} picWidth 图片宽度
  214. * @param {*} picHeight 图片高度
  215. */
  216. function OnInsertPicToDoc(doc, picPath, picWidth, picHeight,callBack) {
  217. // alert("图片路径:"+picPath);
  218. if (!doc) {
  219. return;
  220. }
  221. if (typeof picPath == "undefined" || picPath == null || picPath == "") {
  222. alert("未获取到系统传入的图片URL路径,不能正常插入印章");
  223. return;
  224. }
  225. if (!picWidth) { //设定图片宽度
  226. picWidth = 95; //49.7mm=140.880768磅
  227. }
  228. if (!picHeight) { //设定图片高度
  229. picHeight = 40; //13.8mm=39.117798磅
  230. }
  231. var selection = doc.ActiveWindow.Selection; // 活动窗口选定范围或插入点
  232. var pagecount = doc.BuiltInDocumentProperties.Item(wps.Enum&&wps.Enum.wdPropertyPages||14); //获取文档页数
  233. selection.GoTo(wps.Enum&&wps.Enum.wdGoToPage||1, wps.Enum&&wps.Enum.wdGoToPage||1, pagecount.Value); //将光标指向文档最后一页
  234. DownloadFile(picPath,function(url){
  235. selection.ParagraphFormat.LineSpacing = 12 //防止文档设置了固定行距
  236. var picture = selection.InlineShapes.AddPicture(url, true, true); //插入图片
  237. wps.FileSystem.Remove(url) //删除本地的图片
  238. picture.LockAspectRatio = 0; //在调整形状大小时可分别改变其高度和宽度
  239. picture.Height = picHeight; //设定图片高度
  240. picture.Width = picWidth; //设定图片宽度
  241. picture.LockAspectRatio = 0;
  242. picture.Select(); //当前图片为焦点
  243. //定义印章图片对象
  244. var seal_shape = picture.ConvertToShape(); //类型转换:嵌入型图片->粘贴版型图片
  245. seal_shape.RelativeHorizontalPosition = wps.Enum&&wps.Enum.wdRelativeHorizontalPositionPage||1;
  246. seal_shape.RelativeVerticalPosition = wps.Enum&&wps.Enum.wdRelativeVerticalPositionPage||1;
  247. seal_shape.Left = 315; //设置指定形状或形状范围的垂直位置(以磅为单位)。
  248. seal_shape.Top = 630; //指定形状或形状范围的水平位置(以磅为单位)。
  249. callBack&&callBack()
  250. })
  251. }
  252. /**
  253. * 作用: 把当前文档保存为其他格式的文档并上传
  254. * @param {*} p_FileSuffix 输出的目标格式后缀名,支持:.pdf .uof .uot .ofd
  255. * @param {*} pShowPrompt 是否弹出用户确认框
  256. */
  257. function OnDoChangeToOtherDocFormat(p_FileSuffix, pShowPrompt) {
  258. var l_suffix = p_FileSuffix; // params.suffix;
  259. if (!l_suffix) {
  260. return;
  261. }
  262. //获取当前执行格式转换操作的文档
  263. var l_doc = wps.WpsApplication().ActiveDocument;
  264. if (!l_doc) {
  265. return;
  266. }
  267. console.log(pShowPrompt)
  268. if (typeof(pShowPrompt) == "undefined") {
  269. pShowPrompt = true; //默认设置为弹出用户确认框
  270. }
  271. //默认设置为以当前文件的显示模式输出,即当前为修订则输出带有修订痕迹的
  272. pDoChangeToOtherDocFormat(l_doc, l_suffix, pShowPrompt, true);
  273. }
  274. /**
  275. * 作用:获取文档的Path或者临时文件路径
  276. * @param {*} doc
  277. */
  278. function getDocSavePath(doc) {
  279. if (!doc) {
  280. return;
  281. }
  282. if (doc.Path == "") { //对于不落地文档,文档路径为空
  283. return wps.Env.GetTempPath();
  284. } else {
  285. return doc.Path
  286. }
  287. }
  288. /**
  289. * 作用:把当前文档输出为另外的格式保存
  290. * @param {*} p_Doc 文档对象
  291. * @param {*} p_Suffix 另存为的目标文件格式
  292. * @param {*} pShowPrompt 是否弹出用户确认框
  293. * @param {*} p_ShowRevision :是否强制关闭修订,如果是False,则强制关闭痕迹显示。如果为true则不做控制输出。
  294. */
  295. function pDoChangeToOtherDocFormat(p_Doc, p_Suffix, pShowPrompt, p_ShowRevision) {
  296. if (!p_Doc) {
  297. return;
  298. }
  299. var l_suffix = p_Suffix;
  300. //获取该文档对应OA参数的上载路径
  301. var l_uploadPath = GetDocParamsValue(p_Doc, constStrEnum.uploadAppendPath);
  302. if (l_uploadPath == "" || l_uploadPath == null) {
  303. l_uploadPath = GetDocParamsValue(p_Doc, constStrEnum.uploadPath);
  304. }
  305. var l_FieldName = GetDocParamsValue(p_Doc, constStrEnum.uploadFieldName);
  306. if (l_FieldName == "") {
  307. l_FieldName = wps.PluginStorage.getItem(constStrEnum.DefaultUploadFieldName); //默认是'file'
  308. }
  309. if (l_uploadPath == "" && pShowPrompt == true) {
  310. alert("系统未传入有效上载文件路径!不能继续转换操作。"); //如果OA未传入上载路径,则给予提示
  311. return;
  312. }
  313. if (pShowPrompt == true) {
  314. if (!wps.confirm("当前文档将另存一份" + l_suffix + " 格式的副本,并上传到系统后台,请确认 ?")) {
  315. return;
  316. }
  317. }
  318. // 先把文档输出保存为指定的文件格式,再上传到后台
  319. wps.PluginStorage.setItem(constStrEnum.OADocUserSave, true); //设置一个临时变量,用于在BeforeSave事件中判断
  320. if (p_ShowRevision == false) { // 强制关闭痕迹显示
  321. var l_SourceName = p_Doc.Name;
  322. var l_NewName="";
  323. var docPath=getDocSavePath(p_Doc);
  324. if(docPath.indexOf("\\")>0){
  325. l_NewName = docPath + "\\B_" + p_Doc.Name;
  326. }else{
  327. l_NewName = docPath + "/B_" + p_Doc.Name;
  328. }
  329. if(docPath.indexOf("\\")>0){
  330. l_SourceName = docPath + "\\" + l_SourceName;
  331. }else{
  332. l_SourceName = docPath + "/" + l_SourceName;
  333. }
  334. p_Doc.SaveAs2($FileName = l_NewName, $AddToRecentFiles = false);
  335. p_Doc.SaveAs2($FileName = l_SourceName, $AddToRecentFiles = false);
  336. //以下以隐藏模式打开另一个文档
  337. var l_textEncoding = wps.WpsApplication().Options.DefaultTextEncoding; //默认 936
  338. var l_Doc = wps.WpsApplication().Documents.Open(l_NewName, false, false, false, "", "", false, "", "", 0, l_textEncoding, false);
  339. l_Doc.TrackRevisions = false; //关闭修订模式
  340. l_Doc.ShowRevisions = false; //隐含属性,隐藏修订模式
  341. l_Doc.AcceptAllRevisions();
  342. l_Doc.Save();
  343. handleFileAndUpload(l_suffix, l_Doc, l_uploadPath, l_FieldName);
  344. l_Doc.Close();
  345. wps.FileSystem.Remove(l_NewName); //删除临时文档
  346. } else {
  347. handleFileAndUpload(l_suffix, p_Doc, l_uploadPath, l_FieldName);
  348. }
  349. wps.PluginStorage.setItem(constStrEnum.OADocUserSave, false);
  350. return;
  351. }
  352. /**
  353. * 把文档转换成UOT在上传
  354. */
  355. function OnDoChangeToUOF() {}
  356. /**
  357. * 打开WPS云文档的入口
  358. */
  359. function pDoOpenWPSCloundDoc() {
  360. wps.TabPages.Add("https://www.kdocs.cn");
  361. }
  362. /**
  363. * 执行另存为本地文件操作
  364. */
  365. function OnBtnSaveAsLocalFile() {
  366. //初始化临时状态值
  367. wps.PluginStorage.setItem(constStrEnum.OADocUserSave, false);
  368. wps.PluginStorage.setItem(constStrEnum.IsInCurrOADocSaveAs, false);
  369. //检测是否有文档正在处理
  370. var l_doc = wps.WpsApplication().ActiveDocument;
  371. if (!l_doc) {
  372. alert("WPS当前没有可操作文档!");
  373. return;
  374. }
  375. // 设置WPS文档对话框 2 FileDialogType:=msoFileDialogSaveAs
  376. var l_ksoFileDialog = wps.WpsApplication().FileDialog(2);
  377. l_ksoFileDialog.InitialFileName = l_doc.Name; //文档名称
  378. if (l_ksoFileDialog.Show() == -1) { // -1 代表确认按钮
  379. //alert("确认");
  380. wps.PluginStorage.setItem(constStrEnum.OADocUserSave, true); //设置保存为临时状态,在Save事件中避免OA禁止另存为对话框
  381. l_ksoFileDialog.Execute(); //会触发保存文档的监听函数
  382. pSetNoneOADocFlag(l_doc);
  383. wps.ribbonUI.Invalidate(); //刷新Ribbon的状态
  384. };
  385. }
  386. //
  387. /**
  388. * 作用:执行清稿按钮操作
  389. * 业务功能:清除所有修订痕迹和批注
  390. */
  391. function OnBtnClearRevDoc() {
  392. var doc = wps.WpsApplication().ActiveDocument;
  393. if (!doc) {
  394. alert("尚未打开文档,请先打开文档再进行清稿操作!");
  395. }
  396. //执行清稿操作前,给用户提示
  397. if (!wps.confirm("清稿操作将接受所有的修订内容,关闭修订显示。请确认执行清稿操作?")) {
  398. return;
  399. }
  400. //接受所有修订
  401. if (doc.Revisions.Count >= 1) {
  402. doc.AcceptAllRevisions();
  403. }
  404. //去除所有批注
  405. if (doc.Comments.Count >= 1) {
  406. doc.RemoveDocumentInformation(wps.Enum&&wps.Enum.wdRDIComments||1);
  407. }
  408. //删除所有ink墨迹对象
  409. pDeleteAllInkObj(doc);
  410. doc.TrackRevisions = false; //关闭修订模式
  411. wps.ribbonUI.InvalidateControl("btnOpenRevision");
  412. return;
  413. }
  414. /**
  415. * 作用:删除当前文档的所有墨迹对象
  416. * @param {*} p_Doc
  417. */
  418. function pDeleteAllInkObj(p_Doc) {
  419. var l_Count = 0;
  420. var l_IsInkObjExist = true;
  421. while (l_IsInkObjExist == true && l_Count < 20) {
  422. l_IsInkObjExist = pDeleteInkObj(p_Doc);
  423. l_Count++;
  424. }
  425. return;
  426. }
  427. /**
  428. * 删除墨迹对象
  429. */
  430. function pDeleteInkObj(p_Doc) {
  431. var l_IsInkObjExist = false;
  432. if (p_Doc) {
  433. for (var l_Index = 1; l_Index <= p_Doc.Shapes.Count; l_Index++) {
  434. var l_Item = p_Doc.Shapes.Item(l_Index);
  435. if (l_Item.Type == 23) {
  436. l_Item.Delete();
  437. //只要有一次找到Ink类型,就标识一下
  438. if (l_IsInkObjExist == false) {
  439. l_IsInkObjExist = true;
  440. }
  441. }
  442. }
  443. }
  444. return l_IsInkObjExist;
  445. }
  446. /**
  447. *
  448. */
  449. function pSaveAnotherDoc(p_Doc) {
  450. if (!p_Doc) {
  451. return;
  452. }
  453. var l_SourceDocName = p_Doc.Name;
  454. var l_NewName = "BK_" + l_SourceDocName;
  455. p_Doc.SaveAs2(l_NewName);
  456. wps.WpsApplication().Documents.Open();
  457. }
  458. //保存到OA后台服务器
  459. function OnBtnSaveToServer() {
  460. // console.log('SaveToServer');
  461. var l_doc = wps.WpsApplication().ActiveDocument;
  462. if (!l_doc) {
  463. alert("空文档不能保存!");
  464. return;
  465. }
  466. //非OA文档,不能上传到OA
  467. if (pCheckIfOADoc() == false) {
  468. alert("非系统打开的文档,不能直接上传到系统!");
  469. return;
  470. }
  471. //如果是OA打开的文档,并且设置了保护的文档,则不能再上传到OA服务器
  472. if (pISOADocReadOnly(l_doc)) {
  473. wps.alert("系统设置了保护的文档,不能再提交到系统后台。");
  474. return;
  475. }
  476. /**
  477. * 参数定义:OAAsist.UploadFile(name, path, url, field, "OnSuccess", "OnFail")
  478. * 上传一个文件到远程服务器。
  479. * name:为上传后的文件名称;
  480. * path:是文件绝对路径;
  481. * url:为上传地址;
  482. * field:为请求中name的值;
  483. * 最后两个参数为回调函数名称;
  484. */
  485. var l_uploadPath = GetDocParamsValue(l_doc, constStrEnum.uploadPath); // 文件上载路径
  486. if (l_uploadPath == "") {
  487. wps.alert("系统未传入文件上载路径,不能执行上传操作!");
  488. return;
  489. }
  490. var l_showConfirm = wps.PluginStorage.getItem(constStrEnum.Save2OAShowConfirm)
  491. if (l_showConfirm) {
  492. if (!wps.confirm("先保存文档,并开始上传到系统后台,请确认?")) {
  493. return;
  494. }
  495. }
  496. var l_FieldName = GetDocParamsValue(l_doc, constStrEnum.uploadFieldName); //上载到后台的业务方自定义的字段名称
  497. if (l_FieldName == "") {
  498. l_FieldName = wps.PluginStorage.getItem(constStrEnum.DefaultUploadFieldName); // 默认为‘file’
  499. }
  500. var l_UploadName = GetDocParamsValue(l_doc, constStrEnum.uploadFileName); //设置OA传入的文件名称参数
  501. if (l_UploadName == "") {
  502. l_UploadName = l_doc.Name; //默认文件名称就是当前文件编辑名称
  503. }
  504. var l_DocPath = l_doc.FullName; // 文件所在路径
  505. if (pIsOnlineOADoc(l_doc) == false) {
  506. //对于本地磁盘文件上传OA,先用Save方法保存后,再上传
  507. //设置用户保存按钮标志,避免出现禁止OA文件保存的干扰信息
  508. wps.PluginStorage.setItem(constStrEnum.OADocUserSave, EnumDocSaveFlag.OADocSave);
  509. if (l_doc.Path == "") { //对于不落地文档,文档路径为空
  510. l_doc.SaveAs2(wps.Env.GetTempPath() + "/" + l_doc.Name, undefined, undefined, undefined, false);
  511. } else {
  512. l_doc.Save();
  513. }
  514. //执行一次保存方法
  515. //设置用户保存按钮标志
  516. wps.PluginStorage.setItem(constStrEnum.OADocUserSave, EnumDocSaveFlag.NoneOADocSave);
  517. //落地文档,调用UploadFile方法上传到OA后台
  518. l_DocPath = l_doc.FullName;
  519. try {
  520. //调用OA助手的上传方法
  521. UploadFile(l_UploadName, l_DocPath, l_uploadPath, l_FieldName, OnUploadToServerSuccess, OnUploadToServerFail);
  522. } catch (err) {
  523. alert("上传文件失败!请检查系统上传参数及网络环境!");
  524. }
  525. } else {
  526. // 不落地的文档,调用 Document 对象的不落地上传方法
  527. wps.PluginStorage.setItem(constStrEnum.OADocUserSave, EnumDocSaveFlag.OADocSave);
  528. try {
  529. //调用不落地上传方法
  530. l_doc.SaveAsUrl(l_UploadName, l_uploadPath, l_FieldName, "OnUploadToServerSuccess", "OnUploadToServerFail");
  531. } catch (err) {
  532. alert("上传文件失败!请检查系统上传参数及网络环境,重新上传。");
  533. }
  534. wps.PluginStorage.setItem(constStrEnum.OADocUserSave, EnumDocSaveFlag.NoneOADocSave);
  535. }
  536. //获取OA传入的 转其他格式上传属性
  537. var l_suffix = GetDocParamsValue(l_doc, constStrEnum.suffix);
  538. if (l_suffix == "") {
  539. console.log("上传需转换的文件后缀名错误,无法进行转换上传!");
  540. return;
  541. }
  542. //判断是否同时上传PDF等格式到OA后台
  543. var l_uploadWithAppendPath = GetDocParamsValue(l_doc, constStrEnum.uploadWithAppendPath); //标识是否同时上传suffix格式的文档
  544. if (l_uploadWithAppendPath == "1") {
  545. //调用转pdf格式函数,强制关闭转换修订痕迹,不弹出用户确认的对话框
  546. pDoChangeToOtherDocFormat(l_doc, l_suffix, false, false);
  547. }
  548. return;
  549. }
  550. /**
  551. * 作用:套红头
  552. * 所有与OA系统相关的业务功能,都放在oabuss 子目录下
  553. */
  554. function OnInsertRedHeaderClick() {
  555. var l_Doc = wps.WpsApplication().ActiveDocument;
  556. if (!l_Doc) {
  557. return;
  558. }
  559. var l_insertFileUrl = GetDocParamsValue(l_Doc, constStrEnum.insertFileUrl); //插入文件的位置
  560. var l_BkFile = GetDocParamsValue(l_Doc, constStrEnum.bkInsertFile);
  561. if (l_BkFile == "" || l_insertFileUrl == "") {
  562. var height = 250;
  563. var width = 400;
  564. OnShowDialog("redhead.html", "OA助手", width, height);
  565. return;
  566. }
  567. InsertRedHeadDoc(l_Doc);
  568. }
  569. /**
  570. * 插入时间
  571. * params参数结构
  572. * params:{
  573. *
  574. * }
  575. */
  576. function OnInsertDateClicked() {
  577. var l_Doc = wps.WpsApplication().ActiveDocument;
  578. if (l_Doc) {
  579. //打开插入日期对话框
  580. wps.WpsApplication().Dialogs.Item(wps.Enum&&wps.Enum.wdDialogInsertDateTime||165).Show();
  581. }
  582. }
  583. /**
  584. * 调用文件上传到OA服务端时,
  585. * @param {*} resp
  586. */
  587. function OnUploadToServerSuccess(resp) {
  588. console.log("成功上传服务端后的回调:" + resp)
  589. console.log(resp)
  590. var l_doc = wps.WpsApplication().ActiveDocument;
  591. var l_showConfirm = wps.PluginStorage.getItem(constStrEnum.Save2OAShowConfirm);
  592. if (l_showConfirm) {
  593. if (wps.confirm("文件上传成功!继续编辑请确认,取消关闭文档。") == false) {
  594. if (l_doc) {
  595. console.log("OnUploadToServerSuccess: before Close");
  596. l_doc.Close(-1); //保存文档后关闭
  597. console.log("OnUploadToServerSuccess: after Close");
  598. }
  599. }
  600. }
  601. var l_NofityURL = GetDocParamsValue(l_doc, constStrEnum.notifyUrl);
  602. if (l_NofityURL != "") {
  603. l_NofityURL = l_NofityURL.replace("{?}", "2"); //约定:参数为2则文档被成功上传
  604. NotifyToServer(l_NofityURL);
  605. }
  606. }
  607. function OnUploadToServerFail(resp) {
  608. alert("文件上传失败!");
  609. }
  610. function OnbtnTabClick() {
  611. alert("OnbtnTabClick");
  612. }
  613. //判断当前文档是否是OA文档
  614. function pCheckIfOADoc() {
  615. var doc = wps.WpsApplication().ActiveDocument;
  616. if (!doc)
  617. return false;
  618. return CheckIfDocIsOADoc(doc);
  619. }
  620. //根据传入的doc对象,判断当前文档是否是OA文档
  621. function CheckIfDocIsOADoc(doc) {
  622. if (!doc) {
  623. return false;
  624. }
  625. var l_isOA = GetDocParamsValue(doc, constStrEnum.isOA);
  626. if (l_isOA == "") {
  627. return false
  628. };
  629. return l_isOA == EnumOAFlag.DocFromOA ? true : false;
  630. }
  631. //获取文件来源标识
  632. function pGetDocSourceLabel() {
  633. return pCheckIfOADoc() ? "OA文件" : "非OA文件";
  634. }
  635. /**
  636. * 作用:设置用户名称标签
  637. */
  638. function pSetUserNameLabelControl() {
  639. var l_doc = wps.WpsApplication().ActiveDocument;
  640. if (!l_doc) return "";
  641. var l_strUserName = "";
  642. if (pCheckIfOADoc() == true) { // OA文档,获取OA用户名
  643. var userName = GetDocParamsValue(l_doc, constStrEnum.userName);
  644. l_strUserName = userName == "" ? "未设置" : userName;
  645. } else {
  646. //非OA传来的文档,则按WPS安装后设置的用户名显示
  647. l_strUserName = "" + wps.PluginStorage.getItem(constStrEnum.WPSInitUserName);
  648. }
  649. return l_strUserName;
  650. }
  651. /**
  652. * 作用:判断是否是不落地文档
  653. * 参数:doc 文档对象
  654. * 返回值: 布尔值
  655. */
  656. function pIsOnlineOADoc(doc) {
  657. var l_LandMode = GetDocParamsValue(doc, constStrEnum.OADocLandMode); //获取文档落地模式
  658. if (l_LandMode == "") { //用户本地打开的文档
  659. return false;
  660. }
  661. return l_LandMode == EnumDocLandMode.DLM_OnlineDoc;
  662. }
  663. /**
  664. * 作用:返回OA文档落地模式标签
  665. */
  666. function pGetOADocLabel() {
  667. var l_Doc = wps.WpsApplication().ActiveDocument;
  668. if (!l_Doc) {
  669. return "";
  670. }
  671. var l_strLabel = ""; //初始化
  672. if (pIsOnlineOADoc(l_Doc) == true) { // 判断是否为不落地文档
  673. l_strLabel = "文档状态:不落地";
  674. } else {
  675. l_strLabel = l_Doc.Path != "" ? "文档状态:落地" : "文档状态:未保存";
  676. }
  677. //判断OA文档是否是受保护
  678. if (pISOADocReadOnly(l_Doc) == true) {
  679. l_strLabel = l_strLabel + "(保护)";
  680. }
  681. return l_strLabel;
  682. }
  683. //返回是否可以点击OA保存按钮的状态
  684. function OnSetSaveToOAEnable() {
  685. return pCheckIfOADoc();
  686. }
  687. /**
  688. * 作用:根据OA传入参数,设置是否显示Ribbob按钮组
  689. * 参数:CtrlID 是OnGetVisible 传入的Ribbob控件的ID值
  690. */
  691. function pShowRibbonGroupByOADocParam(CtrlID) {
  692. var l_Doc = wps.WpsApplication().ActiveDocument;
  693. if (!l_Doc) {
  694. return false; //如果未装入文档,则设置OA助手按钮组不可见
  695. }
  696. //获取OA传入的按钮组参数组
  697. var l_grpButtonParams = GetDocParamsValue(l_Doc, constStrEnum.buttonGroups); //disableBtns
  698. l_grpButtonParams = l_grpButtonParams + "," + GetDocParamsValue(l_Doc, constStrEnum.disableBtns);
  699. // 要求OA传入控制自定义按钮显示的参数为字符串 中间用 , 分隔开
  700. if (typeof(l_grpButtonParams) == "string") {
  701. var l_arrayGroup = new Array();
  702. l_arrayGroup = l_grpButtonParams.split(",");
  703. //console.log(l_grpButtonParams);
  704. // 判断当前按钮是否存在于数组
  705. if (l_arrayGroup.indexOf(CtrlID) >= 0) {
  706. return false;
  707. }
  708. }
  709. // 添加OA菜单判断
  710. if (CtrlID == "WPSWorkExtTab") {
  711. if(wps.WpsApplication().ActiveDocument){
  712. let l_value=GetDocParamsValue(wps.WpsApplication().ActiveDocument,"isOA");
  713. return l_value?true:false;
  714. }
  715. var l_value = wps.PluginStorage.getItem(constStrEnum.ShowOATabDocActive);
  716. wps.PluginStorage.setItem(constStrEnum.ShowOATabDocActive, false); //初始化临时状态变量
  717. console.log("菜单:" + l_value);
  718. return l_value;
  719. }
  720. return true;
  721. }
  722. /**
  723. * 根据传入Document对象,获取OA传入的参数的某个Key值的Value
  724. * @param {*} Doc
  725. * @param {*} Key
  726. * 返回值:返回指定 Key的 Value
  727. */
  728. function GetDocParamsValue(Doc, Key) {
  729. if (!Doc) {
  730. return "";
  731. }
  732. var l_Params = wps.PluginStorage.getItem(Doc.DocID);
  733. if (!l_Params) {
  734. return "";
  735. }
  736. var l_objParams = JSON.parse(l_Params);
  737. if (typeof(l_objParams) == "undefined") {
  738. return "";
  739. }
  740. var l_rtnValue = l_objParams[Key];
  741. if (typeof(l_rtnValue) == "undefined" || l_rtnValue == null) {
  742. return "";
  743. }
  744. return l_rtnValue;
  745. }
  746. /**
  747. * 获取对象中指定属性的值
  748. * @param {*} params
  749. * @param {*} Key
  750. */
  751. function GetParamsValue(Params, Key) {
  752. if (typeof(Params) == "undefined") {
  753. return "";
  754. }
  755. var l_rtnValue = Params[Key];
  756. return l_rtnValue;
  757. }
  758. /**
  759. * 作用:插入二维码图片
  760. */
  761. function OnInsertQRCode() {
  762. OnShowDialog("QRCode.html", "插入二维码", 400, 400);
  763. }
  764. /**
  765. * 打开本地文档并插入到当前文档中指定位置(导入文档)
  766. */
  767. function OnOpenLocalFile() {
  768. OpenLocalFile();
  769. }
  770. /**
  771. * 插入水印
  772. */
  773. function DoInsertWaterToDoc(){
  774.     var app, shapeRange;
  775.     try {
  776.         // app = wpsFrame.Application;
  777.         var app=wps.WpsApplication();
  778.         var doc = app.ActiveDocument;
  779.         var selection = doc.ActiveWindow.Selection;
  780.         var pageCount = app.ActiveWindow.ActivePane.Pages.Count;
  781.         for(var i=1;i<=pageCount;i++){
  782.             selection.GoTo(1, 1, i);
  783. app.ActiveWindow.ActivePane.View.SeekView=9;
  784.             app.ActiveDocument.Sections.Item(1).Headers.Item(1).Shapes.AddTextEffect(0, "公司绝密", "华文新魏", 36, false, false, 0, 0).Select();
  785.             shapeRange = app.Selection.ShapeRange;
  786.             shapeRange.TextEffect.NormalizedHeight = false;
  787.             shapeRange.Line.Visible = false;
  788.             shapeRange.Fill.Visible = true;
  789.             shapeRange.Fill.Solid();
  790.             shapeRange.Fill.ForeColor.RGB = 12632256;       /* WdColor枚举 wdColorGray25 代表颜色值 */
  791.             shapeRange.Fill.Transparency = 0.5;             /* 填充透明度,值为0.0~1.0 */
  792.             shapeRange.LockAspectRatio = true;
  793.             shapeRange.Height = 4.58 * 28.346;
  794.             shapeRange.Width = 28.07 * 28.346;
  795.             shapeRange.Rotation = 315;                      /* 图形按照Z轴旋转度数,正值为顺时针旋转,负值为逆时针旋转 */
  796.             shapeRange.WrapFormat.AllowOverlap = true;
  797.             shapeRange.WrapFormat.Side = 3;                 /* WdWrapSideType枚举 wdWrapLargest 形状距离页边距最远的一侧 */
  798.             shapeRange.WrapFormat.Type = 3;                 
  799.             shapeRange.RelativeHorizontalPosition = 0;      
  800.             shapeRange.RelativeVerticalPosition = 0;        
  801.             shapeRange.Left = '-999995';                   
  802.             shapeRange.Top = '-999995';                     
  803.            
  804.         }                  /* WdShapePosition枚举 wdShapeCenter 形状的位置在中央 */
  805.         selection.GoTo(1, 1, 1);
  806. app.ActiveWindow.ActivePane.View.SeekView=0;
  807.     } catch (error) {
  808.         alert(error.message);
  809.     }
  810. }
  811. /**
  812. * 插入电子印章的功能
  813. */
  814. function OnInsertSeal() {
  815. OnShowDialog("selectSeal.html", "印章", 730, 500);
  816. }
  817. /**
  818. * 导入模板到文档中
  819. */
  820. function OnImportTemplate() {
  821. OnShowDialog("importTemplate.html", "导入模板", 560, 400);
  822. }
  823. //自定义菜单按钮的点击执行事件
  824. function OnAction(control) {
  825. var eleId;
  826. if (typeof control == "object" && arguments.length == 1) { //针对Ribbon的按钮的
  827. eleId = control.Id;
  828. } else if (typeof control == "undefined" && arguments.length > 1) { //针对idMso的
  829. eleId = arguments[1].Id;
  830. console.log(eleId)
  831. } else if (typeof control == "boolean" && arguments.length > 1) { //针对checkbox的
  832. eleId = arguments[1].Id;
  833. } else if (typeof control == "number" && arguments.length > 1) { //针对combox的
  834. eleId = arguments[2].Id;
  835. }
  836. switch (eleId) {
  837. case "btnOpenWPSYUN": //打开WPS云文档入口
  838. pDoOpenWPSCloundDoc();
  839. break;
  840. case "btnOpenLocalWPSYUN": //打开本地文档并插入到文档中
  841. OnOpenLocalFile();
  842. break;
  843. case "WPSWorkExtTab":
  844. OnbtnTabClick();
  845. break;
  846. case "btnSaveToServer": //保存到OA服务器
  847. wps.PluginStorage.setItem(constStrEnum.Save2OAShowConfirm, true)
  848. OnBtnSaveToServer();
  849. break;
  850. case "btnSaveAsFile": //另存为本地文件
  851. OnBtnSaveAsLocalFile();
  852. break;
  853. case "btnChangeToPDF": //转PDF文档并上传
  854. OnDoChangeToOtherDocFormat(".pdf");
  855. break;
  856. case "btnChangeToUOT": //转UOF文档并上传
  857. OnDoChangeToOtherDocFormat(".uof");
  858. break;
  859. case "btnChangeToOFD": //转OFD文档并上传
  860. OnDoChangeToOtherDocFormat(".ofd");
  861. break;
  862. //------------------------------------
  863. case "btnInsertRedHeader": //插入红头
  864. OnInsertRedHeaderClick(); //套红头功能
  865. break;
  866. case "btnUploadOABackup": //文件备份
  867. OnUploadOABackupClicked();
  868. break;
  869. case "btnInsertSeal": //插入印章
  870. OnInsertSeal();
  871. break;
  872. //------------------------------------
  873. //修订按钮组
  874. case "btnClearRevDoc": //执行 清稿 按钮
  875. OnBtnClearRevDoc();
  876. break;
  877. case "btnOpenRevision": //打开修订
  878. {
  879. let bFlag = wps.PluginStorage.getItem(constStrEnum.RevisionEnableFlag)
  880. wps.PluginStorage.setItem(constStrEnum.RevisionEnableFlag, !bFlag)
  881. //通知wps刷新以下几个按钮的状态
  882. wps.ribbonUI.InvalidateControl("btnOpenRevision")
  883. wps.ribbonUI.InvalidateControl("btnCloseRevision")
  884. OnOpenRevisions(); //
  885. break;
  886. }
  887. case "btnCloseRevision": //关闭修订
  888. {
  889. let bFlag = wps.PluginStorage.getItem(constStrEnum.RevisionEnableFlag)
  890. wps.PluginStorage.setItem(constStrEnum.RevisionEnableFlag, !bFlag)
  891. //通知wps刷新以下几个按钮的状态
  892. wps.ribbonUI.InvalidateControl("btnOpenRevision")
  893. wps.ribbonUI.InvalidateControl("btnCloseRevision")
  894. OnCloseRevisions();
  895. break;
  896. }
  897. case "btnShowRevision":
  898. break;
  899. case "btnAcceptAllRevisions": //接受所有修订功能
  900. OnAcceptAllRevisions();
  901. break;
  902. case "btnRejectAllRevisions": //拒绝修订
  903. OnRejectAllRevisions();
  904. break;
  905. //------------------------------------
  906. case "btnInsertPic": //插入图片
  907. DoInsertPicToDoc();
  908. break;
  909. case "btnInsertWater":
  910. DoInsertWaterToDoc()
  911. case "btnInsertDate": //插入日期
  912. OnInsertDateClicked();
  913. break;
  914. case "btnOpenScan": //打开扫描仪
  915. OnOpenScanBtnClicked();
  916. break;
  917. case "btnPageSetup": //打开页面设置
  918. OnPageSetupClicked();
  919. break;
  920. case "btnQRCode": //插入二维码
  921. OnInsertQRCode(); //
  922. break;
  923. case "btnPrintDOC": // 打开打印设置
  924. OnPrintDocBtnClicked();
  925. break;
  926. case "lblDocSourceValue": //OA公文提示
  927. OnOADocInfo();
  928. break;
  929. case "btnUserName": //点击用户
  930. OnUserNameSetClick();
  931. break;
  932. case "btnInsertBookmark": //插入书签
  933. OnInsertBookmarkToDoc();
  934. break;
  935. case "btnImportTemplate": //导入模板
  936. OnImportTemplate();
  937. break;
  938. case "FileSaveAsMenu": //通过idMso进行「另存为」功能的自定义
  939. case "FileSaveAs":
  940. {
  941. if (pCheckIfOADoc()) { //文档来源是业务系统的,做自定义
  942. alert("这是OA文档,将Ctrl+S动作做了重定义,可以调用OA的保存文件流到业务系统的接口。")
  943. OnBtnSaveToServer();
  944. } else { //本地的文档,期望不做自定义,通过转调idMso的方法实现
  945. wps.WpsApplication().CommandBars.ExecuteMso("FileSaveAsWordDocx");
  946. //此处一定不能去调用与重写idMso相同的ID,否则就是个无线递归了,即在这个场景下不可调用FileSaveAs和FileSaveAsMenu这两个方法
  947. }
  948. break;
  949. }
  950. case "FileSave": //通过idMso进行「保存」功能的自定义
  951. {
  952. if (pCheckIfOADoc()) { //文档来源是业务系统的,做自定义
  953. alert("这是OA文档,将Ctrl+S动作做了重定义,可以调用OA的保存文件流到业务系统的接口。")
  954. OnBtnSaveToServer();
  955. } else { //本地的文档,期望不做自定义,通过转调idMso的方法实现
  956. // wps.WpsApplication().CommandBars.ExecuteMso("FileSave");
  957. wps.WpsApplication().CommandBars.ExecuteMso("SaveAll");
  958. //此处一定不能去调用与重写idMso相同的ID,否则就是个无线递归了,即在这个场景下不可调用FileSaveAs和FileSaveAsMenu这两个方法
  959. }
  960. break;
  961. }
  962. case "FileNew":
  963. case "FileNewMenu":
  964. case "WindowNew":
  965. case "FileNewBlankDocument":
  966. {
  967. if (pCheckIfOADoc()) { //文档来源是业务系统的,做自定义
  968. alert("这是OA文档,将Ctrl+N动作做了禁用")
  969. }
  970. }
  971. break
  972. case "ShowAlert_ContextMenuText":
  973. {
  974. let selectText = wps.WpsApplication().Selection.Text;
  975. alert("您选择的内容是:\n" + selectText);
  976. break;
  977. }
  978. case "btnSendMessage1":
  979. {
  980. /**
  981. * 内部封装了主动响应前端发送的请求的方法
  982. */
  983. //参数自定义,这里只是负责传递参数,在WpsInvoke.RegWebNotify方法的回调函数中去做接收,自行解析参数
  984. let params={
  985. type:'executeFunc1',
  986. message:"当前时间为:" + currentTime()
  987. }
  988. /**
  989. * WebNotify:
  990. * 参数1:发送给业务系统的消息
  991. * 参数2:是否将消息加入队列,是否防止丢失消息,都需要设置为true
  992. */
  993. wps.OAAssist.WebNotify(JSON.stringify(params),true); //如果想传一个对象,则使用JSON.stringify方法转成对象字符串。
  994. break;
  995. }
  996. case "btnSendMessage2":
  997. {
  998. /**
  999. * 内部封装了主动响应前端发送的请求的方法
  1000. */
  1001. let msgInfo =
  1002. {
  1003. id: 1,
  1004. name: 'kingsoft',
  1005. since: "1988"
  1006. }
  1007. //参数自定义,这里只是负责传递参数,在WpsInvoke.RegWebNotify方法的回调函数中去做接收,自行解析参数
  1008. let params={
  1009. type:'executeFunc2',
  1010. message:"当前时间为:" + currentTime(),
  1011. msgInfoStr: JSON.stringify(msgInfo)
  1012. }
  1013. /**
  1014. * WebNotify:
  1015. * 参数1:发送给业务系统的消息
  1016. * 参数2:是否将消息加入队列,是否防止丢失消息,都需要设置为true
  1017. */
  1018. wps.OAAssist.WebNotify(JSON.stringify(params),true); //如果想传一个对象,则使用JSON.stringify方法转成对象字符串。
  1019. break;
  1020. }
  1021. case "btnAddWebShape":
  1022. {
  1023. let l_doc = wps.WpsApplication().ActiveDocument;
  1024. l_doc.Shapes.AddWebShape("https://www.wps.cn");
  1025. break;
  1026. }
  1027. default:
  1028. break;
  1029. }
  1030. return true;
  1031. }
  1032. /**
  1033. * 作用:重新设置当前用户名称
  1034. */
  1035. function OnUserNameSetClick() {
  1036. var l_UserPageUrl = "setUserName.html"
  1037. OnShowDialog(l_UserPageUrl, "OA助手用户名称设置", 500, 300);
  1038. }
  1039. /**
  1040. * 作用:展示当前文档,被OA助手打开后的,操作记录及相关附加信息
  1041. */
  1042. function OnOADocInfo() {
  1043. return;
  1044. }
  1045. /**
  1046. * 作用:自定义菜单按钮的图标
  1047. */
  1048. function GetImage(control) {
  1049. var eleId;
  1050. if (typeof control == "object" && arguments.length == 1) { //针对Ribbon的按钮的
  1051. eleId = control.Id;
  1052. } else if (typeof control == "undefined" && arguments.length > 1) { //针对idMso的
  1053. eleId = arguments[1].Id;
  1054. } else if (typeof control == "boolean" && arguments.length > 1) { //针对checkbox的
  1055. eleId = arguments[1].Id;
  1056. } else if (typeof control == "number" && arguments.length > 1) { //针对combox的
  1057. eleId = arguments[2].Id;
  1058. }
  1059. switch (eleId) {
  1060. case "btnOpenWPSYUN":
  1061. return "./icon/w_WPSCloud.png"; //打开WPS云文档
  1062. case "btnOpenLocalWPSYUN": //导入文件
  1063. return "./icon/w_ImportDoc.png"
  1064. case "btnSaveToServer": //保存到OA后台服务端
  1065. return "./icon/w_Save.png";
  1066. case "btnSaveAsFile": //另存为本地文件
  1067. return "./icon/w_SaveAs.png";
  1068. case "btnChangeToPDF": //输出为PDF格式
  1069. return "./icon/w_PDF.png";
  1070. case "btnChangeToUOT": //
  1071. return "./icon/w_DocUOF.png";
  1072. case "btnChangeToOFD": //转OFD上传
  1073. return "./icon/w_DocOFD.png"; //
  1074. case "btnInsertRedHeader": //套红头
  1075. return "./icon/w_GovDoc.png";
  1076. case "btnInsertSeal": //印章
  1077. return "./icon/c_seal.png";
  1078. case "btnClearRevDoc": //清稿
  1079. return "./icon/w_DocClear.png"
  1080. case "btnUploadOABackup": //备份正文
  1081. return "./icon/w_BackDoc.png";
  1082. case "btnOpenRevision": //打开 修订
  1083. case "btnShowRevision": //
  1084. return "./icon/w_OpenRev.png";
  1085. case "btnCloseRevision": //关闭修订
  1086. return "./icon/w_CloseRev.png";
  1087. case "btnAcceptAllRevisions": // 接受修订
  1088. return "./icon/w_AcceptRev.png";
  1089. case "btnRejectAllRevisions": // 拒绝修订
  1090. return "./icon/w_RejectRev.png";
  1091. case "btnSaveAsFile":
  1092. return "";
  1093. case "btnInsertWater":
  1094. case "btnInsertPic": //插入图片
  1095. return "./icon/w_InsPictures.png";
  1096. case "btnOpenScan": //打开扫描仪
  1097. return "./icon/w_Scanner16.png"; //
  1098. case "btnPageSetup": //打开页面设置
  1099. return "./icon/w_PageGear.png";
  1100. case "btnInsertDate": //插入日期
  1101. return "./icon/w_InsDate.png";
  1102. case "btnQRCode": //二维码
  1103. return "./icon/w_DocQr.png";
  1104. case "btnPrintDOC": // 打印设置
  1105. return "./icon/c_printDoc.png";
  1106. case "btnInsertBookmark":
  1107. return "./icon/c_bookmark.png";
  1108. case "btnImportTemplate":
  1109. return "./icon/w_ImportDoc.png";
  1110. case "btnSendMessage1":
  1111. return "./icon/3.svg"
  1112. case "btnSendMessage2":
  1113. return "./icon/3.svg"
  1114. default:
  1115. ;
  1116. }
  1117. return "./icon/c_default.png";
  1118. }
  1119. function pGetOpenRevisionButtonLabel() {
  1120. return "打开修订";
  1121. }
  1122. function pGetShowRevisionButtonLabel() {
  1123. return "显示修订";
  1124. }
  1125. //xml文件中自定义按钮的文字处理函数
  1126. function OnGetLabel(control) {
  1127. var eleId;
  1128. if (typeof control == "object" && arguments.length == 1) { //针对Ribbon的按钮的
  1129. eleId = control.Id;
  1130. } else if (typeof control == "undefined" && arguments.length > 1) { //针对idMso的
  1131. eleId = arguments[1].Id;
  1132. } else if (typeof control == "boolean" && arguments.length > 1) { //针对checkbox的
  1133. eleId = arguments[1].Id;
  1134. } else if (typeof control == "number" && arguments.length > 1) { //针对combox的
  1135. eleId = arguments[2].Id;
  1136. }
  1137. switch (eleId) {
  1138. case "btnOpenWPSYUN": //打开WPS云文档
  1139. return "WPS云文档";
  1140. case "btnOpenLocalWPSYUN": //打开本地云文档目录
  1141. return "导入文档";
  1142. case "btnSaveAsFile":
  1143. return "另存为本地";
  1144. case "btnChangeToPDF": //转PDF并上传
  1145. return "转PDF上传";
  1146. case "btnChangeToUOT": //转UOF并上传
  1147. return "转UOF上传";
  1148. case "btnChangeToOFD": //转OFD格式并上传
  1149. return "转OFD上传";
  1150. case "lblDocSourceValue": //文件来源标签:
  1151. return pGetDocSourceLabel();
  1152. case "lblUserName": //用户名:lableControl 控件
  1153. return "编辑人:"; //pSetUserNameLabelControl();
  1154. case "btnUserName":
  1155. return pSetUserNameLabelControl();
  1156. //======================================================
  1157. case "btnInsertRedHeader": //套红头
  1158. return "套红头";
  1159. case "btnInsertSeal": //插入印章
  1160. return "印章";
  1161. case "btnUploadOABackup": //文件备份
  1162. return "文件备份";
  1163. //======================================================
  1164. case "btnOpenRevision": //打开修订按钮
  1165. return pGetOpenRevisionButtonLabel();
  1166. case "btnShowRevision": //显示修订按钮
  1167. return pGetShowRevisionButtonLabel();
  1168. case "btnCloseRevision": //关闭修订按钮
  1169. return "关闭修订";
  1170. case "btnClearRevDoc": //显示 清稿
  1171. return "清稿";
  1172. case "btnAcceptAllRevisions": //显示 接受修订
  1173. return "接受修订";
  1174. case "btnRejectAllRevisions": //显示 拒绝修订
  1175. return "拒绝修订";
  1176. case "lblDocLandMode": //显示 文档落地方式 :不落地还是本地,包括是否受保护
  1177. return pGetOADocLabel();
  1178. //---------------------------------------------
  1179. case "btnInsertPic": //插入图片
  1180. return "插图片";
  1181. case "btnInsertDate": //插入日期
  1182. return "插日期";
  1183. case "btnOpenScan": //打开扫描仪
  1184. return "扫描仪";
  1185. case "btnInsertWater":
  1186. return "插入水印"
  1187. case "btnPageSetup": //打开页面设置
  1188. return "页面设置";
  1189. case "btnPrintDOC": //打开页面设置
  1190. return "打印设置";
  1191. case "btnInsertBookmark":
  1192. return "导入书签";
  1193. case "btnImportTemplate":
  1194. return "导入模板";
  1195. default:
  1196. ;
  1197. }
  1198. return "";
  1199. }
  1200. /**
  1201. * 作用:处理Ribbon按钮的是否可显示
  1202. * @param {*} control :Ribbon 的按钮控件
  1203. */
  1204. function OnGetVisible(control) {
  1205. var eleId;
  1206. if (typeof control == "object" && arguments.length == 1) { //针对Ribbon的按钮的
  1207. eleId = control.Id;
  1208. } else if (typeof control == "undefined" && arguments.length > 1) { //针对idMso的
  1209. eleId = arguments[1].Id;
  1210. } else if (typeof control == "boolean" && arguments.length > 1) { //针对checkbox的
  1211. eleId = arguments[1].Id;
  1212. } else if (typeof control == "number" && arguments.length > 1) { //针对combox的
  1213. eleId = arguments[2].Id;
  1214. }
  1215. var l_value = false;
  1216. //关闭一些测试中的功能
  1217. switch (eleId) {
  1218. case "lblDocLandMode": //文档落地标签
  1219. return true;
  1220. case "btnOpenScan":
  1221. return false;
  1222. case "btnAddWebShape":
  1223. {
  1224. if (wps.WpsApplication().Build.toString().indexOf("11.1") != -1){
  1225. return true;
  1226. }
  1227. return false;
  1228. }
  1229. break;
  1230. default:
  1231. }
  1232. //按照 OA文档传递过来的属性进行判断
  1233. l_value = pShowRibbonGroupByOADocParam(eleId);
  1234. return l_value;
  1235. }
  1236. /**
  1237. * 作用:处理Ribbon按钮的是否可用
  1238. * @param {*} control :Ribbon 的按钮控件
  1239. */
  1240. function OnGetEnabled(control) {
  1241. var eleId;
  1242. if (typeof control == "object" && arguments.length == 1) { //针对Ribbon的按钮的
  1243. eleId = control.Id;
  1244. } else if (typeof control == "undefined" && arguments.length > 1) { //针对idMso的
  1245. eleId = arguments[1].Id;
  1246. } else if (typeof control == "boolean" && arguments.length > 1) { //针对checkbox的
  1247. eleId = arguments[1].Id;
  1248. } else if (typeof control == "number" && arguments.length > 1) { //针对combox的
  1249. eleId = arguments[2].Id;
  1250. }
  1251. switch (eleId) {
  1252. case "btnSaveToServer": //保存到OA服务器的相关按钮。判断,如果非OA文件,禁止点击
  1253. case "btnChangeToPDF": //保存到PDF格式再上传
  1254. case "btnChangeToUOT": //保存到UOT格式再上传
  1255. case "btnChangeToOFD": //保存到OFD格式再上传
  1256. case "SaveAll": //保存所有文档
  1257. //以下四个idMso的控制是关于文档新建的
  1258. case "FileNew":
  1259. case "FileNewMenu":
  1260. case "WindowNew":
  1261. case "FileNewBlankDocument":
  1262. return OnSetSaveToOAEnable();
  1263. case "btnCloseRevision":
  1264. {
  1265. let bFlag = wps.PluginStorage.getItem(constStrEnum.RevisionEnableFlag)
  1266. return bFlag
  1267. }
  1268. case "btnOpenRevision":
  1269. {
  1270. let bFlag = wps.PluginStorage.getItem(constStrEnum.RevisionEnableFlag)
  1271. return !bFlag
  1272. }
  1273. case "PictureInsert":
  1274. return false;
  1275. case "TabInsert"://WPS自身tab:插入
  1276. case "TabDeveloper": //WPS自身tab:开发工具
  1277. // case "TabPageLayoutWord": //WPS自身tab:页面布局
  1278. // case "TabReferences": //WPS自身tab:引用
  1279. // case "TabReviewWord": //WPS自身tab:审阅
  1280. // case "TabView": //WPS自身tab:视图
  1281. {
  1282. if(pCheckIfOADoc()){
  1283. return false;//如果是OA打开的文档,把这个几个tab不可用/隐藏
  1284. }else{
  1285. return true;
  1286. }
  1287. }
  1288. default:
  1289. ;
  1290. }
  1291. return true;
  1292. }