首先,纯前端是无法实现doc文件的预览的,我这里是是通过后台进行完成的,本地word是无法实现的,如没有word链接,可以找个word在线文档进行测试

  1、在index.html中引入后台配好的office服务器

  <script type="text/javascript" src="https://documentserver/web-apps/apps/api/documents/api.js"></script>
  2、创建组件

  <template>

       <div class="gaword" id='vabOnlyOffice'></div>
  </template>
<script>
    export default {
        name: "GAWord",
        props: {
        option: {
            type: Object,
            default: () => {
            return {}
            },
        },
        },
        data () {
            return {
                doctype: '',
                //参数说明
                parameters: {
                  'document': {
                      //文件扩展名
                      'fileType': 'docx',
                      //key 默认置空则不走缓存 always update
                      'key': '',
                      //为已查看或编辑的文档定义所需的文件名,该文件名在下载文档时也将用作文件名。
                      'title': '',
                      //文件地址
                      'url': '',
                    //相关权限
                    'permissions': {
                      'copy': true,//定义内容是否可以复制到剪贴板。如果该参数设置为false,则只能在当前文档编辑器中粘贴内容。默认值为true。
                      'download': true,//定义文档是可以下载还是只能在线查看或编辑。如果下载权限设置为“假”的下载为...菜单选项将是缺席的文件菜单。默认值为true。
                      'edit': true,//定义文档是可以编辑还是只能查看。如果编辑权限设置为“true”,则文件菜单将包含编辑文档菜单选项;请注意,如果编辑权限设置为“false”,文档将在查看器中打开,即使模式参数设置为edit,您也无法将其切换到编辑器。默认值为true。
                      'print': true,//定义是否可以打印文档。如果打印权限设置为“false”的打印菜单选项将是缺席的文件菜单。默认值为true
                    },
                },
                //文件类型
                'documentType': 'text',
                'height': '100%',
                'width': '100%',
                'editorConfig': {
                    //语言:zh-CN简体中文/en英文
                    'lang': 'zh-CN',
                    //阅读状态 view/edit
                    'mode': 'view',
                   
                    'customization': {
                    //是否显示插件
                    'plugins': false,
                    },
                }
                }
            }
        },
        methods:{
            async setEditor(option) {
                this.doctype = getFileType(option.fileType)

                let config = {
                document: {
                    //后缀
                    fileType: option.fileType,
                    key: '',
                    title: option.title,
                    permissions: {
                    edit: option.isEdit,//是否可以编辑: 只能查看,传false
                    print: option.isPrint,  // 是否可以打印
                    download: false,
                    // "fillForms": true,//是否可以填写表格,如果将mode参数设置为edit,则填写表单仅对文档编辑器可用。 默认值与edit或review参数的值一致。
                    // "review": true //跟踪变化
                    },
                    url: option.url,   // word 地址
                },
                documentType: this.doctype,
                editorConfig: {
                    callbackUrl: option.editUrl,//"编辑word后保存时回调的地址,这个api需要自己写了,将编辑后的文件通过这个api保存到自己想要的位置
                    lang: option.lang,//语言设置
                    //定义
                    customization: {
                      autosave: false,//是否自动保存
                      chat: false,        // 定义“聊天”菜单按钮是显示还是隐藏,默认为true
                      comments: false,    //定义“注释”菜单按钮是显示还是隐藏,默认为true
                      help: true,      // 定义“帮助”菜单按钮是显示还是隐藏,默认值为true
                      compactToolbar:true,      ////定义显示的顶部工具栏类型  //请注意,如果此设置在编辑器界面中发生更改,它将存储在浏览器本地存储中,
                      toolbarNoTabs: true,    //定义顶部工具栏选项卡是否明显显示(当设置为true)
                      showReviewChanges: true,                   //定义在加载编辑器时自动显示或隐藏审阅更改面板。默认值为 false。
                      // modifyContentControl: false,        //定义内容控件设置是否可以更改 默认为true
                      hideRightMenu:true,
                      // "hideRightMenu": false,//定义在第一次加载时是显示还是隐藏右侧菜单。 默认值为false
                      plugins: false,    //是否显示插件
                      //暂时无法生效
                      customer: {
                          address: '12333333333',
                          info: 'S11',
                          logo: '123',
                          mail: 'j123',
                          name: '123',
                          www: '123',
                      },
                    },
                },
                width: '100%',
                height: '100%',
                }
                console.log(this.watch)
                // eslint-disable-next-line no-undef,no-unused-vars
                new DocsAPI.DocEditor('vabOnlyOffice', config)

            },
        },
        created() {
            console.log(this.$props.option)
            // this.setEditor(this.option)
        },
        mounted(){
            this.setEditor(this.option)
        },
        watch: {
            option: {
                handler: function(n) {
                // this.setEditor(n)
                this.doctype = getFileType(n.fileType)
                },
                deep: true,
            }
    }
}
</script>