vxe-table 单元格数字的精度切换、单元格内容宽度自适应(根据内容撑开)

数字的精度切换、单元格内容宽度自适应


在这里插入图片描述

1、支持切换数字的精度

// 1.表格绑定myAmount 格式化函数
<vxe-button size="mini" content="精度" icon="vxe-icon--warning" class="topTools">
    <template #dropdowns>
        <vxe-button type="text" content="0位" @click="changePrecision(0)"></vxe-button>
        <vxe-button type="text" content="1位" @click="changePrecision(1)"></vxe-button>
        <vxe-button type="text" content="2位" @click="changePrecision(2)"></vxe-button>
        <vxe-button type="text" content="3位" @click="changePrecision(3)"></vxe-button>
        <vxe-button type="text" content="4位" @click="changePrecision(4)"></vxe-button>
    </template>
</vxe-button>
<vxe-table-column field="purchase_price_a" title="采购价" :formatter="['myAmount', digits]"> </vxe-table-column>

data() {
    return {
      digits: 2, // 当前经度
      tableData: [], // 表格数据
  };
},
// 2.注册myAmount 格式化函数,根据当前选择的精度位数,调用XEUtils 的方法进行精度计算
async created() {
    VXETable.formats.add("myAmount", ({ cellValue }, digits = 2) => {
      if (cellValue) {
        return XEUtils.commafy(XEUtils.toNumber(cellValue), { digits });
      }
      return "";
    });
},  
methods: {
  // 3. 精度选择切换事件,传入要改变的精度,改变统一的精度数据,获取表格ref实例,刷新表格数据展示最新的数据
   changePrecision(digits) {
       this.digits = digits;
       let arr = this.$refs.xTree.tableColumn;
       this.$refs.xTree.loadData(this.tableData); //获取dom,然后调用刷新方法
   }, 
}
    

2、单元格内容自适应,根据内容撑开

// 1、表格绑定计算宽度的方法,返回当前最大宽度
<vxe-table-column field="purchase_price_a" title="采购价" :width="flexColumnWidth('采购价', 'purchase_price_a')"> </vxe-table-column>


methods: {
   // 2.注册myAmount 格式化函数,根据当前选择的精度位数,调用XEUtils 的方法进行精度计算
    /**
     * @param data: 表格数据
     * @param label:  列的title表头名称
     * @param prop:列的field字段
     */
    flexColumnWidth(label, prop) {
      // 1.获取该列的所有数据,并把每列的表头也加进去算
      /**注意**:
        * 这里的数据是表格原始的数据(接口获取没有处理的数据),如果需要调整精度跟自适应宽度一起计算,这里需要先处理精度,再计算宽度
        * 如果是树形结构,需要结合遍历父节点的数据与子节点的数据,一起计算最大宽度
      */
      let data = this.tableData// 表哥的所有数据
      const arr = data.map(x => x[prop])
      arr.push(label);
      // 2.计算每列内容最大的宽度 + 表格的内间距(依据实际情况而定)
      return this.getMaxLength(arr) + 15;
    },   
        
    /**遍历列的所有内容,获取最宽一列的宽度
     * @param 列的所有内容
     */
    getMaxLength(arr) {
      return arr.reduce((acc, item) => {
        if (item) {
          const calcLen = this.getTextWidth(item);
          if (acc < calcLen) {
            acc = calcLen;
          }
        }
        return acc;
      }, 0);
    },
    /**
     * 使用span标签包裹内容,然后计算span的宽度 width: px
     * @param valArr
     */
    getTextWidth(str) {
      let width = 70; // 初始化默认宽度
      const html = document.createElement("span");
      html.innerText = str;
      html.className = "getTextWidth";
      html.style.fontSize = "17px";// 设置字体大小与当前表格一致的fontSize,为了宽度计算准确
      document.querySelector("body").appendChild(html);
      width = document.querySelector(".getTextWidth").offsetWidth;
      document.querySelector(".getTextWidth").remove();
      return width;
    },
}

注意:

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
vxe-table是一个基于vue的表格组件,支持增删改查、虚拟滚动、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、模态窗口、自定义模板、灵活的配置项、丰富的扩展插件等... 设计理念: 面向现代浏览器,高效的简洁 API 设计 模块化表格、按需加载、插件化扩展 为单行编辑表格而设计,支持增删改查及更多扩展,强大的功能的同时兼具性能 功能: Basic table (基础表格) Grid (高级表格) Size (尺寸) Striped (斑马线条纹) Table with border (带边框) Cell style (单元格样式) Column resizable (列宽拖动) Maximum table height (最大高度) Resize height and width (响应式宽高) Fixed column (固定列) Grouping table head (表头分组) Highlight row and column (高亮行、列) Table sequence (序号) Radio (单选) Checkbox (多选) Sorting (排序) Filter (筛选) Rowspan and colspan (合并行或列) Footer summary (表尾合计) Import (导入) Export (导出) Print (打印) Show/Hide column (显示/隐藏列) Loading (加载中) Formatted content (格式化内容) Custom template (自定义模板) Context menu(快捷菜单) Virtual Scroller(虚拟滚动) Expandable row (展开行) Pager(分页) Form(表单) Toolbar(工具栏) Tree table (树形表格) Editable CRUD(增删改查) Validate(数据校验) Data Proxy(数据代理) Keyboard navigation(键盘导航) Modal window(模态窗口) Charts(图表工具) 更新日志: v4.0.20 table 修改单选框、复选框获取值错误问题 grid 修复 KeepAlive 中报错问题
vxe-table 是一个基于 Vue.js 的灵活的表格组件,它提供了丰富的功能和自定义选项。其中,单元格 input 弹窗是 vxe-table 的一个特性,它允许用户在表格中的单元格中输入内容时,弹出一个自定义的输入框。 当用户在单元格中输入内容时,vxe-table 会触发相应的事件回调。这些事件包括 cell-click、cell-dblclick、cell-keydown 等。我们可以通过监听这些事件来获取用户的输入并进行相应的处理。 使用单元格 input 弹窗时,可以通过设置 column 的 edit-render 配置项来自定义弹窗的样式和内容。例如,可以设置 type 为 input 的编辑器,使弹窗中显示一个文本输入框。同时,我们可以通过设置 column 的 edit-rules 配置项来对用户输入的内容进行校验。如果用户的输入不符合要求,可以弹出提示信息或阻止用户继续输入。 当用户在单元格弹窗中输入完内容并点击确认按钮时,vxe-table 会触发相应的回调函数,如 cell-submit、cell-valid-error 等。我们可以在这些回调函数中进行相应的操作,比如将用户输入的内容保存到数据库中或进行其他业务逻辑的处理。 总之,vxe-table单元格 input 弹窗回调提供了一个灵活的机制,使我们可以方便地处理用户在表格单元格中输入内容的情况。通过监听相关的事件和回调函数,我们可以获取用户输入并进行相应的处理,从而满足不同业务需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值