@lonersyk/record-grid 1.0.29 → 1.0.31

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 CHANGED
@@ -74,6 +74,39 @@ RecordGrid.initialize({
74
74
 
75
75
  ### 2. 使用组件
76
76
 
77
+ **方式一:使用 RecordGridServiceProvider(推荐,支持多实例)**
78
+
79
+ ```javascript
80
+ import RecordGrid, { RecordGridServiceProvider } from '@streams/record-grid'
81
+ import '@streams/record-grid/dist/index.css'
82
+ import * as DataService from './services/DataService'
83
+
84
+ function MyComponent() {
85
+ const authService = {
86
+ check: (auth) => authInfo?.check?.(auth),
87
+ userInfo: () => userInfo || {},
88
+ getAppInfo: () => appInfo
89
+ }
90
+
91
+ return (
92
+ <RecordGridServiceProvider
93
+ dataService={DataService}
94
+ authService={authService}
95
+ >
96
+ <div style={{ height: '600px' }}>
97
+ <RecordGrid
98
+ subjectName="your-subject-name"
99
+ pagination={true}
100
+ readonly={false}
101
+ />
102
+ </div>
103
+ </RecordGridServiceProvider>
104
+ )
105
+ }
106
+ ```
107
+
108
+ **方式二:全局初始化(适用于单实例场景)**
109
+
77
110
  ```javascript
78
111
  import RecordGrid from '@streams/record-grid'
79
112
  import '@streams/record-grid/dist/index.css'
@@ -181,8 +214,44 @@ export async function importRecords(subject, records) {
181
214
  | actions | `object` | `{}` | 自定义事件处理 |
182
215
  | useFrontView | `boolean \| object` | `false` | 前端视图模式 |
183
216
  | filterView | `array` | `[]` | 过滤视图 |
184
- | displayConfig | `object` | `{}` | 显示配置 |
217
+ | displayConfig | `object` | `{}` | 显示配置(见下方说明) |
185
218
  | authApp | `string` | - | 权限应用名 |
219
+ | quickSelect | `boolean` | `false` | 快速选择模式,开启后引用字段可直接在单元格内选择 |
220
+ | autoExpandGroups | `boolean` | `false` | 是否在首次加载和刷新后自动展开所有分组 |
221
+ | useClientSide | `boolean` | `false` | 客户端模式,数据在客户端处理 |
222
+ | useCustomSidebar | `boolean \| object` | `false` | 自定义侧边栏配置 |
223
+ | useCustomContextMenu | `boolean \| object` | `false` | 自定义右键菜单 |
224
+ | useCustomOperation | `boolean \| object` | `false` | 自定义操作栏 |
225
+ | tabBarRightSlot | `function` | - | 标签栏右侧插槽,接收 `(gridApi) => ReactNode` |
226
+ | toolBarRightSlot | `function` | - | 工具栏右侧插槽,接收 `(gridApi) => ReactNode` |
227
+ | extraTheme | `object` | `{}` | 主题定制配置 |
228
+ | recordDetailRenderer | `function` | - | 自定义记录详情渲染器 |
229
+ | documentDetailRenderer | `function` | - | 自定义文档详情渲染器 |
230
+ | columnRenderers | `object` | `{}` | 列自定义渲染器映射 `{ fieldName: renderFunction }` |
231
+ | detailGridColumnRenderers | `object` | `{}` | 详情抽屉中的多维表格专用列渲染器 |
232
+ | components | `object` | `{}` | 组件映射(兼容 columnRenderers 的别名) |
233
+ | extraFilters | `array` | `[]` | 额外的过滤条件,支持 MongoDB aggregation stages 数组 |
234
+
235
+ ### displayConfig 配置
236
+
237
+ ```javascript
238
+ {
239
+ maxTagCount: 3, // 标签字段最多显示的标签数量,超出部分显示 "+N"
240
+ maxAvatarCount: 5 // 用户/引用字段最多显示的头像数量,超出部分显示 "+N"
241
+ }
242
+ ```
243
+
244
+ 示例:
245
+
246
+ ```javascript
247
+ <RecordGrid
248
+ subjectName="your-subject"
249
+ displayConfig={{
250
+ maxTagCount: 10,
251
+ maxAvatarCount: 10
252
+ }}
253
+ />
254
+ ```
186
255
 
187
256
  ### readonly 配置
188
257
 
@@ -271,6 +340,109 @@ export async function importRecords(subject, records) {
271
340
  />
272
341
  ```
273
342
 
343
+ ### 使用权限服务(authService)
344
+
345
+ 权限服务用于控制字段编辑权限和视图访问权限。可以通过 `RecordGridServiceProvider` 传入:
346
+
347
+ ```javascript
348
+ import { RecordGridServiceProvider } from '@streams/record-grid'
349
+
350
+ const authService = {
351
+ // 权限检查函数
352
+ check: (auth) => {
353
+ // auth 可能是字符串(如 '管理')或对象(如 { role: '成员' })
354
+ // 返回 true/false
355
+ return authInfo?.check?.(auth)
356
+ },
357
+
358
+ // 用户信息(可以是对象或函数)
359
+ userInfo: () => ({
360
+ username: 'user',
361
+ type: 'admin', // 'admin' 或 'system' 时,字段权限设置按钮可用
362
+ display_name: '用户名'
363
+ }),
364
+
365
+ // 获取应用信息(用于权限设置弹窗)
366
+ getAppInfo: async () => ({
367
+ members: [], // 用户组列表
368
+ roles: [], // 角色列表
369
+ permissions: [] // 权限列表
370
+ })
371
+ }
372
+
373
+ <RecordGridServiceProvider
374
+ dataService={DataService}
375
+ authService={authService}
376
+ >
377
+ <RecordGrid subjectName="your-subject" />
378
+ </RecordGridServiceProvider>
379
+ ```
380
+
381
+ **重要说明**:
382
+ - `userInfo.type` 为 `'admin'` 或 `'system'` 时,字段和视图的"权限设置"按钮才会启用
383
+ - `getAppInfo` 返回的数据用于权限设置弹窗中的选项
384
+
385
+ ### 自定义列渲染器
386
+
387
+ ```javascript
388
+ <RecordGrid
389
+ subjectName="your-subject"
390
+ columnRenderers={{
391
+ // 为特定字段自定义渲染
392
+ 'metadata.status': ({ value, data, field }) => {
393
+ return <Tag color={value === 'active' ? 'green' : 'red'}>{value}</Tag>
394
+ },
395
+ 'metadata.workflow': ({ value, data, field }) => {
396
+ // 自定义工作流渲染逻辑
397
+ return <CustomWorkflowDisplay value={value} />
398
+ }
399
+ }}
400
+ // 或者使用 components(与 columnRenderers 等价)
401
+ components={{
402
+ 'metadata.status': StatusRenderer
403
+ }}
404
+ />
405
+ ```
406
+
407
+ ### 详情抽屉中的列渲染器
408
+
409
+ ```javascript
410
+ <RecordGrid
411
+ subjectName="your-subject"
412
+ detailGridColumnRenderers={{
413
+ // 详情抽屉中的多维表格使用不同的渲染器
414
+ 'metadata.workflow': ({ value, data, field }) => {
415
+ return (
416
+ <>
417
+ {(!data.metadata?.status || data.metadata.status === 'new') && (
418
+ <>{renderTagStatus('unstarted')}</>
419
+ )}
420
+ {data.metadata.status === 'completed' && (
421
+ <>{renderTagStatus('completed')}</>
422
+ )}
423
+ {data.metadata.status === 'in_progress' && (
424
+ <>{renderTagStatus('inprogress', data.metadata.workflow_data?.[(data.metadata.step * 1 || 1) - 1].title)}</>
425
+ )}
426
+ </>
427
+ )
428
+ }
429
+ }}
430
+ />
431
+ ```
432
+
433
+ ### 使用额外过滤条件
434
+
435
+ ```javascript
436
+ <RecordGrid
437
+ subjectName="your-subject"
438
+ extraFilters={[
439
+ // MongoDB aggregation stages
440
+ { $match: { 'metadata.status': 'active' } },
441
+ { $lookup: { /* ... */ } }
442
+ ]}
443
+ />
444
+ ```
445
+
274
446
  ### 获取选中行
275
447
 
276
448
  ```javascript
@@ -355,6 +527,35 @@ A: 在 v2.0.0+ 版本中,`@tanstack/react-query` 已经打包进 dist,不需
355
527
  2. 清理缓存:`rm -rf node_modules/.cache && rm -rf .umi`
356
528
  3. 重新安装:`npm install @streams/record-grid`
357
529
 
530
+ ### Q: 字段权限设置按钮一直是灰色的
531
+
532
+ A: 权限设置按钮需要管理员权限才能使用。
533
+
534
+ **原因**:
535
+ - `authService.userInfo.type` 必须是 `'admin'` 或 `'system'`
536
+ - 如果 `userInfo` 是函数,需要返回包含 `type` 字段的对象
537
+
538
+ **解决方案**:
539
+
540
+ ```javascript
541
+ const authService = {
542
+ check: (auth) => authInfo?.check?.(auth),
543
+ userInfo: () => ({
544
+ username: 'user',
545
+ type: 'admin', // 必须是 'admin' 或 'system'
546
+ // ... 其他字段
547
+ }),
548
+ getAppInfo: () => appInfo
549
+ }
550
+
551
+ <RecordGridServiceProvider
552
+ dataService={DataService}
553
+ authService={authService}
554
+ >
555
+ <RecordGrid subjectName="your-subject" />
556
+ </RecordGridServiceProvider>
557
+ ```
558
+
358
559
  ### Q: 使用 Gantt 视图报错或显示空白
359
560
 
360
561
  A: **从 v2.0.0 开始,Gantt 功能改为可选模式!**