DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之功能优化,添加列宽调整功能Table12

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕

共同探索软件研发!敬请关注【宝码香车】
本文能帮助到你

csdngif标识

目录

  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之功能优化,添加列宽调整功能Table12
    • 📚页面效果
    • 📚指令输入
    • 📚think
      • 📘组件代码
        • 🔖功能增强说明:
        • 🔖注意事项:
    • 📚代码测试
    • 📚测试代码正常跑通,附其他基本代码
      • 📘编写路由 src\router\index.js
      • 📘编写展示入口 src\App.vue
    • 📚页面效果
    • 📚展望


📚📗📕📘📖🕮💡📝🗂️✍️🛠️💻🚀🎉🏗️🌐🖼️🔗📊👉🔖⚠️🌟🔐⬇️·正文开始⬇️·🎥😊🎓📩😺🌈🤝🤖📜📋🔍✅🧰❓📄📢📈 🙋0️⃣1️⃣2️⃣3️⃣4️⃣5️⃣6️⃣7️⃣8️⃣9️⃣🔟🆗*️⃣#️⃣

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之功能优化,添加列宽调整功能Table12

📚页面效果

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之功能优化,添加列宽调整功能Table12

📚指令输入

在“加载状态指示器”功能不变的情况下,添加新功能“支持列宽调整”,并写出完整代码

📚think

好的,我现在需要帮助用户在现有的Vue3表格组件中添加“支持列宽调整”的功能,同时保留已有的“加载状态指示器”功能。用户已经提供了之前的代码,我需要先理解现有代码的结构和功能,然后找到合适的位置添加列宽调整的逻辑。

首先,回顾之前的代码,用户已经实现了一个功能丰富的表格组件,包括数据展示、分页、排序、行选择、搜索、空状态提示以及加载状态指示器。现在需要添加列宽调整功能,允许用户通过拖拽列头的分隔线来调整列的宽度。

接下来,我需要考虑如何在Vue3的组合式API中实现这一功能。列宽调整通常涉及以下几个步骤:

  1. 检测用户拖拽事件:在列头的右侧添加一个可拖拽的区域,监听鼠标按下事件开始调整。
  1. 计算宽度变化:在鼠标移动时,计算新的列宽,并更新列的样式。
  1. 更新列配置:将调整后的列宽同步到父组件,可能需要使用emit事件来传递新的列配置。
  1. 样式调整:确保拖拽手柄的样式和交互反馈(如光标变化、辅助线)正确显示。

接下来,我需要检查现有代码的结构,找到合适的位置插入这些逻辑。观察到在模板中,列头是通过th元素渲染的,每个th对应一个列。因此,应该在每个th元素中添加拖拽手柄,并绑定相关的事件处理函数。

在脚本部分,需要引入新的响应式变量来跟踪拖拽状态,如isResizingresizingIndexstartXstartWidth等。此外,还需要在onMountedonBeforeUnmount生命周期钩子中处理事件的绑定和解绑,以避免内存泄漏。

考虑到用户要求使用普通JavaScript而非TypeScript,需要确保代码中没有类型注解。同时,要确保新增的功能不会影响已有的加载状态指示器和其他功能,比如在加载时禁用拖拽功能。

在样式方面,需要为拖拽手柄添加CSS样式,如定位、光标形状、背景颜色等,并在拖拽过程中显示辅助线以提升用户体验。还需要处理拖拽时的用户选择行为,防止文本被选中影响操作。

最后,测试新增功能是否与现有功能兼容,例如在调整列宽时,分页、排序、行选择等是否正常工作,加载状态是否覆盖整个表格区域,包括新增的拖拽手柄。

现在,根据上述思考,整合代码。在模板中添加拖拽手柄元素,绑定鼠标事件;在脚本中实现事件处理逻辑;在样式中添加相关CSS。确保所有改动与现有代码无缝衔接,并处理可能的边界情况,如最小列宽限制、多列同时调整等。

📘组件代码

以下是整合加载状态和列宽调整功能的完整代码:

<!-- components/Table/Table.vue -->
<template><div class="ds-table" :class="[`table-size-${size}`, { 'table-stripe': stripe, 'table-border': border }]"ref="tableContainer"><!-- 加载遮罩层 --><div v-if="loading" class="loading-mask"><div class="loading-content"><slot name="loading"><div class="default-loading"><div class="loading-spinner"></div><div class="loading-text">{{ loadingText }}</div></div></slot></div></div><!-- 搜索框 --><div v-if="showSearch" class="table-search"><inputv-model="searchKeyword"placeholder="搜索..."@input="handleSearch"class="search-input":disabled="loading"/></div><!-- 表格容器 --><div class="table-container"><table ref="tableEl"><thead><tr><!-- 选择列 --><th v-if="rowSelection" :class="headerAlignClass"class="selection-column":style="{ width: selectionColumnWidth }"><div class="header-content"><inputtype="checkbox":checked="allSelected"@change="toggleAllSelection":disabled="loading"/></div><div v-if="resizable" class="resize-handle"@mousedown.prevent="startResize('selection', $event)"></div></th><!-- 数据列 --><thv-for="(col, colIndex) in columns":key="col.dataIndex":class="[headerAlignClass, { sortable: sortable && col.sortable }]":style="{ width: col.width || 'auto' }"><div class="header-content"><slot :name="`header-${col.dataIndex}`" :column="col"><span @click="handleSort(col)">{{ col.title }}<span v-if="sortable && col.sortable" class="sort-icon">{{ sortedColumn.field === col.dataIndex ? (sortedColumn.order === 'asc' ? '↑' : '↓') : '' }}</span></span></slot></div><div v-if="resizable" class="resize-handle"@mousedown.prevent="startResize(colIndex, $event)"></div></th></tr></thead><tbody><!-- 空状态 --><tr v-if="showEmpty" class="empty-row"><td :colspan="totalColumns"><slot name="empty"><div class="empty-content"><svg class="empty-icon" viewBox="0 0 1024 1024"><path d="M832 320H192v448h640V320z m-64 384H256V384h512v320z m64-416h-64v-64h64v64z m0-128H192v64h640v-64zM128 256h64v512H128z m704 512h64V256h-64v512z"/></svg><div class="empty-text">{{ emptyText }}</div></div></slot></td></tr><!-- 数据行 --><template v-else><trv-for="(row, index) in processedData":key="rowKey ? row[rowKey] : index":class="{'selected-row': isRowSelected(row),'stripe-row': stripe && index % 2 === 0}"@click="handleRowClick(row)"><!-- 选择列 --><td v-if="rowSelection" :class="cellAlignClass":style="{ width: selectionColumnWidth }"><inputtype="checkbox":checked="isRowSelected(row)"@change="toggleRowSelection(row)":disabled="loading"/></td><!-- 数据列 --><tdv-for="col in columns":key="col.dataIndex":class="cellAlignClass":style="{ width: col.width || 'auto' }"><slot :name="`cell-${col.dataIndex}`" :row="row" :value="row[col.dataIndex]">{{ row[col.dataIndex] }}

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

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

相关文章

探索Java多线程的核心概念与实践技巧,带你从入门到精通!

各位看官早安午安晚安呀 如果您觉得这篇文章对您有帮助的话 欢迎您一键三连&#xff0c;小编尽全力做到更好 欢迎您分享给更多人哦 今天我们来学习多线程编程-"掌握线程创建、管理与安全"&#xff1a; 上一节课程我们铺垫了一系列的东西&#xff0c;引出来了我们的多…

前端数据模拟 Mock.js 学习笔记(附带详细)

前端数据模拟 Mock.js 学习笔记 在前端开发过程中&#xff0c;数据模拟是一项至关重要的环节。当后端接口尚未完成或者需要独立进行前端开发与测试时&#xff0c;Mock.js 能发挥巨大作用&#xff0c;它可以模拟各种数据场景&#xff0c;助力前端开发高效进行。 一、Mock.js 的…

NoteGen是一款开源跨平台的 AI 笔记应用,专注于 recording 和 writing ,基于 Tauri 开发

一、软件介绍 文末提供程序和源码下载 NoteGen 是一款专注于记录和写作的跨平台 AI 笔记应用&#xff0c;基于 Tauri 开发。NoteGen 的核心理念是将记录、写作和 AI 结合使用&#xff0c;三者相辅相成。记录功能可以帮助用户快速捕捉和整理碎片化知识。整理功能是连接记录和写…

学习网络安全需要哪些基础?

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 学习网络安全&#xff0c;对于想要进入IT行业的朋友们来说是一件非常重要的事情。尤其是在当今社会&#xff0c;互联网已经渗透到工作和生活的方方面面&#xff0…

系统安全阶段练习真题(高软44)

系列文章目录 系统安全阶段练习真题 文章目录 系列文章目录前言一、真题总结 前言 本节就是系统安全的阶段练习真题&#xff0c;带答案与解析。 一、真题 总结 就是高软笔记&#xff0c;大佬请略过&#xff01;

C++性能分析工具

C性能分析工具常用的三种。perf、gprof、pprof perf工具需要root权限&#xff0c;设置perf的suid位并不行&#xff0c;需要设置perf对应的内核参数。 perf使用&#xff1a; g -o example example.cpp -O2 # 运行程序并采样 sudo perf record -g ./example # 查看采样结果 sud…

基于PyTorch的深度学习5——神经网络工具箱

可以学习如下内容&#xff1a; • 介绍神经网络核心组件。 • 如何构建一个神经网络。 • 详细介绍如何构建一个神经网络。 • 如何使用nn模块中Module及functional。 • 如何选择优化器。 • 动态修改学习率参数。 5.1 核心组件 神经网络核心组件不多&#xff0c;把这些…

Spring Cloud之注册中心之Nacos负载均衡

目录 负载均衡 服务下线 权重配置 配置权重 解决办法 常见问题 同集群优先访问 给实例配置集群名称 开启Nacos负载均衡策略 负载均衡 ⽣产环境相对是⽐较恶劣的, 我们需要对服务的流量进⾏更加精细的控制. Nacos⽀持多种负载均衡策略, 包括权重, 同机房, 同地域, 同环…

音视频入门基础:RTP专题(16)——RTP封装音频时,音频的有效载荷结构

一、引言 《RFC 3640》和《RFC 6416》分别定义了两种对MPEG-4流的RTP封包方式&#xff0c;这两个文档都可以从RFC官网下载&#xff1a; RFC Editor 本文主要对《RFC 3640》中的音频打包方式进行简介。《RFC 3640》总共有43页&#xff0c;本文下面所说的“页数”是指在pdf阅读…

操作系统控制台-健康守护我们的系统

引言基本准备体验功能健康守护系统诊断 收获提升结语 引言 阿里云操作系统控制平台作为新一代云端服务器中枢平台&#xff0c;通过创新交互模式重构主机管理体验。操作系统控制台提供了一系列管理功能&#xff0c;包括运维监控、智能助手、扩展插件管理以及订阅服务等。用户可以…

ASP.NET Core 6 MVC 文件上传

概述 应用程序中的文件上传是一项功能&#xff0c;用户可以使用该功能将用户本地系统或网络上的文件上传到 Web 应用程序。Web 应用程序将处理该文件&#xff0c;然后根据需要对文件进行一些验证&#xff0c;最后根据要求将该文件存储在系统中配置的用于保存文件的存储中&#…

JVM之Arthas的dashboard命令以及CPU飙高场景

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

JSAR 基础 1.2.1 基础概念_空间小程序

JSAR 基础 1.2.1 基础概念_空间小程序 空间空间自由度可嵌入空间空间小程序 最新的技术进展表明&#xff0c;官网之前的文档准备废除了&#xff0c;基于xsml的开发将退出历史舞台&#xff0c;three.js和普通web结合的技术将成为主导。所以后续学习请移步three.js学习路径&#…

蓝桥杯嵌入式组第七届省赛题目解析+STM32G431RBT6实现源码

文章目录 1.题目解析1.1 分而治之&#xff0c;藕断丝连1.2 模块化思维导图1.3 模块解析1.3.1 KEY模块1.3.2 ADC模块1.3.3 IIC模块1.3.4 UART模块1.3.5 LCD模块1.3.6 LED模块1.3.7 TIM模块 2.源码3.第七届题目 前言&#xff1a;STM32G431RBT6实现嵌入式组第七届题目解析源码&…

Java之IO流

什么是IO流 存储和读取数据的解决方案 I&#xff1a;input:输入 O&#xff1a;output&#xff1a;输出 流&#xff1a;像水流一样传输数据 IO流的作用 用于读取数据&#xff08;本地文件&#xff0c;网络&#xff09; IO流的分类 流的方向&#xff1a; 输入流&#xff…

Python入门———条件、循环

目录 语句 顺序语句 条件语句 缩进和代码块 判断年份是否是闰年 空语句 pass 循环 while 循环 求5的阶乘&#xff1a; 求1&#xff01;2&#xff01;3&#xff01;4&#xff01;5&#xff01; for循环 打印1-10 打印2&#xff0c;4&#xff0c;6&#xff0c;8&#x…

JWT的学习

1、HTTP无状态及解决方案 HTTP一种是无状态的协议&#xff0c;每次请求都是一次独立的请求&#xff0c;一次交互之后就是陌生人。 以CSDN为例&#xff0c;先登录一次&#xff0c;然后浏览器退出&#xff0c;这个时候在进入CSDN&#xff0c;按理说服务器是不知道你已经登陆了&…

【接口负载】✈️整合 Resilience4j 指定接口负载,避免过载

目录 &#x1f44b;前言 &#x1f378;一、应用场景 &#x1f37b;二、 代码实现 &#x1f379;三、扩展 &#x1f378;四、章末 &#x1f44b;前言 小伙伴们大家好&#xff0c;上次本地实操了下针对百万级数据量如何快速排序、指定条件获取等&#xff0c;文章内容包括&am…

CSS—网格布局Grid

网格布局grid 提供了带有行和列的基于网格的布局系统&#xff0c;无需使用浮动和定位。 当 HTML 元素的 display 属性设置为 grid 或 inline-grid 时&#xff0c;它就会成为网格容器。 更多布局模式可以参考之前的博客&#xff1a; ​​​​​​CSS—flex布局、过渡transit…

表格columns拼接两个后端返回的字段(以umi框架为例)

在用组件对前端项目进行开发时&#xff0c;我们会遇到以下情况&#xff1a;项目原型中有取值范围这个表字段&#xff0c;需要存放最小取值到最大取值。 而后端返回给我们的数据是返回了一个最小值和一个最大值&#xff0c; 在columns中我们需要对这两个字段进行拼接&#xff0…