@chao194/office 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +481 -0
- package/dist/cjs/core/index.cjs +2 -0
- package/dist/cjs/core/index.cjs.map +1 -0
- package/dist/cjs/react/index.cjs +2 -0
- package/dist/cjs/react/index.cjs.map +1 -0
- package/dist/cjs/vue2/index.cjs +2 -0
- package/dist/cjs/vue2/index.cjs.map +1 -0
- package/dist/cjs/vue3/index.cjs +2 -0
- package/dist/cjs/vue3/index.cjs.map +1 -0
- package/dist/esm/core/index.mjs +2 -0
- package/dist/esm/core/index.mjs.map +1 -0
- package/dist/esm/react/index.mjs +2 -0
- package/dist/esm/react/index.mjs.map +1 -0
- package/dist/esm/vue2/index.mjs +2 -0
- package/dist/esm/vue2/index.mjs.map +1 -0
- package/dist/esm/vue3/index.mjs +2 -0
- package/dist/esm/vue3/index.mjs.map +1 -0
- package/dist/types/core/editor.d.ts +64 -0
- package/dist/types/core/editor.d.ts.map +1 -0
- package/dist/types/core/index.d.ts +55 -0
- package/dist/types/core/index.d.ts.map +1 -0
- package/dist/types/core/utils/fileType.d.ts +14 -0
- package/dist/types/core/utils/fileType.d.ts.map +1 -0
- package/dist/types/core/utils/http.d.ts +45 -0
- package/dist/types/core/utils/http.d.ts.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/react/OnlyOfficeEditor.d.ts +51 -0
- package/dist/types/react/OnlyOfficeEditor.d.ts.map +1 -0
- package/dist/types/react/index.d.ts +7 -0
- package/dist/types/react/index.d.ts.map +1 -0
- package/dist/types/react/useOnlyOffice.d.ts +56 -0
- package/dist/types/react/useOnlyOffice.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +184 -0
- package/dist/types/types/index.d.ts.map +1 -0
- package/dist/types/vue2/component.d.ts +77 -0
- package/dist/types/vue2/component.d.ts.map +1 -0
- package/dist/types/vue2/index.d.ts +5 -0
- package/dist/types/vue2/index.d.ts.map +1 -0
- package/dist/types/vue2/mixin.d.ts +59 -0
- package/dist/types/vue2/mixin.d.ts.map +1 -0
- package/dist/types/vue3/component.d.ts +88 -0
- package/dist/types/vue3/component.d.ts.map +1 -0
- package/dist/types/vue3/index.d.ts +6 -0
- package/dist/types/vue3/index.d.ts.map +1 -0
- package/dist/types/vue3/useOnlyOffice.d.ts +52 -0
- package/dist/types/vue3/useOnlyOffice.d.ts.map +1 -0
- package/dist/umd/index.js +2 -0
- package/dist/umd/index.js.map +1 -0
- package/package.json +100 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../src/core/utils/fileType.ts","../../../src/core/utils/http.ts","../../../src/core/editor.ts","../../../src/vue2/component.ts","../../../src/vue2/mixin.ts","../../../src/core/index.ts"],"sourcesContent":["import type { DocumentType, FileType } from '../../types';\n\n/**\n * 根据文件扩展名获取 OnlyOffice 文档类型\n * @param fileType 文件扩展名\n * @returns 文档类型\n */\nexport function getDocumentType(fileType: FileType | string): DocumentType | 'other' {\n const type = fileType.toLowerCase();\n\n // 文档类型\n const wordTypes = ['doc', 'docx', 'odt', 'rtf', 'txt', 'html', 'epub'];\n if (wordTypes.includes(type)) {\n return 'word';\n }\n\n // 表格类型\n const cellTypes = ['xls', 'xlsx', 'ods', 'csv'];\n if (cellTypes.includes(type)) {\n return 'cell';\n }\n\n // 演示类型\n const slideTypes = ['ppt', 'pptx', 'odp'];\n if (slideTypes.includes(type)) {\n return 'slide';\n }\n\n // PDF 类型\n if (type === 'pdf') {\n return 'pdf';\n }\n\n return 'other';\n}\n\n/**\n * 检查文件类型是否受支持\n * @param fileType 文件扩展名\n * @returns 是否支持\n */\nexport function isSupportedFileType(fileType: string): boolean {\n return getDocumentType(fileType) !== 'other';\n}","import axios, { type AxiosRequestConfig, type AxiosResponse } from 'axios';\n\n/**\n * HTTP 请求工具\n */\nexport class HttpClient {\n private baseUrl: string;\n\n constructor(baseUrl: string = '') {\n this.baseUrl = baseUrl;\n }\n\n /**\n * 发送 POST 请求\n * @param url 请求地址\n * @param data 请求数据\n * @param config 额外配置\n * @returns Promise\n */\n async post<T = any>(\n url: string,\n data?: any,\n config?: AxiosRequestConfig\n ): Promise<AxiosResponse<T>> {\n const fullUrl = this.baseUrl ? `${this.baseUrl}${url}` : url;\n return axios.post<T>(fullUrl, data, config);\n }\n\n /**\n * 发送 GET 请求\n * @param url 请求地址\n * @param config 额外配置\n * @returns Promise\n */\n async get<T = any>(\n url: string,\n config?: AxiosRequestConfig\n ): Promise<AxiosResponse<T>> {\n const fullUrl = this.baseUrl ? `${this.baseUrl}${url}` : url;\n return axios.get<T>(fullUrl, config);\n }\n}\n\n/**\n * 验签接口请求\n * @param baseUrl 基础 URL\n * @param data 验签数据\n * @returns 验签结果\n */\nexport async function verifyTokenSign(\n baseUrl: string,\n data: {\n appId: string;\n sign: string;\n timestamp: number;\n }\n): Promise<boolean> {\n try {\n const client = new HttpClient(baseUrl);\n const response = await client.post<{ data: boolean }>(\n '/onlyoffice/token/verifyTokenSign',\n data\n );\n return response.data?.data === true;\n } catch (error) {\n console.error('验签请求失败:', error);\n return false;\n }\n}\n\n/**\n * 保存操作信息\n * @param callbackUrl 回调地址\n * @param data 操作数据\n */\nexport async function saveSuccessInfo(\n callbackUrl: string,\n data: {\n status: number;\n key: string;\n userdata: string;\n }\n): Promise<void> {\n try {\n await axios.post(callbackUrl, data);\n } catch (error) {\n console.error('保存操作信息失败:', error);\n }\n}","import EventEmitter from 'eventemitter3';\nimport type {\n DocumentConfig,\n EditorConfig,\n DocumentPermissions,\n OfficeEventType,\n OfficeCallback,\n OfficeEditorInstance,\n OfficeDocumentConfig,\n OfficeInitConfig,\n AuthConfig,\n VerifyTokenSignFunction,\n} from '../types';\nimport { getDocumentType, isSupportedFileType } from './utils/fileType';\nimport { verifyTokenSign, saveSuccessInfo } from './utils/http';\n\n/**\n * 默认文档权限\n */\nconst DEFAULT_PERMISSIONS: DocumentPermissions = {\n comment: false,\n download: false,\n edit: false,\n print: true,\n review: false,\n editCommentAuthorOnly: false,\n fillForms: false,\n modifyContentControl: false,\n};\n\n/**\n * OnlyOffice 编辑器管理类\n */\nexport class OfficeEditor implements OfficeEditorInstance {\n private editor: any = null;\n private editorId: string;\n private emitter: EventEmitter;\n private documentConfig: DocumentConfig;\n private editorConfig: EditorConfig;\n private callback: OfficeCallback | null = null;\n private height: string = '100%';\n private width: string = '100%';\n\n constructor() {\n this.editorId = `editor-${Date.now().toString(32)}`;\n this.emitter = new EventEmitter();\n this.documentConfig = {\n fileType: 'docx',\n key: '',\n url: '',\n title: '',\n permissions: { ...DEFAULT_PERMISSIONS },\n };\n this.editorConfig = {\n lang: 'zh',\n user: { id: '', name: '' },\n };\n }\n\n /**\n * 配置文档参数\n */\n configure(config: OfficeDocumentConfig): void {\n if (config.height) this.height = config.height;\n if (config.width) this.width = config.width;\n\n if (config.fileType) {\n if (!isSupportedFileType(config.fileType)) {\n throw new Error(`不支持的文件类型: ${config.fileType}`);\n }\n const docType = getDocumentType(config.fileType);\n if (docType !== 'other') {\n this.documentConfig.fileType = config.fileType;\n }\n }\n\n if (config.key) this.documentConfig.key = config.key;\n if (config.url) this.documentConfig.url = config.url;\n if (config.title) this.documentConfig.title = config.title;\n\n if (config.permissions) {\n this.documentConfig.permissions = {\n ...this.documentConfig.permissions,\n ...config.permissions,\n };\n\n // PDF 文件特殊处理\n if (this.documentConfig.fileType === 'pdf') {\n this.documentConfig.permissions.edit = false;\n this.documentConfig.permissions.review = false;\n this.editorConfig.mode = 'view';\n }\n }\n\n if (config.callbackUrl) this.editorConfig.callbackUrl = config.callbackUrl;\n if (config.userId) {\n this.editorConfig.user = {\n ...this.editorConfig.user,\n id: config.userId,\n };\n }\n if (config.userName) {\n this.editorConfig.user = {\n ...this.editorConfig.user,\n name: config.userName,\n };\n }\n if (config.userGroup) {\n this.editorConfig.user = {\n ...this.editorConfig.user,\n group: config.userGroup,\n };\n }\n }\n\n /**\n * 初始化编辑器(带验签)\n */\n async initOffice(config: OfficeInitConfig): Promise<OfficeEditorInstance> {\n const { dom, officeApiUrl, callback, auth, verifyFunction } = config;\n\n if (callback) this.callback = callback;\n\n // 验签逻辑\n if (auth) {\n let verified = false;\n\n if (verifyFunction) {\n // 使用自定义验签函数\n verified = await verifyFunction(auth);\n } else if (auth.verifyUrl) {\n // 使用自定义验签地址\n verified = await verifyTokenSign(auth.verifyUrl, {\n appId: auth.appId,\n sign: auth.sign,\n timestamp: auth.timestamp,\n });\n } else {\n throw new Error('使用验签配置时,必须提供 verifyFunction 或 verifyUrl');\n }\n\n if (!verified) {\n throw new Error('验签失败,请检查验签配置');\n }\n }\n\n return this.createEditor(dom, officeApiUrl);\n }\n\n /**\n * 简化初始化(无验签)\n */\n init(\n dom: HTMLElement,\n officeApiUrl: string,\n callback?: OfficeCallback\n ): OfficeEditorInstance {\n if (callback) this.callback = callback;\n return this.createEditor(dom, officeApiUrl);\n }\n\n /**\n * 创建编辑器实例\n */\n private createEditor(dom: HTMLElement, officeApiUrl: string): OfficeEditorInstance {\n if (!dom) {\n throw new Error('必须提供挂载的 DOM 元素');\n }\n\n if (!officeApiUrl) {\n throw new Error('必须提供 OnlyOffice API 脚本地址');\n }\n\n // 设置容器样式\n dom.style.position = 'relative';\n\n // 创建编辑器容器\n const mainDiv = document.createElement('div');\n mainDiv.id = this.editorId;\n mainDiv.style.height = '100%';\n mainDiv.style.width = '100%';\n dom.appendChild(mainDiv);\n\n // 动态加载 OnlyOffice API 脚本\n const scriptId = `script-${this.editorId}`;\n const existingScript = document.querySelector(`#${scriptId}`);\n\n if (!existingScript) {\n const script = document.createElement('script');\n script.id = scriptId;\n script.src = officeApiUrl;\n script.onload = () => this.instantiateEditor();\n document.head.appendChild(script);\n } else {\n this.instantiateEditor();\n }\n\n return this;\n }\n\n /**\n * 实例化编辑器\n */\n private instantiateEditor(): void {\n // 销毁现有实例\n if (this.editor) {\n this.editor.destroyEditor();\n this.editor = null;\n }\n\n // 构建配置对象\n const config = {\n width: this.width,\n height: this.height,\n documentType: this.getDocumentType(),\n document: this.documentConfig,\n editorConfig: this.editorConfig,\n events: this.createEventHandlers(),\n };\n\n // 创建编辑器实例\n this.editor = new window.DocsAPI.DocEditor(this.editorId, config);\n }\n\n /**\n * 获取文档类型\n */\n private getDocumentType(): string {\n const type = getDocumentType(this.documentConfig.fileType);\n return type === 'other' ? 'word' : type;\n }\n\n /**\n * 创建事件处理器\n */\n private createEventHandlers(): Record<string, (event: any) => void> {\n return {\n onDocumentStateChange: (event: any) => {\n this.emitter.emit('documentStateChange', event);\n },\n onDocumentReady: () => {\n console.log('Document is loaded');\n // 通知后端文档加载成功\n if (this.editorConfig.callbackUrl) {\n saveSuccessInfo(this.editorConfig.callbackUrl, {\n status: 8,\n key: this.documentConfig.key,\n userdata: JSON.stringify({\n appUserId: this.editorConfig.user?.id,\n }),\n });\n }\n this.callback?.('onDocumentReady');\n this.emitter.emit('onDocumentReady');\n },\n onInfo: (event: any) => {\n console.log('ONLYOFFICE Document Editor is opened in mode', event.data.mode);\n this.callback?.('onInfo', event.data);\n this.emitter.emit('onInfo', event);\n },\n onError: (event: any) => {\n console.error('ONLYOFFICE Error:', event.data.errorCode, event.data.errorDescription);\n this.emitter.emit('onError', event);\n },\n onRequestHistory: (event: any) => {\n this.callback?.('onRequestHistory', event, this.editor);\n this.emitter.emit('onRequestHistory', { event, editor: this.editor });\n },\n onRequestHistoryData: (event: any) => {\n this.callback?.('onRequestHistoryData', event, this.editor);\n this.emitter.emit('onRequestHistoryData', { event, editor: this.editor });\n },\n onRequestHistoryClose: (event: any) => {\n this.callback?.('onRequestHistoryClose', event, this.editor);\n this.emitter.emit('onRequestHistoryClose', { event, editor: this.editor });\n },\n onRequestRestore: (event: any) => {\n this.callback?.('onRequestRestore', event, this.editor);\n this.emitter.emit('onRequestRestore', { event, editor: this.editor });\n },\n onRequestSendNotify: (event: any) => {\n console.log('onRequestSendNotify', event);\n this.emitter.emit('onRequestSendNotify', event);\n },\n onRequestUsers: (event: any) => {\n console.log('onRequestUsers', event);\n this.emitter.emit('onRequestUsers', event);\n },\n };\n }\n\n /**\n * 监听事件\n */\n on(event: OfficeEventType, callback: (...args: any[]) => void): void {\n this.emitter.on(event, callback);\n }\n\n /**\n * 移除事件监听\n */\n off(event: OfficeEventType, callback: (...args: any[]) => void): void {\n this.emitter.off(event, callback);\n }\n\n /**\n * 获取当前配置\n */\n getConfig(): DocumentConfig & EditorConfig {\n return {\n ...this.documentConfig,\n ...this.editorConfig,\n };\n }\n\n /**\n * 获取内部编辑器实例\n */\n getEditor(): any {\n return this.editor;\n }\n\n /**\n * 销毁编辑器\n */\n destroy(): void {\n if (this.editor) {\n this.editor.destroyEditor();\n this.editor = null;\n }\n this.emitter.removeAllListeners();\n this.callback = null;\n }\n}","import { OfficeEditor } from '../core/editor';\nimport type {\n OfficeDocumentConfig,\n OfficeInitConfig,\n OfficeCallback,\n OfficeEventType,\n AuthConfig,\n VerifyTokenSignFunction,\n OfficeEditorInstance,\n} from '../types';\n\n/**\n * OnlyOffice 编辑器 Vue 2 组件\n */\nexport const OnlyOfficeEditor = {\n name: 'OnlyOfficeEditor',\n\n props: {\n /** OnlyOffice API 脚本地址 */\n officeApiUrl: {\n type: String,\n required: true,\n },\n /** 文档配置 */\n document: {\n type: Object,\n required: true,\n },\n /** 验签配置 */\n auth: {\n type: Object,\n default: undefined,\n },\n /** 自定义验签函数 */\n verifyFunction: {\n type: Function,\n default: undefined,\n },\n /** 编辑器高度 */\n height: {\n type: String,\n default: '100%',\n },\n /** 编辑器宽度 */\n width: {\n type: String,\n default: '100%',\n },\n },\n\n data() {\n return {\n editorInstance: null as OfficeEditorInstance | null,\n isReady: false,\n error: null as string | null,\n };\n },\n\n watch: {\n document: {\n handler() {\n if ((this as any).editorInstance) {\n (this as any).reinit();\n }\n },\n deep: true,\n },\n },\n\n mounted() {\n (this as any).init();\n },\n\n beforeDestroy() {\n (this as any).destroy();\n },\n\n methods: {\n /**\n * 初始化编辑器\n */\n async init() {\n const container = (this as any).$refs.container as HTMLElement;\n if (!container) return;\n\n try {\n const editor = new OfficeEditor();\n\n // 配置文档参数\n editor.configure({\n ...(this as any).document,\n height: (this as any).height,\n width: (this as any).width,\n });\n\n // 事件回调\n const callback: OfficeCallback = (type, event, editorInst) => {\n switch (type) {\n case 'onDocumentReady':\n (this as any).isReady = true;\n (this as any).$emit('ready', editorInst);\n break;\n case 'onInfo':\n break;\n case 'onRequestHistory':\n (this as any).$emit('request-history', { event, editor: editorInst });\n break;\n case 'onRequestHistoryData':\n (this as any).$emit('request-history-data', { event, editor: editorInst });\n break;\n case 'onRequestHistoryClose':\n (this as any).$emit('request-history-close', { event, editor: editorInst });\n break;\n case 'onRequestRestore':\n (this as any).$emit('request-restore', { event, editor: editorInst });\n break;\n }\n };\n\n // 初始化配置\n const initConfig: OfficeInitConfig = {\n dom: container,\n officeApiUrl: (this as any).officeApiUrl,\n callback,\n auth: (this as any).auth,\n verifyFunction: (this as any).verifyFunction,\n };\n\n // 初始化编辑器\n (this as any).editorInstance = await editor.initOffice(initConfig);\n\n // 监听错误事件\n editor.on('onError' as OfficeEventType, (event: any) => {\n (this as any).error = event.data?.errorDescription || '编辑器错误';\n (this as any).$emit('error', event);\n });\n\n // 监听文档状态变化\n editor.on('documentStateChange' as OfficeEventType, (event: any) => {\n (this as any).$emit('document-state-change', event);\n });\n } catch (err: any) {\n (this as any).error = err.message || '初始化失败';\n (this as any).$emit('error', err);\n }\n },\n\n /**\n * 销毁编辑器\n */\n destroy() {\n if ((this as any).editorInstance) {\n (this as any).editorInstance.destroy();\n (this as any).editorInstance = null;\n (this as any).isReady = false;\n }\n },\n\n /**\n * 重新初始化\n */\n async reinit() {\n (this as any).destroy();\n await (this as any).init();\n },\n\n /**\n * 监听事件\n */\n on(event: OfficeEventType, callback: (...args: any[]) => void) {\n if ((this as any).editorInstance) {\n (this as any).editorInstance.on(event, callback);\n }\n },\n\n /**\n * 移除事件监听\n */\n off(event: OfficeEventType, callback: (...args: any[]) => void) {\n if ((this as any).editorInstance) {\n (this as any).editorInstance.off(event, callback);\n }\n },\n },\n\n template: `\n <div class=\"onlyoffice-editor-container\" style=\"width: 100%; height: 100%; position: relative;\">\n <div ref=\"container\" style=\"width: 100%; height: 100%;\"></div>\n <div v-if=\"error\" class=\"onlyoffice-error\" style=\"position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); color: red;\">\n {{ error }}\n </div>\n </div>\n `,\n};\n\nexport default OnlyOfficeEditor;","import { OfficeEditor } from '../core/editor';\nimport type {\n OfficeDocumentConfig,\n OfficeInitConfig,\n OfficeCallback,\n OfficeEventType,\n AuthConfig,\n VerifyTokenSignFunction,\n OfficeEditorInstance,\n} from '../types';\n\n/**\n * OnlyOffice Vue 2 混入\n * 提供编辑器生命周期管理和状态\n */\nexport const OnlyOfficeMixin = {\n data() {\n return {\n /** 编辑器实例 */\n officeEditor: null as OfficeEditor | null,\n /** 编辑器实例(对外暴露) */\n officeInstance: null as OfficeEditorInstance | null,\n /** 是否已就绪 */\n officeReady: false,\n /** 错误信息 */\n officeError: null as string | null,\n };\n },\n\n beforeDestroy() {\n (this as any).$destroyOffice();\n },\n\n methods: {\n /**\n * 初始化 Office 编辑器\n * @param container 容器元素或选择器\n * @param officeApiUrl OnlyOffice API 地址\n * @param documentConfig 文档配置\n * @param options 额外选项\n */\n async $initOffice(\n container: HTMLElement | string,\n officeApiUrl: string,\n documentConfig: OfficeDocumentConfig,\n options?: {\n auth?: AuthConfig;\n verifyFunction?: VerifyTokenSignFunction;\n callback?: OfficeCallback;\n }\n ): Promise<OfficeEditorInstance | null> {\n try {\n // 获取容器元素\n const el = typeof container === 'string'\n ? document.querySelector(container) as HTMLElement\n : container;\n\n if (!el) {\n throw new Error('容器元素未找到');\n }\n\n // 创建编辑器\n (this as any).officeEditor = new OfficeEditor();\n\n // 配置文档参数\n (this as any).officeEditor.configure(documentConfig);\n\n // 初始化配置\n const initConfig: OfficeInitConfig = {\n dom: el,\n officeApiUrl,\n callback: options?.callback,\n auth: options?.auth,\n verifyFunction: options?.verifyFunction,\n };\n\n // 初始化编辑器\n (this as any).officeInstance = await (this as any).officeEditor.initOffice(initConfig);\n (this as any).officeReady = true;\n\n // 监听错误事件\n (this as any).officeEditor.on('onError' as OfficeEventType, (event: any) => {\n (this as any).officeError = event.data?.errorDescription || '编辑器错误';\n (this as any).$emit('office-error', event);\n });\n\n // 监听文档状态变化\n (this as any).officeEditor.on('documentStateChange' as OfficeEventType, (event: any) => {\n (this as any).$emit('office-state-change', event);\n });\n\n return (this as any).officeInstance;\n } catch (err: any) {\n (this as any).officeError = err.message || '初始化失败';\n (this as any).$emit('office-error', err);\n return null;\n }\n },\n\n /**\n * 销毁 Office 编辑器\n */\n $destroyOffice() {\n if ((this as any).officeEditor) {\n (this as any).officeEditor.destroy();\n (this as any).officeEditor = null;\n (this as any).officeInstance = null;\n (this as any).officeReady = false;\n }\n },\n\n /**\n * 监听 Office 事件\n */\n $onOfficeEvent(event: OfficeEventType, callback: (...args: any[]) => void) {\n if ((this as any).officeEditor) {\n (this as any).officeEditor.on(event, callback);\n }\n },\n\n /**\n * 移除 Office 事件监听\n */\n $offOfficeEvent(event: OfficeEventType, callback: (...args: any[]) => void) {\n if ((this as any).officeEditor) {\n (this as any).officeEditor.off(event, callback);\n }\n },\n\n /**\n * 重新初始化 Office 编辑器\n * @param container 容器元素或选择器\n * @param officeApiUrl OnlyOffice API 地址\n * @param documentConfig 文档配置\n * @param options 额外选项\n */\n async $reinitOffice(\n container: HTMLElement | string,\n officeApiUrl: string,\n documentConfig: OfficeDocumentConfig,\n options?: {\n auth?: AuthConfig;\n verifyFunction?: VerifyTokenSignFunction;\n callback?: OfficeCallback;\n }\n ): Promise<OfficeEditorInstance | null> {\n (this as any).$destroyOffice();\n return (this as any).$initOffice(container, officeApiUrl, documentConfig, options);\n },\n },\n};\n\nexport default OnlyOfficeMixin;","export { OfficeEditor } from './editor';\nexport { getDocumentType, isSupportedFileType } from './utils/fileType';\nexport { HttpClient, verifyTokenSign, saveSuccessInfo } from './utils/http';\n\n// 导出类型\nexport type {\n DocumentType,\n FileType,\n DocumentPermissions,\n UserInfo,\n DocumentConfig,\n EditorConfig,\n AuthConfig,\n VerifyTokenSignFunction,\n OfficeInitConfig,\n OfficeDocumentConfig,\n OfficeEventType,\n OfficeCallbackType,\n OfficeCallback,\n OfficeEditorInstance,\n OfficeSDK,\n} from '../types';\n\nimport { OfficeEditor } from './editor';\nimport type {\n OfficeDocumentConfig,\n OfficeInitConfig,\n OfficeCallback,\n OfficeEventType,\n OfficeEditorInstance,\n} from '../types';\n\n/**\n * 创建 Office 编辑器实例\n * @returns OfficeEditor 实例\n */\nexport function createOfficeEditor(): OfficeEditor {\n return new OfficeEditor();\n}\n\n/**\n * 快速初始化 Office 编辑器\n * @param config 初始化配置\n * @returns Promise<OfficeEditorInstance>\n */\nexport async function initOffice(config: OfficeInitConfig): Promise<OfficeEditorInstance> {\n const editor = new OfficeEditor();\n return editor.initOffice(config);\n}\n\n/**\n * 简化初始化(无验签)\n * @param dom 挂载的 DOM 元素\n * @param officeApiUrl OnlyOffice API 地址\n * @param callback 事件回调\n * @returns OfficeEditorInstance\n */\nexport function init(\n dom: HTMLElement,\n officeApiUrl: string,\n callback?: OfficeCallback\n): OfficeEditorInstance {\n const editor = new OfficeEditor();\n return editor.init(dom, officeApiUrl, callback);\n}\n\n/**\n * 配置文档参数(全局配置,需要先创建编辑器实例)\n * @deprecated 建议使用 OfficeEditor.configure() 方法\n */\nexport function config(_config: OfficeDocumentConfig): void {\n console.warn('此方法已废弃,请使用 OfficeEditor.configure() 方法');\n}\n\n/**\n * 销毁编辑器(全局方法,需要先创建编辑器实例)\n * @deprecated 建议使用 OfficeEditor.destroy() 方法\n */\nexport function destroy(): void {\n console.warn('此方法已废弃,请使用 OfficeEditor.destroy() 方法');\n}\n\n/**\n * 监听事件(全局方法,需要先创建编辑器实例)\n * @deprecated 建议使用 OfficeEditor.on() 方法\n */\nexport function on(_event: OfficeEventType, _callback: (...args: any[]) => void): void {\n console.warn('此方法已废弃,请使用 OfficeEditor.on() 方法');\n}\n\n/**\n * 记录分享动作\n * @param callbackUrl 回调地址\n * @param fileKey 文件标识\n * @param appUserId 用户 ID\n */\nexport async function shareSave(\n callbackUrl: string,\n fileKey: string,\n appUserId: string\n): Promise<void> {\n const { saveSuccessInfo } = await import('./utils/http');\n await saveSuccessInfo(callbackUrl, {\n status: 10,\n key: fileKey,\n userdata: JSON.stringify({ appUserId }),\n });\n}\n\n/**\n * 记录下载动作\n * @param callbackUrl 回调地址\n * @param fileKey 文件标识\n * @param appUserId 用户 ID\n */\nexport async function downloadSave(\n callbackUrl: string,\n fileKey: string,\n appUserId: string\n): Promise<void> {\n const { saveSuccessInfo } = await import('./utils/http');\n await saveSuccessInfo(callbackUrl, {\n status: 9,\n key: fileKey,\n userdata: JSON.stringify({ appUserId }),\n });\n}"],"names":["getDocumentType","fileType","type","toLowerCase","includes","HttpClient","constructor","baseUrl","this","post","url","data","config","fullUrl","axios","get","async","verifyTokenSign","client","_a","error","console","saveSuccessInfo","callbackUrl","DEFAULT_PERMISSIONS","comment","download","edit","print","review","editCommentAuthorOnly","fillForms","modifyContentControl","OfficeEditor","editor","callback","height","width","editorId","Date","now","toString","emitter","EventEmitter","documentConfig","key","title","permissions","editorConfig","lang","user","id","name","configure","Error","mode","userId","userName","userGroup","group","initOffice","dom","officeApiUrl","auth","verifyFunction","verified","verifyUrl","appId","sign","timestamp","createEditor","init","style","position","mainDiv","document","createElement","appendChild","scriptId","querySelector","instantiateEditor","script","src","onload","head","destroyEditor","documentType","events","createEventHandlers","window","DocsAPI","DocEditor","onDocumentStateChange","event","emit","onDocumentReady","log","status","userdata","JSON","stringify","appUserId","_b","call","onInfo","onError","errorCode","errorDescription","onRequestHistory","onRequestHistoryData","onRequestHistoryClose","onRequestRestore","onRequestSendNotify","onRequestUsers","on","off","getConfig","getEditor","destroy","removeAllListeners","OnlyOfficeEditor","props","String","required","Object","default","undefined","Function","editorInstance","isReady","watch","handler","reinit","deep","mounted","beforeDestroy","methods","container","$refs","editorInst","$emit","initConfig","err","message","template","OnlyOfficeMixin","officeEditor","officeInstance","officeReady","officeError","$destroyOffice","$initOffice","options","el","$onOfficeEvent","$offOfficeEvent","$reinitOffice","createOfficeEditor","shareSave","fileKey","Promise","resolve","then","http","downloadSave"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{defineComponent as e,ref as t,watch as i,onMounted as o,onBeforeUnmount as r}from"vue";import n from"eventemitter3";import s from"axios";function a(e){const t=e.toLowerCase();if(["doc","docx","odt","rtf","txt","html","epub"].includes(t))return"word";if(["xls","xlsx","ods","csv"].includes(t))return"cell";return["ppt","pptx","odp"].includes(t)?"slide":"pdf"===t?"pdf":"other"}class l{constructor(e=""){this.baseUrl=e}async post(e,t,i){const o=this.baseUrl?`${this.baseUrl}${e}`:e;return s.post(o,t,i)}async get(e,t){const i=this.baseUrl?`${this.baseUrl}${e}`:e;return s.get(i,t)}}async function c(e,t){var i;try{const o=new l(e);return!0===(null===(i=(await o.post("/onlyoffice/token/verifyTokenSign",t)).data)||void 0===i?void 0:i.data)}catch(e){return console.error("验签请求失败:",e),!1}}async function d(e,t){try{await s.post(e,t)}catch(e){console.error("保存操作信息失败:",e)}}var u=Object.freeze({__proto__:null,HttpClient:l,saveSuccessInfo:d,verifyTokenSign:c});const h={comment:!1,download:!1,edit:!1,print:!0,review:!1,editCommentAuthorOnly:!1,fillForms:!1,modifyContentControl:!1};class f{constructor(){this.editor=null,this.callback=null,this.height="100%",this.width="100%",this.editorId=`editor-${Date.now().toString(32)}`,this.emitter=new n,this.documentConfig={fileType:"docx",key:"",url:"",title:"",permissions:{...h}},this.editorConfig={lang:"zh",user:{id:"",name:""}}}configure(e){if(e.height&&(this.height=e.height),e.width&&(this.width=e.width),e.fileType){if("other"===a(e.fileType))throw new Error(`不支持的文件类型: ${e.fileType}`);"other"!==a(e.fileType)&&(this.documentConfig.fileType=e.fileType)}e.key&&(this.documentConfig.key=e.key),e.url&&(this.documentConfig.url=e.url),e.title&&(this.documentConfig.title=e.title),e.permissions&&(this.documentConfig.permissions={...this.documentConfig.permissions,...e.permissions},"pdf"===this.documentConfig.fileType&&(this.documentConfig.permissions.edit=!1,this.documentConfig.permissions.review=!1,this.editorConfig.mode="view")),e.callbackUrl&&(this.editorConfig.callbackUrl=e.callbackUrl),e.userId&&(this.editorConfig.user={...this.editorConfig.user,id:e.userId}),e.userName&&(this.editorConfig.user={...this.editorConfig.user,name:e.userName}),e.userGroup&&(this.editorConfig.user={...this.editorConfig.user,group:e.userGroup})}async initOffice(e){const{dom:t,officeApiUrl:i,callback:o,auth:r,verifyFunction:n}=e;if(o&&(this.callback=o),r){let e=!1;if(n)e=await n(r);else{if(!r.verifyUrl)throw new Error("使用验签配置时,必须提供 verifyFunction 或 verifyUrl");e=await c(r.verifyUrl,{appId:r.appId,sign:r.sign,timestamp:r.timestamp})}if(!e)throw new Error("验签失败,请检查验签配置")}return this.createEditor(t,i)}init(e,t,i){return i&&(this.callback=i),this.createEditor(e,t)}createEditor(e,t){if(!e)throw new Error("必须提供挂载的 DOM 元素");if(!t)throw new Error("必须提供 OnlyOffice API 脚本地址");e.style.position="relative";const i=document.createElement("div");i.id=this.editorId,i.style.height="100%",i.style.width="100%",e.appendChild(i);const o=`script-${this.editorId}`;if(document.querySelector(`#${o}`))this.instantiateEditor();else{const e=document.createElement("script");e.id=o,e.src=t,e.onload=()=>this.instantiateEditor(),document.head.appendChild(e)}return this}instantiateEditor(){this.editor&&(this.editor.destroyEditor(),this.editor=null);const e={width:this.width,height:this.height,documentType:this.getDocumentType(),document:this.documentConfig,editorConfig:this.editorConfig,events:this.createEventHandlers()};this.editor=new window.DocsAPI.DocEditor(this.editorId,e)}getDocumentType(){const e=a(this.documentConfig.fileType);return"other"===e?"word":e}createEventHandlers(){return{onDocumentStateChange:e=>{this.emitter.emit("documentStateChange",e)},onDocumentReady:()=>{var e,t;console.log("Document is loaded"),this.editorConfig.callbackUrl&&d(this.editorConfig.callbackUrl,{status:8,key:this.documentConfig.key,userdata:JSON.stringify({appUserId:null===(e=this.editorConfig.user)||void 0===e?void 0:e.id})}),null===(t=this.callback)||void 0===t||t.call(this,"onDocumentReady"),this.emitter.emit("onDocumentReady")},onInfo:e=>{var t;console.log("ONLYOFFICE Document Editor is opened in mode",e.data.mode),null===(t=this.callback)||void 0===t||t.call(this,"onInfo",e.data),this.emitter.emit("onInfo",e)},onError:e=>{console.error("ONLYOFFICE Error:",e.data.errorCode,e.data.errorDescription),this.emitter.emit("onError",e)},onRequestHistory:e=>{var t;null===(t=this.callback)||void 0===t||t.call(this,"onRequestHistory",e,this.editor),this.emitter.emit("onRequestHistory",{event:e,editor:this.editor})},onRequestHistoryData:e=>{var t;null===(t=this.callback)||void 0===t||t.call(this,"onRequestHistoryData",e,this.editor),this.emitter.emit("onRequestHistoryData",{event:e,editor:this.editor})},onRequestHistoryClose:e=>{var t;null===(t=this.callback)||void 0===t||t.call(this,"onRequestHistoryClose",e,this.editor),this.emitter.emit("onRequestHistoryClose",{event:e,editor:this.editor})},onRequestRestore:e=>{var t;null===(t=this.callback)||void 0===t||t.call(this,"onRequestRestore",e,this.editor),this.emitter.emit("onRequestRestore",{event:e,editor:this.editor})},onRequestSendNotify:e=>{console.log("onRequestSendNotify",e),this.emitter.emit("onRequestSendNotify",e)},onRequestUsers:e=>{console.log("onRequestUsers",e),this.emitter.emit("onRequestUsers",e)}}}on(e,t){this.emitter.on(e,t)}off(e,t){this.emitter.off(e,t)}getConfig(){return{...this.documentConfig,...this.editorConfig}}getEditor(){return this.editor}destroy(){this.editor&&(this.editor.destroyEditor(),this.editor=null),this.emitter.removeAllListeners(),this.callback=null}}const m=e({name:"OnlyOfficeEditor",props:{officeApiUrl:{type:String,required:!0},document:{type:Object,required:!0},auth:{type:Object,default:void 0},verifyFunction:{type:Function,default:void 0},height:{type:String,default:"100%"},width:{type:String,default:"100%"}},emits:["ready","error","documentStateChange","requestHistory","requestHistoryData","requestHistoryClose","requestRestore"],setup(e,{emit:n}){const s=t(null),a=t(null),l=t(!1),c=t(null),d=async()=>{if(s.value)try{const t=new f;t.configure({...e.document,height:e.height,width:e.width});const i=(e,t,i)=>{switch(e){case"onDocumentReady":l.value=!0,n("ready",i);break;case"onInfo":break;case"onRequestHistory":n("requestHistory",{event:t,editor:i});break;case"onRequestHistoryData":n("requestHistoryData",{event:t,editor:i});break;case"onRequestHistoryClose":n("requestHistoryClose",{event:t,editor:i});break;case"onRequestRestore":n("requestRestore",{event:t,editor:i})}},o={dom:s.value,officeApiUrl:e.officeApiUrl,callback:i,auth:e.auth,verifyFunction:e.verifyFunction};a.value=await t.initOffice(o),t.on("onError",e=>{var t;c.value=(null===(t=e.data)||void 0===t?void 0:t.errorDescription)||"编辑器错误",n("error",e)}),t.on("documentStateChange",e=>{n("documentStateChange",e)})}catch(e){c.value=e.message||"初始化失败",n("error",e)}},u=()=>{a.value&&(a.value.destroy(),a.value=null,l.value=!1)};return i(()=>e.document,e=>{a.value&&e&&(u(),d())},{deep:!0}),o(()=>{d()}),r(()=>{u()}),{containerRef:s,editorInstance:a,isReady:l,error:c}},template:'\n <div class="onlyoffice-editor-container" style="width: 100%; height: 100%; position: relative;">\n <div ref="containerRef" style="width: 100%; height: 100%;"></div>\n <div v-if="error" class="onlyoffice-error" style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); color: red;">\n {{ error }}\n </div>\n </div>\n '});function y(e){const{officeApiUrl:n,document:s,auth:a,verifyFunction:l,height:c="100%",width:d="100%",autoInit:u=!0}=e,h=t(null),m=t(null),y=t(!1),v=t(null);let p=null;const g=async()=>{if(h.value)try{w(),p=new f,p.configure({...s,height:c,width:d});const e=(e,t,i)=>{if("onDocumentReady"===e)y.value=!0},t={dom:h.value,officeApiUrl:n,callback:e,auth:a,verifyFunction:l};m.value=await p.initOffice(t),p.on("onError",e=>{var t;v.value=(null===(t=e.data)||void 0===t?void 0:t.errorDescription)||"编辑器错误"})}catch(e){v.value=e.message||"初始化失败"}else v.value="容器元素未找到"},w=()=>{p&&(p.destroy(),p=null,m.value=null,y.value=!1)},C=async()=>{w(),await g()};return i(()=>s,async e=>{p&&e&&await C()},{deep:!0}),o(()=>{u&&g()}),r(()=>{w()}),{containerRef:h,editorInstance:m,isReady:y,error:v,init:g,destroy:w,reinit:C,on:(e,t)=>{p&&p.on(e,t)},off:(e,t)=>{p&&p.off(e,t)}}}function v(){return new f}async function p(e){return(new f).initOffice(e)}function g(e,t,i){return(new f).init(e,t,i)}async function w(e,t,i){const{saveSuccessInfo:o}=await Promise.resolve().then(function(){return u});await o(e,{status:10,key:t,userdata:JSON.stringify({appUserId:i})})}async function C(e,t,i){const{saveSuccessInfo:o}=await Promise.resolve().then(function(){return u});await o(e,{status:9,key:t,userdata:JSON.stringify({appUserId:i})})}export{m as OnlyOfficeEditor,v as createOfficeEditor,C as downloadSave,g as init,p as initOffice,w as shareSave,y as useOnlyOffice};
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../src/core/utils/fileType.ts","../../../src/core/utils/http.ts","../../../src/core/editor.ts","../../../src/vue3/component.ts","../../../src/vue3/useOnlyOffice.ts","../../../src/core/index.ts"],"sourcesContent":["import type { DocumentType, FileType } from '../../types';\n\n/**\n * 根据文件扩展名获取 OnlyOffice 文档类型\n * @param fileType 文件扩展名\n * @returns 文档类型\n */\nexport function getDocumentType(fileType: FileType | string): DocumentType | 'other' {\n const type = fileType.toLowerCase();\n\n // 文档类型\n const wordTypes = ['doc', 'docx', 'odt', 'rtf', 'txt', 'html', 'epub'];\n if (wordTypes.includes(type)) {\n return 'word';\n }\n\n // 表格类型\n const cellTypes = ['xls', 'xlsx', 'ods', 'csv'];\n if (cellTypes.includes(type)) {\n return 'cell';\n }\n\n // 演示类型\n const slideTypes = ['ppt', 'pptx', 'odp'];\n if (slideTypes.includes(type)) {\n return 'slide';\n }\n\n // PDF 类型\n if (type === 'pdf') {\n return 'pdf';\n }\n\n return 'other';\n}\n\n/**\n * 检查文件类型是否受支持\n * @param fileType 文件扩展名\n * @returns 是否支持\n */\nexport function isSupportedFileType(fileType: string): boolean {\n return getDocumentType(fileType) !== 'other';\n}","import axios, { type AxiosRequestConfig, type AxiosResponse } from 'axios';\n\n/**\n * HTTP 请求工具\n */\nexport class HttpClient {\n private baseUrl: string;\n\n constructor(baseUrl: string = '') {\n this.baseUrl = baseUrl;\n }\n\n /**\n * 发送 POST 请求\n * @param url 请求地址\n * @param data 请求数据\n * @param config 额外配置\n * @returns Promise\n */\n async post<T = any>(\n url: string,\n data?: any,\n config?: AxiosRequestConfig\n ): Promise<AxiosResponse<T>> {\n const fullUrl = this.baseUrl ? `${this.baseUrl}${url}` : url;\n return axios.post<T>(fullUrl, data, config);\n }\n\n /**\n * 发送 GET 请求\n * @param url 请求地址\n * @param config 额外配置\n * @returns Promise\n */\n async get<T = any>(\n url: string,\n config?: AxiosRequestConfig\n ): Promise<AxiosResponse<T>> {\n const fullUrl = this.baseUrl ? `${this.baseUrl}${url}` : url;\n return axios.get<T>(fullUrl, config);\n }\n}\n\n/**\n * 验签接口请求\n * @param baseUrl 基础 URL\n * @param data 验签数据\n * @returns 验签结果\n */\nexport async function verifyTokenSign(\n baseUrl: string,\n data: {\n appId: string;\n sign: string;\n timestamp: number;\n }\n): Promise<boolean> {\n try {\n const client = new HttpClient(baseUrl);\n const response = await client.post<{ data: boolean }>(\n '/onlyoffice/token/verifyTokenSign',\n data\n );\n return response.data?.data === true;\n } catch (error) {\n console.error('验签请求失败:', error);\n return false;\n }\n}\n\n/**\n * 保存操作信息\n * @param callbackUrl 回调地址\n * @param data 操作数据\n */\nexport async function saveSuccessInfo(\n callbackUrl: string,\n data: {\n status: number;\n key: string;\n userdata: string;\n }\n): Promise<void> {\n try {\n await axios.post(callbackUrl, data);\n } catch (error) {\n console.error('保存操作信息失败:', error);\n }\n}","import EventEmitter from 'eventemitter3';\nimport type {\n DocumentConfig,\n EditorConfig,\n DocumentPermissions,\n OfficeEventType,\n OfficeCallback,\n OfficeEditorInstance,\n OfficeDocumentConfig,\n OfficeInitConfig,\n AuthConfig,\n VerifyTokenSignFunction,\n} from '../types';\nimport { getDocumentType, isSupportedFileType } from './utils/fileType';\nimport { verifyTokenSign, saveSuccessInfo } from './utils/http';\n\n/**\n * 默认文档权限\n */\nconst DEFAULT_PERMISSIONS: DocumentPermissions = {\n comment: false,\n download: false,\n edit: false,\n print: true,\n review: false,\n editCommentAuthorOnly: false,\n fillForms: false,\n modifyContentControl: false,\n};\n\n/**\n * OnlyOffice 编辑器管理类\n */\nexport class OfficeEditor implements OfficeEditorInstance {\n private editor: any = null;\n private editorId: string;\n private emitter: EventEmitter;\n private documentConfig: DocumentConfig;\n private editorConfig: EditorConfig;\n private callback: OfficeCallback | null = null;\n private height: string = '100%';\n private width: string = '100%';\n\n constructor() {\n this.editorId = `editor-${Date.now().toString(32)}`;\n this.emitter = new EventEmitter();\n this.documentConfig = {\n fileType: 'docx',\n key: '',\n url: '',\n title: '',\n permissions: { ...DEFAULT_PERMISSIONS },\n };\n this.editorConfig = {\n lang: 'zh',\n user: { id: '', name: '' },\n };\n }\n\n /**\n * 配置文档参数\n */\n configure(config: OfficeDocumentConfig): void {\n if (config.height) this.height = config.height;\n if (config.width) this.width = config.width;\n\n if (config.fileType) {\n if (!isSupportedFileType(config.fileType)) {\n throw new Error(`不支持的文件类型: ${config.fileType}`);\n }\n const docType = getDocumentType(config.fileType);\n if (docType !== 'other') {\n this.documentConfig.fileType = config.fileType;\n }\n }\n\n if (config.key) this.documentConfig.key = config.key;\n if (config.url) this.documentConfig.url = config.url;\n if (config.title) this.documentConfig.title = config.title;\n\n if (config.permissions) {\n this.documentConfig.permissions = {\n ...this.documentConfig.permissions,\n ...config.permissions,\n };\n\n // PDF 文件特殊处理\n if (this.documentConfig.fileType === 'pdf') {\n this.documentConfig.permissions.edit = false;\n this.documentConfig.permissions.review = false;\n this.editorConfig.mode = 'view';\n }\n }\n\n if (config.callbackUrl) this.editorConfig.callbackUrl = config.callbackUrl;\n if (config.userId) {\n this.editorConfig.user = {\n ...this.editorConfig.user,\n id: config.userId,\n };\n }\n if (config.userName) {\n this.editorConfig.user = {\n ...this.editorConfig.user,\n name: config.userName,\n };\n }\n if (config.userGroup) {\n this.editorConfig.user = {\n ...this.editorConfig.user,\n group: config.userGroup,\n };\n }\n }\n\n /**\n * 初始化编辑器(带验签)\n */\n async initOffice(config: OfficeInitConfig): Promise<OfficeEditorInstance> {\n const { dom, officeApiUrl, callback, auth, verifyFunction } = config;\n\n if (callback) this.callback = callback;\n\n // 验签逻辑\n if (auth) {\n let verified = false;\n\n if (verifyFunction) {\n // 使用自定义验签函数\n verified = await verifyFunction(auth);\n } else if (auth.verifyUrl) {\n // 使用自定义验签地址\n verified = await verifyTokenSign(auth.verifyUrl, {\n appId: auth.appId,\n sign: auth.sign,\n timestamp: auth.timestamp,\n });\n } else {\n throw new Error('使用验签配置时,必须提供 verifyFunction 或 verifyUrl');\n }\n\n if (!verified) {\n throw new Error('验签失败,请检查验签配置');\n }\n }\n\n return this.createEditor(dom, officeApiUrl);\n }\n\n /**\n * 简化初始化(无验签)\n */\n init(\n dom: HTMLElement,\n officeApiUrl: string,\n callback?: OfficeCallback\n ): OfficeEditorInstance {\n if (callback) this.callback = callback;\n return this.createEditor(dom, officeApiUrl);\n }\n\n /**\n * 创建编辑器实例\n */\n private createEditor(dom: HTMLElement, officeApiUrl: string): OfficeEditorInstance {\n if (!dom) {\n throw new Error('必须提供挂载的 DOM 元素');\n }\n\n if (!officeApiUrl) {\n throw new Error('必须提供 OnlyOffice API 脚本地址');\n }\n\n // 设置容器样式\n dom.style.position = 'relative';\n\n // 创建编辑器容器\n const mainDiv = document.createElement('div');\n mainDiv.id = this.editorId;\n mainDiv.style.height = '100%';\n mainDiv.style.width = '100%';\n dom.appendChild(mainDiv);\n\n // 动态加载 OnlyOffice API 脚本\n const scriptId = `script-${this.editorId}`;\n const existingScript = document.querySelector(`#${scriptId}`);\n\n if (!existingScript) {\n const script = document.createElement('script');\n script.id = scriptId;\n script.src = officeApiUrl;\n script.onload = () => this.instantiateEditor();\n document.head.appendChild(script);\n } else {\n this.instantiateEditor();\n }\n\n return this;\n }\n\n /**\n * 实例化编辑器\n */\n private instantiateEditor(): void {\n // 销毁现有实例\n if (this.editor) {\n this.editor.destroyEditor();\n this.editor = null;\n }\n\n // 构建配置对象\n const config = {\n width: this.width,\n height: this.height,\n documentType: this.getDocumentType(),\n document: this.documentConfig,\n editorConfig: this.editorConfig,\n events: this.createEventHandlers(),\n };\n\n // 创建编辑器实例\n this.editor = new window.DocsAPI.DocEditor(this.editorId, config);\n }\n\n /**\n * 获取文档类型\n */\n private getDocumentType(): string {\n const type = getDocumentType(this.documentConfig.fileType);\n return type === 'other' ? 'word' : type;\n }\n\n /**\n * 创建事件处理器\n */\n private createEventHandlers(): Record<string, (event: any) => void> {\n return {\n onDocumentStateChange: (event: any) => {\n this.emitter.emit('documentStateChange', event);\n },\n onDocumentReady: () => {\n console.log('Document is loaded');\n // 通知后端文档加载成功\n if (this.editorConfig.callbackUrl) {\n saveSuccessInfo(this.editorConfig.callbackUrl, {\n status: 8,\n key: this.documentConfig.key,\n userdata: JSON.stringify({\n appUserId: this.editorConfig.user?.id,\n }),\n });\n }\n this.callback?.('onDocumentReady');\n this.emitter.emit('onDocumentReady');\n },\n onInfo: (event: any) => {\n console.log('ONLYOFFICE Document Editor is opened in mode', event.data.mode);\n this.callback?.('onInfo', event.data);\n this.emitter.emit('onInfo', event);\n },\n onError: (event: any) => {\n console.error('ONLYOFFICE Error:', event.data.errorCode, event.data.errorDescription);\n this.emitter.emit('onError', event);\n },\n onRequestHistory: (event: any) => {\n this.callback?.('onRequestHistory', event, this.editor);\n this.emitter.emit('onRequestHistory', { event, editor: this.editor });\n },\n onRequestHistoryData: (event: any) => {\n this.callback?.('onRequestHistoryData', event, this.editor);\n this.emitter.emit('onRequestHistoryData', { event, editor: this.editor });\n },\n onRequestHistoryClose: (event: any) => {\n this.callback?.('onRequestHistoryClose', event, this.editor);\n this.emitter.emit('onRequestHistoryClose', { event, editor: this.editor });\n },\n onRequestRestore: (event: any) => {\n this.callback?.('onRequestRestore', event, this.editor);\n this.emitter.emit('onRequestRestore', { event, editor: this.editor });\n },\n onRequestSendNotify: (event: any) => {\n console.log('onRequestSendNotify', event);\n this.emitter.emit('onRequestSendNotify', event);\n },\n onRequestUsers: (event: any) => {\n console.log('onRequestUsers', event);\n this.emitter.emit('onRequestUsers', event);\n },\n };\n }\n\n /**\n * 监听事件\n */\n on(event: OfficeEventType, callback: (...args: any[]) => void): void {\n this.emitter.on(event, callback);\n }\n\n /**\n * 移除事件监听\n */\n off(event: OfficeEventType, callback: (...args: any[]) => void): void {\n this.emitter.off(event, callback);\n }\n\n /**\n * 获取当前配置\n */\n getConfig(): DocumentConfig & EditorConfig {\n return {\n ...this.documentConfig,\n ...this.editorConfig,\n };\n }\n\n /**\n * 获取内部编辑器实例\n */\n getEditor(): any {\n return this.editor;\n }\n\n /**\n * 销毁编辑器\n */\n destroy(): void {\n if (this.editor) {\n this.editor.destroyEditor();\n this.editor = null;\n }\n this.emitter.removeAllListeners();\n this.callback = null;\n }\n}","import {\n defineComponent,\n ref,\n onMounted,\n onBeforeUnmount,\n watch,\n type PropType,\n type Ref,\n} from 'vue';\nimport { OfficeEditor } from '../core/editor';\nimport type {\n OfficeDocumentConfig,\n OfficeInitConfig,\n OfficeCallback,\n OfficeEventType,\n AuthConfig,\n VerifyTokenSignFunction,\n OfficeEditorInstance,\n} from '../types';\n\n/**\n * OnlyOffice 编辑器 Vue 3 组件\n */\nexport const OnlyOfficeEditor = defineComponent({\n name: 'OnlyOfficeEditor',\n\n props: {\n /** OnlyOffice API 脚本地址 */\n officeApiUrl: {\n type: String,\n required: true,\n },\n /** 文档配置 */\n document: {\n type: Object as PropType<OfficeDocumentConfig>,\n required: true,\n },\n /** 验签配置 */\n auth: {\n type: Object as PropType<AuthConfig>,\n default: undefined,\n },\n /** 自定义验签函数 */\n verifyFunction: {\n type: Function as PropType<VerifyTokenSignFunction>,\n default: undefined,\n },\n /** 编辑器高度 */\n height: {\n type: String,\n default: '100%',\n },\n /** 编辑器宽度 */\n width: {\n type: String,\n default: '100%',\n },\n },\n\n emits: [\n 'ready',\n 'error',\n 'documentStateChange',\n 'requestHistory',\n 'requestHistoryData',\n 'requestHistoryClose',\n 'requestRestore',\n ],\n\n setup(props: any, { emit }: any) {\n const containerRef: Ref<HTMLElement | null> = ref(null);\n const editorInstance: Ref<OfficeEditorInstance | null> = ref(null);\n const isReady: Ref<boolean> = ref(false);\n const error: Ref<string | null> = ref(null);\n\n /**\n * 初始化编辑器\n */\n const initEditor = async () => {\n if (!containerRef.value) return;\n\n try {\n const editor = new OfficeEditor();\n\n // 配置文档参数\n editor.configure({\n ...props.document,\n height: props.height,\n width: props.width,\n });\n\n // 事件回调\n const callback: OfficeCallback = (type, event, editorInst) => {\n switch (type) {\n case 'onDocumentReady':\n isReady.value = true;\n emit('ready', editorInst);\n break;\n case 'onInfo':\n break;\n case 'onRequestHistory':\n emit('requestHistory', { event, editor: editorInst });\n break;\n case 'onRequestHistoryData':\n emit('requestHistoryData', { event, editor: editorInst });\n break;\n case 'onRequestHistoryClose':\n emit('requestHistoryClose', { event, editor: editorInst });\n break;\n case 'onRequestRestore':\n emit('requestRestore', { event, editor: editorInst });\n break;\n }\n };\n\n // 初始化配置\n const initConfig: OfficeInitConfig = {\n dom: containerRef.value,\n officeApiUrl: props.officeApiUrl,\n callback,\n auth: props.auth,\n verifyFunction: props.verifyFunction,\n };\n\n // 初始化编辑器\n editorInstance.value = await editor.initOffice(initConfig);\n\n // 监听错误事件\n editor.on('onError' as OfficeEventType, (event: any) => {\n error.value = event.data?.errorDescription || '编辑器错误';\n emit('error', event);\n });\n\n // 监听文档状态变化\n editor.on('documentStateChange' as OfficeEventType, (event: any) => {\n emit('documentStateChange', event);\n });\n } catch (err: any) {\n error.value = err.message || '初始化失败';\n emit('error', err);\n }\n };\n\n /**\n * 销毁编辑器\n */\n const destroyEditor = () => {\n if (editorInstance.value) {\n editorInstance.value.destroy();\n editorInstance.value = null;\n isReady.value = false;\n }\n };\n\n // 监听文档配置变化\n watch(\n () => props.document,\n (newDoc: any) => {\n if (editorInstance.value && newDoc) {\n // 重新初始化编辑器\n destroyEditor();\n initEditor();\n }\n },\n { deep: true }\n );\n\n // 组件挂载时初始化\n onMounted(() => {\n initEditor();\n });\n\n // 组件销毁前清理\n onBeforeUnmount(() => {\n destroyEditor();\n });\n\n return {\n containerRef,\n editorInstance,\n isReady,\n error,\n };\n },\n\n template: `\n <div class=\"onlyoffice-editor-container\" style=\"width: 100%; height: 100%; position: relative;\">\n <div ref=\"containerRef\" style=\"width: 100%; height: 100%;\"></div>\n <div v-if=\"error\" class=\"onlyoffice-error\" style=\"position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); color: red;\">\n {{ error }}\n </div>\n </div>\n `,\n});\n\nexport default OnlyOfficeEditor;","import { ref, onMounted, onBeforeUnmount, watch, type Ref } from 'vue';\nimport { OfficeEditor } from '../core/editor';\nimport type {\n OfficeDocumentConfig,\n OfficeInitConfig,\n OfficeCallback,\n OfficeEventType,\n AuthConfig,\n VerifyTokenSignFunction,\n OfficeEditorInstance,\n} from '../types';\n\n/**\n * useOnlyOffice 配置选项\n */\nexport interface UseOnlyOfficeOptions {\n /** OnlyOffice API 脚本地址 */\n officeApiUrl: string;\n /** 文档配置 */\n document: OfficeDocumentConfig;\n /** 验签配置 */\n auth?: AuthConfig;\n /** 自定义验签函数 */\n verifyFunction?: VerifyTokenSignFunction;\n /** 编辑器高度 */\n height?: string;\n /** 编辑器宽度 */\n width?: string;\n /** 是否自动初始化 */\n autoInit?: boolean;\n}\n\n/**\n * useOnlyOffice 返回值\n */\nexport interface UseOnlyOfficeReturn {\n /** 容器元素引用 */\n containerRef: Ref<HTMLElement | null>;\n /** 编辑器实例 */\n editorInstance: Ref<OfficeEditorInstance | null>;\n /** 是否已就绪 */\n isReady: Ref<boolean>;\n /** 错误信息 */\n error: Ref<string | null>;\n /** 初始化编辑器 */\n init: () => Promise<void>;\n /** 销毁编辑器 */\n destroy: () => void;\n /** 重新初始化 */\n reinit: () => Promise<void>;\n /** 监听事件 */\n on: (event: OfficeEventType, callback: (...args: any[]) => void) => void;\n /** 移除事件监听 */\n off: (event: OfficeEventType, callback: (...args: any[]) => void) => void;\n}\n\n/**\n * OnlyOffice Vue 3 组合式函数\n * @param options 配置选项\n * @returns 编辑器状态和方法\n */\nexport function useOnlyOffice(options: UseOnlyOfficeOptions): UseOnlyOfficeReturn {\n const {\n officeApiUrl,\n document: documentConfig,\n auth,\n verifyFunction,\n height = '100%',\n width = '100%',\n autoInit = true,\n } = options;\n\n const containerRef: Ref<HTMLElement | null> = ref(null);\n const editorInstance: Ref<OfficeEditorInstance | null> = ref(null);\n const isReady: Ref<boolean> = ref(false);\n const error: Ref<string | null> = ref(null);\n\n let editor: OfficeEditor | null = null;\n\n /**\n * 初始化编辑器\n */\n const init = async () => {\n if (!containerRef.value) {\n error.value = '容器元素未找到';\n return;\n }\n\n try {\n // 销毁现有实例\n destroy();\n\n editor = new OfficeEditor();\n\n // 配置文档参数\n editor.configure({\n ...documentConfig,\n height,\n width,\n });\n\n // 事件回调\n const callback: OfficeCallback = (type, _event, _editorInst) => {\n switch (type) {\n case 'onDocumentReady':\n isReady.value = true;\n break;\n case 'onInfo':\n break;\n }\n };\n\n // 初始化配置\n const initConfig: OfficeInitConfig = {\n dom: containerRef.value,\n officeApiUrl,\n callback,\n auth,\n verifyFunction,\n };\n\n // 初始化编辑器\n editorInstance.value = await editor.initOffice(initConfig);\n\n // 监听错误事件\n editor.on('onError' as OfficeEventType, (event: any) => {\n error.value = event.data?.errorDescription || '编辑器错误';\n });\n } catch (err: any) {\n error.value = err.message || '初始化失败';\n }\n };\n\n /**\n * 销毁编辑器\n */\n const destroy = () => {\n if (editor) {\n editor.destroy();\n editor = null;\n editorInstance.value = null;\n isReady.value = false;\n }\n };\n\n /**\n * 重新初始化\n */\n const reinit = async () => {\n destroy();\n await init();\n };\n\n /**\n * 监听事件\n */\n const on = (event: OfficeEventType, callback: (...args: any[]) => void) => {\n if (editor) {\n editor.on(event, callback);\n }\n };\n\n /**\n * 移除事件监听\n */\n const off = (event: OfficeEventType, callback: (...args: any[]) => void) => {\n if (editor) {\n editor.off(event, callback);\n }\n };\n\n // 监听文档配置变化\n watch(\n () => documentConfig,\n async (newDoc: any) => {\n if (editor && newDoc) {\n await reinit();\n }\n },\n { deep: true }\n );\n\n // 组件挂载时初始化\n onMounted(() => {\n if (autoInit) {\n init();\n }\n });\n\n // 组件销毁前清理\n onBeforeUnmount(() => {\n destroy();\n });\n\n return {\n containerRef,\n editorInstance,\n isReady,\n error,\n init,\n destroy,\n reinit,\n on,\n off,\n };\n}\n\nexport default useOnlyOffice;","export { OfficeEditor } from './editor';\nexport { getDocumentType, isSupportedFileType } from './utils/fileType';\nexport { HttpClient, verifyTokenSign, saveSuccessInfo } from './utils/http';\n\n// 导出类型\nexport type {\n DocumentType,\n FileType,\n DocumentPermissions,\n UserInfo,\n DocumentConfig,\n EditorConfig,\n AuthConfig,\n VerifyTokenSignFunction,\n OfficeInitConfig,\n OfficeDocumentConfig,\n OfficeEventType,\n OfficeCallbackType,\n OfficeCallback,\n OfficeEditorInstance,\n OfficeSDK,\n} from '../types';\n\nimport { OfficeEditor } from './editor';\nimport type {\n OfficeDocumentConfig,\n OfficeInitConfig,\n OfficeCallback,\n OfficeEventType,\n OfficeEditorInstance,\n} from '../types';\n\n/**\n * 创建 Office 编辑器实例\n * @returns OfficeEditor 实例\n */\nexport function createOfficeEditor(): OfficeEditor {\n return new OfficeEditor();\n}\n\n/**\n * 快速初始化 Office 编辑器\n * @param config 初始化配置\n * @returns Promise<OfficeEditorInstance>\n */\nexport async function initOffice(config: OfficeInitConfig): Promise<OfficeEditorInstance> {\n const editor = new OfficeEditor();\n return editor.initOffice(config);\n}\n\n/**\n * 简化初始化(无验签)\n * @param dom 挂载的 DOM 元素\n * @param officeApiUrl OnlyOffice API 地址\n * @param callback 事件回调\n * @returns OfficeEditorInstance\n */\nexport function init(\n dom: HTMLElement,\n officeApiUrl: string,\n callback?: OfficeCallback\n): OfficeEditorInstance {\n const editor = new OfficeEditor();\n return editor.init(dom, officeApiUrl, callback);\n}\n\n/**\n * 配置文档参数(全局配置,需要先创建编辑器实例)\n * @deprecated 建议使用 OfficeEditor.configure() 方法\n */\nexport function config(_config: OfficeDocumentConfig): void {\n console.warn('此方法已废弃,请使用 OfficeEditor.configure() 方法');\n}\n\n/**\n * 销毁编辑器(全局方法,需要先创建编辑器实例)\n * @deprecated 建议使用 OfficeEditor.destroy() 方法\n */\nexport function destroy(): void {\n console.warn('此方法已废弃,请使用 OfficeEditor.destroy() 方法');\n}\n\n/**\n * 监听事件(全局方法,需要先创建编辑器实例)\n * @deprecated 建议使用 OfficeEditor.on() 方法\n */\nexport function on(_event: OfficeEventType, _callback: (...args: any[]) => void): void {\n console.warn('此方法已废弃,请使用 OfficeEditor.on() 方法');\n}\n\n/**\n * 记录分享动作\n * @param callbackUrl 回调地址\n * @param fileKey 文件标识\n * @param appUserId 用户 ID\n */\nexport async function shareSave(\n callbackUrl: string,\n fileKey: string,\n appUserId: string\n): Promise<void> {\n const { saveSuccessInfo } = await import('./utils/http');\n await saveSuccessInfo(callbackUrl, {\n status: 10,\n key: fileKey,\n userdata: JSON.stringify({ appUserId }),\n });\n}\n\n/**\n * 记录下载动作\n * @param callbackUrl 回调地址\n * @param fileKey 文件标识\n * @param appUserId 用户 ID\n */\nexport async function downloadSave(\n callbackUrl: string,\n fileKey: string,\n appUserId: string\n): Promise<void> {\n const { saveSuccessInfo } = await import('./utils/http');\n await saveSuccessInfo(callbackUrl, {\n status: 9,\n key: fileKey,\n userdata: JSON.stringify({ appUserId }),\n });\n}"],"names":["getDocumentType","fileType","type","toLowerCase","includes","HttpClient","constructor","baseUrl","this","post","url","data","config","fullUrl","axios","get","async","verifyTokenSign","client","_a","error","console","saveSuccessInfo","callbackUrl","DEFAULT_PERMISSIONS","comment","download","edit","print","review","editCommentAuthorOnly","fillForms","modifyContentControl","OfficeEditor","editor","callback","height","width","editorId","Date","now","toString","emitter","EventEmitter","documentConfig","key","title","permissions","editorConfig","lang","user","id","name","configure","Error","mode","userId","userName","userGroup","group","initOffice","dom","officeApiUrl","auth","verifyFunction","verified","verifyUrl","appId","sign","timestamp","createEditor","init","style","position","mainDiv","document","createElement","appendChild","scriptId","querySelector","instantiateEditor","script","src","onload","head","destroyEditor","documentType","events","createEventHandlers","window","DocsAPI","DocEditor","onDocumentStateChange","event","emit","onDocumentReady","log","status","userdata","JSON","stringify","appUserId","_b","call","onInfo","onError","errorCode","errorDescription","onRequestHistory","onRequestHistoryData","onRequestHistoryClose","onRequestRestore","onRequestSendNotify","onRequestUsers","on","off","getConfig","getEditor","destroy","removeAllListeners","OnlyOfficeEditor","defineComponent","props","String","required","Object","default","undefined","Function","emits","setup","containerRef","ref","editorInstance","isReady","initEditor","value","editorInst","initConfig","err","message","watch","newDoc","deep","onMounted","onBeforeUnmount","template","useOnlyOffice","options","autoInit","_event","_editorInst","reinit","createOfficeEditor","shareSave","fileKey","Promise","resolve","then","http","downloadSave"],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { DocumentConfig, EditorConfig, OfficeEventType, OfficeCallback, OfficeEditorInstance, OfficeDocumentConfig, OfficeInitConfig } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* OnlyOffice 编辑器管理类
|
|
4
|
+
*/
|
|
5
|
+
export declare class OfficeEditor implements OfficeEditorInstance {
|
|
6
|
+
private editor;
|
|
7
|
+
private editorId;
|
|
8
|
+
private emitter;
|
|
9
|
+
private documentConfig;
|
|
10
|
+
private editorConfig;
|
|
11
|
+
private callback;
|
|
12
|
+
private height;
|
|
13
|
+
private width;
|
|
14
|
+
constructor();
|
|
15
|
+
/**
|
|
16
|
+
* 配置文档参数
|
|
17
|
+
*/
|
|
18
|
+
configure(config: OfficeDocumentConfig): void;
|
|
19
|
+
/**
|
|
20
|
+
* 初始化编辑器(带验签)
|
|
21
|
+
*/
|
|
22
|
+
initOffice(config: OfficeInitConfig): Promise<OfficeEditorInstance>;
|
|
23
|
+
/**
|
|
24
|
+
* 简化初始化(无验签)
|
|
25
|
+
*/
|
|
26
|
+
init(dom: HTMLElement, officeApiUrl: string, callback?: OfficeCallback): OfficeEditorInstance;
|
|
27
|
+
/**
|
|
28
|
+
* 创建编辑器实例
|
|
29
|
+
*/
|
|
30
|
+
private createEditor;
|
|
31
|
+
/**
|
|
32
|
+
* 实例化编辑器
|
|
33
|
+
*/
|
|
34
|
+
private instantiateEditor;
|
|
35
|
+
/**
|
|
36
|
+
* 获取文档类型
|
|
37
|
+
*/
|
|
38
|
+
private getDocumentType;
|
|
39
|
+
/**
|
|
40
|
+
* 创建事件处理器
|
|
41
|
+
*/
|
|
42
|
+
private createEventHandlers;
|
|
43
|
+
/**
|
|
44
|
+
* 监听事件
|
|
45
|
+
*/
|
|
46
|
+
on(event: OfficeEventType, callback: (...args: any[]) => void): void;
|
|
47
|
+
/**
|
|
48
|
+
* 移除事件监听
|
|
49
|
+
*/
|
|
50
|
+
off(event: OfficeEventType, callback: (...args: any[]) => void): void;
|
|
51
|
+
/**
|
|
52
|
+
* 获取当前配置
|
|
53
|
+
*/
|
|
54
|
+
getConfig(): DocumentConfig & EditorConfig;
|
|
55
|
+
/**
|
|
56
|
+
* 获取内部编辑器实例
|
|
57
|
+
*/
|
|
58
|
+
getEditor(): any;
|
|
59
|
+
/**
|
|
60
|
+
* 销毁编辑器
|
|
61
|
+
*/
|
|
62
|
+
destroy(): void;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=editor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../../src/core/editor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EAEZ,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,gBAAgB,EAGjB,MAAM,UAAU,CAAC;AAkBlB;;GAEG;AACH,qBAAa,YAAa,YAAW,oBAAoB;IACvD,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,KAAK,CAAkB;;IAkB/B;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI;IAqD7C;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IA+BzE;;OAEG;IACH,IAAI,CACF,GAAG,EAAE,WAAW,EAChB,YAAY,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,cAAc,GACxB,oBAAoB;IAKvB;;OAEG;IACH,OAAO,CAAC,YAAY;IAoCpB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqBzB;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwD3B;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAIpE;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAIrE;;OAEG;IACH,SAAS,IAAI,cAAc,GAAG,YAAY;IAO1C;;OAEG;IACH,SAAS,IAAI,GAAG;IAIhB;;OAEG;IACH,OAAO,IAAI,IAAI;CAQhB"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export { OfficeEditor } from './editor';
|
|
2
|
+
export { getDocumentType, isSupportedFileType } from './utils/fileType';
|
|
3
|
+
export { HttpClient, verifyTokenSign, saveSuccessInfo } from './utils/http';
|
|
4
|
+
export type { DocumentType, FileType, DocumentPermissions, UserInfo, DocumentConfig, EditorConfig, AuthConfig, VerifyTokenSignFunction, OfficeInitConfig, OfficeDocumentConfig, OfficeEventType, OfficeCallbackType, OfficeCallback, OfficeEditorInstance, OfficeSDK, } from '../types';
|
|
5
|
+
import { OfficeEditor } from './editor';
|
|
6
|
+
import type { OfficeDocumentConfig, OfficeInitConfig, OfficeCallback, OfficeEventType, OfficeEditorInstance } from '../types';
|
|
7
|
+
/**
|
|
8
|
+
* 创建 Office 编辑器实例
|
|
9
|
+
* @returns OfficeEditor 实例
|
|
10
|
+
*/
|
|
11
|
+
export declare function createOfficeEditor(): OfficeEditor;
|
|
12
|
+
/**
|
|
13
|
+
* 快速初始化 Office 编辑器
|
|
14
|
+
* @param config 初始化配置
|
|
15
|
+
* @returns Promise<OfficeEditorInstance>
|
|
16
|
+
*/
|
|
17
|
+
export declare function initOffice(config: OfficeInitConfig): Promise<OfficeEditorInstance>;
|
|
18
|
+
/**
|
|
19
|
+
* 简化初始化(无验签)
|
|
20
|
+
* @param dom 挂载的 DOM 元素
|
|
21
|
+
* @param officeApiUrl OnlyOffice API 地址
|
|
22
|
+
* @param callback 事件回调
|
|
23
|
+
* @returns OfficeEditorInstance
|
|
24
|
+
*/
|
|
25
|
+
export declare function init(dom: HTMLElement, officeApiUrl: string, callback?: OfficeCallback): OfficeEditorInstance;
|
|
26
|
+
/**
|
|
27
|
+
* 配置文档参数(全局配置,需要先创建编辑器实例)
|
|
28
|
+
* @deprecated 建议使用 OfficeEditor.configure() 方法
|
|
29
|
+
*/
|
|
30
|
+
export declare function config(_config: OfficeDocumentConfig): void;
|
|
31
|
+
/**
|
|
32
|
+
* 销毁编辑器(全局方法,需要先创建编辑器实例)
|
|
33
|
+
* @deprecated 建议使用 OfficeEditor.destroy() 方法
|
|
34
|
+
*/
|
|
35
|
+
export declare function destroy(): void;
|
|
36
|
+
/**
|
|
37
|
+
* 监听事件(全局方法,需要先创建编辑器实例)
|
|
38
|
+
* @deprecated 建议使用 OfficeEditor.on() 方法
|
|
39
|
+
*/
|
|
40
|
+
export declare function on(_event: OfficeEventType, _callback: (...args: any[]) => void): void;
|
|
41
|
+
/**
|
|
42
|
+
* 记录分享动作
|
|
43
|
+
* @param callbackUrl 回调地址
|
|
44
|
+
* @param fileKey 文件标识
|
|
45
|
+
* @param appUserId 用户 ID
|
|
46
|
+
*/
|
|
47
|
+
export declare function shareSave(callbackUrl: string, fileKey: string, appUserId: string): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* 记录下载动作
|
|
50
|
+
* @param callbackUrl 回调地址
|
|
51
|
+
* @param fileKey 文件标识
|
|
52
|
+
* @param appUserId 用户 ID
|
|
53
|
+
*/
|
|
54
|
+
export declare function downloadSave(callbackUrl: string, fileKey: string, appUserId: string): Promise<void>;
|
|
55
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG5E,YAAY,EACV,YAAY,EACZ,QAAQ,EACR,mBAAmB,EACnB,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,UAAU,EACV,uBAAuB,EACvB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,SAAS,GACV,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,KAAK,EACV,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,oBAAoB,EACrB,MAAM,UAAU,CAAC;AAElB;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,CAEjD;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAGxF;AAED;;;;;;GAMG;AACH,wBAAgB,IAAI,CAClB,GAAG,EAAE,WAAW,EAChB,YAAY,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,cAAc,GACxB,oBAAoB,CAGtB;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAE1D;AAED;;;GAGG;AACH,wBAAgB,OAAO,IAAI,IAAI,CAE9B;AAED;;;GAGG;AACH,wBAAgB,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,CAErF;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAC7B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAOf"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { DocumentType, FileType } from '../../types';
|
|
2
|
+
/**
|
|
3
|
+
* 根据文件扩展名获取 OnlyOffice 文档类型
|
|
4
|
+
* @param fileType 文件扩展名
|
|
5
|
+
* @returns 文档类型
|
|
6
|
+
*/
|
|
7
|
+
export declare function getDocumentType(fileType: FileType | string): DocumentType | 'other';
|
|
8
|
+
/**
|
|
9
|
+
* 检查文件类型是否受支持
|
|
10
|
+
* @param fileType 文件扩展名
|
|
11
|
+
* @returns 是否支持
|
|
12
|
+
*/
|
|
13
|
+
export declare function isSupportedFileType(fileType: string): boolean;
|
|
14
|
+
//# sourceMappingURL=fileType.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileType.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/fileType.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE1D;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,YAAY,GAAG,OAAO,CA2BnF;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE7D"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type AxiosRequestConfig, type AxiosResponse } from 'axios';
|
|
2
|
+
/**
|
|
3
|
+
* HTTP 请求工具
|
|
4
|
+
*/
|
|
5
|
+
export declare class HttpClient {
|
|
6
|
+
private baseUrl;
|
|
7
|
+
constructor(baseUrl?: string);
|
|
8
|
+
/**
|
|
9
|
+
* 发送 POST 请求
|
|
10
|
+
* @param url 请求地址
|
|
11
|
+
* @param data 请求数据
|
|
12
|
+
* @param config 额外配置
|
|
13
|
+
* @returns Promise
|
|
14
|
+
*/
|
|
15
|
+
post<T = any>(url: string, data?: any, config?: AxiosRequestConfig): Promise<AxiosResponse<T>>;
|
|
16
|
+
/**
|
|
17
|
+
* 发送 GET 请求
|
|
18
|
+
* @param url 请求地址
|
|
19
|
+
* @param config 额外配置
|
|
20
|
+
* @returns Promise
|
|
21
|
+
*/
|
|
22
|
+
get<T = any>(url: string, config?: AxiosRequestConfig): Promise<AxiosResponse<T>>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* 验签接口请求
|
|
26
|
+
* @param baseUrl 基础 URL
|
|
27
|
+
* @param data 验签数据
|
|
28
|
+
* @returns 验签结果
|
|
29
|
+
*/
|
|
30
|
+
export declare function verifyTokenSign(baseUrl: string, data: {
|
|
31
|
+
appId: string;
|
|
32
|
+
sign: string;
|
|
33
|
+
timestamp: number;
|
|
34
|
+
}): Promise<boolean>;
|
|
35
|
+
/**
|
|
36
|
+
* 保存操作信息
|
|
37
|
+
* @param callbackUrl 回调地址
|
|
38
|
+
* @param data 操作数据
|
|
39
|
+
*/
|
|
40
|
+
export declare function saveSuccessInfo(callbackUrl: string, data: {
|
|
41
|
+
status: number;
|
|
42
|
+
key: string;
|
|
43
|
+
userdata: string;
|
|
44
|
+
}): Promise<void>;
|
|
45
|
+
//# sourceMappingURL=http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/http.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,kBAAkB,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3E;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,GAAE,MAAW;IAIhC;;;;;;OAMG;IACG,IAAI,CAAC,CAAC,GAAG,GAAG,EAChB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,GAAG,EACV,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAK5B;;;;;OAKG;IACG,GAAG,CAAC,CAAC,GAAG,GAAG,EACf,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;CAI7B;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;IACJ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,GACA,OAAO,CAAC,OAAO,CAAC,CAYlB;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;IACJ,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CAClB,GACA,OAAO,CAAC,IAAI,CAAC,CAMf"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { OfficeEditor, createOfficeEditor, initOffice, init, shareSave, downloadSave, } from './core';
|
|
2
|
+
export { getDocumentType, isSupportedFileType } from './core/utils/fileType';
|
|
3
|
+
export { HttpClient, verifyTokenSign, saveSuccessInfo } from './core/utils/http';
|
|
4
|
+
export type { DocumentType, FileType, DocumentPermissions, UserInfo, DocumentConfig, EditorConfig, AuthConfig, VerifyTokenSignFunction, OfficeInitConfig, OfficeDocumentConfig, OfficeEventType, OfficeCallbackType, OfficeCallback, OfficeEditorInstance, OfficeSDK, } from './types';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,UAAU,EACV,IAAI,EACJ,SAAS,EACT,YAAY,GACb,MAAM,QAAQ,CAAC;AAGhB,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGjF,YAAY,EACV,YAAY,EACZ,QAAQ,EACR,mBAAmB,EACnB,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,UAAU,EACV,uBAAuB,EACvB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,SAAS,GACV,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { type FC } from 'react';
|
|
2
|
+
import type { OfficeDocumentConfig, AuthConfig, VerifyTokenSignFunction, OfficeEditorInstance } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* OnlyOfficeEditor 组件属性
|
|
5
|
+
*/
|
|
6
|
+
export interface OnlyOfficeEditorProps {
|
|
7
|
+
/** OnlyOffice API 脚本地址 */
|
|
8
|
+
officeApiUrl: string;
|
|
9
|
+
/** 文档配置 */
|
|
10
|
+
document: OfficeDocumentConfig;
|
|
11
|
+
/** 验签配置 */
|
|
12
|
+
auth?: AuthConfig;
|
|
13
|
+
/** 自定义验签函数 */
|
|
14
|
+
verifyFunction?: VerifyTokenSignFunction;
|
|
15
|
+
/** 编辑器高度 */
|
|
16
|
+
height?: string;
|
|
17
|
+
/** 编辑器宽度 */
|
|
18
|
+
width?: string;
|
|
19
|
+
/** 就绪回调 */
|
|
20
|
+
onReady?: (editor: OfficeEditorInstance) => void;
|
|
21
|
+
/** 错误回调 */
|
|
22
|
+
onError?: (error: any) => void;
|
|
23
|
+
/** 文档状态变化回调 */
|
|
24
|
+
onDocumentStateChange?: (event: any) => void;
|
|
25
|
+
/** 历史记录请求回调 */
|
|
26
|
+
onRequestHistory?: (data: {
|
|
27
|
+
event: any;
|
|
28
|
+
editor: any;
|
|
29
|
+
}) => void;
|
|
30
|
+
/** 历史数据请求回调 */
|
|
31
|
+
onRequestHistoryData?: (data: {
|
|
32
|
+
event: any;
|
|
33
|
+
editor: any;
|
|
34
|
+
}) => void;
|
|
35
|
+
/** 历史关闭请求回调 */
|
|
36
|
+
onRequestHistoryClose?: (data: {
|
|
37
|
+
event: any;
|
|
38
|
+
editor: any;
|
|
39
|
+
}) => void;
|
|
40
|
+
/** 恢复请求回调 */
|
|
41
|
+
onRequestRestore?: (data: {
|
|
42
|
+
event: any;
|
|
43
|
+
editor: any;
|
|
44
|
+
}) => void;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* OnlyOffice 编辑器 React 组件
|
|
48
|
+
*/
|
|
49
|
+
export declare const OnlyOfficeEditor: FC<OnlyOfficeEditorProps>;
|
|
50
|
+
export default OnlyOfficeEditor;
|
|
51
|
+
//# sourceMappingURL=OnlyOfficeEditor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OnlyOfficeEditor.d.ts","sourceRoot":"","sources":["../../../src/react/OnlyOfficeEditor.tsx"],"names":[],"mappings":"AAAA,OAAc,EAKZ,KAAK,EAAE,EAER,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EACV,oBAAoB,EAIpB,UAAU,EACV,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,0BAA0B;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW;IACX,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,WAAW;IACX,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,cAAc;IACd,cAAc,CAAC,EAAE,uBAAuB,CAAC;IACzC,YAAY;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW;IACX,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,CAAC;IACjD,WAAW;IACX,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/B,eAAe;IACf,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC7C,eAAe;IACf,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,GAAG,CAAC;QAAC,MAAM,EAAE,GAAG,CAAA;KAAE,KAAK,IAAI,CAAC;IAC/D,eAAe;IACf,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,GAAG,CAAC;QAAC,MAAM,EAAE,GAAG,CAAA;KAAE,KAAK,IAAI,CAAC;IACnE,eAAe;IACf,qBAAqB,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,GAAG,CAAC;QAAC,MAAM,EAAE,GAAG,CAAA;KAAE,KAAK,IAAI,CAAC;IACpE,aAAa;IACb,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,GAAG,CAAC;QAAC,MAAM,EAAE,GAAG,CAAA;KAAE,KAAK,IAAI,CAAC;CAChE;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CAoKtD,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { OnlyOfficeEditor } from './OnlyOfficeEditor';
|
|
2
|
+
export type { OnlyOfficeEditorProps } from './OnlyOfficeEditor';
|
|
3
|
+
export { useOnlyOffice } from './useOnlyOffice';
|
|
4
|
+
export type { UseOnlyOfficeOptions, UseOnlyOfficeReturn } from './useOnlyOffice';
|
|
5
|
+
export { createOfficeEditor, initOffice, init, shareSave, downloadSave, } from '../core';
|
|
6
|
+
export type { DocumentType, FileType, DocumentPermissions, UserInfo, DocumentConfig, EditorConfig, AuthConfig, VerifyTokenSignFunction, OfficeInitConfig, OfficeDocumentConfig, OfficeEventType, OfficeCallbackType, OfficeCallback, OfficeEditorInstance, OfficeSDK, } from '../types';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAGjF,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,IAAI,EACJ,SAAS,EACT,YAAY,GACb,MAAM,SAAS,CAAC;AAGjB,YAAY,EACV,YAAY,EACZ,QAAQ,EACR,mBAAmB,EACnB,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,UAAU,EACV,uBAAuB,EACvB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,SAAS,GACV,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { type MutableRefObject } from 'react';
|
|
2
|
+
import type { OfficeDocumentConfig, OfficeEventType, AuthConfig, VerifyTokenSignFunction, OfficeEditorInstance } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* useOnlyOffice 配置选项
|
|
5
|
+
*/
|
|
6
|
+
export interface UseOnlyOfficeOptions {
|
|
7
|
+
/** OnlyOffice API 脚本地址 */
|
|
8
|
+
officeApiUrl: string;
|
|
9
|
+
/** 文档配置 */
|
|
10
|
+
document: OfficeDocumentConfig;
|
|
11
|
+
/** 验签配置 */
|
|
12
|
+
auth?: AuthConfig;
|
|
13
|
+
/** 自定义验签函数 */
|
|
14
|
+
verifyFunction?: VerifyTokenSignFunction;
|
|
15
|
+
/** 编辑器高度 */
|
|
16
|
+
height?: string;
|
|
17
|
+
/** 编辑器宽度 */
|
|
18
|
+
width?: string;
|
|
19
|
+
/** 是否自动初始化 */
|
|
20
|
+
autoInit?: boolean;
|
|
21
|
+
/** 就绪回调 */
|
|
22
|
+
onReady?: (editor: OfficeEditorInstance) => void;
|
|
23
|
+
/** 错误回调 */
|
|
24
|
+
onError?: (error: any) => void;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* useOnlyOffice 返回值
|
|
28
|
+
*/
|
|
29
|
+
export interface UseOnlyOfficeReturn {
|
|
30
|
+
/** 容器元素引用 */
|
|
31
|
+
containerRef: MutableRefObject<HTMLDivElement | null>;
|
|
32
|
+
/** 编辑器实例 */
|
|
33
|
+
editorInstance: OfficeEditorInstance | null;
|
|
34
|
+
/** 是否已就绪 */
|
|
35
|
+
isReady: boolean;
|
|
36
|
+
/** 错误信息 */
|
|
37
|
+
error: string | null;
|
|
38
|
+
/** 初始化编辑器 */
|
|
39
|
+
init: () => Promise<void>;
|
|
40
|
+
/** 销毁编辑器 */
|
|
41
|
+
destroy: () => void;
|
|
42
|
+
/** 重新初始化 */
|
|
43
|
+
reinit: () => Promise<void>;
|
|
44
|
+
/** 监听事件 */
|
|
45
|
+
on: (event: OfficeEventType, callback: (...args: any[]) => void) => void;
|
|
46
|
+
/** 移除事件监听 */
|
|
47
|
+
off: (event: OfficeEventType, callback: (...args: any[]) => void) => void;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* OnlyOffice React Hook
|
|
51
|
+
* @param options 配置选项
|
|
52
|
+
* @returns 编辑器状态和方法
|
|
53
|
+
*/
|
|
54
|
+
export declare function useOnlyOffice(options: UseOnlyOfficeOptions): UseOnlyOfficeReturn;
|
|
55
|
+
export default useOnlyOffice;
|
|
56
|
+
//# sourceMappingURL=useOnlyOffice.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useOnlyOffice.d.ts","sourceRoot":"","sources":["../../../src/react/useOnlyOffice.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4C,KAAK,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAExF,OAAO,KAAK,EACV,oBAAoB,EAGpB,eAAe,EACf,UAAU,EACV,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,0BAA0B;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW;IACX,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,WAAW;IACX,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,cAAc;IACd,cAAc,CAAC,EAAE,uBAAuB,CAAC;IACzC,YAAY;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW;IACX,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,CAAC;IACjD,WAAW;IACX,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,aAAa;IACb,YAAY,EAAE,gBAAgB,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACtD,YAAY;IACZ,cAAc,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC5C,YAAY;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW;IACX,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,aAAa;IACb,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,YAAY;IACZ,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY;IACZ,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,WAAW;IACX,EAAE,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,CAAC;IACzE,aAAa;IACb,GAAG,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,CAAC;CAC3E;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,mBAAmB,CAkKhF;AAED,eAAe,aAAa,CAAC"}
|