直接上完整代码!记录实现方式

注意heatmap.min.js需要通过heatmap.js提供的下载地址进行下载,地址放在下边
url:heatmap GIT地址
实现效果1
实现效果2

<template><div class="heatmap-view" ref="heatmapContainer"></div>
</template><script lang="ts" setup>import { ref, onMounted } from 'vue';const heatmapContainer = ref<HTMLElement>();let heatmapInstance: any = null;let tooltipTimer: NodeJS.Timeout | null = null;// 固定的热力图数据 - 6行,每行17个点const fixedHeatmapData = [// 第1行数据{ x: 80, y: 80, value: 25 },{ x: 160, y: 80, value: 22 },{ x: 240, y: 80, value: 28 },{ x: 320, y: 80, value: 24 },{ x: 400, y: 80, value: 26 },{ x: 480, y: 80, value: 13 },{ x: 560, y: 80, value: 27 },{ x: 640, y: 80, value: 25 },{ x: 720, y: 80, value: 12 },{ x: 800, y: 80, value: 29 },{ x: 880, y: 80, value: 24 },{ x: 960, y: 80, value: 16 },{ x: 1040, y: 80, value: 23 },{ x: 1120, y: 80, value: 28 },{ x: 1200, y: 80, value: 15 },{ x: 1280, y: 80, value: 27 },{ x: 1360, y: 80, value: 24 },// 第2行数据{ x: 80, y: 200, value: 23 },{ x: 160, y: 200, value: 26 },{ x: 240, y: 200, value: 22 },{ x: 320, y: 200, value: 25 },{ x: 400, y: 200, value: 24 },{ x: 480, y: 200, value: 17 },{ x: 560, y: 200, value: 23 },{ x: 640, y: 200, value: 26 },{ x: 720, y: 200, value: 25 },{ x: 800, y: 200, value: 12 },{ x: 880, y: 200, value: 18 },{ x: 960, y: 200, value: 24 },{ x: 1040, y: 200, value: 26 },{ x: 1120, y: 200, value: 23 },{ x: 1200, y: 200, value: 17 },{ x: 1280, y: 200, value: 25 },{ x: 1360, y: 200, value: 24 },// 第3行数据{ x: 80, y: 320, value: 24 },{ x: 160, y: 320, value: 27 },{ x: 240, y: 320, value: 23 },{ x: 320, y: 320, value: 16 },{ x: 400, y: 320, value: 25 },{ x: 480, y: 320, value: 22 },{ x: 560, y: 320, value: 18 },{ x: 640, y: 320, value: 24 },{ x: 720, y: 320, value: 16 },{ x: 800, y: 320, value: 23 },{ x: 880, y: 320, value: 27 },{ x: 960, y: 320, value: 25 },{ x: 1040, y: 320, value: 24 },{ x: 1120, y: 320, value: 16 },{ x: 1200, y: 320, value: 23 },{ x: 1280, y: 320, value: 8 },{ x: 1360, y: 320, value: 25 },// 第4行数据{ x: 80, y: 440, value: 26 },{ x: 160, y: 440, value: 23 },{ x: 240, y: 440, value: 27 },{ x: 320, y: 440, value: 14 },{ x: 400, y: 440, value: 25 },{ x: 480, y: 440, value: 18 },{ x: 560, y: 440, value: 22 },{ x: 640, y: 440, value: 26 },{ x: 720, y: 440, value: 24 },{ x: 800, y: 440, value: 17 },{ x: 880, y: 440, value: 23 },{ x: 960, y: 440, value: 25 },{ x: 1040, y: 440, value: 16 },{ x: 1120, y: 440, value: 24 },{ x: 1200, y: 440, value: 18 },{ x: 1280, y: 440, value: 23 },{ x: 1360, y: 440, value: 26 },// 第5行数据{ x: 80, y: 560, value: 25 },{ x: 160, y: 560, value: 28 },{ x: 240, y: 560, value: 24 },{ x: 320, y: 560, value: 17 },{ x: 400, y: 560, value: 23 },{ x: 480, y: 560, value: 26 },{ x: 560, y: 560, value: 15 },{ x: 640, y: 560, value: 22 },{ x: 720, y: 560, value: 9 },{ x: 800, y: 560, value: 24 },{ x: 880, y: 560, value: 26 },{ x: 960, y: 560, value: 23 },{ x: 1040, y: 560, value: 17 },{ x: 1120, y: 560, value: 25 },{ x: 1200, y: 560, value: 24 },{ x: 1280, y: 560, value: 26 },{ x: 1360, y: 560, value: 18 },// 第6行数据{ x: 80, y: 680, value: 27 },{ x: 160, y: 680, value: 24 },{ x: 240, y: 680, value: 26 },{ x: 320, y: 680, value: 23 },{ x: 400, y: 680, value: 18 },{ x: 480, y: 680, value: 25 },{ x: 560, y: 680, value: 24 },{ x: 640, y: 680, value: 27 },{ x: 720, y: 680, value: 16 },{ x: 800, y: 680, value: 23 },{ x: 880, y: 680, value: 15 },{ x: 960, y: 680, value: 28 },{ x: 1040, y: 680, value: 24 },{ x: 1120, y: 680, value: 16 },{ x: 1200, y: 680, value: 25 },{ x: 1280, y: 680, value: 12 },{ x: 1360, y: 680, value: 14 },];// 生成密集的热力图数据,形成连片效果const generateHeatmapData = () => {const data: Array<{ x: number; y: number; value: number }> = [];// 为每个固定数据点生成多个数据点,形成连片效果fixedHeatmapData.forEach((fixedPoint, index) => {const baseValue = fixedPoint.value; // 使用固定值const pointsCount = 6; // 增加点数让分布更密集const spreadRadius = 120; // 减小扩散半径,让中心更突出// 首先添加中心点本身 - 确保中心点有最高值data.push({x: fixedPoint.x,y: fixedPoint.y,value: baseValue * 1.2, // 中心点值稍微提高,确保最亮});// 为中心点周围生成渐变填充点,让整体显示更自然for (let ring = 1; ring <= 3; ring++) {const ringRadius = (spreadRadius / 3) * ring;const ringPoints = ring * 4; // 每圈点数递增for (let i = 0; i < ringPoints; i++) {const angle = (i / ringPoints) * Math.PI * 2;const x = fixedPoint.x + Math.cos(angle) * ringRadius;const y = fixedPoint.y + Math.sin(angle) * ringRadius;// 确保点在容器范围内if (x >= 0 && x <= 1440 && y >= 0 && y <= 800) {// 根据距离中心的远近决定热力值 - 距离越远,热力值越低const distanceFromCenter = Math.sqrt(Math.pow(x - fixedPoint.x, 2) + Math.pow(y - fixedPoint.y, 2));const value = Math.max(1, baseValue * (1 - distanceFromCenter / spreadRadius) * 0.6);data.push({x: Math.floor(x),y: Math.floor(y),value: Math.floor(value),});}}}// 添加随机点增加自然感for (let i = 0; i < pointsCount; i++) {const angle = Math.random() * Math.PI * 2;const distance = Math.random() * spreadRadius;const x = fixedPoint.x + Math.cos(angle) * distance;const y = fixedPoint.y + Math.sin(angle) * distance;// 确保点在容器范围内if (x >= 0 && x <= 1440 && y >= 0 && y <= 800) {// 根据距离中心的远近决定热力值 - 距离越远,热力值越低const distanceFromCenter = Math.sqrt(Math.pow(x - fixedPoint.x, 2) + Math.pow(y - fixedPoint.y, 2));const value = Math.max(1, baseValue * (1 - distanceFromCenter / spreadRadius) * 0.4);data.push({x: Math.floor(x),y: Math.floor(y),value: Math.floor(value),});}}});// 添加连接点,让不同区域的热力图更好地融合for (let i = 0; i < fixedHeatmapData.length - 1; i++) {const currentPos = fixedHeatmapData[i];const nextPos = fixedHeatmapData[i + 1];// 在相邻位置之间添加一些连接点const midX = (currentPos.x + nextPos.x) / 2;const midY = (currentPos.y + nextPos.y) / 2;// const midValue = Math.floor((currentPos.value + nextPos.value) / 2); // 使用中间值for (let j = 0; j < 10; j++) {const angle = Math.random() * Math.PI * 2;const distance = Math.random() * 50; // 连接点范围const x = midX + Math.cos(angle) * distance;const y = midY + Math.sin(angle) * distance;if (x >= 0 && x <= 1440 && y >= 0 && y <= 800) {// 计算到两个相邻热力点的距离,取较小值const distToCurrent = Math.sqrt(Math.pow(x - currentPos.x, 2) + Math.pow(y - currentPos.y, 2));const distToNext = Math.sqrt(Math.pow(x - nextPos.x, 2) + Math.pow(y - nextPos.y, 2));const minDistance = Math.min(distToCurrent, distToNext);// 根据距离最近的热力点计算值,距离越远值越低const nearestValue = minDistance === distToCurrent ? currentPos.value : nextPos.value;const value = Math.max(1, nearestValue * (1 - minDistance / 120) * 0.5);data.push({x: Math.floor(x),y: Math.floor(y),value: Math.floor(value),});}}}return data;};// 添加热力点交互区域const addInteractiveAreas = () => {if (!heatmapContainer.value) return;// 为每个热力中心添加交互区域fixedHeatmapData.forEach((point, index) => {const interactiveArea = document.createElement('div');interactiveArea.style.position = 'absolute';interactiveArea.style.left = `${point.x - 20}px`; // 扩大交互区域interactiveArea.style.top = `${point.y - 20}px`;interactiveArea.style.width = '40px';interactiveArea.style.height = '40px';interactiveArea.style.borderRadius = '50%';interactiveArea.style.zIndex = '5';interactiveArea.style.cursor = 'pointer';interactiveArea.style.transition = 'all 0.3s ease';// 添加数据属性interactiveArea.setAttribute('data-index', index.toString());interactiveArea.setAttribute('data-value', point.value.toString());interactiveArea.setAttribute('data-x', point.x.toString());interactiveArea.setAttribute('data-y', point.y.toString());// 鼠标移入事件 - 添加延时interactiveArea.addEventListener('mouseenter', (e) => {// 清除之前的定时器if (tooltipTimer) {clearTimeout(tooltipTimer);tooltipTimer = null;}// 设置延时显示弹窗tooltipTimer = setTimeout(() => {showTooltip(e, point, index);}, 300); // 300ms延时});// 鼠标移出事件 - 立即隐藏interactiveArea.addEventListener('mouseleave', () => {// 清除定时器if (tooltipTimer) {clearTimeout(tooltipTimer);tooltipTimer = null;}hideTooltip();});heatmapContainer.value?.appendChild(interactiveArea);});};// 显示毛玻璃弹窗const showTooltip = (event: MouseEvent, point: any, index: number) => {// 移除已存在的弹窗hideTooltip();const tooltip = document.createElement('div');tooltip.id = 'heatmap-tooltip';tooltip.style.position = 'absolute';tooltip.style.zIndex = '1000';tooltip.style.pointerEvents = 'none';tooltip.style.transition = 'all 0.3s ease';tooltip.style.opacity = '0';tooltip.style.transform = 'translateY(10px)';// 毛玻璃效果tooltip.style.background = 'rgba(255, 255, 255, 0.15)';tooltip.style.backdropFilter = 'blur(10px)';tooltip.style.border = '1px solid rgba(255, 255, 255, 0.2)';tooltip.style.borderRadius = '12px';tooltip.style.padding = '12px 16px';tooltip.style.boxShadow = '0 8px 32px rgba(0, 0, 0, 0.1)';tooltip.style.minWidth = '120px';// 内容tooltip.innerHTML = `<div style="color: #333; font-size: 14px; font-weight: 600; margin-bottom: 4px;">点位 ${index + 1}</div><div style="color: #666; font-size: 12px; margin-bottom: 2px;">坐标: (${point.x}, ${point.y})</div><div style="color: #ff6b6b; font-size: 16px; font-weight: 700;">热力值: ${point.value}</div>`;if (heatmapContainer.value) {heatmapContainer.value.appendChild(tooltip);// 获取容器和弹窗尺寸const containerRect = heatmapContainer.value.getBoundingClientRect();const tooltipRect = tooltip.getBoundingClientRect();// 智能定位逻辑let left = point.x + 30;let top = point.y - 30;// 检查右边界if (left + tooltipRect.width > containerRect.width) {left = point.x - tooltipRect.width - 30; // 显示在左侧}// 检查左边界if (left < 0) {left = 10; // 贴左边}// 检查上边界if (top < 0) {top = point.y + 30; // 显示在下方}// 检查下边界if (top + tooltipRect.height > containerRect.height) {top = point.y - tooltipRect.height - 30; // 显示在上方}// 应用计算后的位置tooltip.style.left = `${left}px`;tooltip.style.top = `${top}px`;// 动画显示setTimeout(() => {tooltip.style.opacity = '1';tooltip.style.transform = 'translateY(0)';}, 10);}};// 隐藏弹窗const hideTooltip = () => {// 清除定时器if (tooltipTimer) {clearTimeout(tooltipTimer);tooltipTimer = null;}const existingTooltip = document.getElementById('heatmap-tooltip');if (existingTooltip) {existingTooltip.style.opacity = '0';existingTooltip.style.transform = 'translateY(10px)';setTimeout(() => {existingTooltip.remove();}, 300);}};// 初始化热力图const initHeatmap = () => {if (!heatmapContainer.value) return;console.log('开始初始化热力图...');// 动态加载本地的heatmap.min.jsconst script = document.createElement('script');script.src = '/src/utils/heatmap.min.js';script.onload = () => {console.log('heatmap.js 加载成功');// 创建热力图实例const h337 = (window as any).h337;if (!h337) {console.error('h337 未找到');return;}try {heatmapInstance = h337.create({container: heatmapContainer.value,radius: 18, // 增大半径,让热力扩散更广maxOpacity: 0.5, // 降低最大透明度,让整体颜色更淡minOpacity: 0,blur: 0.9, // 增加模糊度,让低值点更接近背景色gradient: {'0.0': 'rgba(75, 0, 130, 0.1)', // 蓝紫色 - 最冷,更淡'0.1': 'rgba(0, 0, 235, 0.2)', // 蓝紫色 - 稍微深一点'0.2': 'rgba(0, 0, 255, 0.3)', // 蓝色,更淡'0.3': 'rgba(0, 255, 255, 0.4)', // 青色,更淡'0.4': 'rgba(0, 255, 255, 0.5)', // 青色,更淡'0.5': 'rgba(0, 255, 0, 0.6)', // 绿色,更淡'0.6': 'rgba(0, 255, 0, 0.7)', // 绿色,更淡'0.7': 'rgba(255, 255, 0, 0.8)', // 黄色,更淡'0.8': 'rgba(255, 255, 0, 0.9)', // 黄色,更淡'0.9': 'rgba(255, 140, 0, 0.9)', // 橙色,更淡'1.0': 'rgba(255, 69, 0, 1)', // 橙红色 - 最热,稍微淡一点},});console.log('热力图实例创建成功');// 设置数据const data = generateHeatmapData();console.log('生成数据点数量:', data.length);// 找到最大热力值,确保中心点最亮const maxValue = Math.max(...data.map((d) => d.value));console.log('最大热力值:', maxValue);heatmapInstance.setData({max: maxValue, // 使用实际的最大值作为基准data: data,});console.log('热力图数据设置完成');// 添加交互区域addInteractiveAreas();} catch (error) {console.error('创建热力图时出错:', error);}};script.onerror = () => {console.error('heatmap.js 加载失败');};document.head.appendChild(script);};onMounted(() => {// 延迟一下确保DOM完全渲染setTimeout(() => {console.log('容器元素:', heatmapContainer.value);initHeatmap();}, 100);});
</script><style lang="less" scoped>.heatmap-view {margin: 30px auto;width: 1440px;height: 800px;border: 1px solid lightgray;position: relative;background-color: #e0eaf9;overflow: hidden;}/* 毛玻璃弹窗样式 */#heatmap-tooltip {font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;backdrop-filter: blur(10px);-webkit-backdrop-filter: blur(10px);}/* 交互区域悬停效果 */.heatmap-view div[data-index] {transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);}.heatmap-view div[data-index]:hover {background-color: rgba(255, 255, 255, 0.1);transform: scale(1.1);}
</style>

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

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

相关文章

配置Kronos:k线金融大模型

github地址 网页btc预测demo使用的Kronos-mini模型 huggingface的仓库 文章目录配置环境安装python环境获取市场数据的库通过webui使用example中的例子prediction_example.py补充说明根据原例优化的代码CryptoDataFetcher单币对多周期预测配置环境 使用conda的环境. 首先进行换…

【Deep Learning】Ubuntu配置深度学习环境

【start: 250715】 文章目录ubuntu与深度学习安装cuda查看显卡信息&#xff08;nvidia-smi&#xff09;升级驱动下载cuda安装conda安装anaconda默认指向自己的conda初始化conda确认 conda.sh 被加载安装cuda-toolkit直接安装cuda-toolkit&#xff08;高级的&#xff09;安装高于…

车载数据采集(DAQ)解析

<摘要> 车载数据采集&#xff08;DAQ&#xff09;软件模块是现代汽车电子系统的核心组件&#xff0c;负责实时采集、处理、记录和传输车辆运行数据。本文系统解析了DAQ模块的开发&#xff0c;涵盖其随着汽车智能化演进的历史背景&#xff0c;深入阐释了信号、协议、缓存等…

强化学习框架Verl运行在单块Tesla P40 GPU配置策略及避坑指南

1.前言 由于比较穷,身边只有1块10年前的Tesla P40 GPU卡(2016年9月发布),想利用起来学习强化学习框架Verl。程序员学习开源代码,大部分人的第一直觉不是分析模块组成,而是跑起来试试,然后去debug一下后面的运行逻辑。 由于在官方部署指导文档中并未指明跑通Verl的最低…

leetcode169.多数元素

题目描述给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。题目解法博耶-摩尔多数投票算法&#xff08;英语&#xff1a;Boyer–Moore…

基于机器学习的P2P网贷平台信用违约预测模型

使用平台提供的借款人信息&#xff08;年龄、收入、历史信用等&#xff09;和借款信息&#xff0c;构建一个二分类模型来预测借款人是否会违约。重点解决类别不平衡问题和模型可解释性。逻辑回归、随机森林、XGBoost、SMOTE过采样、模型评估&#xff08;AUC, KS, F1-Score&…

豆瓣网影视数据分析与应用

源码链接&#xff1a;点击下载源码 相关文档&#xff1a;点击下载相关文档 摘 要 随着互联网的快速发展&#xff0c;豆瓣网作为一个综合性的影视评分和评论平台&#xff0c;积累了大量的用户数据&#xff0c;这些数据为影视分析提供了丰富的素材。借助Hadoop这一大数据处理框…

四、计算机网络与分布式系统(中)

一、局域网与广域网1、局域网&#xff08;1&#xff09;定义将有限地理范围内的多台计算机通过传输媒体连接&#xff0c;借助网络软件实现设备间通信与资源共享的通信网络&#xff08;2&#xff09;特点1.地理范围小&#xff1a;通常为数百米至数公里内。2.传输速率高&#xff…

Python 面向对象实战:私有属性与公有属性的最佳实践——用线段类举例

描述 在绘图软件、GIS、CAD 或简单的图形编辑器中&#xff0c;线段&#xff08;Segment&#xff09;是非常基础的对象。每个线段有两个端点&#xff08;x1,y1&#xff09;和&#xff08;x2,y2&#xff09;。在实现时我们通常希望&#xff1a; 封装端点数据&#xff08;防止外部…

流式细胞术样本处理全攻略(一):组织、血液、体液制备方法详解

摘要 流式细胞术作为多参数、高通量的细胞分析技术,在细胞表型鉴定、免疫反应研究、疾病机制探索及药物效果评估中发挥关键作用。而样本制备是流式实验成功的核心前提,需将不同来源样本处理为单颗粒悬液,并最大程度减少细胞死亡与碎片干扰。本文针对组织、外周血 / 骨髓、体…

【C#】理解.NET内存机制:堆、栈与装箱拆箱的底层逻辑及优化技巧

文章目录前言一、栈与堆1.1 栈&#xff08;Stack&#xff09;1.1.1 基本信息1.1.2 特点1.2 堆&#xff08;Heap&#xff09;1.2.1 基本信息1.2.2 特点1.3 从代码中窥见堆栈二、装箱与拆箱2.1 装箱2.2 拆箱2.3 如何避免不必要的装箱与拆箱2.3.1 泛型集合2.3.2 泛型参数总结前言 …

人工智能学习:Transformer结构中的子层连接(Sublayer Connection)

Transformer结构中的子层连接(Sublayer Connection) 一、子层连接介绍 概念 子层连接(Sublayer Connection),也称为残差连接(Residual Connection),是Transformer模型中的一个关键设计,用于将多个子层(如自注意力层和前馈全连接层)组合在一起。它通过残差连…

解锁Roo Code的强大功能:深入理解上下文提及(Context Mentions)

在AI使用中&#xff0c;我们经常需要AI或AI工具描述代码中的某个具体部分。但如果工具能直接“看到”所指的代码、错误信息甚至终端输出&#xff0c;协作效率会不会大幅提升&#xff1f;这正是 Roo Code 的“上下文提及&#xff08;Context Mentions&#xff09;”功能所要实现…

第5篇、 Kafka 数据可靠性与容错机制

在分布式消息队列系统中&#xff0c;数据可靠性 与 容错能力 是核心指标。Kafka 作为高吞吐、可扩展的流式处理平台&#xff0c;依靠副本复制、Leader 选举和 ISR 机制&#xff0c;保证了在节点故障时消息依然能够可靠传输与消费。 &#x1f4da; 目录 理论基础 一、数据复制…

Excel表格如何制作?【图文详解】表格Excel制作教程?电脑Excel表格制作?

一、问题背景 在日常办公中&#xff0c;无论是统计数据、整理报表&#xff0c;还是记录信息&#xff0c;Excel表格都是必不可少的工具。 但对新手来说&#xff0c;打开Excel后面对空白的单元格&#xff0c;常常不知道从何下手——不知道怎么选表格范围、怎么加边框让表格显形、…

阿里兵临城下,美团迎来至暗时刻?

9月10日&#xff0c;赶在阿里巴巴成立26周年之际&#xff0c;高德地图推出了首个基于用户行为产生的榜单“高德扫街榜”&#xff0c;被定义为“阿里生活服务超级新入口”&#xff0c;试图重新构建一套线下服务的信用体系。 上线第二天&#xff0c;就有媒体报道称“使用高德扫街…

Android逆向学习(十一) IDA动态调试Android so文件

Android逆向学习&#xff08;十一&#xff09; IDA动态调试Android so文件 一、 写在前面 这是吾爱破解论坛正己大大的第12个教程&#xff0c;并且发现一个神奇的事情&#xff0c;正己大大的教程竟然没有第11个&#xff0c;感觉很奇怪 写这个博客的主要原因是希望提供一种新的解…

Django全栈班v1.03 Linux常用命令 20250911 下午

课程定位 命令行 ! 黑客专属。 这套视频带你从Linux小白到命令行大师&#xff0c;涵盖文件管理文本处理系统监控网络操作。 零基础也能30分钟掌握程序员必备的技能。 课程亮点 1、零基础友好&#xff1a;从最基础的ls&#xff0c;cd命令开始&#xff0c;循序渐进 2、实战导向&a…

离线应用开发:Service Worker 与缓存

引言&#xff1a;离线应用开发在 Electron 中的 Service Worker 与缓存核心作用与必要性 在 Electron 框架的开发实践中&#xff0c;离线应用开发是提升用户体验和应用可用性的关键技术&#xff0c;特别是使用 Service Worker 实现缓存和离线功能&#xff0c;结合 Node.js 处理…

英发睿能闯关上市:业绩波动明显,毅达创投退出,临场“移民”

撰稿|张君来源|贝多商业&贝多财经近日&#xff0c;四川英发睿能科技股份有限公司&#xff08;下称“英发睿能”&#xff09;递交招股书&#xff0c;报考在港交所上市。据贝多商业&贝多财经了解&#xff0c;英发睿能还于9月3日披露《整体协调人公告&#xff0d;委任&…