index.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. <!--onlyoffice 编辑器-->
  2. <template>
  3. <div id='jjtOnlyOffice'></div>
  4. </template>
  5. <script>
  6. export default {
  7. name: 'jjtOnlyOffice',
  8. props: {
  9. option: {
  10. type: Object,
  11. default: () => {
  12. return {}
  13. },
  14. },
  15. },
  16. data() {
  17. return {
  18. doctype: '',
  19. docEditor: null,
  20. }
  21. },
  22. beforeDestroy() {
  23. if (this.docEditor !== null) {
  24. this.docEditor.destroyEditor();
  25. this.docEditor = null;
  26. }
  27. },
  28. watch: {
  29. option: {
  30. handler: function(n) {
  31. this.setEditor(n)
  32. this.doctype = this.getDocType(n.fileType)
  33. },
  34. deep: true,
  35. },
  36. },
  37. mounted() {
  38. // let script = document.createElement("script");
  39. // script.type = "text/javascript";
  40. // script.src = `${window.location.origin}:19531/web-apps/apps/api/documents/api.js`;
  41. // document.body.appendChild(script);
  42. // if (this.option.url) {
  43. // this.setEditor(this.option)
  44. // }
  45. },
  46. methods: {
  47. async setEditor(option) {
  48. if (this.docEditor !== null) {
  49. this.docEditor.destroyEditor();
  50. this.docEditor = null;
  51. }
  52. this.doctype = this.getDocType(option.fileType);
  53. console.log(this.doctype);
  54. console.log(option.key);
  55. let config = {
  56. document: {
  57. fileType: option.fileType, //后缀
  58. key: option.key || '',
  59. title: option.title,
  60. permissions: {
  61. edit: option.isEdit, //是否可以编辑: 只能查看,传false
  62. print: false, //是否可以打印
  63. download: false, //是否可以下载
  64. // "fillForms": true,//是否可以填写表格,如果将mode参数设置为edit,则填写表单仅对文档编辑器可用。 默认值与edit或review参数的值一致。
  65. // "review": true //跟踪变化
  66. },
  67. url: option.url,
  68. },
  69. documentType: this.doctype,
  70. editorConfig: {
  71. callbackUrl: option.editUrl, //"编辑word后保存时回调的地址,这个api需要自己写了,将编辑后的文件通过这个api保存到自己想要的位置
  72. lang: 'zh-CN', //语言设置
  73. //定制
  74. customization: {
  75. autosave: false, //是否自动保存
  76. chat: true,
  77. comments: true,
  78. help: false,
  79. // "hideRightMenu": false,//定义在第一次加载时是显示还是隐藏右侧菜单。 默认值为false
  80. //是否显示插件
  81. plugins: false,
  82. spellcheck: false, //定义在加载编辑器时是否自动打开或关闭拼写检查器。拼写检查器仅适用于文档编辑器和演示文稿编辑器。默认值为true。
  83. customer: {
  84. //开源版无效,商业版才行
  85. address: "My City, 123a-45",
  86. info: "Some additional information",
  87. logo: "https://example.com/logo-big.png",
  88. logoDark: "https://example.com/dark-logo-big.png",
  89. mail: "john@example.com",
  90. name: "John Smith and Co.",
  91. phone: "123456789",
  92. www: "example.com"
  93. },
  94. },
  95. user: {
  96. id: option.user.id+'',
  97. name: option.user.name
  98. },
  99. mode: option.model ? option.model : 'edit',
  100. // 定义共享编辑模式(快速fast/严格strict), change为控制是否允许修改
  101. coEditing: {
  102. mode: 'fast',
  103. change: true
  104. }
  105. },
  106. width: document.body.clientWidth -400,
  107. height: document.body.clientHeight - 100,
  108. token: option.token || ''
  109. }
  110. // eslint-disable-next-line no-undef,no-unused-vars
  111. this.docEditor = new DocsAPI.DocEditor('jjtOnlyOffice', config)
  112. },
  113. /*
  114. * 通过扩展名获取文档类型
  115. * text对应各种文档类型(.doc, .docm, .docx, .dot, .dotm, .dotx, .epub, .fodt, .htm, .html, .mht, .odt, .ott, .pdf, .rtf, .txt, .djvu, .xps)
  116. * spreadsheet对应表格类型(.csv, .fods, .ods, .ots, .xls, .xlsm, .xlsx, .xlt, .xltm, .xltx)
  117. * presentation对应PPT类型(.fodp, .odp, .otp, .pot, .potm, .potx, .pps, .ppsm, .ppsx, .ppt, .pptm, .pptx)
  118. */
  119. getDocType(fileType) {
  120. let docType = '';
  121. for (const type in fileTypeMap) {
  122. if (fileTypeMap[type].includes(fileType)) {
  123. docType = type;
  124. break;
  125. }
  126. }
  127. return docType;
  128. }
  129. },
  130. }
  131. const fileTypeMap = {
  132. 'word': ['doc', 'docm', 'docx', 'dot', 'dotm', 'dotx', 'epub', 'fodt', 'htm', 'html', 'mht', 'odt', 'ott',
  133. 'pdf', 'rtf', 'txt', 'djvu', 'xps', 'wps'
  134. ],
  135. 'cell': ['csv', 'fods', 'ods', 'ots', 'xls', 'xlsm', 'xlsx', 'xlt', 'xltm', 'xltx'],
  136. 'slide': ['fodp', 'odp', 'otp', 'pot', 'potm', 'potx', 'pps', 'ppsm', 'ppsx', 'ppt', 'pptm', 'pptx']
  137. }
  138. </script>
  139. <!-- let config = {
  140. "document": {
  141. "documentType": "text",
  142. "width": "100%", //打开窗口宽度
  143. "height": "100%", //打开窗口高度
  144. "fileType": fileType, //文档类型
  145. "key": key, //定义用于服务识别文档的唯一文档标识符。每次编辑和保存文档时,都必须重新生成密钥。长度限制为128个符号。
  146. "title": title, //为查看或编辑的文档定义所需的文件名,该文件名也将在下载文档时用作文件名。长度限制为128个符号。
  147. "url": url, //定义存储原始查看或编辑的文档的绝对URL
  148. "info": {
  149. "owner": "王重阳", //文件创建者名称
  150. "sharingSettings": [ //文件对应用户的操作权限配置
  151. {
  152. "permissions": "Full Access", // 完全操作权限-Full Access,只读权限-Read Only 拒绝访问-Deny Access
  153. "user": "林朝英" //有次权限的用户
  154. },
  155. {
  156. "permissions": "Read Only",
  157. "user": "周伯通"
  158. },
  159. ],
  160. "uploaded": "2010-07-07 3:46 PM" //文件创建时间
  161. },
  162. //文档权限参数
  163. "permissions": {
  164. "edit": true, //(文件是否可以编辑,false时文件不可编辑)
  165. "fillForms": true, //定义是否能在文档中填充表单
  166. "print": true, //定义文档是否能打印
  167. "review": false, //第一是否显示审阅文档菜单
  168. "comment": true, //定义是否可以注释文档。如果注释权限设置为“ true”,则文档侧栏将包含“注释”菜单选项;只有将mode参数设置为edit时才生效,默认值与edit参数的值一致。
  169. "copy": true, //是否允许您将内容复制到剪贴板。默认值为true。
  170. "download": true, //定义是否可以下载文档或仅在线查看或编辑文档。如果下载权限设置为“false”下载为菜单选项将没有。默认值为true。
  171. "modifyContentControl": true, //定义是否可以更改内容控件设置。仅当mode参数设置为edit时,内容控件修改才可用于文档编辑器。默认值为true。
  172. "modifyFilter": true, //定义过滤器是否可以全局应用(true)影响所有其他用户,或局部应用(false),即仅适用于当前用户。如果将mode参数设置为edit,则过滤器修改仅对电子表格编辑器可用。默认值为true。
  173. }
  174. },
  175. // type: "embedded",
  176. //打开文档类型
  177. // text对应各种文档类型(.doc, .docm, .docx, .dot, .dotm, .dotx, .epub, .fodt, .htm, .html, .mht, .odt, .ott, .pdf, .rtf, .txt, .djvu, .xps)
  178. //spreadsheet对应表格类型(.csv, .fods, .ods, .ots, .xls, .xlsm, .xlsx, .xlt, .xltm, .xltx)
  179. //presentation对应PPT类型(.fodp, .odp, .otp, .pot, .potm, .potx, .pps, .ppsm, .ppsx, .ppt, .pptm, .pptx)
  180. "editorConfig": { //编辑配置
  181. "createUrl": "http://docServer:port/url-to-create-document/", //指定创建文件的页面,添加该配置后文档服务器插件才会显示新建文件按钮
  182. "mode": model, //文档操作模式 view 视图模式不可编辑 edit 编辑模式可编辑文档
  183. "callbackUrl": callbackUrl, //保存文件时的回调地址
  184. "lang": "zh-CN", //语言环境
  185. "customization": { //定制部分允许自定义编辑器界面,使其看起来像您的其他产品,并更改是否存在其他按钮,链接,更改徽标和编辑者所有者详细信息。
  186. "help": false, //定义是显示还是隐藏“帮助”菜单按钮。默认值为true。
  187. "hideRightMenu": false, //定义在第一次加载时是显示还是隐藏右侧菜单。默认值为false。
  188. "autosave": false, //定义是启用还是禁用“自动保存”菜单选项。请注意,如果您在菜单中更改此选项,它将被保存到浏览器的localStorage中。默认值为true。
  189. "forcesave": true, //定义保存按钮是否显示默认false
  190. "chat": false, //定义“聊天”菜单按钮是显示还是隐藏;请注意,如果您隐藏“聊天”按钮,则相应的聊天功能也将被禁用。默认值为true。
  191. "commentAuthorOnly": false, //定义用户是否只能编辑和删除他的评论。默认值为false。
  192. "comments": false, //定义是显示还是隐藏“注释”菜单按钮;请注意,如果您隐藏“评论”按钮,则相应的评论功能将仅可用于查看,评论的添加和编辑将不可用。默认值为true。
  193. "compactHeader": false, //定义是否将菜单栏放在在徽标旁边使界面更加紧凑默认false。
  194. "compactToolbar": false, //定义显示的顶部工具栏类型是完整(false)还是紧凑true。默认值为false 多余菜单将在右侧折叠点击显示。
  195. "compatibleFeatures": false, //定义仅与OOXML格式兼容的功能的使用。例如,不要在整个文档上使用注释。默认值为false。
  196. "macros": false, //定义是否将运行文档宏以及可用的宏设置。默认值为true。
  197. "macrosMode": "warn", //定义是否将运行文档宏。可以采用以下值: disable -根本不运行;enable -自动运行所有宏;warn -警告宏并请求允许运行。默认值为original。
  198. "plugins": false, //定义是否将启动插件并可用。默认值为true。
  199. "showReviewChanges": false, //定义在加载编辑器时是否自动显示或隐藏审阅更改面板。默认值为false。
  200. "spellcheck": false, //定义在加载编辑器时是否自动打开或关闭拼写检查器。拼写检查器仅适用于文档编辑器和演示文稿编辑器。默认值为true。
  201. "toolbarNoTabs": false, //定义是突出显示顶部工具栏选项卡样式。默认值为false。
  202. "unit": "cm", //定义在标尺和对话框中使用的度量单位。可以采用以下值:cm -厘米,pt-点,inch -英寸。默认值为厘米(cm)。
  203. "zoom": 100, //定义以百分比为单位的文档显示缩放值。可以取大于0的值。对于文本文档和演示文稿,可以将此参数设置为-1(使文档适合页面选项)或-2(使文档页面宽度适合编辑器页面)。默认值为100。
  204. "customer": { //关于 文档编辑器的显示信息
  205. "address": "My City, 123a-45", //有权访问编辑或编辑作者的公司或个人的邮政地址,
  206. "info": "Some additional information", //有关您希望其他人认识的公司或个人的一些其他信息,
  207. "logo": "https://example.com/logo-big.png", //图片徽标的路径(此文件没有特别建议,但是如果使用透明背景的.png格式会更好)。图片必须具有以下尺寸:432x70,
  208. "mail": "john@example.com", //有权访问编辑者或编辑者的公司或个人的电子邮件地址
  209. "name": "欧阳锋", //该公司或个人的谁可以访问编辑或编辑作者,名称
  210. "www": "example.com" //以上公司或个人的家庭网站地址,
  211. },
  212. "feedback": { //反馈配置信息
  213. "url": "https://example.com", //单击“反馈和支持”菜单按钮时将打开的网站地址的绝对URL ,
  214. "visible": false //显示或隐藏“反馈和支持”菜单按钮,
  215. },
  216. "goback": { //定义“打开文件位置”菜单按钮和右上角按钮的设置。该对象具有以下参数:
  217. "blank": true, //在新的浏览器选项卡/窗口(如果值设置为true)或当前选项卡(如果值设置为false)中打开网站。默认值为true,
  218. "requestClose": false, //定义如果单击“打开文件位置”按钮,则调用events.onRequestClose事件,而不是打开浏览器选项卡或窗口。默认值为false,
  219. "text": "Open file location", //将在“打开文件位置”菜单按钮和右上角按钮(即,而不是“转到文档”)上显示的文本,
  220. "url": "https://example.com" //单击“打开文件位置”菜单按钮时将打开的网站地址的绝对URL ,
  221. },
  222. "logo": {
  223. "image": "https://example.com/logo.png", //图像文件的路径,用于在普通工作模式下显示(即,在所有编辑器的查看和编辑模式下)。图片必须具有以下尺寸:172x40,
  224. "imageEmbedded": "https://example.com/logo_em.png", //用于以嵌入式模式显示的图像文件的路径(请参阅config部分以了解如何定义嵌入式文档类型)。图片必须具有以下尺寸:248x40,
  225. "url": "https://www.baidu.com" //某人单击徽标图像时将使用的绝对URL(可用于转到您的网站等)。保留为空字符串或null以使徽标不可单击,
  226. },
  227. },
  228. "user": { //用户信息
  229. "id": "admin", //用户ID
  230. "name": "操作员" //用户全名称
  231. },
  232. "embedded": { //Embedded部分仅适用于嵌入式文档类型(请参阅config部分以了解如何定义嵌入式文档类型)。它允许更改设置,这些设置定义嵌入式模式下按钮的行为。
  233. "embedUrl": "https://example.com/embedded?doc=exampledocument1.docx", //定义文档的绝对URL,以作为嵌入到网页中的文档的源文件
  234. "fullscreenUrl": "https://example.com/embedded?doc=exampledocument1.docx#fullscreen", //定义将以全屏模式打开的文档的绝对URL。
  235. "saveUrl": "https://example.com/download?doc=exampledocument1.docx", //定义允许将文档保存到用户个人计算机上的绝对URL。
  236. "shareUrl": "https://example.com/view?doc=exampledocument1.docx", //定义允许其他用户共享此文档的绝对URL。
  237. "toolbarDocked": "top" //定义嵌入式查看器工具栏的位置,可以为top或bottom。
  238. }
  239. },
  240. "events": { //事件配置
  241. // onAppReady,//-将应用程序加载到浏览器时调用的函数。
  242. // onCollaborativeChanges //-当文档由其他用户在严格共同编辑模式下共同编辑时调用的函数。
  243. // onDocumentReady,//-将应用程序加载到浏览器时调用的函数。
  244. // onDocumentStateChange,//-修改文档时调用的函数。这就是所谓的使用参数:{真正的“数据”}在当前用户编辑文档以及与参数:{“数据”:假}在当前用户的更改发送到文档编辑服务。
  245. // onDownloadAs,//-调用downloadAs方法时,使用指向已编辑文件的绝对URL调用的函数。在data参数中发送要下载的文档的绝对URL 。
  246. // onError,//-发生错误或其他特定事件时调用的函数。错误消息在data参数中发送。
  247. // onInfo,//-应用程序打开文件时调用的函数。该模式在data.mode参数中发送。可以查看或编辑。
  248. // onMetaChange,//-通过meta命令更改文档的元信息时调用的函数。文档名称通过data.title参数发送。
  249. // onOutdatedVersion,//-使用旧的document.key值打开文档进行编辑时,显示错误后调用的函数,该值用于编辑先前的文档版本并已成功保存。调用此事件时,必须使用新的document.key重新初始化编辑器。
  250. // onReady,//-将应用程序加载到浏览器时调用的函数。自从5.0版本不推荐使用,请使用onAppReady代替
  251. // onRequestClose,//-结束编辑器的工作并且必须关闭编辑器时调用的函数。
  252. // onRequestCompareFile,//-用户尝试通过单击“存储中的文档”按钮来选择要比较的文档时调用的函数。要选择要比较的文档,必须调用setRevisedFile方法。如果未声明该方法,则不会显示“来自存储的文档”按钮。
  253. // onRequestCreateNew,//-用户尝试通过单击“新建”按钮来创建文档时调用的函数。使用此方法代替createUrl字段。如果未声明该方法且未指定createUrl,则将不会显示“创建新”按钮。
  254. // onRequestEditRights,//-用户尝试通过单击“编辑文档”按钮尝试将文档从视图切换到编辑模式时调用的函数。调用该函数时,必须在编辑模式下再次初始化编辑器。如果未声明该方法,则不会显示“编辑”按钮。
  255. // onRequestHistory,//-用户尝试通过单击“版本历史记录”按钮显示文档版本历史记录时调用的函数。要显示文档版本历史,您必须调用refreshHistory方法。如果未声明该方法和onRequestHistoryData方法,则不会显示“版本历史记录”按钮。
  256. // onRequestHistoryClose,//-当用户尝试通过单击“关闭历史记录”按钮来查看文档版本历史记录时,试图调用该文档时调用的函数。调用该函数时,必须在编辑模式下再次初始化编辑器。如果未声明该方法,则不会显示“关闭历史记录”按钮。
  257. // onRequestHistoryData,//-用户尝试单击文档版本历史记录中的特定文档版本时调用的函数。
  258. // onRequestInsertImage,//-用户尝试通过单击“保存图像”按钮插入图像时调用的函数。图像插入的类型在参数data.c中指定。
  259. // onRequestRename,//-用户尝试通过单击“重命名...”按钮重命名文件时调用的函数。
  260. // onRequestRestore,//-用户单击版本历史记录中的“还原”按钮来还原文件版本时调用的函数。
  261. // onRequestSaveAs,//-用户尝试通过单击“另存为...”按钮保存文件时调用的函数。文档的标题和要下载的文档的绝对URL在data参数中发送。如果未声明该方法,则不会显示“另存为...”按钮。
  262. // onRequestSharingSettings,//-用户单击“更改访问权限”按钮来管理文档访问权限时调用的函数。必须调用setSharingSettings方法来更新有关允许与其他用户共享文档的设置的信息。如果未声明该方法,则不会显示“更改访问权限”按钮。
  263. // onRequestUsers,//-评论者可以选择要在评论中提及的其他用户时调用的函数。要设置用户列表,必须调用setUsers方法。
  264. // onWarning,//-发生警告时调用的函数。警告消息在data参数中发送。
  265. // "onDocumentStateChange": function() {
  266. // }, //文档改变后的回调
  267. //"onDocumentReady" : onDocumentReady, //文档初始化准备好后的回调
  268. },
  269. };
  270. var docEditor = new DocsAPI.DocEditor("placeholder", config); -->