vue table数据展示以及确认框

这篇博客介绍了如何在Vue.js中使用Element UI库来实现表格数据的动态显示,包括根据状态值显示不同颜色的文本。同时,展示了如何控制表格的高度以适应页面大小,并提供了确认弹框的实现,用于执行如用户删除等关键操作,包含校验、确认和错误处理流程。

1、el-table 数据展示

(1)第一种

            <el-table-column label="状态"  width="180px" align="center">
              <template slot-scope="scope">
                <span v-if="scope.row.userState==0" >正常</span>
                <span v-if="scope.row.userState==1" style="color: red">冻结</span>
                <span v-if="scope.row.userState==2" style="color: green">异常</span>
              </template>
            </el-table-column>

(2)第二种

    <el-table-column label="支付状态" :formatter="state"  width="80px" align="center">
      </el-table-column>


      state(row, column) {
        if (row.state === 0) {
          return '未支付'
        } else if (row.state === 1) {
          return '已支付'
        }
      },

2、控制el-table大小显示

    <el-table
      v-loading="listLoading"
      :data="list"
      element-loading-text="载入中"
      border
      fit
      stripe
      highlight-current-row
      :height="tableHeight" //控制高度
      width="100%"
    >
    </el-table>

 tableHeight: null,

 mounted:function(){
      this.listLoading = false
      this.tableHeight = window.innerHeight - 300
    },

3、确认弹框

    <el-card class="box-card" style="margin-bottom: 20px;height: 80px">
      <el-form ref="ruleForm" :model="info" :rules="rules" label-position="right" label-width="20px" style="width: 100%; margin-left:0px; height: 30px">
        <el-row>

          <el-form-item label="" prop="userId">
            <el-input style="width: 30%" v-model="info.userId" placeholder="批量删除"/>
            <el-button style="width: 100px" type="primary" @click="submitForm('ruleForm')">
             删除
            </el-button>
          </el-form-item>

        </el-row>
      </el-form>
    </el-card>

    methods: {
      onJsonChange(value) {
        console.log('value:', value)
      },
      frozenUsers() {
        this.$confirm('确定要删除吗?', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          var url = this.HOST + '/xx/xxx'
          var qs = require('qs');
          this.$axios.post(url, qs.stringify(this.info), {
            headers: {
              'Content-Type': 'application/x-www-form-urlencoded',
            },
          })
            .then(res => {
              if (res.data.needReLogin === 1) {
                this.$store.dispatch('LogOut').then(() => {
                  location.reload()
                })
              }
              if (res.data.state==true){
                this.$notify({
                  title: '成功',
                  message: res.msg,
                  type: 'success',
                  duration: 2000
                })
              }else {
                this.$notify.error({
                  title: '失败',
                  message: res.msg,
                  duration: 2000
                })
              }
            })
            .catch(error => {
              console.log(error)
            })

        }).catch(() => {
          this.$message({
            type: 'info',
            message: '已取消操作'
          })
        })



      },
      submitForm(formName) {
        this.$refs[formName].validate((valid) => {  //开启校验
          if (valid) {   // 如果校验通过,请求接口,允许提交表单
            this.frozenUsers()
          } else {   //校验不通过
            return false;
          }
        });
      }

    }
<think>我们正在讨论Ant Design Vuetable组件如何默认展示树形数据。根据用户的问题,他想要知道如何在Ant Design Vuetable组件中默认展开树形结构的所有节点。 在Ant Design Vue中,树形表格可以通过设置`expandRowByClick`和`expandedRowKeys`等属性来实现。但是默认展开所有节点,我们需要设置`expandedRowKeys`为所有节点的key数组。 具体步骤: 1. 首先,确保数据源是树形结构(即包含children字段)。 2. 然后,我们需要收集所有节点的key(包括子节点)到一个数组中。 3. 将这个数组赋值给`expandedRowKeys`属性。 4. 同时,我们可以使用`defaultExpandAllRows`属性(在早期版本中有,但最新版本可能使用`expandedRowKeys`来控制)?注意:在Ant Design Vue中,推荐使用`expandedRowKeys`来控制展开的节点。 然而,在Ant Design Vue官方文档中,对于树形表格,通常使用`expandRowByClick`和`expandedRowKeys`等属性。另外,从版本2.x开始,树形表格的支持方式有所变化。 根据官方文档:https://www.antdv.com/components/table-cn#components-table-demo-tree-data 示例中,树形表格通过以下方式实现: - 设置`columns`时,使用`scopedSlots`自定义展开图标(如果需要的话)。 - 设置`rowKey`属性,指定每一行的唯一标识。 - 使用`expandedRowKeys.sync`(在Vue2中)或`v-model:expandedRowKeys`(在Vue3中)来控制展开的节点。 但是,默认展开所有节点,我们需要在组件的data中设置一个初始的`expandedRowKeys`数组,包含所有节点的key。 因此,我们可以写一个函数来遍历树形数据,收集所有节点的key。 示例代码: ```vue <template> <a-table :columns="columns" :row-key="record => record.id" :data-source="data" :childrenColumnName="'children'" // 如果你的子节点字段不是children,可以在这里指定 :expandedRowKeys="expandedRowKeys" @expand="handleExpand" // 如果需要处理展开事件 > <!-- 自定义列内容 --> </a-table> </template> <script> export default { data() { return { data: [], // 树形数据 columns: [], // 列定义 expandedRowKeys: [] // 默认展开的节点key数组 }; }, mounted() { // 在数据加载完成后,收集所有节点的key this.expandedRowKeys = this.getAllKeys(this.data); }, methods: { // 递归获取所有节点的key getAllKeys(data) { let keys = []; data.forEach(item => { keys.push(item.id); // 假设每个节点有一个唯一的id字段 if (item.children && item.children.length > 0) { keys = keys.concat(this.getAllKeys(item.children)); } }); return keys; }, handleExpand(expanded, record) { // 处理展开事件,如果需要的话 } } }; </script> ``` 注意:这种方法在数据量大的时候可能会导致性能问题,因为展开所有节点会渲染所有子节点。 另外,Ant Design Vue也提供了一个属性`defaultExpandAllRows`,但在树形表格示例中并没有使用。根据文档,`defaultExpandAllRows`是用于控制是否默认展开所有行的,但是只对树形数据有效。我们可以尝试设置`defaultExpandAllRows`为`true`来实现默认展开所有节点。 所以,我们可以这样写: ```vue <a-table ... :defaultExpandAllRows="true" > ``` 这种方式更简单,但是需要注意的是,这个属性可能只在初始化时有效,如果数据是异步加载的,那么可能需要在数据加载完成后设置这个属性为true,或者重新设置`expandedRowKeys`。 然而,根据官方文档,`defaultExpandAllRows`在2.x版本中是支持的,但在3.x版本中可能需要检查。 因此,总结有两种方法: 方法一:使用`defaultExpandAllRows`属性(简单,但可能在某些版本中不支持或者有异步数据问题) 方法二:自己计算所有节点的key并赋值给`expandedRowKeys`(更可控) 根据用户的实际需求,如果数据量不大,且确定要默认展开所有节点,可以使用`defaultExpandAllRows`属性。如果数据是异步加载的,可能需要在数据加载完成后设置`defaultExpandAllRows`为true,但注意这个属性只在初始化时生效?所以对于异步数据,可能还是需要方法二。 因此,我们给出两种方法,并说明适用场景。 注意:在异步加载数据的情况下,如果使用`defaultExpandAllRows`可能不会生效,因为表格初始化时数据为空。所以,推荐使用方法二,在数据加载完成后,设置`expandedRowKeys`为所有节点的key数组。 另外,在方法二中,如果数据是动态加载的(比如点击展开才加载子节点),那么我们就不能一次获取所有节点的key,因为初始数据可能只有第一层。这种情况需要动态加载,然后动态添加到`expandedRowKeys`中。不过用户的问题是“默认展示树形数据”,这里假设用户已经有了完整的树形数据。 所以,我们根据是否有异步加载来选择方法。 结论: 1. 如果数据是静态的或者同步获取的完整树形数据,可以使用`defaultExpandAllRows`属性。 2. 如果数据是异步获取的完整树形数据,则需要在获取数据后,调用方法生成所有key并赋值给`expandedRowKeys`。 3. 如果数据是动态加载(懒加载)的,则不能默认展开所有节点,因为子节点数据还未加载。 因此,对于用户的问题,我们假设用户已有完整的树形数据,那么我们可以给出两种方法供选择。 示例代码中,我们展示方法二,因为更通用,并且可以适用于异步数据的情况(只要数据加载完成后执行`getAllKeys`即可)。 另外,注意在组件中,如果数据变化(比如重新加载),需要重新计算`expandedRowKeys`。 最后,我们还需要注意:在树形表格中,需要指定`rowKey`,否则可能无法正确展开。 所以,回答如下: </think>Ant Design VueTable 组件实现树形数据默认展开的核心方法是使用 `defaultExpandAllRows` 属性结合树形数据结构。以下是具体实现步骤: --- ### 实现方法 1. **数据结构要求** 数据源必须是嵌套结构,每个节点包含 `children` 字段表示子节点: ```javascript const treeData = [ { key: '1', name: 'Node 1', children: [ { key: '1-1', name: 'Child 1' }, { key: '1-2', name: 'Child 2' } ] }, { key: '2', name: 'Node 2', children: [ { key: '2-1', name: 'Child 2-1', children: [{ key: '2-1-1', name: 'Grandchild' }] } ] } ]; ``` 2. **Table 组件配置** 添加 `defaultExpandAllRows` 属性并设为 `true`: ```vue <template> <a-table :columns="columns" :data-source="treeData" :defaultExpandAllRows="true" <!-- 关键属性 --> rowKey="key" /> </template> <script> export default { data() { return { columns: [ { title: 'Name', dataIndex: 'name' }, { title: 'Key', dataIndex: 'key' } ], treeData // 上述树形数据 }; } }; </script> ``` --- ### 关键说明 1. **`defaultExpandAllRows`** - 类型:`Boolean` - 作用:初始化时自动展开**所有嵌套层级**的节点 - 注意:仅在首次渲染时生效,后续展开状态由 `expandedRowKeys` 控制 2. **动态控制方案** 若需动态切换展开状态,需配合使用: ```vue <a-table :expandedRowKeys="expandedKeys" :defaultExpandAllRows="true" /> ``` ```javascript data() { return { expandedKeys: [] // 可通过方法生成所有key } }, mounted() { // 获取所有节点的key(递归函数示例) this.expandedKeys = this.getAllKeys(treeData); }, methods: { getAllKeys(data) { return data.reduce((keys, node) => { keys.push(node.key); if (node.children) keys.push(...this.getAllKeys(node.children)); return keys; }, []); } } ``` --- ### 效果对比 | **状态** | 属性配置 | 效果 | |----------------|-----------------------------|--------------------| | 默认全部展开 | `defaultExpandAllRows=true` | 所有层级自动展开 | | 默认全部折叠 | 不添加该属性 | 仅显示一级节点 | | 动态控制 | 结合 `expandedRowKeys` | 精确控制展开节点 | > 官方文档参考:[Ant Design Vue Table - 树形数据展示](https://www.antdv.com/components/table-cn#components-table-demo-tree-data)[^1] ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值