foggy-data-viewer 1.0.1-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +273 -0
- package/dist/favicon.svg +4 -0
- package/dist/index.js +1531 -0
- package/dist/index.umd +1 -0
- package/dist/style.css +1 -0
- package/package.json +51 -0
- package/src/App.vue +469 -0
- package/src/api/viewer.ts +163 -0
- package/src/components/DataTable.test.ts +533 -0
- package/src/components/DataTable.vue +810 -0
- package/src/components/DataTableWithSearch.test.ts +628 -0
- package/src/components/DataTableWithSearch.vue +277 -0
- package/src/components/DataViewer.vue +310 -0
- package/src/components/SearchToolbar.test.ts +521 -0
- package/src/components/SearchToolbar.vue +406 -0
- package/src/components/composables/index.ts +2 -0
- package/src/components/composables/useTableSelection.test.ts +248 -0
- package/src/components/composables/useTableSelection.ts +44 -0
- package/src/components/composables/useTableSummary.test.ts +341 -0
- package/src/components/composables/useTableSummary.ts +129 -0
- package/src/components/filters/BoolFilter.vue +103 -0
- package/src/components/filters/DateRangeFilter.vue +194 -0
- package/src/components/filters/NumberRangeFilter.vue +160 -0
- package/src/components/filters/SelectFilter.vue +464 -0
- package/src/components/filters/TextFilter.vue +230 -0
- package/src/components/filters/index.ts +5 -0
- package/src/examples/EnhancedTableExample.vue +136 -0
- package/src/index.ts +32 -0
- package/src/main.ts +14 -0
- package/src/types/index.ts +159 -0
- package/src/utils/README.md +140 -0
- package/src/utils/schemaHelper.test.ts +215 -0
- package/src/utils/schemaHelper.ts +44 -0
- package/src/vite-env.d.ts +7 -0
package/README.md
ADDED
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
# Foggy Data Viewer
|
|
2
|
+
|
|
3
|
+
一个基于 Vue 3 + TypeScript + vxe-table 的企业级数据表格组件库。
|
|
4
|
+
|
|
5
|
+
## 特性
|
|
6
|
+
|
|
7
|
+
- 🎯 **TypeScript 支持** - 完整的类型定义
|
|
8
|
+
- 📊 **动态列配置** - 基于 QM Schema + TableConfig 的灵活列配置
|
|
9
|
+
- 🔍 **高级筛选** - 支持多种数据类型的筛选器(表头过滤 + 独立搜索工具栏)
|
|
10
|
+
- 📈 **汇总行** - 自动计算选中行和全量汇总
|
|
11
|
+
- 🎨 **自定义渲染** - 支持自定义格式化和渲染函数
|
|
12
|
+
- 🔧 **组合组件** - 提供 SearchToolbar + DataTable 的组合组件
|
|
13
|
+
- ✅ **高测试覆盖** - 核心组件覆盖率 90%+
|
|
14
|
+
- 📦 **按需引入** - ES Module 支持
|
|
15
|
+
|
|
16
|
+
## 安装
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install foggy-data-viewer
|
|
20
|
+
# 或
|
|
21
|
+
yarn add foggy-data-viewer
|
|
22
|
+
# 或
|
|
23
|
+
pnpm add foggy-data-viewer
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## 依赖
|
|
27
|
+
|
|
28
|
+
本组件库依赖以下包(需要在你的项目中安装):
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npm install vue vxe-table vxe-pc-ui xe-utils
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## 快速开始
|
|
35
|
+
|
|
36
|
+
### 1. 注册组件
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
// main.ts
|
|
40
|
+
import { createApp } from 'vue'
|
|
41
|
+
import App from './App.vue'
|
|
42
|
+
|
|
43
|
+
// 引入 vxe-table
|
|
44
|
+
import VxeUI from 'vxe-pc-ui'
|
|
45
|
+
import 'vxe-pc-ui/lib/style.css'
|
|
46
|
+
import VxeTable from 'vxe-table'
|
|
47
|
+
import 'vxe-table/lib/style.css'
|
|
48
|
+
|
|
49
|
+
const app = createApp(App)
|
|
50
|
+
|
|
51
|
+
app.use(VxeUI)
|
|
52
|
+
app.use(VxeTable)
|
|
53
|
+
|
|
54
|
+
app.mount('#app')
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### 2. 使用 DataTable 组件
|
|
58
|
+
|
|
59
|
+
```vue
|
|
60
|
+
<script setup lang="ts">
|
|
61
|
+
import { ref } from 'vue'
|
|
62
|
+
import { DataTable, buildTableColumns } from 'foggy-data-viewer'
|
|
63
|
+
import type { EnhancedColumnSchema } from 'foggy-data-viewer'
|
|
64
|
+
|
|
65
|
+
// 从服务器获取的 QM Schema
|
|
66
|
+
const qmSchema = [
|
|
67
|
+
{ name: 'id', type: 'INTEGER', title: 'ID' },
|
|
68
|
+
{ name: 'name', type: 'TEXT', title: '名称' },
|
|
69
|
+
{ name: 'amount', type: 'MONEY', title: '金额' }
|
|
70
|
+
]
|
|
71
|
+
|
|
72
|
+
// 使用 buildTableColumns 构建列配置
|
|
73
|
+
const columns = ref<EnhancedColumnSchema[]>(
|
|
74
|
+
buildTableColumns(qmSchema, {
|
|
75
|
+
visibleColumns: ['id', 'name', 'amount'],
|
|
76
|
+
customizations: [
|
|
77
|
+
{ name: 'id', width: 80, fixed: 'left' },
|
|
78
|
+
{ name: 'name', width: 150 },
|
|
79
|
+
{ name: 'amount', width: 120 }
|
|
80
|
+
]
|
|
81
|
+
})
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
const data = ref([
|
|
85
|
+
{ id: 1, name: '测试1', amount: 100 },
|
|
86
|
+
{ id: 2, name: '测试2', amount: 200 }
|
|
87
|
+
])
|
|
88
|
+
|
|
89
|
+
function handlePageChange(page: number, pageSize: number) {
|
|
90
|
+
console.log('分页变化:', page, pageSize)
|
|
91
|
+
}
|
|
92
|
+
</script>
|
|
93
|
+
|
|
94
|
+
<template>
|
|
95
|
+
<DataTable
|
|
96
|
+
:columns="columns"
|
|
97
|
+
:data="data"
|
|
98
|
+
:total="100"
|
|
99
|
+
:loading="false"
|
|
100
|
+
@page-change="handlePageChange"
|
|
101
|
+
/>
|
|
102
|
+
</template>
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## 组件列表
|
|
106
|
+
|
|
107
|
+
### 核心组件
|
|
108
|
+
|
|
109
|
+
| 组件 | 说明 | 文档 |
|
|
110
|
+
|------|------|------|
|
|
111
|
+
| **DataTable** | 基础数据表格组件(表头过滤器、分页、排序、汇总) | [见下方 API](#datatable-props) |
|
|
112
|
+
| **SearchToolbar** | 独立搜索工具栏组件(字段级快速筛选) | [完整文档](./docs/SearchToolbar.md) |
|
|
113
|
+
| **DataTableWithSearch** | 组合组件(SearchToolbar + DataTable + 属性透传) | [完整文档](./docs/SearchToolbar.md#datatablewithsearch-使用) |
|
|
114
|
+
| **DataViewer** | 高层封装组件(集成 API 调用、元数据管理) | 待完善 |
|
|
115
|
+
|
|
116
|
+
### 工具函数
|
|
117
|
+
|
|
118
|
+
- **buildTableColumns** - 根据 QM Schema 构建列配置
|
|
119
|
+
|
|
120
|
+
### Composables
|
|
121
|
+
|
|
122
|
+
- **useTableSelection** - 表格行选择逻辑
|
|
123
|
+
- **useTableSummary** - 汇总行计算逻辑
|
|
124
|
+
|
|
125
|
+
### 过滤器组件
|
|
126
|
+
|
|
127
|
+
- **TextFilter** - 文本筛选(等于、左匹配、批量)
|
|
128
|
+
- **NumberRangeFilter** - 数字范围筛选
|
|
129
|
+
- **DateRangeFilter** - 日期范围筛选(需要 Element Plus)
|
|
130
|
+
- **SelectFilter** - 选择筛选(单选/多选、搜索)
|
|
131
|
+
- **BoolFilter** - 布尔筛选(是/否/全部)
|
|
132
|
+
|
|
133
|
+
## API
|
|
134
|
+
|
|
135
|
+
### DataTable Props
|
|
136
|
+
|
|
137
|
+
| 属性 | 类型 | 默认值 | 说明 |
|
|
138
|
+
|------|------|--------|------|
|
|
139
|
+
| columns | `EnhancedColumnSchema[]` | - | 列配置(必填) |
|
|
140
|
+
| data | `any[]` | - | 表格数据(必填) |
|
|
141
|
+
| total | `number` | - | 总数据量(必填) |
|
|
142
|
+
| loading | `boolean` | `false` | 加载状态 |
|
|
143
|
+
| pageSize | `number` | `50` | 每页显示数量 |
|
|
144
|
+
| showFilters | `boolean` | `true` | 是否显示筛选器 |
|
|
145
|
+
| serverSummary | `object \| null` | `null` | 服务端汇总数据 |
|
|
146
|
+
| initialSlice | `SliceCondition[]` | - | 初始筛选条件 |
|
|
147
|
+
| filterOptionsLoader | `Function` | - | 筛选选项加载器 |
|
|
148
|
+
|
|
149
|
+
### DataTable Events
|
|
150
|
+
|
|
151
|
+
| 事件名 | 参数 | 说明 |
|
|
152
|
+
|--------|------|------|
|
|
153
|
+
| page-change | `(page, pageSize)` | 分页变化 |
|
|
154
|
+
| sort-change | `(field, order)` | 排序变化 |
|
|
155
|
+
| filter-change | `(slices)` | 筛选变化 |
|
|
156
|
+
| row-click | `(row, column)` | 行点击 |
|
|
157
|
+
| row-dblclick | `(row, column)` | 行双击 |
|
|
158
|
+
|
|
159
|
+
### DataTable Methods
|
|
160
|
+
|
|
161
|
+
| 方法名 | 参数 | 返回值 | 说明 |
|
|
162
|
+
|--------|------|--------|------|
|
|
163
|
+
| resetPagination | - | `void` | 重置分页到第一页 |
|
|
164
|
+
| clearFilters | - | `void` | 清空所有筛选条件 |
|
|
165
|
+
| getFilters | - | `SliceCondition[]` | 获取当前筛选条件 |
|
|
166
|
+
| setFilter | `(field, op, value)` | `void` | 设置单个筛选条件 |
|
|
167
|
+
| getGridInstance | - | `VxeGrid` | 获取 vxe-grid 实例 |
|
|
168
|
+
|
|
169
|
+
### buildTableColumns
|
|
170
|
+
|
|
171
|
+
```typescript
|
|
172
|
+
function buildTableColumns(
|
|
173
|
+
qmSchema: ColumnSchema[],
|
|
174
|
+
config: TableConfig
|
|
175
|
+
): EnhancedColumnSchema[]
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
根据 QM Schema 和 TableConfig 构建表格列配置。
|
|
179
|
+
|
|
180
|
+
**参数:**
|
|
181
|
+
- `qmSchema`: QM 模型的列定义数组
|
|
182
|
+
- `config`: 表格配置对象
|
|
183
|
+
- `visibleColumns?: string[]` - 可见列名称数组
|
|
184
|
+
- `showAll?: boolean` - 是否显示所有列
|
|
185
|
+
- `customizations?: ColumnCustomization[]` - 列自定义配置
|
|
186
|
+
|
|
187
|
+
**返回:**
|
|
188
|
+
- `EnhancedColumnSchema[]` - 增强的列配置数组
|
|
189
|
+
|
|
190
|
+
## 类型定义
|
|
191
|
+
|
|
192
|
+
```typescript
|
|
193
|
+
interface ColumnSchema {
|
|
194
|
+
name: string
|
|
195
|
+
type: string
|
|
196
|
+
title: string
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
interface ColumnCustomization {
|
|
200
|
+
name: string
|
|
201
|
+
width?: number
|
|
202
|
+
minWidth?: number
|
|
203
|
+
fixed?: 'left' | 'right'
|
|
204
|
+
formatter?: (value: any) => string
|
|
205
|
+
render?: (params: any) => VNode
|
|
206
|
+
filterComponent?: Component
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
interface TableConfig {
|
|
210
|
+
visibleColumns?: string[]
|
|
211
|
+
showAll?: boolean
|
|
212
|
+
customizations?: ColumnCustomization[]
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
interface EnhancedColumnSchema extends ColumnSchema {
|
|
216
|
+
width?: number
|
|
217
|
+
minWidth?: number
|
|
218
|
+
fixed?: 'left' | 'right'
|
|
219
|
+
customFormatter?: (value: any) => string
|
|
220
|
+
customRender?: (params: any) => VNode
|
|
221
|
+
customFilterComponent?: Component
|
|
222
|
+
}
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
## 开发
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
# 安装依赖
|
|
229
|
+
npm install
|
|
230
|
+
|
|
231
|
+
# 启动开发服务器
|
|
232
|
+
npm run dev
|
|
233
|
+
|
|
234
|
+
# 运行测试
|
|
235
|
+
npm test
|
|
236
|
+
|
|
237
|
+
# 测试覆盖率
|
|
238
|
+
npm run test:coverage
|
|
239
|
+
|
|
240
|
+
# 构建库
|
|
241
|
+
npm run build:lib
|
|
242
|
+
|
|
243
|
+
# 构建应用
|
|
244
|
+
npm run build
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
## 测试
|
|
248
|
+
|
|
249
|
+
本项目包含完整的单元测试,覆盖率达到 98%+:
|
|
250
|
+
|
|
251
|
+
```bash
|
|
252
|
+
npm test
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
测试覆盖情况:
|
|
256
|
+
- ✅ schemaHelper.ts: 100%
|
|
257
|
+
- ✅ useTableSelection.ts: 100%
|
|
258
|
+
- ✅ useTableSummary.ts: 97.67%
|
|
259
|
+
- ✅ DataTable.vue: 63.31%
|
|
260
|
+
- ✅ 所有过滤器组件: 100%
|
|
261
|
+
|
|
262
|
+
## 验证项目
|
|
263
|
+
|
|
264
|
+
本项目包含一个独立的验证项目,用于测试组件库的功能。参见 [verification-app](./verification-app/README.md)。
|
|
265
|
+
|
|
266
|
+
## License
|
|
267
|
+
|
|
268
|
+
Apache-2.0
|
|
269
|
+
|
|
270
|
+
## 相关项目
|
|
271
|
+
|
|
272
|
+
- [foggy-framework](https://github.com/foggy-projects/java-data-mcp-bridge) - Foggy Framework 主项目
|
|
273
|
+
- [vxe-table](https://github.com/x-extends/vxe-table) - 企业级表格组件
|
package/dist/favicon.svg
ADDED