@bit-sun/business-component 4.2.0-alpha.3 → 4.2.0-alpha.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/.fatherrc.ts +1 -1
  2. package/.umirc.ts +13 -9
  3. package/dist/components/Business/AddSelectBusiness/index.d.ts +3 -4
  4. package/dist/components/Business/BsLayouts/Components/AllFunc/drawContent.d.ts +1 -2
  5. package/dist/components/Business/BsLayouts/Components/ChooseStore/index.d.ts +1 -2
  6. package/dist/components/Business/BsLayouts/Components/CustomerMenu/MenuSetting/index.d.ts +1 -1
  7. package/dist/components/Business/BsLayouts/Components/CustomerMenu/MenuSetting/leftTree.d.ts +1 -1
  8. package/dist/components/Business/BsLayouts/Components/CustomerMenu/MenuSetting/rightTree.d.ts +2 -2
  9. package/dist/components/Business/BsLayouts/Components/CustomerMenu/globalMenu/DrawContent.d.ts +1 -2
  10. package/dist/components/Business/BsLayouts/Components/CustomerMenu/globalMenu/customMenuHeader.d.ts +1 -2
  11. package/dist/components/Business/BsLayouts/Components/CustomerMenu/index.d.ts +1 -1
  12. package/dist/components/Business/BsLayouts/Components/GlobalHeader/index.d.ts +1 -2
  13. package/dist/components/Business/BsLayouts/Components/RightContent/LoginModal.d.ts +1 -2
  14. package/dist/components/Business/BsLayouts/index.d.ts +1 -1
  15. package/dist/components/Business/BsSulaQueryTable/SearchItemSetting.d.ts +5 -5
  16. package/dist/components/Business/BsSulaQueryTable/index.d.ts +1 -2
  17. package/dist/components/Business/BsSulaQueryTable/setting.d.ts +6 -6
  18. package/dist/components/Business/BsSulaQueryTable/utils.d.ts +14 -15
  19. package/dist/components/Business/CommodityEntry/index.d.ts +1 -2
  20. package/dist/components/Business/CommonAlert/index.d.ts +1 -2
  21. package/dist/components/Business/CommonGuideWrapper/index.d.ts +3 -3
  22. package/dist/components/Business/DetailPageWrapper/index.d.ts +12 -12
  23. package/dist/components/Business/HomePageWrapper/index.d.ts +1 -2
  24. package/dist/components/Business/ImportExport/ExportButton/ModalTitle.d.ts +11 -0
  25. package/dist/components/Business/ImportExport/ExportButton/TemplatePicker.d.ts +13 -0
  26. package/dist/components/Business/ImportExport/ExportButton/index.d.ts +15 -0
  27. package/dist/components/Business/ImportExport/ImportWizard/Preview.d.ts +11 -0
  28. package/dist/components/Business/ImportExport/ImportWizard/index.d.ts +15 -0
  29. package/dist/components/Business/ImportExport/TaskDrawer/index.d.ts +15 -0
  30. package/dist/components/Business/ImportExport/TaskProgress/index.d.ts +15 -0
  31. package/dist/components/Business/ImportExport/businessFunction.d.ts +15 -0
  32. package/dist/components/Business/ImportExport/index.d.ts +14 -0
  33. package/dist/components/Business/ImportExport/sceneCapability.d.ts +20 -0
  34. package/dist/components/Business/ImportExport/services/importExport.d.ts +22 -0
  35. package/dist/components/Business/ImportExport/services/routing.d.ts +8 -0
  36. package/dist/components/Business/ImportExport/types.d.ts +134 -0
  37. package/dist/components/Business/ItemPropertySelector/index.d.ts +1 -2
  38. package/dist/components/Business/JsonQueryTable/components/FieldsModifyModal.d.ts +1 -2
  39. package/dist/components/Business/JsonQueryTable/components/FieldsSettingsTable.d.ts +1 -2
  40. package/dist/components/Business/JsonQueryTable/components/Formula.d.ts +1 -2
  41. package/dist/components/Business/JsonQueryTable/components/MaintainOptions.d.ts +1 -2
  42. package/dist/components/Business/JsonQueryTable/drawer/index.d.ts +1 -2
  43. package/dist/components/Business/PropertyModal/index.d.ts +1 -2
  44. package/dist/components/Business/PropertyModal/propertyGroup.d.ts +1 -1
  45. package/dist/components/Business/SearchSelect/index.d.ts +1 -1
  46. package/dist/components/Business/StateFlow/index.d.ts +1 -2
  47. package/dist/components/Business/SystemLog/index.d.ts +78 -0
  48. package/dist/components/Business/TreeSearchSelect/index.d.ts +1 -1
  49. package/dist/components/Business/TrialCalculation/index.d.ts +15 -0
  50. package/dist/components/Business/columnSettingTable/columnSetting.d.ts +6 -6
  51. package/dist/components/Business/columnSettingTable/components/TableSumComponent.d.ts +1 -2
  52. package/dist/components/Business/columnSettingTable/index.d.ts +3 -3
  53. package/dist/components/Business/columnSettingTable/sulaSettingTable.d.ts +3 -3
  54. package/dist/components/Business/columnSettingTable/utils.d.ts +1 -2
  55. package/dist/components/Business/moreTreeTable/FixedScrollBar.d.ts +1 -1
  56. package/dist/components/Common/ParagraphCopier/index.d.ts +1 -1
  57. package/dist/components/Common/Section/index.d.ts +1 -1
  58. package/dist/components/Functional/AddSelect/index.d.ts +1 -2
  59. package/dist/components/Functional/AuthButton/index.d.ts +1 -2
  60. package/dist/components/Functional/DataImport/index.d.ts +3 -3
  61. package/dist/components/Functional/DataValidation/index.d.ts +5 -5
  62. package/dist/components/Functional/ExportFunctions/ExportIcon/index.d.ts +1 -2
  63. package/dist/components/Functional/QueryMutipleInput/index.d.ts +1 -2
  64. package/dist/components/Functional/QueryMutipleSelect/index.d.ts +1 -2
  65. package/dist/components/Functional/SearchSelect/index.d.ts +1 -1
  66. package/dist/components/Functional/SearchSelect/pagination.d.ts +22 -0
  67. package/dist/components/Functional/SearchSelect/utils.d.ts +2 -3
  68. package/dist/components/Functional/TreeSearchSelect/index.d.ts +1 -2
  69. package/dist/components/Solution/RuleComponent/CustomPlugin/CustomSelector/CustomSelectorModal.d.ts +1 -1
  70. package/dist/components/Solution/RuleComponent/CustomPlugin/CustomSelector/index.d.ts +1 -2
  71. package/dist/components/Solution/RuleComponent/Formula.d.ts +1 -2
  72. package/dist/components/Solution/RuleComponent/InnerSelect.d.ts +1 -2
  73. package/dist/components/Solution/RuleComponent/RenderCompItem.d.ts +1 -2
  74. package/dist/components/Solution/RuleSetter/RuleInstance.d.ts +1 -2
  75. package/dist/components/Solution/RuleSetter/baseRule.d.ts +1 -1
  76. package/dist/components/Solution/RuleSetter/index.d.ts +1 -1
  77. package/dist/index.d.ts +5 -0
  78. package/dist/index.esm.js +5397 -1220
  79. package/dist/index.js +5417 -1213
  80. package/dist/plugin/TableColumnSetting/index.d.ts +5 -5
  81. package/dist/utils/TableUtils.d.ts +18 -19
  82. package/dist/utils/auth.d.ts +4 -0
  83. package/dist/utils/utils.d.ts +41 -0
  84. package/docs/error-record.md +52 -0
  85. package/docs/flow-control-readme.md +283 -0
  86. package/docs/task-records/2026-07-31-import-export-extraction.md +81 -0
  87. package/package.json +1 -1
  88. package/src/components/Business/AddSelectBusiness/index.tsx +3 -2
  89. package/src/components/Business/BsSulaQueryTable/index.md +57 -4
  90. package/src/components/Business/BsSulaQueryTable/index.tsx +174 -10
  91. package/src/components/Business/BsSulaQueryTable/setting.tsx +6 -0
  92. package/src/components/Business/DetailPageWrapper/index.tsx +81 -1
  93. package/src/components/Business/DetailPageWrapper/readme.md +89 -0
  94. package/src/components/Business/ImportExport/ExportButton/ModalTitle.tsx +27 -0
  95. package/src/components/Business/ImportExport/ExportButton/TemplatePicker.tsx +424 -0
  96. package/src/components/Business/ImportExport/ExportButton/index.module.less +382 -0
  97. package/src/components/Business/ImportExport/ExportButton/index.tsx +273 -0
  98. package/src/components/Business/ImportExport/ImportWizard/Preview.tsx +129 -0
  99. package/src/components/Business/ImportExport/ImportWizard/index.module.less +360 -0
  100. package/src/components/Business/ImportExport/ImportWizard/index.tsx +679 -0
  101. package/src/components/Business/ImportExport/TaskDrawer/index.tsx +285 -0
  102. package/src/components/Business/ImportExport/TaskProgress/index.tsx +267 -0
  103. package/src/components/Business/ImportExport/businessFunction.ts +29 -0
  104. package/src/components/Business/ImportExport/index.md +104 -0
  105. package/src/components/Business/ImportExport/index.tsx +208 -0
  106. package/src/components/Business/ImportExport/sceneCapability.ts +28 -0
  107. package/src/components/Business/ImportExport/services/importExport.ts +208 -0
  108. package/src/components/Business/ImportExport/services/routing.ts +21 -0
  109. package/src/components/Business/ImportExport/types.ts +180 -0
  110. package/src/components/Business/SearchSelect/BusinessUtils.tsx +704 -48
  111. package/src/components/Business/SearchSelect/index.md +2 -2
  112. package/src/components/Business/SystemLog/index.md +37 -0
  113. package/src/components/Business/SystemLog/index.tsx +87 -0
  114. package/src/components/Business/TrialCalculation/PathDisplay.less +93 -0
  115. package/src/components/Business/TrialCalculation/PathDisplay_README.md +77 -0
  116. package/src/components/Business/TrialCalculation/index.tsx +322 -0
  117. package/src/components/Business/columnSettingTable/index.tsx +7 -6
  118. package/src/components/Business/columnSettingTable/sulaSettingTable.tsx +23 -22
  119. package/src/components/Functional/AddSelect/index.tsx +95 -1
  120. package/src/components/Functional/DataValidation/index.tsx +31 -9
  121. package/src/components/Functional/QueryMutipleSelect/index.tsx +2 -2
  122. package/src/components/Functional/SearchSelect/index.md +109 -0
  123. package/src/components/Functional/SearchSelect/index.tsx +99 -17
  124. package/src/components/Functional/SearchSelect/pagination.ts +57 -0
  125. package/src/components/Functional/SearchSelect/utils.tsx +28 -18
  126. package/src/components/Functional/TreeSearchSelect/index.tsx +2 -1
  127. package/src/components/Solution/RuleComponent/README.md +187 -0
  128. package/src/components/Solution/RuleComponent/RenderCompItem.tsx +9 -1
  129. package/src/components/Solution/RuleComponent/RenderCompItem_README.md +189 -0
  130. package/src/components/Solution/RuleComponent/RuleField.md +63 -0
  131. package/src/components/Solution/RuleComponent/index.js +237 -8
  132. package/src/components/Solution/RuleComponent/ruleFiled.js +46 -6
  133. package/src/components/Solution/RuleSetter/README.md +97 -0
  134. package/src/index.ts +9 -0
  135. package/src/typings/umi.d.ts +9 -0
  136. package/src/utils/LocalstorageUtils.ts +1 -1
  137. package/src/utils/auth.ts +39 -2
  138. package/src/utils/utils.ts +41 -1
@@ -0,0 +1,424 @@
1
+ import React, {
2
+ useCallback,
3
+ useEffect,
4
+ useMemo,
5
+ useRef,
6
+ useState,
7
+ } from 'react';
8
+ import {
9
+ Alert,
10
+ Button,
11
+ Descriptions,
12
+ Empty,
13
+ Form,
14
+ Modal,
15
+ Radio,
16
+ Select,
17
+ Space,
18
+ Spin,
19
+ Tag,
20
+ message,
21
+ } from 'antd';
22
+ import {
23
+ DownloadOutlined,
24
+ FileExcelOutlined,
25
+ FilterOutlined,
26
+ } from '@ant-design/icons';
27
+ import { getItems } from '../services/importExport';
28
+ import type {
29
+ ImportExportRequestContext,
30
+ ImportExportServices,
31
+ ImportExportTemplate,
32
+ ImportExportTemplateField,
33
+ } from '../types';
34
+ import ModalTitle from './ModalTitle';
35
+ import styles from './index.module.less';
36
+
37
+ interface TemplatePickerProps {
38
+ visible: boolean;
39
+ context: ImportExportRequestContext;
40
+ services: ImportExportServices;
41
+ onCancel: () => void;
42
+ onConfirm: (templateCode: string, fileType: string) => Promise<void>;
43
+ documentName?: string;
44
+ resultCount?: number;
45
+ }
46
+
47
+ const TemplatePicker: React.FC<TemplatePickerProps> = ({
48
+ visible,
49
+ context,
50
+ services,
51
+ onCancel,
52
+ onConfirm,
53
+ documentName,
54
+ resultCount,
55
+ }) => {
56
+ const [items, setItems] = useState<ImportExportTemplate[]>([]);
57
+ const [fields, setFields] = useState<ImportExportTemplateField[]>([]);
58
+ const [templateCode, setTemplateCode] = useState<string>();
59
+ const [loading, setLoading] = useState(false);
60
+ const [fieldLoading, setFieldLoading] = useState(false);
61
+ const [confirming, setConfirming] = useState(false);
62
+ const [downloading, setDownloading] = useState(false);
63
+ const [fileType, setFileType] = useState('XLSX');
64
+ const searchTimer = useRef<number>();
65
+
66
+ const loadTemplates = useCallback(
67
+ async (keyword?: string) => {
68
+ setLoading(true);
69
+ try {
70
+ const response = await services.queryTemplates({
71
+ operationType: context.operationType,
72
+ businessFunctionCode: context.businessFunctionCode,
73
+ keyword,
74
+ enabled: true,
75
+ currentPage: 1,
76
+ pageSize: 100,
77
+ });
78
+ const loaded = getItems<ImportExportTemplate>(response);
79
+ setItems(loaded);
80
+ if (!keyword) {
81
+ const defaultTemplate = loaded.find(
82
+ (template) => template.defaultFlag && template.enabled !== false,
83
+ );
84
+ if (!defaultTemplate) {
85
+ message.error('当前业务功能未配置启用的默认导出模板');
86
+ } else {
87
+ setTemplateCode(defaultTemplate.templateCode);
88
+ }
89
+ }
90
+ } catch (error) {
91
+ message.error('导出模板加载失败,请稍后重试');
92
+ } finally {
93
+ setLoading(false);
94
+ }
95
+ },
96
+ [context.businessFunctionCode, context.operationType, services],
97
+ );
98
+
99
+ useEffect(() => {
100
+ if (!visible) return;
101
+ setTemplateCode(undefined);
102
+ setFields([]);
103
+ setFileType('XLSX');
104
+ loadTemplates();
105
+ }, [visible, loadTemplates]);
106
+
107
+ useEffect(
108
+ () => () => {
109
+ if (searchTimer.current) {
110
+ window.clearTimeout(searchTimer.current);
111
+ }
112
+ },
113
+ [],
114
+ );
115
+
116
+ const selectedTemplate = useMemo(
117
+ () => items.find((item) => item.templateCode === templateCode),
118
+ [items, templateCode],
119
+ );
120
+ const personalTemplates = items.filter(
121
+ (item) => item.visibility === 'PERSONAL',
122
+ );
123
+ const publicTemplates = items.filter(
124
+ (item) => item.visibility !== 'PERSONAL',
125
+ );
126
+ const previewFieldNames =
127
+ fields.length > 0
128
+ ? fields.map((field) => field.displayName || field.fieldCode)
129
+ : selectedTemplate?.fieldNames || [];
130
+ const previewFieldCount =
131
+ fields.length || selectedTemplate?.fieldCount || previewFieldNames.length;
132
+
133
+ const searchTemplates = (keyword: string) => {
134
+ if (searchTimer.current) {
135
+ window.clearTimeout(searchTimer.current);
136
+ }
137
+ searchTimer.current = window.setTimeout(
138
+ () => loadTemplates(keyword.trim() || undefined),
139
+ 300,
140
+ );
141
+ };
142
+
143
+ useEffect(() => {
144
+ if (!selectedTemplate) {
145
+ setFields([]);
146
+ return;
147
+ }
148
+ setFieldLoading(true);
149
+ services
150
+ .queryTemplateFields({
151
+ templateCode: selectedTemplate.templateCode,
152
+ metadataEntityCode: selectedTemplate.metadataEntityCode,
153
+ onlyUnmapped: false,
154
+ currentPage: 1,
155
+ pageSize: 500,
156
+ })
157
+ .then((response) => {
158
+ setFields(
159
+ getItems<ImportExportTemplateField>(response).filter(
160
+ (field) => field.mapped,
161
+ ),
162
+ );
163
+ })
164
+ .catch(() => {
165
+ setFields([]);
166
+ message.error('模板字段预览加载失败,请稍后重试');
167
+ })
168
+ .finally(() => setFieldLoading(false));
169
+ }, [selectedTemplate, services]);
170
+
171
+ const confirm = async () => {
172
+ if (!templateCode) return;
173
+ if (resultCount === 0) {
174
+ message.warning('当前查询结果为空,不创建导出任务');
175
+ return;
176
+ }
177
+ setConfirming(true);
178
+ try {
179
+ await onConfirm(templateCode, fileType);
180
+ } finally {
181
+ setConfirming(false);
182
+ }
183
+ };
184
+
185
+ const downloadTemplate = async () => {
186
+ if (!templateCode) {
187
+ message.warning('请先选择模板');
188
+ return;
189
+ }
190
+ setDownloading(true);
191
+ try {
192
+ const file = await services.downloadTemplate(templateCode, context);
193
+ const url = URL.createObjectURL(
194
+ file instanceof Blob ? file : new Blob([file]),
195
+ );
196
+ const link = document.createElement('a');
197
+ link.href = url;
198
+ link.download = `${selectedTemplate?.templateName || templateCode}.xlsx`;
199
+ document.body.appendChild(link);
200
+ link.click();
201
+ document.body.removeChild(link);
202
+ URL.revokeObjectURL(url);
203
+ message.success('模板下载成功');
204
+ } catch (error) {
205
+ message.error('模板下载失败,请稍后重试');
206
+ } finally {
207
+ setDownloading(false);
208
+ }
209
+ };
210
+
211
+ return (
212
+ <Modal
213
+ width={760}
214
+ title={
215
+ <ModalTitle
216
+ icon={<FileExcelOutlined />}
217
+ title={`${documentName || '业务单据'}按模板导出`}
218
+ description="按已配置的字段模板生成当前筛选结果"
219
+ />
220
+ }
221
+ visible={visible}
222
+ onCancel={onCancel}
223
+ onOk={confirm}
224
+ confirmLoading={confirming}
225
+ okButtonProps={{ disabled: !templateCode || resultCount === 0 }}
226
+ okText="创建导出任务"
227
+ cancelText="取消"
228
+ wrapClassName={styles.exportModal}
229
+ destroyOnClose
230
+ >
231
+ <div className={styles.dialogBody}>
232
+ <Form layout="vertical" className={styles.templateForm}>
233
+ <section className={styles.section}>
234
+ <div className={styles.sectionHeader}>
235
+ <span className={styles.sectionIndex}>1</span>
236
+ <span>
237
+ <span className={styles.sectionTitle}>选择导出模板</span>
238
+ <span className={styles.sectionDescription}>
239
+ 模板决定导出文件包含的字段及字段顺序
240
+ </span>
241
+ </span>
242
+ </div>
243
+ <Form.Item
244
+ label="导出模板"
245
+ required
246
+ className={styles.templateSelectItem}
247
+ >
248
+ <Spin spinning={loading}>
249
+ <Select
250
+ size="large"
251
+ showSearch
252
+ allowClear
253
+ filterOption={false}
254
+ onSearch={searchTemplates}
255
+ onClear={() => loadTemplates()}
256
+ placeholder="输入模板名称实时查询"
257
+ value={templateCode}
258
+ onChange={setTemplateCode}
259
+ style={{ width: '100%' }}
260
+ notFoundContent={
261
+ <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />
262
+ }
263
+ >
264
+ {personalTemplates.length > 0 && (
265
+ <Select.OptGroup label="个人模板">
266
+ {personalTemplates.map((item) => (
267
+ <Select.Option
268
+ key={item.templateCode}
269
+ value={item.templateCode}
270
+ >
271
+ {item.templateName}
272
+ </Select.Option>
273
+ ))}
274
+ </Select.OptGroup>
275
+ )}
276
+ {publicTemplates.length > 0 && (
277
+ <Select.OptGroup label="公共模板">
278
+ {publicTemplates.map((item) => (
279
+ <Select.Option
280
+ key={item.templateCode}
281
+ value={item.templateCode}
282
+ >
283
+ {item.templateName}
284
+ </Select.Option>
285
+ ))}
286
+ </Select.OptGroup>
287
+ )}
288
+ </Select>
289
+ </Spin>
290
+ </Form.Item>
291
+
292
+ {selectedTemplate && (
293
+ <div className={styles.templatePreview}>
294
+ <div className={styles.templatePreviewHeader}>
295
+ <span className={styles.sectionTitle}>
296
+ 模板信息与字段预览
297
+ </span>
298
+ <Button
299
+ className={styles.downloadTemplateButton}
300
+ type="link"
301
+ icon={<DownloadOutlined />}
302
+ loading={downloading}
303
+ onClick={downloadTemplate}
304
+ >
305
+ 下载空白模板
306
+ </Button>
307
+ </div>
308
+ <Descriptions
309
+ bordered
310
+ size="small"
311
+ column={{ xs: 1, sm: 3 }}
312
+ className={styles.templateSummary}
313
+ >
314
+ <Descriptions.Item label="模板名称">
315
+ {selectedTemplate.templateName}
316
+ </Descriptions.Item>
317
+ <Descriptions.Item label="模板类型">
318
+ {selectedTemplate.visibility === 'PERSONAL'
319
+ ? '个人模板'
320
+ : '公共模板'}
321
+ </Descriptions.Item>
322
+ <Descriptions.Item label="业务功能">
323
+ {documentName ||
324
+ selectedTemplate.businessFunctionCode ||
325
+ '-'}
326
+ </Descriptions.Item>
327
+ </Descriptions>
328
+ <div className={styles.fieldPreview}>
329
+ <div className={styles.fieldPreviewHeader}>
330
+ <span className={styles.fieldPreviewLabel}>字段预览</span>
331
+ <span className={styles.fieldCount}>
332
+ {previewFieldCount} 个字段
333
+ </span>
334
+ </div>
335
+ <div className={styles.fieldTags}>
336
+ <Spin spinning={fieldLoading}>
337
+ <Space size={[4, 0]} wrap>
338
+ {previewFieldNames.map((name) => (
339
+ <Tag className={styles.fieldTag} key={name}>
340
+ {name}
341
+ </Tag>
342
+ ))}
343
+ {!fieldLoading && previewFieldNames.length === 0 && (
344
+ <span className={styles.emptyFields}>
345
+ 暂无已映射字段
346
+ </span>
347
+ )}
348
+ </Space>
349
+ </Spin>
350
+ </div>
351
+ </div>
352
+ </div>
353
+ )}
354
+ </section>
355
+
356
+ <section className={styles.section}>
357
+ <div className={styles.sectionHeader}>
358
+ <span className={styles.sectionIndex}>2</span>
359
+ <span>
360
+ <span className={styles.sectionTitle}>设置导出参数</span>
361
+ <span className={styles.sectionDescription}>
362
+ 确认当前导出范围并选择文件格式
363
+ </span>
364
+ </span>
365
+ </div>
366
+ <div className={styles.scopeCard}>
367
+ <span className={styles.scopeIcon}>
368
+ <FilterOutlined />
369
+ </span>
370
+ <span className={styles.scopeContent}>
371
+ <span className={styles.scopeTitle}>当前筛选结果</span>
372
+ <span className={styles.scopeDescription}>
373
+ 系统将按列表当前查询条件和所选模板字段导出
374
+ </span>
375
+ </span>
376
+ <span className={styles.resultCount}>
377
+ {resultCount == null ? '以查询结果为准' : `${resultCount} 条`}
378
+ </span>
379
+ </div>
380
+ <Form.Item
381
+ label="文件格式"
382
+ style={{ marginTop: 16, marginBottom: 0 }}
383
+ >
384
+ <Radio.Group
385
+ className={styles.fileTypeGrid}
386
+ value={fileType}
387
+ onChange={(event) => setFileType(event.target.value)}
388
+ >
389
+ <Radio className={styles.fileTypeOption} value="XLSX">
390
+ <span className={styles.fileTypeContent}>
391
+ <span className={styles.fileTypeName}>XLSX</span>
392
+ <span className={styles.fileTypeDescription}>
393
+ 保留表格格式,适合查看与编辑
394
+ </span>
395
+ </span>
396
+ </Radio>
397
+ <Radio className={styles.fileTypeOption} value="CSV">
398
+ <span className={styles.fileTypeContent}>
399
+ <span className={styles.fileTypeName}>CSV</span>
400
+ <span className={styles.fileTypeDescription}>
401
+ 文件更轻量,适合系统间交换
402
+ </span>
403
+ </span>
404
+ </Radio>
405
+ </Radio.Group>
406
+ </Form.Item>
407
+ <Alert
408
+ className={styles.exportAlert}
409
+ type={resultCount === 0 ? 'warning' : 'info'}
410
+ showIcon
411
+ message={
412
+ resultCount === 0
413
+ ? '当前查询结果为空,暂时无法创建导出任务。'
414
+ : '创建后可在任务中心查看处理进度并下载导出文件。'
415
+ }
416
+ />
417
+ </section>
418
+ </Form>
419
+ </div>
420
+ </Modal>
421
+ );
422
+ };
423
+
424
+ export default TemplatePicker;