@cfmm/umi-plugins-ui-v2 0.0.7 → 0.0.9
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/components/CrudTable.tpl +230 -57
- package/dist/cjs/components/MySelect.tpl +22 -18
- package/dist/cjs/types/CrudTableTypes.d.ts +1 -1
- package/dist/cjs/types/CrudTableTypes.js +1 -1
- package/dist/esm/components/CrudTable.tpl +230 -57
- package/dist/esm/components/MySelect.tpl +22 -18
- package/dist/esm/types/CrudTableTypes.d.ts +1 -1
- package/dist/esm/types/CrudTableTypes.js +1 -1
- package/package.json +1 -1
|
@@ -1,22 +1,29 @@
|
|
|
1
1
|
import { CloudDownloadOutlined, DownloadOutlined, PlusOutlined, UploadOutlined } from '@ant-design/icons';
|
|
2
|
-
import { ActionType, ColumnsState, ProColumns, ProTable } from '@ant-design/pro-components';
|
|
2
|
+
import { ActionType, ColumnsState, ProColumns, ProFormInstance, ProTable } from '@ant-design/pro-components';
|
|
3
3
|
import { cfmmUtils, ImportExecl, useFormatLocale, useIntl, useModel } from '@umijs/max';
|
|
4
|
-
import { Button, Dropdown, MenuProps, message, Modal, Progress } from 'antd';
|
|
4
|
+
import { Button, Drawer, Dropdown, MenuProps, message, Modal, Progress } from 'antd';
|
|
5
5
|
import React, { ForwardedRef, forwardRef, useImperativeHandle, useMemo, useRef, useState } from 'react';
|
|
6
6
|
import useAction from '../hooks/useAction';
|
|
7
7
|
import useAuthority from '../hooks/useAuthority';
|
|
8
8
|
import useMemoizedFn from '../hooks/useMemoizedFn';
|
|
9
9
|
import useQueryTableList from '../hooks/useQueryTableList';
|
|
10
|
-
import {
|
|
10
|
+
import { importMultiLangList, queryLangInfoExportList } from '../services';
|
|
11
|
+
import {
|
|
12
|
+
API,
|
|
13
|
+
CrudTableConfig,
|
|
14
|
+
CrudTableRefType,
|
|
15
|
+
ExportMultiLangListItem,
|
|
16
|
+
LangInfoItem,
|
|
17
|
+
RefDrawerFormRefType,
|
|
18
|
+
} from '../types';
|
|
19
|
+
import { genExcel, genExcelAdvanced, getExportColumns, getExportValueForColumns } from '../utils/excelHelper';
|
|
20
|
+
import { handleImportList, showCheckErrorTips } from '../utils/importHelper';
|
|
11
21
|
import ActionLogDrawer from './ActionLogDrawer';
|
|
12
22
|
import CreateForm from './AddDrawerForm';
|
|
13
23
|
import DropdownButton from './DropdownButton';
|
|
14
24
|
import EditMultiLangForm from './EditMultiLangForm';
|
|
15
25
|
import MyFooterToolbar from './MyFooterToolbar';
|
|
16
26
|
import ViewTableItemDrawer from './ViewTableItemDrawer';
|
|
17
|
-
import { genExcel, genExcelAdvanced, getExportColumns, getExportValueForColumns } from '../utils/excelHelper';
|
|
18
|
-
import { importMultiLangList, queryLangInfoExportList } from '../services';
|
|
19
|
-
import { handleImportList, showCheckErrorTips } from '../utils/importHelper';
|
|
20
27
|
|
|
21
28
|
const { confirm } = Modal;
|
|
22
29
|
export const TABLE_SCROLL = { x: 'max-content' };
|
|
@@ -63,6 +70,10 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
63
70
|
actionColumnConfig = {} as CrudTableConfig['actionColumnConfig'],
|
|
64
71
|
downloadTemplate = {},
|
|
65
72
|
onAdd,
|
|
73
|
+
onView,
|
|
74
|
+
onEdit,
|
|
75
|
+
onDelete,
|
|
76
|
+
onActionLog,
|
|
66
77
|
onAfterSearch,
|
|
67
78
|
onBeforeEdit,
|
|
68
79
|
onBeforeDelete,
|
|
@@ -87,6 +98,7 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
87
98
|
const actionRef = useRef<ActionType>();
|
|
88
99
|
const updateDrawerRef = useRef<RefDrawerFormRefType>();
|
|
89
100
|
const timer = useRef<NodeJS.Timeout>();
|
|
101
|
+
const updateFormRef = useRef<ProFormInstance>();
|
|
90
102
|
|
|
91
103
|
// 状态管理
|
|
92
104
|
const [tableList, setTableList] = useState<T[]>([]);
|
|
@@ -96,6 +108,7 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
96
108
|
const [selectedRows, setSelectedRows] = useState<T[]>([]);
|
|
97
109
|
const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([]);
|
|
98
110
|
const [createModalOpen, setCreateModalOpen] = useState<boolean>(false);
|
|
111
|
+
const [updateModalOpen, setUpdateModalOpen] = useState<boolean>(false);
|
|
99
112
|
|
|
100
113
|
// 多语言编辑状态
|
|
101
114
|
const [editLangModalOpen, setEditLangModalOpen] = useState<boolean>(false);
|
|
@@ -133,27 +146,35 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
133
146
|
setEditLangModalOpen(true);
|
|
134
147
|
});
|
|
135
148
|
|
|
136
|
-
|
|
137
|
-
|
|
149
|
+
// 查询多语言数据
|
|
150
|
+
const queryMultiLangData = useMemoizedFn(
|
|
151
|
+
async (tableName: string, columnName: string): Promise<ExportMultiLangListItem[]> => {
|
|
152
|
+
if (!multiLang) return [];
|
|
138
153
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
154
|
+
if (multiLang.multiLangList) {
|
|
155
|
+
return multiLang.multiLangList;
|
|
156
|
+
}
|
|
142
157
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
158
|
+
if (multiLang.queryExportMultiLangData) {
|
|
159
|
+
return await multiLang.queryExportMultiLangData(tableName, columnName);
|
|
160
|
+
}
|
|
146
161
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
162
|
+
const result = await doAction(
|
|
163
|
+
'GET',
|
|
164
|
+
{ tableName, columnName },
|
|
165
|
+
{
|
|
166
|
+
actionFn: queryLangInfoExportList,
|
|
167
|
+
},
|
|
168
|
+
);
|
|
150
169
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
170
|
+
if (result.success && result.data) {
|
|
171
|
+
return result.data;
|
|
172
|
+
}
|
|
173
|
+
return [];
|
|
174
|
+
},
|
|
175
|
+
);
|
|
156
176
|
|
|
177
|
+
// 导出多语言数据
|
|
157
178
|
const handleExportMultiLang = useMemoizedFn(async () => {
|
|
158
179
|
if (multiLang?.exportMultiLangData) {
|
|
159
180
|
return await multiLang.exportMultiLangData();
|
|
@@ -173,7 +194,14 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
173
194
|
|
|
174
195
|
if (!data.length) return;
|
|
175
196
|
|
|
176
|
-
const handleData = data.map(item => [
|
|
197
|
+
const handleData = data.map((item) => [
|
|
198
|
+
item.dataId,
|
|
199
|
+
item.columnValue,
|
|
200
|
+
item.zh_CN,
|
|
201
|
+
item.zh_TW,
|
|
202
|
+
item.en_US,
|
|
203
|
+
item.th_TH,
|
|
204
|
+
]);
|
|
177
205
|
|
|
178
206
|
genExcelAdvanced(
|
|
179
207
|
`${title}.xlsx`,
|
|
@@ -184,10 +212,12 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
184
212
|
codeColumns: codeList,
|
|
185
213
|
title: title,
|
|
186
214
|
titleStyle: { fontSize: 18, bold: true },
|
|
187
|
-
notice: [
|
|
215
|
+
notice: [
|
|
216
|
+
formatMessage({ id: 'cfmmUI.common.button.exportMultiLang.notice', defaultMessage: '请勿修改表格结构' }),
|
|
217
|
+
],
|
|
188
218
|
worksheetColumns: new Array(codeList.length).fill('').map((item, index) => ({ hidden: index == 0, width: 25 })),
|
|
189
219
|
lockedColumns: [0], // 第一列不允许修改
|
|
190
|
-
}
|
|
220
|
+
},
|
|
191
221
|
);
|
|
192
222
|
return false;
|
|
193
223
|
});
|
|
@@ -212,14 +242,18 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
212
242
|
// return Promise.resolve({ success: false });
|
|
213
243
|
// }
|
|
214
244
|
|
|
215
|
-
const result = await doAction(
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
245
|
+
const result = await doAction(
|
|
246
|
+
'IMPORT',
|
|
247
|
+
{
|
|
248
|
+
tableName: tableName,
|
|
249
|
+
columnName: columnName,
|
|
250
|
+
i18nDataList: newList.filter((item) => item.en_US || item.zh_CN || item.zh_TW || item.th_TH),
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
actionFn: importMultiLangList,
|
|
254
|
+
showMsg: false,
|
|
255
|
+
},
|
|
256
|
+
);
|
|
223
257
|
|
|
224
258
|
if (result.success) {
|
|
225
259
|
actionRef.current?.reload();
|
|
@@ -359,6 +393,10 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
359
393
|
editData = processedData;
|
|
360
394
|
}
|
|
361
395
|
|
|
396
|
+
setUpdateModalOpen(true);
|
|
397
|
+
|
|
398
|
+
updateFormRef.current?.setFieldsValue(editData);
|
|
399
|
+
|
|
362
400
|
updateDrawerRef.current?.show();
|
|
363
401
|
setEditRow(editData);
|
|
364
402
|
});
|
|
@@ -402,9 +440,9 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
402
440
|
});
|
|
403
441
|
};
|
|
404
442
|
|
|
405
|
-
//
|
|
443
|
+
// 导入列表数据
|
|
406
444
|
const importListData = useMemoizedFn(async (list: T[]) => {
|
|
407
|
-
if(!apis.importData && !interceptors.importData?.submitImportListData) return;
|
|
445
|
+
if (!apis.importData && !interceptors.importData?.submitImportListData) return;
|
|
408
446
|
|
|
409
447
|
// 处理导入数据,正确赋值字段以及转格式
|
|
410
448
|
const newList = interceptors.importData?.request?.(list) ?? handleImportList<T>(list);
|
|
@@ -417,7 +455,7 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
417
455
|
return Promise.resolve({ success: false });
|
|
418
456
|
}
|
|
419
457
|
|
|
420
|
-
const resutl = await interceptors.importData?.submitImportListData?.(newList) || await submitListData(newList);
|
|
458
|
+
const resutl = (await interceptors.importData?.submitImportListData?.(newList)) || (await submitListData(newList));
|
|
421
459
|
|
|
422
460
|
onAfterImport?.(resutl);
|
|
423
461
|
|
|
@@ -427,13 +465,14 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
427
465
|
return resutl;
|
|
428
466
|
});
|
|
429
467
|
|
|
468
|
+
// 处理进度条变化
|
|
430
469
|
const handlePercentChange = (value: number) => {
|
|
431
470
|
setPercent(value);
|
|
432
471
|
};
|
|
433
472
|
|
|
434
473
|
/**
|
|
435
|
-
|
|
436
|
-
|
|
474
|
+
* 下载数据为Excel
|
|
475
|
+
*/
|
|
437
476
|
const handleDownloadExcel = async () => {
|
|
438
477
|
const result = await handleSearchAll();
|
|
439
478
|
if (!result.success || result.error || !result.data) {
|
|
@@ -558,10 +597,10 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
558
597
|
removeAuth={removeAuth}
|
|
559
598
|
viewAuth={viewAuth}
|
|
560
599
|
actionLogAuth={actionLogAuth}
|
|
561
|
-
onActionLog={() => setActionLogRow(record)}
|
|
562
|
-
onView={() => setViewRow(record)}
|
|
563
|
-
onEdit={() => handleClickEdit(record)}
|
|
564
|
-
onRemove={() => handleDelete([record[rowKey]])}
|
|
600
|
+
onActionLog={onActionLog ? () => onActionLog(record) : () => setActionLogRow(record)}
|
|
601
|
+
onView={onView ? () => onView(record) : () => setViewRow(record)}
|
|
602
|
+
onEdit={onEdit ? () => onEdit(record) : () => handleClickEdit(record)}
|
|
603
|
+
onRemove={onDelete ? () => onDelete([record[rowKey]]) : () => handleDelete([record[rowKey]])}
|
|
565
604
|
{...(actionColumnConfig?.getDropdownButtonProps?.(record) ?? {})}
|
|
566
605
|
/>
|
|
567
606
|
);
|
|
@@ -569,7 +608,7 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
569
608
|
...(actionColumnConfig?.columnConfig ?? {}),
|
|
570
609
|
},
|
|
571
610
|
];
|
|
572
|
-
}, [rowKey, columns, multiLang, defaultAuthCodes, actionColumnConfig]);
|
|
611
|
+
}, [rowKey, columns, multiLang, defaultAuthCodes, actionColumnConfig, updateFormRef]);
|
|
573
612
|
|
|
574
613
|
useImperativeHandle(
|
|
575
614
|
ref,
|
|
@@ -630,13 +669,31 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
630
669
|
|
|
631
670
|
// 处理表格额外操作按钮列表
|
|
632
671
|
const handleTableButtonList = (allButtons: MenuProps['items']) => {
|
|
633
|
-
if(!allButtons?.length) return allButtons;
|
|
672
|
+
if (!allButtons?.length) return allButtons;
|
|
634
673
|
|
|
635
674
|
let renderList: MenuProps['items'] | any[] = [...(allButtons ?? [])];
|
|
636
675
|
|
|
676
|
+
const { replaceTableButtonItems = [], extraTableButtonList = [] } = tableProps || {};
|
|
677
|
+
|
|
678
|
+
// 处理替换的按钮
|
|
679
|
+
if (replaceTableButtonItems?.length) {
|
|
680
|
+
const replaceKeys = new Set(replaceTableButtonItems.map((item) => item.key));
|
|
681
|
+
|
|
682
|
+
renderList = renderList.map((item) => {
|
|
683
|
+
if (replaceKeys.has(item.key)) {
|
|
684
|
+
const newItem = replaceTableButtonItems.find((replaceItem) => replaceItem.key === item.key) || item;
|
|
685
|
+
return {
|
|
686
|
+
auth: item.auth,
|
|
687
|
+
...newItem,
|
|
688
|
+
};
|
|
689
|
+
}
|
|
690
|
+
return item;
|
|
691
|
+
});
|
|
692
|
+
}
|
|
693
|
+
|
|
637
694
|
// 将额外的按钮按指定位置放入渲染列表
|
|
638
|
-
if (
|
|
639
|
-
|
|
695
|
+
if (extraTableButtonList?.length) {
|
|
696
|
+
extraTableButtonList.forEach((v, idx) => {
|
|
640
697
|
const item = {
|
|
641
698
|
key: typeof v.auth === 'string' ? v.auth : 'extra-' + idx,
|
|
642
699
|
label: v.label,
|
|
@@ -704,7 +761,8 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
704
761
|
),
|
|
705
762
|
},
|
|
706
763
|
{
|
|
707
|
-
auth:
|
|
764
|
+
auth:
|
|
765
|
+
getAuthorityFn(defaultAuthCodes.import) && (apis.importData || interceptors.importData?.submitImportListData),
|
|
708
766
|
key: 'import',
|
|
709
767
|
label: (
|
|
710
768
|
<ImportExecl key="importMaterial" rangeStart={{ c: 0, r: 2 }} onChange={importListData}>
|
|
@@ -719,19 +777,19 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
719
777
|
auth: getAuthorityFn(defaultAuthCodes.export),
|
|
720
778
|
key: 'export',
|
|
721
779
|
disabled: !tableList.length || loading,
|
|
722
|
-
label:
|
|
723
|
-
<
|
|
724
|
-
|
|
725
|
-
|
|
780
|
+
label: (
|
|
781
|
+
<a onClick={handleDownloadExcel} key="export">
|
|
782
|
+
<CloudDownloadOutlined style={{ marginRight: 6 }} />
|
|
783
|
+
{formatMessage({ id: 'cfmmUI.common.button.exportData', defaultMessage: '导出数据' })}
|
|
784
|
+
</a>
|
|
785
|
+
),
|
|
726
786
|
},
|
|
727
787
|
];
|
|
728
788
|
|
|
729
789
|
allButtons = handleTableButtonList(allButtons);
|
|
730
790
|
|
|
731
791
|
// 过滤有权限的按钮,并移除 auth 属性避免传递到 DOM
|
|
732
|
-
return allButtons
|
|
733
|
-
.filter((button) => button.auth)
|
|
734
|
-
.map(({ auth, ...rest }) => rest);
|
|
792
|
+
return allButtons!.filter((button) => button.auth).map(({ auth, ...rest }) => rest);
|
|
735
793
|
}, [tableList, loading, columnsStateMap]);
|
|
736
794
|
|
|
737
795
|
return (
|
|
@@ -750,10 +808,14 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
750
808
|
toolBarRender={useMemoizedFn(() => {
|
|
751
809
|
if (!getBarButtons?.length) return [];
|
|
752
810
|
return [
|
|
753
|
-
<Dropdown.Button
|
|
811
|
+
<Dropdown.Button
|
|
812
|
+
type="primary"
|
|
813
|
+
loading={actionLoading || downloadButtonLoading}
|
|
814
|
+
menu={{ items: getBarButtons.slice(1) }}
|
|
815
|
+
>
|
|
754
816
|
{getBarButtons[0].icon}
|
|
755
817
|
{getBarButtons[0].label}
|
|
756
|
-
</Dropdown.Button
|
|
818
|
+
</Dropdown.Button>,
|
|
757
819
|
];
|
|
758
820
|
})}
|
|
759
821
|
request={useMemoizedFn(async (params, sorter) => {
|
|
@@ -844,7 +906,7 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
844
906
|
)}
|
|
845
907
|
|
|
846
908
|
{/* 编辑表单 */}
|
|
847
|
-
{updateConfig.Component
|
|
909
|
+
{updateConfig.Component ? (
|
|
848
910
|
<updateConfig.Component
|
|
849
911
|
updateDrawerRef={updateDrawerRef}
|
|
850
912
|
values={editRow}
|
|
@@ -864,6 +926,63 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
864
926
|
}}
|
|
865
927
|
{...(updateConfig.props as U)}
|
|
866
928
|
/>
|
|
929
|
+
) : (
|
|
930
|
+
<Drawer
|
|
931
|
+
width={500}
|
|
932
|
+
title={formatMessage({
|
|
933
|
+
id: `${baseLocalCode}.update.title`,
|
|
934
|
+
defaultMessage: '修改',
|
|
935
|
+
})}
|
|
936
|
+
forceRender // 勿删,否则formRef无法被绑定到ProTable上,因为ProTable是异步渲染的
|
|
937
|
+
maskClosable={false}
|
|
938
|
+
open={updateModalOpen}
|
|
939
|
+
onClose={() => {
|
|
940
|
+
setEditRow(null);
|
|
941
|
+
setUpdateModalOpen(false);
|
|
942
|
+
}}
|
|
943
|
+
// footer={<Button onClick={() => props.form?.resetFields()}>清空</Button>}
|
|
944
|
+
>
|
|
945
|
+
<ProTable<T, T>
|
|
946
|
+
loading={actionLoading}
|
|
947
|
+
onSubmit={useMemoizedFn(async (value) => {
|
|
948
|
+
const success = await handleAction('PUT', {
|
|
949
|
+
...value,
|
|
950
|
+
[rowKey]: editRow?.[rowKey],
|
|
951
|
+
});
|
|
952
|
+
if (success) {
|
|
953
|
+
actionRef.current?.reload();
|
|
954
|
+
setEditRow(null);
|
|
955
|
+
setUpdateModalOpen(false);
|
|
956
|
+
}
|
|
957
|
+
return success;
|
|
958
|
+
})}
|
|
959
|
+
rowKey={rowKey as string}
|
|
960
|
+
type="form"
|
|
961
|
+
columns={columns}
|
|
962
|
+
{...(updateConfig.props as U)}
|
|
963
|
+
formRef={updateFormRef}
|
|
964
|
+
onReset={() => {
|
|
965
|
+
updateFormRef.current?.setFieldsValue({ ...(editRow || {}) });
|
|
966
|
+
}}
|
|
967
|
+
// 自定义按钮
|
|
968
|
+
// form={{
|
|
969
|
+
// submitter: {
|
|
970
|
+
// searchConfig: {
|
|
971
|
+
// submitText: '保存',
|
|
972
|
+
// resetText: '还原',
|
|
973
|
+
// },
|
|
974
|
+
// submitButtonProps: { type: 'primary' },
|
|
975
|
+
// resetButtonProps: { type: 'default' },
|
|
976
|
+
// render: (props, dom) => (
|
|
977
|
+
// <Space>
|
|
978
|
+
// <Button onClick={() => props.form?.resetFields()}>清空</Button>
|
|
979
|
+
// {dom[1]} {/* 默认提交按钮 */}
|
|
980
|
+
// </Space>
|
|
981
|
+
// ),
|
|
982
|
+
// },
|
|
983
|
+
// }}
|
|
984
|
+
/>
|
|
985
|
+
</Drawer>
|
|
867
986
|
)}
|
|
868
987
|
|
|
869
988
|
{/* 多语言编辑 */}
|
|
@@ -886,6 +1005,60 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
886
1005
|
);
|
|
887
1006
|
}
|
|
888
1007
|
|
|
1008
|
+
/**
|
|
1009
|
+
* 涵盖增删改查、数据导入导出、多语言导入导出的通用表格组件
|
|
1010
|
+
* @param props - 组件配置,包含国际化配置、表格列配置、表格其他配置、操作列配置、多语言配置、接口配置、拦截器配置、新增表单配置、编辑表单配置、按钮权限编码配置、操作后回调、查询后回调、删除后回调、导入后回调、导出后回调、多语言导入导出后回调、查看详情后回调、操作日志后回调
|
|
1011
|
+
* @param props.baseLocalCode - 国际化配置,用于获取增删改查国际化文案,默认会根据baseLocalCode生成
|
|
1012
|
+
* @param props.baseLocalName - 国际化配置,用于获取增删改查国际化文案,默认会根据baseLocalName生成
|
|
1013
|
+
* @param props.rowKey - 表格行key
|
|
1014
|
+
* @param props.columns - 表格列配置
|
|
1015
|
+
* @param props.tableProps - ProTable表格其他配置,增加了replaceTableButtonItems和extraTableButtonList配置
|
|
1016
|
+
* @param props.tableProps.replaceTableButtonItems - 替换表格按钮配置
|
|
1017
|
+
* @param props.tableProps.extraTableButtonList - 额外表格按钮配置
|
|
1018
|
+
* @param props.actionColumnConfig - 操作列配置
|
|
1019
|
+
* @param props.actionColumnConfig.columnConfig - 操作列配置
|
|
1020
|
+
* @param props.actionColumnConfig.getDropdownButtonProps - 操作列下拉按钮配置
|
|
1021
|
+
* @param props.multiLang - 多语言配置
|
|
1022
|
+
* @param props.apis - 接口配置
|
|
1023
|
+
* @param props.apis.query - 查询接口
|
|
1024
|
+
* @param props.apis.handle - 操作接口
|
|
1025
|
+
* @param props.apis.queryById - 查询单条接口
|
|
1026
|
+
* @param props.apis.importData - 导入接口
|
|
1027
|
+
* @param props.interceptors - 拦截器配置
|
|
1028
|
+
* @param props.interceptors.query - 查询拦截器
|
|
1029
|
+
* @param props.interceptors.handle - 操作拦截器
|
|
1030
|
+
* @param props.interceptors.queryById - 查询单条拦截器
|
|
1031
|
+
* @param props.interceptors.importData - 导入拦截器
|
|
1032
|
+
* @param props.createConfig - 新增表单配置
|
|
1033
|
+
* @param props.createConfig.Component - 自定义创建表单组件,如果为空,则使用默认创建表单组件
|
|
1034
|
+
* @param props.createConfig.props - 传递给CreateFormComponent的额外props
|
|
1035
|
+
* @param props.updateConfig - 编辑表单配置
|
|
1036
|
+
* @param props.updateConfig.Component - 自定义编辑表单组件,如果为空,则使用默认编辑表单组件
|
|
1037
|
+
* @param props.updateConfig.props - 传递给EditFormComponent的额外props
|
|
1038
|
+
* @param props.authCodes - 按钮权限编码配置
|
|
1039
|
+
* @param props.authCodes.view - 查看权限
|
|
1040
|
+
* @param props.authCodes.add - 新增权限
|
|
1041
|
+
* @param props.authCodes.edit - 编辑权限
|
|
1042
|
+
* @param props.authCodes.remove - 删除权限
|
|
1043
|
+
* @param props.authCodes.batchRemoveAuth - 批量删除权限
|
|
1044
|
+
* @param props.authCodes.record - 查看操作记录权限
|
|
1045
|
+
* @param props.downloadTemplate - 下载模板参数
|
|
1046
|
+
* @param props.downloadTemplate.templateTypeCode - 模板类型编号,字典中的 TemplateCenterTemplateType
|
|
1047
|
+
* @param props.downloadTemplate.moduleCode - 模块编号,菜单中的目录编号
|
|
1048
|
+
* @param props.onAdd - 自定义新增按钮点击回调
|
|
1049
|
+
* @param props.onView - 自定义查看按钮点击回调
|
|
1050
|
+
* @param props.onEdit - 自定义编辑按钮点击回调
|
|
1051
|
+
* @param props.onDelete - 自定义删除按钮点击回调
|
|
1052
|
+
* @param props.onActionLog - 自定义操作日志点击回调
|
|
1053
|
+
* @param props.onBeforeEdit - 编辑前回调
|
|
1054
|
+
* @param props.onBeforeDelete - 删除前回调
|
|
1055
|
+
* @param props.onAfterDelete - 删除后回调
|
|
1056
|
+
* @param props.onAfterAction - 操作后回调
|
|
1057
|
+
* @param props.onAfterSearch - 查询后回调
|
|
1058
|
+
* @param props.onBeforeAction - 操作前回调
|
|
1059
|
+
* @param props.onAfterImport - 导入后回调
|
|
1060
|
+
* @param ref - 暴露组件一些属性及方法
|
|
1061
|
+
*/
|
|
889
1062
|
export default React.memo(forwardRef(CrudTable)) as <T, U = any, C = any>(
|
|
890
1063
|
props: CrudTableConfig<T, U, C> & {
|
|
891
1064
|
ref?: ForwardedRef<CrudTableRefType<T>>;
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
// This file is generated by Umi automatically
|
|
3
|
+
// DO NOT CHANGE IT MANUALLY!
|
|
1
4
|
import { Empty, Select, Spin } from 'antd';
|
|
2
5
|
import React, {
|
|
3
6
|
ForwardedRef,
|
|
@@ -16,24 +19,6 @@ import { MySelectProps } from '../types';
|
|
|
16
19
|
|
|
17
20
|
const { Option } = Select;
|
|
18
21
|
|
|
19
|
-
/**
|
|
20
|
-
* @param autoSelect 列表只有一项时,直接选中,不需要再次点击
|
|
21
|
-
* @param showAllList 获取所有数据,不分页
|
|
22
|
-
* @param localListData 传递给组件的下拉数据
|
|
23
|
-
* @param backShowList 回显列表
|
|
24
|
-
* @param request 请求列表数据
|
|
25
|
-
* @param keyNames Option组件的参数
|
|
26
|
-
* @param searchKey 搜索传给后端的key
|
|
27
|
-
* @param otherSearchValue 根据其他条件查询下拉列表数据
|
|
28
|
-
* @param selectKey 下拉框选择的值
|
|
29
|
-
* @param onlyShowName 只显示名称
|
|
30
|
-
* @param itemRender 自定义渲染
|
|
31
|
-
* @param valueType 内容类型
|
|
32
|
-
* @param showDropdown 判断下拉框的显示
|
|
33
|
-
* @param getSelectList 获取当前选中的原始数据数组
|
|
34
|
-
* @param dropDownListChange 数据下拉列表变化回调
|
|
35
|
-
* @param 组件Select的参数
|
|
36
|
-
*/
|
|
37
22
|
const MySelect = <T,>(props: MySelectProps<T>, ref: ForwardedRef<any>) => {
|
|
38
23
|
const {
|
|
39
24
|
readonly,
|
|
@@ -262,6 +247,25 @@ const MySelect = <T,>(props: MySelectProps<T>, ref: ForwardedRef<any>) => {
|
|
|
262
247
|
);
|
|
263
248
|
};
|
|
264
249
|
|
|
250
|
+
/**
|
|
251
|
+
* 写在这里使用时才有提示
|
|
252
|
+
* @param autoSelect 列表只有一项时,直接选中,不需要再次点击
|
|
253
|
+
* @param showAllList 获取所有数据,不分页
|
|
254
|
+
* @param localListData 传递给组件的下拉数据
|
|
255
|
+
* @param backShowList 回显列表
|
|
256
|
+
* @param request 请求列表数据
|
|
257
|
+
* @param keyNames Option组件的参数
|
|
258
|
+
* @param searchKey 搜索传给后端的key
|
|
259
|
+
* @param otherSearchValue 根据其他条件查询下拉列表数据
|
|
260
|
+
* @param selectKey 下拉框选择的值
|
|
261
|
+
* @param onlyShowName 只显示名称
|
|
262
|
+
* @param itemRender 自定义渲染
|
|
263
|
+
* @param valueType 内容类型
|
|
264
|
+
* @param showDropdown 判断下拉框的显示
|
|
265
|
+
* @param getSelectList 获取当前选中的原始数据数组
|
|
266
|
+
* @param dropDownListChange 数据下拉列表变化回调
|
|
267
|
+
* @param 组件Select的参数
|
|
268
|
+
*/
|
|
265
269
|
export default React.memo(forwardRef(MySelect)) as <T>(
|
|
266
270
|
props: MySelectProps<T> & { ref?: ForwardedRef<any> },
|
|
267
271
|
) => JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const CrudTableTypes = "\nexport interface CrudTableConfig<T = any, U = {}, C = {}> {\n // \u57FA\u7840\u914D\u7F6E\n baseLocalCode?: string;\n baseLocalName?: string;\n rowKey: keyof T;\n\n /** \u591A\u8BED\u8A00\u7F16\u8F91\u914D\u7F6E */\n multiLang?: {\n /** \u591A\u8BED\u8A00\u8868\u6570\u636E */\n multiLangList?: ExportMultiLangListItem[];\n /** \u591A\u8BED\u8A00\u5B57\u6BB5\u914D\u7F6E */\n fields: {\n /** \u5B57\u6BB5\u540D */\n fieldName: keyof T;\n /** \u8868\u540D */\n tableName: string;\n /** \u5217\u540D */\n columnName: string;\n /** \u70B9\u51FB\u56DE\u8C03\uFF0C\u7528\u4E8E\u8BBE\u7F6ElangInfoItem */\n onClick?: (record: T) => LangInfoItem;\n }[];\n /** \u81EA\u5B9A\u4E49\u5BFC\u51FA\u591A\u8BED\u8A00\u51FD\u6570 */\n exportMultiLangData?: () => Promise<boolean | void>;\n /** \u81EA\u5B9A\u4E49\u67E5\u8BE2\u5BFC\u51FA\u591A\u8BED\u8A00\u51FD\u6570 */\n queryExportMultiLangData?: (tableName: string, columnName: string) => Promise<ExportMultiLangListItem[]>;\n /** \u81EA\u5B9A\u4E49\u5BFC\u5165\u591A\u8BED\u8A00\u51FD\u6570 */\n importMultiLangData?: (list: ExportMultiLangListItem[], tableName: string, columnName: string) => Promise<{ success: boolean; failMsg?: string; data?: any } | void> | void;\n };\n \n /** \u6309\u94AE\u6743\u9650\u7F16\u7801\uFF0C\u9ED8\u8BA4\u4F1A\u6839\u636EbaseLocalCode\u751F\u6210 */\n authCodes?: {\n view?: string | boolean | ((record: T) => boolean | undefined);\n add?: string | boolean;\n edit?: string | boolean | ((record: T) => boolean | undefined);\n /** remove\u6743\u9650\u662F\u51FD\u6570\u65F6\uFF0C\u5982\u679C\u9700\u8981\u6279\u91CF\u5220\u9664\u8BF7\u8BBE\u7F6EbatchRemoveAuth\u4E3Atrue, \u5426\u5219\u4E0D\u4F1A\u663E\u793A\u6279\u91CF\u5220\u9664\u6309\u94AE */\n remove?: string | boolean | ((record: T) => boolean | undefined);\n /** \u6279\u91CF\u5220\u9664\u6743\u9650 */\n batchRemoveAuth?: string | boolean;\n record?: string | boolean | ((record: T) => boolean | undefined);\n };\n\n /** API\u65B9\u6CD5 */\n apis: {\n /** \u67E5\u8BE2\u65B9\u6CD5 */\n query: (params: any) => Promise<any>;\n /** \u64CD\u4F5C\u65B9\u6CD5 */\n handle: (method: API.MethodTypes, data: any) => Promise<any>;\n /** \u6839\u636Eid\u67E5\u8BE2\u8BE6\u60C5\u65B9\u6CD5\uFF0C\u6CA1\u4F20\u5219\u4F7F\u7528\u884C\u6570\u636E\u8FDB\u884C\u7F16\u8F91 */\n queryById?: (id: any) => Promise<any>;\n /** \u5BFC\u5165\u65B9\u6CD5 */\n importData?: (list: T[]) => Promise<any>;\n };\n\n /** API\u62E6\u622A\u5668 */\n interceptors?: {\n /** \u67E5\u8BE2\u62E6\u622A\u5668 */\n query?: {\n /** \u67E5\u8BE2\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u67E5\u8BE2\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (params: any) => any;\n /** \u67E5\u8BE2\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u67E5\u8BE2\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (result: any) => any;\n };\n /** \u64CD\u4F5C\u62E6\u622A\u5668 */\n handle?: {\n /** \u64CD\u4F5C\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u64CD\u4F5C\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (method: API.MethodTypes, data: any) => { method?: API.MethodTypes; data: any };\n /** \u64CD\u4F5C\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u64CD\u4F5C\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (method: API.MethodTypes, result: any) => any;\n };\n /** \u8BE6\u60C5\u67E5\u8BE2\u62E6\u622A\u5668 */\n queryById?: {\n /** \u8BE6\u60C5\u67E5\u8BE2\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u8BE6\u60C5\u67E5\u8BE2\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (id: any) => any;\n /** \u8BE6\u60C5\u67E5\u8BE2\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u8BE6\u60C5\u67E5\u8BE2\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (result: any) => any;\n };\n /** \u5BFC\u5165\u62E6\u622A\u5668 */\n importData?: {\n /** \u5BFC\u5165\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (list: T[]) => any;\n /** \u5BFC\u5165\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (result: any) => any;\n /** \u5BFC\u5165\u6821\u9A8C\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u6570\u636E\u8FDB\u884C\u6821\u9A8C */\n checkImportExecl?: (list: T[]) => ImportErrorType[];\n /** \u5BFC\u5165\u6821\u9A8C\u63D0\u793A\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u6821\u9A8C\u63D0\u793A\u8FDB\u884C\u5904\u7406 */\n showCheckErrorTips?: (errorMessageList: ImportErrorType[]) => void;\n /** \u5BFC\u5165\u63D0\u4EA4\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u6570\u636E\u8FDB\u884C\u63D0\u4EA4 */\n submitImportListData?: (list: T[]) => Promise<{ success: boolean; data?: K | null; error?: AxiosError | null }>;\n };\n };\n\n /** \u8868\u683C\u5217\u914D\u7F6E */\n columns: ProColumns<T>[];\n /** \u8868\u683C\u5176\u4ED6\u914D\u7F6E */\n tableProps?: Partial<ProTableProps<T, any>> & {\n extraTableButtonList?: {\n /** \u6309\u94AE\u4F4D\u7F6E */\n position: 'start' | 'end' | number;\n /** \u6309\u94AE\u8282\u70B9 */\n label: any;\n icon?: React.ReactNode;\n /** \u6309\u94AE\u6743\u9650 */\n auth?: string | boolean;\n }[];\n }\n\n /** \u64CD\u4F5C\u5217\u914D\u7F6E\uFF08\u8868\u683C\u64CD\u4F5C\u5217\u914D\u7F6E\u3001\u64CD\u4F5C\u5217\u4E0B\u62C9\u6309\u94AE\u914D\u7F6E\uFF09 */\n actionColumnConfig?: {\n /** \u8868\u683C\u64CD\u4F5C\u5217\u914D\u7F6E */\n columnConfig?: ProColumns<T>;\n /** \u4E0B\u62C9\u5217\u8868\u5C5E\u6027 */\n getDropdownButtonProps?: (record: T) => Partial<DropdownButtonProps>;\n };\n\n /** \u65B0\u589E\u8868\u5355\u914D\u7F6E */\n createConfig?: {\n /** \u81EA\u5B9A\u4E49\u521B\u5EFA\u8868\u5355\u7EC4\u4EF6 */\n Component?: React.ComponentType<\n {\n open?: boolean;\n onOpenChange?: (visible: boolean) => void;\n onSubmit?: (values: any) => Promise<boolean | void>;\n loading?: boolean;\n } & C\n >;\n /** \u4F20\u9012\u7ED9CreateFormComponent\u7684\u989D\u5916props */\n props?: C;\n };\n\n /** \u7F16\u8F91\u8868\u5355\u914D\u7F6E */\n updateConfig?: {\n /** \u81EA\u5B9A\u4E49\u7F16\u8F91\u8868\u5355\u7EC4\u4EF6 */\n Component?: React.ComponentType<\n {\n updateDrawerRef: React.MutableRefObject<RefDrawerFormRefType | undefined>;\n values: Partial<T> | null;\n onSubmit: (values: any) => Promise<boolean | void>;\n } & U\n >;\n /** \u4F20\u9012\u7ED9UpdateFormComponent\u7684\u989D\u5916props */\n props?: U;\n };\n \n /** \u4E0B\u8F7D\u6A21\u677F\u53C2\u6570 */\n downloadTemplate?: {\n /** \u6A21\u677F\u7C7B\u578B\u7F16\u53F7\uFF0C\u5B57\u5178\u4E2D\u7684 TemplateCenterTemplateType */\n templateTypeCode?: string;\n /** \u6A21\u5757\u7F16\u53F7\uFF0C\u83DC\u5355\u4E2D\u7684\u76EE\u5F55\u7F16\u53F7 */\n moduleCode?: string;\n };\n\n /** \u81EA\u5B9A\u4E49\u65B0\u589E\u51FD\u6570 */\n onAdd?: () => void;\n\n /** \u67E5\u8BE2\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterSearch?: (result: API.Result_TableListType<T[]>) => Promise<any> | void;\n /** \u7F16\u8F91\u524D\u56DE\u8C03\u51FD\u6570\uFF0C\u5982\u679C\u51FD\u6570\u6CA1\u6709\u8FD4\u56DET\uFF0C\u5219\u4E0D\u8FDB\u884C\u7F16\u8F91 */\n onBeforeEdit?: (record: T) => Promise<T | null>;\n /** \u5220\u9664\u524D\u56DE\u8C03\u51FD\u6570\uFF0C\u5982\u679C\u51FD\u6570\u6CA1\u6709\u8FD4\u56DEtrue\uFF0C\u5219\u4E0D\u8FDB\u884C\u64CD\u4F5C */\n onBeforeDelete?: (keys: React.Key[]) => Promise<boolean> | boolean | void;\n /** \u5220\u9664\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterDelete?: (keys: React.Key[], result: boolean) => Promise<boolean> | boolean | void;\n /** \u64CD\u4F5C\u524D\u56DE\u8C03\u51FD\u6570\uFF0C\u5982\u679C\u51FD\u6570\u6CA1\u6709\u8FD4\u56DEtrue\uFF0C\u5219\u4E0D\u8FDB\u884C\u64CD\u4F5C */\n onBeforeAction?: (method: API.MethodTypes, fields: any) => Promise<boolean> | boolean | void;\n /** \u64CD\u4F5C\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterAction?: (method: API.MethodTypes, success: boolean) => void;\n /** \u5BFC\u5165\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterImport?: (result: { success: boolean; data?: K | null; error?: AxiosError | null }) => Promise<any> | void;\n}\n\nexport interface CrudTableRefType<T = any> {\n actionRef: React.MutableRefObject<ActionType | undefined>;\n updateDrawerRef: React.MutableRefObject<RefDrawerFormRefType | undefined>;\n tableList: T[];\n setTableList: (row: T[]) => void;\n viewRow: T | undefined;\n setViewRow: (row: T | undefined) => void;\n actionLogRow: T | undefined;\n setActionLogRow: (row: T | undefined) => void;\n editRow: Partial<T> | null;\n setEditRow: (row: Partial<T> | null) => void;\n selectedRows: T[];\n setSelectedRows: (rows: T[]) => void;\n selectedRowKeys: React.Key[];\n setSelectedRowKeys: (keys: React.Key[]) => void;\n createModalOpen: boolean;\n setCreateModalOpen: (open: boolean) => void;\n editLangModalOpen: boolean;\n setEditLangModalOpen: (open: boolean) => void;\n currentLangInfo?: LangInfoItem;\n setCurrentLangInfo: (open: LangInfoItem) => void;\n onDelete: (keys: React.Key[]) => void;\n updateModalOpen: () => void;\n updateModalClose: () => void;\n}\n";
|
|
1
|
+
export declare const CrudTableTypes = "\nexport interface CrudTableConfig<T = any, U = {}, C = {}> {\n // \u57FA\u7840\u914D\u7F6E\n baseLocalCode?: string;\n baseLocalName?: string;\n rowKey: keyof T;\n\n /** \u591A\u8BED\u8A00\u7F16\u8F91\u914D\u7F6E */\n multiLang?: {\n /** \u591A\u8BED\u8A00\u8868\u6570\u636E */\n multiLangList?: ExportMultiLangListItem[];\n /** \u591A\u8BED\u8A00\u5B57\u6BB5\u914D\u7F6E */\n fields: {\n /** \u5B57\u6BB5\u540D */\n fieldName: keyof T;\n /** \u8868\u540D */\n tableName: string;\n /** \u5217\u540D */\n columnName: string;\n /** \u70B9\u51FB\u56DE\u8C03\uFF0C\u7528\u4E8E\u8BBE\u7F6ElangInfoItem */\n onClick?: (record: T) => LangInfoItem;\n }[];\n /** \u81EA\u5B9A\u4E49\u5BFC\u51FA\u591A\u8BED\u8A00\u51FD\u6570 */\n exportMultiLangData?: () => Promise<boolean | void>;\n /** \u81EA\u5B9A\u4E49\u67E5\u8BE2\u5BFC\u51FA\u591A\u8BED\u8A00\u51FD\u6570 */\n queryExportMultiLangData?: (tableName: string, columnName: string) => Promise<ExportMultiLangListItem[]>;\n /** \u81EA\u5B9A\u4E49\u5BFC\u5165\u591A\u8BED\u8A00\u51FD\u6570 */\n importMultiLangData?: (list: ExportMultiLangListItem[], tableName: string, columnName: string) => Promise<{ success: boolean; failMsg?: string; data?: any } | void> | void;\n };\n \n /** \u6309\u94AE\u6743\u9650\u7F16\u7801\uFF0C\u9ED8\u8BA4\u4F1A\u6839\u636EbaseLocalCode\u751F\u6210 */\n authCodes?: {\n view?: string | boolean | ((record: T) => boolean | undefined);\n add?: string | boolean;\n edit?: string | boolean | ((record: T) => boolean | undefined);\n /** remove\u6743\u9650\u662F\u51FD\u6570\u65F6\uFF0C\u5982\u679C\u9700\u8981\u6279\u91CF\u5220\u9664\u8BF7\u8BBE\u7F6EbatchRemoveAuth\u4E3Atrue, \u5426\u5219\u4E0D\u4F1A\u663E\u793A\u6279\u91CF\u5220\u9664\u6309\u94AE */\n remove?: string | boolean | ((record: T) => boolean | undefined);\n /** \u6279\u91CF\u5220\u9664\u6743\u9650 */\n batchRemoveAuth?: string | boolean;\n record?: string | boolean | ((record: T) => boolean | undefined);\n };\n\n /** API\u65B9\u6CD5 */\n apis: {\n /** \u67E5\u8BE2\u65B9\u6CD5 */\n query: (params: any) => Promise<any>;\n /** \u64CD\u4F5C\u65B9\u6CD5 */\n handle: (method: API.MethodTypes, data: any) => Promise<any>;\n /** \u6839\u636Eid\u67E5\u8BE2\u8BE6\u60C5\u65B9\u6CD5\uFF0C\u6CA1\u4F20\u5219\u4F7F\u7528\u884C\u6570\u636E\u8FDB\u884C\u7F16\u8F91 */\n queryById?: (id: any) => Promise<any>;\n /** \u5BFC\u5165\u65B9\u6CD5 */\n importData?: (list: T[]) => Promise<any>;\n };\n\n /** API\u62E6\u622A\u5668 */\n interceptors?: {\n /** \u67E5\u8BE2\u62E6\u622A\u5668 */\n query?: {\n /** \u67E5\u8BE2\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u67E5\u8BE2\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (params: any) => any;\n /** \u67E5\u8BE2\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u67E5\u8BE2\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (result: any) => any;\n };\n /** \u64CD\u4F5C\u62E6\u622A\u5668 */\n handle?: {\n /** \u64CD\u4F5C\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u64CD\u4F5C\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (method: API.MethodTypes, data: any) => { method?: API.MethodTypes; data: any };\n /** \u64CD\u4F5C\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u64CD\u4F5C\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (method: API.MethodTypes, result: any) => any;\n };\n /** \u8BE6\u60C5\u67E5\u8BE2\u62E6\u622A\u5668 */\n queryById?: {\n /** \u8BE6\u60C5\u67E5\u8BE2\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u8BE6\u60C5\u67E5\u8BE2\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (id: any) => any;\n /** \u8BE6\u60C5\u67E5\u8BE2\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u8BE6\u60C5\u67E5\u8BE2\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (result: any) => any;\n };\n /** \u5BFC\u5165\u62E6\u622A\u5668 */\n importData?: {\n /** \u5BFC\u5165\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (list: T[]) => any;\n /** \u5BFC\u5165\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (result: any) => any;\n /** \u5BFC\u5165\u6821\u9A8C\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u6570\u636E\u8FDB\u884C\u6821\u9A8C */\n checkImportExecl?: (list: T[]) => ImportErrorType[];\n /** \u5BFC\u5165\u6821\u9A8C\u63D0\u793A\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u6821\u9A8C\u63D0\u793A\u8FDB\u884C\u5904\u7406 */\n showCheckErrorTips?: (errorMessageList: ImportErrorType[]) => void;\n /** \u5BFC\u5165\u63D0\u4EA4\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u6570\u636E\u8FDB\u884C\u63D0\u4EA4 */\n submitImportListData?: (list: T[]) => Promise<{ success: boolean; data?: K | null; error?: AxiosError | null }>;\n };\n };\n\n /** \u8868\u683C\u5217\u914D\u7F6E */\n columns: ProColumns<T>[];\n /** \u8868\u683C\u5176\u4ED6\u914D\u7F6E */\n tableProps?: Partial<ProTableProps<T, any>> & {\n extraTableButtonList?: {\n /** \u6309\u94AE\u4F4D\u7F6E */\n position: 'start' | 'end' | number;\n /** \u6309\u94AE\u8282\u70B9 */\n label: any;\n icon?: React.ReactNode;\n /** \u6309\u94AE\u6743\u9650 */\n auth?: string | boolean;\n }[];\n /** \u6839\u636Ekey\u66FF\u6362\u8868\u683C\u6309\u94AE */\n replaceTableButtonItems?: {\n /** \u6309\u94AEkey */\n key: string;\n /** \u6309\u94AE\u8282\u70B9 */\n label: any;\n /** \u6309\u94AE\u6743\u9650 */\n auth?: string | boolean;\n }[];\n }\n\n /** \u64CD\u4F5C\u5217\u914D\u7F6E\uFF08\u8868\u683C\u64CD\u4F5C\u5217\u914D\u7F6E\u3001\u64CD\u4F5C\u5217\u4E0B\u62C9\u6309\u94AE\u914D\u7F6E\uFF09 */\n actionColumnConfig?: {\n /** \u8868\u683C\u64CD\u4F5C\u5217\u914D\u7F6E */\n columnConfig?: ProColumns<T>;\n /** \u4E0B\u62C9\u5217\u8868\u5C5E\u6027 */\n getDropdownButtonProps?: (record: T) => Partial<DropdownButtonProps>;\n };\n\n /** \u65B0\u589E\u8868\u5355\u914D\u7F6E */\n createConfig?: {\n /** \u81EA\u5B9A\u4E49\u521B\u5EFA\u8868\u5355\u7EC4\u4EF6 */\n Component?: React.ComponentType<\n {\n open?: boolean;\n onOpenChange?: (visible: boolean) => void;\n onSubmit?: (values: any) => Promise<boolean | void>;\n loading?: boolean;\n } & C\n >;\n /** \u4F20\u9012\u7ED9CreateFormComponent\u7684\u989D\u5916props */\n props?: C;\n };\n\n /** \u7F16\u8F91\u8868\u5355\u914D\u7F6E */\n updateConfig?: {\n /** \u81EA\u5B9A\u4E49\u7F16\u8F91\u8868\u5355\u7EC4\u4EF6 */\n Component?: React.ComponentType<\n {\n updateDrawerRef: React.MutableRefObject<RefDrawerFormRefType | undefined>;\n values: Partial<T> | null;\n onSubmit: (values: any) => Promise<boolean | void>;\n } & U\n >;\n /** \u4F20\u9012\u7ED9UpdateFormComponent\u7684\u989D\u5916props */\n props?: U;\n };\n \n /** \u4E0B\u8F7D\u6A21\u677F\u53C2\u6570 */\n downloadTemplate?: {\n /** \u6A21\u677F\u7C7B\u578B\u7F16\u53F7\uFF0C\u5B57\u5178\u4E2D\u7684 TemplateCenterTemplateType */\n templateTypeCode?: string;\n /** \u6A21\u5757\u7F16\u53F7\uFF0C\u83DC\u5355\u4E2D\u7684\u76EE\u5F55\u7F16\u53F7 */\n moduleCode?: string;\n };\n\n /** \u81EA\u5B9A\u4E49\u65B0\u589E\u51FD\u6570 */\n onAdd?: () => void;\n /** \u81EA\u5B9A\u4E49\u7F16\u8F91\u51FD\u6570 */\n onEdit?: (record: T) => void;\n /** \u81EA\u5B9A\u4E49\u5220\u9664\u51FD\u6570 */\n onDelete?: (keys: React.Key[]) => void;\n /** \u81EA\u5B9A\u4E49\u67E5\u770B\u51FD\u6570 */\n onView?: (record: T) => void;\n /** \u81EA\u5B9A\u4E49\u64CD\u4F5C\u65E5\u5FD7\u51FD\u6570 */\n onActionLog?: (record: T) => void;\n\n /** \u67E5\u8BE2\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterSearch?: (result: API.Result_TableListType<T[]>) => Promise<any> | void;\n /** \u7F16\u8F91\u524D\u56DE\u8C03\u51FD\u6570\uFF0C\u5982\u679C\u51FD\u6570\u6CA1\u6709\u8FD4\u56DET\uFF0C\u5219\u4E0D\u8FDB\u884C\u7F16\u8F91 */\n onBeforeEdit?: (record: T) => Promise<T | null>;\n /** \u5220\u9664\u524D\u56DE\u8C03\u51FD\u6570\uFF0C\u5982\u679C\u51FD\u6570\u6CA1\u6709\u8FD4\u56DEtrue\uFF0C\u5219\u4E0D\u8FDB\u884C\u64CD\u4F5C */\n onBeforeDelete?: (keys: React.Key[]) => Promise<boolean> | boolean | void;\n /** \u5220\u9664\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterDelete?: (keys: React.Key[], result: boolean) => Promise<boolean> | boolean | void;\n /** \u64CD\u4F5C\u524D\u56DE\u8C03\u51FD\u6570\uFF0C\u5982\u679C\u51FD\u6570\u6CA1\u6709\u8FD4\u56DEtrue\uFF0C\u5219\u4E0D\u8FDB\u884C\u64CD\u4F5C */\n onBeforeAction?: (method: API.MethodTypes, fields: any) => Promise<boolean> | boolean | void;\n /** \u64CD\u4F5C\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterAction?: (method: API.MethodTypes, success: boolean) => void;\n /** \u5BFC\u5165\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterImport?: (result: { success: boolean; data?: K | null; error?: AxiosError | null }) => Promise<any> | void;\n}\n\nexport interface CrudTableRefType<T = any> {\n actionRef: React.MutableRefObject<ActionType | undefined>;\n updateDrawerRef: React.MutableRefObject<RefDrawerFormRefType | undefined>;\n tableList: T[];\n setTableList: (row: T[]) => void;\n viewRow: T | undefined;\n setViewRow: (row: T | undefined) => void;\n actionLogRow: T | undefined;\n setActionLogRow: (row: T | undefined) => void;\n editRow: Partial<T> | null;\n setEditRow: (row: Partial<T> | null) => void;\n selectedRows: T[];\n setSelectedRows: (rows: T[]) => void;\n selectedRowKeys: React.Key[];\n setSelectedRowKeys: (keys: React.Key[]) => void;\n createModalOpen: boolean;\n setCreateModalOpen: (open: boolean) => void;\n editLangModalOpen: boolean;\n setEditLangModalOpen: (open: boolean) => void;\n currentLangInfo?: LangInfoItem;\n setCurrentLangInfo: (open: LangInfoItem) => void;\n onDelete: (keys: React.Key[]) => void;\n updateModalOpen: () => void;\n updateModalClose: () => void;\n}\n";
|
|
@@ -4,4 +4,4 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.CrudTableTypes = void 0;
|
|
7
|
-
var CrudTableTypes = exports.CrudTableTypes = "\nexport interface CrudTableConfig<T = any, U = {}, C = {}> {\n // \u57FA\u7840\u914D\u7F6E\n baseLocalCode?: string;\n baseLocalName?: string;\n rowKey: keyof T;\n\n /** \u591A\u8BED\u8A00\u7F16\u8F91\u914D\u7F6E */\n multiLang?: {\n /** \u591A\u8BED\u8A00\u8868\u6570\u636E */\n multiLangList?: ExportMultiLangListItem[];\n /** \u591A\u8BED\u8A00\u5B57\u6BB5\u914D\u7F6E */\n fields: {\n /** \u5B57\u6BB5\u540D */\n fieldName: keyof T;\n /** \u8868\u540D */\n tableName: string;\n /** \u5217\u540D */\n columnName: string;\n /** \u70B9\u51FB\u56DE\u8C03\uFF0C\u7528\u4E8E\u8BBE\u7F6ElangInfoItem */\n onClick?: (record: T) => LangInfoItem;\n }[];\n /** \u81EA\u5B9A\u4E49\u5BFC\u51FA\u591A\u8BED\u8A00\u51FD\u6570 */\n exportMultiLangData?: () => Promise<boolean | void>;\n /** \u81EA\u5B9A\u4E49\u67E5\u8BE2\u5BFC\u51FA\u591A\u8BED\u8A00\u51FD\u6570 */\n queryExportMultiLangData?: (tableName: string, columnName: string) => Promise<ExportMultiLangListItem[]>;\n /** \u81EA\u5B9A\u4E49\u5BFC\u5165\u591A\u8BED\u8A00\u51FD\u6570 */\n importMultiLangData?: (list: ExportMultiLangListItem[], tableName: string, columnName: string) => Promise<{ success: boolean; failMsg?: string; data?: any } | void> | void;\n };\n \n /** \u6309\u94AE\u6743\u9650\u7F16\u7801\uFF0C\u9ED8\u8BA4\u4F1A\u6839\u636EbaseLocalCode\u751F\u6210 */\n authCodes?: {\n view?: string | boolean | ((record: T) => boolean | undefined);\n add?: string | boolean;\n edit?: string | boolean | ((record: T) => boolean | undefined);\n /** remove\u6743\u9650\u662F\u51FD\u6570\u65F6\uFF0C\u5982\u679C\u9700\u8981\u6279\u91CF\u5220\u9664\u8BF7\u8BBE\u7F6EbatchRemoveAuth\u4E3Atrue, \u5426\u5219\u4E0D\u4F1A\u663E\u793A\u6279\u91CF\u5220\u9664\u6309\u94AE */\n remove?: string | boolean | ((record: T) => boolean | undefined);\n /** \u6279\u91CF\u5220\u9664\u6743\u9650 */\n batchRemoveAuth?: string | boolean;\n record?: string | boolean | ((record: T) => boolean | undefined);\n };\n\n /** API\u65B9\u6CD5 */\n apis: {\n /** \u67E5\u8BE2\u65B9\u6CD5 */\n query: (params: any) => Promise<any>;\n /** \u64CD\u4F5C\u65B9\u6CD5 */\n handle: (method: API.MethodTypes, data: any) => Promise<any>;\n /** \u6839\u636Eid\u67E5\u8BE2\u8BE6\u60C5\u65B9\u6CD5\uFF0C\u6CA1\u4F20\u5219\u4F7F\u7528\u884C\u6570\u636E\u8FDB\u884C\u7F16\u8F91 */\n queryById?: (id: any) => Promise<any>;\n /** \u5BFC\u5165\u65B9\u6CD5 */\n importData?: (list: T[]) => Promise<any>;\n };\n\n /** API\u62E6\u622A\u5668 */\n interceptors?: {\n /** \u67E5\u8BE2\u62E6\u622A\u5668 */\n query?: {\n /** \u67E5\u8BE2\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u67E5\u8BE2\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (params: any) => any;\n /** \u67E5\u8BE2\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u67E5\u8BE2\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (result: any) => any;\n };\n /** \u64CD\u4F5C\u62E6\u622A\u5668 */\n handle?: {\n /** \u64CD\u4F5C\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u64CD\u4F5C\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (method: API.MethodTypes, data: any) => { method?: API.MethodTypes; data: any };\n /** \u64CD\u4F5C\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u64CD\u4F5C\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (method: API.MethodTypes, result: any) => any;\n };\n /** \u8BE6\u60C5\u67E5\u8BE2\u62E6\u622A\u5668 */\n queryById?: {\n /** \u8BE6\u60C5\u67E5\u8BE2\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u8BE6\u60C5\u67E5\u8BE2\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (id: any) => any;\n /** \u8BE6\u60C5\u67E5\u8BE2\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u8BE6\u60C5\u67E5\u8BE2\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (result: any) => any;\n };\n /** \u5BFC\u5165\u62E6\u622A\u5668 */\n importData?: {\n /** \u5BFC\u5165\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (list: T[]) => any;\n /** \u5BFC\u5165\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (result: any) => any;\n /** \u5BFC\u5165\u6821\u9A8C\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u6570\u636E\u8FDB\u884C\u6821\u9A8C */\n checkImportExecl?: (list: T[]) => ImportErrorType[];\n /** \u5BFC\u5165\u6821\u9A8C\u63D0\u793A\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u6821\u9A8C\u63D0\u793A\u8FDB\u884C\u5904\u7406 */\n showCheckErrorTips?: (errorMessageList: ImportErrorType[]) => void;\n /** \u5BFC\u5165\u63D0\u4EA4\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u6570\u636E\u8FDB\u884C\u63D0\u4EA4 */\n submitImportListData?: (list: T[]) => Promise<{ success: boolean; data?: K | null; error?: AxiosError | null }>;\n };\n };\n\n /** \u8868\u683C\u5217\u914D\u7F6E */\n columns: ProColumns<T>[];\n /** \u8868\u683C\u5176\u4ED6\u914D\u7F6E */\n tableProps?: Partial<ProTableProps<T, any>> & {\n extraTableButtonList?: {\n /** \u6309\u94AE\u4F4D\u7F6E */\n position: 'start' | 'end' | number;\n /** \u6309\u94AE\u8282\u70B9 */\n label: any;\n icon?: React.ReactNode;\n /** \u6309\u94AE\u6743\u9650 */\n auth?: string | boolean;\n }[];\n }\n\n /** \u64CD\u4F5C\u5217\u914D\u7F6E\uFF08\u8868\u683C\u64CD\u4F5C\u5217\u914D\u7F6E\u3001\u64CD\u4F5C\u5217\u4E0B\u62C9\u6309\u94AE\u914D\u7F6E\uFF09 */\n actionColumnConfig?: {\n /** \u8868\u683C\u64CD\u4F5C\u5217\u914D\u7F6E */\n columnConfig?: ProColumns<T>;\n /** \u4E0B\u62C9\u5217\u8868\u5C5E\u6027 */\n getDropdownButtonProps?: (record: T) => Partial<DropdownButtonProps>;\n };\n\n /** \u65B0\u589E\u8868\u5355\u914D\u7F6E */\n createConfig?: {\n /** \u81EA\u5B9A\u4E49\u521B\u5EFA\u8868\u5355\u7EC4\u4EF6 */\n Component?: React.ComponentType<\n {\n open?: boolean;\n onOpenChange?: (visible: boolean) => void;\n onSubmit?: (values: any) => Promise<boolean | void>;\n loading?: boolean;\n } & C\n >;\n /** \u4F20\u9012\u7ED9CreateFormComponent\u7684\u989D\u5916props */\n props?: C;\n };\n\n /** \u7F16\u8F91\u8868\u5355\u914D\u7F6E */\n updateConfig?: {\n /** \u81EA\u5B9A\u4E49\u7F16\u8F91\u8868\u5355\u7EC4\u4EF6 */\n Component?: React.ComponentType<\n {\n updateDrawerRef: React.MutableRefObject<RefDrawerFormRefType | undefined>;\n values: Partial<T> | null;\n onSubmit: (values: any) => Promise<boolean | void>;\n } & U\n >;\n /** \u4F20\u9012\u7ED9UpdateFormComponent\u7684\u989D\u5916props */\n props?: U;\n };\n \n /** \u4E0B\u8F7D\u6A21\u677F\u53C2\u6570 */\n downloadTemplate?: {\n /** \u6A21\u677F\u7C7B\u578B\u7F16\u53F7\uFF0C\u5B57\u5178\u4E2D\u7684 TemplateCenterTemplateType */\n templateTypeCode?: string;\n /** \u6A21\u5757\u7F16\u53F7\uFF0C\u83DC\u5355\u4E2D\u7684\u76EE\u5F55\u7F16\u53F7 */\n moduleCode?: string;\n };\n\n /** \u81EA\u5B9A\u4E49\u65B0\u589E\u51FD\u6570 */\n onAdd?: () => void;\n\n /** \u67E5\u8BE2\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterSearch?: (result: API.Result_TableListType<T[]>) => Promise<any> | void;\n /** \u7F16\u8F91\u524D\u56DE\u8C03\u51FD\u6570\uFF0C\u5982\u679C\u51FD\u6570\u6CA1\u6709\u8FD4\u56DET\uFF0C\u5219\u4E0D\u8FDB\u884C\u7F16\u8F91 */\n onBeforeEdit?: (record: T) => Promise<T | null>;\n /** \u5220\u9664\u524D\u56DE\u8C03\u51FD\u6570\uFF0C\u5982\u679C\u51FD\u6570\u6CA1\u6709\u8FD4\u56DEtrue\uFF0C\u5219\u4E0D\u8FDB\u884C\u64CD\u4F5C */\n onBeforeDelete?: (keys: React.Key[]) => Promise<boolean> | boolean | void;\n /** \u5220\u9664\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterDelete?: (keys: React.Key[], result: boolean) => Promise<boolean> | boolean | void;\n /** \u64CD\u4F5C\u524D\u56DE\u8C03\u51FD\u6570\uFF0C\u5982\u679C\u51FD\u6570\u6CA1\u6709\u8FD4\u56DEtrue\uFF0C\u5219\u4E0D\u8FDB\u884C\u64CD\u4F5C */\n onBeforeAction?: (method: API.MethodTypes, fields: any) => Promise<boolean> | boolean | void;\n /** \u64CD\u4F5C\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterAction?: (method: API.MethodTypes, success: boolean) => void;\n /** \u5BFC\u5165\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterImport?: (result: { success: boolean; data?: K | null; error?: AxiosError | null }) => Promise<any> | void;\n}\n\nexport interface CrudTableRefType<T = any> {\n actionRef: React.MutableRefObject<ActionType | undefined>;\n updateDrawerRef: React.MutableRefObject<RefDrawerFormRefType | undefined>;\n tableList: T[];\n setTableList: (row: T[]) => void;\n viewRow: T | undefined;\n setViewRow: (row: T | undefined) => void;\n actionLogRow: T | undefined;\n setActionLogRow: (row: T | undefined) => void;\n editRow: Partial<T> | null;\n setEditRow: (row: Partial<T> | null) => void;\n selectedRows: T[];\n setSelectedRows: (rows: T[]) => void;\n selectedRowKeys: React.Key[];\n setSelectedRowKeys: (keys: React.Key[]) => void;\n createModalOpen: boolean;\n setCreateModalOpen: (open: boolean) => void;\n editLangModalOpen: boolean;\n setEditLangModalOpen: (open: boolean) => void;\n currentLangInfo?: LangInfoItem;\n setCurrentLangInfo: (open: LangInfoItem) => void;\n onDelete: (keys: React.Key[]) => void;\n updateModalOpen: () => void;\n updateModalClose: () => void;\n}\n";
|
|
7
|
+
var CrudTableTypes = exports.CrudTableTypes = "\nexport interface CrudTableConfig<T = any, U = {}, C = {}> {\n // \u57FA\u7840\u914D\u7F6E\n baseLocalCode?: string;\n baseLocalName?: string;\n rowKey: keyof T;\n\n /** \u591A\u8BED\u8A00\u7F16\u8F91\u914D\u7F6E */\n multiLang?: {\n /** \u591A\u8BED\u8A00\u8868\u6570\u636E */\n multiLangList?: ExportMultiLangListItem[];\n /** \u591A\u8BED\u8A00\u5B57\u6BB5\u914D\u7F6E */\n fields: {\n /** \u5B57\u6BB5\u540D */\n fieldName: keyof T;\n /** \u8868\u540D */\n tableName: string;\n /** \u5217\u540D */\n columnName: string;\n /** \u70B9\u51FB\u56DE\u8C03\uFF0C\u7528\u4E8E\u8BBE\u7F6ElangInfoItem */\n onClick?: (record: T) => LangInfoItem;\n }[];\n /** \u81EA\u5B9A\u4E49\u5BFC\u51FA\u591A\u8BED\u8A00\u51FD\u6570 */\n exportMultiLangData?: () => Promise<boolean | void>;\n /** \u81EA\u5B9A\u4E49\u67E5\u8BE2\u5BFC\u51FA\u591A\u8BED\u8A00\u51FD\u6570 */\n queryExportMultiLangData?: (tableName: string, columnName: string) => Promise<ExportMultiLangListItem[]>;\n /** \u81EA\u5B9A\u4E49\u5BFC\u5165\u591A\u8BED\u8A00\u51FD\u6570 */\n importMultiLangData?: (list: ExportMultiLangListItem[], tableName: string, columnName: string) => Promise<{ success: boolean; failMsg?: string; data?: any } | void> | void;\n };\n \n /** \u6309\u94AE\u6743\u9650\u7F16\u7801\uFF0C\u9ED8\u8BA4\u4F1A\u6839\u636EbaseLocalCode\u751F\u6210 */\n authCodes?: {\n view?: string | boolean | ((record: T) => boolean | undefined);\n add?: string | boolean;\n edit?: string | boolean | ((record: T) => boolean | undefined);\n /** remove\u6743\u9650\u662F\u51FD\u6570\u65F6\uFF0C\u5982\u679C\u9700\u8981\u6279\u91CF\u5220\u9664\u8BF7\u8BBE\u7F6EbatchRemoveAuth\u4E3Atrue, \u5426\u5219\u4E0D\u4F1A\u663E\u793A\u6279\u91CF\u5220\u9664\u6309\u94AE */\n remove?: string | boolean | ((record: T) => boolean | undefined);\n /** \u6279\u91CF\u5220\u9664\u6743\u9650 */\n batchRemoveAuth?: string | boolean;\n record?: string | boolean | ((record: T) => boolean | undefined);\n };\n\n /** API\u65B9\u6CD5 */\n apis: {\n /** \u67E5\u8BE2\u65B9\u6CD5 */\n query: (params: any) => Promise<any>;\n /** \u64CD\u4F5C\u65B9\u6CD5 */\n handle: (method: API.MethodTypes, data: any) => Promise<any>;\n /** \u6839\u636Eid\u67E5\u8BE2\u8BE6\u60C5\u65B9\u6CD5\uFF0C\u6CA1\u4F20\u5219\u4F7F\u7528\u884C\u6570\u636E\u8FDB\u884C\u7F16\u8F91 */\n queryById?: (id: any) => Promise<any>;\n /** \u5BFC\u5165\u65B9\u6CD5 */\n importData?: (list: T[]) => Promise<any>;\n };\n\n /** API\u62E6\u622A\u5668 */\n interceptors?: {\n /** \u67E5\u8BE2\u62E6\u622A\u5668 */\n query?: {\n /** \u67E5\u8BE2\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u67E5\u8BE2\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (params: any) => any;\n /** \u67E5\u8BE2\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u67E5\u8BE2\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (result: any) => any;\n };\n /** \u64CD\u4F5C\u62E6\u622A\u5668 */\n handle?: {\n /** \u64CD\u4F5C\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u64CD\u4F5C\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (method: API.MethodTypes, data: any) => { method?: API.MethodTypes; data: any };\n /** \u64CD\u4F5C\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u64CD\u4F5C\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (method: API.MethodTypes, result: any) => any;\n };\n /** \u8BE6\u60C5\u67E5\u8BE2\u62E6\u622A\u5668 */\n queryById?: {\n /** \u8BE6\u60C5\u67E5\u8BE2\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u8BE6\u60C5\u67E5\u8BE2\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (id: any) => any;\n /** \u8BE6\u60C5\u67E5\u8BE2\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u8BE6\u60C5\u67E5\u8BE2\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (result: any) => any;\n };\n /** \u5BFC\u5165\u62E6\u622A\u5668 */\n importData?: {\n /** \u5BFC\u5165\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (list: T[]) => any;\n /** \u5BFC\u5165\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (result: any) => any;\n /** \u5BFC\u5165\u6821\u9A8C\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u6570\u636E\u8FDB\u884C\u6821\u9A8C */\n checkImportExecl?: (list: T[]) => ImportErrorType[];\n /** \u5BFC\u5165\u6821\u9A8C\u63D0\u793A\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u6821\u9A8C\u63D0\u793A\u8FDB\u884C\u5904\u7406 */\n showCheckErrorTips?: (errorMessageList: ImportErrorType[]) => void;\n /** \u5BFC\u5165\u63D0\u4EA4\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u6570\u636E\u8FDB\u884C\u63D0\u4EA4 */\n submitImportListData?: (list: T[]) => Promise<{ success: boolean; data?: K | null; error?: AxiosError | null }>;\n };\n };\n\n /** \u8868\u683C\u5217\u914D\u7F6E */\n columns: ProColumns<T>[];\n /** \u8868\u683C\u5176\u4ED6\u914D\u7F6E */\n tableProps?: Partial<ProTableProps<T, any>> & {\n extraTableButtonList?: {\n /** \u6309\u94AE\u4F4D\u7F6E */\n position: 'start' | 'end' | number;\n /** \u6309\u94AE\u8282\u70B9 */\n label: any;\n icon?: React.ReactNode;\n /** \u6309\u94AE\u6743\u9650 */\n auth?: string | boolean;\n }[];\n /** \u6839\u636Ekey\u66FF\u6362\u8868\u683C\u6309\u94AE */\n replaceTableButtonItems?: {\n /** \u6309\u94AEkey */\n key: string;\n /** \u6309\u94AE\u8282\u70B9 */\n label: any;\n /** \u6309\u94AE\u6743\u9650 */\n auth?: string | boolean;\n }[];\n }\n\n /** \u64CD\u4F5C\u5217\u914D\u7F6E\uFF08\u8868\u683C\u64CD\u4F5C\u5217\u914D\u7F6E\u3001\u64CD\u4F5C\u5217\u4E0B\u62C9\u6309\u94AE\u914D\u7F6E\uFF09 */\n actionColumnConfig?: {\n /** \u8868\u683C\u64CD\u4F5C\u5217\u914D\u7F6E */\n columnConfig?: ProColumns<T>;\n /** \u4E0B\u62C9\u5217\u8868\u5C5E\u6027 */\n getDropdownButtonProps?: (record: T) => Partial<DropdownButtonProps>;\n };\n\n /** \u65B0\u589E\u8868\u5355\u914D\u7F6E */\n createConfig?: {\n /** \u81EA\u5B9A\u4E49\u521B\u5EFA\u8868\u5355\u7EC4\u4EF6 */\n Component?: React.ComponentType<\n {\n open?: boolean;\n onOpenChange?: (visible: boolean) => void;\n onSubmit?: (values: any) => Promise<boolean | void>;\n loading?: boolean;\n } & C\n >;\n /** \u4F20\u9012\u7ED9CreateFormComponent\u7684\u989D\u5916props */\n props?: C;\n };\n\n /** \u7F16\u8F91\u8868\u5355\u914D\u7F6E */\n updateConfig?: {\n /** \u81EA\u5B9A\u4E49\u7F16\u8F91\u8868\u5355\u7EC4\u4EF6 */\n Component?: React.ComponentType<\n {\n updateDrawerRef: React.MutableRefObject<RefDrawerFormRefType | undefined>;\n values: Partial<T> | null;\n onSubmit: (values: any) => Promise<boolean | void>;\n } & U\n >;\n /** \u4F20\u9012\u7ED9UpdateFormComponent\u7684\u989D\u5916props */\n props?: U;\n };\n \n /** \u4E0B\u8F7D\u6A21\u677F\u53C2\u6570 */\n downloadTemplate?: {\n /** \u6A21\u677F\u7C7B\u578B\u7F16\u53F7\uFF0C\u5B57\u5178\u4E2D\u7684 TemplateCenterTemplateType */\n templateTypeCode?: string;\n /** \u6A21\u5757\u7F16\u53F7\uFF0C\u83DC\u5355\u4E2D\u7684\u76EE\u5F55\u7F16\u53F7 */\n moduleCode?: string;\n };\n\n /** \u81EA\u5B9A\u4E49\u65B0\u589E\u51FD\u6570 */\n onAdd?: () => void;\n /** \u81EA\u5B9A\u4E49\u7F16\u8F91\u51FD\u6570 */\n onEdit?: (record: T) => void;\n /** \u81EA\u5B9A\u4E49\u5220\u9664\u51FD\u6570 */\n onDelete?: (keys: React.Key[]) => void;\n /** \u81EA\u5B9A\u4E49\u67E5\u770B\u51FD\u6570 */\n onView?: (record: T) => void;\n /** \u81EA\u5B9A\u4E49\u64CD\u4F5C\u65E5\u5FD7\u51FD\u6570 */\n onActionLog?: (record: T) => void;\n\n /** \u67E5\u8BE2\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterSearch?: (result: API.Result_TableListType<T[]>) => Promise<any> | void;\n /** \u7F16\u8F91\u524D\u56DE\u8C03\u51FD\u6570\uFF0C\u5982\u679C\u51FD\u6570\u6CA1\u6709\u8FD4\u56DET\uFF0C\u5219\u4E0D\u8FDB\u884C\u7F16\u8F91 */\n onBeforeEdit?: (record: T) => Promise<T | null>;\n /** \u5220\u9664\u524D\u56DE\u8C03\u51FD\u6570\uFF0C\u5982\u679C\u51FD\u6570\u6CA1\u6709\u8FD4\u56DEtrue\uFF0C\u5219\u4E0D\u8FDB\u884C\u64CD\u4F5C */\n onBeforeDelete?: (keys: React.Key[]) => Promise<boolean> | boolean | void;\n /** \u5220\u9664\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterDelete?: (keys: React.Key[], result: boolean) => Promise<boolean> | boolean | void;\n /** \u64CD\u4F5C\u524D\u56DE\u8C03\u51FD\u6570\uFF0C\u5982\u679C\u51FD\u6570\u6CA1\u6709\u8FD4\u56DEtrue\uFF0C\u5219\u4E0D\u8FDB\u884C\u64CD\u4F5C */\n onBeforeAction?: (method: API.MethodTypes, fields: any) => Promise<boolean> | boolean | void;\n /** \u64CD\u4F5C\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterAction?: (method: API.MethodTypes, success: boolean) => void;\n /** \u5BFC\u5165\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterImport?: (result: { success: boolean; data?: K | null; error?: AxiosError | null }) => Promise<any> | void;\n}\n\nexport interface CrudTableRefType<T = any> {\n actionRef: React.MutableRefObject<ActionType | undefined>;\n updateDrawerRef: React.MutableRefObject<RefDrawerFormRefType | undefined>;\n tableList: T[];\n setTableList: (row: T[]) => void;\n viewRow: T | undefined;\n setViewRow: (row: T | undefined) => void;\n actionLogRow: T | undefined;\n setActionLogRow: (row: T | undefined) => void;\n editRow: Partial<T> | null;\n setEditRow: (row: Partial<T> | null) => void;\n selectedRows: T[];\n setSelectedRows: (rows: T[]) => void;\n selectedRowKeys: React.Key[];\n setSelectedRowKeys: (keys: React.Key[]) => void;\n createModalOpen: boolean;\n setCreateModalOpen: (open: boolean) => void;\n editLangModalOpen: boolean;\n setEditLangModalOpen: (open: boolean) => void;\n currentLangInfo?: LangInfoItem;\n setCurrentLangInfo: (open: LangInfoItem) => void;\n onDelete: (keys: React.Key[]) => void;\n updateModalOpen: () => void;\n updateModalClose: () => void;\n}\n";
|
|
@@ -1,22 +1,29 @@
|
|
|
1
1
|
import { CloudDownloadOutlined, DownloadOutlined, PlusOutlined, UploadOutlined } from '@ant-design/icons';
|
|
2
|
-
import { ActionType, ColumnsState, ProColumns, ProTable } from '@ant-design/pro-components';
|
|
2
|
+
import { ActionType, ColumnsState, ProColumns, ProFormInstance, ProTable } from '@ant-design/pro-components';
|
|
3
3
|
import { cfmmUtils, ImportExecl, useFormatLocale, useIntl, useModel } from '@umijs/max';
|
|
4
|
-
import { Button, Dropdown, MenuProps, message, Modal, Progress } from 'antd';
|
|
4
|
+
import { Button, Drawer, Dropdown, MenuProps, message, Modal, Progress } from 'antd';
|
|
5
5
|
import React, { ForwardedRef, forwardRef, useImperativeHandle, useMemo, useRef, useState } from 'react';
|
|
6
6
|
import useAction from '../hooks/useAction';
|
|
7
7
|
import useAuthority from '../hooks/useAuthority';
|
|
8
8
|
import useMemoizedFn from '../hooks/useMemoizedFn';
|
|
9
9
|
import useQueryTableList from '../hooks/useQueryTableList';
|
|
10
|
-
import {
|
|
10
|
+
import { importMultiLangList, queryLangInfoExportList } from '../services';
|
|
11
|
+
import {
|
|
12
|
+
API,
|
|
13
|
+
CrudTableConfig,
|
|
14
|
+
CrudTableRefType,
|
|
15
|
+
ExportMultiLangListItem,
|
|
16
|
+
LangInfoItem,
|
|
17
|
+
RefDrawerFormRefType,
|
|
18
|
+
} from '../types';
|
|
19
|
+
import { genExcel, genExcelAdvanced, getExportColumns, getExportValueForColumns } from '../utils/excelHelper';
|
|
20
|
+
import { handleImportList, showCheckErrorTips } from '../utils/importHelper';
|
|
11
21
|
import ActionLogDrawer from './ActionLogDrawer';
|
|
12
22
|
import CreateForm from './AddDrawerForm';
|
|
13
23
|
import DropdownButton from './DropdownButton';
|
|
14
24
|
import EditMultiLangForm from './EditMultiLangForm';
|
|
15
25
|
import MyFooterToolbar from './MyFooterToolbar';
|
|
16
26
|
import ViewTableItemDrawer from './ViewTableItemDrawer';
|
|
17
|
-
import { genExcel, genExcelAdvanced, getExportColumns, getExportValueForColumns } from '../utils/excelHelper';
|
|
18
|
-
import { importMultiLangList, queryLangInfoExportList } from '../services';
|
|
19
|
-
import { handleImportList, showCheckErrorTips } from '../utils/importHelper';
|
|
20
27
|
|
|
21
28
|
const { confirm } = Modal;
|
|
22
29
|
export const TABLE_SCROLL = { x: 'max-content' };
|
|
@@ -63,6 +70,10 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
63
70
|
actionColumnConfig = {} as CrudTableConfig['actionColumnConfig'],
|
|
64
71
|
downloadTemplate = {},
|
|
65
72
|
onAdd,
|
|
73
|
+
onView,
|
|
74
|
+
onEdit,
|
|
75
|
+
onDelete,
|
|
76
|
+
onActionLog,
|
|
66
77
|
onAfterSearch,
|
|
67
78
|
onBeforeEdit,
|
|
68
79
|
onBeforeDelete,
|
|
@@ -87,6 +98,7 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
87
98
|
const actionRef = useRef<ActionType>();
|
|
88
99
|
const updateDrawerRef = useRef<RefDrawerFormRefType>();
|
|
89
100
|
const timer = useRef<NodeJS.Timeout>();
|
|
101
|
+
const updateFormRef = useRef<ProFormInstance>();
|
|
90
102
|
|
|
91
103
|
// 状态管理
|
|
92
104
|
const [tableList, setTableList] = useState<T[]>([]);
|
|
@@ -96,6 +108,7 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
96
108
|
const [selectedRows, setSelectedRows] = useState<T[]>([]);
|
|
97
109
|
const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([]);
|
|
98
110
|
const [createModalOpen, setCreateModalOpen] = useState<boolean>(false);
|
|
111
|
+
const [updateModalOpen, setUpdateModalOpen] = useState<boolean>(false);
|
|
99
112
|
|
|
100
113
|
// 多语言编辑状态
|
|
101
114
|
const [editLangModalOpen, setEditLangModalOpen] = useState<boolean>(false);
|
|
@@ -133,27 +146,35 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
133
146
|
setEditLangModalOpen(true);
|
|
134
147
|
});
|
|
135
148
|
|
|
136
|
-
|
|
137
|
-
|
|
149
|
+
// 查询多语言数据
|
|
150
|
+
const queryMultiLangData = useMemoizedFn(
|
|
151
|
+
async (tableName: string, columnName: string): Promise<ExportMultiLangListItem[]> => {
|
|
152
|
+
if (!multiLang) return [];
|
|
138
153
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
154
|
+
if (multiLang.multiLangList) {
|
|
155
|
+
return multiLang.multiLangList;
|
|
156
|
+
}
|
|
142
157
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
158
|
+
if (multiLang.queryExportMultiLangData) {
|
|
159
|
+
return await multiLang.queryExportMultiLangData(tableName, columnName);
|
|
160
|
+
}
|
|
146
161
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
162
|
+
const result = await doAction(
|
|
163
|
+
'GET',
|
|
164
|
+
{ tableName, columnName },
|
|
165
|
+
{
|
|
166
|
+
actionFn: queryLangInfoExportList,
|
|
167
|
+
},
|
|
168
|
+
);
|
|
150
169
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
170
|
+
if (result.success && result.data) {
|
|
171
|
+
return result.data;
|
|
172
|
+
}
|
|
173
|
+
return [];
|
|
174
|
+
},
|
|
175
|
+
);
|
|
156
176
|
|
|
177
|
+
// 导出多语言数据
|
|
157
178
|
const handleExportMultiLang = useMemoizedFn(async () => {
|
|
158
179
|
if (multiLang?.exportMultiLangData) {
|
|
159
180
|
return await multiLang.exportMultiLangData();
|
|
@@ -173,7 +194,14 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
173
194
|
|
|
174
195
|
if (!data.length) return;
|
|
175
196
|
|
|
176
|
-
const handleData = data.map(item => [
|
|
197
|
+
const handleData = data.map((item) => [
|
|
198
|
+
item.dataId,
|
|
199
|
+
item.columnValue,
|
|
200
|
+
item.zh_CN,
|
|
201
|
+
item.zh_TW,
|
|
202
|
+
item.en_US,
|
|
203
|
+
item.th_TH,
|
|
204
|
+
]);
|
|
177
205
|
|
|
178
206
|
genExcelAdvanced(
|
|
179
207
|
`${title}.xlsx`,
|
|
@@ -184,10 +212,12 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
184
212
|
codeColumns: codeList,
|
|
185
213
|
title: title,
|
|
186
214
|
titleStyle: { fontSize: 18, bold: true },
|
|
187
|
-
notice: [
|
|
215
|
+
notice: [
|
|
216
|
+
formatMessage({ id: 'cfmmUI.common.button.exportMultiLang.notice', defaultMessage: '请勿修改表格结构' }),
|
|
217
|
+
],
|
|
188
218
|
worksheetColumns: new Array(codeList.length).fill('').map((item, index) => ({ hidden: index == 0, width: 25 })),
|
|
189
219
|
lockedColumns: [0], // 第一列不允许修改
|
|
190
|
-
}
|
|
220
|
+
},
|
|
191
221
|
);
|
|
192
222
|
return false;
|
|
193
223
|
});
|
|
@@ -212,14 +242,18 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
212
242
|
// return Promise.resolve({ success: false });
|
|
213
243
|
// }
|
|
214
244
|
|
|
215
|
-
const result = await doAction(
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
245
|
+
const result = await doAction(
|
|
246
|
+
'IMPORT',
|
|
247
|
+
{
|
|
248
|
+
tableName: tableName,
|
|
249
|
+
columnName: columnName,
|
|
250
|
+
i18nDataList: newList.filter((item) => item.en_US || item.zh_CN || item.zh_TW || item.th_TH),
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
actionFn: importMultiLangList,
|
|
254
|
+
showMsg: false,
|
|
255
|
+
},
|
|
256
|
+
);
|
|
223
257
|
|
|
224
258
|
if (result.success) {
|
|
225
259
|
actionRef.current?.reload();
|
|
@@ -359,6 +393,10 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
359
393
|
editData = processedData;
|
|
360
394
|
}
|
|
361
395
|
|
|
396
|
+
setUpdateModalOpen(true);
|
|
397
|
+
|
|
398
|
+
updateFormRef.current?.setFieldsValue(editData);
|
|
399
|
+
|
|
362
400
|
updateDrawerRef.current?.show();
|
|
363
401
|
setEditRow(editData);
|
|
364
402
|
});
|
|
@@ -402,9 +440,9 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
402
440
|
});
|
|
403
441
|
};
|
|
404
442
|
|
|
405
|
-
//
|
|
443
|
+
// 导入列表数据
|
|
406
444
|
const importListData = useMemoizedFn(async (list: T[]) => {
|
|
407
|
-
if(!apis.importData && !interceptors.importData?.submitImportListData) return;
|
|
445
|
+
if (!apis.importData && !interceptors.importData?.submitImportListData) return;
|
|
408
446
|
|
|
409
447
|
// 处理导入数据,正确赋值字段以及转格式
|
|
410
448
|
const newList = interceptors.importData?.request?.(list) ?? handleImportList<T>(list);
|
|
@@ -417,7 +455,7 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
417
455
|
return Promise.resolve({ success: false });
|
|
418
456
|
}
|
|
419
457
|
|
|
420
|
-
const resutl = await interceptors.importData?.submitImportListData?.(newList) || await submitListData(newList);
|
|
458
|
+
const resutl = (await interceptors.importData?.submitImportListData?.(newList)) || (await submitListData(newList));
|
|
421
459
|
|
|
422
460
|
onAfterImport?.(resutl);
|
|
423
461
|
|
|
@@ -427,13 +465,14 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
427
465
|
return resutl;
|
|
428
466
|
});
|
|
429
467
|
|
|
468
|
+
// 处理进度条变化
|
|
430
469
|
const handlePercentChange = (value: number) => {
|
|
431
470
|
setPercent(value);
|
|
432
471
|
};
|
|
433
472
|
|
|
434
473
|
/**
|
|
435
|
-
|
|
436
|
-
|
|
474
|
+
* 下载数据为Excel
|
|
475
|
+
*/
|
|
437
476
|
const handleDownloadExcel = async () => {
|
|
438
477
|
const result = await handleSearchAll();
|
|
439
478
|
if (!result.success || result.error || !result.data) {
|
|
@@ -558,10 +597,10 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
558
597
|
removeAuth={removeAuth}
|
|
559
598
|
viewAuth={viewAuth}
|
|
560
599
|
actionLogAuth={actionLogAuth}
|
|
561
|
-
onActionLog={() => setActionLogRow(record)}
|
|
562
|
-
onView={() => setViewRow(record)}
|
|
563
|
-
onEdit={() => handleClickEdit(record)}
|
|
564
|
-
onRemove={() => handleDelete([record[rowKey]])}
|
|
600
|
+
onActionLog={onActionLog ? () => onActionLog(record) : () => setActionLogRow(record)}
|
|
601
|
+
onView={onView ? () => onView(record) : () => setViewRow(record)}
|
|
602
|
+
onEdit={onEdit ? () => onEdit(record) : () => handleClickEdit(record)}
|
|
603
|
+
onRemove={onDelete ? () => onDelete([record[rowKey]]) : () => handleDelete([record[rowKey]])}
|
|
565
604
|
{...(actionColumnConfig?.getDropdownButtonProps?.(record) ?? {})}
|
|
566
605
|
/>
|
|
567
606
|
);
|
|
@@ -569,7 +608,7 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
569
608
|
...(actionColumnConfig?.columnConfig ?? {}),
|
|
570
609
|
},
|
|
571
610
|
];
|
|
572
|
-
}, [rowKey, columns, multiLang, defaultAuthCodes, actionColumnConfig]);
|
|
611
|
+
}, [rowKey, columns, multiLang, defaultAuthCodes, actionColumnConfig, updateFormRef]);
|
|
573
612
|
|
|
574
613
|
useImperativeHandle(
|
|
575
614
|
ref,
|
|
@@ -630,13 +669,31 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
630
669
|
|
|
631
670
|
// 处理表格额外操作按钮列表
|
|
632
671
|
const handleTableButtonList = (allButtons: MenuProps['items']) => {
|
|
633
|
-
if(!allButtons?.length) return allButtons;
|
|
672
|
+
if (!allButtons?.length) return allButtons;
|
|
634
673
|
|
|
635
674
|
let renderList: MenuProps['items'] | any[] = [...(allButtons ?? [])];
|
|
636
675
|
|
|
676
|
+
const { replaceTableButtonItems = [], extraTableButtonList = [] } = tableProps || {};
|
|
677
|
+
|
|
678
|
+
// 处理替换的按钮
|
|
679
|
+
if (replaceTableButtonItems?.length) {
|
|
680
|
+
const replaceKeys = new Set(replaceTableButtonItems.map((item) => item.key));
|
|
681
|
+
|
|
682
|
+
renderList = renderList.map((item) => {
|
|
683
|
+
if (replaceKeys.has(item.key)) {
|
|
684
|
+
const newItem = replaceTableButtonItems.find((replaceItem) => replaceItem.key === item.key) || item;
|
|
685
|
+
return {
|
|
686
|
+
auth: item.auth,
|
|
687
|
+
...newItem,
|
|
688
|
+
};
|
|
689
|
+
}
|
|
690
|
+
return item;
|
|
691
|
+
});
|
|
692
|
+
}
|
|
693
|
+
|
|
637
694
|
// 将额外的按钮按指定位置放入渲染列表
|
|
638
|
-
if (
|
|
639
|
-
|
|
695
|
+
if (extraTableButtonList?.length) {
|
|
696
|
+
extraTableButtonList.forEach((v, idx) => {
|
|
640
697
|
const item = {
|
|
641
698
|
key: typeof v.auth === 'string' ? v.auth : 'extra-' + idx,
|
|
642
699
|
label: v.label,
|
|
@@ -704,7 +761,8 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
704
761
|
),
|
|
705
762
|
},
|
|
706
763
|
{
|
|
707
|
-
auth:
|
|
764
|
+
auth:
|
|
765
|
+
getAuthorityFn(defaultAuthCodes.import) && (apis.importData || interceptors.importData?.submitImportListData),
|
|
708
766
|
key: 'import',
|
|
709
767
|
label: (
|
|
710
768
|
<ImportExecl key="importMaterial" rangeStart={{ c: 0, r: 2 }} onChange={importListData}>
|
|
@@ -719,19 +777,19 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
719
777
|
auth: getAuthorityFn(defaultAuthCodes.export),
|
|
720
778
|
key: 'export',
|
|
721
779
|
disabled: !tableList.length || loading,
|
|
722
|
-
label:
|
|
723
|
-
<
|
|
724
|
-
|
|
725
|
-
|
|
780
|
+
label: (
|
|
781
|
+
<a onClick={handleDownloadExcel} key="export">
|
|
782
|
+
<CloudDownloadOutlined style={{ marginRight: 6 }} />
|
|
783
|
+
{formatMessage({ id: 'cfmmUI.common.button.exportData', defaultMessage: '导出数据' })}
|
|
784
|
+
</a>
|
|
785
|
+
),
|
|
726
786
|
},
|
|
727
787
|
];
|
|
728
788
|
|
|
729
789
|
allButtons = handleTableButtonList(allButtons);
|
|
730
790
|
|
|
731
791
|
// 过滤有权限的按钮,并移除 auth 属性避免传递到 DOM
|
|
732
|
-
return allButtons
|
|
733
|
-
.filter((button) => button.auth)
|
|
734
|
-
.map(({ auth, ...rest }) => rest);
|
|
792
|
+
return allButtons!.filter((button) => button.auth).map(({ auth, ...rest }) => rest);
|
|
735
793
|
}, [tableList, loading, columnsStateMap]);
|
|
736
794
|
|
|
737
795
|
return (
|
|
@@ -750,10 +808,14 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
750
808
|
toolBarRender={useMemoizedFn(() => {
|
|
751
809
|
if (!getBarButtons?.length) return [];
|
|
752
810
|
return [
|
|
753
|
-
<Dropdown.Button
|
|
811
|
+
<Dropdown.Button
|
|
812
|
+
type="primary"
|
|
813
|
+
loading={actionLoading || downloadButtonLoading}
|
|
814
|
+
menu={{ items: getBarButtons.slice(1) }}
|
|
815
|
+
>
|
|
754
816
|
{getBarButtons[0].icon}
|
|
755
817
|
{getBarButtons[0].label}
|
|
756
|
-
</Dropdown.Button
|
|
818
|
+
</Dropdown.Button>,
|
|
757
819
|
];
|
|
758
820
|
})}
|
|
759
821
|
request={useMemoizedFn(async (params, sorter) => {
|
|
@@ -844,7 +906,7 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
844
906
|
)}
|
|
845
907
|
|
|
846
908
|
{/* 编辑表单 */}
|
|
847
|
-
{updateConfig.Component
|
|
909
|
+
{updateConfig.Component ? (
|
|
848
910
|
<updateConfig.Component
|
|
849
911
|
updateDrawerRef={updateDrawerRef}
|
|
850
912
|
values={editRow}
|
|
@@ -864,6 +926,63 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
864
926
|
}}
|
|
865
927
|
{...(updateConfig.props as U)}
|
|
866
928
|
/>
|
|
929
|
+
) : (
|
|
930
|
+
<Drawer
|
|
931
|
+
width={500}
|
|
932
|
+
title={formatMessage({
|
|
933
|
+
id: `${baseLocalCode}.update.title`,
|
|
934
|
+
defaultMessage: '修改',
|
|
935
|
+
})}
|
|
936
|
+
forceRender // 勿删,否则formRef无法被绑定到ProTable上,因为ProTable是异步渲染的
|
|
937
|
+
maskClosable={false}
|
|
938
|
+
open={updateModalOpen}
|
|
939
|
+
onClose={() => {
|
|
940
|
+
setEditRow(null);
|
|
941
|
+
setUpdateModalOpen(false);
|
|
942
|
+
}}
|
|
943
|
+
// footer={<Button onClick={() => props.form?.resetFields()}>清空</Button>}
|
|
944
|
+
>
|
|
945
|
+
<ProTable<T, T>
|
|
946
|
+
loading={actionLoading}
|
|
947
|
+
onSubmit={useMemoizedFn(async (value) => {
|
|
948
|
+
const success = await handleAction('PUT', {
|
|
949
|
+
...value,
|
|
950
|
+
[rowKey]: editRow?.[rowKey],
|
|
951
|
+
});
|
|
952
|
+
if (success) {
|
|
953
|
+
actionRef.current?.reload();
|
|
954
|
+
setEditRow(null);
|
|
955
|
+
setUpdateModalOpen(false);
|
|
956
|
+
}
|
|
957
|
+
return success;
|
|
958
|
+
})}
|
|
959
|
+
rowKey={rowKey as string}
|
|
960
|
+
type="form"
|
|
961
|
+
columns={columns}
|
|
962
|
+
{...(updateConfig.props as U)}
|
|
963
|
+
formRef={updateFormRef}
|
|
964
|
+
onReset={() => {
|
|
965
|
+
updateFormRef.current?.setFieldsValue({ ...(editRow || {}) });
|
|
966
|
+
}}
|
|
967
|
+
// 自定义按钮
|
|
968
|
+
// form={{
|
|
969
|
+
// submitter: {
|
|
970
|
+
// searchConfig: {
|
|
971
|
+
// submitText: '保存',
|
|
972
|
+
// resetText: '还原',
|
|
973
|
+
// },
|
|
974
|
+
// submitButtonProps: { type: 'primary' },
|
|
975
|
+
// resetButtonProps: { type: 'default' },
|
|
976
|
+
// render: (props, dom) => (
|
|
977
|
+
// <Space>
|
|
978
|
+
// <Button onClick={() => props.form?.resetFields()}>清空</Button>
|
|
979
|
+
// {dom[1]} {/* 默认提交按钮 */}
|
|
980
|
+
// </Space>
|
|
981
|
+
// ),
|
|
982
|
+
// },
|
|
983
|
+
// }}
|
|
984
|
+
/>
|
|
985
|
+
</Drawer>
|
|
867
986
|
)}
|
|
868
987
|
|
|
869
988
|
{/* 多语言编辑 */}
|
|
@@ -886,6 +1005,60 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
|
|
|
886
1005
|
);
|
|
887
1006
|
}
|
|
888
1007
|
|
|
1008
|
+
/**
|
|
1009
|
+
* 涵盖增删改查、数据导入导出、多语言导入导出的通用表格组件
|
|
1010
|
+
* @param props - 组件配置,包含国际化配置、表格列配置、表格其他配置、操作列配置、多语言配置、接口配置、拦截器配置、新增表单配置、编辑表单配置、按钮权限编码配置、操作后回调、查询后回调、删除后回调、导入后回调、导出后回调、多语言导入导出后回调、查看详情后回调、操作日志后回调
|
|
1011
|
+
* @param props.baseLocalCode - 国际化配置,用于获取增删改查国际化文案,默认会根据baseLocalCode生成
|
|
1012
|
+
* @param props.baseLocalName - 国际化配置,用于获取增删改查国际化文案,默认会根据baseLocalName生成
|
|
1013
|
+
* @param props.rowKey - 表格行key
|
|
1014
|
+
* @param props.columns - 表格列配置
|
|
1015
|
+
* @param props.tableProps - ProTable表格其他配置,增加了replaceTableButtonItems和extraTableButtonList配置
|
|
1016
|
+
* @param props.tableProps.replaceTableButtonItems - 替换表格按钮配置
|
|
1017
|
+
* @param props.tableProps.extraTableButtonList - 额外表格按钮配置
|
|
1018
|
+
* @param props.actionColumnConfig - 操作列配置
|
|
1019
|
+
* @param props.actionColumnConfig.columnConfig - 操作列配置
|
|
1020
|
+
* @param props.actionColumnConfig.getDropdownButtonProps - 操作列下拉按钮配置
|
|
1021
|
+
* @param props.multiLang - 多语言配置
|
|
1022
|
+
* @param props.apis - 接口配置
|
|
1023
|
+
* @param props.apis.query - 查询接口
|
|
1024
|
+
* @param props.apis.handle - 操作接口
|
|
1025
|
+
* @param props.apis.queryById - 查询单条接口
|
|
1026
|
+
* @param props.apis.importData - 导入接口
|
|
1027
|
+
* @param props.interceptors - 拦截器配置
|
|
1028
|
+
* @param props.interceptors.query - 查询拦截器
|
|
1029
|
+
* @param props.interceptors.handle - 操作拦截器
|
|
1030
|
+
* @param props.interceptors.queryById - 查询单条拦截器
|
|
1031
|
+
* @param props.interceptors.importData - 导入拦截器
|
|
1032
|
+
* @param props.createConfig - 新增表单配置
|
|
1033
|
+
* @param props.createConfig.Component - 自定义创建表单组件,如果为空,则使用默认创建表单组件
|
|
1034
|
+
* @param props.createConfig.props - 传递给CreateFormComponent的额外props
|
|
1035
|
+
* @param props.updateConfig - 编辑表单配置
|
|
1036
|
+
* @param props.updateConfig.Component - 自定义编辑表单组件,如果为空,则使用默认编辑表单组件
|
|
1037
|
+
* @param props.updateConfig.props - 传递给EditFormComponent的额外props
|
|
1038
|
+
* @param props.authCodes - 按钮权限编码配置
|
|
1039
|
+
* @param props.authCodes.view - 查看权限
|
|
1040
|
+
* @param props.authCodes.add - 新增权限
|
|
1041
|
+
* @param props.authCodes.edit - 编辑权限
|
|
1042
|
+
* @param props.authCodes.remove - 删除权限
|
|
1043
|
+
* @param props.authCodes.batchRemoveAuth - 批量删除权限
|
|
1044
|
+
* @param props.authCodes.record - 查看操作记录权限
|
|
1045
|
+
* @param props.downloadTemplate - 下载模板参数
|
|
1046
|
+
* @param props.downloadTemplate.templateTypeCode - 模板类型编号,字典中的 TemplateCenterTemplateType
|
|
1047
|
+
* @param props.downloadTemplate.moduleCode - 模块编号,菜单中的目录编号
|
|
1048
|
+
* @param props.onAdd - 自定义新增按钮点击回调
|
|
1049
|
+
* @param props.onView - 自定义查看按钮点击回调
|
|
1050
|
+
* @param props.onEdit - 自定义编辑按钮点击回调
|
|
1051
|
+
* @param props.onDelete - 自定义删除按钮点击回调
|
|
1052
|
+
* @param props.onActionLog - 自定义操作日志点击回调
|
|
1053
|
+
* @param props.onBeforeEdit - 编辑前回调
|
|
1054
|
+
* @param props.onBeforeDelete - 删除前回调
|
|
1055
|
+
* @param props.onAfterDelete - 删除后回调
|
|
1056
|
+
* @param props.onAfterAction - 操作后回调
|
|
1057
|
+
* @param props.onAfterSearch - 查询后回调
|
|
1058
|
+
* @param props.onBeforeAction - 操作前回调
|
|
1059
|
+
* @param props.onAfterImport - 导入后回调
|
|
1060
|
+
* @param ref - 暴露组件一些属性及方法
|
|
1061
|
+
*/
|
|
889
1062
|
export default React.memo(forwardRef(CrudTable)) as <T, U = any, C = any>(
|
|
890
1063
|
props: CrudTableConfig<T, U, C> & {
|
|
891
1064
|
ref?: ForwardedRef<CrudTableRefType<T>>;
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
// This file is generated by Umi automatically
|
|
3
|
+
// DO NOT CHANGE IT MANUALLY!
|
|
1
4
|
import { Empty, Select, Spin } from 'antd';
|
|
2
5
|
import React, {
|
|
3
6
|
ForwardedRef,
|
|
@@ -16,24 +19,6 @@ import { MySelectProps } from '../types';
|
|
|
16
19
|
|
|
17
20
|
const { Option } = Select;
|
|
18
21
|
|
|
19
|
-
/**
|
|
20
|
-
* @param autoSelect 列表只有一项时,直接选中,不需要再次点击
|
|
21
|
-
* @param showAllList 获取所有数据,不分页
|
|
22
|
-
* @param localListData 传递给组件的下拉数据
|
|
23
|
-
* @param backShowList 回显列表
|
|
24
|
-
* @param request 请求列表数据
|
|
25
|
-
* @param keyNames Option组件的参数
|
|
26
|
-
* @param searchKey 搜索传给后端的key
|
|
27
|
-
* @param otherSearchValue 根据其他条件查询下拉列表数据
|
|
28
|
-
* @param selectKey 下拉框选择的值
|
|
29
|
-
* @param onlyShowName 只显示名称
|
|
30
|
-
* @param itemRender 自定义渲染
|
|
31
|
-
* @param valueType 内容类型
|
|
32
|
-
* @param showDropdown 判断下拉框的显示
|
|
33
|
-
* @param getSelectList 获取当前选中的原始数据数组
|
|
34
|
-
* @param dropDownListChange 数据下拉列表变化回调
|
|
35
|
-
* @param 组件Select的参数
|
|
36
|
-
*/
|
|
37
22
|
const MySelect = <T,>(props: MySelectProps<T>, ref: ForwardedRef<any>) => {
|
|
38
23
|
const {
|
|
39
24
|
readonly,
|
|
@@ -262,6 +247,25 @@ const MySelect = <T,>(props: MySelectProps<T>, ref: ForwardedRef<any>) => {
|
|
|
262
247
|
);
|
|
263
248
|
};
|
|
264
249
|
|
|
250
|
+
/**
|
|
251
|
+
* 写在这里使用时才有提示
|
|
252
|
+
* @param autoSelect 列表只有一项时,直接选中,不需要再次点击
|
|
253
|
+
* @param showAllList 获取所有数据,不分页
|
|
254
|
+
* @param localListData 传递给组件的下拉数据
|
|
255
|
+
* @param backShowList 回显列表
|
|
256
|
+
* @param request 请求列表数据
|
|
257
|
+
* @param keyNames Option组件的参数
|
|
258
|
+
* @param searchKey 搜索传给后端的key
|
|
259
|
+
* @param otherSearchValue 根据其他条件查询下拉列表数据
|
|
260
|
+
* @param selectKey 下拉框选择的值
|
|
261
|
+
* @param onlyShowName 只显示名称
|
|
262
|
+
* @param itemRender 自定义渲染
|
|
263
|
+
* @param valueType 内容类型
|
|
264
|
+
* @param showDropdown 判断下拉框的显示
|
|
265
|
+
* @param getSelectList 获取当前选中的原始数据数组
|
|
266
|
+
* @param dropDownListChange 数据下拉列表变化回调
|
|
267
|
+
* @param 组件Select的参数
|
|
268
|
+
*/
|
|
265
269
|
export default React.memo(forwardRef(MySelect)) as <T>(
|
|
266
270
|
props: MySelectProps<T> & { ref?: ForwardedRef<any> },
|
|
267
271
|
) => JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const CrudTableTypes = "\nexport interface CrudTableConfig<T = any, U = {}, C = {}> {\n // \u57FA\u7840\u914D\u7F6E\n baseLocalCode?: string;\n baseLocalName?: string;\n rowKey: keyof T;\n\n /** \u591A\u8BED\u8A00\u7F16\u8F91\u914D\u7F6E */\n multiLang?: {\n /** \u591A\u8BED\u8A00\u8868\u6570\u636E */\n multiLangList?: ExportMultiLangListItem[];\n /** \u591A\u8BED\u8A00\u5B57\u6BB5\u914D\u7F6E */\n fields: {\n /** \u5B57\u6BB5\u540D */\n fieldName: keyof T;\n /** \u8868\u540D */\n tableName: string;\n /** \u5217\u540D */\n columnName: string;\n /** \u70B9\u51FB\u56DE\u8C03\uFF0C\u7528\u4E8E\u8BBE\u7F6ElangInfoItem */\n onClick?: (record: T) => LangInfoItem;\n }[];\n /** \u81EA\u5B9A\u4E49\u5BFC\u51FA\u591A\u8BED\u8A00\u51FD\u6570 */\n exportMultiLangData?: () => Promise<boolean | void>;\n /** \u81EA\u5B9A\u4E49\u67E5\u8BE2\u5BFC\u51FA\u591A\u8BED\u8A00\u51FD\u6570 */\n queryExportMultiLangData?: (tableName: string, columnName: string) => Promise<ExportMultiLangListItem[]>;\n /** \u81EA\u5B9A\u4E49\u5BFC\u5165\u591A\u8BED\u8A00\u51FD\u6570 */\n importMultiLangData?: (list: ExportMultiLangListItem[], tableName: string, columnName: string) => Promise<{ success: boolean; failMsg?: string; data?: any } | void> | void;\n };\n \n /** \u6309\u94AE\u6743\u9650\u7F16\u7801\uFF0C\u9ED8\u8BA4\u4F1A\u6839\u636EbaseLocalCode\u751F\u6210 */\n authCodes?: {\n view?: string | boolean | ((record: T) => boolean | undefined);\n add?: string | boolean;\n edit?: string | boolean | ((record: T) => boolean | undefined);\n /** remove\u6743\u9650\u662F\u51FD\u6570\u65F6\uFF0C\u5982\u679C\u9700\u8981\u6279\u91CF\u5220\u9664\u8BF7\u8BBE\u7F6EbatchRemoveAuth\u4E3Atrue, \u5426\u5219\u4E0D\u4F1A\u663E\u793A\u6279\u91CF\u5220\u9664\u6309\u94AE */\n remove?: string | boolean | ((record: T) => boolean | undefined);\n /** \u6279\u91CF\u5220\u9664\u6743\u9650 */\n batchRemoveAuth?: string | boolean;\n record?: string | boolean | ((record: T) => boolean | undefined);\n };\n\n /** API\u65B9\u6CD5 */\n apis: {\n /** \u67E5\u8BE2\u65B9\u6CD5 */\n query: (params: any) => Promise<any>;\n /** \u64CD\u4F5C\u65B9\u6CD5 */\n handle: (method: API.MethodTypes, data: any) => Promise<any>;\n /** \u6839\u636Eid\u67E5\u8BE2\u8BE6\u60C5\u65B9\u6CD5\uFF0C\u6CA1\u4F20\u5219\u4F7F\u7528\u884C\u6570\u636E\u8FDB\u884C\u7F16\u8F91 */\n queryById?: (id: any) => Promise<any>;\n /** \u5BFC\u5165\u65B9\u6CD5 */\n importData?: (list: T[]) => Promise<any>;\n };\n\n /** API\u62E6\u622A\u5668 */\n interceptors?: {\n /** \u67E5\u8BE2\u62E6\u622A\u5668 */\n query?: {\n /** \u67E5\u8BE2\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u67E5\u8BE2\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (params: any) => any;\n /** \u67E5\u8BE2\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u67E5\u8BE2\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (result: any) => any;\n };\n /** \u64CD\u4F5C\u62E6\u622A\u5668 */\n handle?: {\n /** \u64CD\u4F5C\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u64CD\u4F5C\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (method: API.MethodTypes, data: any) => { method?: API.MethodTypes; data: any };\n /** \u64CD\u4F5C\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u64CD\u4F5C\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (method: API.MethodTypes, result: any) => any;\n };\n /** \u8BE6\u60C5\u67E5\u8BE2\u62E6\u622A\u5668 */\n queryById?: {\n /** \u8BE6\u60C5\u67E5\u8BE2\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u8BE6\u60C5\u67E5\u8BE2\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (id: any) => any;\n /** \u8BE6\u60C5\u67E5\u8BE2\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u8BE6\u60C5\u67E5\u8BE2\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (result: any) => any;\n };\n /** \u5BFC\u5165\u62E6\u622A\u5668 */\n importData?: {\n /** \u5BFC\u5165\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (list: T[]) => any;\n /** \u5BFC\u5165\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (result: any) => any;\n /** \u5BFC\u5165\u6821\u9A8C\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u6570\u636E\u8FDB\u884C\u6821\u9A8C */\n checkImportExecl?: (list: T[]) => ImportErrorType[];\n /** \u5BFC\u5165\u6821\u9A8C\u63D0\u793A\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u6821\u9A8C\u63D0\u793A\u8FDB\u884C\u5904\u7406 */\n showCheckErrorTips?: (errorMessageList: ImportErrorType[]) => void;\n /** \u5BFC\u5165\u63D0\u4EA4\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u6570\u636E\u8FDB\u884C\u63D0\u4EA4 */\n submitImportListData?: (list: T[]) => Promise<{ success: boolean; data?: K | null; error?: AxiosError | null }>;\n };\n };\n\n /** \u8868\u683C\u5217\u914D\u7F6E */\n columns: ProColumns<T>[];\n /** \u8868\u683C\u5176\u4ED6\u914D\u7F6E */\n tableProps?: Partial<ProTableProps<T, any>> & {\n extraTableButtonList?: {\n /** \u6309\u94AE\u4F4D\u7F6E */\n position: 'start' | 'end' | number;\n /** \u6309\u94AE\u8282\u70B9 */\n label: any;\n icon?: React.ReactNode;\n /** \u6309\u94AE\u6743\u9650 */\n auth?: string | boolean;\n }[];\n }\n\n /** \u64CD\u4F5C\u5217\u914D\u7F6E\uFF08\u8868\u683C\u64CD\u4F5C\u5217\u914D\u7F6E\u3001\u64CD\u4F5C\u5217\u4E0B\u62C9\u6309\u94AE\u914D\u7F6E\uFF09 */\n actionColumnConfig?: {\n /** \u8868\u683C\u64CD\u4F5C\u5217\u914D\u7F6E */\n columnConfig?: ProColumns<T>;\n /** \u4E0B\u62C9\u5217\u8868\u5C5E\u6027 */\n getDropdownButtonProps?: (record: T) => Partial<DropdownButtonProps>;\n };\n\n /** \u65B0\u589E\u8868\u5355\u914D\u7F6E */\n createConfig?: {\n /** \u81EA\u5B9A\u4E49\u521B\u5EFA\u8868\u5355\u7EC4\u4EF6 */\n Component?: React.ComponentType<\n {\n open?: boolean;\n onOpenChange?: (visible: boolean) => void;\n onSubmit?: (values: any) => Promise<boolean | void>;\n loading?: boolean;\n } & C\n >;\n /** \u4F20\u9012\u7ED9CreateFormComponent\u7684\u989D\u5916props */\n props?: C;\n };\n\n /** \u7F16\u8F91\u8868\u5355\u914D\u7F6E */\n updateConfig?: {\n /** \u81EA\u5B9A\u4E49\u7F16\u8F91\u8868\u5355\u7EC4\u4EF6 */\n Component?: React.ComponentType<\n {\n updateDrawerRef: React.MutableRefObject<RefDrawerFormRefType | undefined>;\n values: Partial<T> | null;\n onSubmit: (values: any) => Promise<boolean | void>;\n } & U\n >;\n /** \u4F20\u9012\u7ED9UpdateFormComponent\u7684\u989D\u5916props */\n props?: U;\n };\n \n /** \u4E0B\u8F7D\u6A21\u677F\u53C2\u6570 */\n downloadTemplate?: {\n /** \u6A21\u677F\u7C7B\u578B\u7F16\u53F7\uFF0C\u5B57\u5178\u4E2D\u7684 TemplateCenterTemplateType */\n templateTypeCode?: string;\n /** \u6A21\u5757\u7F16\u53F7\uFF0C\u83DC\u5355\u4E2D\u7684\u76EE\u5F55\u7F16\u53F7 */\n moduleCode?: string;\n };\n\n /** \u81EA\u5B9A\u4E49\u65B0\u589E\u51FD\u6570 */\n onAdd?: () => void;\n\n /** \u67E5\u8BE2\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterSearch?: (result: API.Result_TableListType<T[]>) => Promise<any> | void;\n /** \u7F16\u8F91\u524D\u56DE\u8C03\u51FD\u6570\uFF0C\u5982\u679C\u51FD\u6570\u6CA1\u6709\u8FD4\u56DET\uFF0C\u5219\u4E0D\u8FDB\u884C\u7F16\u8F91 */\n onBeforeEdit?: (record: T) => Promise<T | null>;\n /** \u5220\u9664\u524D\u56DE\u8C03\u51FD\u6570\uFF0C\u5982\u679C\u51FD\u6570\u6CA1\u6709\u8FD4\u56DEtrue\uFF0C\u5219\u4E0D\u8FDB\u884C\u64CD\u4F5C */\n onBeforeDelete?: (keys: React.Key[]) => Promise<boolean> | boolean | void;\n /** \u5220\u9664\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterDelete?: (keys: React.Key[], result: boolean) => Promise<boolean> | boolean | void;\n /** \u64CD\u4F5C\u524D\u56DE\u8C03\u51FD\u6570\uFF0C\u5982\u679C\u51FD\u6570\u6CA1\u6709\u8FD4\u56DEtrue\uFF0C\u5219\u4E0D\u8FDB\u884C\u64CD\u4F5C */\n onBeforeAction?: (method: API.MethodTypes, fields: any) => Promise<boolean> | boolean | void;\n /** \u64CD\u4F5C\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterAction?: (method: API.MethodTypes, success: boolean) => void;\n /** \u5BFC\u5165\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterImport?: (result: { success: boolean; data?: K | null; error?: AxiosError | null }) => Promise<any> | void;\n}\n\nexport interface CrudTableRefType<T = any> {\n actionRef: React.MutableRefObject<ActionType | undefined>;\n updateDrawerRef: React.MutableRefObject<RefDrawerFormRefType | undefined>;\n tableList: T[];\n setTableList: (row: T[]) => void;\n viewRow: T | undefined;\n setViewRow: (row: T | undefined) => void;\n actionLogRow: T | undefined;\n setActionLogRow: (row: T | undefined) => void;\n editRow: Partial<T> | null;\n setEditRow: (row: Partial<T> | null) => void;\n selectedRows: T[];\n setSelectedRows: (rows: T[]) => void;\n selectedRowKeys: React.Key[];\n setSelectedRowKeys: (keys: React.Key[]) => void;\n createModalOpen: boolean;\n setCreateModalOpen: (open: boolean) => void;\n editLangModalOpen: boolean;\n setEditLangModalOpen: (open: boolean) => void;\n currentLangInfo?: LangInfoItem;\n setCurrentLangInfo: (open: LangInfoItem) => void;\n onDelete: (keys: React.Key[]) => void;\n updateModalOpen: () => void;\n updateModalClose: () => void;\n}\n";
|
|
1
|
+
export declare const CrudTableTypes = "\nexport interface CrudTableConfig<T = any, U = {}, C = {}> {\n // \u57FA\u7840\u914D\u7F6E\n baseLocalCode?: string;\n baseLocalName?: string;\n rowKey: keyof T;\n\n /** \u591A\u8BED\u8A00\u7F16\u8F91\u914D\u7F6E */\n multiLang?: {\n /** \u591A\u8BED\u8A00\u8868\u6570\u636E */\n multiLangList?: ExportMultiLangListItem[];\n /** \u591A\u8BED\u8A00\u5B57\u6BB5\u914D\u7F6E */\n fields: {\n /** \u5B57\u6BB5\u540D */\n fieldName: keyof T;\n /** \u8868\u540D */\n tableName: string;\n /** \u5217\u540D */\n columnName: string;\n /** \u70B9\u51FB\u56DE\u8C03\uFF0C\u7528\u4E8E\u8BBE\u7F6ElangInfoItem */\n onClick?: (record: T) => LangInfoItem;\n }[];\n /** \u81EA\u5B9A\u4E49\u5BFC\u51FA\u591A\u8BED\u8A00\u51FD\u6570 */\n exportMultiLangData?: () => Promise<boolean | void>;\n /** \u81EA\u5B9A\u4E49\u67E5\u8BE2\u5BFC\u51FA\u591A\u8BED\u8A00\u51FD\u6570 */\n queryExportMultiLangData?: (tableName: string, columnName: string) => Promise<ExportMultiLangListItem[]>;\n /** \u81EA\u5B9A\u4E49\u5BFC\u5165\u591A\u8BED\u8A00\u51FD\u6570 */\n importMultiLangData?: (list: ExportMultiLangListItem[], tableName: string, columnName: string) => Promise<{ success: boolean; failMsg?: string; data?: any } | void> | void;\n };\n \n /** \u6309\u94AE\u6743\u9650\u7F16\u7801\uFF0C\u9ED8\u8BA4\u4F1A\u6839\u636EbaseLocalCode\u751F\u6210 */\n authCodes?: {\n view?: string | boolean | ((record: T) => boolean | undefined);\n add?: string | boolean;\n edit?: string | boolean | ((record: T) => boolean | undefined);\n /** remove\u6743\u9650\u662F\u51FD\u6570\u65F6\uFF0C\u5982\u679C\u9700\u8981\u6279\u91CF\u5220\u9664\u8BF7\u8BBE\u7F6EbatchRemoveAuth\u4E3Atrue, \u5426\u5219\u4E0D\u4F1A\u663E\u793A\u6279\u91CF\u5220\u9664\u6309\u94AE */\n remove?: string | boolean | ((record: T) => boolean | undefined);\n /** \u6279\u91CF\u5220\u9664\u6743\u9650 */\n batchRemoveAuth?: string | boolean;\n record?: string | boolean | ((record: T) => boolean | undefined);\n };\n\n /** API\u65B9\u6CD5 */\n apis: {\n /** \u67E5\u8BE2\u65B9\u6CD5 */\n query: (params: any) => Promise<any>;\n /** \u64CD\u4F5C\u65B9\u6CD5 */\n handle: (method: API.MethodTypes, data: any) => Promise<any>;\n /** \u6839\u636Eid\u67E5\u8BE2\u8BE6\u60C5\u65B9\u6CD5\uFF0C\u6CA1\u4F20\u5219\u4F7F\u7528\u884C\u6570\u636E\u8FDB\u884C\u7F16\u8F91 */\n queryById?: (id: any) => Promise<any>;\n /** \u5BFC\u5165\u65B9\u6CD5 */\n importData?: (list: T[]) => Promise<any>;\n };\n\n /** API\u62E6\u622A\u5668 */\n interceptors?: {\n /** \u67E5\u8BE2\u62E6\u622A\u5668 */\n query?: {\n /** \u67E5\u8BE2\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u67E5\u8BE2\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (params: any) => any;\n /** \u67E5\u8BE2\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u67E5\u8BE2\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (result: any) => any;\n };\n /** \u64CD\u4F5C\u62E6\u622A\u5668 */\n handle?: {\n /** \u64CD\u4F5C\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u64CD\u4F5C\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (method: API.MethodTypes, data: any) => { method?: API.MethodTypes; data: any };\n /** \u64CD\u4F5C\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u64CD\u4F5C\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (method: API.MethodTypes, result: any) => any;\n };\n /** \u8BE6\u60C5\u67E5\u8BE2\u62E6\u622A\u5668 */\n queryById?: {\n /** \u8BE6\u60C5\u67E5\u8BE2\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u8BE6\u60C5\u67E5\u8BE2\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (id: any) => any;\n /** \u8BE6\u60C5\u67E5\u8BE2\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u8BE6\u60C5\u67E5\u8BE2\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (result: any) => any;\n };\n /** \u5BFC\u5165\u62E6\u622A\u5668 */\n importData?: {\n /** \u5BFC\u5165\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (list: T[]) => any;\n /** \u5BFC\u5165\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (result: any) => any;\n /** \u5BFC\u5165\u6821\u9A8C\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u6570\u636E\u8FDB\u884C\u6821\u9A8C */\n checkImportExecl?: (list: T[]) => ImportErrorType[];\n /** \u5BFC\u5165\u6821\u9A8C\u63D0\u793A\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u6821\u9A8C\u63D0\u793A\u8FDB\u884C\u5904\u7406 */\n showCheckErrorTips?: (errorMessageList: ImportErrorType[]) => void;\n /** \u5BFC\u5165\u63D0\u4EA4\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u6570\u636E\u8FDB\u884C\u63D0\u4EA4 */\n submitImportListData?: (list: T[]) => Promise<{ success: boolean; data?: K | null; error?: AxiosError | null }>;\n };\n };\n\n /** \u8868\u683C\u5217\u914D\u7F6E */\n columns: ProColumns<T>[];\n /** \u8868\u683C\u5176\u4ED6\u914D\u7F6E */\n tableProps?: Partial<ProTableProps<T, any>> & {\n extraTableButtonList?: {\n /** \u6309\u94AE\u4F4D\u7F6E */\n position: 'start' | 'end' | number;\n /** \u6309\u94AE\u8282\u70B9 */\n label: any;\n icon?: React.ReactNode;\n /** \u6309\u94AE\u6743\u9650 */\n auth?: string | boolean;\n }[];\n /** \u6839\u636Ekey\u66FF\u6362\u8868\u683C\u6309\u94AE */\n replaceTableButtonItems?: {\n /** \u6309\u94AEkey */\n key: string;\n /** \u6309\u94AE\u8282\u70B9 */\n label: any;\n /** \u6309\u94AE\u6743\u9650 */\n auth?: string | boolean;\n }[];\n }\n\n /** \u64CD\u4F5C\u5217\u914D\u7F6E\uFF08\u8868\u683C\u64CD\u4F5C\u5217\u914D\u7F6E\u3001\u64CD\u4F5C\u5217\u4E0B\u62C9\u6309\u94AE\u914D\u7F6E\uFF09 */\n actionColumnConfig?: {\n /** \u8868\u683C\u64CD\u4F5C\u5217\u914D\u7F6E */\n columnConfig?: ProColumns<T>;\n /** \u4E0B\u62C9\u5217\u8868\u5C5E\u6027 */\n getDropdownButtonProps?: (record: T) => Partial<DropdownButtonProps>;\n };\n\n /** \u65B0\u589E\u8868\u5355\u914D\u7F6E */\n createConfig?: {\n /** \u81EA\u5B9A\u4E49\u521B\u5EFA\u8868\u5355\u7EC4\u4EF6 */\n Component?: React.ComponentType<\n {\n open?: boolean;\n onOpenChange?: (visible: boolean) => void;\n onSubmit?: (values: any) => Promise<boolean | void>;\n loading?: boolean;\n } & C\n >;\n /** \u4F20\u9012\u7ED9CreateFormComponent\u7684\u989D\u5916props */\n props?: C;\n };\n\n /** \u7F16\u8F91\u8868\u5355\u914D\u7F6E */\n updateConfig?: {\n /** \u81EA\u5B9A\u4E49\u7F16\u8F91\u8868\u5355\u7EC4\u4EF6 */\n Component?: React.ComponentType<\n {\n updateDrawerRef: React.MutableRefObject<RefDrawerFormRefType | undefined>;\n values: Partial<T> | null;\n onSubmit: (values: any) => Promise<boolean | void>;\n } & U\n >;\n /** \u4F20\u9012\u7ED9UpdateFormComponent\u7684\u989D\u5916props */\n props?: U;\n };\n \n /** \u4E0B\u8F7D\u6A21\u677F\u53C2\u6570 */\n downloadTemplate?: {\n /** \u6A21\u677F\u7C7B\u578B\u7F16\u53F7\uFF0C\u5B57\u5178\u4E2D\u7684 TemplateCenterTemplateType */\n templateTypeCode?: string;\n /** \u6A21\u5757\u7F16\u53F7\uFF0C\u83DC\u5355\u4E2D\u7684\u76EE\u5F55\u7F16\u53F7 */\n moduleCode?: string;\n };\n\n /** \u81EA\u5B9A\u4E49\u65B0\u589E\u51FD\u6570 */\n onAdd?: () => void;\n /** \u81EA\u5B9A\u4E49\u7F16\u8F91\u51FD\u6570 */\n onEdit?: (record: T) => void;\n /** \u81EA\u5B9A\u4E49\u5220\u9664\u51FD\u6570 */\n onDelete?: (keys: React.Key[]) => void;\n /** \u81EA\u5B9A\u4E49\u67E5\u770B\u51FD\u6570 */\n onView?: (record: T) => void;\n /** \u81EA\u5B9A\u4E49\u64CD\u4F5C\u65E5\u5FD7\u51FD\u6570 */\n onActionLog?: (record: T) => void;\n\n /** \u67E5\u8BE2\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterSearch?: (result: API.Result_TableListType<T[]>) => Promise<any> | void;\n /** \u7F16\u8F91\u524D\u56DE\u8C03\u51FD\u6570\uFF0C\u5982\u679C\u51FD\u6570\u6CA1\u6709\u8FD4\u56DET\uFF0C\u5219\u4E0D\u8FDB\u884C\u7F16\u8F91 */\n onBeforeEdit?: (record: T) => Promise<T | null>;\n /** \u5220\u9664\u524D\u56DE\u8C03\u51FD\u6570\uFF0C\u5982\u679C\u51FD\u6570\u6CA1\u6709\u8FD4\u56DEtrue\uFF0C\u5219\u4E0D\u8FDB\u884C\u64CD\u4F5C */\n onBeforeDelete?: (keys: React.Key[]) => Promise<boolean> | boolean | void;\n /** \u5220\u9664\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterDelete?: (keys: React.Key[], result: boolean) => Promise<boolean> | boolean | void;\n /** \u64CD\u4F5C\u524D\u56DE\u8C03\u51FD\u6570\uFF0C\u5982\u679C\u51FD\u6570\u6CA1\u6709\u8FD4\u56DEtrue\uFF0C\u5219\u4E0D\u8FDB\u884C\u64CD\u4F5C */\n onBeforeAction?: (method: API.MethodTypes, fields: any) => Promise<boolean> | boolean | void;\n /** \u64CD\u4F5C\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterAction?: (method: API.MethodTypes, success: boolean) => void;\n /** \u5BFC\u5165\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterImport?: (result: { success: boolean; data?: K | null; error?: AxiosError | null }) => Promise<any> | void;\n}\n\nexport interface CrudTableRefType<T = any> {\n actionRef: React.MutableRefObject<ActionType | undefined>;\n updateDrawerRef: React.MutableRefObject<RefDrawerFormRefType | undefined>;\n tableList: T[];\n setTableList: (row: T[]) => void;\n viewRow: T | undefined;\n setViewRow: (row: T | undefined) => void;\n actionLogRow: T | undefined;\n setActionLogRow: (row: T | undefined) => void;\n editRow: Partial<T> | null;\n setEditRow: (row: Partial<T> | null) => void;\n selectedRows: T[];\n setSelectedRows: (rows: T[]) => void;\n selectedRowKeys: React.Key[];\n setSelectedRowKeys: (keys: React.Key[]) => void;\n createModalOpen: boolean;\n setCreateModalOpen: (open: boolean) => void;\n editLangModalOpen: boolean;\n setEditLangModalOpen: (open: boolean) => void;\n currentLangInfo?: LangInfoItem;\n setCurrentLangInfo: (open: LangInfoItem) => void;\n onDelete: (keys: React.Key[]) => void;\n updateModalOpen: () => void;\n updateModalClose: () => void;\n}\n";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export var CrudTableTypes = "\nexport interface CrudTableConfig<T = any, U = {}, C = {}> {\n // \u57FA\u7840\u914D\u7F6E\n baseLocalCode?: string;\n baseLocalName?: string;\n rowKey: keyof T;\n\n /** \u591A\u8BED\u8A00\u7F16\u8F91\u914D\u7F6E */\n multiLang?: {\n /** \u591A\u8BED\u8A00\u8868\u6570\u636E */\n multiLangList?: ExportMultiLangListItem[];\n /** \u591A\u8BED\u8A00\u5B57\u6BB5\u914D\u7F6E */\n fields: {\n /** \u5B57\u6BB5\u540D */\n fieldName: keyof T;\n /** \u8868\u540D */\n tableName: string;\n /** \u5217\u540D */\n columnName: string;\n /** \u70B9\u51FB\u56DE\u8C03\uFF0C\u7528\u4E8E\u8BBE\u7F6ElangInfoItem */\n onClick?: (record: T) => LangInfoItem;\n }[];\n /** \u81EA\u5B9A\u4E49\u5BFC\u51FA\u591A\u8BED\u8A00\u51FD\u6570 */\n exportMultiLangData?: () => Promise<boolean | void>;\n /** \u81EA\u5B9A\u4E49\u67E5\u8BE2\u5BFC\u51FA\u591A\u8BED\u8A00\u51FD\u6570 */\n queryExportMultiLangData?: (tableName: string, columnName: string) => Promise<ExportMultiLangListItem[]>;\n /** \u81EA\u5B9A\u4E49\u5BFC\u5165\u591A\u8BED\u8A00\u51FD\u6570 */\n importMultiLangData?: (list: ExportMultiLangListItem[], tableName: string, columnName: string) => Promise<{ success: boolean; failMsg?: string; data?: any } | void> | void;\n };\n \n /** \u6309\u94AE\u6743\u9650\u7F16\u7801\uFF0C\u9ED8\u8BA4\u4F1A\u6839\u636EbaseLocalCode\u751F\u6210 */\n authCodes?: {\n view?: string | boolean | ((record: T) => boolean | undefined);\n add?: string | boolean;\n edit?: string | boolean | ((record: T) => boolean | undefined);\n /** remove\u6743\u9650\u662F\u51FD\u6570\u65F6\uFF0C\u5982\u679C\u9700\u8981\u6279\u91CF\u5220\u9664\u8BF7\u8BBE\u7F6EbatchRemoveAuth\u4E3Atrue, \u5426\u5219\u4E0D\u4F1A\u663E\u793A\u6279\u91CF\u5220\u9664\u6309\u94AE */\n remove?: string | boolean | ((record: T) => boolean | undefined);\n /** \u6279\u91CF\u5220\u9664\u6743\u9650 */\n batchRemoveAuth?: string | boolean;\n record?: string | boolean | ((record: T) => boolean | undefined);\n };\n\n /** API\u65B9\u6CD5 */\n apis: {\n /** \u67E5\u8BE2\u65B9\u6CD5 */\n query: (params: any) => Promise<any>;\n /** \u64CD\u4F5C\u65B9\u6CD5 */\n handle: (method: API.MethodTypes, data: any) => Promise<any>;\n /** \u6839\u636Eid\u67E5\u8BE2\u8BE6\u60C5\u65B9\u6CD5\uFF0C\u6CA1\u4F20\u5219\u4F7F\u7528\u884C\u6570\u636E\u8FDB\u884C\u7F16\u8F91 */\n queryById?: (id: any) => Promise<any>;\n /** \u5BFC\u5165\u65B9\u6CD5 */\n importData?: (list: T[]) => Promise<any>;\n };\n\n /** API\u62E6\u622A\u5668 */\n interceptors?: {\n /** \u67E5\u8BE2\u62E6\u622A\u5668 */\n query?: {\n /** \u67E5\u8BE2\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u67E5\u8BE2\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (params: any) => any;\n /** \u67E5\u8BE2\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u67E5\u8BE2\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (result: any) => any;\n };\n /** \u64CD\u4F5C\u62E6\u622A\u5668 */\n handle?: {\n /** \u64CD\u4F5C\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u64CD\u4F5C\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (method: API.MethodTypes, data: any) => { method?: API.MethodTypes; data: any };\n /** \u64CD\u4F5C\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u64CD\u4F5C\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (method: API.MethodTypes, result: any) => any;\n };\n /** \u8BE6\u60C5\u67E5\u8BE2\u62E6\u622A\u5668 */\n queryById?: {\n /** \u8BE6\u60C5\u67E5\u8BE2\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u8BE6\u60C5\u67E5\u8BE2\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (id: any) => any;\n /** \u8BE6\u60C5\u67E5\u8BE2\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u8BE6\u60C5\u67E5\u8BE2\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (result: any) => any;\n };\n /** \u5BFC\u5165\u62E6\u622A\u5668 */\n importData?: {\n /** \u5BFC\u5165\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (list: T[]) => any;\n /** \u5BFC\u5165\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (result: any) => any;\n /** \u5BFC\u5165\u6821\u9A8C\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u6570\u636E\u8FDB\u884C\u6821\u9A8C */\n checkImportExecl?: (list: T[]) => ImportErrorType[];\n /** \u5BFC\u5165\u6821\u9A8C\u63D0\u793A\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u6821\u9A8C\u63D0\u793A\u8FDB\u884C\u5904\u7406 */\n showCheckErrorTips?: (errorMessageList: ImportErrorType[]) => void;\n /** \u5BFC\u5165\u63D0\u4EA4\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u6570\u636E\u8FDB\u884C\u63D0\u4EA4 */\n submitImportListData?: (list: T[]) => Promise<{ success: boolean; data?: K | null; error?: AxiosError | null }>;\n };\n };\n\n /** \u8868\u683C\u5217\u914D\u7F6E */\n columns: ProColumns<T>[];\n /** \u8868\u683C\u5176\u4ED6\u914D\u7F6E */\n tableProps?: Partial<ProTableProps<T, any>> & {\n extraTableButtonList?: {\n /** \u6309\u94AE\u4F4D\u7F6E */\n position: 'start' | 'end' | number;\n /** \u6309\u94AE\u8282\u70B9 */\n label: any;\n icon?: React.ReactNode;\n /** \u6309\u94AE\u6743\u9650 */\n auth?: string | boolean;\n }[];\n }\n\n /** \u64CD\u4F5C\u5217\u914D\u7F6E\uFF08\u8868\u683C\u64CD\u4F5C\u5217\u914D\u7F6E\u3001\u64CD\u4F5C\u5217\u4E0B\u62C9\u6309\u94AE\u914D\u7F6E\uFF09 */\n actionColumnConfig?: {\n /** \u8868\u683C\u64CD\u4F5C\u5217\u914D\u7F6E */\n columnConfig?: ProColumns<T>;\n /** \u4E0B\u62C9\u5217\u8868\u5C5E\u6027 */\n getDropdownButtonProps?: (record: T) => Partial<DropdownButtonProps>;\n };\n\n /** \u65B0\u589E\u8868\u5355\u914D\u7F6E */\n createConfig?: {\n /** \u81EA\u5B9A\u4E49\u521B\u5EFA\u8868\u5355\u7EC4\u4EF6 */\n Component?: React.ComponentType<\n {\n open?: boolean;\n onOpenChange?: (visible: boolean) => void;\n onSubmit?: (values: any) => Promise<boolean | void>;\n loading?: boolean;\n } & C\n >;\n /** \u4F20\u9012\u7ED9CreateFormComponent\u7684\u989D\u5916props */\n props?: C;\n };\n\n /** \u7F16\u8F91\u8868\u5355\u914D\u7F6E */\n updateConfig?: {\n /** \u81EA\u5B9A\u4E49\u7F16\u8F91\u8868\u5355\u7EC4\u4EF6 */\n Component?: React.ComponentType<\n {\n updateDrawerRef: React.MutableRefObject<RefDrawerFormRefType | undefined>;\n values: Partial<T> | null;\n onSubmit: (values: any) => Promise<boolean | void>;\n } & U\n >;\n /** \u4F20\u9012\u7ED9UpdateFormComponent\u7684\u989D\u5916props */\n props?: U;\n };\n \n /** \u4E0B\u8F7D\u6A21\u677F\u53C2\u6570 */\n downloadTemplate?: {\n /** \u6A21\u677F\u7C7B\u578B\u7F16\u53F7\uFF0C\u5B57\u5178\u4E2D\u7684 TemplateCenterTemplateType */\n templateTypeCode?: string;\n /** \u6A21\u5757\u7F16\u53F7\uFF0C\u83DC\u5355\u4E2D\u7684\u76EE\u5F55\u7F16\u53F7 */\n moduleCode?: string;\n };\n\n /** \u81EA\u5B9A\u4E49\u65B0\u589E\u51FD\u6570 */\n onAdd?: () => void;\n\n /** \u67E5\u8BE2\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterSearch?: (result: API.Result_TableListType<T[]>) => Promise<any> | void;\n /** \u7F16\u8F91\u524D\u56DE\u8C03\u51FD\u6570\uFF0C\u5982\u679C\u51FD\u6570\u6CA1\u6709\u8FD4\u56DET\uFF0C\u5219\u4E0D\u8FDB\u884C\u7F16\u8F91 */\n onBeforeEdit?: (record: T) => Promise<T | null>;\n /** \u5220\u9664\u524D\u56DE\u8C03\u51FD\u6570\uFF0C\u5982\u679C\u51FD\u6570\u6CA1\u6709\u8FD4\u56DEtrue\uFF0C\u5219\u4E0D\u8FDB\u884C\u64CD\u4F5C */\n onBeforeDelete?: (keys: React.Key[]) => Promise<boolean> | boolean | void;\n /** \u5220\u9664\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterDelete?: (keys: React.Key[], result: boolean) => Promise<boolean> | boolean | void;\n /** \u64CD\u4F5C\u524D\u56DE\u8C03\u51FD\u6570\uFF0C\u5982\u679C\u51FD\u6570\u6CA1\u6709\u8FD4\u56DEtrue\uFF0C\u5219\u4E0D\u8FDB\u884C\u64CD\u4F5C */\n onBeforeAction?: (method: API.MethodTypes, fields: any) => Promise<boolean> | boolean | void;\n /** \u64CD\u4F5C\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterAction?: (method: API.MethodTypes, success: boolean) => void;\n /** \u5BFC\u5165\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterImport?: (result: { success: boolean; data?: K | null; error?: AxiosError | null }) => Promise<any> | void;\n}\n\nexport interface CrudTableRefType<T = any> {\n actionRef: React.MutableRefObject<ActionType | undefined>;\n updateDrawerRef: React.MutableRefObject<RefDrawerFormRefType | undefined>;\n tableList: T[];\n setTableList: (row: T[]) => void;\n viewRow: T | undefined;\n setViewRow: (row: T | undefined) => void;\n actionLogRow: T | undefined;\n setActionLogRow: (row: T | undefined) => void;\n editRow: Partial<T> | null;\n setEditRow: (row: Partial<T> | null) => void;\n selectedRows: T[];\n setSelectedRows: (rows: T[]) => void;\n selectedRowKeys: React.Key[];\n setSelectedRowKeys: (keys: React.Key[]) => void;\n createModalOpen: boolean;\n setCreateModalOpen: (open: boolean) => void;\n editLangModalOpen: boolean;\n setEditLangModalOpen: (open: boolean) => void;\n currentLangInfo?: LangInfoItem;\n setCurrentLangInfo: (open: LangInfoItem) => void;\n onDelete: (keys: React.Key[]) => void;\n updateModalOpen: () => void;\n updateModalClose: () => void;\n}\n";
|
|
1
|
+
export var CrudTableTypes = "\nexport interface CrudTableConfig<T = any, U = {}, C = {}> {\n // \u57FA\u7840\u914D\u7F6E\n baseLocalCode?: string;\n baseLocalName?: string;\n rowKey: keyof T;\n\n /** \u591A\u8BED\u8A00\u7F16\u8F91\u914D\u7F6E */\n multiLang?: {\n /** \u591A\u8BED\u8A00\u8868\u6570\u636E */\n multiLangList?: ExportMultiLangListItem[];\n /** \u591A\u8BED\u8A00\u5B57\u6BB5\u914D\u7F6E */\n fields: {\n /** \u5B57\u6BB5\u540D */\n fieldName: keyof T;\n /** \u8868\u540D */\n tableName: string;\n /** \u5217\u540D */\n columnName: string;\n /** \u70B9\u51FB\u56DE\u8C03\uFF0C\u7528\u4E8E\u8BBE\u7F6ElangInfoItem */\n onClick?: (record: T) => LangInfoItem;\n }[];\n /** \u81EA\u5B9A\u4E49\u5BFC\u51FA\u591A\u8BED\u8A00\u51FD\u6570 */\n exportMultiLangData?: () => Promise<boolean | void>;\n /** \u81EA\u5B9A\u4E49\u67E5\u8BE2\u5BFC\u51FA\u591A\u8BED\u8A00\u51FD\u6570 */\n queryExportMultiLangData?: (tableName: string, columnName: string) => Promise<ExportMultiLangListItem[]>;\n /** \u81EA\u5B9A\u4E49\u5BFC\u5165\u591A\u8BED\u8A00\u51FD\u6570 */\n importMultiLangData?: (list: ExportMultiLangListItem[], tableName: string, columnName: string) => Promise<{ success: boolean; failMsg?: string; data?: any } | void> | void;\n };\n \n /** \u6309\u94AE\u6743\u9650\u7F16\u7801\uFF0C\u9ED8\u8BA4\u4F1A\u6839\u636EbaseLocalCode\u751F\u6210 */\n authCodes?: {\n view?: string | boolean | ((record: T) => boolean | undefined);\n add?: string | boolean;\n edit?: string | boolean | ((record: T) => boolean | undefined);\n /** remove\u6743\u9650\u662F\u51FD\u6570\u65F6\uFF0C\u5982\u679C\u9700\u8981\u6279\u91CF\u5220\u9664\u8BF7\u8BBE\u7F6EbatchRemoveAuth\u4E3Atrue, \u5426\u5219\u4E0D\u4F1A\u663E\u793A\u6279\u91CF\u5220\u9664\u6309\u94AE */\n remove?: string | boolean | ((record: T) => boolean | undefined);\n /** \u6279\u91CF\u5220\u9664\u6743\u9650 */\n batchRemoveAuth?: string | boolean;\n record?: string | boolean | ((record: T) => boolean | undefined);\n };\n\n /** API\u65B9\u6CD5 */\n apis: {\n /** \u67E5\u8BE2\u65B9\u6CD5 */\n query: (params: any) => Promise<any>;\n /** \u64CD\u4F5C\u65B9\u6CD5 */\n handle: (method: API.MethodTypes, data: any) => Promise<any>;\n /** \u6839\u636Eid\u67E5\u8BE2\u8BE6\u60C5\u65B9\u6CD5\uFF0C\u6CA1\u4F20\u5219\u4F7F\u7528\u884C\u6570\u636E\u8FDB\u884C\u7F16\u8F91 */\n queryById?: (id: any) => Promise<any>;\n /** \u5BFC\u5165\u65B9\u6CD5 */\n importData?: (list: T[]) => Promise<any>;\n };\n\n /** API\u62E6\u622A\u5668 */\n interceptors?: {\n /** \u67E5\u8BE2\u62E6\u622A\u5668 */\n query?: {\n /** \u67E5\u8BE2\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u67E5\u8BE2\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (params: any) => any;\n /** \u67E5\u8BE2\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u67E5\u8BE2\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (result: any) => any;\n };\n /** \u64CD\u4F5C\u62E6\u622A\u5668 */\n handle?: {\n /** \u64CD\u4F5C\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u64CD\u4F5C\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (method: API.MethodTypes, data: any) => { method?: API.MethodTypes; data: any };\n /** \u64CD\u4F5C\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u64CD\u4F5C\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (method: API.MethodTypes, result: any) => any;\n };\n /** \u8BE6\u60C5\u67E5\u8BE2\u62E6\u622A\u5668 */\n queryById?: {\n /** \u8BE6\u60C5\u67E5\u8BE2\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u8BE6\u60C5\u67E5\u8BE2\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (id: any) => any;\n /** \u8BE6\u60C5\u67E5\u8BE2\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u8BE6\u60C5\u67E5\u8BE2\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (result: any) => any;\n };\n /** \u5BFC\u5165\u62E6\u622A\u5668 */\n importData?: {\n /** \u5BFC\u5165\u8BF7\u6C42\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u53C2\u6570\u8FDB\u884C\u5904\u7406 */\n request?: (list: T[]) => any;\n /** \u5BFC\u5165\u54CD\u5E94\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u7ED3\u679C\u8FDB\u884C\u5904\u7406 */\n response?: (result: any) => any;\n /** \u5BFC\u5165\u6821\u9A8C\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u6570\u636E\u8FDB\u884C\u6821\u9A8C */\n checkImportExecl?: (list: T[]) => ImportErrorType[];\n /** \u5BFC\u5165\u6821\u9A8C\u63D0\u793A\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u6821\u9A8C\u63D0\u793A\u8FDB\u884C\u5904\u7406 */\n showCheckErrorTips?: (errorMessageList: ImportErrorType[]) => void;\n /** \u5BFC\u5165\u63D0\u4EA4\u62E6\u622A\u5668\uFF0C\u7528\u4E8E\u5BF9\u5BFC\u5165\u6570\u636E\u8FDB\u884C\u63D0\u4EA4 */\n submitImportListData?: (list: T[]) => Promise<{ success: boolean; data?: K | null; error?: AxiosError | null }>;\n };\n };\n\n /** \u8868\u683C\u5217\u914D\u7F6E */\n columns: ProColumns<T>[];\n /** \u8868\u683C\u5176\u4ED6\u914D\u7F6E */\n tableProps?: Partial<ProTableProps<T, any>> & {\n extraTableButtonList?: {\n /** \u6309\u94AE\u4F4D\u7F6E */\n position: 'start' | 'end' | number;\n /** \u6309\u94AE\u8282\u70B9 */\n label: any;\n icon?: React.ReactNode;\n /** \u6309\u94AE\u6743\u9650 */\n auth?: string | boolean;\n }[];\n /** \u6839\u636Ekey\u66FF\u6362\u8868\u683C\u6309\u94AE */\n replaceTableButtonItems?: {\n /** \u6309\u94AEkey */\n key: string;\n /** \u6309\u94AE\u8282\u70B9 */\n label: any;\n /** \u6309\u94AE\u6743\u9650 */\n auth?: string | boolean;\n }[];\n }\n\n /** \u64CD\u4F5C\u5217\u914D\u7F6E\uFF08\u8868\u683C\u64CD\u4F5C\u5217\u914D\u7F6E\u3001\u64CD\u4F5C\u5217\u4E0B\u62C9\u6309\u94AE\u914D\u7F6E\uFF09 */\n actionColumnConfig?: {\n /** \u8868\u683C\u64CD\u4F5C\u5217\u914D\u7F6E */\n columnConfig?: ProColumns<T>;\n /** \u4E0B\u62C9\u5217\u8868\u5C5E\u6027 */\n getDropdownButtonProps?: (record: T) => Partial<DropdownButtonProps>;\n };\n\n /** \u65B0\u589E\u8868\u5355\u914D\u7F6E */\n createConfig?: {\n /** \u81EA\u5B9A\u4E49\u521B\u5EFA\u8868\u5355\u7EC4\u4EF6 */\n Component?: React.ComponentType<\n {\n open?: boolean;\n onOpenChange?: (visible: boolean) => void;\n onSubmit?: (values: any) => Promise<boolean | void>;\n loading?: boolean;\n } & C\n >;\n /** \u4F20\u9012\u7ED9CreateFormComponent\u7684\u989D\u5916props */\n props?: C;\n };\n\n /** \u7F16\u8F91\u8868\u5355\u914D\u7F6E */\n updateConfig?: {\n /** \u81EA\u5B9A\u4E49\u7F16\u8F91\u8868\u5355\u7EC4\u4EF6 */\n Component?: React.ComponentType<\n {\n updateDrawerRef: React.MutableRefObject<RefDrawerFormRefType | undefined>;\n values: Partial<T> | null;\n onSubmit: (values: any) => Promise<boolean | void>;\n } & U\n >;\n /** \u4F20\u9012\u7ED9UpdateFormComponent\u7684\u989D\u5916props */\n props?: U;\n };\n \n /** \u4E0B\u8F7D\u6A21\u677F\u53C2\u6570 */\n downloadTemplate?: {\n /** \u6A21\u677F\u7C7B\u578B\u7F16\u53F7\uFF0C\u5B57\u5178\u4E2D\u7684 TemplateCenterTemplateType */\n templateTypeCode?: string;\n /** \u6A21\u5757\u7F16\u53F7\uFF0C\u83DC\u5355\u4E2D\u7684\u76EE\u5F55\u7F16\u53F7 */\n moduleCode?: string;\n };\n\n /** \u81EA\u5B9A\u4E49\u65B0\u589E\u51FD\u6570 */\n onAdd?: () => void;\n /** \u81EA\u5B9A\u4E49\u7F16\u8F91\u51FD\u6570 */\n onEdit?: (record: T) => void;\n /** \u81EA\u5B9A\u4E49\u5220\u9664\u51FD\u6570 */\n onDelete?: (keys: React.Key[]) => void;\n /** \u81EA\u5B9A\u4E49\u67E5\u770B\u51FD\u6570 */\n onView?: (record: T) => void;\n /** \u81EA\u5B9A\u4E49\u64CD\u4F5C\u65E5\u5FD7\u51FD\u6570 */\n onActionLog?: (record: T) => void;\n\n /** \u67E5\u8BE2\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterSearch?: (result: API.Result_TableListType<T[]>) => Promise<any> | void;\n /** \u7F16\u8F91\u524D\u56DE\u8C03\u51FD\u6570\uFF0C\u5982\u679C\u51FD\u6570\u6CA1\u6709\u8FD4\u56DET\uFF0C\u5219\u4E0D\u8FDB\u884C\u7F16\u8F91 */\n onBeforeEdit?: (record: T) => Promise<T | null>;\n /** \u5220\u9664\u524D\u56DE\u8C03\u51FD\u6570\uFF0C\u5982\u679C\u51FD\u6570\u6CA1\u6709\u8FD4\u56DEtrue\uFF0C\u5219\u4E0D\u8FDB\u884C\u64CD\u4F5C */\n onBeforeDelete?: (keys: React.Key[]) => Promise<boolean> | boolean | void;\n /** \u5220\u9664\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterDelete?: (keys: React.Key[], result: boolean) => Promise<boolean> | boolean | void;\n /** \u64CD\u4F5C\u524D\u56DE\u8C03\u51FD\u6570\uFF0C\u5982\u679C\u51FD\u6570\u6CA1\u6709\u8FD4\u56DEtrue\uFF0C\u5219\u4E0D\u8FDB\u884C\u64CD\u4F5C */\n onBeforeAction?: (method: API.MethodTypes, fields: any) => Promise<boolean> | boolean | void;\n /** \u64CD\u4F5C\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterAction?: (method: API.MethodTypes, success: boolean) => void;\n /** \u5BFC\u5165\u540E\u56DE\u8C03\u51FD\u6570 */\n onAfterImport?: (result: { success: boolean; data?: K | null; error?: AxiosError | null }) => Promise<any> | void;\n}\n\nexport interface CrudTableRefType<T = any> {\n actionRef: React.MutableRefObject<ActionType | undefined>;\n updateDrawerRef: React.MutableRefObject<RefDrawerFormRefType | undefined>;\n tableList: T[];\n setTableList: (row: T[]) => void;\n viewRow: T | undefined;\n setViewRow: (row: T | undefined) => void;\n actionLogRow: T | undefined;\n setActionLogRow: (row: T | undefined) => void;\n editRow: Partial<T> | null;\n setEditRow: (row: Partial<T> | null) => void;\n selectedRows: T[];\n setSelectedRows: (rows: T[]) => void;\n selectedRowKeys: React.Key[];\n setSelectedRowKeys: (keys: React.Key[]) => void;\n createModalOpen: boolean;\n setCreateModalOpen: (open: boolean) => void;\n editLangModalOpen: boolean;\n setEditLangModalOpen: (open: boolean) => void;\n currentLangInfo?: LangInfoItem;\n setCurrentLangInfo: (open: LangInfoItem) => void;\n onDelete: (keys: React.Key[]) => void;\n updateModalOpen: () => void;\n updateModalClose: () => void;\n}\n";
|