vue3项目 使用 element-plus 中 el-collapse 折叠面板

最近接触拉了一个项目,使用到 element-plus 中 el-collapse 折叠面板,发现在使用中利用高官网多多少少的会出现问题。
(1.直接默认一个展开值,发现时显时不显
2 . 数据渲染问题,接口请求了,页面数据不更新
3 样式问题,自定义表头title等等)
我们的数据结构是双数组,如果你和我一样直接copy, 如果是一个对象数组或者数组吧,只需把外层的数组转化即可
在这里插入图片描述

效果图 : 当点击 了查看按钮时,弹框出现,且默认展开第一个数据,且每次的展开或者收起都有对应的样式,可见下图左侧的图样,
我这里还用到了 el-steps ,最外层的 是自己写的样式,因为我一个页面中使用了两次el-steps ,发现样式会有干扰。所以我在最外层的el-steps是自己写的div标签。

注意 的是我们使用 官网说明的 const activeName = ref([]) 数组类型 ,且里面的值使用字符串类型。
当 弹框出现时,调用接口进行处理赋值 activeName,并转成 toString() 字符串,然后默认展开第一项activeName.value.push(index.toString())activeName.value = ['0']在进行处理每个item之间的高和选中样式。最后在处理点击@change 的事件// 处理在展开折叠状态const handleCollapseChange = (val: any) => {// console.log(val, 'val');PurchaseInfo.forEach((item:any, index:any)=>{if(val){if(val === index.toString()){item.flagActive = trueitem.height = myCollapseRef.value.$el.clientHeight + 20} else{item.flagActive = falseitem.height = 38}}else{item.flagActive = falseitem.height = 38}})// console.log(PurchaseInfo, 'PurchaseInfo')}

在这里插入图片描述
上代码了。

<ProcessViewDialogv-model:value="dialogFormVisible":projectDeviceId="projectDeviceId"
/>

自己 引入组件

<template><div><zmjDialogv-model="show"width="460"@opened="init"title="查看所有设备"center> <div style="display:flex; width: 460px"><div class="el-dialog-div"><div class="el-dialog_divleft"><div class=divleftlast v-for="(el, index) in PurchaseInfo" :key="index"><p :class="el.flagActive ? 'arrdata1Active' : 'arrdata1'"></p><p :style="{width: 2 + 'px', height: el.height + 'px', background: '#E8F0FF', borderRadius: '0px 0px 0px 0px', marginLeft: '8px'}"></p></div></div><el-collapseclass="el-collapse-parent"v-model="activeName"accordion@change="handleCollapseChange"ref="myCollapseRef"><el-collapse-itemv-for="(item, index) in PurchaseInfo":key="index":name="index.toString()"style="margin-bottom: 10px;"ref="itemHeight"><template #title><div :class="item.flagActive ? 'headerRightTrue' : 'headerRightFlase'"><span class="spanFalse"></span><div class="itemApproveTimeFalse">{{ item.approveTime }}</div><div class="top-right"><div> {{item.operatorName}} <span v-if="item?.nodeId"> ({{item?.nodeId == 120 ? '方案' : ( item?.nodeId == 130 ? '商务活动' : (item?.nodeId == 140 ? '配套' : '' ))}}) </span> </div><span :class="item.flagActive ? 'headerRightspan1' : 'headerRightspan2'">{{ activeName.includes(index.toString()) ? '收起' : '展开' }}</span></div></div></template><div class="contntDiv"><div class="contntDiv-1"><div class="contntDiv-1"><span class="contntDiv-1-span"> {{item.model}} </span><span class="contntDiv-2-span"> {{ item?.supportLabel === 1 ? '标准架型' : (item?.supportLabel === 3 ? '模块架型' : '非标架型')}} </span></div><div class="contntDiv-1-d"> {{ item?.deviceCount}}架 </div></div><div class="line"></div><div><div class="contntDiv-item-left"> 片区 </div><div class="contntDiv-item-right"> {{ item?.areaName }} </div></div><div><div class="contntDiv-item-left"> 支架类型 </div><div class="contntDiv-item-right"> {{ GET_SUPPORT_TYPE(item?.firstDeviceType) }} - {{ GET_SUPPORT_SECOND_TYPE_NAME(item?.secondDeviceType) }}</div></div><div><div class="contntDiv-item-left"> 图号 </div><div class="contntDiv-item-right"> {{item?.standardGroupNo }} </div></div><div><div class="contntDiv-item-left"> 单架重量 </div><div class="contntDiv-item-right"> {{ item?.singleWeight}}吨 </div></div> <div><div class="contntDiv-item-left"> 支架特征代号 </div><div class="contntDiv-item-right"> {{ joinSupportFeatureModel }} </div></div><div class="contntDiv-item-right-bottom" v-if="item?.supportFeatureModel && item?.supportFeatureModel?.length > 0">*支架产品型号{{ item?.supportProductModel}}</div></div><div class="box-approve" v-if="item?.flowApproveDtoList?.length>0"><el-steps direction="vertical" :active="1" align-center><el-step v-for="(v, i) in item?.flowApproveDtoList" class="my-text" :key="i"><template #icon><div class="titleDiv"><div class="time">{{ v.updateTime }}</div></div></template><template #title><div class="step-icon"></div></template><template #description><div class="descriptionDiv"><div style="color: #707070; font-size: 14px"><span class="" style="color: #3076fe">{{ v.approveUserName }}</span><!-- approveType  1 提交 2 审批 status 1 未审批 2  审批通过 3 驳回 --><span v-if="v.approveType == 1 && v.status == 2 && isLastElement(item?.flowApproveDtoList, i)" style="color: rgba(0, 0, 0, 0.56)"><span style="color: #262626">提交审批</span></span><span v-else><span v-if="v.approveType == 1 && v.status == 2" style="color: rgba(0, 0, 0, 0.56)"><span style="color: #262626">再次提交审批</span></span><span v-if="v.approveType == 1 && v.status == 3" style="color: rgba(0, 0, 0, 0.56)"><span style="color: #ffb236">审批驳回</span></span><span v-if="v.approveType == 2 && v.status == 2"><span style="color: #63af17">审批通过</span></span><span v-if="v.approveType == 2 && v.status == 3">将<span style="color: #ffb236">审批驳回</span></span></span></div><div v-if="(v.approveType == 1 || v.approveType == 2) && v.status == 3" class="reject-box"><div class="reject-item-1"><div>驳回原因</div><div>{{ v.rejectReason }}</div></div></div></div></template></el-step></el-steps></div></el-collapse-item></el-collapse></div></div><template #footer><div class="dialog-footer"><el-button @click="show = false">返回</el-button></div></template></zmjDialog></div>
</template><script setup lang="ts">
import { recordLog } from '@/api/project/device' // 接口替换为完成
import { GET_SUPPORT_TYPE, GET_SUPPORT_SECOND_TYPE_NAME } from './config'
const props = defineProps({dialogFormVisible: Boolean,value: Boolean,projectDeviceId: { type: Number, default: null }, // 业务id
})
// const activeName = ref()
const activeName = ref([])
const emit = defineEmits(['update:value', 'exit'])
// 添加页面弹出标识
let show = computed({get() {return props.value},set(val: any) {emit('update:value', val)}
})
let PurchaseInfo:any = reactive([])
let joinSupportFeatureModel:any = ref('')// 判断数组的最后一个
const isLastElement = (array:any, index:any) => {return index === array.length - 1
}const init = async () => {try {const res: any = await recordLog({ deviceId: props.projectDeviceId })PurchaseInfo = res.datalet arr:any = []activeName.value = []PurchaseInfo.forEach((item:any, index:any)=>{activeName.value.push(index.toString())activeName.value = ['0']if(index.toString() === activeName.value[0]){item.height = myCollapseRef.value.$el.clientHeight + 20item.flagActive = true}else{item.height = 38item.flagActive = false}item?.supportFeatureModel?.map((v:any)=>{if(v==='A1'){arr.push('A类支架')} else if(v ==='Q'){arr.push('大倾角')}else if(v ==='D'){arr.push('电液控')}else if(v ==='A'){arr.push('大侧帮支架左架')}else if(v ==='B'){arr.push('大侧帮支架右架')}else{arr = []}})})// console.log(PurchaseInfo, 'PurchaseInfo-loading---',)joinSupportFeatureModel.value = arr.join('、')} catch (err) {console.log(err.message)}
}let myCollapseRef = ref()
const itemHeight = ref(null)
// 监听折叠状态
const handleCollapseChange = (val: any) => {// console.log(val, 'val');PurchaseInfo.forEach((item:any, index:any)=>{if(val){if(val === index.toString()){item.flagActive = trueitem.height = myCollapseRef.value.$el.clientHeight + 20} else{item.flagActive = falseitem.height = 38}}else{item.flagActive = falseitem.height = 38}})// console.log(PurchaseInfo, 'PurchaseInfo')
}
</script><style lang="scss" scoped>
.el-dialog_divleft{width: 10px;// margin-left: 10px;margin-top:28px;display: flex;flex-wrap: wrap;height: 38px;
}
/* 选择最后一个div中的第二个p标签,并应用样式 */
.divleftlast:last-child p:last-child {display: none;
}
.arrdata1{width: 8px;height: 8px;border-radius: 50%;border: 1px solid #3076fe;// margin-top: 15px;margin-left: 5px;
}
.arrdata1Active{width: 8px;height: 8px;border-radius: 50%;border: 1px solid #3076fe;// margin-top: 15px;margin-left: 5px;background: #3076fe;
}
.el-dialog-div {// width: 395px;width: 100%;margin-left: 20px; // 20pxheight: 50vh;overflow-x: hidden;display: flex;
}.page-content {padding: 24px 44px;.device-group {&:not(:first-child) {margin-top: 12px;}}:deep(.el-descriptions.zmj-descriptions) {.el-descriptions__header {margin-top: 12px;margin-bottom: 8px;.el-descriptions__title {font-weight: 400;}}.el-descriptions__cell {padding: 10px 12px;color: #262626;}.el-descriptions__label {padding: 10px 12px;background-color: #fafafa;color: #707070;}}
}
.page-empty {height: 100%;
}
.color-centent {overflow: hidden;white-space: nowrap;text-overflow: ellipsis;color: #3076fe;
}
/* 如果您想要在展开的el-collapse-item上添加特殊样式,可以使用深度选择器 */
.el-collapse {:deep(.el-collapse-item__content) {border: 1px solid #3076FE;padding-bottom: 0px; /* 根据需要调整padding值 */width: 384px;}
}.el-collapse-parent{margin-top: 10px;border: none;width:395px;margin-left: 10px;:deep(.el-collapse-item__header){background: #3076FE;border-radius: 4px 4px 0px 0px;width: 384px;height: 39px}
}
:deep(.el-collapse-item__arrow){display:none;
}
.headerRightTrue{width: 395px;height: 38px;background: #3076FE;border-radius: 4px 4px 0px 0px;display: flex;justify-content: space-between;padding: 10px;color:#fff;font-size: 14px;line-height: 20px;top: -20px;.top-right{width: 160px;display: flex;// justify-content: space-around;justify-content: space-between;font-size: 12px;.headerRightspan1{color:#fff;}}
}
.spanFalse{width: 4px;height: 12px;background: #3076FE;border-radius: 0px 0px 0px 0px;margin-top: 4px;}.itemApproveTimeFalse{margin-left: -55px;}
.headerRightFlase{background: #F3F8FF;width: 395px;height: 38px;border-radius: 4px 4px 0px 0px;display: flex;justify-content: space-between;padding: 10px;color: #666666;font-size: 14px;line-height: 20px;top: -20px;border: 1px solid #3076FE;.top-right{width: 160px;display: flex;// justify-content: space-around;justify-content: space-between;font-size: 12px;.headerRightspan2{color: #3076FE}}
}
.contntDiv{width: 355px;height: 200px;background: #F3F8FF;border-radius: 4px 4px 4px 4px;border: 1px solid #EEEEEE;padding: 10px;// margin: 14px;margin: 8px 14px;>div{display: flex;justify-content: space-between;margin-top: 5px;}.contntDiv-1-span{width: 116px;height: 20px;font-size: 14px;color: #262626;line-height: 0px;text-align: left;}.contntDiv-2-span{font-size: 10px;color: #1890FF;text-align: center;height: 16px;background: #E3F2FF;border-radius: 2px 2px 2px 2px;margin-left: 14px;}.contntDiv-1-d{height: 17px;font-size: 12px;color: #A3A3A3;}.line{background: #F3F8FF;border: 1px dotted #A3A3A3;}.contntDiv-item-left{// width: 100px;height: 18px;font-size: 13px;color: #A3A3A3;}.contntDiv-item-right{// width: 112px;height: 18px;font-size: 13px;color: #262626;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;}.contntDiv-item-right-bottom{height: 18px; font-size: 13px;color: #262626;text-align: left;display: flex;justify-content: flex-end;}
}.box-approve {min-height: 130px;max-height: calc(100% - 82px);overflow: auto;margin-top: -5px;
}
.step-icon {width: 8px;height: 8px;border-radius: 50%;background: #A3A3A3;border: 1px solid #A3A3A3;margin-left: 50px;// margin-top: 0px;
}
.titleDiv{display: flex;width: 155px;.time {color: #c2c2c2;font-size: 12px;margin-left: 90px;width: 100px;}
}:deep(.el-steps) {height: 100%;
}
:deep(.el-step__line){background: #E8F0FF;border: 1px dotted #A3A3A3;margin-left: 87px;margin-top: 20px;height: calc(100% - 20px);
}
:deep(.el-step__main) {padding: 8px 8px 9px;// background-color: #f1f6ff;min-height: 58px;box-sizing: border-box;margin-bottom: 12px;.el-step__description {font-size: 14px;}
}
:deep(.el-step__title){margin-left: 11px;color: #e0e0e0;
}
// :deep(.el-step__head){
//   // margin-left:110px;
// }
.reject-box {font-size: 12px;color: #a3a3a3;.reject-item-1 {display: flex;& > div:nth-child(1) {flex-shrink: 0;}& > div:nth-child(2) {word-break: break-word;width: 100%;}}
}
.descriptionDiv{height: 100%;width: 264px;margin-left: 76px;margin-top: -20px;
}
</style>

完成,请指教
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

js 截取指定字符后面/前面的所有字符串...

项目场景 在 JavaScript 中&#xff0c;你可以使用 substring() 或 substr() 方法来截取字符串中指定字符前面或后面的所有字符。 再配合**indexOf()**方法来判断字符所在的位置从而实现截取指定字符的前后字符串 解决方案&#xff1a; //js 截取指定字符后面/前面的所有字…

类激活映射详解

类激活映射&#xff08;CAM, Class Activation Mapping&#xff09;是一种常用于卷积神经网络&#xff08;CNN&#xff09;的技术&#xff0c;用来识别和解释模型在进行图像或时间序列分类任务时&#xff0c;哪些区域对最终分类决定起到了关键作用。下面&#xff0c;我将详细解…

大数据平台搭建2024(一)

一&#xff1a;基础配置 创建虚拟机并查出ip地址进行连接 ip a1.配置node01静态ip地址与主机名 vi /etc/sysconfig/network-scripts/ifcfg-ens33修改或添加如下内容&#xff1a; BOOTPROTO"static" ONBOOTyes #根据虚拟机网卡信息配置 IPADDR192.168.200.141 NET…

360度VR全景汽车漫游展示让爱车者能感受真实的驾驶体验

小米汽车的惊艳亮相&#xff0c;让无数爱车族心潮澎湃。然而&#xff0c;对于因时间和地理限制无法亲临现场的人来说&#xff0c;这份激动或许带有些许遗憾。如今&#xff0c;有了3D虚拟看车软件&#xff0c;这一切不再是问题。 web3D开发公司深圳华锐视点通过运用尖端的web3D开…

IntelliJ IDEA2024 安装包(亲测可用)

目录 一、软件简介 二、软件下载 一、软件简介 IDEA&#xff08;Integrated Development Environment for Apache&#xff09; 是一款专为 Apache 开发者设计的集成开发环境。该软件提供了丰富的功能和工具&#xff0c;帮助开发者更高效地创建、调试和部署 Apache 项目。 主…

hot100 -- 链表(中)

不要觉得力扣核心代码模式麻烦&#xff0c;它确实比不上ACM模式舒服&#xff0c;可以自己处理输入输出 只是你对 链表 和 return 的理解不到位 &#x1f442; ▶ 屿前世 (163.com) &#x1f442; ▶ see you tomorrow (163.com) 目录 &#x1f382;两数相加 &#x1f6a9;删…

python 绘制六种激活函数(sigmoid、tanh、relu、softmax、relu、elu)

1、效果 2、实现代码&#xff08;带注释&#xff09; import numpy as np # 导入 numpy 库, 用于数学运算 import matplotlib.pyplot as plt # 导入 matplotlib.pyplot, 用于绘图 import matplotlib as mpl # 导入 matplotlib 库, 用于图形配置plt.rcParams[font.sans-se…

mysql奇葩问题union

单独执行第一条&#xff0c;有三条结果&#xff1b; union之后&#xff0c;只有一条结果&#xff1b; union自动的把重复数据合并了&#xff1b;

使用Python生成100到算术题

需求描述&#xff1a;生成100道包含加法、减法、乘法、除法题目的数学题。 import random import pandas as pddef generate_math_questions(num_questions, question_types[addition, subtraction, multiplication, division], difficultyeasy, range_start1, range_end10):&…

Vue基础使用之V-Model绑定单选、复选、动态渲染选项的值

这里要说明一下&#xff0c;在v-model 绑定的值是id还是value是和<option>中的v-bind保持一致的&#xff0c;如第四个&#xff0c;如果是 <option :value"op[1]" 那v-model绑定的就是数组第二项的值2&#xff0c;4&#xff0c;6 如果是 <option :va…

《AI编程类工具之一——CodeArts Snap》

一.简介 CodeArts Snap是一款基于华为云研发的智能开发助手&#xff0c;它覆盖软件开发的全生命周期&#xff0c;提供端到端的智能支持。该工具的核心功能包括代码生成、研发知识问答、单元测试用例生成、代码解释、代码注释、代码翻译、代码调试以及代码检查等八大方面&#…

软件开发的20条原则

原则是工作的准则,代表了许多人从经验中总结出来的集体智慧 源自《软件开发的201个原则》 需求 需要明确 需求是什么?需求有具体文档记录吗?需求经过多方评审了吗?需求合理吗?需求投入产出比如何?原则46:避免再需求分析时进行系统设计 需求分析:定义系统/软件的黑盒行…

Arduino通过I2C驱动MT6701磁编码器并读取角度数据

Arduino通过I2C驱动MT6701磁编码器并读取角度数据 &#x1f4cd;相关篇《Arduino通过Wire库读取AS5600编码器数据》 ✨测试了使用STM32硬件I2C扫描其地址失败。使用软件I2C可以。 &#x1f4d1;MT6701&#xff08;基于差分霍尔的磁性角度传感器芯片&#xff09;芯片特性简介 &…

WPF中DataGrid主从数据(父子数据)展示

在wpf中可以使用DataGrid控件,进行主从数据展示,也称父子数据展示。下面展示纯原生控件编码实现功能(样式自己可以根据需求进行修改)。 效果如下: 点击图标,展开和收缩可以自由的切换,也可以自己重新写一个样式,比如+,-或者类似图标的样式,都是可以的。 1.首先创建一…

spispispi

SPI C.. & C.. logic是SPI的控制逻辑&#xff0c;芯片内部进行地址锁存、数据读写等操作&#xff0c;都是由控制逻辑自动完成。控制逻辑的左边是SPI的通信引脚&#xff0c;这些引脚和主控芯片相连&#xff0c;主控芯片通过SPI协议&#xff0c;把指令和数据发送给控制逻辑&a…

多线程传参以及线程的优缺点

进程是资源分配的基本单位 线程是调度的基本单位 笼统来说&#xff0c;线程有以下优点&#xff1a; 创建一个新线程的代价要比创建一个新进程小得多 与进程之间的切换相比&#xff0c;线程之间的切换需要操作系统做的工作要少很多 线程占用的资源要比进程少很多 能充分利用多…

leetcode1448.统计二叉树中的好节点数目

1. 题目描述 题目链接 2. 解题思路 首先看一下题目的“核心”&#xff0c;什么是好节点&#xff1a;从根到该节点 X 所经过的节点中&#xff0c;没有任何节点的值大于 X 的值。也就是说&#xff0c;我们只要知道了从根节点到该节点的所有的值&#xff0c;就可以判断该节点是…

Blender3.0 下载地址及安装教程

Blender是一款开源的3D计算机图形软件&#xff0c;广泛应用于动画制作、游戏开发、建模、渲染等领域。它提供了一套强大的工具和功能&#xff0c;让用户能够进行三维建模、动画制作和视觉效果的创作。 Blender支持多种文件格式的导入和导出&#xff0c;使用户能够与其他软件进…

《AI编程类工具之二——ModelArts》

一.简介 ModelArts是华为云推出的面向AI开发者的一站式开发平台。它旨在为用户提供从数据处理、算法开发、模型训练到模型部署的全流程解决方案。 二.功能介绍 自动化超参调整和模型评估&#xff1a;ModelArts提供了自动化的超参调整功能&#xff0c;能够根据设定的参数范围…

中国建筑模板出口供应商

随着"一带一路"倡议的深入推进,中国基建企业"走出去"的步伐正在加快。与之相应,建筑模板产品作为工程建设的重要材料,其国际化供应也愈发受到重视。在众多建筑模板生产企业中,贵港市能强优品木业有限公司以其卓越的产品质量和丰富的出口经验,成为了国内知名…