带头部表头和侧边表头样式的布局

news2025/5/20 9:50:52

原型设计的页面中的表格除了头部还有左侧侧边是表头的一个表格,查阅组件文档,发现表格table没有两个表头的布局。
思路:

1、使用div自己布局
2、使用表格table,修改其第一列样式背景,展示除了的样子看着像是有多个表头

代码:
这里表格使用的是element组件的el-table

<template>
  <div class="page">
    <!-- 我的会员 -->
    <div class="my_vip">
      <div class="vip_con">
        <div class="vip_type">
          尊享会员
        </div>
        <div>
          <el-button class="hcd_button_default mar16" type="primary"
            >续费</el-button
          >
          <span>2022-12-23 到期</span>
        </div>
      </div>
      <div class="vip_list">
        <div class="vip_list_item">
          <div class="item_con">
            <div class="icon">
              <i
                slot="reference"
                class="iconfont icon-huoyuanfabu hcd_main_font_color"
              ></i>
            </div>
            <div>
              <p>货源发布</p>
              <span>10次</span>
            </div>
          </div>
          <div class="item_btn">
            <el-button class="hcd_button_default" type="primary"
              >追加</el-button
            >
          </div>
        </div>
        <div class="vip_list_item">
          <div class="item_con">
            <div class="icon">
              <i
                slot="reference"
                class="iconfont icon-weituopingtai hcd_main_font_color"
              ></i>
            </div>
            <div>
              <p>委托平台</p>
              <span>10次</span>
            </div>
          </div>
          <div class="item_btn">
            <el-button class="hcd_button_default" type="primary"
              >追加</el-button
            >
          </div>
        </div>
        <div class="vip_list_item">
          <div class="item_con">
            <div class="icon">
              <i
                slot="reference"
                class="iconfont icon-guijizhuizong hcd_main_font_color"
              ></i>
            </div>
            <div>
              <p>轨迹追踪</p>
              <span>10次</span>
            </div>
          </div>
          <div class="item_btn">
            <el-button class="hcd_button_default" type="primary"
              >追加</el-button
            >
          </div>
        </div>
        <div class="vip_list_item">
          <div class="item_con">
            <div class="icon">
              <i
                slot="reference"
                class="iconfont icon-youhuikaquan hcd_main_font_color"
              ></i>
            </div>
            <div>
              <p>优惠卡券</p>
              <span>10次</span>
            </div>
          </div>
        </div>
      </div>
    </div>
    <!-- div 盒子布局 -->
    <div class="vip_info">
      <div
        class="vip_info_list"
        v-for="(list, i) in VipInfoList"
        :key="'list' + i"
      >
        <div v-for="(row, j) in list" :key="j">
          <p>
            {{ row }}
          </p>
        </div>
      </div>
    </div>
    <!-- 表格布局 -->
    <div>
      <el-table :data="tableData" border style="width: 100%">
        <el-table-column
          prop="title"
          label=""
          width="120"
          cell-class-name="cell_title"
        >
        </el-table-column>
        <el-table-column prop="explain" label="权益说明"></el-table-column>
        <el-table-column prop="vip1" label="普通货主"> </el-table-column>
        <el-table-column prop="vip2" label="会员货主"> </el-table-column>
        <el-table-column prop="vip3" label="尊享货主"> </el-table-column>
      </el-table>
    </div>
  </div>
</template>

<script>
export default {
  name: 'MyVip',
  components: {},
  props: [],
  data() {
    return {
      tableData: [
        {
          title: '货源发布',
          explain: '货主在线成功发货一次',
          vip1: '(随活动不定期发放)',
          vip2: '(随活动不定期发放)',
          vip3: '25次',
        },
        {
          title: '委托平台',
          explain: '货源发布模式为委托平台,成功发布货源即消耗一次',
          vip1: '(随活动不定期发放)',
          vip2: '(随活动不定期发放)',
          vip3: '25次',
        },
        {
          title: '轨迹追踪',
          explain: '货主可使用货物追踪权益成功查看一笔运单运输轨迹',
          vip1: '(随活动不定期发放)',
          vip2: '10次',
          vip3: '20次',
        },
        {
          title: '优惠卡券',
          explain: '优惠券的使用规则,以具体优惠券页面展示为准',
          vip1: '(随活动不定期发放)',
          vip2: '10张',
          vip3: '20张',
        },
      ],
      VipInfoList: [
        ['', '权益说明', '普通货主', '会员货主', '尊享货主'],
        [
          '货源发布',
          '货主在线成功发货一次',
          '(随活动不定期发放)',
          '(随活动不定期发放)',
          '25次',
        ],
        [
          '委托平台',
          '货源发布模式为委托平台,成功发布货源即消耗一次',
          '(随活动不定期发放)',
          '(随活动不定期发放)',
          '25次',
        ],
        [
          '轨迹追踪',
          '货主可使用货物追踪权益成功查看一笔运单运输轨迹',
          '(随活动不定期发放)',
          '10次',
          '20次',
        ],
        [
          '优惠卡券',
          '优惠券的使用规则,以具体优惠券页面展示为准',
          '(随活动不定期发放)',
          '10张',
          '20张',
        ],
      ],
    }
  },
  mounted() {},
  methods: {},
}
</script>
<style lang="scss" scoped>
.page {
  height: 100%;
  padding: 14px 20px;

  .my_vip {
    padding: 20px 24px 0px;
    background: #f7f7f7;
    border-radius: 2px;
    margin-bottom: 16px;

    .vip_con {
      display: flex;
      justify-content: space-between;
      align-items: center;
      color: #999999;
      font-size: 14px;

      .vip_type {
        display: inline-block;
        padding: 6px 11px;
        font-size: 14px;
        font-weight: 500;
        color: #ffffff;
        background: linear-gradient(131deg, #ffa940 0%, #ff6a13 100%);
        box-shadow: 0px 6px 10px 1px rgba(255, 147, 64, 0.35);
        border-radius: 2px;
        opacity: 1;
      }
    }

    .vip_list {
      display: flex;
      justify-content: space-between;
      flex-wrap: wrap;
      margin-top: 24px;

      .vip_list_item {
        width: 360px;
        margin-bottom: 24px;
        padding: 16px;
        background: #fff;
        border-radius: 2px;
        display: flex;
        justify-content: space-between;
        align-items: center;

        .item_con {
          display: flex;
          justify-content: space-between;
          align-items: center;
          color: #666;
          font-size: 14px;

          span {
            font-size: 32px;
            font-weight: bold;
            color: #333333;
          }
          .icon {
            width: 70px;
            height: 70px;
            text-align: center;
            line-height: 70px;
            background: #fff0de;
            border-radius: 50%;
            margin-right: 24px;

            .iconfont {
              font-size: 33px !important;
            }
          }
        }
      }
    }
  }
}

.mar16 {
  margin-right: 16px;
}
.vip_info {
  margin-bottom: 20px;
  .vip_info_list {
    display: flex;
    min-height: 56px;
    line-height: 56px;

    > div {
      margin: 0 -1px -1px 0;
      border: 1px solid #ebeef5;
      flex: 1;
      padding: 0px 13px;
    }

    > div:nth-child(1) {
      max-width: 120px;
      width: 120px;
      text-align: center;
      background-color: #f5f4f4;
    }
  }

  .vip_info_list:nth-child(1) {
    line-height: 42px;
    min-height: 42px;
    background-color: #f5f4f4;
  }
}

.cell_title {
  border: 1px solid red;
}

::v-deep .el-table {
  border: none;

  .el-table__row {
    border: 1px solid red;
  }

  th {
    background-color: #f5f4f4;
    height: 44px;
  }

  td.el-table__cell {
    height: 58px;
  }

  .el-table__body tr:hover > td {
    background: #fff !important;
  }

  .el-table__body tr:hover > td:nth-child(1) {
    background: #f5f4f4 !important;
  }

  td.el-table__cell,
  th.el-table__cell.is-leaf {
    border-right: 1px solid #ebeef5 !important;
    border-bottom: 1px solid #ebeef5 !important;
  }

  td.el-table__cell:nth-child(1) {
    background: #f5f4f4;

    .cell {
      text-align: center;
    }
  }

  td.el-table__cell:last-child,
  th.el-table__cell.is-leaf:last-child {
    border-right: none !important;
  }
}
</style>

页面:
在这里插入图片描述

实际业务

左侧表头内容固定,头部有部分固定部分更具后台返回数据显示
在这里插入图片描述
接口数据结构
在这里插入图片描述
这里我选择了使用表格布局,处理表格的数据

<template>
  <div class="page">
    <!-- 我的会员 -->
    <div class="my_vip">
      <div class="vip_con">
        <div class="vip_type">
          {{ info.benefitPackageName || '普通会员' }}
        </div>
        <div>
          <el-button class="hcd_button_default mar16" type="primary">{{
            info.benefitPackageName ? '续费' : '办理会员'
          }}</el-button>
          <span v-if="info.benefitPackageName">{{
            info.endTime.slice(0, 11)
          }}</span>
        </div>
      </div>
      <div class="vip_list">
        <div class="vip_list_item">
          <div class="item_con">
            <div class="icon">
              <i
                slot="reference"
                class="iconfont icon-huoyuanfabu hcd_main_font_color"
              ></i>
            </div>
            <div>
              <p>发布货源</p>
              <span>{{ info.source || 0 }}次</span>
            </div>
          </div>
          <div class="item_btn">
            <el-button class="hcd_button_default" type="primary"
              >追加</el-button
            >
          </div>
        </div>
        <div class="vip_list_item">
          <div class="item_con">
            <div class="icon">
              <i
                slot="reference"
                class="iconfont icon-weituopingtai hcd_main_font_color"
              ></i>
            </div>
            <div>
              <p>委托平台</p>
              <span>{{ info.platform || 0 }}次</span>
            </div>
          </div>
          <div class="item_btn">
            <el-button class="hcd_button_default" type="primary"
              >追加</el-button
            >
          </div>
        </div>
        <div class="vip_list_item">
          <div class="item_con">
            <div class="icon">
              <i
                slot="reference"
                class="iconfont icon-guijizhuizong hcd_main_font_color"
              ></i>
            </div>
            <div>
              <p>轨迹追踪</p>
              <span>{{ info.tracking || 0 }}次</span>
            </div>
          </div>
          <div class="item_btn">
            <el-button class="hcd_button_default" type="primary"
              >追加</el-button
            >
          </div>
        </div>
        <div class="vip_list_item">
          <div class="item_con">
            <div class="icon">
              <i
                slot="reference"
                class="iconfont icon-youhuikaquan hcd_main_font_color"
              ></i>
            </div>
            <div>
              <p>优惠卡券</p>
              <span>{{ info.coupon || 0 }}次</span>
            </div>
          </div>
        </div>
      </div>
    </div>
    <!-- 会员权益 -->
    <div>
      <el-table :data="tableData" border style="width: 100%">
        <el-table-column
          prop="title"
          label=""
          width="120"
          cell-class-name="cell_title"
        >
        </el-table-column>
        <el-table-column prop="explain" label="权益说明"></el-table-column>
        <el-table-column prop="" label="普通货主">
          <template>
            (随活动不定期发放)
          </template>
        </el-table-column>
        <el-table-column
          v-for="(item, i) in vipList"
          :key="i"
          :prop="item.prop"
          :label="item.label"
        >
          <template slot-scope="scope">
            <p>{{ scope.row[item.prop] || '(随活动不定期发放)' }}</p>
          </template>
        </el-table-column>
      </el-table>
    </div>
  </div>
</template>

<script>
import {
  GetAllInUsingBenefitPackageList,
  CreateBenefitPackage,
} from '@/apis/OwnerVip/VipList'
export default {
  name: 'MyVip',
  components: {},
  props: [],
  watch: {
    tableData: {
      handler() {},
      immediate: true,
    },
  },
  data() {
    return {
      info: {
        benefitPackageName: '',
        endTime: '',
        platform: 0, // 委托平台
        tracking: 0, // 轨迹追踪
        source: 0, // 发布货源
        coupon: 0, // 优惠卡券
      },
      tableData: [
        {
          title: '委托平台',
          explain: '货源发布模式为委托平台,成功发布货源即消耗一次',
        },
        {
          title: '轨迹追踪',
          explain: '货主可使用货物追踪权益成功查看一笔运单运输轨迹',
        },
        {
          title: '发布货源',
          explain: '货主在线成功发货一次',
        },

        {
          title: '优惠卡券',
          explain: '优惠券的使用规则,以具体优惠券页面展示为准',
        },
      ],
      vipList: [],
    }
  },
  mounted() {
    this.getInfo()
    this.getAllInUsingList()
  },
  methods: {
    // 我的会员详情信息
    getInfo() {
      CreateBenefitPackage({}).then(res => {
        console.log('我的会员详情信息', res.result)
        if (res.success) {
          this.info = res.result
          res.result.detailList.forEach(item => {
            switch (data.benefitType) {
              case 0:
                this.info.platform = item.times
                break
              case 1:
                this.info.tracking = item.times
                break
              case 2:
                this.info.source = item.times
                break
              case 3:
                this.info.coupon = item.times
                break
            }
          })
        } else {
          if (res.message) {
            this.$message.error(res.message)
          }
        }
      })
    },

    // 获取所有上架的权益套餐列表
    getAllInUsingList() {
      GetAllInUsingBenefitPackageList({}).then(res => {
        // console.log('权益套餐列表', res.result)
        this.vipList = []
        if (res.success) {
          // 表头显示的权益套餐数据
          res.result.forEach((item, i) => {
            this.vipList.push({
              label: item.benefitPackageName,
              prop: 'vip' + i, // 套餐名称(用于列表显示内容)
              detailList: item.detailList, // 当前套餐所包含的权益数据
            })
          })
          this.vipList.forEach(equity => {
            // 处理每个套餐中的权益数据放到tableData中
            equity.detailList.forEach(data => {
              switch (data.benefitType) {
                case 0:
                  this.tableData[0][equity.prop] = data.times
                  break
                case 1:
                  this.tableData[1][equity.prop] = data.times
                  break
                case 2:
                  this.tableData[2][equity.prop] = data.times
                  break
                case 3:
                  this.tableData[3][equity.prop] = data.times
                  break
              }
            })
          })
        } else {
          if (res.message) {
            this.$message.error(res.message)
          }
        }
      })
    },
  },
}
</script>

页面
在这里插入图片描述

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

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

相关文章

突发!ChatGPT疯了!

‍数据智能产业创新服务媒体——聚焦数智 改变商业今天&#xff0c;笔者正常登录ChatGPT&#xff0c;试图调戏一下他。但是&#xff0c;突然震惊的发现&#xff0c;ChatGPT居然疯了。之所以说他是疯了&#xff0c;而不是崩溃了&#xff0c;是因为他还能回复我&#xff0c;但回…

【计算机网络】1、概念、TCP | UDP | 本地 socket 编程

文章目录一、网络基本概念1.1 端口&#xff08;port&#xff09;1.2 IP 地址 网络地址&#xff08;network&#xff09;和 主机&#xff08;host&#xff09;1.3 子网&#xff08;subnet&#xff09;1.4 子网掩码&#xff08;netmask&#xff09;1.5 保留网段1.6 CIDR 表述形式…

【计算机网络复习】第三章 传输层 3

拥塞 网络边缘主机发送到网络中的负载超出了网络的承载能力&#xff0c;即导致拥塞 u 网络拥塞的特征 时延增大 — 由于在路由器缓存中排队而导致 数据包丢失 — 由于路由器的缓存溢出而导致 u 随着网络负载的增加 传输时延增大 吞吐量下降 拥塞控制&#…

ptuning v2 的 chatglm垂直领域训练记录

thunlp chatglm 6B是一款基于海量高质量中英文语料训练的面向文本对话场景的语言模型。 THUDM/ChatGLM-6B: ChatGLM-6B&#xff1a;开源双语对话语言模型 | An Open Bilingual Dialogue Language Model (github.com) 国内的一位大佬把chatglm ptuning 的训练改成了多层多卡并…

Spring 事务

目录 一、事务简介 二、在Spring中实现事务 编程式事务 声明式事务 三、事务的传播机制 一、事务简介 事务&#xff1a;就是将一组操作封装成为一个整体执行单元&#xff0c;要么全部执行&#xff0c;要么都不执行。 假如事务执行了一半发生了错误就会对已经执行的部分进…

Linux嵌入式学习之Ubuntu入门(三)用户、用户组及文件权限

系列文章目录 一、Linux嵌入式学习之Ubuntu入门&#xff08;一&#xff09;基本命令、软件安装及文件结构 二、Linux嵌入式学习之Ubuntu入门&#xff08;二&#xff09;磁盘文件介绍及分区、格式化等 文章目录系列文章目录用户与用户组创建用户和用户组图形化创建命令创建文件…

【人工智能】— 逻辑Agent、一般逻辑、Entailment 蕴涵、命题逻辑、前向链接、反向链接、Resolution归结

【人工智能】— 逻辑Agent、逻辑智能体Knowledge bases一个简单的基于知识的智能体一般逻辑Entailment 蕴涵Models模型蕴涵与推理命题逻辑逻辑连接词枚举推理有效性可满足性推导和证明霍恩子句Forward chaining 前向链接Proof of completeness&#xff08;完备性&#xff09;Ba…

QT学习开发笔记(项目实战之智能家居物联网项目1 )

智能家居物联网项目 本章介绍使用 Qt 开发智能家居中的一个物联应用。简单直白的说就是通过云服务器远程控 制设备&#xff08;与设备通信等&#xff09;。本章可以直接做毕设&#xff0c;是毕设物联网项目的一大福音&#xff01;本章将实现远 程点亮开发板 LED 作为一个项目实…

springboot从2.1.3升级到2.3.5后控制台自动输出http请求日志RequestResponseBodyMethodProcessor

springboot从2.1.3升级到2.3.5后控制台自动输出http请求日志RequestResponseBodyMethodProcessor和RequestMappingHandlerMapping推荐使用第二个方案简单 明了 方便 快捷方案一第一步定义TurboFilter第二步配置logback方案二 直接配置logback的配置XML推荐使用第二个方案简单 明…

Insomnia 简单使用方法

文章目录1. 新建工程2. 新建若干文件夹3. 设置环境变量4. 授权以及进行请求的链式调用 (chaining requests)4. 1 解决办法 14. 2 解决办法 2Insomnia 同 Postman&#xff0c; 用于测试后端 endpoint&#xff0c;很容易使用。使用步骤如下&#xff1a;1. 新建工程 2. 新建若干文…

字节跳动软件测试面试过了,起薪20k

普通二本计算机专业毕业&#xff0c;从毕业后&#xff0c;第一份接触测试的工作是在一家通讯小公司&#xff0c;大部分接触的工作是以功能测试为主&#xff0c;一直都是几千块钱工资&#xff0c;还一度被派出差&#xff0c;以及兼职各种产品、运维、运营的活&#xff0c;感觉自…

四十五、docker之nginx手动部署前端项目

nginx的作用&#xff1a; 一、静态文件服务器和反向代理django服务 django框架中的静态文件服务只在开发调试时提供服务&#xff0c;当以生产模式运行时需要将静态文件部署到静态文件服务器上。 1. 收集django项目中的静态文件 在配置文件中配置STATIC_ROOT 我们在我的项目…

如何在低代码平台上构建ERP软件?

ERP软件是企业管理日常运营需求的关键组件。然而&#xff0c;对于许多企业&#xff0c;尤其是资源有限的企业来说&#xff0c;尝试构建和管理ERP平台可能要担负较高的成本的。幸运的是&#xff0c;低代码平台可以使这个过程变得容易得多。今天我们来解释如何在低代码平台上构建…

细粒度软件缺陷预测模型构建方法

在软件缺陷预测领域&#xff0c;粒度指的是缺陷库中每条样本的项目粒度.其中可以分为类粒度、文件粒度或者包粒度等。不同的开发语言有不同的层级的模块粒度&#xff0c;在软件缺陷预测领域&#xff0c;一般来说&#xff0c;在预测效果能够满足要求的情况下&#xff0c;粒度越小…

map容器(重要)

1、map容器简介 Map容器中所有的元素都会根据元素的键值自动实现排序。Map中所有的元素都是pair&#xff0c;pair的简介 同时拥有实值和键值&#xff0c;而前面的 set 只是拥有 键值&#xff0c;pair 中的 第一个元素是键值&#xff0c;而第二个值是 实值。Map 中是不允许有两…

Maven的进阶操作

系列文章目录 Maven进阶操作的学习 文章目录系列文章目录前言一、分模块开发与设计二、依赖管理1.依赖传递2.可选依赖3.排除依赖三、继承与聚合1.聚合2.继承四、属性1.属性2.版本管理五、多环境配置与应用1.多环境开发2.跳过测试六、私服1.私服简介2.私服仓库分类3.资源上传与…

IDEA的基本使用

IDEA的基本使用IDEA的基本使用1 IDEA概述2 IDEA的下载和安装2.1 下载2.2 安装3 IDEA中层级结构介绍3.1 结构分类3.2 结构介绍project&#xff08;项目、工程&#xff09;module&#xff08;模块&#xff09;package&#xff08;包&#xff09;class&#xff08;类&#xff09;3…

C#基础学习--委托

委托 什么是委托 可以认为委托是持有一个或多个方法的对象。 委托和类一样&#xff0c;是一种用户自定义的类型。但类表示的是数据和方法的集合&#xff0c;而委托则持有一个或多个方法&#xff0c;以及一系列预定操作。 可以通过一下擦欧总来使用委托&#xff1a; 可以把d…

度量,我们如何以终为始,以始为终?

你好&#xff0c;我是黄俊彬。 很多时候在研发过程中&#xff0c;我们都习惯性地用“拍脑袋”的方式来看待一个事情。例如这个代码写得不好、这个自动化测试覆盖不充分、版本的发布频率太差了等等。往往只知道哪里有问题&#xff0c;但是却不知如何去找出根因&#xff0c;真正…

14、MyBatis-Plus入门到进阶

1、Mybatis的问题 【简介】&#xff1a; 每个实体类对应一个实体类,对应一个mapper接口,对应一个mapper.xml文件,每个mapper接口都有重复的crud方法,每一个mapper.xml都有重复的crud的sql配置。 2、Mybatis-plus简介 1、官网 Mybatis-plusMybatis-plus 2、MyBatis是什么&a…