@cfmm/umi-plugins-ui-v2 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/cjs/components/CrudTable.tpl +224 -18
  2. package/dist/cjs/locales/en-US.d.ts +3 -0
  3. package/dist/cjs/locales/enUS/common.d.ts +3 -0
  4. package/dist/cjs/locales/enUS/common.js +3 -0
  5. package/dist/cjs/locales/enUS/index.d.ts +3 -0
  6. package/dist/cjs/locales/th-TH.d.ts +3 -0
  7. package/dist/cjs/locales/zh-CN.d.ts +3 -0
  8. package/dist/cjs/locales/zh-TW.d.ts +3 -0
  9. package/dist/cjs/locales/zhCN/common.d.ts +3 -0
  10. package/dist/cjs/locales/zhCN/common.js +3 -0
  11. package/dist/cjs/locales/zhCN/index.d.ts +3 -0
  12. package/dist/cjs/locales/zhTW/common.d.ts +3 -0
  13. package/dist/cjs/locales/zhTW/common.js +3 -0
  14. package/dist/cjs/locales/zhTW/index.d.ts +3 -0
  15. package/dist/cjs/types/CrudTableTypes.d.ts +1 -1
  16. package/dist/cjs/types/CrudTableTypes.js +1 -1
  17. package/dist/cjs/utils/excelHelper.tpl +44 -36
  18. package/dist/esm/components/CrudTable.tpl +224 -18
  19. package/dist/esm/locales/en-US.d.ts +3 -0
  20. package/dist/esm/locales/enUS/common.d.ts +3 -0
  21. package/dist/esm/locales/enUS/common.js +3 -0
  22. package/dist/esm/locales/enUS/index.d.ts +3 -0
  23. package/dist/esm/locales/th-TH.d.ts +3 -0
  24. package/dist/esm/locales/zh-CN.d.ts +3 -0
  25. package/dist/esm/locales/zh-TW.d.ts +3 -0
  26. package/dist/esm/locales/zhCN/common.d.ts +3 -0
  27. package/dist/esm/locales/zhCN/common.js +3 -0
  28. package/dist/esm/locales/zhCN/index.d.ts +3 -0
  29. package/dist/esm/locales/zhTW/common.d.ts +3 -0
  30. package/dist/esm/locales/zhTW/common.js +3 -0
  31. package/dist/esm/locales/zhTW/index.d.ts +3 -0
  32. package/dist/esm/types/CrudTableTypes.d.ts +1 -1
  33. package/dist/esm/types/CrudTableTypes.js +1 -1
  34. package/dist/esm/utils/excelHelper.tpl +44 -36
  35. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
- import { CloudDownloadOutlined, PlusOutlined, UploadOutlined } from '@ant-design/icons';
2
- import { ActionType, ProColumns, ProTable } from '@ant-design/pro-components';
3
- import { cfmmUtils, ImportExecl, useIntl } from '@umijs/max';
4
- import { Button, Dropdown, MenuProps, Modal } from 'antd';
1
+ import { CloudDownloadOutlined, DownloadOutlined, PlusOutlined, UploadOutlined } from '@ant-design/icons';
2
+ import { ActionType, ColumnsState, ProColumns, ProTable } from '@ant-design/pro-components';
3
+ import { cfmmUtils, ImportExecl, useFormatLocale, useIntl, useModel } from '@umijs/max';
4
+ import { Button, 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';
@@ -14,9 +14,9 @@ import DropdownButton from './DropdownButton';
14
14
  import EditMultiLangForm from './EditMultiLangForm';
15
15
  import MyFooterToolbar from './MyFooterToolbar';
16
16
  import ViewTableItemDrawer from './ViewTableItemDrawer';
17
- import { genExcelAdvanced } from '../utils/excelHelper';
17
+ import { genExcel, genExcelAdvanced, getExportColumns, getExportValueForColumns } from '../utils/excelHelper';
18
18
  import { importMultiLangList, queryLangInfoExprotList } from '../services';
19
- import { handleImportList } from '../utils/importHelper';
19
+ import { handleImportList, showCheckErrorTips } from '../utils/importHelper';
20
20
 
21
21
  const { confirm } = Modal;
22
22
  export const TABLE_SCROLL = { x: 'max-content' };
@@ -38,6 +38,9 @@ const generateDefaultAuthCodes = (localCode: string | undefined) => {
38
38
  remove: `${baseCode}_remove`,
39
39
  record: `${baseCode}_record`,
40
40
  lang: `${baseCode}_lang`,
41
+ templateDownload: `${baseCode}_templateDownload`,
42
+ import: `${baseCode}_import`,
43
+ exprot: `${baseCode}_exprot`,
41
44
  };
42
45
  };
43
46
 
@@ -58,6 +61,7 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
58
61
  createConfig = {},
59
62
  updateConfig = {},
60
63
  actionColumnConfig = {} as CrudTableConfig['actionColumnConfig'],
64
+ downloadTemplate = {},
61
65
  onAdd,
62
66
  onAfterSearch,
63
67
  onBeforeEdit,
@@ -65,6 +69,7 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
65
69
  onAfterDelete,
66
70
  onBeforeAction,
67
71
  onAfterAction,
72
+ onAfterImport,
68
73
  } = props;
69
74
 
70
75
  const defaultAuthCodes = {
@@ -74,8 +79,13 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
74
79
 
75
80
  const { formatMessage } = useIntl();
76
81
  const { getAuthorityFn } = useAuthority();
82
+ const {
83
+ templateDownloadModalOpenChange,
84
+ handleTemplateDownloadModalSearchParamsChange,
85
+ } = window.__POWERED_BY_QIANKUN__ ? useModel('@@qiankunStateFromMaster') : useModel('global');
77
86
  const actionRef = useRef<ActionType>();
78
87
  const updateDrawerRef = useRef<RefDrawerFormRefType>();
88
+ const timer = useRef<NodeJS.Timeout>();
79
89
 
80
90
  // 状态管理
81
91
  const [tableList, setTableList] = useState<T[]>([]);
@@ -90,9 +100,18 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
90
100
  const [editLangModalOpen, setEditLangModalOpen] = useState<boolean>(false);
91
101
  const [currentLangInfo, setCurrentLangInfo] = useState<LangInfoItem | undefined>();
92
102
 
103
+ // 导出execl
104
+ const [loading, setLoading] = useState<boolean>(false);
105
+ const [percent, setPercent] = useState<number>(0);
106
+ const [downloadButtonLoading, setDownloadButtonLoading] = useState<boolean>(false);
107
+ const [columnsStateMap, setColumnsStateMap] = useState<Record<string, ColumnsState>>({});
108
+ // 用于导出查询,不能使用formRef,会造成与表格数据不一致
109
+ const [tableSearchParams, setTableSearchParams] = useState<any>({});
110
+
93
111
  // Hooks
94
112
  const { queryList } = useQueryTableList(baseLocalCode ? { baseLocalCode, baseLocalName } : undefined);
95
113
  const { doAction, loading: actionLoading } = useAction(baseLocalCode ? { baseLocalCode, baseLocalName } : undefined);
114
+ const { getLocalDate } = useFormatLocale();
96
115
 
97
116
  /**
98
117
  * 处理多语言字段点击
@@ -114,9 +133,9 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
114
133
  });
115
134
 
116
135
  const queryMultiLangData = useMemoizedFn(async (tableName: string, columnName: string): Promise<ExprotMultiLangListItem[]> => {
117
- if(!multiLang) return [];
136
+ if (!multiLang) return [];
118
137
 
119
- if(multiLang.multiLangList) {
138
+ if (multiLang.multiLangList) {
120
139
  return multiLang.multiLangList;
121
140
  }
122
141
 
@@ -135,7 +154,7 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
135
154
  });
136
155
 
137
156
  const handleExportMultiLang = useMemoizedFn(async () => {
138
- if(multiLang?.exportMultiLangData) {
157
+ if (multiLang?.exportMultiLangData) {
139
158
  return await multiLang.exportMultiLangData();
140
159
  }
141
160
 
@@ -150,8 +169,8 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
150
169
 
151
170
  const { tableName, columnName } = multiLang.fields[0];
152
171
  const data = await queryMultiLangData(tableName, columnName);
153
-
154
- if(!data.length) return;
172
+
173
+ if (!data.length) return;
155
174
 
156
175
  const handleData = data.map(item => [item.dataId, item.columnValue, item.zh_CN, item.zh_TW, item.en_US, item.th_TH]);
157
176
 
@@ -174,14 +193,14 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
174
193
 
175
194
  // 导入多语言数据
176
195
  const importMultiLang = useMemoizedFn(async (list: any[]) => {
177
- if(!multiLang?.fields) return;
196
+ if (!multiLang?.fields) return;
178
197
 
179
198
  const { tableName, columnName } = multiLang.fields[0];
180
199
 
181
- if(multiLang.importMultiLangData) {
200
+ if (multiLang.importMultiLangData) {
182
201
  return await multiLang.importMultiLangData(list, tableName, columnName);
183
202
  }
184
-
203
+
185
204
  // 处理导入数据,正确赋值字段以及转格式
186
205
  const newList = handleImportList<ExprotMultiLangListItem>(list, { needHandleUnderline: false });
187
206
 
@@ -192,7 +211,7 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
192
211
  // return Promise.resolve({ success: false });
193
212
  // }
194
213
 
195
- const result = await doAction('IMPORT', {
214
+ const result = await doAction('IMPORT', {
196
215
  tableName: tableName,
197
216
  columnName: columnName,
198
217
  i18nDataList: newList.filter(item => item.en_US || item.zh_CN || item.zh_TW || item.th_TH),
@@ -207,6 +226,42 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
207
226
  return result;
208
227
  });
209
228
 
229
+ /**
230
+ * 查询导出数据
231
+ * @param params
232
+ * @returns
233
+ */
234
+ const handleSearchAll = async () => {
235
+ if (loading) return { success: false } as API.Result_TableListType<T>;
236
+
237
+ // 请求前拦截器
238
+ let processedParams = { ...tableSearchParams };
239
+ if (interceptors.query?.request) {
240
+ processedParams = interceptors.query.request(processedParams);
241
+ }
242
+
243
+ setLoading(true);
244
+ const result = await queryList<T[]>(tableSearchParams, {
245
+ queryFn: apis.query,
246
+ });
247
+ setLoading(false);
248
+
249
+ if (!result.success && result.error?.response?.status === 504) {
250
+ message.error(
251
+ formatMessage({ id: 'pages.File.export.timeOut.help', defaultMessage: '数据量过大,请联系工作人员帮助导出' }),
252
+ );
253
+ }
254
+
255
+ // 请求后拦截器
256
+ let processedResult = result;
257
+ if (interceptors.query?.response) {
258
+ processedResult = interceptors.query.response(result);
259
+ }
260
+
261
+ setTableList(processedResult.data);
262
+ return processedResult;
263
+ };
264
+
210
265
  /**
211
266
  * 查询表格数据
212
267
  */
@@ -338,6 +393,118 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
338
393
  });
339
394
  });
340
395
 
396
+ // 将导入的列表数据提交给后端
397
+ const submitListData = async (list: T[]) => {
398
+ return await doAction('IMPORT', list, {
399
+ actionFn: apis.importData,
400
+ showMsg: false,
401
+ });
402
+ };
403
+
404
+ // 导入物料
405
+ const importListData = useMemoizedFn(async (list: T[]) => {
406
+ if(!apis.importData && !interceptors.importData?.submitImportListData) return;
407
+
408
+ // 处理导入数据,正确赋值字段以及转格式
409
+ const newList = interceptors.importData?.request?.(list) ?? handleImportList<T>(list);
410
+
411
+ // 导入校验提示
412
+ const errorMessageList = interceptors.importData?.checkImportExecl?.(newList) || [];
413
+
414
+ if (errorMessageList.length) {
415
+ interceptors.importData?.showCheckErrorTips?.(errorMessageList) || showCheckErrorTips(errorMessageList);
416
+ return Promise.resolve({ success: false });
417
+ }
418
+
419
+ const resutl = await interceptors.importData?.submitImportListData?.(newList) || await submitListData(newList);
420
+
421
+ onAfterImport?.(resutl);
422
+
423
+ if (resutl.success) {
424
+ actionRef.current?.reload();
425
+ }
426
+ return resutl;
427
+ });
428
+
429
+ const handlePercentChange = (value: number) => {
430
+ setPercent(value);
431
+ };
432
+
433
+ /**
434
+ * 下载数据为Excel
435
+ */
436
+ const handleDownloadExcel = async () => {
437
+ const result = await handleSearchAll();
438
+ if (!result.success || result.error || !result.data) {
439
+ return;
440
+ }
441
+
442
+ const MAX_DOWNLOAD = cfmmUtils?.MAX_DOWNLOAD || 65536;
443
+
444
+ setDownloadButtonLoading(true);
445
+
446
+ const exportColums = getExportColumns<T>({ columns, columnsStateMap });
447
+
448
+ //固定列名
449
+ let columnsName: any[] = exportColums.map((item) => item.title).filter(Boolean);
450
+ //文件名根据多语言形成
451
+ const fileName = formatMessage({
452
+ id: `${baseLocalCode}.title`,
453
+ defaultMessage: '数据列表',
454
+ });
455
+
456
+ //创建导出Excel
457
+ genExcel(fileName + '.xlsx', 'sheet1', columnsName, function () {
458
+ //生成数据
459
+ return new Promise((resolve) => {
460
+ //所有数据行
461
+ getExportValueForColumns({
462
+ columns: exportColums,
463
+ data: result.data,
464
+ getLocalDate,
465
+ handlePercentChange,
466
+ })
467
+ .then((allRows) => {
468
+ if (allRows.length > MAX_DOWNLOAD) {
469
+ Modal.warning({
470
+ title: formatMessage({ id: 'common.download.exceed.max.title', defaultMessage: `下载数据过大提醒` }),
471
+ content: formatMessage(
472
+ {
473
+ id: 'common.download.exceed.max.tips',
474
+ defaultMessage: `超出最大下载数据 ${MAX_DOWNLOAD} 条,超出部分请重新下载`,
475
+ },
476
+ {
477
+ count: MAX_DOWNLOAD,
478
+ },
479
+ ),
480
+ onOk: () => resolve(allRows.slice(0, MAX_DOWNLOAD)),
481
+ });
482
+ } else {
483
+ resolve(allRows);
484
+ }
485
+ })
486
+ .catch((err) => console.log('err', err))
487
+ .finally(() => {
488
+ timer.current = setTimeout(() => {
489
+ setDownloadButtonLoading(false);
490
+ setPercent(0);
491
+ }, 2000);
492
+ });
493
+ });
494
+ });
495
+ };
496
+
497
+ /**
498
+ * 下载模板
499
+ */
500
+ const handleDownloadTemplate = () => {
501
+ handleTemplateDownloadModalSearchParamsChange({
502
+ templateTypeCode: downloadTemplate.templateTypeCode,
503
+ moduleCode: downloadTemplate.moduleCode,
504
+ });
505
+ templateDownloadModalOpenChange(true);
506
+ };
507
+
341
508
  /**
342
509
  * 增强的列配置(添加操作列)
343
510
  */
@@ -489,16 +656,48 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
489
656
  </ImportExecl>
490
657
  ),
491
658
  },
659
+ {
660
+ auth: getAuthorityFn(defaultAuthCodes.templateDownload),
661
+ key: 'templateDownload',
662
+ label: (
663
+ <a onClick={handleDownloadTemplate} key="templateDownload">
664
+ <DownloadOutlined style={{ marginRight: 6 }} />
665
+ {formatMessage({ id: 'cfmmUI.common.button.importData', defaultMessage: '下载模板' })}
666
+ </a>
667
+ ),
668
+ },
669
+ {
670
+ auth: getAuthorityFn(defaultAuthCodes.import) && (apis.importData || interceptors.importData?.submitImportListData),
671
+ key: 'import',
672
+ label: (
673
+ <ImportExecl key="importMaterial" rangeStart={{ c: 0, r: 2 }} onChange={importListData}>
674
+ <div style={{ color: !actionLoading ? 'rgba(0, 0, 0, 0.88)' : 'rgba(0, 0, 0, 0.25)' }}>
675
+ <UploadOutlined style={{ marginRight: 8 }} />
676
+ {formatMessage({ id: 'cfmmUI.common.button.importData', defaultMessage: '导入数据' })}
677
+ </div>
678
+ </ImportExecl>
679
+ ),
680
+ },
681
+ {
682
+ auth: getAuthorityFn(defaultAuthCodes.exprot),
683
+ key: 'exprot',
684
+ disabled: !tableList.length || loading,
685
+ label: <a onClick={handleDownloadExcel} key="exprot">
686
+ <CloudDownloadOutlined style={{ marginRight: 6 }} />
687
+ {formatMessage({ id: 'cfmmUI.common.button.exprotData', defaultMessage: '导出数据' })}
688
+ </a>
689
+ },
492
690
  ];
493
691
 
494
692
  // 过滤有权限的按钮,并移除 auth 属性避免传递到 DOM
495
693
  return allButtons
496
694
  .filter((button) => button.auth)
497
695
  .map(({ auth, ...rest }) => rest);
498
- }, []);
696
+ }, [tableList, loading, columnsStateMap]);
499
697
 
500
698
  return (
501
699
  <>
700
+ {downloadButtonLoading ? <Progress percent={percent} size="small" /> : null}
502
701
  <ProTable<T>
503
702
  headerTitle={formatMessage({
504
703
  id: `${baseLocalCode}.title`,
@@ -510,9 +709,9 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
510
709
  search={cfmmUtils?.getTableSearchFormLayout()}
511
710
  scroll={cfmmUtils?.TABLE_SCROLL ?? TABLE_SCROLL}
512
711
  toolBarRender={useMemoizedFn(() => {
513
- if(!getBarButtons?.length) return [];
712
+ if (!getBarButtons?.length) return [];
514
713
  return [
515
- <Dropdown.Button type="primary" loading={actionLoading} menu={{ items: getBarButtons.slice(1) }}>
714
+ <Dropdown.Button type="primary" loading={actionLoading || downloadButtonLoading} menu={{ items: getBarButtons.slice(1) }}>
516
715
  {getBarButtons[0].icon}
517
716
  {getBarButtons[0].label}
518
717
  </Dropdown.Button>
@@ -520,10 +719,17 @@ function CrudTable<T extends Record<string, any>, U = {}, C = {}>(
520
719
  })}
521
720
  request={useMemoizedFn(async (params, sorter) => {
522
721
  const { current, pageIndex = params.current, pageSize, ...otherParams } = params;
722
+
723
+ setTableSearchParams({ ...otherParams, orderBy: { ...sorter } });
724
+
523
725
  const result = await handleSearch({ pageIndex, pageSize, orderBy: { ...sorter }, ...otherParams });
524
726
  return result;
525
727
  })}
526
728
  columns={enhancedColumns}
729
+ columnsState={{
730
+ value: columnsStateMap,
731
+ onChange: setColumnsStateMap,
732
+ }}
527
733
  rowSelection={useMemo(
528
734
  () => ({
529
735
  onChange: (selectedRowKeys, selectedRows) => {
@@ -111,6 +111,9 @@ declare const _default: {
111
111
  'cfmmUI.common.button.back': string;
112
112
  'cfmmUI.common.button.exportMultiLang': string;
113
113
  'cfmmUI.common.button.importMultiLang': string;
114
+ "cfmmUI.common.button.templateDownload": string;
115
+ "cfmmUI.common.button.importData": string;
116
+ "cfmmUI.common.button.exportData": string;
114
117
  'cfmmUI.common.button.exportMultiLang.notice': string;
115
118
  'cfmmUI.action.create.waitingMessage': string;
116
119
  'cfmmUI.action.update.waitingMessage': string;
@@ -22,6 +22,9 @@ declare const _default: {
22
22
  'cfmmUI.common.button.back': string;
23
23
  'cfmmUI.common.button.exportMultiLang': string;
24
24
  'cfmmUI.common.button.importMultiLang': string;
25
+ "cfmmUI.common.button.templateDownload": string;
26
+ "cfmmUI.common.button.importData": string;
27
+ "cfmmUI.common.button.exportData": string;
25
28
  'cfmmUI.common.button.exportMultiLang.notice': string;
26
29
  'cfmmUI.action.create.waitingMessage': string;
27
30
  'cfmmUI.action.update.waitingMessage': string;
@@ -30,6 +30,9 @@ var _default = exports.default = {
30
30
  'cfmmUI.common.button.back': 'Back',
31
31
  'cfmmUI.common.button.exportMultiLang': 'Export Multi Language',
32
32
  'cfmmUI.common.button.importMultiLang': 'Import Multi Language',
33
+ "cfmmUI.common.button.templateDownload": "Template Download",
34
+ "cfmmUI.common.button.importData": "Import Data",
35
+ "cfmmUI.common.button.exportData": "Export Data",
33
36
  'cfmmUI.common.button.exportMultiLang.notice': 'Please do not modify the table structure',
34
37
  //操作提示
35
38
  'cfmmUI.action.create.waitingMessage': 'Being Added',
@@ -111,6 +111,9 @@ declare const _default: {
111
111
  'cfmmUI.common.button.back': string;
112
112
  'cfmmUI.common.button.exportMultiLang': string;
113
113
  'cfmmUI.common.button.importMultiLang': string;
114
+ "cfmmUI.common.button.templateDownload": string;
115
+ "cfmmUI.common.button.importData": string;
116
+ "cfmmUI.common.button.exportData": string;
114
117
  'cfmmUI.common.button.exportMultiLang.notice': string;
115
118
  'cfmmUI.action.create.waitingMessage': string;
116
119
  'cfmmUI.action.update.waitingMessage': string;
@@ -111,6 +111,9 @@ declare const _default: {
111
111
  'cfmmUI.common.button.back': string;
112
112
  'cfmmUI.common.button.exportMultiLang': string;
113
113
  'cfmmUI.common.button.importMultiLang': string;
114
+ "cfmmUI.common.button.templateDownload": string;
115
+ "cfmmUI.common.button.importData": string;
116
+ "cfmmUI.common.button.exportData": string;
114
117
  'cfmmUI.common.button.exportMultiLang.notice': string;
115
118
  'cfmmUI.action.create.waitingMessage': string;
116
119
  'cfmmUI.action.update.waitingMessage': string;
@@ -111,6 +111,9 @@ declare const _default: {
111
111
  "cfmmUI.common.button.back": string;
112
112
  "cfmmUI.common.button.exportMultiLang": string;
113
113
  "cfmmUI.common.button.importMultiLang": string;
114
+ "cfmmUI.common.button.templateDownload": string;
115
+ "cfmmUI.common.button.importData": string;
116
+ "cfmmUI.common.button.exportData": string;
114
117
  "cfmmUI.common.button.exportMultiLang.notice": string;
115
118
  "cfmmUI.action.create.waitingMessage": string;
116
119
  "cfmmUI.action.update.waitingMessage": string;
@@ -110,6 +110,9 @@ declare const _default: {
110
110
  "cfmmUI.common.button.back": string;
111
111
  "cfmmUI.common.button.exportMultiLang": string;
112
112
  "cfmmUI.common.button.importMultiLang": string;
113
+ "cfmmUI.common.button.templateDownload": string;
114
+ "cfmmUI.common.button.importData": string;
115
+ "cfmmUI.common.button.exportData": string;
113
116
  "cfmmUI.common.button.exportMultiLang.notice": string;
114
117
  "cfmmUI.action.create.waitingMessage": string;
115
118
  "cfmmUI.action.update.waitingMessage": string;
@@ -22,6 +22,9 @@ declare const _default: {
22
22
  "cfmmUI.common.button.back": string;
23
23
  "cfmmUI.common.button.exportMultiLang": string;
24
24
  "cfmmUI.common.button.importMultiLang": string;
25
+ "cfmmUI.common.button.templateDownload": string;
26
+ "cfmmUI.common.button.importData": string;
27
+ "cfmmUI.common.button.exportData": string;
25
28
  "cfmmUI.common.button.exportMultiLang.notice": string;
26
29
  "cfmmUI.action.create.waitingMessage": string;
27
30
  "cfmmUI.action.update.waitingMessage": string;
@@ -30,6 +30,9 @@ var _default = exports.default = {
30
30
  "cfmmUI.common.button.back": "返回",
31
31
  "cfmmUI.common.button.exportMultiLang": "导出多语言",
32
32
  "cfmmUI.common.button.importMultiLang": "导入多语言",
33
+ "cfmmUI.common.button.templateDownload": "模板下载",
34
+ "cfmmUI.common.button.importData": "导入数据",
35
+ "cfmmUI.common.button.exportData": "导出数据",
33
36
  "cfmmUI.common.button.exportMultiLang.notice": "请勿修改表格结构",
34
37
  //操作提示
35
38
  "cfmmUI.action.create.waitingMessage": "正在新增",
@@ -111,6 +111,9 @@ declare const _default: {
111
111
  "cfmmUI.common.button.back": string;
112
112
  "cfmmUI.common.button.exportMultiLang": string;
113
113
  "cfmmUI.common.button.importMultiLang": string;
114
+ "cfmmUI.common.button.templateDownload": string;
115
+ "cfmmUI.common.button.importData": string;
116
+ "cfmmUI.common.button.exportData": string;
114
117
  "cfmmUI.common.button.exportMultiLang.notice": string;
115
118
  "cfmmUI.action.create.waitingMessage": string;
116
119
  "cfmmUI.action.update.waitingMessage": string;
@@ -22,6 +22,9 @@ declare const _default: {
22
22
  "cfmmUI.common.button.back": string;
23
23
  "cfmmUI.common.button.exportMultiLang": string;
24
24
  "cfmmUI.common.button.importMultiLang": string;
25
+ "cfmmUI.common.button.templateDownload": string;
26
+ "cfmmUI.common.button.importData": string;
27
+ "cfmmUI.common.button.exportData": string;
25
28
  "cfmmUI.common.button.exportMultiLang.notice": string;
26
29
  "cfmmUI.action.create.waitingMessage": string;
27
30
  "cfmmUI.action.update.waitingMessage": string;
@@ -30,6 +30,9 @@ var _default = exports.default = {
30
30
  "cfmmUI.common.button.back": "返回",
31
31
  "cfmmUI.common.button.exportMultiLang": "導出多語言",
32
32
  "cfmmUI.common.button.importMultiLang": "導入多語言",
33
+ "cfmmUI.common.button.templateDownload": "模板下載",
34
+ "cfmmUI.common.button.importData": "導入數據",
35
+ "cfmmUI.common.button.exportData": "導出數據",
33
36
  "cfmmUI.common.button.exportMultiLang.notice": "請勿修改表格結構",
34
37
  //操作提示
35
38
  "cfmmUI.action.create.waitingMessage": "正在新增",
@@ -110,6 +110,9 @@ declare const _default: {
110
110
  "cfmmUI.common.button.back": string;
111
111
  "cfmmUI.common.button.exportMultiLang": string;
112
112
  "cfmmUI.common.button.importMultiLang": string;
113
+ "cfmmUI.common.button.templateDownload": string;
114
+ "cfmmUI.common.button.importData": string;
115
+ "cfmmUI.common.button.exportData": string;
113
116
  "cfmmUI.common.button.exportMultiLang.notice": string;
114
117
  "cfmmUI.action.create.waitingMessage": string;
115
118
  "cfmmUI.action.update.waitingMessage": string;
@@ -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?: ExprotMultiLangListItem[];\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 queryExprotMultiLangData?: (tableName: string, columnName: string) => Promise<ExprotMultiLangListItem[]>;\n /** \u81EA\u5B9A\u4E49\u5BFC\u5165\u591A\u8BED\u8A00\u51FD\u6570 */\n importMultiLangData?: (list: ExprotMultiLangListItem[], 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 };\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 };\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\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 /** \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}\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?: ExprotMultiLangListItem[];\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 queryExprotMultiLangData?: (tableName: string, columnName: string) => Promise<ExprotMultiLangListItem[]>;\n /** \u81EA\u5B9A\u4E49\u5BFC\u5165\u591A\u8BED\u8A00\u51FD\u6570 */\n importMultiLangData?: (list: ExprotMultiLangListItem[], 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\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";
@@ -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?: ExprotMultiLangListItem[];\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 queryExprotMultiLangData?: (tableName: string, columnName: string) => Promise<ExprotMultiLangListItem[]>;\n /** \u81EA\u5B9A\u4E49\u5BFC\u5165\u591A\u8BED\u8A00\u51FD\u6570 */\n importMultiLangData?: (list: ExprotMultiLangListItem[], 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 };\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 };\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\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 /** \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}\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?: ExprotMultiLangListItem[];\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 queryExprotMultiLangData?: (tableName: string, columnName: string) => Promise<ExprotMultiLangListItem[]>;\n /** \u81EA\u5B9A\u4E49\u5BFC\u5165\u591A\u8BED\u8A00\u51FD\u6570 */\n importMultiLangData?: (list: ExprotMultiLangListItem[], 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\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";