@nokecy/qc-ui-components 2.0.0-beta.0 → 2.0.0-beta.2
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/dist/cjs/ConfirmPro/index.d.ts +12 -9
- package/dist/cjs/ConfirmPro/index.js +11 -34
- package/dist/cjs/ag-grid-plus/ag-gridPlus.js +425 -157
- package/dist/cjs/ag-grid-plus/context/gridContext.d.ts +12 -1
- package/dist/cjs/ag-grid-plus/context/queryFormContext.d.ts +2 -0
- package/dist/cjs/ag-grid-plus/context/useSchemeDataFlow.js +8 -0
- package/dist/cjs/ag-grid-plus/density.d.ts +25 -0
- package/dist/cjs/ag-grid-plus/density.js +52 -0
- package/dist/cjs/ag-grid-plus/index.d.ts +1 -0
- package/dist/cjs/ag-grid-plus/index.js +7 -0
- package/dist/cjs/ag-grid-plus/index.less +43 -0
- package/dist/cjs/ag-grid-plus/interface.d.ts +58 -1
- package/dist/cjs/ag-grid-plus/interface.js +1 -1
- package/dist/cjs/ag-grid-plus/queryForm/index.d.ts +11 -0
- package/dist/cjs/ag-grid-plus/queryForm/index.js +62 -10
- package/dist/cjs/ag-grid-plus/queryForm/queryForm.d.ts +10 -0
- package/dist/cjs/ag-grid-plus/queryForm/queryForm.js +63 -26
- package/dist/cjs/ag-grid-plus/queryForm/queryValues.d.ts +9 -0
- package/dist/cjs/ag-grid-plus/queryForm/queryValues.js +61 -0
- package/dist/cjs/ag-grid-plus/rowColors.d.ts +12 -0
- package/dist/cjs/ag-grid-plus/rowColors.js +58 -0
- package/dist/cjs/ag-grid-plus/setting/ColumnConfigTable.d.ts +5 -0
- package/dist/cjs/ag-grid-plus/setting/ColumnConfigTable.js +14 -5
- package/dist/cjs/ag-grid-plus/setting/ColumnSetting.js +108 -76
- package/dist/cjs/ag-grid-plus/setting/QuerySchemeManager.js +10 -9
- package/dist/cjs/ag-grid-plus/setting/autoColumnMemory.d.ts +37 -0
- package/dist/cjs/ag-grid-plus/setting/autoColumnMemory.js +206 -0
- package/dist/cjs/ag-grid-plus/setting/columnGroupUtils.d.ts +2 -0
- package/dist/cjs/ag-grid-plus/setting/columnGroupUtils.js +19 -1
- package/dist/cjs/ag-grid-plus/setting/index.js +5 -14
- package/dist/cjs/ag-grid-plus/settingItem/index.d.ts +11 -1
- package/dist/cjs/ag-grid-plus/settingItem/index.js +34 -12
- package/dist/cjs/ag-grid-plus/shared/EmptyIllustration.d.ts +16 -0
- package/dist/cjs/ag-grid-plus/shared/EmptyIllustration.js +87 -0
- package/dist/cjs/ag-grid-plus/shared/NoRowsOverlay.js +9 -1
- package/dist/cjs/ag-grid-plus/shared/SkeletonOverlay.d.ts +11 -0
- package/dist/cjs/ag-grid-plus/shared/SkeletonOverlay.js +40 -0
- package/dist/cjs/ag-grid-plus/shared/storage/schemeStorageAdapter.d.ts +1 -1
- package/dist/cjs/ag-grid-plus/theme.d.ts +7 -1
- package/dist/cjs/ag-grid-plus/theme.js +31 -6
- package/dist/cjs/ag-grid-plus/toolBar/OverflowActions.d.ts +16 -0
- package/dist/cjs/ag-grid-plus/toolBar/OverflowActions.js +128 -0
- package/dist/cjs/ag-grid-plus/toolBar/index.d.ts +3 -1
- package/dist/cjs/ag-grid-plus/toolBar/index.js +43 -35
- package/dist/cjs/ag-grid-plus/toolBar/leftContent.d.ts +2 -2
- package/dist/cjs/ag-grid-plus/toolBar/leftContent.js +2 -2
- package/dist/cjs/ag-grid-plus/toolBar/overflow.d.ts +20 -0
- package/dist/cjs/ag-grid-plus/toolBar/overflow.js +48 -0
- package/dist/cjs/ag-grid-plus/toolBar/style.js +71 -15
- package/dist/cjs/ag-grid-plus/types.d.ts +6 -0
- package/dist/cjs/ag-grid-plus/utils/agGridCompat.js +12 -3
- package/dist/cjs/ag-grid-plus/utils/agGridLicenseNotice.d.ts +7 -0
- package/dist/cjs/ag-grid-plus/utils/agGridLicenseNotice.js +105 -0
- package/dist/cjs/ag-grid-plus/utils/columnProcessors.d.ts +3 -0
- package/dist/cjs/ag-grid-plus/utils/columnProcessors.js +13 -2
- package/dist/cjs/ag-grid-plus/utils/constants.d.ts +3 -2
- package/dist/cjs/ag-grid-plus/utils/constants.js +3 -2
- package/dist/cjs/ag-grid-plus/utils/crossPageSelection.d.ts +21 -0
- package/dist/cjs/ag-grid-plus/utils/crossPageSelection.js +58 -0
- package/dist/cjs/ag-grid-plus/utils/emptyState.d.ts +2 -0
- package/dist/cjs/ag-grid-plus/utils/emptyState.js +9 -5
- package/dist/cjs/ag-grid-plus/utils/listKeyboard.d.ts +24 -0
- package/dist/cjs/ag-grid-plus/utils/listKeyboard.js +83 -0
- package/dist/cjs/ag-grid-plus/utils/pagination.d.ts +26 -0
- package/dist/cjs/ag-grid-plus/utils/pagination.js +69 -0
- package/dist/cjs/ag-grid-plus/utils/queryDispatch.d.ts +7 -0
- package/dist/cjs/ag-grid-plus/utils/queryDispatch.js +17 -0
- package/dist/cjs/ag-grid-plus/utils/statusPill.d.ts +25 -0
- package/dist/cjs/ag-grid-plus/utils/statusPill.js +196 -0
- package/dist/cjs/ag-grid-plus/utils/valueEnumColor.d.ts +6 -1
- package/dist/cjs/ag-grid-plus/utils/valueEnumColor.js +13 -9
- package/dist/cjs/ag-grid-plus/utils/valueFormat.d.ts +19 -0
- package/dist/cjs/ag-grid-plus/utils/valueFormat.js +73 -0
- package/dist/cjs/ag-grid-plus/utils.js +3 -2
- package/dist/cjs/array-table/arrayAddBtn.d.ts +1 -0
- package/dist/cjs/array-table/arrayAddBtn.js +2 -2
- package/dist/cjs/array-table/autoHeight.d.ts +18 -0
- package/dist/cjs/array-table/autoHeight.js +30 -0
- package/dist/cjs/array-table/batchRemove.d.ts +2 -2
- package/dist/cjs/array-table/cellEditorMarker.d.ts +18 -0
- package/dist/cjs/array-table/cellEditorMarker.js +92 -0
- package/dist/cjs/array-table/errorLocator.d.ts +29 -0
- package/dist/cjs/array-table/errorLocator.js +101 -0
- package/dist/cjs/array-table/hooks.d.ts +52 -4
- package/dist/cjs/array-table/hooks.js +251 -18
- package/dist/cjs/array-table/index.d.ts +6 -0
- package/dist/cjs/array-table/index.js +167 -23
- package/dist/cjs/array-table/interface.d.ts +22 -0
- package/dist/cjs/array-table/preview.js +39 -5
- package/dist/cjs/array-table/rowFeedback.d.ts +2 -2
- package/dist/cjs/array-table/rowFeedback.js +8 -8
- package/dist/cjs/array-table/summary.d.ts +25 -0
- package/dist/cjs/array-table/summary.js +70 -0
- package/dist/cjs/array-table/theme.d.ts +35 -5
- package/dist/cjs/array-table/theme.js +49 -12
- package/dist/cjs/array-table/title.d.ts +3 -0
- package/dist/cjs/array-table/title.js +29 -0
- package/dist/cjs/array-table/utils.d.ts +2 -1
- package/dist/cjs/array-table/utils.js +94 -23
- package/dist/cjs/card/pro-card/Card/useLegacyItems.d.ts +1 -1
- package/dist/cjs/dateCellEditor/DateCellEditor.d.ts +5 -0
- package/dist/cjs/dateCellEditor/DateCellEditor.js +42 -17
- package/dist/cjs/deleteConfirm/index.d.ts +14 -0
- package/dist/cjs/deleteConfirm/index.js +73 -12
- package/dist/cjs/dialogSelect/index.d.ts +19 -0
- package/dist/cjs/dialogSelect/index.js +189 -15
- package/dist/cjs/dialogSelect/index.less +18 -0
- package/dist/cjs/documentPage/documentPage.d.ts +6 -3
- package/dist/cjs/documentPage/documentPage.js +23 -8
- package/dist/cjs/documentPage/index.d.ts +2 -0
- package/dist/cjs/documentPage/index.js +19 -0
- package/dist/cjs/documentPage/leaveGuard.d.ts +31 -0
- package/dist/cjs/documentPage/leaveGuard.js +91 -0
- package/dist/cjs/draggableModal/index.d.ts +24 -1
- package/dist/cjs/draggableModal/index.js +36 -6
- package/dist/cjs/fullScreenAlert/index.less +10 -10
- package/dist/cjs/index.d.ts +3 -0
- package/dist/cjs/index.js +22 -0
- package/dist/cjs/readPretty/arrayTable.js +5 -1
- package/dist/cjs/scanCollect/ScanFeedbackInput.d.ts +26 -0
- package/dist/cjs/scanCollect/ScanFeedbackInput.js +113 -0
- package/dist/cjs/scanCollect/index.d.ts +4 -0
- package/dist/cjs/scanCollect/index.js +14 -0
- package/dist/cjs/scanCollect/scanSound.d.ts +15 -0
- package/dist/cjs/scanCollect/scanSound.js +91 -0
- package/dist/esm/ConfirmPro/index.d.ts +12 -9
- package/dist/esm/ConfirmPro/index.js +11 -34
- package/dist/esm/ag-grid-plus/ag-gridPlus.js +426 -157
- package/dist/esm/ag-grid-plus/context/gridContext.d.ts +12 -1
- package/dist/esm/ag-grid-plus/context/queryFormContext.d.ts +2 -0
- package/dist/esm/ag-grid-plus/context/useSchemeDataFlow.js +8 -0
- package/dist/esm/ag-grid-plus/density.d.ts +25 -0
- package/dist/esm/ag-grid-plus/density.js +45 -0
- package/dist/esm/ag-grid-plus/index.d.ts +1 -0
- package/dist/esm/ag-grid-plus/index.js +3 -0
- package/dist/esm/ag-grid-plus/index.less +43 -0
- package/dist/esm/ag-grid-plus/interface.d.ts +58 -1
- package/dist/esm/ag-grid-plus/interface.js +2 -0
- package/dist/esm/ag-grid-plus/queryForm/index.d.ts +11 -0
- package/dist/esm/ag-grid-plus/queryForm/index.js +62 -10
- package/dist/esm/ag-grid-plus/queryForm/queryForm.d.ts +10 -0
- package/dist/esm/ag-grid-plus/queryForm/queryForm.js +64 -26
- package/dist/esm/ag-grid-plus/queryForm/queryValues.d.ts +9 -0
- package/dist/esm/ag-grid-plus/queryForm/queryValues.js +54 -0
- package/dist/esm/ag-grid-plus/rowColors.d.ts +12 -0
- package/dist/esm/ag-grid-plus/rowColors.js +50 -0
- package/dist/esm/ag-grid-plus/setting/ColumnConfigTable.d.ts +5 -0
- package/dist/esm/ag-grid-plus/setting/ColumnConfigTable.js +14 -5
- package/dist/esm/ag-grid-plus/setting/ColumnSetting.js +110 -78
- package/dist/esm/ag-grid-plus/setting/QuerySchemeManager.js +10 -9
- package/dist/esm/ag-grid-plus/setting/autoColumnMemory.d.ts +37 -0
- package/dist/esm/ag-grid-plus/setting/autoColumnMemory.js +198 -0
- package/dist/esm/ag-grid-plus/setting/columnGroupUtils.d.ts +2 -0
- package/dist/esm/ag-grid-plus/setting/columnGroupUtils.js +18 -1
- package/dist/esm/ag-grid-plus/setting/index.js +6 -15
- package/dist/esm/ag-grid-plus/settingItem/index.d.ts +11 -1
- package/dist/esm/ag-grid-plus/settingItem/index.js +35 -13
- package/dist/esm/ag-grid-plus/shared/EmptyIllustration.d.ts +16 -0
- package/dist/esm/ag-grid-plus/shared/EmptyIllustration.js +82 -0
- package/dist/esm/ag-grid-plus/shared/NoRowsOverlay.js +9 -1
- package/dist/esm/ag-grid-plus/shared/SkeletonOverlay.d.ts +11 -0
- package/dist/esm/ag-grid-plus/shared/SkeletonOverlay.js +34 -0
- package/dist/esm/ag-grid-plus/shared/storage/schemeStorageAdapter.d.ts +1 -1
- package/dist/esm/ag-grid-plus/theme.d.ts +7 -1
- package/dist/esm/ag-grid-plus/theme.js +31 -6
- package/dist/esm/ag-grid-plus/toolBar/OverflowActions.d.ts +16 -0
- package/dist/esm/ag-grid-plus/toolBar/OverflowActions.js +120 -0
- package/dist/esm/ag-grid-plus/toolBar/index.d.ts +3 -1
- package/dist/esm/ag-grid-plus/toolBar/index.js +43 -35
- package/dist/esm/ag-grid-plus/toolBar/leftContent.d.ts +2 -2
- package/dist/esm/ag-grid-plus/toolBar/leftContent.js +2 -2
- package/dist/esm/ag-grid-plus/toolBar/overflow.d.ts +20 -0
- package/dist/esm/ag-grid-plus/toolBar/overflow.js +41 -0
- package/dist/esm/ag-grid-plus/toolBar/style.js +71 -15
- package/dist/esm/ag-grid-plus/types.d.ts +6 -0
- package/dist/esm/ag-grid-plus/utils/agGridCompat.js +12 -3
- package/dist/esm/ag-grid-plus/utils/agGridLicenseNotice.d.ts +7 -0
- package/dist/esm/ag-grid-plus/utils/agGridLicenseNotice.js +97 -0
- package/dist/esm/ag-grid-plus/utils/columnProcessors.d.ts +3 -0
- package/dist/esm/ag-grid-plus/utils/columnProcessors.js +14 -3
- package/dist/esm/ag-grid-plus/utils/constants.d.ts +3 -2
- package/dist/esm/ag-grid-plus/utils/constants.js +3 -2
- package/dist/esm/ag-grid-plus/utils/crossPageSelection.d.ts +21 -0
- package/dist/esm/ag-grid-plus/utils/crossPageSelection.js +52 -0
- package/dist/esm/ag-grid-plus/utils/emptyState.d.ts +2 -0
- package/dist/esm/ag-grid-plus/utils/emptyState.js +9 -5
- package/dist/esm/ag-grid-plus/utils/listKeyboard.d.ts +24 -0
- package/dist/esm/ag-grid-plus/utils/listKeyboard.js +77 -0
- package/dist/esm/ag-grid-plus/utils/pagination.d.ts +26 -0
- package/dist/esm/ag-grid-plus/utils/pagination.js +60 -0
- package/dist/esm/ag-grid-plus/utils/queryDispatch.d.ts +7 -0
- package/dist/esm/ag-grid-plus/utils/queryDispatch.js +11 -0
- package/dist/esm/ag-grid-plus/utils/statusPill.d.ts +25 -0
- package/dist/esm/ag-grid-plus/utils/statusPill.js +192 -0
- package/dist/esm/ag-grid-plus/utils/valueEnumColor.d.ts +6 -1
- package/dist/esm/ag-grid-plus/utils/valueEnumColor.js +12 -8
- package/dist/esm/ag-grid-plus/utils/valueFormat.d.ts +19 -0
- package/dist/esm/ag-grid-plus/utils/valueFormat.js +63 -0
- package/dist/esm/ag-grid-plus/utils.js +3 -2
- package/dist/esm/array-table/arrayAddBtn.d.ts +1 -0
- package/dist/esm/array-table/arrayAddBtn.js +1 -1
- package/dist/esm/array-table/autoHeight.d.ts +18 -0
- package/dist/esm/array-table/autoHeight.js +25 -0
- package/dist/esm/array-table/batchRemove.d.ts +2 -2
- package/dist/esm/array-table/cellEditorMarker.d.ts +18 -0
- package/dist/esm/array-table/cellEditorMarker.js +84 -0
- package/dist/esm/array-table/errorLocator.d.ts +29 -0
- package/dist/esm/array-table/errorLocator.js +95 -0
- package/dist/esm/array-table/hooks.d.ts +52 -4
- package/dist/esm/array-table/hooks.js +251 -17
- package/dist/esm/array-table/index.d.ts +6 -0
- package/dist/esm/array-table/index.js +170 -25
- package/dist/esm/array-table/interface.d.ts +22 -0
- package/dist/esm/array-table/preview.js +43 -7
- package/dist/esm/array-table/rowFeedback.d.ts +2 -2
- package/dist/esm/array-table/rowFeedback.js +8 -8
- package/dist/esm/array-table/summary.d.ts +25 -0
- package/dist/esm/array-table/summary.js +66 -0
- package/dist/esm/array-table/theme.d.ts +35 -5
- package/dist/esm/array-table/theme.js +47 -12
- package/dist/esm/array-table/title.d.ts +3 -0
- package/dist/esm/array-table/title.js +24 -0
- package/dist/esm/array-table/utils.d.ts +2 -1
- package/dist/esm/array-table/utils.js +93 -22
- package/dist/esm/card/pro-card/Card/useLegacyItems.d.ts +1 -1
- package/dist/esm/dateCellEditor/DateCellEditor.d.ts +5 -0
- package/dist/esm/dateCellEditor/DateCellEditor.js +42 -17
- package/dist/esm/deleteConfirm/index.d.ts +14 -0
- package/dist/esm/deleteConfirm/index.js +72 -12
- package/dist/esm/dialogSelect/index.d.ts +19 -0
- package/dist/esm/dialogSelect/index.js +190 -16
- package/dist/esm/dialogSelect/index.less +18 -0
- package/dist/esm/documentPage/documentPage.d.ts +6 -3
- package/dist/esm/documentPage/documentPage.js +23 -8
- package/dist/esm/documentPage/index.d.ts +2 -0
- package/dist/esm/documentPage/index.js +1 -0
- package/dist/esm/documentPage/leaveGuard.d.ts +31 -0
- package/dist/esm/documentPage/leaveGuard.js +86 -0
- package/dist/esm/draggableModal/index.d.ts +24 -1
- package/dist/esm/draggableModal/index.js +35 -5
- package/dist/esm/fullScreenAlert/index.less +10 -10
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/readPretty/arrayTable.js +6 -2
- package/dist/esm/scanCollect/ScanFeedbackInput.d.ts +26 -0
- package/dist/esm/scanCollect/ScanFeedbackInput.js +107 -0
- package/dist/esm/scanCollect/index.d.ts +4 -0
- package/dist/esm/scanCollect/index.js +2 -0
- package/dist/esm/scanCollect/scanSound.d.ts +15 -0
- package/dist/esm/scanCollect/scanSound.js +84 -0
- package/package.json +2 -2
|
@@ -2,6 +2,7 @@ import React from "react";
|
|
|
2
2
|
import type { ColumnScheme, QueryScheme, CurrentSchemeDto } from "../shared/storage/schemeStorageAdapter";
|
|
3
3
|
import type { GlobalConfigPermissions } from '../shared/permissions/globalConfigPermissions';
|
|
4
4
|
import type { HostEntityExtensions } from '../types';
|
|
5
|
+
import type { GridDensity, GridDensityOverrides } from '../density';
|
|
5
6
|
/**
|
|
6
7
|
* 方案管理 API 接口
|
|
7
8
|
*
|
|
@@ -153,8 +154,9 @@ export interface GridPlusContextValue extends SchemeManagementAPI {
|
|
|
153
154
|
* 将当前列配置应用为全局默认(管理员操作)
|
|
154
155
|
* @param gridId 表格标识
|
|
155
156
|
* @param schemeId 源方案ID(可选,不传则使用当前激活的方案)
|
|
157
|
+
* @returns 应用后的全局方案 ID(useSchemeManager 返回;其他实现可不返回)
|
|
156
158
|
*/
|
|
157
|
-
applySchemeToGlobal?: (gridId: string, schemeId?: string) => Promise<void>;
|
|
159
|
+
applySchemeToGlobal?: (gridId: string, schemeId?: string) => Promise<string | void>;
|
|
158
160
|
/**
|
|
159
161
|
* 重置当前用户配置,回退到全局配置
|
|
160
162
|
* @param gridId 表格标识
|
|
@@ -184,5 +186,14 @@ export interface GridPlusContextValue extends SchemeManagementAPI {
|
|
|
184
186
|
* 来自后端 ABP 配置,用于 AgGridPlus 根据 entityType 自动注入扩展列
|
|
185
187
|
*/
|
|
186
188
|
hostEntityExtensions?: HostEntityExtensions;
|
|
189
|
+
/**
|
|
190
|
+
* 表格密度档位:行高、表头高、字号、单元格 padding 由它派生。
|
|
191
|
+
* 不传则保持出厂外观(字号 12、行高 30、表头 25),页面 `rowHeight` / `headerHeight` / `theme` 仍可覆盖。
|
|
192
|
+
*/
|
|
193
|
+
density?: GridDensity;
|
|
194
|
+
/** 自定义三档数值,只写要改的字段,其余沿用规范值。 */
|
|
195
|
+
densityValues?: GridDensityOverrides;
|
|
196
|
+
/** 列设置里切换密度时回调;不传则列设置不显示密度入口。由宿主/Provider 接管密度状态。 */
|
|
197
|
+
onDensityChange?: (density: GridDensity) => void;
|
|
187
198
|
}
|
|
188
199
|
export declare const GridPlusContext: React.Context<GridPlusContextValue>;
|
|
@@ -14,6 +14,8 @@ export interface QueryFormContextValue {
|
|
|
14
14
|
currentQueryOrder?: string[];
|
|
15
15
|
/** 更新查询项顺序 */
|
|
16
16
|
updateQueryOrder?: (order: string[]) => void;
|
|
17
|
+
/** 读取查询区当前条件值(已去空、可持久化),用于把条件值存进查询方案 */
|
|
18
|
+
getQueryValues?: () => Record<string, any>;
|
|
17
19
|
}
|
|
18
20
|
export declare const QueryFormContext: React.Context<QueryFormContextValue>;
|
|
19
21
|
/** 读取查询表单上下文。@author nokecy */
|
|
@@ -81,6 +81,14 @@ export function useSchemeSource(gridKey, schemeData) {
|
|
|
81
81
|
return s.id === currentQuerySchemeId;
|
|
82
82
|
});
|
|
83
83
|
var isUsingGlobalQueryFallback = false;
|
|
84
|
+
|
|
85
|
+
// 用户自己设为默认的查询方案:没有显式选择时进入页面自动应用,优先于全局方案
|
|
86
|
+
if (!currentQueryScheme && querySchemeList.length > 0) {
|
|
87
|
+
var userDefault = querySchemeList.find(function (s) {
|
|
88
|
+
return s.isDefault && !s.isGlobal;
|
|
89
|
+
});
|
|
90
|
+
if (userDefault) currentQueryScheme = userDefault;
|
|
91
|
+
}
|
|
84
92
|
if (!currentQueryScheme && querySchemeList.length > 0) {
|
|
85
93
|
var globalQuerySchemes = querySchemeList.filter(function (s) {
|
|
86
94
|
return s.isGlobal === true;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 表格密度:三档数值由 Provider 注入,页面不自设行高、表头高(DESIGN.md §2)。
|
|
3
|
+
* @author nokecy
|
|
4
|
+
*/
|
|
5
|
+
export type GridDensity = 'comfort' | 'compact' | 'dense';
|
|
6
|
+
export interface GridDensityValues {
|
|
7
|
+
/** 表格行高 */
|
|
8
|
+
rowHeight: number;
|
|
9
|
+
/** 表头高 */
|
|
10
|
+
headerHeight: number;
|
|
11
|
+
/** 正文与表头字号 */
|
|
12
|
+
fontSize: number;
|
|
13
|
+
/** 单元格上下内边距 */
|
|
14
|
+
paddingBlock: number;
|
|
15
|
+
/** 单元格左右内边距 */
|
|
16
|
+
paddingInline: number;
|
|
17
|
+
}
|
|
18
|
+
/** 规范三档:行高 40/32/28,表头 40/36/32,字号 14/13/12,padding 9·12 / 5·10 / 4·8。 */
|
|
19
|
+
export declare const GRID_DENSITY_PRESETS: Record<GridDensity, GridDensityValues>;
|
|
20
|
+
/** 自定义三档数值:只需写要改的字段,其余沿用规范值。 */
|
|
21
|
+
export type GridDensityOverrides = Partial<Record<GridDensity, Partial<GridDensityValues>>>;
|
|
22
|
+
/**
|
|
23
|
+
* 解析密度数值。没有注入 density 时返回 undefined,调用方保持出厂外观不变。
|
|
24
|
+
*/
|
|
25
|
+
export declare function resolveGridDensity(density?: GridDensity, overrides?: GridDensityOverrides): GridDensityValues | undefined;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
3
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
4
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
5
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
6
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
7
|
+
/**
|
|
8
|
+
* 表格密度:三档数值由 Provider 注入,页面不自设行高、表头高(DESIGN.md §2)。
|
|
9
|
+
* @author nokecy
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/** 规范三档:行高 40/32/28,表头 40/36/32,字号 14/13/12,padding 9·12 / 5·10 / 4·8。 */
|
|
13
|
+
export var GRID_DENSITY_PRESETS = {
|
|
14
|
+
comfort: {
|
|
15
|
+
rowHeight: 40,
|
|
16
|
+
headerHeight: 40,
|
|
17
|
+
fontSize: 14,
|
|
18
|
+
paddingBlock: 9,
|
|
19
|
+
paddingInline: 12
|
|
20
|
+
},
|
|
21
|
+
compact: {
|
|
22
|
+
rowHeight: 32,
|
|
23
|
+
headerHeight: 36,
|
|
24
|
+
fontSize: 13,
|
|
25
|
+
paddingBlock: 5,
|
|
26
|
+
paddingInline: 10
|
|
27
|
+
},
|
|
28
|
+
dense: {
|
|
29
|
+
rowHeight: 28,
|
|
30
|
+
headerHeight: 32,
|
|
31
|
+
fontSize: 12,
|
|
32
|
+
paddingBlock: 4,
|
|
33
|
+
paddingInline: 8
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
/** 自定义三档数值:只需写要改的字段,其余沿用规范值。 */
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* 解析密度数值。没有注入 density 时返回 undefined,调用方保持出厂外观不变。
|
|
41
|
+
*/
|
|
42
|
+
export function resolveGridDensity(density, overrides) {
|
|
43
|
+
if (!density || !GRID_DENSITY_PRESETS[density]) return undefined;
|
|
44
|
+
return _objectSpread(_objectSpread({}, GRID_DENSITY_PRESETS[density]), overrides === null || overrides === void 0 ? void 0 : overrides[density]);
|
|
45
|
+
}
|
|
@@ -16,3 +16,4 @@ export type { LocalStorageAdapterConfig } from "./shared/storage/localStorageAda
|
|
|
16
16
|
export type { GlobalConfigPermissions } from "./shared/permissions/globalConfigPermissions";
|
|
17
17
|
export type { EntityExtensionField, EntityExtensionConfig, HostEntityExtensions } from "./types";
|
|
18
18
|
export { fieldToColumnDef, getEntityExtensionColumns } from "./utils/entityExtensionColumns";
|
|
19
|
+
export { setAgGridLicenseKey } from "./utils/agGridLicenseNotice";
|
|
@@ -20,5 +20,8 @@ export { BackendApiSchemeAdapter } from "./shared/storage/backendApiAdapter";
|
|
|
20
20
|
// 实体扩展列工具函数 @author nokecy
|
|
21
21
|
export { fieldToColumnDef, getEntityExtensionColumns } from "./utils/entityExtensionColumns";
|
|
22
22
|
|
|
23
|
+
// 正式 AG Grid Enterprise 授权入口:宿主注入 key 后组件库不再静默试用提示。
|
|
24
|
+
export { setAgGridLicenseKey } from "./utils/agGridLicenseNotice";
|
|
25
|
+
|
|
23
26
|
// 注意: 旧的查询方案管理功能已废弃
|
|
24
27
|
// 相关导出已移除,请使用集中式方案管理 API (useSchemeManager/useGridSchemes)
|
|
@@ -1,3 +1,39 @@
|
|
|
1
|
+
.qc-table-container {
|
|
2
|
+
position: relative;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
// 刷新时表里已有数据:不盖遮罩,只在表格顶部给一条 2px 的流动加载条
|
|
6
|
+
.qc-grid-busy-bar {
|
|
7
|
+
position: absolute;
|
|
8
|
+
top: 0;
|
|
9
|
+
left: 0;
|
|
10
|
+
right: 0;
|
|
11
|
+
height: 2px;
|
|
12
|
+
z-index: 3;
|
|
13
|
+
pointer-events: none;
|
|
14
|
+
overflow: hidden;
|
|
15
|
+
|
|
16
|
+
> span {
|
|
17
|
+
display: block;
|
|
18
|
+
height: 100%;
|
|
19
|
+
width: 30%;
|
|
20
|
+
animation: qc-grid-busy-slide 1.2s ease-in-out infinite;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@keyframes qc-grid-busy-slide {
|
|
25
|
+
0% { transform: translateX(-100%); }
|
|
26
|
+
100% { transform: translateX(340%); }
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
@media (prefers-reduced-motion: reduce) {
|
|
30
|
+
.qc-grid-busy-bar > span {
|
|
31
|
+
width: 100%;
|
|
32
|
+
animation: none;
|
|
33
|
+
opacity: 0.6;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
1
37
|
.grid-spin {
|
|
2
38
|
height: 100%;
|
|
3
39
|
|
|
@@ -49,6 +85,13 @@
|
|
|
49
85
|
text-align: right !important;
|
|
50
86
|
}
|
|
51
87
|
|
|
88
|
+
// AG Grid Enterprise 试用水印:组件库不内置 license key(授权由宿主通过 setAgGridLicenseKey 注入),
|
|
89
|
+
// 未注入时 AG Grid 会在表格右下角叠一层 .ag-watermark。这里统一关闭,宿主不必各自处理。
|
|
90
|
+
// 限定在组件库表格容器内,不影响页面上其他独立接入的 AG Grid 实例。
|
|
91
|
+
.qc-table-container .ag-watermark {
|
|
92
|
+
display: none !important;
|
|
93
|
+
}
|
|
94
|
+
|
|
52
95
|
// 空态浮层里的「重试」「新建」「清空筛选」要能点:AG-Grid 给 .ag-overlay 设了 pointer-events: none,
|
|
53
96
|
// 只给加载浮层放开,空态浮层里的按钮因此点不到。只放开可交互元素,空白处仍穿透到表格。@author nokecy
|
|
54
97
|
.ag-overlay-no-rows-wrapper :is(button, a, input, [role='button']) {
|
|
@@ -4,8 +4,24 @@ import React, { CSSProperties, ReactNode } from "react";
|
|
|
4
4
|
import type { GridPlusError } from "./errors/index";
|
|
5
5
|
import type { EmptyStateTexts } from "./utils/emptyState";
|
|
6
6
|
import type { DateQueryPrecisionResolver } from "./queryForm/datePrecision";
|
|
7
|
+
/** 当前分页状态;页码 1-based。 */
|
|
8
|
+
interface GridPagination {
|
|
9
|
+
current: number;
|
|
10
|
+
pageSize: number;
|
|
11
|
+
/** 总条数;request 模式下首次请求返回前为 0 */
|
|
12
|
+
total: number;
|
|
13
|
+
}
|
|
7
14
|
interface GridRef {
|
|
8
15
|
onRefresh: () => void;
|
|
16
|
+
/**
|
|
17
|
+
* 跳到第 n 页(1-based),按总页数收口;页码变化时自动重新请求。
|
|
18
|
+
* 已在该页时不重复请求,需要重取请用 onRefresh。
|
|
19
|
+
*/
|
|
20
|
+
goToPage: (page: number) => void;
|
|
21
|
+
/** 回到第 1 页,等价 goToPage(1)。 */
|
|
22
|
+
resetPage: () => void;
|
|
23
|
+
/** 读取最新分页状态(快照,不随后续翻页变化)。 */
|
|
24
|
+
getPagination: () => GridPagination;
|
|
9
25
|
}
|
|
10
26
|
interface GridProps extends AgGridReactProps {
|
|
11
27
|
/**
|
|
@@ -86,6 +102,23 @@ interface GridProps extends AgGridReactProps {
|
|
|
86
102
|
*/
|
|
87
103
|
pageSize?: number;
|
|
88
104
|
hidePagination?: boolean;
|
|
105
|
+
/**
|
|
106
|
+
* 分页器的页码跳转,默认 false(保持原行为)。DESIGN.md §7.3 要求列表带页码跳转,需要的页面显式开启。
|
|
107
|
+
* @author nokecy
|
|
108
|
+
*/
|
|
109
|
+
showQuickJumper?: boolean;
|
|
110
|
+
/**
|
|
111
|
+
* 分页器的每页条数切换。不传走 antd 缺省(总数 > 50 才出现);传 true 强制显示。
|
|
112
|
+
* @author nokecy
|
|
113
|
+
*/
|
|
114
|
+
showSizeChanger?: boolean;
|
|
115
|
+
/**
|
|
116
|
+
* 列头筛选按钮是否显示,默认 true(保持原行为)。传 false 全局收起漏斗,列的 `filter` 不变,
|
|
117
|
+
* 查询区仍可按这些列查询;需要个别列保留时在该列写 `suppressHeaderFilterButton: false`。
|
|
118
|
+
* 页面传入的 `defaultColDef` 与内置默认合并(页面优先),不再被覆盖。
|
|
119
|
+
* @author nokecy
|
|
120
|
+
*/
|
|
121
|
+
headerFilter?: boolean;
|
|
89
122
|
gridRef?: React.Ref<GridRef | undefined>;
|
|
90
123
|
/**
|
|
91
124
|
* 选中行变化回调函数
|
|
@@ -97,6 +130,11 @@ interface GridProps extends AgGridReactProps {
|
|
|
97
130
|
* @author nokecy
|
|
98
131
|
*/
|
|
99
132
|
onQueryValuesChange?: (values: Record<string, any>) => void;
|
|
133
|
+
/**
|
|
134
|
+
* 在表头上拖拽列宽、列序后自动记忆到列方案(需要 gridKey),不必进「列方案管理」保存;默认开启。
|
|
135
|
+
* 全局方案不会被改写,会在个人方案上叠加。设为 false 回到必须手动保存。
|
|
136
|
+
*/
|
|
137
|
+
autoRememberColumns?: boolean;
|
|
100
138
|
/**
|
|
101
139
|
* 错误处理回调函数
|
|
102
140
|
* 当组件发生错误时调用,可用于自定义错误处理逻辑
|
|
@@ -147,6 +185,25 @@ interface GridProps extends AgGridReactProps {
|
|
|
147
185
|
* @author nokecy
|
|
148
186
|
*/
|
|
149
187
|
entityType?: string;
|
|
188
|
+
/**
|
|
189
|
+
* 跨页勾选(DESIGN.md §7.4):翻页保留已勾选的行,回到该页时自动重新勾上。
|
|
190
|
+
* 开启后 `onSelectedRowsChange` 收到的是所有页的并集。默认 false。
|
|
191
|
+
* @author nokecy
|
|
192
|
+
*/
|
|
193
|
+
crossPageSelection?: boolean;
|
|
194
|
+
/** 跨页勾选变化回调:已选总数、不在当前页的数量,以及清除入口(底部批量选择条用)。 */
|
|
195
|
+
onCrossPageSelectionChange?: (info: {
|
|
196
|
+
rows: any[];
|
|
197
|
+
count: number;
|
|
198
|
+
outsideCurrentPage: number;
|
|
199
|
+
clear: () => void;
|
|
200
|
+
}) => void;
|
|
201
|
+
/**
|
|
202
|
+
* 数字千分位、空值显示「—」的出厂格式。列上自己写了 `valueFormatter` 的不受影响;
|
|
203
|
+
* 传 false 整体关闭。默认 true。
|
|
204
|
+
* @author nokecy
|
|
205
|
+
*/
|
|
206
|
+
defaultValueFormat?: boolean;
|
|
150
207
|
}
|
|
151
208
|
interface AgGridColumnPropsClone extends ColDef {
|
|
152
209
|
/**
|
|
@@ -205,4 +262,4 @@ interface AgGridColumnPropsClone extends ColDef {
|
|
|
205
262
|
calculateType?: "sum" | "avg" | "standardDeviation" | false;
|
|
206
263
|
}
|
|
207
264
|
declare function AgGridColumn(props: AgGridColumnPropsClone | ColGroupDef): React.JSX.Element;
|
|
208
|
-
export { GridProps, AgGridColumn, GridRef, AgGridColumnPropsClone };
|
|
265
|
+
export { GridProps, AgGridColumn, GridRef, GridPagination, AgGridColumnPropsClone };
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ColDef, ColumnState, GridApi } from 'ag-grid-community';
|
|
2
2
|
import React from 'react';
|
|
3
|
+
import { type QueryFormApi } from './queryValues';
|
|
3
4
|
import './index.less';
|
|
4
5
|
/** 查询区初始化兜底:requestAnimationFrame 迟迟不触发时,最迟这么久后通知首查(毫秒)。@author nokecy */
|
|
5
6
|
export declare const INIT_FALLBACK_DELAY = 300;
|
|
@@ -16,5 +17,15 @@ declare const FormRender: (props: {
|
|
|
16
17
|
onInit?: ((defaultValues: any) => void) | undefined;
|
|
17
18
|
/** 查询条件值变化(输入、默认值落位、重置)时回调,参数为当前条件快照;不触发查询。@author nokecy */
|
|
18
19
|
onValuesChange?: ((values: Record<string, any>) => void) | undefined;
|
|
20
|
+
/** 当前应用的查询方案:名称显示在查询区;方案带条件值时,方案变化会把值落到查询区并查询。 */
|
|
21
|
+
scheme?: {
|
|
22
|
+
id: string;
|
|
23
|
+
name: string;
|
|
24
|
+
values?: Record<string, any> | undefined;
|
|
25
|
+
} | undefined;
|
|
26
|
+
/** 点「重置」时通知宿主取消当前应用的查询方案(只取消应用状态,不动已保存方案)。 */
|
|
27
|
+
onResetScheme?: (() => void) | undefined;
|
|
28
|
+
/** 暴露查询区操作句柄(读取当前条件值),供查询方案管理保存条件值。 */
|
|
29
|
+
apiRef?: React.MutableRefObject<QueryFormApi | null> | undefined;
|
|
19
30
|
}) => React.JSX.Element;
|
|
20
31
|
export default FormRender;
|
|
@@ -16,7 +16,8 @@ import { createSchemaField } from '@nokecy/formily-react';
|
|
|
16
16
|
import { Button, theme } from 'antd';
|
|
17
17
|
import classNames from 'classnames';
|
|
18
18
|
import React, { useEffect, useMemo, useRef, useState } from 'react';
|
|
19
|
-
import QueryForm from "./queryForm";
|
|
19
|
+
import QueryForm, { QueryFormMetaContext } from "./queryForm";
|
|
20
|
+
import { reviveQueryValues, serializeQueryValues } from "./queryValues";
|
|
20
21
|
import { queryFormSchemaKey } from "./schemaKey";
|
|
21
22
|
import { resolveQueryColumns } from "./queryColumns";
|
|
22
23
|
import BoolSelect from "../_utils/boolSelect";
|
|
@@ -65,6 +66,26 @@ var FormRender = function FormRender(props) {
|
|
|
65
66
|
return form.unsubscribe(id);
|
|
66
67
|
};
|
|
67
68
|
}, [form]);
|
|
69
|
+
|
|
70
|
+
// 日期类查询项在方案里以字符串存放,应用时要还原成 dayjs。@author nokecy
|
|
71
|
+
var dateFieldsRef = useRef(new Set());
|
|
72
|
+
var initNotifiedRef = useRef(false);
|
|
73
|
+
var onQueryRef = useRef(props.onQuery);
|
|
74
|
+
onQueryRef.current = props.onQuery;
|
|
75
|
+
// onReset 被 schema 的组件属性捕获,只在 schema 变化时更新,回调必须走 ref 才不会拿到旧闭包。
|
|
76
|
+
var onResetSchemeRef = useRef(props.onResetScheme);
|
|
77
|
+
onResetSchemeRef.current = props.onResetScheme;
|
|
78
|
+
useEffect(function () {
|
|
79
|
+
if (!props.apiRef) return;
|
|
80
|
+
props.apiRef.current = {
|
|
81
|
+
getValues: function getValues() {
|
|
82
|
+
return serializeQueryValues(form.values);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
return function () {
|
|
86
|
+
props.apiRef.current = null;
|
|
87
|
+
};
|
|
88
|
+
}, [form, props.apiRef]);
|
|
68
89
|
var SchemaField = useMemo(function () {
|
|
69
90
|
return createSchemaField({
|
|
70
91
|
components: {
|
|
@@ -85,11 +106,14 @@ var FormRender = function FormRender(props) {
|
|
|
85
106
|
onQuery && onQuery(form.values);
|
|
86
107
|
};
|
|
87
108
|
var onReset = function onReset() {
|
|
109
|
+
var _onResetSchemeRef$cur, _onQueryRef$current;
|
|
88
110
|
// 使用 forceClear: true 强制清空所有字段,包括有默认值的字段
|
|
89
111
|
form.reset('*', {
|
|
90
112
|
forceClear: true
|
|
91
113
|
});
|
|
92
|
-
|
|
114
|
+
// 清空即恢复全量(§8):先取消方案,再按空条件只查一次;方案取消不会触发查询。
|
|
115
|
+
(_onResetSchemeRef$cur = onResetSchemeRef.current) === null || _onResetSchemeRef$cur === void 0 || _onResetSchemeRef$cur.call(onResetSchemeRef);
|
|
116
|
+
(_onQueryRef$current = onQueryRef.current) === null || _onQueryRef$current === void 0 || _onQueryRef$current.call(onQueryRef, {});
|
|
93
117
|
};
|
|
94
118
|
var getComponent = function getComponent(colDef) {
|
|
95
119
|
var component = colDef.searchComponent ? colDef.searchComponent : undefined;
|
|
@@ -144,6 +168,7 @@ var FormRender = function FormRender(props) {
|
|
|
144
168
|
var headerName = (_colDef$searchTitle = colDef.searchTitle) !== null && _colDef$searchTitle !== void 0 ? _colDef$searchTitle : colDef.headerName;
|
|
145
169
|
//表单自定义组件
|
|
146
170
|
var component = getComponent(colDef);
|
|
171
|
+
if (typeof component === 'string' && component.includes('DatePicker')) dateFieldsRef.current.add(name);
|
|
147
172
|
if (colDef.filter != false) {
|
|
148
173
|
var _colDef$searchCompone, _colDef$searchCompone2, _colDef$searchCompone3, _colDef$searchCompone4;
|
|
149
174
|
// 为多选下拉框添加maxTagCount配置
|
|
@@ -239,6 +264,7 @@ var FormRender = function FormRender(props) {
|
|
|
239
264
|
var notifyInit = function notifyInit() {
|
|
240
265
|
if (initialized) return;
|
|
241
266
|
initialized = true;
|
|
267
|
+
initNotifiedRef.current = true;
|
|
242
268
|
props.onInit && props.onInit(form.values);
|
|
243
269
|
};
|
|
244
270
|
requestAnimationFrame(function () {
|
|
@@ -247,19 +273,45 @@ var FormRender = function FormRender(props) {
|
|
|
247
273
|
setTimeout(notifyInit, INIT_FALLBACK_DELAY);
|
|
248
274
|
}
|
|
249
275
|
}, [schemaKey, defaultRows, props.defaultExpand]);
|
|
276
|
+
|
|
277
|
+
// 方案切换(含进入页面时自动带入默认方案):须在查询项 schema 生成之后,才知道哪些是日期字段;把方案里的条件值落到查询区,已初始化则立即查询。
|
|
278
|
+
var appliedSchemeIdRef = useRef(undefined);
|
|
279
|
+
var scheme = props.scheme;
|
|
280
|
+
useEffect(function () {
|
|
281
|
+
var _onQueryRef$current2;
|
|
282
|
+
// 方案被取消后清掉记录,用户再选同一个方案时才会重新应用。
|
|
283
|
+
if (!(scheme !== null && scheme !== void 0 && scheme.id)) {
|
|
284
|
+
appliedSchemeIdRef.current = undefined;
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
if (appliedSchemeIdRef.current === scheme.id) return;
|
|
288
|
+
appliedSchemeIdRef.current = scheme.id;
|
|
289
|
+
var saved = scheme.values;
|
|
290
|
+
if (!saved || Object.keys(saved).length === 0) return;
|
|
291
|
+
form.reset('*', {
|
|
292
|
+
forceClear: true
|
|
293
|
+
});
|
|
294
|
+
form.setValues(reviveQueryValues(saved, dateFieldsRef.current));
|
|
295
|
+
if (initNotifiedRef.current) (_onQueryRef$current2 = onQueryRef.current) === null || _onQueryRef$current2 === void 0 || _onQueryRef$current2.call(onQueryRef, _objectSpread({}, form.values));
|
|
296
|
+
}, [scheme === null || scheme === void 0 ? void 0 : scheme.id, form]);
|
|
250
297
|
return /*#__PURE__*/_jsx("div", {
|
|
251
298
|
className: classNames(className, "ag-grid-table-search ag-grid-table-search-query-filter"),
|
|
252
299
|
style: {
|
|
253
300
|
backgroundColor: token.colorBgContainer
|
|
254
301
|
},
|
|
255
|
-
children: /*#__PURE__*/_jsx(
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
302
|
+
children: /*#__PURE__*/_jsx(QueryFormMetaContext.Provider, {
|
|
303
|
+
value: {
|
|
304
|
+
schemeName: scheme === null || scheme === void 0 ? void 0 : scheme.name
|
|
305
|
+
},
|
|
306
|
+
children: /*#__PURE__*/_jsx(Form, {
|
|
307
|
+
form: form,
|
|
308
|
+
labelWidth: 120,
|
|
309
|
+
labelWrap: false,
|
|
310
|
+
feedbackLayout: "none",
|
|
311
|
+
onAutoSubmit: onSubmit,
|
|
312
|
+
children: /*#__PURE__*/_jsx(SchemaField, {
|
|
313
|
+
schema: schema
|
|
314
|
+
})
|
|
263
315
|
})
|
|
264
316
|
})
|
|
265
317
|
});
|
|
@@ -1,3 +1,13 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
/** 查询区外显条件数的上限(DESIGN.md §8)。 */
|
|
3
|
+
export declare const QUERY_MAX_COLUMNS = 8;
|
|
4
|
+
/** 单个查询项占的最小宽度(px),外显条数 = floor(可用宽度 / 它),封顶 QUERY_MAX_COLUMNS。 */
|
|
5
|
+
export declare const QUERY_ITEM_WIDTH = 240;
|
|
6
|
+
/** 折叠时外显的条件数:按钮区在表格之外,不再占一格。 */
|
|
7
|
+
export declare const getQueryCapacity: (maxRows: number, columns: number) => number;
|
|
8
|
+
/** 查询区当前应用的方案名等元信息,经 context 传给查询区,不走 schema。 */
|
|
9
|
+
export declare const QueryFormMetaContext: React.Context<{
|
|
10
|
+
schemeName?: string | undefined;
|
|
11
|
+
}>;
|
|
2
12
|
declare const QueryForm: React.MemoExoticComponent<import("@nokecy/formily-react").ReactFC<any>>;
|
|
3
13
|
export default QueryForm;
|
|
@@ -2,40 +2,44 @@ import { ClearOutlined, DownOutlined, SearchOutlined } from "@ant-design/icons";
|
|
|
2
2
|
import { FormButtonGroup, FormGrid, Submit } from "@nokecy/formily-antd";
|
|
3
3
|
import { observer } from "@nokecy/formily-react";
|
|
4
4
|
import { Button } from "antd";
|
|
5
|
-
import React, { useMemo, Fragment } from 'react';
|
|
5
|
+
import React, { useContext, useMemo, Fragment } from 'react';
|
|
6
|
+
|
|
7
|
+
/** 查询区外显条件数的上限(DESIGN.md §8)。 */
|
|
6
8
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
9
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
10
|
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
11
|
+
export var QUERY_MAX_COLUMNS = 8;
|
|
12
|
+
/** 单个查询项占的最小宽度(px),外显条数 = floor(可用宽度 / 它),封顶 QUERY_MAX_COLUMNS。 */
|
|
13
|
+
export var QUERY_ITEM_WIDTH = 240;
|
|
14
|
+
|
|
15
|
+
/** 折叠时外显的条件数:按钮区在表格之外,不再占一格。 */
|
|
16
|
+
export var getQueryCapacity = function getQueryCapacity(maxRows, columns) {
|
|
17
|
+
return Math.max(1, maxRows * Math.max(1, columns));
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
/** 查询区当前应用的方案名等元信息,经 context 传给查询区,不走 schema。 */
|
|
21
|
+
export var QueryFormMetaContext = /*#__PURE__*/React.createContext({});
|
|
9
22
|
var useCollapseGrid = function useCollapseGrid(maxRows, defaultExpand) {
|
|
10
23
|
var grid = useMemo(function () {
|
|
11
24
|
return FormGrid.createFormGrid({
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
minWidth:
|
|
15
|
-
maxWidth:
|
|
25
|
+
// 外显条数随宽度增长,宽屏不再卡在 4 个。@author nokecy
|
|
26
|
+
maxColumns: QUERY_MAX_COLUMNS,
|
|
27
|
+
minWidth: QUERY_ITEM_WIDTH,
|
|
28
|
+
maxWidth: QUERY_ITEM_WIDTH,
|
|
16
29
|
maxRows: defaultExpand ? Infinity : maxRows,
|
|
17
30
|
shouldVisible: function shouldVisible(node, grid) {
|
|
18
31
|
// 展开状态时,显示所有元素
|
|
19
32
|
if (grid.maxRows === Infinity) return true;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
if (node.index === grid.childSize - 1) {
|
|
23
|
-
return true;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
// 所有查询项均占一格;按当前响应式列数为末行按钮预留一格。
|
|
27
|
-
// 单列窄屏至少保留一个查询项,按钮自然换到下一行。@author nokecy
|
|
28
|
-
var capacity = Math.max(1, maxRows * Math.max(1, grid.columns) - 1);
|
|
29
|
-
return node.index !== undefined && node.index < capacity;
|
|
33
|
+
// 查询、重置按钮在表格之外,表格里只有查询项,按当前响应式列数计算首行外显。
|
|
34
|
+
return node.index !== undefined && node.index < getQueryCapacity(maxRows, grid.columns);
|
|
30
35
|
}
|
|
31
36
|
});
|
|
32
37
|
}, [maxRows, defaultExpand] // 添加依赖项
|
|
33
38
|
);
|
|
34
39
|
var expanded = grid.maxRows === Infinity;
|
|
35
|
-
// 操作区展开时会填满余列,不能把它上一次的跨度用来判断是否还有隐藏条件。
|
|
36
40
|
// 根据完整查询项数量判断,折叠、外部重渲染和容器变宽都不会丢失入口。@author nokecy
|
|
37
|
-
var capacity =
|
|
38
|
-
var collapsible =
|
|
41
|
+
var capacity = getQueryCapacity(maxRows, grid.columns);
|
|
42
|
+
var collapsible = grid.childSize > capacity;
|
|
39
43
|
var toggle = function toggle() {
|
|
40
44
|
if (grid.maxRows === Infinity) {
|
|
41
45
|
grid.maxRows = maxRows;
|
|
@@ -93,23 +97,57 @@ var QueryForm = observer(function (props) {
|
|
|
93
97
|
})
|
|
94
98
|
});
|
|
95
99
|
};
|
|
100
|
+
var _useContext = useContext(QueryFormMetaContext),
|
|
101
|
+
schemeName = _useContext.schemeName;
|
|
96
102
|
var renderButtonGroup = function renderButtonGroup() {
|
|
97
103
|
return /*#__PURE__*/_jsx(Fragment, {
|
|
98
104
|
children: /*#__PURE__*/_jsxs(FormButtonGroup, {
|
|
99
105
|
align: "right",
|
|
100
|
-
children: [
|
|
106
|
+
children: [schemeName ? /*#__PURE__*/_jsxs("span", {
|
|
107
|
+
"data-query-scheme-name": true,
|
|
108
|
+
title: schemeName,
|
|
109
|
+
style: {
|
|
110
|
+
maxWidth: 160,
|
|
111
|
+
overflow: "hidden",
|
|
112
|
+
textOverflow: "ellipsis",
|
|
113
|
+
whiteSpace: "nowrap"
|
|
114
|
+
},
|
|
115
|
+
children: ["\u65B9\u6848\uFF1A", schemeName]
|
|
116
|
+
}) : null, renderActions(), collapsible ? renderExpanded() : null]
|
|
101
117
|
})
|
|
102
118
|
});
|
|
103
119
|
};
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
120
|
+
|
|
121
|
+
// 按钮区放在表格之外、固定在首行右侧:展开/收起只改变条件行数,不改变按钮位置(§8)。窄屏时换到条件下方。
|
|
122
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
123
|
+
"data-query-form": true,
|
|
124
|
+
style: {
|
|
125
|
+
display: "flex",
|
|
126
|
+
flexWrap: "wrap",
|
|
127
|
+
alignItems: "flex-start",
|
|
128
|
+
gap: 8,
|
|
129
|
+
width: "100%"
|
|
130
|
+
},
|
|
131
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
132
|
+
style: {
|
|
133
|
+
flex: "1 1 480px",
|
|
134
|
+
minWidth: 0
|
|
135
|
+
},
|
|
136
|
+
children: /*#__PURE__*/_jsx(FormGrid, {
|
|
137
|
+
grid: grid,
|
|
138
|
+
colWrap: true,
|
|
139
|
+
strictAutoFit: true,
|
|
140
|
+
children: props.children
|
|
141
|
+
})
|
|
142
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
143
|
+
"data-query-actions": true,
|
|
110
144
|
style: {
|
|
145
|
+
flex: "0 0 auto",
|
|
111
146
|
display: "flex",
|
|
112
|
-
|
|
147
|
+
alignItems: "center",
|
|
148
|
+
justifyContent: "flex-end",
|
|
149
|
+
minHeight: 32,
|
|
150
|
+
marginInlineStart: "auto"
|
|
113
151
|
},
|
|
114
152
|
children: renderButtonGroup()
|
|
115
153
|
})]
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** 去掉空值并转成可持久化的普通对象(dayjs 经 toJSON 变为 ISO 字符串)。 */
|
|
2
|
+
export declare function serializeQueryValues(values: Record<string, any> | undefined): Record<string, any>;
|
|
3
|
+
/** 应用方案时还原值:日期字段(含区间)从字符串转回 dayjs,其余原样。 */
|
|
4
|
+
export declare function reviveQueryValues(values: Record<string, any> | undefined, dateFields: ReadonlySet<string>): Record<string, any>;
|
|
5
|
+
/** 查询区向外暴露的操作句柄,供查询方案管理读写条件值。 */
|
|
6
|
+
export interface QueryFormApi {
|
|
7
|
+
/** 当前条件值(已去空、可持久化) */
|
|
8
|
+
getValues: () => Record<string, any>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
4
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
5
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
7
|
+
import dayjs from 'dayjs';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* 查询区条件值与查询方案之间的序列化:
|
|
11
|
+
* 保存时只留有意义的值并转成可 JSON 化的形态,应用时把日期字段还原回 dayjs。
|
|
12
|
+
* 存的是查询区表单值,不是列头筛选。@author nokecy
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
var isEmptyValue = function isEmptyValue(value) {
|
|
16
|
+
return value === undefined || value === null || value === '' || Array.isArray(value) && value.every(isEmptyValue);
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/** 去掉空值并转成可持久化的普通对象(dayjs 经 toJSON 变为 ISO 字符串)。 */
|
|
20
|
+
export function serializeQueryValues(values) {
|
|
21
|
+
var result = {};
|
|
22
|
+
Object.entries(values !== null && values !== void 0 ? values : {}).forEach(function (_ref) {
|
|
23
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
24
|
+
name = _ref2[0],
|
|
25
|
+
value = _ref2[1];
|
|
26
|
+
if (isEmptyValue(value)) return;
|
|
27
|
+
var plain = JSON.parse(JSON.stringify(value));
|
|
28
|
+
if (!isEmptyValue(plain)) result[name] = plain;
|
|
29
|
+
});
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
var reviveDate = function reviveDate(value) {
|
|
33
|
+
if (typeof value !== 'string' && typeof value !== 'number') return value;
|
|
34
|
+
var parsed = dayjs(value);
|
|
35
|
+
return parsed.isValid() ? parsed : value;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/** 应用方案时还原值:日期字段(含区间)从字符串转回 dayjs,其余原样。 */
|
|
39
|
+
export function reviveQueryValues(values, dateFields) {
|
|
40
|
+
var result = {};
|
|
41
|
+
Object.entries(values !== null && values !== void 0 ? values : {}).forEach(function (_ref3) {
|
|
42
|
+
var _ref4 = _slicedToArray(_ref3, 2),
|
|
43
|
+
name = _ref4[0],
|
|
44
|
+
value = _ref4[1];
|
|
45
|
+
if (!dateFields.has(name)) {
|
|
46
|
+
result[name] = value;
|
|
47
|
+
} else {
|
|
48
|
+
result[name] = Array.isArray(value) ? value.map(reviveDate) : reviveDate(value);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** 查询区向外暴露的操作句柄,供查询方案管理读写条件值。 */
|