Vue基础篇--table的封装

2024-06-09 1200阅读

1、 在components文件夹中新建一个ITable的vue文件

Vue基础篇--table的封装
(图片来源网络,侵删)
    
        
            
                
                
                
                    
                        
                            
                                {{ props.row[item.prop] }}
                            
                        
                    
                
                
                
                
                
                
                
                
                
                
                
                
                    
                        
                            
                        
                    
                    
                    
                
                
                    
                        {{ item.label }}
                    
                
            
        
    


    export default {
        name: 'recordlist',
        props: {
            table: {
                type: Object,
                default() {
                    return {
                        hasMergeRowOrColumn: false, // 是否合并单元格
                        loading: false,          // 加载中动画
                        hasShowSummary: false,   // 是否显示表位合计行
                        border: false,           // 是否带有纵向边框,默认为false
                        height: "",        // 设置table的高度
                        align: 'center',   // 设置数据居中显示
                        hasSelect: false,        // 有无选中功能
                        hasOperation: false,     // 有无操作功能
                        hasExpand: false,        // 有无展开行功能
                        tr: [                    // 表头数据 —— className:列的class名
                            {
                                id: '1',
                                label: 'label',
                                prop: 'prop',
                                className: 'classname',
                                minWidth: '80',
                                show: true           // show有三种值:false隐藏当前列,true常规表格列,template自定义表格列
//          
//                {{ props.obj.row.username }}
//          
                            }
                        ],
                        data: [],                // 表格数据 —— 如需添加行class,处理数据时则需要传入class名, class需为数组
                        operation: {             // 操作功能
                            label: '操作',                // 操作列的行首文字
                            width: '200',                // 操作列的宽度
                            className: '',               // 操作列的class名
                            data: [                      // 操作列数据
                                {
                                    label: '通过',                // 按钮文字
                                    Fun: 'handleSubmit',         // 点击按钮后触发的父组件事件
                                    size: 'mini',                // 按钮大小
                                    id: '1',                     // 按钮循环组件的key值
                                    classname: 'show',         // 按钮的类名
                                    type: 'primary'             // 按钮的类型
                                }
                            ]
                        },
                        expands: [               // 展开行数据
                            {
                                id: '1',
                                label: 'label',
                                prop: 'prop'
                            }
                        ],
                        getSummaries(param) {               // 自定义表位合计行数据
                            // *** 此函数传入param参数
                            console.log(param);
                            // *** 最后返回一个数组,合计行会显示数组中的内容
                            return []
                        }
                    }
                }
            }
        },
        methods: {
            handleSelectionChange(val) {
                this.$emit('onHandleSelectionChange', val);
            },
            handleOperation(a, b, id) {
                const data = this.table.operation.data;
                for (let i = 0; i  

2、在单页面中引入ITable组件并使用,代码如下:

  

      
        
        
          {{ props.obj.row.username }}
        
      


import iTable from '@/components/ITable'
export default {
  name: 'Dept',
    components: {iTable},
data() {
    return {
      dataTable: {
        tr: [
          {
            id: '1',
            label: '用户名',
            prop: 'username',
            show: 'template',
            className: 'username'
          },
          {
            id: '2',
            label: '真实姓名',
            prop: 'real_name'
          },
          {
            id: '3',
            label: '性别',
            prop: 'sex_value'
          },
          {
            id: '11',
            label: '客服',
            prop: 'agent_name'
          },
          {
            id: '7',
            label: '渠道',
            prop: 'channel_id'
          },
          {
            id: '8',
            label: '注册时间',
            prop: 'regist_time',
            minWidth: '150'
          },
          {
            id: '9',
            label: '上次登录时间',
            prop: 'login_time',
            minWidth: '150'
          },
          {
            id: '10',
            label: '用户状态',
            prop: 'status_value'
          }
        ],
        operation:{
          label: '操作',                // 操作列的行首文字
          width: '200',
          data: [                      // 操作列数据
            {
              label: '添加',                // 按钮文字
              Fun: 'commitDate',         // 点击按钮后触发的父组件事件
              size: 'mini',                // 按钮大小
              id: '1',                     // 按钮循环组件的key值
              classname: 'show',            // 按钮的类名
              type: 'primary'
            },{
              label: '删除',                // 按钮文字
              Fun: 'deleteDate',         // 点击按钮后触发的父组件事件
              size: 'mini',                // 按钮大小
              id: '1',                     // 按钮循环组件的key值
              classname: 'show',            // 按钮的类名
              type: 'danger'
            }
          ]
        },
        data: [
                {
          username: '呆萌图',
          real_name: '张三',
          sex_value: '男',
          agent_name: '黎明',
          channel_id: '网购22222222222222222222222211111111111111111',
          regist_time: '2020-1-2',
          login_time: '2020-1-22',
          status_value: 'ok'
        },
          {
            username: '呆萌图',
            real_name: '张三',
            sex_value: '男',
            agent_name: '黎明',
            channel_id: '网购',
            regist_time: '2020-1-2',
            login_time: '2020-1-22',
            status_value: 'ok'
          },
          {
            username: '呆萌图',
            real_name: '张三',
            sex_value: '男',
            agent_name: '黎明',
            channel_id: '网购',
            regist_time: '2020-1-2',
            login_time: '2020-1-22',
            status_value: 'ok'
          },
          {
            username: '呆萌图',
            real_name: '张三',
            sex_value: '男',
            agent_name: '黎明',
            channel_id: '网购',
            regist_time: '2020-1-2',
            login_time: '2020-1-22',
            status_value: 'ok'
          }],
        border: true,
        height:"calc(100vh - 300px)",
        loading: false,
        align: "center",
        hasOperation: true,
      }
    }
  }
}
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]