iview-admin 在table单元格内显示组件小记

说明

表格内内嵌相关的组件标签一般是刚需的需求,如官网示例中的表格内内嵌Button的示例。

但是有些时候我们需要渲染其他复杂的组件的话,就需要深入了解一下相关render属性。

以下是部分的示例:

1.单元格内嵌图片展示:

image.png
  {
            title: 'bannel图',
            key: 'pic_bannel',
            align: 'center',
            width: 100,
            render: (h, params) => {
              return h('div', [
                h('img', {
                  attrs: {
                    src: params.row.pic_bannel
                  },
                  style: {
                    width: '40px',
                    height: '40px'
                  },
                  on: {
                    click: () => {
                      // this.userEdit(params.row)
                      this.modal_see_tupian_image = params.row.pic_bannel
                      this.modal_see_tupian = true
                    }
                  }
                }),
              ]);
            }
          }

2.单元格内嵌TAG标签:

image.png
 {
            title: '商品类型',
            key: 'type',
            align: 'center',
            width: 120,
            render: (h, params) => {
              let re = "";
              if (params.row.type === 0) {
                return h("div", [
                  h(
                    "Tag",
                    {
                      props: {
                        color: "warning"
                      }
                    },
                    "虚拟物品"
                  )
                ]);
              } else if (params.row.type === 1) {
                return h("div", [
                  h(
                    "Tag",
                    {
                      props: {
                        color: "success"
                      }
                    },
                    "实体物品"
                  )
                ]);
              }
            }
          },

优化判断逻辑:

 {
            title: '性别',
            key: 'sex',
            align: 'center',
            width: 100,
            render: (h, params) => {
              return h("div", [
                h(
                  "Tag",
                  {
                    props: {
                      color: params.row.sex === "1" ? "purple" : "blue"
                    }
                  },
                  params.row.sex === "1" ? "男" : "女"
                )
              ]);
            }
          },

3.单元格内嵌Tooltip标签:

image.png
 {
            title: '商品描述',
            key: 'describe',
            align: 'center',
            width: 200,
            render: (h, params) => {
              return h('Tooltip', {
                props: {placement: 'bottom-end'}
              }, [
                params.row.describe,
                h('span', {slot: 'content', style: {whiteSpace: 'normal', wordBreak: 'break-all'}}, params.row.describe)
              ])
            }
          }

4.单元格内嵌Poptip标签:

image.png

//这个参数很重要,影响到是否被遮挡的问题
Poptip中的 transfer: true,

 {
            title: '操作',
            key: 'action',
            width: 200,
            // fixed: 'right',
            align: 'center',
            render: (h, params) => {
              return h('div', [
                // h('Button', {
                //   props: {
                //     type: 'primary',
                //     size: 'small'
                //   },
                //   style: {
                //     marginRight: '5px'
                //   },
                //   on: {
                //     click: () => {
                //       // this.goodsInfoList[params.row._index] = dsiasdh
                //       // console.log(this.goodsInfoList[params.row._index])
                //       // this.currgoodsInfoList = params.row
                //       //显示对应的对话框
                //       // this.edit_goods_info_modal = true
                //     }
                //   }
                // }, '查看'),
                h('Button', {
                  props: {
                    type: 'primary',
                    size: 'small'
                  },
                  style: {
                    marginRight: '5px'
                  },
                  on: {
                    click: () => {
                      // this.userEdit(params.row)
                      //赋值当前选择的实体对象
                      this.currgoodsInfoList = params.row
                      this.currgoodsInfoList_index = params.row._index
                      //拷贝一份对象,不影响原来的值
                      this.copy_currgoodsInfoList = Object.assign({}, params.row);

                      // this.currgoodsInfoList_is_enable = this.currgoodsInfoList.is_enable
                      // this.currgoodsInfoList_is_lower = this.currgoodsInfoList.is_lower
                      // this.currgoodsInfoList_type = this.currgoodsInfoList.type
                      // this.currgoodsInfoList_tag= this.currgoodsInfoList.tag


                      //显示对应的对话框
                      this.edit_goods_info_modal = true
                    }
                  }
                }, '修改'),
                //弹窗层-包含按钮
                h('Poptip', {
                  props: {
                    //这个参数很重要,影响到是否被遮挡的问题
                    transfer: true,
                    // placement: 'bottom',
                    confirm: true,
                    title: '你确定要删除吗?'
                  },
                  on: {
                    'on-ok': () => {
                      console.log(" 点击了确定删除!!!!")
                      this.deleteGoodsinfo()
                      // vm.$emit('on-delete', params)
                      // vm.$emit('input', params.tableData.filter((item, index) => index !== params.row.initRowIndex))
                    }
                  }
                }, [
                  h('Button', {
                    props: {
                      type: 'error',
                      size: 'small'
                    },
                    on: {
                      click: () => {
                        // this.deleteUser(params.row.USER_ID)
                      }
                    }
                  }, '删除')
                ])
              ]);
            }

5.单元格内嵌Avatar组件:

image.png
  {
            title: '用户头像',
            key: 'avatar_url',
            align: 'center',
            width: 100,
            render: (h, params) => {
              return h("Avatar", {
                props: {
                  src: params.row.avatar_url
                }
              });
            }
          }

6.单元格内嵌Switch组件:

image.png

代码还可以简化一下:
根据params.row.is_enable设置switch的值就可以!

  {
            title: '用户状态',
            key: 'is_enable',
            align: 'center',
            width: 190,
            render: (h, params) => {
              if (params.row.is_enable === 1) {
                return h("div", [
                  h(
                    "Tag",
                    {
                      props: {
                        color: "green"
                      }
                    },
                    "正常中"
                  ),
                  h('i-switch', { //数据库1是已处理,0是未处理
                    props: {
                      size:'large',
                      type: 'primary',
                      value: false //控制开关的打开或关闭状态,官网文档属性是value
                    },
                    scopedSlots: {
                      open: () => h('span', '开启'),
                      close: () => h('span', '禁用'),
                    },
                    style: {
                      marginRight: '5px'
                    },
                    on: {
                      'on-change': (value) => {//触发事件是on-change,用双引号括起来,
                        //参数value是回调值,并没有使用到
                        // this.switch(params.index) //params.index是拿到table的行序列,可以取到对应的表格值
                        this.usersInfoList[params.index].is_enable = 0
                      }
                    }
                  },)
                ]);
              } else if (params.row.is_enable === 0) {
                return h("div", [
                  h(
                    "Tag",
                    {
                      props: {
                        color: "red"
                      }
                    },
                    "已禁用"
                  ),
                  h('i-switch', { //数据库1是已处理,0是未处理
                    props: {
                      size:'large',
                      type: 'primary',
                      value: true
                    },
                    scopedSlots: {
                      open: () => h('span', '开启'),
                      close: () => h('span', '禁用'),
                    },
                    style: {
                      marginRight: '5px'
                    },
                    on: {
                      'on-change': (value) => {//触发事件是on-change,用双引号括起来,
                        //参数value是回调值,并没有使用到
                        // this.switch(params.index) //params.index是拿到table的行序列,可以取到对应的表格值
                        this.usersInfoList[params.index].is_enable = 1
                      }
                    }
                  },)
                ]);
              }

代码判断优化:

{
            title: '用户状态',
            key: 'is_enable',
            align: 'center',
            width: 190,
            render: (h, params) => {
              return h("div", [
                h(
                  "Tag",
                  {
                    props: {
                      color: params.row.is_enable === 1 ? "green" : "red"
                    }
                  },
                  params.row.is_enable === 1 ? "正常中" : "已禁用"
                ),
                h('i-switch', { //数据库1是已处理,0是未处理
                  props: {
                    size: 'large',
                    type: 'primary',
                    value: params.row.is_enable === 1 ? false : true//控制开关的打开或关闭状态,官网文档属性是value
                  },
                  scopedSlots: {
                    open: () => h('span', '开启'),
                    close: () => h('span', '禁用'),
                  },
                  style: {
                    marginRight: '5px'
                  },
                  on: {
                    'on-change': (value) => {//触发事件是on-change,用双引号括起来,
                      //参数value是回调值,并没有使用到
                      // this.switch(params.index) //params.index是拿到table的行序列,可以取到对应的表格值
                      if (value) {
                        params.row.is_enable = 0
                      } else {
                        params.row.is_enable = 1
                      }
                    }
                  }
                },)
              ]);
            }
          },
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容