修改iview库table表格数据为纵向显示

前言

目前的ui框架table都是横向数据显示的,但是客户原型需求是要纵向显示,因为不想自己写样式,所以讲iview框架进行修改封装了一下。 如图:

需要修改成

 

封装 

export function createRender(h, params, this, obj) {
    switch (params.row.type) {
        case "input":
            return h("div", [
                h("Input", {
                    props: {
                        value: params.row.value,
                        slot: 'append',
                    },
                    on: {
                        "on-change": (event) => {
                        },
                        //因为需求要实现可单个字段编辑,所以每个字段都需要监听 valueChange是修改字段方法
                        "on-blur": (event) => {
                            if (params.row.value != event.target.value) {
                                params.row.value = event.target.value;
                                params.row.change = true;
                            } else {
                                params.row.change = false;
                            }

                            if (params.row.change == true) {
                                valueChange(obj, params, this)
                            }
                        },
                        "on-enter": (event) => {
                            if (params.row.value != event.target.value) { //判断修改前后输入内容是否一样
                                params.row.value = event.target.value;
                                params.row.change = true;
                            } else {
                                params.row.change = false;

                            }

                            if (params.row.change == true) {
                                valueChange(obj, params, this)
                            }
                        },
                    },
                }),
            ]);
                    case 'switch':
            return h("div", [
                h("i-switch", {
                    props: {
                        size: "large",
                        value: params.row.value == "1" ? true : false,
                        disabled: params.row.disabled == "true" ? true : false
                    },
                    scopedSlots: {
                        open: () => h("span", "True"),
                        close: () => h("span", "False"),
                    },
                    on: {
                        'on-change': (event) => {
                            params.row.value = event ? 1 : 0;
                            valueChange(obj, params, this)
                        },
                    },
                }),
            ]);
        case "button":
            return h("div", [
                h("i-button", {
                    props: {
                        type: 'success ghost',
                        size: 'small',
                        ghost: true,
                    },
                    on: {
                        "click": (event) => {
                            clickButton(obj, params, this);
                        },
                    },
                }, '操作'),

            ]);

        default:
            return h("div", [
                h("span", params.row.value),
            ]);
    }
}

//数据修改触发
function valueChange(obj, params, this) {
    this.editModel = true; //修改确实弹框,修改字段逻辑在页面处理
    this.updateName = typeof params.row.title != 'undefined' ? params.row.title : params.row.name;
    this.updateKey = params.row.key;
    this.updateValue = params.row.value;
    
}

页面中引用

<template>
  <div class="main">
    <Table border :columns="Column" :data="Data"></Table>
  </div>
</template>

<script>
  import {
    createRender,
} from "../../libs/customTables.js";
export default {
  data() {
    return {
      Column: [
        {
            title: "参数名",
            key: "title",
        },
        {
            title: "参数值",
            key: "value",
            render: (h, params) => {
                //根据type动态生成
                return createRender(h, params, this, this.obj);
            },
        },
      ],
      Data: [
        {
            key: "Enable",
            title: '开关',
            value: "1",
            type: "switch",
        }
        {
            key: "URL",
            title: '地址',
            value: "",
            type: "input",
        },
        {
            key: "...",
            title: '...',
            value: " ",
            type: "input",
        },
      ],
    };
  },
  methods: {
    getData() {
      //...接口请求
      //数据返回处理
      for(let i = 0; i < this.Data.length; i++) {
        this.Data[i].value = res[this.Data[i].key]; 
      }
      
    }
  },
};
</script>

<style>

</style>

总结 

纵向其实和正常表格渲染差不多,只是需要额外处理数据的渲染方式。这只是我自己的实现方式,如果你有更好的方法也可以一起分享探讨哦!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以通过以下步骤来删除 Vue + iView 表格中的某一行数据: 1. 在表格中添加一个“删除”列,并在该列中添加一个“删除”按钮,例如,可以使用如下代码: ```html <template> <Table :columns="columns" :data="tableData"> <template slot="operations" slot-scope="{row}"> <Button type="error" @click="deleteRow(row)">删除</Button> </template> </Table> </template> <script> export default { data() { return { columns: [ { title: '姓名', key: 'name' }, { title: '年龄', key: 'age' }, { title: '性别', key: 'gender' }, { title: '操作', slot: 'operations', align: 'center' }, ], tableData: [ { name: '张三', age: 18, gender: '男' }, { name: '李四', age: 20, gender: '女' }, { name: '王五', age: 22, gender: '男' }, ], }; }, methods: { deleteRow(row) { const index = this.tableData.indexOf(row); this.tableData.splice(index, 1); }, }, }; </script> ``` 在上面的代码中,我们在表格中添加了一个名为“operations”的插槽,该插槽对应了一个“删除”按钮,当用户点击该按钮时,会触发 `deleteRow()` 方法,该方法会从表格数据源中删除指定的行。 2. 最后,如果你想要删除某一行数据时,弹出一个确认框,让用户确认是否删除,可以使用 iView 的 `Modal` 对话框组件,例如,可以使用如下代码: ```html <template> <Table :columns="columns" :data="tableData"> <template slot="operations" slot-scope="{row}"> <Button type="error" @click="showDeleteConfirm(row)">删除</Button> </template> </Table> </template> <script> import { Modal } from 'iview'; export default { data() { return { columns: [ { title: '姓名', key: 'name' }, { title: '年龄', key: 'age' }, { title: '性别', key: 'gender' }, { title: '操作', slot: 'operations', align: 'center' }, ], tableData: [ { name: '张三', age: 18, gender: '男' }, { name: '李四', age: 20, gender: '女' }, { name: '王五', age: 22, gender: '男' }, ], }; }, methods: { showDeleteConfirm(row) { Modal.confirm({ title: '确认删除', content: `是否删除 ${row.name}?`, onOk: () => { const index = this.tableData.indexOf(row); this.tableData.splice(index, 1); }, }); }, }, }; </script> ``` 在上面的代码中,我们使用了 iView 的 `Modal` 对话框组件,当用户点击“删除”按钮时,会弹出一个确认框,让用户确认是否删除该行数据。如果用户点击“确定”按钮,则会从表格数据源中删除该行数据

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值