@teamias/rex-design 0.0.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.
- package/LICENSE +21 -0
- package/README.md +43 -0
- package/dist/components/action-buttons/action-buttons.d.ts +2 -0
- package/dist/components/action-buttons/action-buttons.js +182 -0
- package/dist/components/action-buttons/demo/index.d.ts +2 -0
- package/dist/components/action-buttons/demo/index.js +69 -0
- package/dist/components/action-buttons/index.d.ts +3 -0
- package/dist/components/action-buttons/index.js +3 -0
- package/dist/components/action-buttons/modules/handlerFilter.d.ts +2 -0
- package/dist/components/action-buttons/modules/handlerFilter.js +62 -0
- package/dist/components/action-buttons/types.d.ts +96 -0
- package/dist/components/action-buttons/types.js +3 -0
- package/dist/components/base-form/base-form.d.ts +3 -0
- package/dist/components/base-form/base-form.js +260 -0
- package/dist/components/base-form/demo/index.d.ts +4 -0
- package/dist/components/base-form/demo/index.js +515 -0
- package/dist/components/base-form/index.d.ts +4 -0
- package/dist/components/base-form/index.js +4 -0
- package/dist/components/base-form/locales/en-US.json +21 -0
- package/dist/components/base-form/locales/zh-CN.json +21 -0
- package/dist/components/base-form/locales.index.d.ts +42 -0
- package/dist/components/base-form/locales.index.js +4 -0
- package/dist/components/base-form/modules/dependencyUtils.d.ts +13 -0
- package/dist/components/base-form/modules/dependencyUtils.js +43 -0
- package/dist/components/base-form/modules/handlerData.d.ts +8 -0
- package/dist/components/base-form/modules/handlerData.js +59 -0
- package/dist/components/base-form/modules/renderComponentNode.d.ts +11 -0
- package/dist/components/base-form/modules/renderComponentNode.js +607 -0
- package/dist/components/base-form/modules/valuesToFields.d.ts +10 -0
- package/dist/components/base-form/modules/valuesToFields.js +18 -0
- package/dist/components/base-form/style/index.d.ts +3 -0
- package/dist/components/base-form/style/index.js +8 -0
- package/dist/components/base-form/types.d.ts +181 -0
- package/dist/components/base-form/types.js +10 -0
- package/dist/components/base-list-table/base-list-table.d.ts +33 -0
- package/dist/components/base-list-table/base-list-table.js +292 -0
- package/dist/components/base-list-table/demo/BasicBaseListTable.d.ts +2 -0
- package/dist/components/base-list-table/demo/BasicBaseListTable.js +1469 -0
- package/dist/components/base-list-table/demo/NoData.d.ts +2 -0
- package/dist/components/base-list-table/demo/NoData.js +55 -0
- package/dist/components/base-list-table/demo/TableMaxRowCount.d.ts +2 -0
- package/dist/components/base-list-table/demo/TableMaxRowCount.js +1696 -0
- package/dist/components/base-list-table/demo/VirtualDemo.d.ts +2 -0
- package/dist/components/base-list-table/demo/VirtualDemo.js +548 -0
- package/dist/components/base-list-table/index.d.ts +1 -0
- package/dist/components/base-list-table/index.js +1 -0
- package/dist/components/base-list-table/style/index.d.ts +5 -0
- package/dist/components/base-list-table/style/index.js +17 -0
- package/dist/components/base-table/base-table.d.ts +51 -0
- package/dist/components/base-table/base-table.js +291 -0
- package/dist/components/base-table/components/BaseTableRow.d.ts +1 -0
- package/dist/components/base-table/components/BaseTableRow.js +129 -0
- package/dist/components/base-table/demo/BaseTableAll.d.ts +2 -0
- package/dist/components/base-table/demo/BaseTableAll.js +66 -0
- package/dist/components/base-table/demo/BaseTableBasic.d.ts +2 -0
- package/dist/components/base-table/demo/BaseTableBasic.js +58 -0
- package/dist/components/base-table/demo/BaseTableIndex.d.ts +2 -0
- package/dist/components/base-table/demo/BaseTableIndex.js +57 -0
- package/dist/components/base-table/demo/BaseTableRowSelect.d.ts +2 -0
- package/dist/components/base-table/demo/BaseTableRowSelect.js +45 -0
- package/dist/components/base-table/demo/tableData.d.ts +332 -0
- package/dist/components/base-table/demo/tableData.js +293 -0
- package/dist/components/base-table/index.d.ts +1 -0
- package/dist/components/base-table/index.js +1 -0
- package/dist/components/base-table/style/index.d.ts +3 -0
- package/dist/components/base-table/style/index.js +9 -0
- package/dist/components/data-cell/data-cell.d.ts +3 -0
- package/dist/components/data-cell/data-cell.js +17 -0
- package/dist/components/data-cell/demo/index.d.ts +2 -0
- package/dist/components/data-cell/demo/index.js +332 -0
- package/dist/components/data-cell/index.d.ts +2 -0
- package/dist/components/data-cell/index.js +2 -0
- package/dist/components/data-cell/modules/cellItemMap.d.ts +3 -0
- package/dist/components/data-cell/modules/cellItemMap.js +374 -0
- package/dist/components/data-cell/style/index.d.ts +7 -0
- package/dist/components/data-cell/style/index.js +23 -0
- package/dist/components/data-cell/types.d.ts +192 -0
- package/dist/components/data-cell/types.js +1 -0
- package/dist/components/icons/assets/icon-park--arrow-up.svg +7 -0
- package/dist/components/icons/assets/index.d.ts +4 -0
- package/dist/components/icons/assets/index.js +9 -0
- package/dist/components/icons/assets/svg-spinners--blocks-shuffle-3.svg +21 -0
- package/dist/components/icons/demo/index.d.ts +2 -0
- package/dist/components/icons/demo/index.js +43 -0
- package/dist/components/icons/icons.d.ts +39 -0
- package/dist/components/icons/icons.js +251 -0
- package/dist/components/icons/index.d.ts +1 -0
- package/dist/components/icons/index.js +1 -0
- package/dist/components/icons/style/index.d.ts +2 -0
- package/dist/components/icons/style/index.js +5 -0
- package/dist/components/media-viewer/demo/index.d.ts +2 -0
- package/dist/components/media-viewer/demo/index.js +23 -0
- package/dist/components/media-viewer/index.d.ts +1 -0
- package/dist/components/media-viewer/index.js +1 -0
- package/dist/components/media-viewer/media-viewer.d.ts +48 -0
- package/dist/components/media-viewer/media-viewer.js +119 -0
- package/dist/components/media-viewer/style/index.d.ts +6 -0
- package/dist/components/media-viewer/style/index.js +31 -0
- package/dist/hooks/request-fields-container/demo/index.d.ts +2 -0
- package/dist/hooks/request-fields-container/demo/index.js +36 -0
- package/dist/hooks/request-fields-container/index.d.ts +4 -0
- package/dist/hooks/request-fields-container/index.js +3 -0
- package/dist/hooks/request-fields-container/request-fields-container-context-provider.d.ts +22 -0
- package/dist/hooks/request-fields-container/request-fields-container-context-provider.js +134 -0
- package/dist/hooks/request-fields-container/request-fields-container-context.d.ts +39 -0
- package/dist/hooks/request-fields-container/request-fields-container-context.js +5 -0
- package/dist/hooks/request-fields-container/request-fields-container-hoc.d.ts +4 -0
- package/dist/hooks/request-fields-container/request-fields-container-hoc.js +31 -0
- package/dist/hooks/request-fields-container/use-request-fields-container.d.ts +22 -0
- package/dist/hooks/request-fields-container/use-request-fields-container.js +131 -0
- package/dist/hooks/rex-pro-config-provider/demo/index.d.ts +2 -0
- package/dist/hooks/rex-pro-config-provider/demo/index.js +61 -0
- package/dist/hooks/rex-pro-config-provider/index.d.ts +2 -0
- package/dist/hooks/rex-pro-config-provider/index.js +2 -0
- package/dist/hooks/rex-pro-config-provider/rex-pro-config-context.d.ts +27 -0
- package/dist/hooks/rex-pro-config-provider/rex-pro-config-context.js +33 -0
- package/dist/hooks/rex-pro-config-provider/rex-pro-config-provider.d.ts +6 -0
- package/dist/hooks/rex-pro-config-provider/rex-pro-config-provider.js +24 -0
- package/dist/hooks/rex-pro-config-provider/use-rex-pro-config-provider.d.ts +2 -0
- package/dist/hooks/rex-pro-config-provider/use-rex-pro-config-provider.js +11 -0
- package/dist/hooks/use-state-data/demo/index.d.ts +2 -0
- package/dist/hooks/use-state-data/demo/index.js +135 -0
- package/dist/hooks/use-state-data/index.d.ts +1 -0
- package/dist/hooks/use-state-data/index.js +1 -0
- package/dist/hooks/use-state-data/use-state-data.d.ts +11 -0
- package/dist/hooks/use-state-data/use-state-data.js +64 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +10 -0
- package/dist/types/svg.d.ts +4 -0
- package/dist/utils/locales/en-US.json +13 -0
- package/dist/utils/locales/index.d.ts +26 -0
- package/dist/utils/locales/index.js +4 -0
- package/dist/utils/locales/zh-CN.json +13 -0
- package/package.json +90 -0
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { ProForm, ProFormCascader, ProFormCheckbox, ProFormDateRangePicker, ProFormDigit, ProFormDigitRange, ProFormItemRender, ProFormRadio, ProFormSelect, ProFormSwitch, ProFormText, ProFormTextArea, ProFormTreeSelect, ProFormDatePicker } from '@ant-design/pro-components';
|
|
2
|
+
import { TButtonFilterItem } from "../..";
|
|
3
|
+
import { Form, GetProps } from 'antd';
|
|
4
|
+
import { ReactNode } from 'react';
|
|
5
|
+
/** 组件props */
|
|
6
|
+
export interface IBaseFormProps {
|
|
7
|
+
/** 字段配置 */
|
|
8
|
+
fields?: Array<TInputProps | TDateRangeProps | TSelectProps | TSelectInputProps | TSelectDimProps | TCustomProps | TSelectDateRangeProps | TCascaderProps | TTreeSelectProps | TCheckboxProps | TCheckboxGroupProps | TRadioGroupProps | TInputNumberProps | TInputNumberRangeProps | TTextAreaProps | TSelectRadioProps | TMultipleComponentsProps | TSwitchProps | TDatePickerProps>;
|
|
9
|
+
/** 字段对应的本地代码配置 */
|
|
10
|
+
fieldProps?: Record<string, Exclude<IBaseFormProps['fields'], undefined>[number]>;
|
|
11
|
+
/**
|
|
12
|
+
* 每个表单项宽度
|
|
13
|
+
* @default 20%
|
|
14
|
+
*/
|
|
15
|
+
itemWidth?: number | string;
|
|
16
|
+
itemMarginBottom?: number | string;
|
|
17
|
+
/** 每个 label 宽度 */
|
|
18
|
+
labelWidth?: string;
|
|
19
|
+
/**
|
|
20
|
+
* 数据请求器
|
|
21
|
+
* - 不传的情况下用注入的请求器
|
|
22
|
+
*/
|
|
23
|
+
requestOptions?: (api: string, params: Record<string, unknown>, rawItem: IBaseFormFieldItem) => Promise<Exclude<IBaseFormFieldItem['options'], undefined>>;
|
|
24
|
+
/** label 显示到输入框内 */
|
|
25
|
+
inlineLabel?: boolean;
|
|
26
|
+
}
|
|
27
|
+
type TOmitComponentItemType = 'width';
|
|
28
|
+
export type TInputProps = IBaseFormFieldItem<'input'> & Omit<GetProps<typeof ProFormText>, TOmitComponentItemType>;
|
|
29
|
+
export type TSelectProps = IBaseFormFieldItem<'select'> & Omit<GetProps<typeof ProFormSelect>, TOmitComponentItemType>;
|
|
30
|
+
export type TSelectDimProps = IBaseFormFieldItem<'selectDim'> & Omit<GetProps<typeof ProFormSelect>, TOmitComponentItemType>;
|
|
31
|
+
export type TDateRangeProps = IBaseFormFieldItem<'dateRange'> & Omit<GetProps<typeof ProFormDateRangePicker>, TOmitComponentItemType>;
|
|
32
|
+
export type TCascaderProps = IBaseFormFieldItem<'cascader'> & Omit<GetProps<typeof ProFormCascader>, TOmitComponentItemType>;
|
|
33
|
+
export type TTreeSelectProps = IBaseFormFieldItem<'treeSelect'> & Omit<GetProps<typeof ProFormTreeSelect>, TOmitComponentItemType>;
|
|
34
|
+
export type TCheckboxProps = IBaseFormFieldItem<'checkbox'> & Omit<GetProps<typeof ProFormCheckbox>, TOmitComponentItemType>;
|
|
35
|
+
export type TCheckboxGroupProps = IBaseFormFieldItem<'checkboxGroup'> & Omit<GetProps<typeof ProFormCheckbox.Group>, TOmitComponentItemType>;
|
|
36
|
+
export type TRadioGroupProps = IBaseFormFieldItem<'radioGroup'> & Omit<GetProps<typeof ProFormRadio>, TOmitComponentItemType>;
|
|
37
|
+
export type TInputNumberProps = IBaseFormFieldItem<'inputNumber'> & Omit<GetProps<typeof ProFormDigit>, TOmitComponentItemType>;
|
|
38
|
+
export type TInputNumberRangeProps = IBaseFormFieldItem<'inputNumberRange'> & Omit<GetProps<typeof ProFormDigitRange>, TOmitComponentItemType>;
|
|
39
|
+
export type TTextAreaProps = IBaseFormFieldItem<'textArea'> & Omit<GetProps<typeof ProFormTextArea>, TOmitComponentItemType>;
|
|
40
|
+
export type TSelectRadioProps = IBaseFormFieldItem<'selectRadio'> & Omit<GetProps<typeof ProFormSelect>, TOmitComponentItemType>;
|
|
41
|
+
export type TSwitchProps = IBaseFormFieldItem<'switch'> & Omit<GetProps<typeof ProFormSwitch>, TOmitComponentItemType>;
|
|
42
|
+
export type TDatePickerProps = IBaseFormFieldItem<'datePicker'> & Omit<GetProps<typeof ProFormDatePicker>, TOmitComponentItemType>;
|
|
43
|
+
export type TSelectInputProps = IBaseFormFieldItem<'selectInput'> & Omit<GetProps<typeof ProFormText>, TOmitComponentItemType>;
|
|
44
|
+
export type TSelectDateRangeProps = IBaseFormFieldItem<'selectDateRange'> & Omit<GetProps<typeof ProFormDateRangePicker>, TOmitComponentItemType>;
|
|
45
|
+
export type TMultipleComponentsProps = IBaseFormFieldItem<'multipleComponents'> & GetProps<typeof Form.Item> & {
|
|
46
|
+
/** 组合项 */
|
|
47
|
+
subItems: IBaseFormProps['fields'];
|
|
48
|
+
/** 组合模式,紧凑型 */
|
|
49
|
+
compact?: boolean;
|
|
50
|
+
formItemProps?: GetProps<typeof Form.Item>;
|
|
51
|
+
};
|
|
52
|
+
export type TCustomProps = IBaseFormFieldItem<'custom'> & GetProps<typeof Form.Item> & {
|
|
53
|
+
render: (props: Parameters<GetProps<typeof ProFormItemRender>['children']>[0], form?: ReturnType<typeof ProForm.useForm>[0]) => ReactNode;
|
|
54
|
+
formItemProps?: GetProps<typeof Form.Item>;
|
|
55
|
+
};
|
|
56
|
+
/** 后续可继续添加新类型 */
|
|
57
|
+
export type TDependencyAction = 'value' | 'search' | 'visible' | 'disabled';
|
|
58
|
+
/** 组件 fields 具体类型 */
|
|
59
|
+
export interface IBaseFormFieldItem<T extends TValueType = TValueType> {
|
|
60
|
+
/** 组件类型 */
|
|
61
|
+
valueType: T;
|
|
62
|
+
/** 组合功能时,限制每个组合控件宽度 */
|
|
63
|
+
childWidths?: Array<string | number>;
|
|
64
|
+
/**
|
|
65
|
+
* 每个表单项宽度
|
|
66
|
+
* @default 20%
|
|
67
|
+
*/
|
|
68
|
+
itemWidth?: number | string;
|
|
69
|
+
/** label 宽度 */
|
|
70
|
+
labelWidth?: string;
|
|
71
|
+
/** 必填项 */
|
|
72
|
+
required?: boolean;
|
|
73
|
+
/** 文案 */
|
|
74
|
+
label?: string;
|
|
75
|
+
/**
|
|
76
|
+
* 单一组件,组合组件
|
|
77
|
+
* - valueType = multipleComponents 类型的时候不需要
|
|
78
|
+
*/
|
|
79
|
+
field?: string | string[];
|
|
80
|
+
/**
|
|
81
|
+
* value 的情况只允许依赖单字段
|
|
82
|
+
* search 的情况只允许依赖多字段
|
|
83
|
+
* visible 的情况只允许依赖多字段
|
|
84
|
+
* disabled 的情况只允许依赖多字段
|
|
85
|
+
*/
|
|
86
|
+
dependencies?: Array<{
|
|
87
|
+
field: string;
|
|
88
|
+
action: Extract<TDependencyAction, 'value'>;
|
|
89
|
+
} | {
|
|
90
|
+
field: string[];
|
|
91
|
+
action: Extract<TDependencyAction, 'search' | 'visible' | 'disabled'>;
|
|
92
|
+
}>;
|
|
93
|
+
dependenciesV2?: IDependenciesV2[];
|
|
94
|
+
/** 选择项 */
|
|
95
|
+
options?: Array<TOption>;
|
|
96
|
+
/** api接口 */
|
|
97
|
+
api?: string;
|
|
98
|
+
/**
|
|
99
|
+
* 请求方式
|
|
100
|
+
* @default post
|
|
101
|
+
*/
|
|
102
|
+
apiMethod?: string;
|
|
103
|
+
/**
|
|
104
|
+
* api 搜索key定义
|
|
105
|
+
* - false 时候不会把 field 作为key传入
|
|
106
|
+
* - string 自定义key 传入
|
|
107
|
+
* - 目前 selectDim 使用到
|
|
108
|
+
*/
|
|
109
|
+
apiSearchKey?: false | string;
|
|
110
|
+
/**
|
|
111
|
+
* api 以id作为搜索条件,指定的key
|
|
112
|
+
* - 更多是用于数据回显时候,使用id查询出对应数据
|
|
113
|
+
* - 目前 selectDim 使用到
|
|
114
|
+
*/
|
|
115
|
+
apiSearchValueKey?: string;
|
|
116
|
+
/**
|
|
117
|
+
* 默认请求参数
|
|
118
|
+
* @deprecated 弃用,用回原生params
|
|
119
|
+
*/
|
|
120
|
+
defaultParams?: Record<string, unknown>;
|
|
121
|
+
/** 默认请求参数 */
|
|
122
|
+
params?: Record<string, unknown>;
|
|
123
|
+
/** 多选 */
|
|
124
|
+
multiple?: boolean;
|
|
125
|
+
/**
|
|
126
|
+
* 对应 valueType 的props
|
|
127
|
+
* - TODO: 不清楚怎么设置这个泛型
|
|
128
|
+
*/
|
|
129
|
+
fieldProps?: unknown;
|
|
130
|
+
/** 校验规则 */
|
|
131
|
+
rules?: Array<{
|
|
132
|
+
required?: boolean;
|
|
133
|
+
message?: string;
|
|
134
|
+
pattern?: RegExp;
|
|
135
|
+
validator?: (rule: any, value: any) => Promise<void>;
|
|
136
|
+
[key: string]: any;
|
|
137
|
+
}>;
|
|
138
|
+
/** 提示信息 */
|
|
139
|
+
tooltip?: string;
|
|
140
|
+
/**
|
|
141
|
+
* 字段对应默认值
|
|
142
|
+
* - 需要手动调用函数提取,再设置
|
|
143
|
+
* - 扩展,注入form.item 上
|
|
144
|
+
*/
|
|
145
|
+
defaultValue?: string | string[] | boolean | number | number[];
|
|
146
|
+
/** 控制隐藏 */
|
|
147
|
+
hidden?: boolean;
|
|
148
|
+
/** 权限key */
|
|
149
|
+
permissionKey?: string;
|
|
150
|
+
}
|
|
151
|
+
type TOption = {
|
|
152
|
+
label: string;
|
|
153
|
+
value: string | number;
|
|
154
|
+
children?: TOption[];
|
|
155
|
+
};
|
|
156
|
+
export interface IDependenciesV2 extends Partial<Omit<TButtonFilterItem, 'original'>> {
|
|
157
|
+
/** 依赖字段 */
|
|
158
|
+
field: string;
|
|
159
|
+
/**
|
|
160
|
+
* 操作类型
|
|
161
|
+
* - 同时设置 hidden 和 show 的时候, hidden 优先级高于 show
|
|
162
|
+
*/
|
|
163
|
+
action: 'clear' | 'updateData' | 'disabled' | 'hidden' | 'show' | 'syncValue';
|
|
164
|
+
/**
|
|
165
|
+
* 是否用户操作的才触发
|
|
166
|
+
* - 默认设置
|
|
167
|
+
* - true 类型: clear
|
|
168
|
+
* - false 类型: updateData disabled hidden show syncValue
|
|
169
|
+
*/
|
|
170
|
+
isTouched?: boolean;
|
|
171
|
+
}
|
|
172
|
+
/** 控件类型 */
|
|
173
|
+
export type TValueType = 'input'
|
|
174
|
+
/** 一次性拉所有 或 配置options */
|
|
175
|
+
| 'select'
|
|
176
|
+
/**
|
|
177
|
+
* @desc 下拉框+输入框
|
|
178
|
+
* @deprecated 建议使用 multipleComponents 进行组合
|
|
179
|
+
*/
|
|
180
|
+
| 'selectInput' | 'selectDim' | 'dateRange' | 'selectDateRange' | 'cascader' | 'treeSelect' | 'checkbox' | 'checkboxGroup' | 'radioGroup' | 'inputNumber' | 'inputNumberRange' | 'textArea' | 'selectRadio' | 'multipleComponents' | 'switch' | 'datePicker' | 'upload' | 'table' | 'custom';
|
|
181
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import React, { type ReactNode } from 'react';
|
|
2
|
+
import { Checkbox, GetProps } from 'antd';
|
|
3
|
+
import { IBaseTableProps } from "../base-table/base-table";
|
|
4
|
+
export declare const BaseListTable: <T extends object = object>({ fieldsConfig, requestFields, requestFieldsUrl, requestFieldsParams, scroll, virtual, titleRender, rowSelection, dataSource, headerRender, defaultExpandAllCollapse, tableMaxRowCount, ...tableProps }: BaseListTableProps<T>) => import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
export interface BaseListTableProps<T extends object = object> extends Omit<IBaseTableProps<T>, 'rowSelection' | 'dataSource' | 'scroll'> {
|
|
6
|
+
/** 标题行自定以渲染 */
|
|
7
|
+
titleRender?: (item: T, index: number, originNode: {
|
|
8
|
+
checkboxNode: React.ReactNode;
|
|
9
|
+
dataNode: React.ReactNode;
|
|
10
|
+
}) => ReactNode;
|
|
11
|
+
/** 头渲染 */
|
|
12
|
+
headerRender?: (originNode: React.ReactNode) => ReactNode;
|
|
13
|
+
/** 选择,尽量保持和table的一致 */
|
|
14
|
+
rowSelection?: {
|
|
15
|
+
getCheckboxProps?: (record: T) => Omit<GetProps<typeof Checkbox>, 'checked' | 'onChange'>;
|
|
16
|
+
onChange?: (keys: React.Key[], items: T[]) => void;
|
|
17
|
+
selectedRowKeys?: React.Key[];
|
|
18
|
+
};
|
|
19
|
+
dataSource?: T[];
|
|
20
|
+
/** 默认加载展开Collapse */
|
|
21
|
+
defaultExpandAllCollapse?: boolean;
|
|
22
|
+
/** 滚动高度 */
|
|
23
|
+
scroll?: {
|
|
24
|
+
y?: number;
|
|
25
|
+
} | ((height?: number) => {
|
|
26
|
+
y?: number;
|
|
27
|
+
});
|
|
28
|
+
/**
|
|
29
|
+
* 内部table最大行数
|
|
30
|
+
* - 配置了才会生效
|
|
31
|
+
*/
|
|
32
|
+
tableMaxRowCount?: number;
|
|
33
|
+
}
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
var _excluded = ["fieldsConfig", "requestFields", "requestFieldsUrl", "requestFieldsParams", "scroll", "virtual", "titleRender", "rowSelection", "dataSource", "headerRender", "defaultExpandAllCollapse", "tableMaxRowCount"];
|
|
2
|
+
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
3
|
+
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
4
|
+
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
5
|
+
import React from 'react';
|
|
6
|
+
import { Checkbox, Collapse, List, Skeleton } from 'antd';
|
|
7
|
+
import { CaretRightOutlined } from '@ant-design/icons';
|
|
8
|
+
import { useDebounceEffect, useDeepCompareEffect } from 'ahooks';
|
|
9
|
+
import classNames from "classnames";
|
|
10
|
+
import VirtualList from 'rc-virtual-list';
|
|
11
|
+
import { useStateData, useRequestFields, useRequestFieldsConfig, useRexProConfigProvider } from "../..";
|
|
12
|
+
import { Header, TableMoreData, TableTitle, Wrapper } from "./style";
|
|
13
|
+
import { BaseTable } from "../base-table/base-table";
|
|
14
|
+
import { DataCell } from "../data-cell/data-cell";
|
|
15
|
+
export var BaseListTable = function BaseListTable(_ref) {
|
|
16
|
+
var fieldsConfig = _ref.fieldsConfig,
|
|
17
|
+
requestFields = _ref.requestFields,
|
|
18
|
+
requestFieldsUrl = _ref.requestFieldsUrl,
|
|
19
|
+
requestFieldsParams = _ref.requestFieldsParams,
|
|
20
|
+
scroll = _ref.scroll,
|
|
21
|
+
virtual = _ref.virtual,
|
|
22
|
+
titleRender = _ref.titleRender,
|
|
23
|
+
rowSelection = _ref.rowSelection,
|
|
24
|
+
_ref$dataSource = _ref.dataSource,
|
|
25
|
+
dataSource = _ref$dataSource === void 0 ? [] : _ref$dataSource,
|
|
26
|
+
headerRender = _ref.headerRender,
|
|
27
|
+
defaultExpandAllCollapse = _ref.defaultExpandAllCollapse,
|
|
28
|
+
tableMaxRowCount = _ref.tableMaxRowCount,
|
|
29
|
+
tableProps = _objectWithoutProperties(_ref, _excluded);
|
|
30
|
+
var _useRexProConfigProvi = useRexProConfigProvider(),
|
|
31
|
+
formatMessage = _useRexProConfigProvi.intl.formatMessage;
|
|
32
|
+
var responseConfig = useRequestFieldsConfig();
|
|
33
|
+
var openCheckbox = !!rowSelection;
|
|
34
|
+
var _useStateData = useStateData(function () {
|
|
35
|
+
return {
|
|
36
|
+
tableRequestFieldsPromise: undefined,
|
|
37
|
+
/** 唯一key字段 */
|
|
38
|
+
keyField: 'key',
|
|
39
|
+
/** 选中 */
|
|
40
|
+
selected: [],
|
|
41
|
+
/** 选中数据 */
|
|
42
|
+
selectedItems: [],
|
|
43
|
+
/** checkbox props */
|
|
44
|
+
checkboxPropsMap: {},
|
|
45
|
+
/** checkbox 禁用 */
|
|
46
|
+
checkboxDisabled: [],
|
|
47
|
+
/** 行状态记录 */
|
|
48
|
+
recordStatus: {},
|
|
49
|
+
scrollHeight: 300,
|
|
50
|
+
listKey: "list-".concat(Date.now(), "-").concat(parseInt("".concat(Math.random() * 10000), 10))
|
|
51
|
+
};
|
|
52
|
+
}),
|
|
53
|
+
state = _useStateData.state,
|
|
54
|
+
update = _useStateData.update;
|
|
55
|
+
var _useRequestFields = useRequestFields({
|
|
56
|
+
request: requestFields,
|
|
57
|
+
requestFieldsUrl: requestFieldsUrl || responseConfig.tableHeaderUrl,
|
|
58
|
+
requestFieldsParams: requestFieldsParams || responseConfig.tableHeaderParams,
|
|
59
|
+
fieldsConfig: fieldsConfig || responseConfig.tableHeaderConfig
|
|
60
|
+
}),
|
|
61
|
+
loading = _useRequestFields.loading,
|
|
62
|
+
fields = _useRequestFields.fields;
|
|
63
|
+
var renderItem = function renderItem(item, index) {
|
|
64
|
+
var key = item[state.keyField];
|
|
65
|
+
var openMaxRowCountRow = typeof tableMaxRowCount === 'number';
|
|
66
|
+
var childrenDataSource = 'children' in item && Array.isArray(item.children) ? item.children : [];
|
|
67
|
+
state.recordStatus[key] = state.recordStatus[key] || {};
|
|
68
|
+
var config = state.recordStatus[key];
|
|
69
|
+
var children = childrenDataSource;
|
|
70
|
+
if (openMaxRowCountRow && !config.expandMoreData) {
|
|
71
|
+
children = childrenDataSource.slice(0, tableMaxRowCount);
|
|
72
|
+
}
|
|
73
|
+
var titleNode = function () {
|
|
74
|
+
var checkboxNode = openCheckbox ? /*#__PURE__*/React.createElement(Checkbox, _extends({}, state.checkboxPropsMap["".concat(key)], {
|
|
75
|
+
checked: state.selected.includes(key),
|
|
76
|
+
onChange: function onChange(e) {
|
|
77
|
+
if (e.target.checked) {
|
|
78
|
+
state.selected.push(key);
|
|
79
|
+
state.selectedItems.push(item);
|
|
80
|
+
} else {
|
|
81
|
+
state.selected = state.selected.filter(function (k) {
|
|
82
|
+
return k !== key;
|
|
83
|
+
});
|
|
84
|
+
state.selectedItems = dataSource.filter(function (k) {
|
|
85
|
+
return k !== item;
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
update();
|
|
89
|
+
}
|
|
90
|
+
})) : /*#__PURE__*/React.createElement(React.Fragment, null);
|
|
91
|
+
var dataNode = /*#__PURE__*/React.createElement(React.Fragment, null, Object.keys(item).map(function (inlineKey) {
|
|
92
|
+
var data = item[inlineKey];
|
|
93
|
+
if ([state.keyField, 'children'].includes(inlineKey) || !Array.isArray(data)) return /*#__PURE__*/React.createElement("span", {
|
|
94
|
+
style: {
|
|
95
|
+
display: 'none'
|
|
96
|
+
},
|
|
97
|
+
key: inlineKey
|
|
98
|
+
});
|
|
99
|
+
return /*#__PURE__*/React.createElement(DataCell, {
|
|
100
|
+
key: inlineKey,
|
|
101
|
+
items: data
|
|
102
|
+
});
|
|
103
|
+
}));
|
|
104
|
+
return /*#__PURE__*/React.createElement(TableTitle, {
|
|
105
|
+
className: "base-list-table-table-title"
|
|
106
|
+
}, titleRender ? titleRender(item, index, {
|
|
107
|
+
checkboxNode: checkboxNode,
|
|
108
|
+
dataNode: dataNode
|
|
109
|
+
}) : /*#__PURE__*/React.createElement(React.Fragment, null, checkboxNode, dataNode));
|
|
110
|
+
}();
|
|
111
|
+
var bodyNode = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(BaseTable, _extends({
|
|
112
|
+
scroll: {
|
|
113
|
+
x: 1000
|
|
114
|
+
}
|
|
115
|
+
}, tableProps, {
|
|
116
|
+
dataSource: children,
|
|
117
|
+
fieldsConfig: fields,
|
|
118
|
+
pagination: false
|
|
119
|
+
})), openMaxRowCountRow && childrenDataSource.length > tableMaxRowCount ? /*#__PURE__*/React.createElement(TableMoreData, {
|
|
120
|
+
className: "base-list-table-more-data"
|
|
121
|
+
}, /*#__PURE__*/React.createElement("a", {
|
|
122
|
+
href: "void",
|
|
123
|
+
"aria-hidden": "true",
|
|
124
|
+
onClick: function onClick(e) {
|
|
125
|
+
e.preventDefault();
|
|
126
|
+
config.expandMoreData = !config.expandMoreData;
|
|
127
|
+
update();
|
|
128
|
+
}
|
|
129
|
+
}, config.expandMoreData ? formatMessage({
|
|
130
|
+
id: 'bit.data-display.base-list-table.expand-more-data-hide',
|
|
131
|
+
defaultMessage: '收起'
|
|
132
|
+
}) : formatMessage({
|
|
133
|
+
id: 'bit.data-display.base-list-table.expand-more-data',
|
|
134
|
+
defaultMessage: '还有{count}条数据未展示'
|
|
135
|
+
}, {
|
|
136
|
+
count: childrenDataSource.length - tableMaxRowCount
|
|
137
|
+
}))) : /*#__PURE__*/React.createElement(React.Fragment, null));
|
|
138
|
+
return /*#__PURE__*/React.createElement(List.Item, {
|
|
139
|
+
key: key
|
|
140
|
+
}, /*#__PURE__*/React.createElement(Collapse, {
|
|
141
|
+
size: "small",
|
|
142
|
+
collapsible: "icon",
|
|
143
|
+
destroyInactivePanel: true
|
|
144
|
+
// bordered={false}
|
|
145
|
+
,
|
|
146
|
+
defaultActiveKey: defaultExpandAllCollapse && (typeof config.collapseActiveKey === 'undefined' || config.collapseActiveKey) ? [key] : []
|
|
147
|
+
// activeKey={config.collapseActiveKey ? [key as string] : []}
|
|
148
|
+
,
|
|
149
|
+
expandIcon: function expandIcon(_ref2) {
|
|
150
|
+
var isActive = _ref2.isActive;
|
|
151
|
+
return /*#__PURE__*/React.createElement(CaretRightOutlined, {
|
|
152
|
+
rotate: isActive ? 90 : 0
|
|
153
|
+
});
|
|
154
|
+
},
|
|
155
|
+
items: [{
|
|
156
|
+
key: key,
|
|
157
|
+
label: titleNode,
|
|
158
|
+
children: bodyNode
|
|
159
|
+
}],
|
|
160
|
+
onChange: function onChange() {
|
|
161
|
+
config.collapseActiveKey = !config.collapseActiveKey;
|
|
162
|
+
// update();
|
|
163
|
+
}
|
|
164
|
+
}));
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
/** 处理数据 */
|
|
168
|
+
useDebounceEffect(function () {
|
|
169
|
+
state.recordStatus = {};
|
|
170
|
+
// if (!openCheckbox) {
|
|
171
|
+
// update();
|
|
172
|
+
// return;
|
|
173
|
+
// }
|
|
174
|
+
dataSource.forEach(function (item) {
|
|
175
|
+
var _rowSelection$getChec;
|
|
176
|
+
var key = item[state.keyField];
|
|
177
|
+
var checkboxProps = (rowSelection === null || rowSelection === void 0 || (_rowSelection$getChec = rowSelection.getCheckboxProps) === null || _rowSelection$getChec === void 0 ? void 0 : _rowSelection$getChec.call(rowSelection, item)) || {};
|
|
178
|
+
state.checkboxPropsMap["".concat(key)] = checkboxProps;
|
|
179
|
+
if (defaultExpandAllCollapse) {
|
|
180
|
+
state.recordStatus["".concat(key)] = {
|
|
181
|
+
collapseActiveKey: true
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
if (checkboxProps.disabled) {
|
|
185
|
+
state.checkboxDisabled.push(key);
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
update();
|
|
189
|
+
}, [dataSource], {
|
|
190
|
+
wait: 100
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
/** 回调选中值 */
|
|
194
|
+
useDebounceEffect(function () {
|
|
195
|
+
var _rowSelection$onChang;
|
|
196
|
+
rowSelection === null || rowSelection === void 0 || (_rowSelection$onChang = rowSelection.onChange) === null || _rowSelection$onChang === void 0 || _rowSelection$onChang.call(rowSelection, state.selected, state.selectedItems);
|
|
197
|
+
}, [state.selected, state.selected.length], {
|
|
198
|
+
wait: 0
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
/** 同步值 */
|
|
202
|
+
useDeepCompareEffect(function () {
|
|
203
|
+
if (!openCheckbox) return;
|
|
204
|
+
if (typeof rowSelection.selectedRowKeys === 'undefined') return;
|
|
205
|
+
state.selected = rowSelection.selectedRowKeys || [];
|
|
206
|
+
state.selectedItems = dataSource.filter(function (item) {
|
|
207
|
+
return state.selected.includes(item[state.keyField]);
|
|
208
|
+
});
|
|
209
|
+
update();
|
|
210
|
+
}, [rowSelection === null || rowSelection === void 0 ? void 0 : rowSelection.selectedRowKeys]);
|
|
211
|
+
useDebounceEffect(function () {
|
|
212
|
+
if (loading) return;
|
|
213
|
+
var timer = null;
|
|
214
|
+
var fn = function fn() {
|
|
215
|
+
var _document$querySelect, _document$querySelect2, _document$querySelect3;
|
|
216
|
+
var bodyEl = ((_document$querySelect = document.querySelector(".".concat(state.listKey))) === null || _document$querySelect === void 0 ? void 0 : _document$querySelect.querySelector('.rc-virtual-list')) || ((_document$querySelect2 = document.querySelector(".".concat(state.listKey))) === null || _document$querySelect2 === void 0 ? void 0 : _document$querySelect2.querySelector('ul')) || ((_document$querySelect3 = document.querySelector(".".concat(state.listKey))) === null || _document$querySelect3 === void 0 ? void 0 : _document$querySelect3.querySelector('.ant-spin-nested-loading')) || document.querySelector(".".concat(state.listKey));
|
|
217
|
+
// console.log(bodyEl);
|
|
218
|
+
|
|
219
|
+
if (!bodyEl) return;
|
|
220
|
+
if (timer) clearTimeout(timer);
|
|
221
|
+
timer = setTimeout(function () {
|
|
222
|
+
timer = null;
|
|
223
|
+
// 54: 底部padding + 分页高度 + 分页padding
|
|
224
|
+
state.scrollHeight = Math.max(window.innerHeight - bodyEl.getBoundingClientRect().top - 54, 300);
|
|
225
|
+
// console.log(state.scrollHeight);
|
|
226
|
+
update();
|
|
227
|
+
}, 0);
|
|
228
|
+
};
|
|
229
|
+
fn();
|
|
230
|
+
window.addEventListener('resize', fn);
|
|
231
|
+
return function () {
|
|
232
|
+
window.removeEventListener('resize', fn);
|
|
233
|
+
};
|
|
234
|
+
}, [loading], {
|
|
235
|
+
wait: 0
|
|
236
|
+
});
|
|
237
|
+
if (loading) {
|
|
238
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Skeleton, {
|
|
239
|
+
active: true
|
|
240
|
+
}), /*#__PURE__*/React.createElement(Skeleton, {
|
|
241
|
+
active: true
|
|
242
|
+
}));
|
|
243
|
+
}
|
|
244
|
+
return /*#__PURE__*/React.createElement(Wrapper, {
|
|
245
|
+
className: classNames("base-list-table-table-box", state.listKey)
|
|
246
|
+
}, /*#__PURE__*/React.createElement(Header, {
|
|
247
|
+
className: "base-list-table-table-header"
|
|
248
|
+
}, function () {
|
|
249
|
+
var originNode = openCheckbox ? /*#__PURE__*/React.createElement(Checkbox, {
|
|
250
|
+
disabled: dataSource.length === 0,
|
|
251
|
+
indeterminate: state.selected.length > 0 && state.selected.length < dataSource.length - state.checkboxDisabled.length,
|
|
252
|
+
checked: dataSource.length !== 0 && state.selected.length === dataSource.length - state.checkboxDisabled.length,
|
|
253
|
+
onChange: function onChange(e) {
|
|
254
|
+
if (e.target.checked) {
|
|
255
|
+
var baseArr = dataSource.filter(function (item) {
|
|
256
|
+
return !state.checkboxDisabled.includes(item[state.keyField]);
|
|
257
|
+
});
|
|
258
|
+
state.selected = baseArr.map(function (item) {
|
|
259
|
+
return item[state.keyField];
|
|
260
|
+
});
|
|
261
|
+
state.selectedItems = baseArr;
|
|
262
|
+
} else {
|
|
263
|
+
state.selected = [];
|
|
264
|
+
state.selectedItems = [];
|
|
265
|
+
}
|
|
266
|
+
update();
|
|
267
|
+
}
|
|
268
|
+
}) : /*#__PURE__*/React.createElement(React.Fragment, null);
|
|
269
|
+
if (headerRender) return headerRender(originNode);
|
|
270
|
+
return originNode;
|
|
271
|
+
}()), virtual ? /*#__PURE__*/React.createElement(List, {
|
|
272
|
+
size: "small"
|
|
273
|
+
}, /*#__PURE__*/React.createElement(VirtualList, {
|
|
274
|
+
data: dataSource,
|
|
275
|
+
fullHeight: false,
|
|
276
|
+
height: typeof scroll === 'function' ? scroll(state.scrollHeight).y : scroll === null || scroll === void 0 ? void 0 : scroll.y,
|
|
277
|
+
itemHeight: 200,
|
|
278
|
+
itemKey: state.keyField
|
|
279
|
+
// onScroll={onScroll}
|
|
280
|
+
}, renderItem)) : /*#__PURE__*/React.createElement(List, {
|
|
281
|
+
style: {
|
|
282
|
+
maxHeight: typeof scroll === 'function' ? scroll(state.scrollHeight).y : scroll === null || scroll === void 0 ? void 0 : scroll.y,
|
|
283
|
+
overflow: 'auto'
|
|
284
|
+
},
|
|
285
|
+
dataSource: dataSource,
|
|
286
|
+
itemLayout: "vertical",
|
|
287
|
+
size: "small",
|
|
288
|
+
rowKey: state.keyField,
|
|
289
|
+
renderItem: renderItem
|
|
290
|
+
}));
|
|
291
|
+
};
|
|
292
|
+
;
|