关于element UI 使用多级嵌套表格 table的自定义计算不生效问题

有空再来整理
贴代码

<template>
    <div class="app-container">
        <el-table :data="dataList" style="width: 100%;margin-top:30px;" row-key="title" border default-expand-all
            :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"  >
            <el-table-column type="expand">
                <template slot-scope="props">
                    <!-- 最内层 -->
                    <el-table :data="dataList" style="" row-key="title" :span-method="arraySpanMethod" :show-header="false" @expand-change="expandChange">
                        <el-table-column type="expand">
                            <template slot-scope="props">
                                <!-- Deposit -->
                                <el-table :data="deposit_data" style="" row-key="title"  show-summary  :summary-method="getSummaries">
                                    <el-table-column align="center" label="Game" width="100" >
                                        <template slot-scope="scope">
                                            {{ scope.row.game_info.name }}
                                        </template>
                                    </el-table-column>
                                    <el-table-column align="center" label="Tramsaction Type" width="100">
                                        <template slot-scope="scope">
                                            {{ scope.row.transaction_type }}
                                        </template>
                                    </el-table-column>
                                    <el-table-column align="center" label="Bank" width="220">
                                        <template slot-scope="scope">
                                            {{ scope.row.bank.name }}
                                        </template>
                                    </el-table-column>
                                    <el-table-column align="header-center" label="Amount" width="138" prop="amount">
                                        <template slot-scope="scope">
                                            {{ scope.row.amount }}
                                        </template>
                                    </el-table-column>
                                    <el-table-column align="header-center" label="Bonus" prop="bonus">
                                        <template slot-scope="scope">
                                            {{ scope.row.bonus }}
                                        </template>
                                    </el-table-column>
                                    <!-- Deposit(ATM)+Withdraw -->
                                    <el-table-column align="header-center" label="Total Amount" prop="total_amount">
                                        <template slot-scope="scope">
                                            {{ scope.row.total_amount}}
                                        </template>
                                    </el-table-column>
                                    <el-table-column align="header-center" label="Status">
                                        <template slot-scope="scope">
                                            {{ statusText(scope.row.status) }}
                                        </template>
                                    </el-table-column>
                                    <el-table-column align="header-center" label="Remark">
                                        <template slot-scope="scope">
                                            {{ scope.row.transactions_remark }}
                                        </template>
                                    </el-table-column>
                                    <el-table-column align="header-center" label="Entered By">
                                        <template slot-scope="scope">
                                            {{ scope.row.created_at }}
                                        </template>
                                    </el-table-column>
                                    <el-table-column align="header-center" label="Entered Datetime">
                                        <template slot-scope="scope">
                                            {{ scope.row.created_at }}
                                        </template>
                                    </el-table-column>
                                </el-table>
                            </template>
                        </el-table-column>

                        <el-table-column align="center" label="Game" width="100" >
                            <template slot-scope="scope">
                                Transaction Type: Deposit (ATM)
                            </template>
                        </el-table-column>
                        <el-table-column align="center" label="Tramsaction Type" width="100">
                            <template slot-scope="scope">
                              
                            </template>
                        </el-table-column>
                        <el-table-column align="center" label="Bank" width="220">
                            <template slot-scope="scope">
                              
                            </template>
                        </el-table-column>
                        <el-table-column align="header-center" label="Amount">
                            <template slot-scope="scope">
                             
                            </template>
                        </el-table-column>
                        <el-table-column align="header-center" label="Bonus">
                            <template slot-scope="scope">
                            
                            </template>
                        </el-table-column>
                        <!-- Deposit(ATM)+Withdraw -->
                        <el-table-column align="header-center" label="Total Amount">
                            <template slot-scope="scope">
                         
                            </template>
                        </el-table-column>
                        <el-table-column align="header-center" label="Status">
                            <template slot-scope="scope">
                              
                            </template>
                        </el-table-column>
                        <el-table-column align="header-center" label="Remark">
                            <template slot-scope="scope">
                           
                            </template>
                        </el-table-column>
                        <el-table-column align="header-center" label="Entered By">
                            <template slot-scope="scope">
                             
                            </template>
                        </el-table-column>
                        <el-table-column align="header-center" label="Entered Datetime">
                            <template slot-scope="scope">
                           
                            </template>
                        </el-table-column>

                    </el-table>
                </template>
            </el-table-column>

            <!-- 最外层 -->
            <el-table-column align="center" label="ID" width="100">
                <template slot-scope="scope">
                    {{ scope.row.id }}
                </template>
            </el-table-column>
            <el-table-column align="center" label="Member" width="100">
                <template slot-scope="scope">
                    {{ scope.row.member_name }}
                </template>
            </el-table-column>
            <el-table-column align="center" label="Bank Account" width="220">
                <template slot-scope="scope">
                    {{ scope.row.bank_name }}({{ scope.row.bank_card }})
                </template>
            </el-table-column>
            <el-table-column align="header-center" label="Deposit(ATM)">
                <template slot-scope="scope">
                    {{ scope.row.deposit }}
                </template>
            </el-table-column>
            <el-table-column align="header-center" label="Withdraw">
                <template slot-scope="scope">
                    {{ scope.row.withdraw }}
                </template>
            </el-table-column>
            <el-table-column align="header-center" label="Bonus">
                <template slot-scope="scope">
                    {{ scope.row.bonus }}
                </template>
            </el-table-column>
            <!-- Deposit(ATM)+Withdraw -->
            <el-table-column align="header-center" label="Profit">
                <template slot-scope="scope">
                    {{ profit(scope.row.deposit, scope.row.withdraw) }}
                </template>
            </el-table-column>
            <el-table-column align="header-center" label="Rebate Bonus 3%">
                <template slot-scope="scope">
                    {{ rebate(profit(scope.row.deposit, scope.row.withdraw), 0.03) }}
                </template>
            </el-table-column>
            <el-table-column align="header-center" label="Entered DateTime">
                <template slot-scope="scope">
                    {{ scope.row.created_at }}
                </template>
            </el-table-column>
        </el-table>

        <el-dialog :visible.sync="dialogVisible" :title="dialogType === 'edit' ? '编辑' : '新增'">
            <el-form :model="form" label-width="100px" label-position="left">
                <el-form-item label="Member">
                    <el-select v-model="form.member_id" filterable placeholder="Member">
                        <el-option v-for="item in members" :key="item.name" :label="item.name" :value="item.id">
                        </el-option>
                    </el-select>
                </el-form-item>
                <el-form-item label="Game">
                    <el-select v-model="form.game_info_id" filterable placeholder="Game">
                        <el-option v-for="item in game_info" :key="item.name" :label="item.name" :value="item.id">
                        </el-option>
                    </el-select>
                </el-form-item>
                <el-form-item label="Adjustment Type">
                    <el-radio v-model="radio" label="1">Deposit(ATM)</el-radio>
                    <el-radio v-model="radio" label="2">Withdraw(ONLINE)</el-radio>
                    <el-radio v-model="radio" label="3">Free Cash</el-radio>
                    <el-radio v-model="radio" label="4">Transfer</el-radio>
                    <el-radio v-model="radio" label="5">Withdraw</el-radio>
                    <el-radio v-model="radio" label="6">Withdraw Free Cash</el-radio>
                </el-form-item>
                <el-form-item label="Bank">
                    <el-select v-model="form.bank_id" filterable placeholder="Bank">
                        <el-option v-for="item in bank" :key="item.name" :label="item.name" :value="item.id">
                        </el-option>
                    </el-select>
                </el-form-item>
                <el-form-item label="Amount">
                    <el-input type="number" v-model="form.amount" placeholder="Amount" />
                </el-form-item>
                <el-form-item label="Bonus">
                    <el-input type="number" v-model="form.bonus" placeholder="Bonus" />
                </el-form-item>
                <el-form-item label="Transaction Remarks">
                    <el-input v-model="form.transactions_remark" placeholder="Transaction Remarks" />
                </el-form-item>
                <el-form-item label="Status">
                    <el-switch v-model="form.status" :active-value="1" :inactive-value="0" />
                </el-form-item>
                <el-form-item label="Member Remarks">
                    <el-input v-model="form.member_remark" placeholder="Member Remarks" />
                </el-form-item>
            </el-form>
            <div style="text-align:right;">
                <el-button type="danger" @click="dialogVisible = false">
                    取消
                </el-button>
                <el-button type="primary" @click="confirmSubmit">
                    确认
                </el-button>
            </div>
        </el-dialog>
    </div>
</template>
  
<script>
import { mapState } from 'vuex'
import { getMemberSummarys, getDepositData, addMemberSummary, deleteMemberSummary, updateMemberSummary } from '@/api/member_summary'

const defaultData = {
    region_limit: [],
}
export default {
    components: {

    },
    data() {
        return {
            dataList: [],
            admin_roles: [],
            dialogVisible: false,
            dialogType: 'new',
            form: {},
            radio: '1',
            bank: [],
            members: [],
            game_info: [],
            deposit_data:[]
        }
    },
    computed: {
        statusText() {
            return function (val) {
                return val === 1 ? 'Approve' : 'Reject'
            }
        },

        profit: function (v1, v2) {
            return function (v1, v2) {
                return Number(v1) + Number(v2)
            }
        },
        rebate: function (v1, v2) {
            return function (v1, v2) {
                return Number(v1) * Number(v2)
            }
        },
        ...mapState({
            regions: state => state.user.regions
        })
    },
    created() {
        this.fetchData()
        this.form.region_limit = this.regions
    },

    methods: {
        async fetchData() {
            await getMemberSummarys().then(res => {
                this.dataList = res.data.data
                this.members = res.data.members
                this.bank = res.data.bank
                this.game_info = res.data.game_info
            })
        },
        expandChange(row,expandRows) {
            this.getDeposit(row.id)
        },
        //请求里面的数据
        async getDeposit(member_id){
             await getDepositData(member_id).then(res=>{
                    this.deposit_data = res.data
             })
        },

        //合并单元格  return [行,列]
        arraySpanMethod({ row, column, rowIndex, columnIndex }) {
            if(columnIndex==1){
                return [1,10]
            }
      },
      //合计
      getSummaries(param) {
        const { columns, data } = param;
        const sums = [];
        columns.forEach((column, index) => {
          if (index === 0) {
            sums[index] = '合计';
            return;
          }
          const values = data.map(item => Number(item[column.property]));
          console.log(column)
          if (!values.every(value => isNaN(value))) {
            sums[index] = values.reduce((prev, curr) => {
              const value = Number(curr);
              if (!isNaN(value)) {
                return prev + curr;
              } else {
                return prev;
              }
            }, 0);
            sums[index] += '';
          } else {
            sums[index] = '';
          }
        });
        return sums;
      }

    }
}
</script>
  
<style lang="scss" scoped>
.demo-table-expand {
    font-size: 0;
}

.demo-table-expand label {
    width: 90px;
    color: #99a9bf;
}

.demo-table-expand .el-form-item {
    margin-right: 0;
    margin-bottom: 0;
    width: 50%;
}

.role_close {
    display: none;
}
</style>
<style></style>
  

一定要给对应的表格加上prop属性,这个属性对应你后端返回data数组里面的字段。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Element UI中,可以使用Table组件来嵌套表格。具体实现方法是在Table的columns中定义一个子表格的column,然后在父表格的数据中添加一个子表格的数据数组。当用户点击父表格的某一行时,子表格会展开并显示对应的子表格数据。同时,可以通过设置expand-row-keys属性来控制哪些行需要展开子表格。 ### 回答2: Element UI中的Table组件是一个非常常用的表格组件,提供了非常灵活的表格展示和操作。而嵌套表格则是在Table中的一种比较特殊的展示方式,可用于在当前表格内,在某些行的详细信息下展开一张子表格使用Element UITable嵌套表格,有以下几个基本步骤: 1.首先需要在父表格(主表格)的columns中添加一个slot来展示子表格的内容: ```javascript columns: [ { label: '姓名', prop: 'name' }, { label: '年龄', prop: 'age' }, { label: '操作', slot: 'actions' } ] ``` 在父表格的上述例子中,我们为“操作”列添加了一个`slot: 'actions'`,这里的actions是指在子组件中要用到的那个slot名字,代表着在子表格中要插入的内容。 2.添加子表格组件,并在子组件中通过slot-scope获取父子数据并展示子表格数据: ```vue <template> <el-table :data="data" style="width: 100%"> <el-table-column prop="date" label="日期" width="180"> </el-table-column> <el-table-column prop="name" label="姓名"> </el-table-column> <el-table-column prop="address" label="地址"> </el-table-column> </el-table> </template> <script> export default { props: { prop: String, row: Object }, data() { return { data: [ { date: '2016-05-02', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄' }, { date: '2016-05-04', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄' }, { date: '2016-05-01', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄' }, { date: '2016-05-03', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄' }, ] } } } </script> ``` 在子组件中我们通过父组件传递过来的数据`prop: String, row: Object`作为查询参数,来获取展示子表格的数据,并通过`slot-scope`在父组件中添加插槽来展示子组件内容。 3.在父组件中的操作列中通过scoped slot插入子组件: ```vue <el-table-column label="操作" width="120"> <template slot-scope="scope"> <el-button type="primary" @click.prevent.stop="handleOpen(scope.row)"> 添加子表格 </el-button> <el-table :data="[scope.row]" v-show="scope.row.children && scope.row.children.length > 0"> <el-table-column type="expand" label=""> <template slot-scope="props"> <children-table :prop="scope.column.prop" :row="props.row"> </children-table> </template> </el-table-column> </el-table> </template> </el-table-column> ``` 父组件中的操作列中包含了一个添加子表格的按钮和一个子表格展开的图标,当用户点击添加子表格的时候,会调用handleOpen方法,在此方法中可以进行一些列操作,比如网络请求,获取子表格数据等等。当用户点击子表格展开的图标时,会展开子表格,进而呈现子组件中的内容。 总的来说,Element UI中的Table嵌套表格是一种非常常见的表格展示方式,可以帮助用户更加详细地了解表格数据内容,在实际开发中应用也比较广泛,值得学习和掌握。 ### 回答3: 随着前端开发的不断发展,表格是展示数据的重要组件之一。Element UI是基于Vue.js的UI组件库,提供了功能强大、易于使用表格组件,可以快速地实现各种表格需求。在很多情况下,在一个表格嵌套另一个表格是一种特殊的需求,这时候我们可以借助Element UITable插槽来实现。 在Element UI中,给表格设置scoped-slot,即插槽,可以在每一行的数据中增加自己想要的内容,这样就可以通过插槽嵌套表格嵌套表格的特别之处在于数据源的构造。外层表格中每一行的数据需要嵌套表格所需的子数据。在表格中设置scoped-slot之后,可以通过js的逻辑处理来为每一行数据增加子数据属性,使得在一行数据中展示一个表格,并向里面传入嵌套表格所需的子数据。 除此之外,Element UI也提供了一些便捷的函数和属性以处理复杂的嵌套表格需求。嵌套表格的cell-style、row-style、fixed、selection、index等属性都可以灵活配合使用,使得表格嵌套表格以及数据的展示更加灵活多样。同时还有一些针对单元格的通用插槽,如cell、header-cell、expand等,可以快速地实现单元格的自定义展示。 总的来说,在Element UI嵌套表格是一种非常强大的功能,用于复杂和大型数据集的展示,提供了丰富的组件和插槽,可以灵活地满足各种嵌套表格需求。通过使用这些方法,不仅可以快速地构建数据展示,同时也提升了用户的体验感。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值