Skip to content

Commit e77bbe5

Browse files
committed
feat: 优化文件列表显示并支持多语言和版本标签映射
- 在FileCard中更新版本提示内容 - FileList组件新增editionAndLanguage属性支持多语言和版本标签映射 - SystemSelector组件对版本选项进行排序并优化语言选项显示 - 调整文件列表项的边距样式
1 parent a03a60c commit e77bbe5

5 files changed

Lines changed: 39 additions & 7 deletions

File tree

src/components/FileCard.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export const FileCard: React.FC<FileCardProps> = ({
3232
const editionValue = editionLabel || info.Edition || '-';
3333
const isConsumerEdition =
3434
editionValue === '消费者版' || info.Edition.toLowerCase() === 'consumer';
35-
const editionTooltipContent = '含家庭 / 专业 / 教育等全套';
35+
const editionTooltipContent = '含家庭 / 专业 / 企业 / 教育等全套';
3636

3737
const title = useMemo(() => {
3838
if (!showTitle) return undefined;

src/components/FileList.tsx

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,11 @@ import React, { useState, useMemo, useCallback } from 'react';
77
import { Link, List, Space } from 'tdesign-react';
88
import { SearchFilter } from './SearchFilter';
99
import { formatFileSize } from '../utils/format';
10-
import type { WinFileInfo } from '../types/api';
10+
import type { WinFileInfo, EditionAndLanguage } from '../types/api';
1111

1212
interface FileListProps {
1313
files: WinFileInfo[];
14+
editionAndLanguage?: EditionAndLanguage;
1415
emptyContent?: React.ReactNode;
1516
enableSearch?: boolean;
1617
onDownload: (url: string) => void;
@@ -22,6 +23,7 @@ interface FileListProps {
2223
*/
2324
export const FileList: React.FC<FileListProps> = ({
2425
files,
26+
editionAndLanguage,
2527
emptyContent,
2628
enableSearch = true,
2729
onDownload,
@@ -41,6 +43,26 @@ export const FileList: React.FC<FileListProps> = ({
4143
setFilteredFiles(newFilteredFiles);
4244
}, []);
4345

46+
const languageLabelMap = useMemo(() => {
47+
const map = new Map<string, string>();
48+
(editionAndLanguage?.Language || []).forEach((item) => {
49+
const display = item.label_cn || item.label;
50+
map.set(item.value.toLowerCase(), display);
51+
map.set(item.label.toLowerCase(), display);
52+
});
53+
return map;
54+
}, [editionAndLanguage?.Language]);
55+
56+
const editionLabelMap = useMemo(() => {
57+
const map = new Map<string, string>();
58+
(editionAndLanguage?.Edition || []).forEach((item) => {
59+
const display = item.label_cn || item.label;
60+
map.set(item.value.toLowerCase(), display);
61+
map.set(item.label.toLowerCase(), display);
62+
});
63+
return map;
64+
}, [editionAndLanguage?.Edition]);
65+
4466
const renderRows = useMemo(() => {
4567
return filteredFiles.map((info, index) => (
4668
<List.ListItem className="file-list-row" key={`${info.FileName}-${index}`}>
@@ -49,8 +71,8 @@ export const FileList: React.FC<FileListProps> = ({
4971
{`Windows ${info.SystemCode} ${info.VerCode} (${info.BuildVer})`}
5072
</div>
5173
<div className="file-list-meta">
52-
<span>{info.Language}</span>
53-
<span>{info.Edition}</span>
74+
<span>{languageLabelMap.get((info.LanguageCode || info.Language).toLowerCase()) || info.Language}</span>
75+
<span>{editionLabelMap.get(info.Edition.toLowerCase()) || info.Edition}</span>
5476
<span>{info.Architecture}</span>
5577
<span>{formatFileSize(info.Size)}</span>
5678
<span>SHA: {info.Sha256 || info.Sha1 || '-'}</span>
@@ -66,7 +88,7 @@ export const FileList: React.FC<FileListProps> = ({
6688
</Space>
6789
</List.ListItem>
6890
));
69-
}, [filteredFiles, onCopy, onDownload]);
91+
}, [editionLabelMap, filteredFiles, languageLabelMap, onCopy, onDownload]);
7092

7193
if (files.length === 0) {
7294
return <div className="file-empty">{emptyContent}</div>;

src/components/SystemSelector.tsx

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ export const SystemSelector: React.FC<SystemSelectorProps> = ({
4545
// 记忆化版本选项
4646
const versionOptions = useMemo(() => {
4747
if (!systemCode || !versionsOption) return [];
48-
return versionsOption.Versions[systemCode] || [];
48+
const options = versionsOption.Versions[systemCode] || [];
49+
return [...options].sort((a, b) => b.label.localeCompare(a.label, undefined, { numeric: true }));
4950
}, [systemCode, versionsOption]);
5051

5152
// 计算禁用状态
@@ -85,6 +86,13 @@ export const SystemSelector: React.FC<SystemSelectorProps> = ({
8586
{ label: 'arm64', value: 'arm64' },
8687
]), []);
8788

89+
const languageOptions = useMemo(() => {
90+
return (editionAndLanguage?.Language || []).map((item) => ({
91+
...item,
92+
label: item.label_cn || item.label,
93+
}));
94+
}, [editionAndLanguage?.Language]);
95+
8896
return (
8997
<Loading loading={isLoadingOptions} size="small">
9098
<div className="selector-grid">
@@ -109,7 +117,7 @@ export const SystemSelector: React.FC<SystemSelectorProps> = ({
109117
value={language}
110118
prefixIcon={<>语言:</>}
111119
disabled={isLanguageDisabled}
112-
options={editionAndLanguage?.Language}
120+
options={languageOptions}
113121
placeholder={isLanguageDisabled ? '请先选择版本号' : '选择语言'}
114122
clearable
115123
onChange={handleLanguageChange}

src/global/main.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ p {
183183
justify-content: space-between;
184184
align-items: center;
185185
gap: 12px;
186+
margin: 4px 0;
186187
border: 1px solid var(--app-border);
187188
border-radius: 12px;
188189
padding: 10px 12px;

src/page/home/home.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,7 @@ const AllSystemSection: React.FC<AllSystemSectionProps> = ({
264264
) : (
265265
<FileList
266266
files={filteredFiles}
267+
editionAndLanguage={editionAndLanguage}
267268
emptyContent={<strong>{hasSelectedFilters ? '无结果' : '请选择筛选选项'}</strong>}
268269
onDownload={onDownload}
269270
onCopy={onCopy}

0 commit comments

Comments
 (0)