123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774 |
- MWF.xDesktop.requireApp("process.Xform", "$Module", null, false);
- MWF.xApplication.process.Xform.WpsOffice2 = MWF.APPWpsOffice2 = new Class({
- Extends: MWF.APP$Module,
- isActive: false,
- options:{
- "version": "v1.1.8",
- "moduleEvents": ["beforeOpen",
- "afterOpen",
- "afterSave"
- ]
- },
- initialize: function(node, json, form, options){
- this.node = $(node);
- this.node.store("module", this);
- this.json = json;
- this.form = form;
- this.documentId = "";
- this.mode = "write";
- },
- _loadUserInterface: function(){
- this.node.empty();
- this.node.setStyles({
- "min-height": "700px"
- });
- },
- _afterLoaded: function(){
- if(!layout.serviceAddressList["x_wpsfile2_assemble_control"]){
- this.node.set("html","<h3><font color=red>请先安装wps私有化应用</font></h3>");
- return false;
- }
- this.action = o2.Actions.load("x_wpsfile2_assemble_control");
- if (!this.json.isNotLoadNow){
- this.data = this.getData();
- if(this.data.documentId === ""){
- this.createDocument(function (){
- this.loadDocument();
- }.bind(this));
- }else {
- this.documentId = this.data.documentId;
- this.loadDocument();
- }
- }
- },
- createDocument : function (callback){
- var json = {};
- if(this.json.template !== ""){
- json.templateId = this.json.template;
- this.json.officeType = "word";
- }
- if(this.json.fileName !== ""){
- json.fileName = this.json.fileName;
- }
- json.category = "process";
- json.docId = this.form.businessData.work.job;
- this.action.CustomAction.createFileBlank(this.json.officeType,json, function( json ){
- this.documentId = json.data.docId;
- this.setData();
- if (callback) callback();
- }.bind(this),null, false);
- },
- loadDocument: function () {
- this.getEditor(function () {
- this.loadApi(function (){
- this.loadEditor();
- }.bind(this));
- }.bind(this));
- },
- loadApi : function (callback){
- o2.load(["../o2_lib/wps/polyfill.min.js","../o2_lib/wps/web-office-sdk.umd.js"], {"sequence": true}, function () {
- if (callback) callback();
- }.bind(this));
- },
- getEditor: function (callback) {
- if (this.isReadonly()){
- this.mode = "read";
- }else{
- if (this.json.readScript && this.json.readScript.code){
- var flag = this.form.Macro.exec(this.json.readScript.code, this);
- if (flag){
- this.mode = "read";
- }
- }
- }
- this.fireEvent("beforeOpen");
- console.log("wps:" + this.mode);
- this.action.CustomAction.getFileUrl(this.documentId,{"permission":this.mode} ,function( json ){
- this.wpsUrl = json.data.wpsUrl;
- this.wpsToken = json.data.token;
- if(this.json.officeType === "other"){
- if(this.wpsUrl.indexOf("/w/")>-1){
- this.json.officeType = "word";
- }
- if(this.wpsUrl.indexOf("/p/")>-1){
- this.json.officeType = "ppt";
- }
- if(this.wpsUrl.indexOf("/s/")>-1){
- this.json.officeType = "excel";
- }
- }
- if (callback) callback();
- }.bind(this),null,false);
- },
- loadEditor : function (){
- this.wpsOffice = WebOfficeSDK.config({
- url : this.wpsUrl,
- mount: this.node,
- mode : this.json.showMode,
- cooperUserAttribute: {
- isCooperUsersAvatarVisible: this.json.isCooperUsersAvatarVisible //是否显示协作用户头像
- },
- // 通用选项,所有类型文档适用
- commonOptions: {
- isShowTopArea: this.json.isShowTopArea, // 隐藏顶部区域(头部和工具栏)
- isShowHeader: this.json.isShowHeader, // 隐藏头部区域
- isBrowserViewFullscreen : this.json.isBrowserViewFullscreen,//是否在浏览器区域全屏
- isIframeViewFullscreen : this.json.isIframeViewFullscreen//是否在iframe区域内全屏
- },
- wordOptions : {
- isShowDocMap : this.json.isShowDocMap,//是否开启目录功能,默认开启
- isBestScale : this.json.isBestScale,//打开文档时,默认以最佳比例显示(适用于pc)
- isShowBottomStatusBar : this.json.isShowBottomStatusBar,//pc-是否展示底部状态栏
- "mobile.isOpenIntoEdit" : this.json.isOpenIntoEdit//mobile-要有编辑权限,移动端打开时是否进入编辑
- },
- commandBars: [
- {
- cmbId: "HeaderLeft",
- attributes: {
- visible: this.json.HeaderLeft,
- enable: this.json.HeaderLeft
- }
- },
- {
- cmbId: "HeaderRight",
- attributes: {
- visible: this.json.HeaderRight,
- enable: this.json.HeaderRight
- }
- },
- {
- cmbId: "FloatQuickHelp",
- attributes: {
- visible: this.json.FloatQuickHelp,
- enable: this.json.FloatQuickHelp
- }
- },
- {
- cmbId: "HistoryVersion",
- attributes: {
- visible: this.json.HistoryVersion,
- enable: this.json.HistoryVersion
- }
- },
- {
- cmbId: "HistoryRecord",
- attributes: {
- visible: this.json.HistoryRecord,
- enable: this.json.HistoryRecord
- }
- },
- {
- cmbId: "HistoryVersionDivider",
- attributes: {
- visible: this.json.HistoryVersionDivider,
- enable: this.json.HistoryVersionDivider
- }
- },
- {
- cmbId: "Logo",
- attributes: {
- visible: this.json.Logo,
- enable: this.json.Logo
- }
- },
- {
- cmbId: "Cooperation",
- attributes: {
- visible: this.json.Cooperation,
- enable: this.json.Cooperation
- }
- },
- {
- cmbId: "More",
- attributes: {
- visible: this.json.More,
- enable: this.json.More
- }
- },
- {
- cmbId: "SendButton",
- attributes: {
- visible: this.json.SendButton,
- enable: this.json.SendButton
- }
- },
- {
- cmbId: "CooperHistoryMenuItem",
- attributes: {
- visible: this.json.CooperHistoryMenuItem,
- enable: this.json.CooperHistoryMenuItem
- }
- },
- {
- cmbId: "TabPrintPreview",
- attributes: {
- visible: this.json.TabPrintPreview,
- enable: this.json.TabPrintPreview
- }
- },
- {
- cmbId: "MenuPrintPreview",
- attributes: {
- visible: this.json.MenuPrintPreview,
- enable: this.json.MenuPrintPreview
- }
- },
- {
- cmbId: "ReviewTrackChanges",
- attributes: {
- visible: this.json.ReviewTrackChanges,
- enable: this.json.ReviewTrackChanges
- }
- },
- {
- cmbId: "TrackChanges",
- attributes: {
- visible: this.json.TrackChanges,
- enable: this.json.TrackChanges
- }
- },
- {
- cmbId: "ContextMenuConvene",
- attributes: {
- visible: this.json.ContextMenuConvene,
- enable: this.json.ContextMenuConvene
- }
- },
- {
- cmbId: "WriterHoverToolbars",
- attributes: {
- visible: this.json.WriterHoverToolbars,
- enable: this.json.WriterHoverToolbars
- }
- },
- {
- cmbId: "ReadSetting",
- attributes: {
- visible: this.json.ReadSetting,
- enable: this.json.ReadSetting
- }
- }
- ]
- });
- var token = this.wpsToken;
- // 设置token
- // this.wpsOffice.setToken({
- // token: token,
- // timeout: 10000 // token超时时间, 可配合refreshToken配置函数使用,当超时前将调用refreshToken
- // })
- // 打开文档结果
- this.wpsOffice.on('fileOpen', function(result) {
- this.fireEvent("afterOpen");
- }.bind(this));
- this.wpsOffice.on('fileStatus', function(result) {
- if(result.status === 7){
- this.fireEvent("afterSave");
- }
- }.bind(this));
- this.wpsOffice.on('fullscreenChange', function(result) {
- console.log(JSON.stringify(result))
- });
- this.wpsOffice.on('previewLimit', function(result) {
- console.log(JSON.stringify(result))
- });
- this.wpsOffice.on('tabSwitch', function(result) {
- console.log(JSON.stringify(result))
- });
- this.wpsOffice.on('error', function(result) {
- console.log(JSON.stringify(result))
- });
- //是否显示评论
- if(this.json.isShowComment){
- this.showComments();
- }else {
- this.hideComments();
- }
- },
- hide: function(){
- this.node.hide();
- },
- show: function(){
- this.node.show();
- },
- isEmpty : function(){
- var data = this.getData();
- if(data.documentId === ""){
- return true;
- }else {
- return false;
- }
- },
- getData: function(){
- var data = {
- "documentId" : ""
- };
- if(this.form.businessData.data[this.json.id]){
- data.documentId = this.form.businessData.data[this.json.id].documentId;
- }
- return data;
- },
- setData: function(){
- var data = {
- "documentId" : this.documentId
- };
- this._setBusinessData(data);
- },
- save: function(callback){
- var promise = this.wpsOffice.save();
- promise.then(function(){
- console.log("save success");
- if(callback) callback();
- });
- },
- getTotalPage : function (callback){
- var p1 = this.wpsOffice.ready();
- p1.then(function (){
- const app = this.wpsOffice.WordApplication()
- var p2 = app.ActiveDocument.Range.Information(app.Enum.WdInformation.wdNumberOfPagesInDocument);
- p2.then(function(totalPages){
- if(totalPages.End){
- if(callback) callback(totalPages.PagesCount);
- }else {
- promise();
- }
- }.bind(this));
- }.bind(this));
- },
- getCurrentPage: function (callback){
- var p1 = this.wpsOffice.ready();
- p1.then(function(){
- const app = this.wpsOffice.WordApplication();
- var p2 = app.ActiveDocument.Selection.Information(app.Enum.WdInformation.wdActiveEndPageNumber);
- p2.then(function(currentPage){
- if(callback) callback(currentPage);
- });
- }.bind(this));
- },
- gotoPage : function (page){
- var p1 = this.wpsOffice.ready();
- p1.then(function(){
- const app = this.wpsOffice.WordApplication();
- var p2 = app.ActiveDocument.Selection.GoTo({
- What: app.Enum.WdGoToItem.wdGoToPage,
- Which: app.Enum.WdGoToDirection.wdGoToAbsolute,
- Count: page
- });
- p2.then(function(){
- })
- }.bind(this));
- },
- getAllBookmark : function (callback){
- var p1 = this.wpsOffice.ready();
- p1.then(function(){
- const app = this.wpsOffice.WordApplication();
- var p2 = app.ActiveDocument.Bookmarks.Json();
- p2.then(function(bookMarks){
- if(callback) callback(bookMarks);
- });
- }.bind(this));
- },
- getBookmarkText : function (name,callback) {
- var p1 = this.wpsOffice.ready();
- p1.then(function(){
- const app = this.wpsOffice.WordApplication();
- var p2 = app.ActiveDocument.GetBookmarkText(name);
- p2.then(function(text){
- if(callback) callback(text);
- });
- }.bind(this));
- },
- gotoBookmark : function (name){
- var p1 = this.wpsOffice.ready();
- p1.then(function(){
- const app = this.wpsOffice.WordApplication();
- var p2 = app.ActiveDocument.Selection.GoTo({
- What: app.Enum.WdGoToItem.wdGoToBookmark,
- Which: app.Enum.WdGoToDirection.wdGoToAbsolute,
- Name: name
- })
- p2.then(function(){
- });
- }.bind(this));
- },
- setBookmarkText : function (name,value,callback){
- var p1 = this.wpsOffice.ready();
- p1.then(function(){
- const app = this.wpsOffice.WordApplication();
- var p2 = app.ActiveDocument.ReplaceBookmark([{name: name, type: 'text', value: value} ])
- p2.then(function(isReplaceSuccess){
- if(callback) callback(isReplaceSuccess);
- });
- }.bind(this));
- },
- replaceText : function (key,value,options){
- var p1 = this.wpsOffice.ready();
- p1.then(function(){
- const app = this.wpsOffice.WordApplication();
- var p2 = app.ActiveDocument.ReplaceText([{key: key, value: value}])
- p2.then(function(isReplaceSuccess){
- if(callback) callback(isReplaceSuccess);
- });
- }.bind(this));
- },
- startRevisions : function (){
- //开启修订模式
- this.wpsOffice.ready().then(function(){
- const app = this.wpsOffice.Application;
- // 将当前文档的编辑状态切换成修订模式
- app.ActiveDocument.TrackRevisions = true;
- }.bind(this));
- },
- stopRevisions : function (){
- //关闭修订模式
- this.wpsOffice.ready().then(function(){
- const app = this.wpsOffice.Application;
- // 将当前文档的编辑状态切换成修订模式
- app.ActiveDocument.TrackRevisions = false;
- }.bind(this));
- },
- acceptAllRevisions : function (callback){
- //接受所有修订
- this.wpsOffice.ready().then(function(){
- const app = this.wpsOffice.Application;
- // 获取修订对象
- app.ActiveDocument.Revisions.then(function(revisions){
- // 接受对指定文档的所有修订
- revisions.AcceptAll().then(function(){
- if(callback) callback();
- });
- }.bind(this));
- }.bind(this));
- },
- rejectAllRevisions : function (callback){
- //拒绝所有修订
- this.wpsOffice.ready().then(function(){
- const app = this.wpsOffice.Application;
- // 获取修订对象
- app.ActiveDocument.Revisions.then(function(revisions){
- // 拒绝所有修订
- revisions.RejectAll().then(function(){
- if(callback) callback();
- });
- }.bind(this));
- }.bind(this));
- },
- showRevisions : function (){
- //显示痕迹
- this.wpsOffice.ready().then(function(){
- const app = this.wpsOffice.Application;
- // 获取节对象
- app.ActiveDocument.ActiveWindow.View.then(function(View){
- // 设置修订状态为最终状态
- View.RevisionsView = 0;
- // 设置修订状态为 显示标记的最终状态
- View.ShowRevisionsAndComments = true;
- });
- }.bind(this));
- },
- hideRevisions : function (){
- //隐藏
- this.wpsOffice.ready().then(function(){
- const app = this.wpsOffice.Application;
- // 获取节对象
- app.ActiveDocument.ActiveWindow.View.then(function(View){
- // 设置修订状态为最终状态
- View.RevisionsView = 0;
- // 设置修订状态为 显示标记的最终状态
- View.ShowRevisionsAndComments = false;
- });
- }.bind(this));
- },
- addControlButton : function(text,callback){
- this.wpsOffice.ready().then(function(){
- const app = this.wpsOffice.Application;
- app.CommandBars('StartTab').Controls.then(function(controls){
- controls.Add(1).then(function(controlButton){
- controlButton.Caption = text;
- controlButton.OnAction = callback
- });
- });
- }.bind(this));
- },
- print : function (){
- //隐藏
- this.wpsOffice.ready().then(function(){
- const app = this.wpsOffice.Application;
- // 页面定制对象:更多菜单
- app.CommandBars('TabPrintPreview').then(function(printMenu){
- printMenu.Execute();
- });
- }.bind(this));
- },
- exportPDF : function (){
- var p1 = this.wpsOffice.ready();
- p1.then(function(){
- const app = this.wpsOffice.WordApplication();
- var p2;
- switch (this.json.officeType){
- case "word":
- p2 = app.ActiveDocument.ExportAsFixedFormat();
- break;
- case "excel":
- p2 = app.ActiveWorkbook.ExportAsFixedFormat()
- break;
- case "ppt":
- p2 = app.ActivePresentation.ExportAsFixedFormat()
- }
- p2.then(function (pdfUrl){
- window.open(pdfUrl.url);
- });
- }.bind(this));
- },
- getContentControlsCount : function (callback){
- //获取内容控件
- var p1 = this.wpsOffice.ready();
- p1.then(function(){
- const app = this.wpsOffice.WordApplication();
- var p2 = app.ActiveDocument.ContentControls.Count;
- p2.then(function (count){
- if(callback) callback(count);
- });
- }.bind(this));
- },
- getContentControl : function (pos,callback){
- var p1 = this.wpsOffice.ready();
- p1.then(function(){
- const app = this.wpsOffice.WordApplication();
- var p2 = app.ActiveDocument.ContentControls.Item(pos);
- p2.then(function (contentControl){
- var p3 = contentControl.Title;
- var p4 = contentControl.Tag;
- var p5 = contentControl.PlaceholderText;
- var content = {};
- p3.then(function (contentTitle){
- content.contentTitle = contentTitle;
- p4.then(function (contentTag){
- content.contentTag = contentTag;
- p5.then(function (contentPlaceholderText){
- content.contentPlaceholderText = contentPlaceholderText;
- if(callback) callback(content);
- });
- });
- });
- });
- }.bind(this));
- },
- setContentControl : function (pos,contentTitle,contentTag,contentPlaceholderText,callback){
- var p1 = this.wpsOffice.ready();
- p1.then(function(){
- const app = this.wpsOffice.WordApplication();
- var p2 = app.ActiveDocument.ContentControls.Item(pos);
- p2.then(function (contentControl){
- contentControl.Title = contentTitle
- contentControl.Tag = contentTag
- contentControl.SetPlaceholderText({Text: contentPlaceholderText})
- if(callback) callback();
- });
- }.bind(this));
- },
- getOperatorsInfo : function (callback){
- //获取文档权限信息
- var p1 = this.wpsOffice.ready();
- p1.then(function(){
- const app = this.wpsOffice.WordApplication();
- var p2 ;
- switch (this.json.officeType){
- case "word":
- p2 = app.ActiveDocument.GetOperatorsInfo();
- break;
- case "excel":
- p2 = app.ActiveWorkbook.GetOperatorsInfo();
- break;
- case "ppt":
- p2 = app.ActivePresentation.GetOperatorsInfo();
- }
- p2.then(function (operatorsInfo){
- if(callback) callback(operatorsInfo);
- });
- }.bind(this));
- },
- getZoom : function (callback){
- //获取文档缩放
- var p1 = this.wpsOffice.ready();
- p1.then(function(){
- const app = this.wpsOffice.WordApplication();
- var p2 ;
- switch (this.json.officeType){
- case "word":
- p2 = app.ActiveDocument.ActiveWindow.View.Zoom.Percentage
- break;
- case "excel":
- p2 = app.ActiveWorkbook.ActiveSheetView.Zoom
- break;
- case "ppt":
- p2 = app.ActivePresentation.View.Zoom
- }
- p2.then(function (zoom){
- if(callback) callback(zoom);
- });
- }.bind(this));
- },
- setZoom : function (zoom,callback){
- //缩放属性值在50%到 300%之间。
- var p1 = this.wpsOffice.ready();
- p1.then(function(){
- const app = this.wpsOffice.Application;
- switch (this.json.officeType){
- case "word":
- app.ActiveDocument.ActiveWindow.View.Zoom.Percentage = zoom;
- break;
- case "excel":
- app.ActiveWorkbook.ActiveSheetView.Zoom = zoom;
- break;
- case "ppt":
- app.ActivePresentation.View.Zoom = zoom;
- }
- if(callback) callback();
- }.bind(this));
- },
- destroy : function (){
- this.wpsOffice.destroy();
- },
- reload : function (){
- this.destroy();
- this.loadDocument();
- },
- hasComments : function (callback){
- //是否有评论
- this.wpsOffice.ready().then(function(){
- const app = this.wpsOffice.Application;
- var hasComments;
- switch (this.json.officeType){
- case "word":
- hasComments = app.ActiveDocument.HasComments();
- break;
- case "excel":
- hasComments = app.ActiveWorkbook.HasComments();
- break;
- case "ppt":
- hasComments = app.ActivePresentation.HasComments();
- }
- Promise.resolve(hasComments).then(function(comments){
- if(callback) callback(comments);
- });
- }.bind(this));
- },
- showComments : function (){
- this.wpsOffice.ready().then(function(){
- const app = this.wpsOffice.Application;
- // 控制评论显示与否
- app.ActiveDocument.ActiveWindow.View.ShowComments = true;
- }.bind(this));
- },
- hideComments : function (callback){
- this.wpsOffice.ready().then(function(){
- const app = this.wpsOffice.Application;
- // 控制评论显示与否
- app.ActiveDocument.ActiveWindow.View.ShowComments = false;
- }.bind(this));
- },
- getComments : function (callback){
- var p1 = this.wpsOffice.ready();
- p1.then(function (){
- const app = this.wpsOffice.Application;
- var p2 = app.ActiveDocument.GetComments({ Offset: 0, Limit: 2000 });
- p2.then(function (operatorsInfo){
- if(callback) callback(operatorsInfo);
- })
- }.bind(this));
- },
- showPageMode : function (callback){
- //页面模式
- var p1 = this.wpsOffice.ready();
- p1.then(function (){
- const app = this.wpsOffice.Application;
- var p2 = app.ActiveDocument.SwitchTypoMode(false);
- p2.then()
- }.bind(this));
- },
- showUnionPageMode : function (callback){
- //连页模式
- var p1 = this.wpsOffice.ready();
- p1.then(function (){
- const app = this.wpsOffice.Application;
- var p2 = app.ActiveDocument.SwitchTypoMode(true);
- p2.then()
- }.bind(this));
- },
- showFileName : function (callback){
- //显示连页模式下的文件名
- this.showUnionPageMode(function (){
- var p1 = this.wpsOffice.ready();
- p1.then(function (){
- const app = this.wpsOffice.Application;
- var p2 = app.ActiveDocument.SwitchFileName(true);
- p2.then()
- }.bind(this));
- }.bind(this))
- },
- hideFileName : function (callback){
- //显示连页模式下的文件名
- var p1 = this.wpsOffice.ready();
- p1.then(function (){
- const app = this.wpsOffice.Application;
- var p2 = app.ActiveDocument.SwitchFileName(false);
- p2.then()
- }.bind(this));
- },
- showDocumentMap : function (callback){
- // debugger
- //连页模式
- // var promise = async () =>{
- // await this.wpsOffice.ready();
- // const app = this.wpsOffice.Application;
- // app.ActiveDocument.ActiveWindow.DocumentMap = true
- // if(callback) callback();
- // }
- // promise();
- var promise = new Promise(function(resolve, reject){
- this.wpsOffice.ready();
- resolve();
- }.bind(this));
- promise.then(function(){
- const app = this.wpsOffice.Application;
- app.ActiveDocument.ActiveWindow.DocumentMap = true;
- if(callback) callback();
- }.bind(this));
- },
- hideDocumentMap : function (callback){
- //连页模式
- var promise = new Promise(function(resolve, reject){
- this.wpsOffice.ready();
- resolve();
- }.bind(this));
- promise.then(function(){
- const app = this.wpsOffice.Application;
- app.ActiveDocument.ActiveWindow.DocumentMap = false;
- if(callback) callback();
- }.bind(this));
- },
- });
|