el-table整列加减乘除运算

核心用reduce进行加减乘除运算

列运算

<el-popover placement="top-start" title="运算" width="200" trigger="click">
          <el-select @change="selectChange" v-model="value" placeholder="请选择" clearable>
            <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.label">
            </el-option>
          </el-select>
          <el-button size="medium" slot="reference" type="primary" plain>列运算</el-button>
        </el-popover>
        <p></p>
        <el-table v-if="!isUpdate" :data="tableData" :key="reload" max-height="550"
          :header-cell-style="{ background: '#f5f5f5' }" style="width: 100%">
          <el-table-column v-for="(item, index) in colData" :key="index" :prop="item.title" :label="item.title"
            v-if="item.istrue" align="center" width="120" />
        </el-table>
        <el-table v-if="isUpdate" :data="upDataTable" :key="isUpdate" max-height="550"
          :header-cell-style="{ background: '#f5f5f5' }" style="width: 100%">
          <el-table-column v-for="(item, index) in colData" :key="index" :prop="item.title" :label="item.title"
            v-if="item.istrue" align="center" width="120" />
          <el-table-column label="结果" width="120">
            <template slot-scope="scope">
              <span>{{ scope.row.result }}</span>
            </template>
          </el-table-column>
        </el-table>
data() {
    return {
      options1: [{
        value: '选项1',
        label: 'a+b'
      }, {
        value: '选项2',
        label: 'a-b'
      }, {
        value: '选项3',
        label: 'b-a'
      }, {
        value: '选项4',
        label: 'a*b'
      }, {
        value: '选项5',
        label: 'a/b'
      }, {
        value: '选项6',
        label: 'b/a'
      }],
      value: '',
        isShow: true,
         upDataTable: [],
          isUpdate: false,
methods: {
 checkedColumns(val) {
      if (val.length > 2) {
        this.$message("最多选两个")
        return false
      }
    selectChange(val) {
      console.log(val, "val");
      this.isUpdate = false
      let arr = this.tableData.map(obj => {
        return Object.keys(obj).reduce((acc, key) => {
          if (this.checkedColumns.includes(key)) {
            acc[key] = obj[key];
          }
          return acc;
        }, {});
      });
      if (val === 'a+b') {
        this.upDataTable = arr.reduce((acc, obj) => {
          obj.result = Object.values(obj).reduce((acc, val) => acc + val, 0).toFixed(3);;
          acc.push(obj);
          return acc;
        }, []);
        this.isUpdate = true
        console.log(this.upDataTable, "this.upDataTable");
      } else if (val === 'a-b') {
        this.upDataTable = arr.reduce((acc, obj) => {
          obj.result = Object.values(obj).reduce((acc, val, i, arr) => i === 0 ? val : acc - val, 0).toFixed(3);
          acc.push(obj);
          return acc;
        }, []);
        this.isUpdate = true
        console.log(this.upDataTable, "this.upDataTable");
      } else if (val === 'b-a') {
        this.upDataTable = arr.reduce((acc, obj) => {
          obj.result = Object.values(obj).reduce((acc, val, i, arr) => i === 0 ? val : val - acc, 0).toFixed(3);
          acc.push(obj);
          return acc;
        }, []);
        this.isUpdate = true
        console.log(this.upDataTable, "this.upDataTable");
      } else if (val === 'a*b') {
        this.upDataTable = arr.reduce((acc, obj) => {
          obj.result = Object.values(obj).reduce((acc, val) => acc * val, 1).toFixed(3);
          acc.push(obj);
          return acc;
        }, []);
        this.isUpdate = true
        console.log(this.upDataTable, "this.upDataTable");
      } else if (val === 'a/b') {
        this.upDataTable = arr.reduce((acc, obj) => {
          obj.result = Object.values(obj).reduce((acc, val) => acc / val, 1)
          acc.push(obj);
          return acc;
        }, []);
        this.isUpdate = true
        console.log(this.upDataTable, "this.upDataTable");
      } else if (val === 'b/a') {
        this.upDataTable = arr.reduce((acc, obj) => {
          obj.result = Object.values(obj).reduce((acc, val) => val / acc, 1)
          acc.push(obj);
          return acc;
        }, []);
        this.isUpdate = true
        console.log(this.upDataTable, "this.upDataTable");
      } else {
        this.isUpdate = false
        this.reload =true
        this.upDataTable = []
      }
    },}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
`el-table-column` 是 Element UI 的表格列组件,它并不支持加减乘除运算。如果你需要在表格进行加减乘除运算,可以考虑在数据进行计算,然后将计算结果渲染到表格。 例如,假设你有一个包含商品数量和单价的商品列表,你可以在数据添加一个新的字段来保存商品总价: ```javascript [ { name: '商品1', quantity: 2, price: 10, total: 0 }, { name: '商品2', quantity: 3, price: 20, total: 0 }, { name: '商品3', quantity: 1, price: 30, total: 0 } ] ``` 然后,你可以在表格显示商品总价: ```html <el-table :data="tableData"> <el-table-column prop="name" label="商品名称"></el-table-column> <el-table-column prop="quantity" label="数量"></el-table-column> <el-table-column prop="price" label="单价"></el-table-column> <el-table-column prop="total" label="总价"></el-table-column> </el-table> ``` 在上面的示例,`prop` 属性指定了表格列对应数据的字段名。因此,`<el-table-column prop="total" label="总价"></el-table-column>` 会渲染每个商品的总价。 如果你需要对表格数据进行加减乘除运算,可以在数据进行计算,然后将计算结果渲染到表格。例如,你可以添加一个计算字段来保存每个商品的折扣价: ```javascript [ { name: '商品1', quantity: 2, price: 10, total: 0, discount: 0 }, { name: '商品2', quantity: 3, price: 20, total: 0, discount: 0 }, { name: '商品3', quantity: 1, price: 30, total: 0, discount: 0 } ] // 计算折扣价 this.tableData.forEach(item => { item.discount = item.price * 0.8; // 折扣价为原价的80% }); ``` 然后,你可以在表格显示商品折扣价: ```html <el-table :data="tableData"> <el-table-column prop="name" label="商品名称"></el-table-column> <el-table-column prop="quantity" label="数量"></el-table-column> <el-table-column prop="price" label="单价"></el-table-column> <el-table-column prop="discount" label="折扣价"></el-table-column> </el-table> ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值