@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.
@@ -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 { API, CrudTableConfig, CrudTableRefType, ExportMultiLangListItem, LangInfoItem, RefDrawerFormRefType } from '../types';
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
- const queryMultiLangData = useMemoizedFn(async (tableName: string, columnName: string): Promise<ExportMultiLangListItem[]> => {
137
- if (!multiLang) return [];
149
+ // 查询多语言数据
150
+ const queryMultiLangData = useMemoizedFn(
151
+ async (tableName: string, columnName: string): Promise<ExportMultiLangListItem[]> => {
152
+ if (!multiLang) return [];
138
153
 
139
- if (multiLang.multiLangList) {
140
- return multiLang.multiLangList;
141
- }
154
+ if (multiLang.multiLangList) {
155
+ return multiLang.multiLangList;
156
+ }
142
157
 
143
- if (multiLang.queryExportMultiLangData) {
144
- return await multiLang.queryExportMultiLangData(tableName, columnName);
145
- }
158
+ if (multiLang.queryExportMultiLangData) {
159
+ return await multiLang.queryExportMultiLangData(tableName, columnName);
160
+ }
146
161
 
147
- const result = await doAction('GET', { tableName, columnName }, {
148
- actionFn: queryLangInfoExportList,
149
- });
162
+ const result = await doAction(
163
+ 'GET',
164
+ { tableName, columnName },
165
+ {
166
+ actionFn: queryLangInfoExportList,
167
+ },
168
+ );
150
169
 
151
- if (result.success && result.data) {
152
- return result.data;
153
- }
154
- return [];
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 => [item.dataId, item.columnValue, item.zh_CN, item.zh_TW, item.en_US, item.th_TH]);
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: [formatMessage({ id: 'cfmmUI.common.button.exportMultiLang.notice', defaultMessage: '请勿修改表格结构' })],
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('IMPORT', {
216
- tableName: tableName,
217
- columnName: columnName,
218
- i18nDataList: newList.filter(item => item.en_US || item.zh_CN || item.zh_TW || item.th_TH),
219
- }, {
220
- actionFn: importMultiLangList,
221
- showMsg: false,
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
- * 下载数据为Excel
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 (tableProps.extraTableButtonList?.length) {
639
- tableProps.extraTableButtonList.forEach((v, idx) => {
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: getAuthorityFn(defaultAuthCodes.import) && (apis.importData || interceptors.importData?.submitImportListData),
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: <a onClick={handleDownloadExcel} key="export">
723
- <CloudDownloadOutlined style={{ marginRight: 6 }} />
724
- {formatMessage({ id: 'cfmmUI.common.button.exportData', defaultMessage: '导出数据' })}
725
- </a>
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 type="primary" loading={actionLoading || downloadButtonLoading} menu={{ items: getBarButtons.slice(1) }}>
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 { API, CrudTableConfig, CrudTableRefType, ExportMultiLangListItem, LangInfoItem, RefDrawerFormRefType } from '../types';
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
- const queryMultiLangData = useMemoizedFn(async (tableName: string, columnName: string): Promise<ExportMultiLangListItem[]> => {
137
- if (!multiLang) return [];
149
+ // 查询多语言数据
150
+ const queryMultiLangData = useMemoizedFn(
151
+ async (tableName: string, columnName: string): Promise<ExportMultiLangListItem[]> => {
152
+ if (!multiLang) return [];
138
153
 
139
- if (multiLang.multiLangList) {
140
- return multiLang.multiLangList;
141
- }
154
+ if (multiLang.multiLangList) {
155
+ return multiLang.multiLangList;
156
+ }
142
157
 
143
- if (multiLang.queryExportMultiLangData) {
144
- return await multiLang.queryExportMultiLangData(tableName, columnName);
145
- }
158
+ if (multiLang.queryExportMultiLangData) {
159
+ return await multiLang.queryExportMultiLangData(tableName, columnName);
160
+ }
146
161
 
147
- const result = await doAction('GET', { tableName, columnName }, {
148
- actionFn: queryLangInfoExportList,
149
- });
162
+ const result = await doAction(
163
+ 'GET',
164
+ { tableName, columnName },
165
+ {
166
+ actionFn: queryLangInfoExportList,
167
+ },
168
+ );
150
169
 
151
- if (result.success && result.data) {
152
- return result.data;
153
- }
154
- return [];
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 => [item.dataId, item.columnValue, item.zh_CN, item.zh_TW, item.en_US, item.th_TH]);
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: [formatMessage({ id: 'cfmmUI.common.button.exportMultiLang.notice', defaultMessage: '请勿修改表格结构' })],
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('IMPORT', {
216
- tableName: tableName,
217
- columnName: columnName,
218
- i18nDataList: newList.filter(item => item.en_US || item.zh_CN || item.zh_TW || item.th_TH),
219
- }, {
220
- actionFn: importMultiLangList,
221
- showMsg: false,
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
- * 下载数据为Excel
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 (tableProps.extraTableButtonList?.length) {
639
- tableProps.extraTableButtonList.forEach((v, idx) => {
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: getAuthorityFn(defaultAuthCodes.import) && (apis.importData || interceptors.importData?.submitImportListData),
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: <a onClick={handleDownloadExcel} key="export">
723
- <CloudDownloadOutlined style={{ marginRight: 6 }} />
724
- {formatMessage({ id: 'cfmmUI.common.button.exportData', defaultMessage: '导出数据' })}
725
- </a>
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 type="primary" loading={actionLoading || downloadButtonLoading} menu={{ items: getBarButtons.slice(1) }}>
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";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cfmm/umi-plugins-ui-v2",
3
3
  "author": "ysj <411367308@qq.com>",
4
- "version": "0.0.7",
4
+ "version": "0.0.9",
5
5
  "main": "dist/cjs/index.js",
6
6
  "types": "dist/cjs/index.d.ts",
7
7
  "publishConfig": {