Vue 学习随笔系列九 -- 表格中插入图片、背景、自定义表头

news2024/11/13 23:11:30

表格中插入图片和icon

文章目录

  • 表格中插入图片和icon
  • 一、如何插入图片
      • 1、代码
      • 2、效果
  • 二、文字添加背景
      • 1、代码
      • 2、效果
    • 三、表头悬浮提示语
    • 四、表头添加图标

一、如何插入图片

1、代码

<template>
  <div>
    <el-table
      size="small"
      border
      v-loading="loading"
      :data="tableData"
      @selection-change="select"
    >
      <el-table-column
        type="selection"
        width="55">
      </el-table-column>

      <el-table-column
        v-for="(item, index) in tableHead"
        :key="index"
        v-bind="item"
        align="center"
        :min-width="getMinWidth(item)"
      > 
        <template slot-scope="scope">
          <span v-if="item.prop==='status'">
            <el-image :src="formatStatus(scope.row[item.prop]).img"></el-image>
            <span :style="formatStatus(scope.row[item.prop]).style">{{ scope.row[item.prop] }}</span>
          </span>
          <span v-else>{{ scope.row[item.prop] }}</span>
        </template>

      </el-table-column> 

      <el-table-column
        label="操作"
        fixed="right"
        align="center"
        width="160"
      >
        <template slot-scope="scope">
          <span
            type="primary"
            size="mini"
            class="operate-btn"
            plain
            @click="emitEvent({eventName:'detail', params: scope.row})"
          >详情</span>

          <span
            type="primary"
            size="mini"
            class="operate-btn"
            v-show="scope.row.status === '运行'"
            plain
            @click="emitEvent({eventName:'executeOrStop', params: [{row: scope.row, mod: 'stop'}] })"
          >停止</span>
          <span
            type="primary"
            size="mini"
            class="operate-btn"
            v-show="scope.row.status === '关闭' || scope.row.status === '完成'"
            plain
            @click="emitEvent({eventName:'executeOrStop', params: [{row: scope.row, mod: 'start'}] })"
          >执行</span>

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

  </div>
</template>


<script>

  export default {
    props: {
      tableData: {
        type: Array,
        default: () => []
      },
      head: {
        type: Array,
        default: () => []
      }
    },
    data() {
      return {
        loading: true,
        columns: [],
        total: 0,
        pageNum: 1,
        pageSize: 10, 
        pageSizes: [10, 20, 50, 100],
      }
    },
    computed: {
      getMinWidth () {
        return itemColumn => {
          const len = itemColumn.label.toString().length
          return `${len * 25}px`
        }
      },
      tableHead(){
        let data = this.head
        // 根据index值对表头进行排序
        data.sort((a, b) => {
          return a.index - b.index
        })
        this.loading = false
        let columns = data.map( v=> {
          return {
            prop: v.prop,
            label: v.label
          }
        })
         return columns
      },
      formatStatus () {
        const formatMap = {
          '关闭': {
            img: require('../../../../assets/icon/stop.png'),
            style: { 'color': 'red' }
          },
          '运行': {
            img: require('../../../../assets/icon/run.png'),
            style: { 'color': '#086BFF' }
          },
          '完成': {
            img: require('../../../../assets/icon/complete.png'),
            style: { color: '#29CC51' }
          },
          '等待中': {
            img: require('../../../../assets/icon/wait.png'),
            style: { color: '#333333' }
          }
        }
        return status => {
          return formatMap[status]
        }
      }
    }, 
    methods: {
      // 分页
      handleSizeChange (val) {
        this.pageSize = val
        this.query()
      },
      // 当前页
      handleCurrentChange (val) {
        this.pageNum = val
        this.query()
      },
      // 触发查询
      emitEvent ({eventName, params}) {
        this.$emit(eventName, params)
      },
      // 选中
      select(val) {
        this.$emit('handleSelectionChange', val)
      }
    }
  }

</script>

<style lang="less" scoped>
  .operate-btn {
    color: #4597eb;
    cursor: pointer;
    margin-right: 10px;
    font-size: 12px;
  }
  
  .el-image {
    vertical-align: middle;
    margin-right: 5px;
  }
  .status-box {
    line-height: 23px;
    display: inline-block;
  }
</style>

2、效果

在这里插入图片描述

二、文字添加背景

1、代码

<template>
  <el-table
    border
    stripe
    size="small"
    :data="tableData"
    @selection-change="select"
  >
    <el-table-column
      type="selection"
      align="center"
      width="55">
    </el-table-column>
    <el-table-column
      label="序号"
      type="index"
      align="center"
      width="55">
    </el-table-column>

    <el-table-column
      v-for="(item, index) in columns"
      :key="index"
      v-bind="item"
      align="center"
      :min-width="getMinWidth()"
    >
    <template slot-scope="scope">
        <span v-if="item.prop==='status'">
          <el-tag :style="formatStatus(scope.row[item.prop]).style">{{ scope.row[item.prop] }}</el-tag>
        </span>
        <span v-else>{{ scope.row[item.prop] }}</span>
      </template>
    </el-table-column>
  </el-table>
</template>

<script>

export default {
  props: ['tableData'],
  data () {
    return {
      columns: [
        {
          prop: 'xxx',
          label: 'xxx',
          'show-overflow-tooltip': true
        },
        {
          prop: 'xxx',
          label: 'xxx',
          'show-overflow-tooltip': true
        },
        {
          prop: 'status',
          label: '状态',
          'show-overflow-tooltip': true
        },
        {
          prop: 'xxx',
          label: 'xxx',
          'show-overflow-tooltip': true
        },
        {
          prop: 'draftStatus',
          label: '拟稿状态',
          'show-overflow-tooltip': true
        },
        {
          prop: 'message',
          label: '提示信息',
          'show-overflow-tooltip': true
        },
        {
          prop: 'draftTime',
          label: '拟稿时间',
          'show-overflow-tooltip': true
        },
      ]
    }
  },
  computed: {
    getMinWidth () {
      return itemColumns => {
        const len = itemColumns.label.toString().length
        return `${len * 25}px`
      }
    },
    formatStatus () {
        const formatMap = {
          '失败': {
            style: { 
              'color': '#FF6767' ,
              'border-radius': "15px", 
              'background-color': '#FFD3D3', 
              'border': '1px solid transparent'
            },
          },
          '成功': {
            style: { 
              'color': '#71D18C' ,
              'border-radius': "15px", 
              'background-color': '#95F3B0', 
              'border': '1px solid transparent'
            },
          }
        }
        return status => {
          return formatMap[status]
        }
      }
  },
  methods: {
    // 选中
    select(val) {
      this.$emit('handleSelectionChange', val)
    },
    uploadItem(row){
      this.$emit('uploadItem', row)
    },
    overViewItem(row){
      this.$emit('overViewItem', row)
    }
  }
}

</script>

<style lang="scss" scoped>
  .el-button {
    margin-left: 0px;
  }
  .operate-text {
    color: #4C68EF;
    cursor: pointer;
  }
  
</style>

2、效果

在这里插入图片描述

三、表头悬浮提示语

 <el-table-column
      v-for="(item, index) in tableHeadTemp"
      :key="index"
      v-bind="item"
      align="center"
      :min-width="getMinWidth(item)"
    >
      <template slot="header">
        <el-tooltip class="item" effect="light" :content="item.label" placement="top-start">
          <span>{{ item.label }}</span>
        </el-tooltip>
      </template>
    </el-table-column>
    
 <el-table-column
      v-for="(item, index) in tableHeadTemp"
      :key="index"
      v-bind="item"
      align="center"
      :min-width="getMinWidth(item)"
    >
        <template slot="header">
          <span>{{ item.label }}
            <el-tooltip class="item" effect="dark" content="双击添加SKU" placement="top-start">
              <i class="el-icon-question" style="color:#606266;" />
            </el-tooltip>
          </span>
        </template>
      </el-table-column>

四、表头添加图标

效果:
在这里插入图片描述

<template>
  <el-table
    border
    stripe
    size="small"
    ref="myTable"
    :data="tableData"
    @selection-change="handleSelectionChange"
  >
    <el-table-column
      type="selection"
      width="55">
    </el-table-column>
    <!-- <el-table-column
      type="index"
      label="序号"
      width="55">
    </el-table-column> -->
    <el-table-column
      v-for="(item, index) in tableColumns"
      :key="index"
      v-bind="item"
      align="center"
      :min-width="getMinWidth(item)"
    > 
      <template slot="header">
        <div v-if="item.prop==='pwd'" class="pwd-box">
          <span >{{ '密码' }}</span>
          <img src="@/assets/static/pwd-show.png" alt="" @click="pwdShowOrHide('0')">
        </div>
      </template>
      <template slot-scope="scope">
        <div >
        <span v-if="item.prop==='pwd'">{{ '********' }}</span>
        <span v-else>{{ scope.row[item.prop] }}</span>
      </div>
      </template>
    </el-table-column>

    <el-table-column
      label="操作"
      fixed="right"
      width="180px"
      align="center"
      v-if="isShowEdit"
    >
      <!-- <template #default="scope"> -->
      <template slot-scope="{ $index }">
        <span class="update-btn" size="small" @click="handleClick($event, $index, 'editItem')"
        >编辑
        </span>
        <span class="update-btn" size="small" @click="handleClick($event, $index, 'delItem')" >删除 </span>

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

<script>
export default {
  props:{
    tableData: {},
    tableColumns: {},
  },
  computed: {
    getMinWidth () {
      return itemColumns => {
        const len = itemColumns.label.toString().length
        return `${len * 25}px`
      }
    },
  },
  data () {
    return {
      isShowPwd: false,
    }
  },
  methods: {
    handleSelectionChange(val){
      this.$emit('handleSelectionChange', val)
    },
    pwdShowOrHide(val) {
      this.$emit('pwdShowOrHide', val)
    },
  }
}

</script>

<style lang="scss" scoped>
  .pwd-box {
    display: flex;
    align-items: center;
    justify-content: center;
  }
  
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1431113.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WordPress每天发布60s插件

源码名称:WordPress每天发布60s插件 适用平台:WordPress Wordpress还是比较适合个人博客网站&#xff0c;这个60秒插件适合一些喜欢自动发新闻早报晚报人员 喜欢的赶紧下手。找 万能工具箱合集 小程序即可找到资源

乐鑫与 Elektor 杂志合作推出特刊,聚焦 AIoT 创新

在新一年的起始之际&#xff0c;我们很荣幸地与 Elektor 合作推出由乐鑫领衔编辑的杂志特刊。欢迎点此阅读电子版本。 Elektor 杂志作为国际电子工程和科技创新的重要平台&#xff0c;自 20 世纪 60 年代起&#xff0c;就引领着电子制造的发展潮流。如今&#xff0c;它已经发展…

【Java程序设计】【C00190】基于SSM的餐厅点餐管理系统(论文+PPT)

基于SSM的餐厅点餐管理系统&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的餐厅点餐系统 本系统分为前台用户和后台管理员2个功能模块。 前台用户&#xff1a;当游客打开系统的网址后&#xff0c;首先看到的就是首页界…

Spark 依赖包加载方式

1 Spark 依赖包来源 我们知道Spark application运行加载依赖有三个地方&#xff1a; systemClasspath&#xff1a;Spark安装时候提供的依赖包&#xff0c;${SPARK_HOME}/jars下的包。spark-submit --jars 提交的依赖包spark-submit --config "spark.{driver/executor}.e…

如何恢复删除的文件?五个步骤搞定文件恢复

在数字洪流汇聚的今日&#xff0c;我们的信息大多以电子的形态保存。这些电子文件&#xff0c;无论是职场上的重要文书&#xff0c;还是个人生活中的照片与视频&#xff0c;一旦消失&#xff0c;就可能带来无法弥补的遗憾。所幸的是&#xff0c;随着科技的马不停蹄&#xff0c;…

vue3学习——自定义插件,注册组件(引入vue文件报红线)

在src/components文件夹目录下创建一个index.ts文件 import { App, Component } from Vue import SvgIcon from /components/SvgIcon/index.vue import Pagination from /components/Pagination/index.vue const globalComponents: { [name: string]: Component } { SvgIcon,…

Stable Code 3B:轻量级编程助手,无GPU本地运行

引言 Stability AI近期发布了Stable Code 3B&#xff0c;这是一个集中了多项创新技术的轻量级编程辅助模型。它在保持轻量的同时&#xff0c;展现出了与大型模型如CodeLLaMA 7B相媲美的性能&#xff0c;这一特性使其在没有GPU的环境中也能运行&#xff0c;极大地拓宽了其应用范…

面试经典150题——验证回文串

​"Challenges are what make life interesting and overcoming them is what makes life meaningful." - Joshua J. Marine 1. 题目描述 2. 题目分析与解析 在解决这个问题之前我们先想一下普通的回文串是如何判断的。 方法1&#xff1a;通过将字符串反转&#xff…

UnityShader(十四)纹理

目录 前言&#xff1a; 单张纹理实现效果&#xff1a; 效果&#xff1a; 前言&#xff1a; 纹理最初的目的是用一张图片来控制模型的外观。使用纹理映射技术我们可以把一张图“贴”在模型表面&#xff0c;逐纹素&#xff08;文素的名字是为了和像素进行区分&#xff09;控制…

2024 Google Chrome 浏览器回退安装旧版本

2024 Google Chrome 浏览器回退安装旧版本 查看当前谷歌版本备份浏览器数据卸载浏览器双击重新安装旧版本浏览器 查看当前谷歌版本 详细参考&#xff1a;参考 笔记&#xff1a;最近谷歌浏览器更新后&#xff0c;用着总感觉别扭&#xff1a;不习惯 备份浏览器数据 &#xff…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之MenuItem组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之MenuItem组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、MenuItem组件 TextClock组件通过文本将当前系统时间显示在设备上。支持不同时…

假期2.3

第二章 引用内联重载 一&#xff0e;选择题-* 1、适宜采用inline定义函数情况是&#xff08;C&#xff09; A. 函数体含有循环语句 B. 函数体含有递归语句‘、考科一 ’ C. 函数代码少、频繁调用 D. 函数代码多、不常调用 2、假定一个函数为A(int i4, int j0) {;}, 则执行“A …

09. BI - 数据可视化,如何进行基本图形绘制

本文为 「茶桁的 AI 秘籍 - BI 篇 第 09 篇」 文章目录 EDA 作用可视化视图Python 进行可视化subplot Hi&#xff0c;你好。我是茶桁。 今天想给大家讲的是关于数据的可视化。在工作中很多时候我们不光要计算结果&#xff0c;还要把结果呈现出来&#xff0c;最好是一种图形化的…

MATLAB知识点:矩阵的加法

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 节选自第3章 3.4.2 算术运算 首先是矩阵的加法。在线性代数中…

软考19-上午题-栈和队列

栈、队列&#xff0c;都是线性结构 一、栈 1-1、栈的定义 只能通过访问他的一端来实现数据的存储和检索的线性结构。 特点&#xff1a;先进后出 不含数据元素的栈——空栈。 栈的典型应用&#xff0c;递归。 1-2、栈的存储结构 1-2-1、栈的顺序存储——顺序栈 可以用数组实…

SpringBoot注解--06--注解@Validated

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1 简述1.1 Validated作用1.2 所有参数注解含义1.3 异常处理1.4 Valid和Validated比较Valid级联校验 2.Validated 分组校验1.1为何要分组校验&#xff1f;1.2 代码案…

ERP 系统架构的设计与实践总结

企业资源计划&#xff08;ERP&#xff09;系统是一种集成多个业务功能的综合性软件解决方案。在设计和实践 ERP 系统架构时&#xff0c;需要考虑诸多因素&#xff0c;以确保系统能够满足企业的需求&#xff0c;并提供高效、可靠、安全的服务。本文将介绍一些关键的设计原则和实…

2023年全球软件开发大会(QCon上海站2023):核心内容与学习收获(附大会核心PPT下载)

在信息化和全球化日益加速的今天&#xff0c;软件开发技术日新月异&#xff0c;对全球各行各业产生了深远影响。2023年全球软件开发大会&#xff08;QCon上海站2023&#xff09;无疑成为行业内外瞩目的焦点。本次大会汇集了全球顶级的软件开发专家、企业领袖、研究者&#xff0…

Filter与Listener(Java Web)

Filter与Listener(Java Web) 概念&#xff1a;Filter表示过滤器&#xff0c;是JavaWeb三大组件(Servlet、Filter、Listener)之一。过滤器可以把对资源的请求拦截下来&#xff0c;从而实现一些特殊的功能。过滤器一般完成一些通用的操作&#xff0c;比如&#xff1a;权限控制、…

Hudi学习 6:Hudi使用

准备工作&#xff1a; 1.安装hdfs https://mp.csdn.net/mp_blog/creation/editor/109689143 2.安装spark spark学习4&#xff1a;spark安装_hzp666的博客-CSDN博客 3.安装Scala Hudi学习6&#xff1a;安装和基本操作_hzp666的博客-CSDN博客 spark-shell 写入和读取hudi 2.…