vxe-table 使用过程中的bug,实时更新(置顶)

1. 由于vxeTable 使用了font-awesome字体图标, 但是官方文档没有详细告诉你怎么引入使用,所以很多小伙伴都找不到原因。

解决办法:第一步安装依赖

npm install font-awesome --save

第二步引入依赖样式文件    在main.js文件中引入

//引入font-awesome
import 'font-awesome/css/font-awesome.css';

使用:

 <vxe-button size="mini" status="success" icon="fa fa-plus" @click="toolbarAddClick">新增</vxe-button>

效果:

2. 集成第三方库: 按钮方法导入导出的bug
 

<vxe-toolbar>
      <template #buttons>
        <vxe-button @click="impotEvent">选择文件</vxe-button>
        <vxe-button @click="exportEvent">导出.xlsx</vxe-button>
      </template>

// 保存导出

this.$XSaveFile  会报错   

//导入读取文件

this.$refs.xGrid1.readFile  会报错

解决办法:

扫描二维码关注公众号,回复: 13580026 查看本文章

需要安装  xlsx, 

 npm  install  xlsx

在main.js  里面: *(最后2个必须的,前2个看个人情况)

// 给 vue 实例挂载全局窗口对象

Vue.prototype.$XModal = VXETable.modal

Vue.prototype.$XPrint = VXETable.print

Vue.prototype.$XSaveFile = VXETable.saveFile

Vue.prototype.$XReadFile = VXETable.readFile

3.问题3如下图:引用了 vxe-table 组件, 但是vuecli  依赖用的是 vue3的依赖包。会报如下错

解决办法:

安装这个依赖:npm install xe-utils vxe-table

 重新装依赖:

npm install xe-utils vxe-table -save

cnpm install xe-utils vxe-table -save

重新启动:启动成功

4. vxe-table 的表单验证不好使,毕竟新出来的组件,很多东西不完善,建议使用element- ui 或者 iview-ui 组件的表单验证:

element ui  表单验证地址: Element - The world's most popular Vue UI framework

iview -ui   表单验证地址: https://iview.github.io/components/form

会玩的都是混合用的,你懂的。

5. vxe-bable报错: utils.js?5ef4:217 [vxe-table] 不支持的文件类型 "xlsx"

检查你的package.json里面装这个几个依赖了没?

  • npm 安装 vxe-table
  • npm 安装 exceljs
  • npm 安装 vxe-table-plugin-export-xlsx

然后再main.js 里面 引用 mian.js

  • import VXETable from 'vxe-table' 
  • import VXETablePluginExportXLSX from 'vxe-table-plugin-export-xlsx'
  • VXETable.use(VXETablePluginExportXLSX)
     

案例如下:

<template>
  <div class="main-view">
    <div class="btn-view">
      <el-button size="mini" type="primary" @click="exportEvent">导出</el-button>
    </div>
    <div class="table-view">
      <vxe-table
        ref="xTable"
        border
        auto-resize
        highlight-current-row
        :radio-config="{ trigger: 'row' }"
        :start-index="(tablePage.pageNum - 1) * tablePage.pageSize"
        :loading="loading"
        show-overflow
        align="center"
        header-align="left"
        size="mini"
        :data="tableList"
      >
        <vxe-table-colgroup
          header-align="center"
          align="center"
          title="ee"
          header-class-name="fs"
        >
          <vxe-table-column
            type="seq"
            title="序号"
            align="center"
            fixed="center"
          ></vxe-table-column>
          <vxe-table-column
            header-align="center"
            align="center"
            field="orgName"
            label="名称"
            sortable
          ></vxe-table-column>
          <vxe-table-column
            field="datasetCounts"
            header-align="center"
            align="center"
            label="数量"
            sortable
          ></vxe-table-column>
          <vxe-table-column
            field="subCounts"
            header-align="center"
            align="center"
            label="调用次数"
            sortable
          ></vxe-table-column>
        </vxe-table-colgroup>
      </vxe-table>
    </div>
    <div class="pagination-view">
      <el-pagination
        background
        layout="total, sizes, prev, pager, next,jumper"
        :current-page="tablePage.pageNum"
        :page-size="tablePage.pageSize"
        :page-sizes="pageSizes"
        :total="tablePage.total"
        @size-change="handleSizeChange"
        @current-change="handlePageChange"
      />
    </div>
  </div>
</template>

 导出的方法:

    exportEvent() {
      this.$refs.xTable.exportData({
        filename: 'export',// 文件名字
        sheetName: 'Sheet1',
        type: 'xlsx',//导出文件类型 xlsx 和 csv 
        data: this.exportdata, // 数据源
        // 过滤那个字段导出
        // columnFilterMethod: function(column, $columnIndex) {
        //   return !(column.$columnIndex === 0 )
        //   // 0是复选框 不导出
        // }
      })
    },

以上案例仅供参考, 可以解决报错问题。

6、vue项目中解决Chrome控制台[Violation] Added non-passive event listener to a scroll-blocking 'touchmove'输出问题

要做什么?
目标:解决在使用element-ui时出现警告[Violation] Added non-passive event listener to a scroll-blocking ‘mousewheel’ event. Consider marking event handler as ‘passive’ to make the page more responsive。

怎样去做?
使用npm管理器下载default-passive-events依赖包
 

npm i default-passive-events -S

然后

  • 入口文件main.js引入
import 'default-passive-events'

然后刷新页面,警告消失

7.vxe-table vxe-grid column width 宽度问题,fixed 列样式错乱、显示隐藏导致、keep-alive 列宽错误等的解决方法

缩放窗口导致列宽错误,使用 Tab 切换导致宽度错误,还是显示隐藏 div 中切换导致宽度错误,还是弹出框中导致宽度计算错误,使用缓存路由导致列宽错误;加上参数 auto-resize 自动响应

  • 解决方法(任意一种都可以解决问题)
    1. 只需要加上 :auto-resize=“true” 就可以自动重新计算表格,默认是关闭的
    2. 也可以手动调用 recalculate 方法去重新计算表格

如果是全局的方式:在main.js 里面

VXETable.setup({
  table: {
    autoResize: true
  }
})

<vxe-table
  auto-resize
  ...
  ></vxe-table>
<vxe-grid
  auto-resize
  ...
  ></vxe-grid>

 加上后,表格就会自动监听父容器的宽高变化,自动触发重新计算表格

如果是某些特殊场景,可以通过手动调用 recalculate 方法更新样式,比如 keep-alive:

export default {
	// ...
	activated () {
		// 在 keep-alive 钩子函数中,显示之后手动调用
		this.$nextTick({
			this.$refs.xTable.recalculate()
		})
	},
	// ...
}

8. vxe-table 导出 pdf 文件,解决中文乱码问题

8-1. # 基于 vxe-table 的表格插件,支持导出 pdf 格式,基于 jspdf 实现

# Installing
 

npm install xe-utils vxe-table

npm install vxe-table-plugin-export-pdf

npm install jspdf

# main.js 

import VXETable from 'vxe-table'

import VXETablePluginExportPDF from 'vxe-table-plugin-export-pdf'

VXETable.use(VXETablePluginExportPDF)

解决 jspdf 无法支持中文问题;
将表格导出为 pdf 文件,默认是不支持中文的,会显示成乱码,可以通过使用字体库解决。

# main.js 

// 可以将字体库下载放到自己服务器中,替换下载路径
VXETablePluginExportPDF.setup({
  // 设置全局默认字体
  fontName: 'SourceHanSans-Normal',
  // 字体映射配置
  fonts: [
    {
      fontName: 'SourceHanSans-Normal',
      fontUrl: 'https://cdn.jsdelivr.net/npm/vxe-table-plugin-export-pdf/fonts/source-han-sans-normal.js' 
    }
  ]
})

字体库可以去 github 下载   登录 - Gitee.com

字体名称                                         文件名
SourceHanSans-ExtraLight    source-han-sans-extralight.js
SourceHanSans-Light    source-han-sans-light.js
SourceHanSans-Normal    source-han-sans-normal.js
SourceHanSans-Regular    source-han-sans-regular.js
SourceHanSans-Medium    source-han-sans-medium.js
SourceHanSans-Bold    source-han-sans-bold.js
SourceHanSans-Heavy    source-han-sans-heavy.js
 

导出结果如下:

9. vxe-table  通过设置 expand-config 属性和 type=expand 与 slot 可以开启展开行功能

现在有个需求我每次只想展开一个,展开现在这个,上一个必须自动关闭。

处理方法:@toggle-row-expand="toggleExpandChangeEvent"

code:

        // 折叠行 展开事件
        toggleExpandChangeEvent({ row, expanded }) {
            console.log('行展开事件:', row , expanded)
            this.$refs.xTable.clearRowExpand()  //关闭所有行展开
            this.$refs.xTable.setRowExpand([row], true) //打开当前点击这行
            if (!expanded){
                this.$refs.xTable.setRowExpand([row], false)
            }
        },

最后为了方便大家的沟通与交流请加QQ群: 625787746

请进QQ群交流:【IT博客技术分享群①】:正在跳转

猜你喜欢

转载自blog.csdn.net/qq_41646249/article/details/116931638