# vue-mute-table
**Repository Path**: li-lizhous/vue-mute-table
## Basic Information
- **Project Name**: vue-mute-table
- **Description**: 多维表格编辑器是一个基于 Vue 3 的高性能数据表格应用,支持虚拟滚动、海量数据处理、多视图展示和实时编辑。该项目采用现代化的前端技术栈,提供了类似 Airtable 或 Notion 的表格编辑体验。
- **Primary Language**: JavaScript
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 3
- **Created**: 2025-09-03
- **Last Updated**: 2025-09-03
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# vue-mute-table 多维表格编辑器

## 项目介绍
多维表格编辑器是一个基于 Vue 3 的高性能数据表格应用,支持虚拟滚动、海量数据处理、多视图展示和实时编辑。该项目采用现代化的前端技术栈,提供了类似 Airtable 或 Notion 的表格编辑体验。
## 在线办公相关解决方案
1. [flowmix/docx多模态文档编辑器](https://flowmix.turntip.cn)
2. [灵语AI文档](https://mindlink.turntip.cn)
3. [flowmixAI智能办公工作台](https://ai.flowmix.cn)
4. [pxcharts多维表格](http://pxcharts.com)
## 技术栈
### 核心框架
- **Vue 3.4.15** - 渐进式 JavaScript 框架,采用 Composition API
- **TypeScript 5.3.3** - 提供类型安全和更好的开发体验
- **Vite 5.0.12** - 快速的前端构建工具,支持热重载
### 状态管理
- **Pinia 2.1.7** - Vue 3 官方推荐的状态管理库
- **pinia-plugin-persistedstate 3.2.1** - 状态持久化插件
### 路由管理
- **Vue Router 4.2.5** - Vue 官方路由管理器
### UI 组件与样式
- **Tailwind CSS 3.4.1** - 实用优先的 CSS 框架
- **Lucide Vue Next 0.312.0** - 现代化图标库
- **@tailwindcss/forms** - 表单样式增强
- **@tailwindcss/typography** - 排版样式
- **@tailwindcss/aspect-ratio** - 宽高比工具
### 数据处理与工具
- **Lodash-es 4.17.21** - JavaScript 实用工具库
- **Date-fns 3.3.1** - 现代 JavaScript 日期工具库
- **Nanoid 5.0.4** - 小巧的唯一 ID 生成器
- **Mitt 3.0.1** - 轻量级事件发射器
### 文件处理
- **PapaParse 5.4.1** - CSV 解析库
- **XLSX 0.18.5** - Excel 文件处理
- **JSZip 3.10.1** - ZIP 文件处理
- **File-saver 2.0.5** - 文件下载工具
### 虚拟化与性能
- **Vue Virtual Scroller 2.0.0-beta.8** - Vue 虚拟滚动组件
- **Virtual-list 1.0.1** - 虚拟列表实现
- **Intersection Observer 0.12.2** - 交叉观察器 API
- **Resize Observer Polyfill 1.5.1** - 尺寸变化观察器
### 拖拽与排序
- **SortableJS 1.15.1** - 拖拽排序库
### 搜索功能
- **Fuse.js 7.0.0** - 模糊搜索库
### 图表与可视化
- **Chart.js 4.4.1** - 图表库
- **Vue ChartJS 5.3.0** - Vue Chart.js 集成
### 开发工具
- **ESLint** - 代码质量检查
- **Prettier** - 代码格式化
- **Stylelint** - CSS 代码检查
- **Husky** - Git hooks 管理
- **Lint-staged** - 暂存文件检查
- **Commitizen** - 规范化提交信息
### 测试框架
- **Vitest 1.2.2** - 快速单元测试框架
- **@vue/test-utils** - Vue 组件测试工具
### PWA 支持
- **Vite Plugin PWA 0.17.4** - 渐进式 Web 应用支持
### 自动导入
- **unplugin-auto-import** - 自动导入 API
- **unplugin-vue-components** - 自动导入组件
## 架构设计
### 整体架构
项目采用分层架构设计,主要分为以下几个层次:
```
┌─────────────────────────────────────────┐
│ 视图层 (Views) │
│ TableView | KanbanView | FormView │
├─────────────────────────────────────────┤
│ 组件层 (Components) │
│ VirtualTable | TableToolbar | Modals │
├─────────────────────────────────────────┤
│ 状态层 (Stores) │
│ Pinia Store (table.ts) │
├─────────────────────────────────────────┤
│ 工具层 (Utils) │
│ 工具函数 | 类型定义 | 常量 │
├─────────────────────────────────────────┤
│ 数据层 (Data) │
│ 本地存储 | 导入导出 | 数据处理 │
└─────────────────────────────────────────┘
```
### 核心模块
#### 1. 状态管理 (Pinia Store)
- **数据模型**: 字段(Field)、记录(Record)、视图(View)
- **状态管理**: 表格数据、筛选、排序、分组
- **持久化**: 自动保存到 localStorage
- **响应式**: 基于 Vue 3 的响应式系统
#### 2. 虚拟滚动系统
- **性能优化**: 只渲染可见区域的 DOM 元素
- **动态计算**: 根据滚动位置动态计算可见行
- **分组支持**: 支持分组数据的虚拟滚动
- **内存管理**: 自动回收不可见的 DOM 元素
#### 3. 组件架构
- **原子化设计**: 每个组件职责单一
- **组合式 API**: 使用 Vue 3 Composition API
- **类型安全**: 完整的 TypeScript 类型定义
- **可复用性**: 高度可配置和可扩展
### 数据流
```
用户操作 → 组件事件 → Store Actions → 状态更新 → 视图响应
↓
本地存储 ← 数据持久化 ← 状态变化监听
```
## 项目功能亮点
### 1. 高性能虚拟滚动
- **海量数据处理**: 支持数万条记录的流畅滚动
- **内存优化**: 只渲染可见区域,大幅降低内存占用
- **分组虚拟化**: 支持分组数据的虚拟滚动
- **自适应高度**: 根据容器大小自动调整
### 2. 多视图支持
- **表格视图**: 传统的数据表格展示
- **看板视图**: 卡片式任务管理界面
- **表单视图**: 单条记录的详细编辑
- **视图切换**: 无缝切换不同视图模式
### 3. 灵活的字段系统
- **多种字段类型**: 文本、数字、日期、选择、用户等
- **动态字段管理**: 运行时添加、删除、修改字段
- **字段验证**: 内置数据验证规则
- **字段配置**: 宽度、可见性、必填等配置
### 4. 强大的数据处理
- **实时筛选**: 多条件组合筛选
- **多级排序**: 支持多字段排序
- **数据分组**: 按字段值自动分组
- **搜索功能**: 模糊搜索支持
### 5. 拖拽交互
- **列拖拽**: 调整列顺序
- **行拖拽**: 调整行顺序
- **列宽调整**: 鼠标拖拽调整列宽
- **分组内排序**: 支持分组内的拖拽排序
### 6. 数据导入导出
- **多格式支持**: CSV、Excel、JSON 格式
- **批量导入**: 支持大量数据导入
- **数据导出**: 一键导出所有数据
- **格式转换**: 自动处理不同数据格式
### 7. 响应式设计
- **移动端适配**: 完整的移动端支持
- **自适应布局**: 根据屏幕尺寸调整布局
- **触摸优化**: 移动端触摸交互优化
### 8. 性能监控
- **实时监控**: 渲染性能实时监控
- **内存使用**: 内存占用情况监控
- **性能指标**: FPS、渲染时间等指标
## 二次开发指南
### 环境要求
- Node.js >= 18.0.0
- npm >= 8.0.0 或 pnpm
- 现代浏览器支持
### 开发环境搭建
1. **克隆项目**
```bash
git clone https://github.com/MrXujiang/vue-mute-table
cd vue-mute-table
```
2. **安装依赖**
```bash
# 使用 pnpm (推荐)
pnpm install
# 或使用 npm
npm install
```
3. **启动开发服务器**
```bash
pnpm dev
# 或
npm run dev
```
4. **构建生产版本**
```bash
pnpm build
# 或
npm run build
```
### 项目结构
```
src/
├── components/ # 组件目录
│ ├── modals/ # 模态框组件
│ ├── VirtualTable.vue # 虚拟表格组件
│ ├── TableToolbar.vue # 表格工具栏
│ └── ...
├── views/ # 页面组件
│ ├── TableView.vue # 表格视图
│ ├── KanbanView.vue # 看板视图
│ └── FormView.vue # 表单视图
├── stores/ # 状态管理
│ └── table.ts # 表格状态
├── types/ # 类型定义
│ └── index.ts # 核心类型
├── utils/ # 工具函数
│ └── index.ts # 通用工具
├── router/ # 路由配置
│ └── index.ts # 路由定义
├── styles/ # 样式文件
│ └── variables.scss # SCSS 变量
└── main.ts # 应用入口
```
### 核心组件说明
#### VirtualTable 组件
虚拟表格的核心组件,负责:
- 虚拟滚动实现
- 列管理
- 行渲染
- 交互处理
```typescript
// 使用示例
```
#### TableStore 状态管理
Pinia store,管理所有表格相关状态:
```typescript
// 主要状态
const {
fields, // 字段列表
records, // 记录列表
views, // 视图列表
currentViewId, // 当前视图ID
selectedRecords, // 选中的记录
editingCell, // 正在编辑的单元格
filters, // 筛选条件
sorts, // 排序条件
groupBy, // 分组字段
} = useTableStore()
```
### 开发规范
#### 1. 代码风格
- 使用 ESLint + Prettier 统一代码风格
- 遵循 Vue 3 Composition API 最佳实践
- 使用 TypeScript 严格模式
#### 2. 组件开发
- 使用 `