@nokecy/qc-ui-components 2.0.0-beta.0 → 2.0.0-beta.1

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.
Files changed (243) hide show
  1. package/dist/cjs/ConfirmPro/index.d.ts +12 -9
  2. package/dist/cjs/ConfirmPro/index.js +11 -34
  3. package/dist/cjs/ag-grid-plus/ag-gridPlus.js +422 -156
  4. package/dist/cjs/ag-grid-plus/context/gridContext.d.ts +12 -1
  5. package/dist/cjs/ag-grid-plus/context/queryFormContext.d.ts +2 -0
  6. package/dist/cjs/ag-grid-plus/context/useSchemeDataFlow.js +8 -0
  7. package/dist/cjs/ag-grid-plus/density.d.ts +25 -0
  8. package/dist/cjs/ag-grid-plus/density.js +52 -0
  9. package/dist/cjs/ag-grid-plus/index.less +36 -0
  10. package/dist/cjs/ag-grid-plus/interface.d.ts +58 -1
  11. package/dist/cjs/ag-grid-plus/interface.js +1 -1
  12. package/dist/cjs/ag-grid-plus/queryForm/index.d.ts +11 -0
  13. package/dist/cjs/ag-grid-plus/queryForm/index.js +62 -10
  14. package/dist/cjs/ag-grid-plus/queryForm/queryForm.d.ts +10 -0
  15. package/dist/cjs/ag-grid-plus/queryForm/queryForm.js +63 -26
  16. package/dist/cjs/ag-grid-plus/queryForm/queryValues.d.ts +9 -0
  17. package/dist/cjs/ag-grid-plus/queryForm/queryValues.js +61 -0
  18. package/dist/cjs/ag-grid-plus/rowColors.d.ts +12 -0
  19. package/dist/cjs/ag-grid-plus/rowColors.js +58 -0
  20. package/dist/cjs/ag-grid-plus/setting/ColumnConfigTable.d.ts +5 -0
  21. package/dist/cjs/ag-grid-plus/setting/ColumnConfigTable.js +14 -5
  22. package/dist/cjs/ag-grid-plus/setting/ColumnSetting.js +108 -76
  23. package/dist/cjs/ag-grid-plus/setting/QuerySchemeManager.js +10 -9
  24. package/dist/cjs/ag-grid-plus/setting/autoColumnMemory.d.ts +37 -0
  25. package/dist/cjs/ag-grid-plus/setting/autoColumnMemory.js +206 -0
  26. package/dist/cjs/ag-grid-plus/setting/columnGroupUtils.d.ts +2 -0
  27. package/dist/cjs/ag-grid-plus/setting/columnGroupUtils.js +19 -1
  28. package/dist/cjs/ag-grid-plus/setting/index.js +5 -14
  29. package/dist/cjs/ag-grid-plus/settingItem/index.d.ts +11 -1
  30. package/dist/cjs/ag-grid-plus/settingItem/index.js +34 -12
  31. package/dist/cjs/ag-grid-plus/shared/EmptyIllustration.d.ts +16 -0
  32. package/dist/cjs/ag-grid-plus/shared/EmptyIllustration.js +87 -0
  33. package/dist/cjs/ag-grid-plus/shared/NoRowsOverlay.js +9 -1
  34. package/dist/cjs/ag-grid-plus/shared/SkeletonOverlay.d.ts +11 -0
  35. package/dist/cjs/ag-grid-plus/shared/SkeletonOverlay.js +40 -0
  36. package/dist/cjs/ag-grid-plus/shared/storage/schemeStorageAdapter.d.ts +1 -1
  37. package/dist/cjs/ag-grid-plus/theme.d.ts +7 -1
  38. package/dist/cjs/ag-grid-plus/theme.js +31 -6
  39. package/dist/cjs/ag-grid-plus/toolBar/OverflowActions.d.ts +16 -0
  40. package/dist/cjs/ag-grid-plus/toolBar/OverflowActions.js +128 -0
  41. package/dist/cjs/ag-grid-plus/toolBar/index.d.ts +3 -1
  42. package/dist/cjs/ag-grid-plus/toolBar/index.js +43 -35
  43. package/dist/cjs/ag-grid-plus/toolBar/leftContent.d.ts +2 -2
  44. package/dist/cjs/ag-grid-plus/toolBar/leftContent.js +2 -2
  45. package/dist/cjs/ag-grid-plus/toolBar/overflow.d.ts +20 -0
  46. package/dist/cjs/ag-grid-plus/toolBar/overflow.js +48 -0
  47. package/dist/cjs/ag-grid-plus/toolBar/style.js +71 -15
  48. package/dist/cjs/ag-grid-plus/types.d.ts +6 -0
  49. package/dist/cjs/ag-grid-plus/utils/agGridCompat.js +12 -3
  50. package/dist/cjs/ag-grid-plus/utils/columnProcessors.d.ts +3 -0
  51. package/dist/cjs/ag-grid-plus/utils/columnProcessors.js +13 -2
  52. package/dist/cjs/ag-grid-plus/utils/constants.d.ts +3 -2
  53. package/dist/cjs/ag-grid-plus/utils/constants.js +3 -2
  54. package/dist/cjs/ag-grid-plus/utils/crossPageSelection.d.ts +21 -0
  55. package/dist/cjs/ag-grid-plus/utils/crossPageSelection.js +58 -0
  56. package/dist/cjs/ag-grid-plus/utils/emptyState.d.ts +2 -0
  57. package/dist/cjs/ag-grid-plus/utils/emptyState.js +9 -5
  58. package/dist/cjs/ag-grid-plus/utils/listKeyboard.d.ts +24 -0
  59. package/dist/cjs/ag-grid-plus/utils/listKeyboard.js +83 -0
  60. package/dist/cjs/ag-grid-plus/utils/pagination.d.ts +26 -0
  61. package/dist/cjs/ag-grid-plus/utils/pagination.js +69 -0
  62. package/dist/cjs/ag-grid-plus/utils/queryDispatch.d.ts +7 -0
  63. package/dist/cjs/ag-grid-plus/utils/queryDispatch.js +17 -0
  64. package/dist/cjs/ag-grid-plus/utils/statusPill.d.ts +25 -0
  65. package/dist/cjs/ag-grid-plus/utils/statusPill.js +196 -0
  66. package/dist/cjs/ag-grid-plus/utils/valueEnumColor.d.ts +6 -1
  67. package/dist/cjs/ag-grid-plus/utils/valueEnumColor.js +13 -9
  68. package/dist/cjs/ag-grid-plus/utils/valueFormat.d.ts +19 -0
  69. package/dist/cjs/ag-grid-plus/utils/valueFormat.js +73 -0
  70. package/dist/cjs/ag-grid-plus/utils.js +3 -2
  71. package/dist/cjs/array-table/arrayAddBtn.d.ts +1 -0
  72. package/dist/cjs/array-table/arrayAddBtn.js +2 -2
  73. package/dist/cjs/array-table/autoHeight.d.ts +18 -0
  74. package/dist/cjs/array-table/autoHeight.js +30 -0
  75. package/dist/cjs/array-table/batchRemove.d.ts +2 -2
  76. package/dist/cjs/array-table/cellEditorMarker.d.ts +18 -0
  77. package/dist/cjs/array-table/cellEditorMarker.js +92 -0
  78. package/dist/cjs/array-table/errorLocator.d.ts +29 -0
  79. package/dist/cjs/array-table/errorLocator.js +101 -0
  80. package/dist/cjs/array-table/hooks.d.ts +52 -4
  81. package/dist/cjs/array-table/hooks.js +251 -18
  82. package/dist/cjs/array-table/index.d.ts +6 -0
  83. package/dist/cjs/array-table/index.js +167 -23
  84. package/dist/cjs/array-table/interface.d.ts +22 -0
  85. package/dist/cjs/array-table/preview.js +39 -5
  86. package/dist/cjs/array-table/rowFeedback.d.ts +2 -2
  87. package/dist/cjs/array-table/rowFeedback.js +8 -8
  88. package/dist/cjs/array-table/summary.d.ts +25 -0
  89. package/dist/cjs/array-table/summary.js +70 -0
  90. package/dist/cjs/array-table/theme.d.ts +35 -5
  91. package/dist/cjs/array-table/theme.js +49 -12
  92. package/dist/cjs/array-table/title.d.ts +3 -0
  93. package/dist/cjs/array-table/title.js +29 -0
  94. package/dist/cjs/array-table/utils.d.ts +2 -1
  95. package/dist/cjs/array-table/utils.js +94 -23
  96. package/dist/cjs/card/pro-card/Card/useLegacyItems.d.ts +1 -1
  97. package/dist/cjs/dateCellEditor/DateCellEditor.d.ts +5 -0
  98. package/dist/cjs/dateCellEditor/DateCellEditor.js +42 -17
  99. package/dist/cjs/deleteConfirm/index.d.ts +14 -0
  100. package/dist/cjs/deleteConfirm/index.js +73 -12
  101. package/dist/cjs/dialogSelect/index.d.ts +19 -0
  102. package/dist/cjs/dialogSelect/index.js +189 -15
  103. package/dist/cjs/dialogSelect/index.less +18 -0
  104. package/dist/cjs/documentPage/documentPage.d.ts +6 -3
  105. package/dist/cjs/documentPage/documentPage.js +23 -8
  106. package/dist/cjs/documentPage/index.d.ts +2 -0
  107. package/dist/cjs/documentPage/index.js +19 -0
  108. package/dist/cjs/documentPage/leaveGuard.d.ts +31 -0
  109. package/dist/cjs/documentPage/leaveGuard.js +91 -0
  110. package/dist/cjs/draggableModal/index.d.ts +24 -1
  111. package/dist/cjs/draggableModal/index.js +36 -6
  112. package/dist/cjs/fullScreenAlert/index.less +10 -10
  113. package/dist/cjs/index.d.ts +2 -0
  114. package/dist/cjs/index.js +15 -0
  115. package/dist/cjs/readPretty/arrayTable.js +5 -1
  116. package/dist/cjs/scanCollect/ScanFeedbackInput.d.ts +26 -0
  117. package/dist/cjs/scanCollect/ScanFeedbackInput.js +113 -0
  118. package/dist/cjs/scanCollect/index.d.ts +4 -0
  119. package/dist/cjs/scanCollect/index.js +14 -0
  120. package/dist/cjs/scanCollect/scanSound.d.ts +15 -0
  121. package/dist/cjs/scanCollect/scanSound.js +91 -0
  122. package/dist/esm/ConfirmPro/index.d.ts +12 -9
  123. package/dist/esm/ConfirmPro/index.js +11 -34
  124. package/dist/esm/ag-grid-plus/ag-gridPlus.js +423 -156
  125. package/dist/esm/ag-grid-plus/context/gridContext.d.ts +12 -1
  126. package/dist/esm/ag-grid-plus/context/queryFormContext.d.ts +2 -0
  127. package/dist/esm/ag-grid-plus/context/useSchemeDataFlow.js +8 -0
  128. package/dist/esm/ag-grid-plus/density.d.ts +25 -0
  129. package/dist/esm/ag-grid-plus/density.js +45 -0
  130. package/dist/esm/ag-grid-plus/index.less +36 -0
  131. package/dist/esm/ag-grid-plus/interface.d.ts +58 -1
  132. package/dist/esm/ag-grid-plus/interface.js +2 -0
  133. package/dist/esm/ag-grid-plus/queryForm/index.d.ts +11 -0
  134. package/dist/esm/ag-grid-plus/queryForm/index.js +62 -10
  135. package/dist/esm/ag-grid-plus/queryForm/queryForm.d.ts +10 -0
  136. package/dist/esm/ag-grid-plus/queryForm/queryForm.js +64 -26
  137. package/dist/esm/ag-grid-plus/queryForm/queryValues.d.ts +9 -0
  138. package/dist/esm/ag-grid-plus/queryForm/queryValues.js +54 -0
  139. package/dist/esm/ag-grid-plus/rowColors.d.ts +12 -0
  140. package/dist/esm/ag-grid-plus/rowColors.js +50 -0
  141. package/dist/esm/ag-grid-plus/setting/ColumnConfigTable.d.ts +5 -0
  142. package/dist/esm/ag-grid-plus/setting/ColumnConfigTable.js +14 -5
  143. package/dist/esm/ag-grid-plus/setting/ColumnSetting.js +110 -78
  144. package/dist/esm/ag-grid-plus/setting/QuerySchemeManager.js +10 -9
  145. package/dist/esm/ag-grid-plus/setting/autoColumnMemory.d.ts +37 -0
  146. package/dist/esm/ag-grid-plus/setting/autoColumnMemory.js +198 -0
  147. package/dist/esm/ag-grid-plus/setting/columnGroupUtils.d.ts +2 -0
  148. package/dist/esm/ag-grid-plus/setting/columnGroupUtils.js +18 -1
  149. package/dist/esm/ag-grid-plus/setting/index.js +6 -15
  150. package/dist/esm/ag-grid-plus/settingItem/index.d.ts +11 -1
  151. package/dist/esm/ag-grid-plus/settingItem/index.js +35 -13
  152. package/dist/esm/ag-grid-plus/shared/EmptyIllustration.d.ts +16 -0
  153. package/dist/esm/ag-grid-plus/shared/EmptyIllustration.js +82 -0
  154. package/dist/esm/ag-grid-plus/shared/NoRowsOverlay.js +9 -1
  155. package/dist/esm/ag-grid-plus/shared/SkeletonOverlay.d.ts +11 -0
  156. package/dist/esm/ag-grid-plus/shared/SkeletonOverlay.js +34 -0
  157. package/dist/esm/ag-grid-plus/shared/storage/schemeStorageAdapter.d.ts +1 -1
  158. package/dist/esm/ag-grid-plus/theme.d.ts +7 -1
  159. package/dist/esm/ag-grid-plus/theme.js +31 -6
  160. package/dist/esm/ag-grid-plus/toolBar/OverflowActions.d.ts +16 -0
  161. package/dist/esm/ag-grid-plus/toolBar/OverflowActions.js +120 -0
  162. package/dist/esm/ag-grid-plus/toolBar/index.d.ts +3 -1
  163. package/dist/esm/ag-grid-plus/toolBar/index.js +43 -35
  164. package/dist/esm/ag-grid-plus/toolBar/leftContent.d.ts +2 -2
  165. package/dist/esm/ag-grid-plus/toolBar/leftContent.js +2 -2
  166. package/dist/esm/ag-grid-plus/toolBar/overflow.d.ts +20 -0
  167. package/dist/esm/ag-grid-plus/toolBar/overflow.js +41 -0
  168. package/dist/esm/ag-grid-plus/toolBar/style.js +71 -15
  169. package/dist/esm/ag-grid-plus/types.d.ts +6 -0
  170. package/dist/esm/ag-grid-plus/utils/agGridCompat.js +12 -3
  171. package/dist/esm/ag-grid-plus/utils/columnProcessors.d.ts +3 -0
  172. package/dist/esm/ag-grid-plus/utils/columnProcessors.js +14 -3
  173. package/dist/esm/ag-grid-plus/utils/constants.d.ts +3 -2
  174. package/dist/esm/ag-grid-plus/utils/constants.js +3 -2
  175. package/dist/esm/ag-grid-plus/utils/crossPageSelection.d.ts +21 -0
  176. package/dist/esm/ag-grid-plus/utils/crossPageSelection.js +52 -0
  177. package/dist/esm/ag-grid-plus/utils/emptyState.d.ts +2 -0
  178. package/dist/esm/ag-grid-plus/utils/emptyState.js +9 -5
  179. package/dist/esm/ag-grid-plus/utils/listKeyboard.d.ts +24 -0
  180. package/dist/esm/ag-grid-plus/utils/listKeyboard.js +77 -0
  181. package/dist/esm/ag-grid-plus/utils/pagination.d.ts +26 -0
  182. package/dist/esm/ag-grid-plus/utils/pagination.js +60 -0
  183. package/dist/esm/ag-grid-plus/utils/queryDispatch.d.ts +7 -0
  184. package/dist/esm/ag-grid-plus/utils/queryDispatch.js +11 -0
  185. package/dist/esm/ag-grid-plus/utils/statusPill.d.ts +25 -0
  186. package/dist/esm/ag-grid-plus/utils/statusPill.js +192 -0
  187. package/dist/esm/ag-grid-plus/utils/valueEnumColor.d.ts +6 -1
  188. package/dist/esm/ag-grid-plus/utils/valueEnumColor.js +12 -8
  189. package/dist/esm/ag-grid-plus/utils/valueFormat.d.ts +19 -0
  190. package/dist/esm/ag-grid-plus/utils/valueFormat.js +63 -0
  191. package/dist/esm/ag-grid-plus/utils.js +3 -2
  192. package/dist/esm/array-table/arrayAddBtn.d.ts +1 -0
  193. package/dist/esm/array-table/arrayAddBtn.js +1 -1
  194. package/dist/esm/array-table/autoHeight.d.ts +18 -0
  195. package/dist/esm/array-table/autoHeight.js +25 -0
  196. package/dist/esm/array-table/batchRemove.d.ts +2 -2
  197. package/dist/esm/array-table/cellEditorMarker.d.ts +18 -0
  198. package/dist/esm/array-table/cellEditorMarker.js +84 -0
  199. package/dist/esm/array-table/errorLocator.d.ts +29 -0
  200. package/dist/esm/array-table/errorLocator.js +95 -0
  201. package/dist/esm/array-table/hooks.d.ts +52 -4
  202. package/dist/esm/array-table/hooks.js +251 -17
  203. package/dist/esm/array-table/index.d.ts +6 -0
  204. package/dist/esm/array-table/index.js +170 -25
  205. package/dist/esm/array-table/interface.d.ts +22 -0
  206. package/dist/esm/array-table/preview.js +43 -7
  207. package/dist/esm/array-table/rowFeedback.d.ts +2 -2
  208. package/dist/esm/array-table/rowFeedback.js +8 -8
  209. package/dist/esm/array-table/summary.d.ts +25 -0
  210. package/dist/esm/array-table/summary.js +66 -0
  211. package/dist/esm/array-table/theme.d.ts +35 -5
  212. package/dist/esm/array-table/theme.js +47 -12
  213. package/dist/esm/array-table/title.d.ts +3 -0
  214. package/dist/esm/array-table/title.js +24 -0
  215. package/dist/esm/array-table/utils.d.ts +2 -1
  216. package/dist/esm/array-table/utils.js +93 -22
  217. package/dist/esm/card/pro-card/Card/useLegacyItems.d.ts +1 -1
  218. package/dist/esm/dateCellEditor/DateCellEditor.d.ts +5 -0
  219. package/dist/esm/dateCellEditor/DateCellEditor.js +42 -17
  220. package/dist/esm/deleteConfirm/index.d.ts +14 -0
  221. package/dist/esm/deleteConfirm/index.js +72 -12
  222. package/dist/esm/dialogSelect/index.d.ts +19 -0
  223. package/dist/esm/dialogSelect/index.js +190 -16
  224. package/dist/esm/dialogSelect/index.less +18 -0
  225. package/dist/esm/documentPage/documentPage.d.ts +6 -3
  226. package/dist/esm/documentPage/documentPage.js +23 -8
  227. package/dist/esm/documentPage/index.d.ts +2 -0
  228. package/dist/esm/documentPage/index.js +1 -0
  229. package/dist/esm/documentPage/leaveGuard.d.ts +31 -0
  230. package/dist/esm/documentPage/leaveGuard.js +86 -0
  231. package/dist/esm/draggableModal/index.d.ts +24 -1
  232. package/dist/esm/draggableModal/index.js +35 -5
  233. package/dist/esm/fullScreenAlert/index.less +10 -10
  234. package/dist/esm/index.d.ts +2 -0
  235. package/dist/esm/index.js +1 -0
  236. package/dist/esm/readPretty/arrayTable.js +6 -2
  237. package/dist/esm/scanCollect/ScanFeedbackInput.d.ts +26 -0
  238. package/dist/esm/scanCollect/ScanFeedbackInput.js +107 -0
  239. package/dist/esm/scanCollect/index.d.ts +4 -0
  240. package/dist/esm/scanCollect/index.js +2 -0
  241. package/dist/esm/scanCollect/scanSound.d.ts +15 -0
  242. package/dist/esm/scanCollect/scanSound.js +84 -0
  243. 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 */
@@ -89,6 +89,14 @@ function useSchemeSource(gridKey, schemeData) {
89
89
  return s.id === currentQuerySchemeId;
90
90
  });
91
91
  var isUsingGlobalQueryFallback = false;
92
+
93
+ // 用户自己设为默认的查询方案:没有显式选择时进入页面自动应用,优先于全局方案
94
+ if (!currentQueryScheme && querySchemeList.length > 0) {
95
+ var userDefault = querySchemeList.find(function (s) {
96
+ return s.isDefault && !s.isGlobal;
97
+ });
98
+ if (userDefault) currentQueryScheme = userDefault;
99
+ }
92
100
  if (!currentQueryScheme && querySchemeList.length > 0) {
93
101
  var globalQuerySchemes = querySchemeList.filter(function (s) {
94
102
  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,52 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.GRID_DENSITY_PRESETS = void 0;
7
+ exports.resolveGridDensity = resolveGridDensity;
8
+ 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); }
9
+ 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; }
10
+ 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; }
11
+ 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; }
12
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
13
+ 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); }
14
+ /**
15
+ * 表格密度:三档数值由 Provider 注入,页面不自设行高、表头高(DESIGN.md §2)。
16
+ * @author nokecy
17
+ */
18
+
19
+ /** 规范三档:行高 40/32/28,表头 40/36/32,字号 14/13/12,padding 9·12 / 5·10 / 4·8。 */
20
+ var GRID_DENSITY_PRESETS = exports.GRID_DENSITY_PRESETS = {
21
+ comfort: {
22
+ rowHeight: 40,
23
+ headerHeight: 40,
24
+ fontSize: 14,
25
+ paddingBlock: 9,
26
+ paddingInline: 12
27
+ },
28
+ compact: {
29
+ rowHeight: 32,
30
+ headerHeight: 36,
31
+ fontSize: 13,
32
+ paddingBlock: 5,
33
+ paddingInline: 10
34
+ },
35
+ dense: {
36
+ rowHeight: 28,
37
+ headerHeight: 32,
38
+ fontSize: 12,
39
+ paddingBlock: 4,
40
+ paddingInline: 8
41
+ }
42
+ };
43
+
44
+ /** 自定义三档数值:只需写要改的字段,其余沿用规范值。 */
45
+
46
+ /**
47
+ * 解析密度数值。没有注入 density 时返回 undefined,调用方保持出厂外观不变。
48
+ */
49
+ function resolveGridDensity(density, overrides) {
50
+ if (!density || !GRID_DENSITY_PRESETS[density]) return undefined;
51
+ return _objectSpread(_objectSpread({}, GRID_DENSITY_PRESETS[density]), overrides === null || overrides === void 0 ? void 0 : overrides[density]);
52
+ }
@@ -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
 
@@ -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 };
@@ -14,7 +14,7 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
14
14
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
15
15
  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); } // 注意: QueryStorageAdapter 和 ColumnStorageAdapter 已废弃
16
16
  // 请使用集中式方案管理 API
17
- //column的行内传参
17
+ /** 当前分页状态;页码 1-based。 */ //column的行内传参
18
18
  function AgGridColumn(props) {
19
19
  ///@ts-ignore
20
20
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(AgGridColumnClone, _objectSpread({}, props));
@@ -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;
@@ -11,7 +11,8 @@ var _formilyReact = require("@nokecy/formily-react");
11
11
  var _antd = require("antd");
12
12
  var _classnames = _interopRequireDefault(require("classnames"));
13
13
  var _react = _interopRequireWildcard(require("react"));
14
- var _queryForm = _interopRequireDefault(require("./queryForm"));
14
+ var _queryForm = _interopRequireWildcard(require("./queryForm"));
15
+ var _queryValues = require("./queryValues");
15
16
  var _schemaKey = require("./schemaKey");
16
17
  var _queryColumns = require("./queryColumns");
17
18
  var _boolSelect = _interopRequireDefault(require("../_utils/boolSelect"));
@@ -73,6 +74,26 @@ var FormRender = function FormRender(props) {
73
74
  return form.unsubscribe(id);
74
75
  };
75
76
  }, [form]);
77
+
78
+ // 日期类查询项在方案里以字符串存放,应用时要还原成 dayjs。@author nokecy
79
+ var dateFieldsRef = (0, _react.useRef)(new Set());
80
+ var initNotifiedRef = (0, _react.useRef)(false);
81
+ var onQueryRef = (0, _react.useRef)(props.onQuery);
82
+ onQueryRef.current = props.onQuery;
83
+ // onReset 被 schema 的组件属性捕获,只在 schema 变化时更新,回调必须走 ref 才不会拿到旧闭包。
84
+ var onResetSchemeRef = (0, _react.useRef)(props.onResetScheme);
85
+ onResetSchemeRef.current = props.onResetScheme;
86
+ (0, _react.useEffect)(function () {
87
+ if (!props.apiRef) return;
88
+ props.apiRef.current = {
89
+ getValues: function getValues() {
90
+ return (0, _queryValues.serializeQueryValues)(form.values);
91
+ }
92
+ };
93
+ return function () {
94
+ props.apiRef.current = null;
95
+ };
96
+ }, [form, props.apiRef]);
76
97
  var SchemaField = (0, _react.useMemo)(function () {
77
98
  return (0, _formilyReact.createSchemaField)({
78
99
  components: {
@@ -93,11 +114,14 @@ var FormRender = function FormRender(props) {
93
114
  onQuery && onQuery(form.values);
94
115
  };
95
116
  var onReset = function onReset() {
117
+ var _onResetSchemeRef$cur, _onQueryRef$current;
96
118
  // 使用 forceClear: true 强制清空所有字段,包括有默认值的字段
97
119
  form.reset('*', {
98
120
  forceClear: true
99
121
  });
100
- onQuery({});
122
+ // 清空即恢复全量(§8):先取消方案,再按空条件只查一次;方案取消不会触发查询。
123
+ (_onResetSchemeRef$cur = onResetSchemeRef.current) === null || _onResetSchemeRef$cur === void 0 || _onResetSchemeRef$cur.call(onResetSchemeRef);
124
+ (_onQueryRef$current = onQueryRef.current) === null || _onQueryRef$current === void 0 || _onQueryRef$current.call(onQueryRef, {});
101
125
  };
102
126
  var getComponent = function getComponent(colDef) {
103
127
  var component = colDef.searchComponent ? colDef.searchComponent : undefined;
@@ -152,6 +176,7 @@ var FormRender = function FormRender(props) {
152
176
  var headerName = (_colDef$searchTitle = colDef.searchTitle) !== null && _colDef$searchTitle !== void 0 ? _colDef$searchTitle : colDef.headerName;
153
177
  //表单自定义组件
154
178
  var component = getComponent(colDef);
179
+ if (typeof component === 'string' && component.includes('DatePicker')) dateFieldsRef.current.add(name);
155
180
  if (colDef.filter != false) {
156
181
  var _colDef$searchCompone, _colDef$searchCompone2, _colDef$searchCompone3, _colDef$searchCompone4;
157
182
  // 为多选下拉框添加maxTagCount配置
@@ -247,6 +272,7 @@ var FormRender = function FormRender(props) {
247
272
  var notifyInit = function notifyInit() {
248
273
  if (initialized) return;
249
274
  initialized = true;
275
+ initNotifiedRef.current = true;
250
276
  props.onInit && props.onInit(form.values);
251
277
  };
252
278
  requestAnimationFrame(function () {
@@ -255,19 +281,45 @@ var FormRender = function FormRender(props) {
255
281
  setTimeout(notifyInit, INIT_FALLBACK_DELAY);
256
282
  }
257
283
  }, [schemaKey, defaultRows, props.defaultExpand]);
284
+
285
+ // 方案切换(含进入页面时自动带入默认方案):须在查询项 schema 生成之后,才知道哪些是日期字段;把方案里的条件值落到查询区,已初始化则立即查询。
286
+ var appliedSchemeIdRef = (0, _react.useRef)(undefined);
287
+ var scheme = props.scheme;
288
+ (0, _react.useEffect)(function () {
289
+ var _onQueryRef$current2;
290
+ // 方案被取消后清掉记录,用户再选同一个方案时才会重新应用。
291
+ if (!(scheme !== null && scheme !== void 0 && scheme.id)) {
292
+ appliedSchemeIdRef.current = undefined;
293
+ return;
294
+ }
295
+ if (appliedSchemeIdRef.current === scheme.id) return;
296
+ appliedSchemeIdRef.current = scheme.id;
297
+ var saved = scheme.values;
298
+ if (!saved || Object.keys(saved).length === 0) return;
299
+ form.reset('*', {
300
+ forceClear: true
301
+ });
302
+ form.setValues((0, _queryValues.reviveQueryValues)(saved, dateFieldsRef.current));
303
+ if (initNotifiedRef.current) (_onQueryRef$current2 = onQueryRef.current) === null || _onQueryRef$current2 === void 0 || _onQueryRef$current2.call(onQueryRef, _objectSpread({}, form.values));
304
+ }, [scheme === null || scheme === void 0 ? void 0 : scheme.id, form]);
258
305
  return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
259
306
  className: (0, _classnames.default)(className, "ag-grid-table-search ag-grid-table-search-query-filter"),
260
307
  style: {
261
308
  backgroundColor: token.colorBgContainer
262
309
  },
263
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_formilyAntd.Form, {
264
- form: form,
265
- labelWidth: 120,
266
- labelWrap: false,
267
- feedbackLayout: "none",
268
- onAutoSubmit: onSubmit,
269
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(SchemaField, {
270
- schema: schema
310
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_queryForm.QueryFormMetaContext.Provider, {
311
+ value: {
312
+ schemeName: scheme === null || scheme === void 0 ? void 0 : scheme.name
313
+ },
314
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_formilyAntd.Form, {
315
+ form: form,
316
+ labelWidth: 120,
317
+ labelWrap: false,
318
+ feedbackLayout: "none",
319
+ onAutoSubmit: onSubmit,
320
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(SchemaField, {
321
+ schema: schema
322
+ })
271
323
  })
272
324
  })
273
325
  });
@@ -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;
@@ -4,7 +4,7 @@ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" ==
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.default = void 0;
7
+ exports.getQueryCapacity = exports.default = exports.QueryFormMetaContext = exports.QUERY_MAX_COLUMNS = exports.QUERY_ITEM_WIDTH = void 0;
8
8
  var _icons = require("@ant-design/icons");
9
9
  var _formilyAntd = require("@nokecy/formily-antd");
10
10
  var _formilyReact = require("@nokecy/formily-react");
@@ -13,36 +13,39 @@ var _react = _interopRequireWildcard(require("react"));
13
13
  var _jsxRuntime = require("react/jsx-runtime");
14
14
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
15
15
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
16
+ /** 查询区外显条件数的上限(DESIGN.md §8)。 */
17
+ var QUERY_MAX_COLUMNS = exports.QUERY_MAX_COLUMNS = 8;
18
+ /** 单个查询项占的最小宽度(px),外显条数 = floor(可用宽度 / 它),封顶 QUERY_MAX_COLUMNS。 */
19
+ var QUERY_ITEM_WIDTH = exports.QUERY_ITEM_WIDTH = 240;
20
+
21
+ /** 折叠时外显的条件数:按钮区在表格之外,不再占一格。 */
22
+ var getQueryCapacity = exports.getQueryCapacity = function getQueryCapacity(maxRows, columns) {
23
+ return Math.max(1, maxRows * Math.max(1, columns));
24
+ };
25
+
26
+ /** 查询区当前应用的方案名等元信息,经 context 传给查询区,不走 schema。 */
27
+ var QueryFormMetaContext = exports.QueryFormMetaContext = /*#__PURE__*/_react.default.createContext({});
16
28
  var useCollapseGrid = function useCollapseGrid(maxRows, defaultExpand) {
17
29
  var grid = (0, _react.useMemo)(function () {
18
30
  return _formilyAntd.FormGrid.createFormGrid({
19
- maxColumns: 5,
20
- // 查询项含固定标签和输入框,操作区含查询、重置、折叠入口。@author nokecy
21
- minWidth: 240,
22
- maxWidth: 240,
31
+ // 外显条数随宽度增长,宽屏不再卡在 4 个。@author nokecy
32
+ maxColumns: QUERY_MAX_COLUMNS,
33
+ minWidth: QUERY_ITEM_WIDTH,
34
+ maxWidth: QUERY_ITEM_WIDTH,
23
35
  maxRows: defaultExpand ? Infinity : maxRows,
24
36
  shouldVisible: function shouldVisible(node, grid) {
25
37
  // 展开状态时,显示所有元素
26
38
  if (grid.maxRows === Infinity) return true;
27
-
28
- // 对于按钮列(最后一个元素),总是显示
29
- if (node.index === grid.childSize - 1) {
30
- return true;
31
- }
32
-
33
- // 所有查询项均占一格;按当前响应式列数为末行按钮预留一格。
34
- // 单列窄屏至少保留一个查询项,按钮自然换到下一行。@author nokecy
35
- var capacity = Math.max(1, maxRows * Math.max(1, grid.columns) - 1);
36
- return node.index !== undefined && node.index < capacity;
39
+ // 查询、重置按钮在表格之外,表格里只有查询项,按当前响应式列数计算首行外显。
40
+ return node.index !== undefined && node.index < getQueryCapacity(maxRows, grid.columns);
37
41
  }
38
42
  });
39
43
  }, [maxRows, defaultExpand] // 添加依赖项
40
44
  );
41
45
  var expanded = grid.maxRows === Infinity;
42
- // 操作区展开时会填满余列,不能把它上一次的跨度用来判断是否还有隐藏条件。
43
46
  // 根据完整查询项数量判断,折叠、外部重渲染和容器变宽都不会丢失入口。@author nokecy
44
- var capacity = Math.max(1, maxRows * Math.max(1, grid.columns) - 1);
45
- var collapsible = Math.max(0, grid.childSize - 1) > capacity;
47
+ var capacity = getQueryCapacity(maxRows, grid.columns);
48
+ var collapsible = grid.childSize > capacity;
46
49
  var toggle = function toggle() {
47
50
  if (grid.maxRows === Infinity) {
48
51
  grid.maxRows = maxRows;
@@ -100,23 +103,57 @@ var QueryForm = (0, _formilyReact.observer)(function (props) {
100
103
  })
101
104
  });
102
105
  };
106
+ var _useContext = (0, _react.useContext)(QueryFormMetaContext),
107
+ schemeName = _useContext.schemeName;
103
108
  var renderButtonGroup = function renderButtonGroup() {
104
109
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_react.Fragment, {
105
110
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_formilyAntd.FormButtonGroup, {
106
111
  align: "right",
107
- children: [renderActions(), collapsible ? renderExpanded() : null]
112
+ children: [schemeName ? /*#__PURE__*/(0, _jsxRuntime.jsxs)("span", {
113
+ "data-query-scheme-name": true,
114
+ title: schemeName,
115
+ style: {
116
+ maxWidth: 160,
117
+ overflow: "hidden",
118
+ textOverflow: "ellipsis",
119
+ whiteSpace: "nowrap"
120
+ },
121
+ children: ["\u65B9\u6848\uFF1A", schemeName]
122
+ }) : null, renderActions(), collapsible ? renderExpanded() : null]
108
123
  })
109
124
  });
110
125
  };
111
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_formilyAntd.FormGrid, {
112
- grid: grid,
113
- colWrap: true,
114
- strictAutoFit: true,
115
- children: [props.children, /*#__PURE__*/(0, _jsxRuntime.jsx)(_formilyAntd.FormGrid.GridColumn, {
116
- gridSpan: expanded || !collapsible ? -1 : 1,
126
+
127
+ // 按钮区放在表格之外、固定在首行右侧:展开/收起只改变条件行数,不改变按钮位置(§8)。窄屏时换到条件下方。
128
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
129
+ "data-query-form": true,
130
+ style: {
131
+ display: "flex",
132
+ flexWrap: "wrap",
133
+ alignItems: "flex-start",
134
+ gap: 8,
135
+ width: "100%"
136
+ },
137
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
138
+ style: {
139
+ flex: "1 1 480px",
140
+ minWidth: 0
141
+ },
142
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_formilyAntd.FormGrid, {
143
+ grid: grid,
144
+ colWrap: true,
145
+ strictAutoFit: true,
146
+ children: props.children
147
+ })
148
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
149
+ "data-query-actions": true,
117
150
  style: {
151
+ flex: "0 0 auto",
118
152
  display: "flex",
119
- justifyContent: "right"
153
+ alignItems: "center",
154
+ justifyContent: "flex-end",
155
+ minHeight: 32,
156
+ marginInlineStart: "auto"
120
157
  },
121
158
  children: renderButtonGroup()
122
159
  })]
@@ -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,61 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.reviveQueryValues = reviveQueryValues;
7
+ exports.serializeQueryValues = serializeQueryValues;
8
+ var _dayjs = _interopRequireDefault(require("dayjs"));
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
11
+ 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."); }
12
+ 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); }
13
+ 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; }
14
+ 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; } }
15
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
16
+ /**
17
+ * 查询区条件值与查询方案之间的序列化:
18
+ * 保存时只留有意义的值并转成可 JSON 化的形态,应用时把日期字段还原回 dayjs。
19
+ * 存的是查询区表单值,不是列头筛选。@author nokecy
20
+ */
21
+
22
+ var isEmptyValue = function isEmptyValue(value) {
23
+ return value === undefined || value === null || value === '' || Array.isArray(value) && value.every(isEmptyValue);
24
+ };
25
+
26
+ /** 去掉空值并转成可持久化的普通对象(dayjs 经 toJSON 变为 ISO 字符串)。 */
27
+ function serializeQueryValues(values) {
28
+ var result = {};
29
+ Object.entries(values !== null && values !== void 0 ? values : {}).forEach(function (_ref) {
30
+ var _ref2 = _slicedToArray(_ref, 2),
31
+ name = _ref2[0],
32
+ value = _ref2[1];
33
+ if (isEmptyValue(value)) return;
34
+ var plain = JSON.parse(JSON.stringify(value));
35
+ if (!isEmptyValue(plain)) result[name] = plain;
36
+ });
37
+ return result;
38
+ }
39
+ var reviveDate = function reviveDate(value) {
40
+ if (typeof value !== 'string' && typeof value !== 'number') return value;
41
+ var parsed = (0, _dayjs.default)(value);
42
+ return parsed.isValid() ? parsed : value;
43
+ };
44
+
45
+ /** 应用方案时还原值:日期字段(含区间)从字符串转回 dayjs,其余原样。 */
46
+ function reviveQueryValues(values, dateFields) {
47
+ var result = {};
48
+ Object.entries(values !== null && values !== void 0 ? values : {}).forEach(function (_ref3) {
49
+ var _ref4 = _slicedToArray(_ref3, 2),
50
+ name = _ref4[0],
51
+ value = _ref4[1];
52
+ if (!dateFields.has(name)) {
53
+ result[name] = value;
54
+ } else {
55
+ result[name] = Array.isArray(value) ? value.map(reviveDate) : reviveDate(value);
56
+ }
57
+ });
58
+ return result;
59
+ }
60
+
61
+ /** 查询区向外暴露的操作句柄,供查询方案管理读写条件值。 */