@nokecy/qc-ui 1.1.75 → 1.1.78
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/exportButton/exportAction.d.ts +74 -0
- package/dist/cjs/exportButton/exportAction.js +199 -0
- package/dist/cjs/exportButton/index.d.ts +39 -0
- package/dist/cjs/exportButton/index.js +295 -0
- package/dist/cjs/importModal/index.d.ts +9 -0
- package/dist/cjs/importModal/index.js +46 -8
- package/dist/cjs/index.d.ts +4 -0
- package/dist/cjs/index.js +66 -0
- package/dist/cjs/standardList/StandardAgGridPlus.d.ts +58 -0
- package/dist/cjs/standardList/StandardAgGridPlus.js +698 -0
- package/dist/cjs/standardList/dateFormat.d.ts +16 -0
- package/dist/cjs/standardList/dateFormat.js +56 -0
- package/dist/cjs/standardList/emptyState.d.ts +36 -0
- package/dist/cjs/standardList/emptyState.js +89 -0
- package/dist/cjs/standardList/enumColumns.d.ts +31 -0
- package/dist/cjs/standardList/enumColumns.js +87 -0
- package/dist/cjs/standardList/gridColumnDefs.d.ts +33 -0
- package/dist/cjs/standardList/gridColumnDefs.js +61 -0
- package/dist/cjs/standardList/groupedHeaders.d.ts +28 -0
- package/dist/cjs/standardList/groupedHeaders.js +84 -0
- package/dist/cjs/standardList/groupedHeaders.less +29 -0
- package/dist/cjs/standardList/index.d.ts +20 -0
- package/dist/cjs/standardList/index.js +176 -0
- package/dist/cjs/standardList/listDateDisplay.d.ts +9 -0
- package/dist/cjs/standardList/listDateDisplay.js +64 -0
- package/dist/cjs/standardList/listDefaultSort.d.ts +38 -0
- package/dist/cjs/standardList/listDefaultSort.js +139 -0
- package/dist/cjs/standardList/listRefresh.d.ts +25 -0
- package/dist/cjs/standardList/listRefresh.js +53 -0
- package/dist/cjs/utils/download.d.ts +6 -0
- package/dist/cjs/utils/download.js +23 -0
- package/dist/esm/exportButton/exportAction.d.ts +74 -0
- package/dist/esm/exportButton/exportAction.js +193 -0
- package/dist/esm/exportButton/index.d.ts +39 -0
- package/dist/esm/exportButton/index.js +259 -0
- package/dist/esm/importModal/index.d.ts +9 -0
- package/dist/esm/importModal/index.js +46 -8
- package/dist/esm/index.d.ts +4 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/standardList/StandardAgGridPlus.d.ts +58 -0
- package/dist/esm/standardList/StandardAgGridPlus.js +691 -0
- package/dist/esm/standardList/dateFormat.d.ts +16 -0
- package/dist/esm/standardList/dateFormat.js +50 -0
- package/dist/esm/standardList/emptyState.d.ts +36 -0
- package/dist/esm/standardList/emptyState.js +83 -0
- package/dist/esm/standardList/enumColumns.d.ts +31 -0
- package/dist/esm/standardList/enumColumns.js +82 -0
- package/dist/esm/standardList/gridColumnDefs.d.ts +33 -0
- package/dist/esm/standardList/gridColumnDefs.js +55 -0
- package/dist/esm/standardList/groupedHeaders.d.ts +28 -0
- package/dist/esm/standardList/groupedHeaders.js +78 -0
- package/dist/esm/standardList/groupedHeaders.less +29 -0
- package/dist/esm/standardList/index.d.ts +20 -0
- package/dist/esm/standardList/index.js +15 -0
- package/dist/esm/standardList/listDateDisplay.d.ts +9 -0
- package/dist/esm/standardList/listDateDisplay.js +58 -0
- package/dist/esm/standardList/listDefaultSort.d.ts +38 -0
- package/dist/esm/standardList/listDefaultSort.js +133 -0
- package/dist/esm/standardList/listRefresh.d.ts +25 -0
- package/dist/esm/standardList/listRefresh.js +47 -0
- package/dist/esm/utils/download.d.ts +6 -0
- package/dist/esm/utils/download.js +17 -0
- package/dist/umd/qc-ui.min.css +1 -1
- package/dist/umd/qc-ui.min.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 列表日期显示格式:日期 `YYYY-MM-DD`,日期时间 `YYYY-MM-DD HH:mm:ss`,按浏览器本地时区。
|
|
3
|
+
* @author nokecy
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* 将时间格式化为 yyyy-MM-dd HH:mm:ss 格式
|
|
7
|
+
* @param value 时间值(字符串、Date对象或null/undefined)
|
|
8
|
+
* @returns 格式化后的时间字符串,如果输入无效则返回空字符串
|
|
9
|
+
*/
|
|
10
|
+
export declare const formatDateTime: (value: string | Date | null | undefined) => string;
|
|
11
|
+
/**
|
|
12
|
+
* 将时间格式化为 yyyy-MM-dd 格式
|
|
13
|
+
* @param value 时间值(字符串、Date对象或null/undefined)
|
|
14
|
+
* @returns 格式化后的日期字符串,如果输入无效则返回空字符串
|
|
15
|
+
*/
|
|
16
|
+
export declare const formatDate: (value: string | Date | null | undefined) => string;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.formatDateTime = exports.formatDate = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* 列表日期显示格式:日期 `YYYY-MM-DD`,日期时间 `YYYY-MM-DD HH:mm:ss`,按浏览器本地时区。
|
|
9
|
+
* @author nokecy
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/** 纯日期按本地日历解析;带时区的时间按浏览器时区转换。@author nokecy */
|
|
13
|
+
var parseDate = function parseDate(value) {
|
|
14
|
+
return new Date(typeof value === 'string' && /^\d{4}-\d{2}-\d{2}$/.test(value) ? "".concat(value, "T00:00:00") : value);
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* 将时间格式化为 yyyy-MM-dd HH:mm:ss 格式
|
|
19
|
+
* @param value 时间值(字符串、Date对象或null/undefined)
|
|
20
|
+
* @returns 格式化后的时间字符串,如果输入无效则返回空字符串
|
|
21
|
+
*/
|
|
22
|
+
var formatDateTime = exports.formatDateTime = function formatDateTime(value) {
|
|
23
|
+
if (!value) return '';
|
|
24
|
+
try {
|
|
25
|
+
var date = parseDate(value);
|
|
26
|
+
if (isNaN(date.getTime())) return '';
|
|
27
|
+
var year = String(date.getFullYear()).padStart(4, '0');
|
|
28
|
+
var month = String(date.getMonth() + 1).padStart(2, '0');
|
|
29
|
+
var day = String(date.getDate()).padStart(2, '0');
|
|
30
|
+
var hours = String(date.getHours()).padStart(2, '0');
|
|
31
|
+
var minutes = String(date.getMinutes()).padStart(2, '0');
|
|
32
|
+
var seconds = String(date.getSeconds()).padStart(2, '0');
|
|
33
|
+
return "".concat(year, "-").concat(month, "-").concat(day, " ").concat(hours, ":").concat(minutes, ":").concat(seconds);
|
|
34
|
+
} catch (error) {
|
|
35
|
+
return '';
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* 将时间格式化为 yyyy-MM-dd 格式
|
|
41
|
+
* @param value 时间值(字符串、Date对象或null/undefined)
|
|
42
|
+
* @returns 格式化后的日期字符串,如果输入无效则返回空字符串
|
|
43
|
+
*/
|
|
44
|
+
var formatDate = exports.formatDate = function formatDate(value) {
|
|
45
|
+
if (!value) return '';
|
|
46
|
+
try {
|
|
47
|
+
var date = parseDate(value);
|
|
48
|
+
if (isNaN(date.getTime())) return '';
|
|
49
|
+
var year = String(date.getFullYear()).padStart(4, '0');
|
|
50
|
+
var month = String(date.getMonth() + 1).padStart(2, '0');
|
|
51
|
+
var day = String(date.getDate()).padStart(2, '0');
|
|
52
|
+
return "".concat(year, "-").concat(month, "-").concat(day);
|
|
53
|
+
} catch (error) {
|
|
54
|
+
return '';
|
|
55
|
+
}
|
|
56
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { GridPlusError } from '../ag-grid-plus/errors';
|
|
3
|
+
/**
|
|
4
|
+
* 列表空态四分支(U2)。
|
|
5
|
+
*
|
|
6
|
+
* 四分支:
|
|
7
|
+
* 1. **无权限**(请求 403)→ 说明缺权限,不给新建入口;
|
|
8
|
+
* 2. **加载失败** → 给「重新加载」按钮;
|
|
9
|
+
* 3. **筛选无结果**(最近一次请求带条件)→ 引导调整/清空筛选;
|
|
10
|
+
* 4. **无数据** → 「暂无数据」+ 业务页注入的操作(通常是 Access 包裹的新建按钮)。
|
|
11
|
+
*
|
|
12
|
+
* 渲染方式:作为 AG-Grid 的 `noRowsOverlayComponent` 挂在标准列表基座上(见 ./StandardAgGridPlus.tsx)。
|
|
13
|
+
* ag-grid-react 的 overlay 组件经 portal 渲染、仍在 React 树内,所以用 context 传动态状态,
|
|
14
|
+
* 请求失败/成功的状态变化能驱动 overlay 重渲染。
|
|
15
|
+
*
|
|
16
|
+
* @author nokecy
|
|
17
|
+
*/
|
|
18
|
+
export interface GridEmptyContextValue {
|
|
19
|
+
/** 最近一次加载失败;请求成功时清空 */
|
|
20
|
+
error?: GridPlusError;
|
|
21
|
+
/** 最近一次请求是否带筛选条件(区分「没有数据」与「筛选无结果」) */
|
|
22
|
+
hasFilter?: boolean;
|
|
23
|
+
/** 业务页注入的空态操作(通常是 Access 包裹的新建按钮) */
|
|
24
|
+
actions?: React.ReactNode;
|
|
25
|
+
/** 业务页注入的筛选无结果操作(通常是清空自定义筛选) */
|
|
26
|
+
clearFilterAction?: React.ReactNode;
|
|
27
|
+
/** 重试(= 重新请求) */
|
|
28
|
+
onRetry?: () => void;
|
|
29
|
+
}
|
|
30
|
+
export declare const GridEmptyContext: React.Context<GridEmptyContextValue>;
|
|
31
|
+
export declare const GridEmptyState: React.FC;
|
|
32
|
+
/**
|
|
33
|
+
* 判断请求 filter 是否带生效条件(任意叶子值非空即算有筛选)。
|
|
34
|
+
* qc-ui 的 queryFilter 是嵌套对象,空表单也会产生空值键。
|
|
35
|
+
*/
|
|
36
|
+
export declare const hasActiveFilter: (filter: any) => boolean;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.hasActiveFilter = exports.GridEmptyState = exports.GridEmptyContext = void 0;
|
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
var _antd = require("antd");
|
|
9
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
+
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); }
|
|
11
|
+
/**
|
|
12
|
+
* 列表空态四分支(U2)。
|
|
13
|
+
*
|
|
14
|
+
* 四分支:
|
|
15
|
+
* 1. **无权限**(请求 403)→ 说明缺权限,不给新建入口;
|
|
16
|
+
* 2. **加载失败** → 给「重新加载」按钮;
|
|
17
|
+
* 3. **筛选无结果**(最近一次请求带条件)→ 引导调整/清空筛选;
|
|
18
|
+
* 4. **无数据** → 「暂无数据」+ 业务页注入的操作(通常是 Access 包裹的新建按钮)。
|
|
19
|
+
*
|
|
20
|
+
* 渲染方式:作为 AG-Grid 的 `noRowsOverlayComponent` 挂在标准列表基座上(见 ./StandardAgGridPlus.tsx)。
|
|
21
|
+
* ag-grid-react 的 overlay 组件经 portal 渲染、仍在 React 树内,所以用 context 传动态状态,
|
|
22
|
+
* 请求失败/成功的状态变化能驱动 overlay 重渲染。
|
|
23
|
+
*
|
|
24
|
+
* @author nokecy
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
var GridEmptyContext = exports.GridEmptyContext = /*#__PURE__*/_react.default.createContext({});
|
|
28
|
+
|
|
29
|
+
/** 从 GridPlusError 里取 HTTP 状态码(ABP axios 错误在 context.originalError.response.status) */
|
|
30
|
+
var httpStatusOf = function httpStatusOf(error) {
|
|
31
|
+
var _response$status, _error$context, _error$originalError;
|
|
32
|
+
return (_response$status = error === null || error === void 0 || (_error$context = error.context) === null || _error$context === void 0 || (_error$context = _error$context.originalError) === null || _error$context === void 0 || (_error$context = _error$context.response) === null || _error$context === void 0 ? void 0 : _error$context.status) !== null && _response$status !== void 0 ? _response$status : error === null || error === void 0 || (_error$originalError = error.originalError) === null || _error$originalError === void 0 || (_error$originalError = _error$originalError.response) === null || _error$originalError === void 0 ? void 0 : _error$originalError.status;
|
|
33
|
+
};
|
|
34
|
+
var GridEmptyState = exports.GridEmptyState = function GridEmptyState() {
|
|
35
|
+
var _React$useContext = _react.default.useContext(GridEmptyContext),
|
|
36
|
+
error = _React$useContext.error,
|
|
37
|
+
hasFilter = _React$useContext.hasFilter,
|
|
38
|
+
actions = _React$useContext.actions,
|
|
39
|
+
clearFilterAction = _React$useContext.clearFilterAction,
|
|
40
|
+
onRetry = _React$useContext.onRetry;
|
|
41
|
+
|
|
42
|
+
// 分支 1:无权限(403)——说明原因,不给任何入口
|
|
43
|
+
if (error && httpStatusOf(error) === 403) {
|
|
44
|
+
return /*#__PURE__*/_react.default.createElement(_antd.Empty, {
|
|
45
|
+
image: _antd.Empty.PRESENTED_IMAGE_SIMPLE,
|
|
46
|
+
description: "\u6CA1\u6709\u6743\u9650\u67E5\u770B\u6B64\u5217\u8868\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u5F00\u901A"
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// 分支 2:加载失败——给重试
|
|
51
|
+
if (error) {
|
|
52
|
+
return /*#__PURE__*/_react.default.createElement(_antd.Empty, {
|
|
53
|
+
image: _antd.Empty.PRESENTED_IMAGE_SIMPLE,
|
|
54
|
+
description: "\u52A0\u8F7D\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u540E\u91CD\u8BD5"
|
|
55
|
+
}, onRetry && /*#__PURE__*/_react.default.createElement(_antd.Button, {
|
|
56
|
+
size: "small",
|
|
57
|
+
type: "primary",
|
|
58
|
+
onClick: onRetry
|
|
59
|
+
}, "\u91CD\u65B0\u52A0\u8F7D"));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// 分支 3:筛选无结果——引导调整条件,并可提供一键清空入口
|
|
63
|
+
if (hasFilter) {
|
|
64
|
+
return /*#__PURE__*/_react.default.createElement(_antd.Empty, {
|
|
65
|
+
image: _antd.Empty.PRESENTED_IMAGE_SIMPLE,
|
|
66
|
+
description: "\u6CA1\u6709\u7B26\u5408\u6761\u4EF6\u7684\u6570\u636E"
|
|
67
|
+
}, clearFilterAction);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// 分支 4:无数据——业务页可注入新建入口
|
|
71
|
+
return /*#__PURE__*/_react.default.createElement(_antd.Empty, {
|
|
72
|
+
image: _antd.Empty.PRESENTED_IMAGE_SIMPLE,
|
|
73
|
+
description: "\u6682\u65E0\u6570\u636E"
|
|
74
|
+
}, actions);
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* 判断请求 filter 是否带生效条件(任意叶子值非空即算有筛选)。
|
|
79
|
+
* qc-ui 的 queryFilter 是嵌套对象,空表单也会产生空值键。
|
|
80
|
+
*/
|
|
81
|
+
var hasActiveFilter = exports.hasActiveFilter = function hasActiveFilter(filter) {
|
|
82
|
+
if (!filter || _typeof(filter) !== 'object') return false;
|
|
83
|
+
return Object.values(filter).some(function (v) {
|
|
84
|
+
if (v === null || v === undefined || v === '') return false;
|
|
85
|
+
if (Array.isArray(v)) return v.length > 0;
|
|
86
|
+
if (_typeof(v) === 'object') return hasActiveFilter(v);
|
|
87
|
+
return true;
|
|
88
|
+
});
|
|
89
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export type EnumFallbackParams = {
|
|
2
|
+
value: unknown;
|
|
3
|
+
node?: {
|
|
4
|
+
rowPinned?: string | null;
|
|
5
|
+
} | null;
|
|
6
|
+
};
|
|
7
|
+
export type EnumFallbackRenderer = (params: EnumFallbackParams) => unknown;
|
|
8
|
+
type GridEnumItem = {
|
|
9
|
+
color?: string;
|
|
10
|
+
label?: string;
|
|
11
|
+
value?: unknown;
|
|
12
|
+
};
|
|
13
|
+
type GridColumnLike = {
|
|
14
|
+
field?: string;
|
|
15
|
+
valueEnum?: readonly GridEnumItem[];
|
|
16
|
+
enumFallbackRenderer?: EnumFallbackRenderer;
|
|
17
|
+
children?: GridColumnLike[];
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* 递归给 columnDefs / 列组 children 的 valueEnum 套上 `gridValueEnum`,并补默认未知值显示。
|
|
21
|
+
* 没有 valueEnum 且没有 children 的列保持原引用。
|
|
22
|
+
*/
|
|
23
|
+
export declare const applyGridValueEnumToColumns: <T extends GridColumnLike>(columns: T[] | null | undefined, background?: string, fallback?: EnumFallbackRenderer) => T[] | null | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* 未命中时再按规范化后的码值补一次枚举匹配。精确命中的值仍由表格原有枚举渲染处理;
|
|
26
|
+
* 真正未知的码交给 `fallback`,不传则回原码。
|
|
27
|
+
*/
|
|
28
|
+
export declare const createNormalizedEnumFallbackRenderer: (items: readonly GridEnumItem[], fallback?: EnumFallbackRenderer) => (params: EnumFallbackParams) => unknown;
|
|
29
|
+
/** columnDefs 路径也包住显式业务回退,所有经标准列表的表格共享同一套旧码规范化。 */
|
|
30
|
+
export declare const applyNormalizedEnumFallbacksToColumns: <T extends GridColumnLike>(columns: T[] | null | undefined, fallback?: EnumFallbackRenderer) => T[] | null | undefined;
|
|
31
|
+
export {};
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createNormalizedEnumFallbackRenderer = exports.applyNormalizedEnumFallbacksToColumns = exports.applyGridValueEnumToColumns = void 0;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _valueEnumColor = require("../ag-grid-plus/utils/valueEnumColor");
|
|
9
|
+
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); }
|
|
10
|
+
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; }
|
|
11
|
+
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; }
|
|
12
|
+
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; }
|
|
13
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
14
|
+
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); } /**
|
|
15
|
+
* 列定义上的枚举列统一处理:颜色按底色收成可读色、未配置回退的枚举列补默认的未知值显示、
|
|
16
|
+
* 按规范化后的码值再匹配一次(兼容旧 char 字段的尾随空格与数字/字符串差异)。
|
|
17
|
+
*
|
|
18
|
+
* 未知值的文案属于宿主口径,由 `fallback` 注入;不传则保持表格自身的行为(未命中显示原码)。
|
|
19
|
+
*
|
|
20
|
+
* @author nokecy
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* 递归给 columnDefs / 列组 children 的 valueEnum 套上 `gridValueEnum`,并补默认未知值显示。
|
|
24
|
+
* 没有 valueEnum 且没有 children 的列保持原引用。
|
|
25
|
+
*/
|
|
26
|
+
var applyGridValueEnumToColumns = exports.applyGridValueEnumToColumns = function applyGridValueEnumToColumns(columns, background, fallback) {
|
|
27
|
+
if (!columns) return columns;
|
|
28
|
+
return columns.map(function (col) {
|
|
29
|
+
var _col$enumFallbackRend;
|
|
30
|
+
var nextChildren = col.children ? applyGridValueEnumToColumns(col.children, background, fallback) : col.children;
|
|
31
|
+
var nextEnum = Array.isArray(col.valueEnum) ? (0, _valueEnumColor.gridValueEnum)(col.valueEnum, background) : col.valueEnum;
|
|
32
|
+
if (nextChildren === col.children && nextEnum === col.valueEnum) return col;
|
|
33
|
+
var defaultFallback = (_col$enumFallbackRend = col.enumFallbackRenderer) !== null && _col$enumFallbackRend !== void 0 ? _col$enumFallbackRend : fallback;
|
|
34
|
+
return _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, col), Array.isArray(nextEnum) && defaultFallback ? {
|
|
35
|
+
enumFallbackRenderer: defaultFallback
|
|
36
|
+
} : {}), nextEnum !== col.valueEnum ? {
|
|
37
|
+
valueEnum: nextEnum
|
|
38
|
+
} : {}), nextChildren !== col.children ? {
|
|
39
|
+
children: nextChildren
|
|
40
|
+
} : {});
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
var normalizeEnumCode = function normalizeEnumCode(value) {
|
|
44
|
+
if (value === null || value === undefined || typeof value !== 'string' && typeof value !== 'number' && typeof value !== 'boolean') return undefined;
|
|
45
|
+
var normalized = String(value).trim();
|
|
46
|
+
return normalized === '' ? undefined : normalized;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* 未命中时再按规范化后的码值补一次枚举匹配。精确命中的值仍由表格原有枚举渲染处理;
|
|
51
|
+
* 真正未知的码交给 `fallback`,不传则回原码。
|
|
52
|
+
*/
|
|
53
|
+
var createNormalizedEnumFallbackRenderer = exports.createNormalizedEnumFallbackRenderer = function createNormalizedEnumFallbackRenderer(items, fallback) {
|
|
54
|
+
return function (params) {
|
|
55
|
+
var normalizedValue = normalizeEnumCode(params.value);
|
|
56
|
+
if (normalizedValue !== undefined) {
|
|
57
|
+
var matched = items.find(function (item) {
|
|
58
|
+
return item.value !== params.value && normalizeEnumCode(item.value) === normalizedValue;
|
|
59
|
+
});
|
|
60
|
+
if (matched) {
|
|
61
|
+
var _matched$label;
|
|
62
|
+
return /*#__PURE__*/(0, _react.createElement)('span', {
|
|
63
|
+
style: {
|
|
64
|
+
color: matched.color || 'inherit'
|
|
65
|
+
}
|
|
66
|
+
}, (_matched$label = matched.label) !== null && _matched$label !== void 0 ? _matched$label : '');
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return fallback ? fallback(params) : params.value;
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
/** columnDefs 路径也包住显式业务回退,所有经标准列表的表格共享同一套旧码规范化。 */
|
|
74
|
+
var applyNormalizedEnumFallbacksToColumns = exports.applyNormalizedEnumFallbacksToColumns = function applyNormalizedEnumFallbacksToColumns(columns, fallback) {
|
|
75
|
+
if (!columns) return columns;
|
|
76
|
+
return columns.map(function (col) {
|
|
77
|
+
var _col$enumFallbackRend2;
|
|
78
|
+
var nextChildren = col.children ? applyNormalizedEnumFallbacksToColumns(col.children, fallback) : col.children;
|
|
79
|
+
var nextFallback = Array.isArray(col.valueEnum) ? createNormalizedEnumFallbackRenderer(col.valueEnum, (_col$enumFallbackRend2 = col.enumFallbackRenderer) !== null && _col$enumFallbackRend2 !== void 0 ? _col$enumFallbackRend2 : fallback) : col.enumFallbackRenderer;
|
|
80
|
+
if (nextChildren === col.children && nextFallback === col.enumFallbackRenderer) return col;
|
|
81
|
+
return _objectSpread(_objectSpread(_objectSpread({}, col), nextChildren !== col.children ? {
|
|
82
|
+
children: nextChildren
|
|
83
|
+
} : {}), nextFallback !== col.enumFallbackRenderer ? {
|
|
84
|
+
enumFallbackRenderer: nextFallback
|
|
85
|
+
} : {});
|
|
86
|
+
});
|
|
87
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 表格列定义在进 AG Grid 之前的收口。
|
|
3
|
+
*
|
|
4
|
+
* AG Grid 把 ColDef.sort 当成**受控属性**:每次 columnDefs 引用变化都会
|
|
5
|
+
* `_updateColumnState` → `updateColSort`。sort 有值就强制写回该列,undefined 才不动。
|
|
6
|
+
*
|
|
7
|
+
* 列表的默认排序写在 colDef.sort 上(如送货单 `number: 'asc'`)。行点击会
|
|
8
|
+
* setState → 父组件重建 columnDefs → 默认列被重新套上升序。用户刚点的「送货日期 desc」
|
|
9
|
+
* 还在,于是变成多列排序;qc-ui `getSort` 又只取列状态里**第一个**有 sort 的列
|
|
10
|
+
* (单号钉在最左),请求就改回单号升序。表现就是:点成时间降序后,再点单元格,排序自己变了。
|
|
11
|
+
*
|
|
12
|
+
* 处理:把 `sort` 挪到 `initialSort`。AG Grid 只在建列时读 initialSort,之后更新列定义不会再套。
|
|
13
|
+
*
|
|
14
|
+
* @author nokecy
|
|
15
|
+
*/
|
|
16
|
+
type GridColumnLike = {
|
|
17
|
+
sort?: string;
|
|
18
|
+
initialSort?: string;
|
|
19
|
+
children?: GridColumnLike[];
|
|
20
|
+
};
|
|
21
|
+
/** AG Grid 更新列定义时对 ColDef.sort 的处理(ag-grid-community SortService.updateColSort)。 */
|
|
22
|
+
export declare const applyColDefSort: (current: string | undefined, colDefSort: string | undefined) => string | undefined;
|
|
23
|
+
/** qc-ui getSort:列状态里第一个带 sort 的列,拼成 `colId direction`。 */
|
|
24
|
+
export declare const firstGridSorter: (cols: readonly {
|
|
25
|
+
colId: string;
|
|
26
|
+
sort?: string;
|
|
27
|
+
}[]) => string;
|
|
28
|
+
/**
|
|
29
|
+
* 去掉列定义上的 live `sort`,只保留 `initialSort`(首屏建列用)。
|
|
30
|
+
* 没有 sort、也没有 children 的列保持原引用。
|
|
31
|
+
*/
|
|
32
|
+
export declare const detachLiveSortFromColumnDefs: <T extends GridColumnLike>(columns: T[] | null | undefined) => T[] | null | undefined;
|
|
33
|
+
export {};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.firstGridSorter = exports.detachLiveSortFromColumnDefs = exports.applyColDefSort = void 0;
|
|
7
|
+
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); }
|
|
8
|
+
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; }
|
|
9
|
+
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; }
|
|
10
|
+
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; }
|
|
11
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
12
|
+
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); }
|
|
13
|
+
/**
|
|
14
|
+
* 表格列定义在进 AG Grid 之前的收口。
|
|
15
|
+
*
|
|
16
|
+
* AG Grid 把 ColDef.sort 当成**受控属性**:每次 columnDefs 引用变化都会
|
|
17
|
+
* `_updateColumnState` → `updateColSort`。sort 有值就强制写回该列,undefined 才不动。
|
|
18
|
+
*
|
|
19
|
+
* 列表的默认排序写在 colDef.sort 上(如送货单 `number: 'asc'`)。行点击会
|
|
20
|
+
* setState → 父组件重建 columnDefs → 默认列被重新套上升序。用户刚点的「送货日期 desc」
|
|
21
|
+
* 还在,于是变成多列排序;qc-ui `getSort` 又只取列状态里**第一个**有 sort 的列
|
|
22
|
+
* (单号钉在最左),请求就改回单号升序。表现就是:点成时间降序后,再点单元格,排序自己变了。
|
|
23
|
+
*
|
|
24
|
+
* 处理:把 `sort` 挪到 `initialSort`。AG Grid 只在建列时读 initialSort,之后更新列定义不会再套。
|
|
25
|
+
*
|
|
26
|
+
* @author nokecy
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
/** AG Grid 更新列定义时对 ColDef.sort 的处理(ag-grid-community SortService.updateColSort)。 */
|
|
30
|
+
var applyColDefSort = exports.applyColDefSort = function applyColDefSort(current, colDefSort) {
|
|
31
|
+
if (colDefSort === undefined) return current;
|
|
32
|
+
return colDefSort === 'asc' || colDefSort === 'desc' ? colDefSort : undefined;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/** qc-ui getSort:列状态里第一个带 sort 的列,拼成 `colId direction`。 */
|
|
36
|
+
var firstGridSorter = exports.firstGridSorter = function firstGridSorter(cols) {
|
|
37
|
+
var hit = cols.find(function (col) {
|
|
38
|
+
return Boolean(col.sort);
|
|
39
|
+
});
|
|
40
|
+
return hit ? "".concat(hit.colId, " ").concat(hit.sort) : '';
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* 去掉列定义上的 live `sort`,只保留 `initialSort`(首屏建列用)。
|
|
45
|
+
* 没有 sort、也没有 children 的列保持原引用。
|
|
46
|
+
*/
|
|
47
|
+
var detachLiveSortFromColumnDefs = exports.detachLiveSortFromColumnDefs = function detachLiveSortFromColumnDefs(columns) {
|
|
48
|
+
if (!columns) return columns;
|
|
49
|
+
return columns.map(function (col) {
|
|
50
|
+
var nextChildren = col.children ? detachLiveSortFromColumnDefs(col.children) : col.children;
|
|
51
|
+
var hasLiveSort = col.sort !== undefined;
|
|
52
|
+
if (!hasLiveSort && nextChildren === col.children) return col;
|
|
53
|
+
var next = _objectSpread({}, col);
|
|
54
|
+
if (hasLiveSort) {
|
|
55
|
+
if (next.initialSort === undefined) next.initialSort = col.sort;
|
|
56
|
+
delete next.sort;
|
|
57
|
+
}
|
|
58
|
+
if (nextChildren !== col.children) next.children = nextChildren;
|
|
59
|
+
return next;
|
|
60
|
+
});
|
|
61
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/** 分组表头及可见分组边界的统一样式。@author nokecy */
|
|
2
|
+
type DisplayedGroup = {
|
|
3
|
+
getParent(): DisplayedGroup | null;
|
|
4
|
+
isPadding(): boolean;
|
|
5
|
+
getColGroupDef(): unknown;
|
|
6
|
+
getDisplayedLeafColumns(): DisplayedColumn[];
|
|
7
|
+
};
|
|
8
|
+
type DisplayedColumn = {
|
|
9
|
+
getParent(): DisplayedGroup | null;
|
|
10
|
+
};
|
|
11
|
+
export declare const compositeClasses: {
|
|
12
|
+
readonly group: "app-grid-composite-group";
|
|
13
|
+
readonly header: "app-grid-composite-header";
|
|
14
|
+
readonly cell: "app-grid-composite-cell";
|
|
15
|
+
readonly start: "app-grid-composite-start";
|
|
16
|
+
readonly end: "app-grid-composite-end";
|
|
17
|
+
};
|
|
18
|
+
/** 使用显示分组而非原始列顺序,覆盖隐藏列、拆分分组、固定列及多层嵌套。@author nokecy */
|
|
19
|
+
export declare const getCompositeColumnEdges: (column?: DisplayedColumn | null) => {
|
|
20
|
+
grouped: boolean;
|
|
21
|
+
start: boolean;
|
|
22
|
+
end: boolean;
|
|
23
|
+
};
|
|
24
|
+
/** 保留页面自定义表头类,所有真实分组共用居中标题和边框。@author nokecy */
|
|
25
|
+
export declare const withCompositeGroupHeader: <T extends Record<string, any>>(column: T) => T;
|
|
26
|
+
/** 原有类名和规则完整保留;分组边框规则随当前显示列重新求值并移除失效边框。@author nokecy */
|
|
27
|
+
export declare const withCompositeLeafHeader: <T extends Record<string, any>>(column: T) => T;
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
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); }
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.withCompositeLeafHeader = exports.withCompositeGroupHeader = exports.getCompositeColumnEdges = exports.compositeClasses = void 0;
|
|
8
|
+
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; }
|
|
9
|
+
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; }
|
|
10
|
+
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; }
|
|
11
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
12
|
+
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); }
|
|
13
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
14
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
15
|
+
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); }
|
|
16
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
17
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
18
|
+
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; }
|
|
19
|
+
/** 分组表头及可见分组边界的统一样式。@author nokecy */
|
|
20
|
+
|
|
21
|
+
var compositeClasses = exports.compositeClasses = {
|
|
22
|
+
group: 'app-grid-composite-group',
|
|
23
|
+
header: 'app-grid-composite-header',
|
|
24
|
+
cell: 'app-grid-composite-cell',
|
|
25
|
+
start: 'app-grid-composite-start',
|
|
26
|
+
end: 'app-grid-composite-end'
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
/** 使用显示分组而非原始列顺序,覆盖隐藏列、拆分分组、固定列及多层嵌套。@author nokecy */
|
|
30
|
+
var getCompositeColumnEdges = exports.getCompositeColumnEdges = function getCompositeColumnEdges(column) {
|
|
31
|
+
var grouped = false;
|
|
32
|
+
var start = false;
|
|
33
|
+
var end = false;
|
|
34
|
+
for (var group = column === null || column === void 0 ? void 0 : column.getParent(); group; group = group.getParent()) {
|
|
35
|
+
if (group.isPadding() || !group.getColGroupDef()) continue;
|
|
36
|
+
grouped = true;
|
|
37
|
+
var leaves = group.getDisplayedLeafColumns();
|
|
38
|
+
start || (start = leaves[0] === column);
|
|
39
|
+
end || (end = leaves[leaves.length - 1] === column);
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
grouped: grouped,
|
|
43
|
+
start: start,
|
|
44
|
+
end: end
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
var classesOf = function classesOf(value) {
|
|
48
|
+
return (Array.isArray(value) ? value : [value]).flatMap(function (item) {
|
|
49
|
+
var _item$split$filter;
|
|
50
|
+
return (_item$split$filter = item === null || item === void 0 ? void 0 : item.split(/\s+/).filter(Boolean)) !== null && _item$split$filter !== void 0 ? _item$split$filter : [];
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
var mergeClasses = function mergeClasses(original, params, extra) {
|
|
54
|
+
return Array.from(new Set([].concat(_toConsumableArray(classesOf(typeof original === 'function' ? original(params) : original)), _toConsumableArray(extra))));
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
/** 保留页面自定义表头类,所有真实分组共用居中标题和边框。@author nokecy */
|
|
58
|
+
var withCompositeGroupHeader = exports.withCompositeGroupHeader = function withCompositeGroupHeader(column) {
|
|
59
|
+
var originalHeaderClass = column.headerClass;
|
|
60
|
+
return _objectSpread(_objectSpread({}, column), {}, {
|
|
61
|
+
headerClass: function headerClass(params) {
|
|
62
|
+
var _params$columnGroup;
|
|
63
|
+
return mergeClasses(originalHeaderClass, params, (_params$columnGroup = params.columnGroup) !== null && _params$columnGroup !== void 0 && _params$columnGroup.isPadding() ? [] : [compositeClasses.group]);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
/** 原有类名和规则完整保留;分组边框规则随当前显示列重新求值并移除失效边框。@author nokecy */
|
|
69
|
+
var withCompositeLeafHeader = exports.withCompositeLeafHeader = function withCompositeLeafHeader(column) {
|
|
70
|
+
var originalHeaderClass = column.headerClass;
|
|
71
|
+
return _objectSpread(_objectSpread({}, column), {}, {
|
|
72
|
+
headerClass: function headerClass(params) {
|
|
73
|
+
var edges = getCompositeColumnEdges(params.column);
|
|
74
|
+
return mergeClasses(originalHeaderClass, params, [].concat(_toConsumableArray(edges.grouped ? [compositeClasses.header] : []), _toConsumableArray(edges.start ? [compositeClasses.start] : []), _toConsumableArray(edges.end ? [compositeClasses.end] : [])));
|
|
75
|
+
},
|
|
76
|
+
cellClassRules: _objectSpread(_objectSpread({}, column.cellClassRules), {}, _defineProperty(_defineProperty(_defineProperty({}, compositeClasses.cell, function (params) {
|
|
77
|
+
return getCompositeColumnEdges(params.column).grouped;
|
|
78
|
+
}), compositeClasses.start, function (params) {
|
|
79
|
+
return getCompositeColumnEdges(params.column).start;
|
|
80
|
+
}), compositeClasses.end, function (params) {
|
|
81
|
+
return getCompositeColumnEdges(params.column).end;
|
|
82
|
+
}))
|
|
83
|
+
});
|
|
84
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// 复合表头模板:上层居中,组内细线、组间加粗,颜色跟随当前主题。@author nokecy
|
|
2
|
+
.ag-root-wrapper {
|
|
3
|
+
.app-grid-composite-group {
|
|
4
|
+
border-top: 1px solid var(--ag-border-color) !important;
|
|
5
|
+
border-inline: 2px solid var(--ag-border-color) !important;
|
|
6
|
+
|
|
7
|
+
.ag-header-group-cell-label {
|
|
8
|
+
justify-content: center !important;
|
|
9
|
+
width: 100%;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.app-grid-composite-header {
|
|
14
|
+
border-bottom: 1px solid var(--ag-border-color) !important;
|
|
15
|
+
border-inline-end: 1px solid var(--ag-border-color) !important;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.app-grid-composite-cell {
|
|
19
|
+
border-inline-end: 1px solid var(--ag-border-color) !important;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.app-grid-composite-start {
|
|
23
|
+
border-inline-start: 2px solid var(--ag-border-color) !important;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.app-grid-composite-end {
|
|
27
|
+
border-inline-end: 2px solid var(--ag-border-color) !important;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 标准列表:在 AgGridPlus 外面包一层公司列表规范,宿主通过属性注入刷新令牌与口径。
|
|
3
|
+
* 默认不影响任何现有使用方,需要时显式使用 `StandardAgGridPlus`。
|
|
4
|
+
*
|
|
5
|
+
* @author nokecy
|
|
6
|
+
*/
|
|
7
|
+
export { StandardAgGridColumn, StandardAgGridPlus } from './StandardAgGridPlus';
|
|
8
|
+
export type { AppGridColumn, StandardListPolicy } from './StandardAgGridPlus';
|
|
9
|
+
export { GridEmptyContext, GridEmptyState, hasActiveFilter } from './emptyState';
|
|
10
|
+
export type { GridEmptyContextValue } from './emptyState';
|
|
11
|
+
export { applyColDefSort, detachLiveSortFromColumnDefs, firstGridSorter } from './gridColumnDefs';
|
|
12
|
+
export { compositeClasses, getCompositeColumnEdges, withCompositeGroupHeader, withCompositeLeafHeader } from './groupedHeaders';
|
|
13
|
+
export { getListDateType, normalizeExtendedDateColumn, normalizeListDateColumn } from './listDateDisplay';
|
|
14
|
+
export { formatDate, formatDateTime } from './dateFormat';
|
|
15
|
+
export { flattenColumnDefs, inferListDefaultSort, resolveListSortPolicy, sortingText } from './listDefaultSort';
|
|
16
|
+
export type { ListDefaultSort, ListDefaultSortOverride, ListSortPolicy } from './listDefaultSort';
|
|
17
|
+
export { readRefreshToken, shouldRefresh, withRefreshToken } from './listRefresh';
|
|
18
|
+
export type { RefreshDecisionInput } from './listRefresh';
|
|
19
|
+
export { applyGridValueEnumToColumns, applyNormalizedEnumFallbacksToColumns, createNormalizedEnumFallbackRenderer } from './enumColumns';
|
|
20
|
+
export type { EnumFallbackParams, EnumFallbackRenderer } from './enumColumns';
|