ant-design-vue表格嵌套子表格,实现子表格有数据才显示左侧加号图标

ant-design-vue表格嵌套子表格,实现子表格有数据才显示左侧加号图标

在这里插入图片描述
通过使用插槽的方式,以下为全部项目的代码,关键的代码就两块,看注释

<template>
    <a-card>
      <a-form class="kit_form" ref="formRef" name="custom-validation" :model="searchParams">
      <a-row>
        <!-- <a-col :md="8" :lg="6">
          <a-form-item label="规则名称" name="ruleName" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }">
            <a-input v-model:value="searchParams.ruleName" placeholder="请输入规则名称" allowClear />
          </a-form-item>
        </a-col> -->
        <a-col :md="8" :lg="6">
          <a-form-item label="下单时间" name="dataArr" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }">
            <a-range-picker v-model:value="searchParams.dataArr" @change="fn.changeDate" allowClear format="YYYY-MM-DD" valueFormat="YYYY-MM-DD"/>
          </a-form-item>
        </a-col>
        <a-col :md="8" :lg="6">
          <a-button type="primary" @click="fn.search" style="margin: 0 10px">
            <search-outlined />
            查询
          </a-button>
          <a-button @click="fn.reset">
            <reload-outlined />
            重置
          </a-button>
        
        </a-col>
      </a-row>
      <a-button type="primary" preIcon="ant-design:export-outlined" @click="handleExportXls('财务对账单', exportXls, searchParams)"> 导出</a-button>
    </a-form>


    <a-table :columns="ob.columns" :loading="loading" :data-source="ob.list" class="components-table-demo-nested"  
    :pagination="ob.pagination" :expandedRowKeys="expandedRowKeys"  
     @change="fn.paginationChange">
   
    <!-- 方法1插槽-加号控制 -->
    <template #expandIcon="{ record }">
        <template v-if="record.lisOrderDetailList && record.lisOrderDetailList.length > 0">
            <button  :class="[
              'ant-table-row-expand-icon',
              !isExpand[record.key]
                ? 'ant-table-row-expand-icon-collapsed'
                : 'ant-table-row-expand-icon-expanded'
            ]"
            @click="fn.expandRow(record,record.key)"></button>
        </template>
        <template v-else>
            <span></span>
        </template>
    </template>


      <template #operation>
        <a>Publish</a>
      </template>

      <template #expandedRowRender>
        <a-table :columns="ob.innerColumns" :data-source="ob.innerlist" :pagination="false">
          <template #status>
            <span>
              <a-badge status="success" />
              Finished
            </span>
          </template>
          <template #operation>
            <span class="table-operation">
              <a>Pause</a>
              <a>Stop</a>
              <a-dropdown>
                <template #overlay>
                  <a-menu>
                    <a-menu-item>Action 1</a-menu-item>
                    <a-menu-item>Action 2</a-menu-item>
                  </a-menu>
                </template>
                <a>More</a>
              </a-dropdown>
            </span>
          </template>
        </a-table>
      </template>

    </a-table>
</a-card>
  </template>
  <script lang="ts" setup>
  import { defineComponent,ref, unref, reactive, toRaw, watch, computed,onMounted} from 'vue';
  import { distributionOrdersList,exportXls,queryLisOrder } from './financialStatement.api';//引入列表接口
  import { filterObj } from '/@/utils/common/compUtils';
  import { useMethods } from '/@/hooks/system/useMethods';
  import { formatDate } from '/@/utils_k/date';
  const { handleExportXls, handleImportXls } = useMethods();
  let expandedRowKeys = ref([])
  let isExpand = reactive({})
  let loading = ref(false)
  let formRef = ref();
  let searchParams: any = reactive({
        dataArr: null,
        beginDate: '',
        endDate: '',
        });
  let ob = reactive({
    pagination: {
      pageSize: 10,
      current: 1,
      total: 0,
      pageSizeOptions: ['10', '20', '50'],
      showSizeChanger: true,
      showTotal: () => {
        return `${ob.pagination.total}`
      },
    },
    list: [],
    innerlist: [],
    columns: [//主表头
    { title: '小程序订单号', dataIndex: 'orderId', key: 'orderId' },

    { title: '订单支付金额', dataIndex: 'price', key: 'price' },
    { title: '商品名称', dataIndex: 'productName', key: 'productName' },
    { title: '订单状态', dataIndex: 'orderStatus', key: 'orderStatus',
    // customRender:({text})=>{
    //     if(text == '1'){
    //       return '已采样'
    //     }else if(text == '0'){
    //       return '待采样'
    //     }else if(text == '2'){
    //       return '已完成'
    //     }else if(text == '3'){
    //       return '已取消'
    //     }else if(text == '4'){
    //       return '待付款'
    //     }else{
    //       return '支付失败'
    //     }
    //   }
    },
    { title: '下单时间', dataIndex: 'orderTime', key: 'orderTime' },
    { title: '微信支付单号', dataIndex: 'payOrderId', key: 'payOrderId' },
    { title: '支付时间', dataIndex: 'payTime', key: 'payTime' },
    { title: '电子发票单号', dataIndex: 'electronicInvoiceOrderNumber', key: 'electronicInvoiceOrderNumber' },
    { title: '开票时间', dataIndex: 'invoicingTime', key: 'invoicingTime' },
    { title: '微信退款单号', dataIndex: 'returnOrderId', key: 'returnOrderId' },
    // { title: 'Action', key: 'operation', slots: { customRender: 'operation' } },
  ],
  innerColumns:[//副表头
      { title: '关联LIS订单号', dataIndex: 'orderNo', key: 'orderNo' },
    { title: '受托机构', dataIndex: 'orgName', key: 'orgName' },
    { title: '条码号', dataIndex: 'barCode', key: 'barCode' },
    { title: '姓名', dataIndex: 'patientName', key: 'patientName' }, 
    { title: '性别', dataIndex: 'genderName', key: 'genderName' }, 
    { title: '申请项目', dataIndex: 'inspectGroupName', key: 'inspectGroupName' }, 
    { title: '申请时间', dataIndex: 'applyTime', key: 'applyTime' }, 
    { title: '专业组', dataIndex: 'disciplineName', key: 'disciplineName' }, 
    { title: '报告状态', dataIndex: 'reportStatusName', key: 'reportStatusName' }, 
    { title: '报告时间', dataIndex: 'reportTime', key: 'reportTime' }, 
    { title: '业务类型', dataIndex: 'applicationTypeName', key: 'applicationTypeName' }, 
  
    // { title: 'Status', key: 'state', slots: { customRender: 'status' } },
    // {
    //   title: 'Action',
    //   dataIndex: 'operation',
    //   key: 'operation',
    //   slots: { customRender: 'operation' },
    // },
  ]
  });

  
  let fn = {
    getList() {
        loading.value = true
        expandedRowKeys.value = []//复位
        Object.keys(isExpand).forEach((k) => { //复位
        isExpand[k] = false;  
      });  
        delete searchParams.dataArr;
        let params = {
            ...searchParams,
            pageNo: ob.pagination.current,
            pageSize: ob.pagination.pageSize,
        };
      distributionOrdersList(params).then((res) => {
        console.log('res', res);
        loading.value = false
        ob.list = res.records;
        ob.pagination.total = res.total;
      });
    },
    paginationChange(e) {
      console.log('1', e);
      ob.pagination.current = e.current;
      ob.pagination.pageSize = e.pageSize;
      fn.getList()
    },
  
    handleResizeColumn(w,col){
      col.width = w;
    },

    //原生监听收展
    // getInnerData(expanded, record:any) {
    //     expandedRowKeys.value = []
    //   if (expanded) { 
    //     console.log(record,8888)

    //     expandedRowKeys.value.push(Number(record.key))
    //     console.log(expandedRowKeys.value,66666)

    //     ob.innerlist = []
    //     ob.innerlist = record.lisOrderDetailList
    //   }
    // },


    // 方法1插槽-加号控制
    expandRow(record:any,key:any){
       // 将所有isExpand的值设为false  
      Object.keys(isExpand).forEach((k) => {  
        isExpand[k] = false;  
      });  
  
      console.log(key,111)
      console.log(isExpand,222)
  
      if (!expandedRowKeys.value.includes(key)) {
          expandedRowKeys.value = []
          expandedRowKeys.value.push(Number(key))
          ob.innerlist = record.lisOrderDetailList
          console.log('展开')
          isExpand[key] = true
      } else {
          const closedIndex = expandedRowKeys.value.indexOf(key);
          expandedRowKeys.value.splice(closedIndex, 1);//清除当前的,也就是清空了
          console.log('收起')
          isExpand[key] = false
      }

    },

search() {
    ob.pagination.current = 1;
    fn.getList();
  },
  reset() {
    formRef.value.resetFields();
    searchParams.dataArr = null;
    searchParams.beginDate ='';
        searchParams.endDate = '';
    fn.search();
  },

  changeDate(e) {
    if (e) {
        searchParams.beginDate = formatDate(e[0], 'Y-M-D') + ' 00:00:00';
        searchParams.endDate = formatDate(e[1], 'Y-M-D') + ' 23:59:59';
    }
    console.log('e', e);
  },

  };
  
  onMounted(() => {
    fn.getList()
  })
  
  
  </script>
  

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(已解决)vue+element-ui实现个人中心,仿照原神

差一个个人中心页面&#xff0c;看到了这个博主的个人中心&#xff0c;真的很不错 地址&#xff1a;vueelement仿原神实现好看的个人中心 最终效果&#xff1a;

15.1 项目实践_OA系统

15.1 项目实践_OA系统 1. 需求说明及环境准备1.1 需求说明1.2 环境准备1.3 开发模式_MVC架构模式2. 关键代码解析2.1 整合MyBatis1. 依赖2. 配置mybatis-config.xml3. Mybatis工具类2.2 RBAC2.3 用户登录1. 需求说明及环境准备 1.1 需求说明

RBAC的权限解决方案(思路)

RBAC全称&#xff1a;role based access control&#xff0c;基于角色的权限控制方案 核心思路&#xff1a;给角色分配功能权限&#xff0c;把角色分配给员工&#xff0c;那员工就自动拥有了角色下面的所有功能权限 菜单路由权限控制&#xff1a;不同角色的员工进入到系统中看到…

MySQL知识点总结(四)——MVCC

MySQL知识点总结&#xff08;四&#xff09;——MVCC 三个隐式字段row_idtrx_idroll_pointer undo logread viewMVCC与隔离级别的关系快照读和当前读 MVCC全称是Multi Version Concurrency Control&#xff0c;也就是多版本并发控制。它的作用是提高事务的并发度&#xff0c;通…

Axure 动态面板初使用 - 实现简单的Banner图轮播效果

实现简单的Banner图轮播效果 使用工具版本实现的效果步骤过程 使用工具版本 Axure 9 实现的效果 步骤过程 1、打开Axure工具&#xff0c;从元件库拖个动态面板到空白页&#xff1b; 2、给面板设置一个常用的banner尺寸&#xff0c;举个栗子&#xff1a;343151(移动端我常用…

SpringBoot:多环境配置

多环境配置demo代码&#xff1a;点击查看LearnSpringBoot02 点击查看更多的SpringBoot教程 方式一、多个properties文件配置 注意&#xff1a;创建properties文件,命名规则&#xff1a;application-&#xff08;环境名称&#xff09; 示例&#xff1a;application-dev.proper…

【CSS】什么是BFC?BFC有什么作用?

【CSS】什么是BFC&#xff1f;BFC有什么作用&#xff1f; 一、BFC概念二、触发BFC三、BFC特性即应用场景1、解决margin塌陷的问题2、避免外边距margin重叠&#xff08;margin合并&#xff09;3、清除浮动4、阻止元素被浮动元素覆盖 一、BFC概念 BFC(block formatting context)…

俏美韵实现多场景养身 树立健康养身新要义

近年来&#xff0c;“年轻”在现代社会被符号化与视觉化&#xff0c;老年化的肉身迹象出现让“不甘衰老”的青年们困扰不安。然而这代年轻人的养身模式堪称为矛盾的集合体&#xff0c;他们挣扎在放纵与自律之间。一方面&#xff0c;他们想尽办法来创造各式各样的身体“保养”方…

阿里集团基于 Fluid+JindoCache 加速大模型训练的实践

作者&#xff1a;王涛(扬礼) 陈裘凯(求索) 徐之浩(东伝) 一、背景 时间步入了 2024 年&#xff0c;新的技术趋势&#xff0c;如大模型/AIGC/多模态等技术&#xff0c;已经开始与实际业务相结合&#xff0c;并开始生产落地。这些新的技术趋势不仅提高了算力的需求&#xff0c;也…

23、数据结构/查找相关练习20240205

一、请编程实现哈希表的创建存储数组{12,24,234,234,23,234,23},输入key查找的值&#xff0c;实现查找功能。 代码&#xff1a; #include<stdlib.h> #include<string.h> #include<stdio.h> #include<math.h> typedef struct Node {int data;struct n…

VXLAN:虚拟化网络的强大引擎

1.什么是VXLAN VXLAN&#xff08;Virtual eXtensible Local Area Network&#xff0c;虚拟扩展局域网&#xff09;&#xff0c;是由IETF定义的NVO3&#xff08;Network Virtualization over Layer 3&#xff09;标准技术之一&#xff0c;是对传统VLAN协议的一种扩展。VXLAN的特…

mysql 多数据源

依赖 <dependencies><!--mysql连接--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!--多数据源--><dependency><g…

第3节、电机定速转动【51单片机+L298N步进电机系列教程】

↑↑↑点击上方【目录】&#xff0c;查看本系列全部文章 摘要&#xff1a;本节介绍用定时器定时的方式&#xff0c;精准控制脉冲时间&#xff0c;从而控制步进电机速度。 一、计算过程 电机每一步的角速度等于走这一步所花费的时间&#xff0c;走一步角度等于步距角&#xff…

Meta开源大模型LLaMA2的部署使用

LLaMA2的部署使用 LLaMA2申请下载下载模型启动运行Llama2模型文本补全任务实现聊天任务LLaMA2编程Web UI操作 LLaMA2 申请下载 访问meta ai申请模型下载&#xff0c;注意有地区限制&#xff0c;建议选其他国家 申请后会收到邮件&#xff0c;内含一个下载URL地址&#xff0c;…

电商开放API商品采集接口、关键字搜索接口,获取商品ID、商品主图接口

API是application programming interface&#xff08;应用程序接口&#xff09;的简称&#xff0c;是一些预先定义的函数&#xff0c;目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力&#xff0c;而又无需访问源码&#xff0c;或理解内部工作机制的细节。…

【敏捷开发】关于敏捷开发的几点思考,推荐一些高效书籍一起学

【敏捷开发】关于敏捷开发的几点思考&#xff0c;推荐一些高效书籍 一、背景二、敏捷宣言三、极限编程四、如何进行敏捷&#xff1f;4.1 改变软件研制方式4.2 组件高效团队4.3 改善研制流程4.4 持续集成与交付 五、Scrum过程六、书籍推荐 一、背景 软件开发的未来一定是多变的…

可解释性AI(XAI)的主要实现方法和研究方向

文章目录 每日一句正能量前言主要实现方法可解释模型模型可解释技术 未来研究方向后记 每日一句正能量 当你还不能对自己说今天学到了什么东西时&#xff0c;你就不要去睡觉。 前言 随着人工智能的迅速发展&#xff0c;越来越多的决策和任务交给了AI系统来完成。然而&#xff…

介绍docker

一&#xff1a;介绍docker&#xff1a; Docker 并没有单独的图形界面&#xff0c;它主要通过命令行来进行管理和操作 1、 docker ps&#xff1a;显示正在运行的容器。 docker images&#xff1a;显示本地的镜像。 docker run&#xff1a;创建并启动一个新容器。 docker stop&a…

探索LLM的意图识别能力

不可否认的是&#xff0c;LLM&#xff08;例如 OpenAI 的 GPT 系列&#xff09;将在不断发展的对话式 AI 领域发挥重要作用。 关于使用 ChatGPT 执行各种任务的帖子和文章不计其数。 GPT 有几个关键功能值得进一步探索&#xff0c;例如其摘要、分类和生成文本的能力。 其中&…

【软考设计师笔记】一篇文章带你了解数据库

【考证须知】IT行业高含金量的证书(传送门)&#x1f496; 【软件设计师笔记】计算机系统基础知识考点(传送门) &#x1f496; 【软件设计师笔记】程序语言设计考点(传送门) &#x1f496; 【软件设计师笔记】操作系统考点(传送门)&#x1f496; 【软件设计师笔记】什么是软…