html

    <elTable      :columns="columns"      :download="true"      :dataContent="dataContent"      :detail="false"      @goDetail="goDetail"      @download="download"      @tname="tname"    /> <a-modal      :visible="showModel1"      title="附件预览"      width="900px"      wrapClassName="modalyl"      maskClosable="true"      @cancel="close1"    >      <div id="center-file" class="center-file" style="margin: auto"></div>    </a-modal>    <a-modal      :visible="showModel2"      title="附件预览"      width="1200px"      wrapClassName="modalyl"      @cancel="close2"    >      <div class="table-html-wrap" v-html="tableHtml"></div>    </a-modal>

子组件html

<div class="elTable">    <a-table      v-if="        defaultExpandAllRows          ? dataContent && dataContent.content && dataContent.content.length > 0          : true      "      :columns="columns"      :data-source="dataContent.content"      :defaultExpandAllRows="defaultExpandAllRows"      :scroll="{ y: '100%' }"      bordered      :pagination="        dataContent && dataContent.content && dataContent.content.length > 10          ? pagination          : false      "      :rowClassName="tableRowClassName"      :rowKey="        (record, index) => {          return record.pc;        }      "      :customRow="customRowClick"      @change="handleTableChange"    >    <a slot="templateName" slot-scope="text, record" @click="tname(record)">{{ record.templateName }}</a> </a-table>  tname(item: any) {    this.$emit('tname', item);  }

js

import XLSX from 'xlsx';import { defaultOptions, renderAsync } from 'docx-preview';columns: any = [    {      title: '模版名称',      dataIndex: 'templateName',      key: 'templateName',      scopedSlots: { customRender: 'templateName' },      ellipsis: true,    }]  async tname(item: any) {    let option = qs.stringify({      templateId: item['id'],    });    if (item.objectName.indexOf('docx') !== -1) {      let option = qs.stringify({        templateId: item['id'],      });      this.showModel1 = true;      let res: any = await api.downLoadTemplate(option);      document.getElementById('center-file').innerHTML = '';      let blob = new Blob([res], { type: 'application/docx' });      renderAsync(blob, document.getElementById('center-file'), null, {        className: 'docx', // 默认和文档款式类的类名/前缀        inWrapper: false, // 启用围绕文档内容渲染包装器        ignoreWidth: false, // 禁止页面渲染宽度        ignoreHeight: false, // 禁止页面渲染高度        ignoreFonts: false, // 禁止字体渲染        breakPages: true, // 在分页符上启用分页        ignoreLastRenderedPageBreak: true, //禁用lastRenderedPageBreak元素的分页        experimental: false, //启用试验性功能(制表符进行计算)        trimXmlDeclaration: false, //如果为真,xml申明将在解析之前从xml文档中删除        debug: false, // 启用额定的日志记录      });    } else if (item.objectName.indexOf('xlsx') !== -1) {      this.showModel2 = true;      let res: any = await api.downLoadTemplate1(option);      this.tableHtml = '';      let workbook = XLSX.read(new Uint8Array(res), { type: 'array' });      var worksheet = workbook.Sheets[workbook.SheetNames[0]];      var innerHTML = XLSX.utils.sheet_to_html(worksheet);      this.tableHtml = innerHTML;    } else {      this.$message.error('此附件暂不反对预览,请下载后查看');    }  }