更新Company页面的UI为FUI风格

This commit is contained in:
2025-12-22 12:58:01 +08:00
parent 897067a94e
commit 307d80c808
3 changed files with 234 additions and 92 deletions

View File

@@ -136,7 +136,7 @@ const MainlineCard = React.memo(
noOfLines={1}
flex={1}
>
{mainline.lv2_name || mainline.lv1_name || "其他"}
{mainline.group_name || mainline.lv2_name || mainline.lv1_name || "其他"}
</Text>
{/* 涨跌幅显示 - 在概念名称旁边 */}
{mainline.avg_change_pct != null && (
@@ -160,14 +160,15 @@ const MainlineCard = React.memo(
{mainline.event_count}
</Badge>
</HStack>
{/* 只有当同时存在 lv1_name 和 lv2_name 时才显示副标题 */}
{mainline.lv1_name && mainline.lv2_name && (
{/* 显示上级概念名称作为副标题 */}
{mainline.parent_name && (
<Text
fontSize="xs"
color={COLORS.secondaryTextColor}
noOfLines={1}
>
{mainline.lv1_name}
{mainline.grandparent_name ? `${mainline.grandparent_name} > ` : ""}
{mainline.parent_name}
</Text>
)}
</VStack>
@@ -283,10 +284,10 @@ const MainlineTimelineViewComponent = forwardRef(
const [error, setError] = useState(null);
const [mainlineData, setMainlineData] = useState(null);
const [expandedGroups, setExpandedGroups] = useState({});
// 概念级别选择: 'lv1' | 'lv2' | 具体的 lv2_id
// 概念级别选择: 'lv1' | 'lv2' | 'lv3' | 具体概念ID如 L1_TMT, L2_AI_INFRA, L3_AI_CHIP
const [groupBy, setGroupBy] = useState("lv2");
// lv2 概念选项(从 API 获取)
const [lv2Options, setLv2Options] = useState([]);
// 层级选项(从 API 获取)
const [hierarchyOptions, setHierarchyOptions] = useState({ lv1: [], lv2: [], lv3: [] });
// 根据主线类型获取配色
const getColorScheme = useCallback((lv2Name) => {
@@ -406,15 +407,16 @@ const MainlineTimelineViewComponent = forwardRef(
mainlines: sortedMainlines,
});
// 保存 lv2 选项供下拉框使用
if (result.data.lv2_options) {
setLv2Options(result.data.lv2_options);
// 保存层级选项供下拉框使用
if (result.data.hierarchy_options) {
setHierarchyOptions(result.data.hierarchy_options);
}
// 初始化展开状态(默认全部展开)
const initialExpanded = {};
sortedMainlines.forEach((mainline) => {
initialExpanded[mainline.lv2_id || mainline.lv1_id] = true;
const groupId = mainline.group_id || mainline.lv2_id || mainline.lv1_id;
initialExpanded[groupId] = true;
});
setExpandedGroups(initialExpanded);
} else {
@@ -563,24 +565,55 @@ const MainlineTimelineViewComponent = forwardRef(
onChange={setGroupBy}
size="small"
style={{
width: 160,
width: 200,
backgroundColor: "transparent",
}}
popupClassName="dark-select-dropdown"
dropdownStyle={{
backgroundColor: "#252a34",
borderColor: "#3a3f4b",
maxHeight: 400,
}}
showSearch
optionFilterProp="label"
options={[
{ value: "lv1", label: "按一级概念" },
{ value: "lv2", label: "按二级概念" },
...(lv2Options.length > 0
{
label: "分组方式",
options: [
{ value: "lv1", label: "按一级概念(大类)" },
{ value: "lv2", label: "按二级概念(细分)" },
{ value: "lv3", label: "按三级概念(更细)" },
],
},
...(hierarchyOptions.lv1?.length > 0
? [
{
label: "具体概念",
options: lv2Options.map((opt) => ({
value: opt.lv2_id,
label: opt.lv2_name,
label: "一级概念(展开)",
options: hierarchyOptions.lv1.map((opt) => ({
value: opt.id,
label: opt.name,
})),
},
]
: []),
...(hierarchyOptions.lv2?.length > 0
? [
{
label: "二级概念(展开)",
options: hierarchyOptions.lv2.map((opt) => ({
value: opt.id,
label: `${opt.name}`,
})),
},
]
: []),
...(hierarchyOptions.lv3?.length > 0
? [
{
label: "三级概念(展开)",
options: hierarchyOptions.lv3.map((opt) => ({
value: opt.id,
label: `${opt.name}`,
})),
},
]
@@ -656,9 +689,16 @@ const MainlineTimelineViewComponent = forwardRef(
}}
>
{mainlines.map((mainline) => {
const groupId = mainline.lv2_id || mainline.lv1_id || "ungrouped";
const groupId =
mainline.group_id ||
mainline.lv2_id ||
mainline.lv1_id ||
"ungrouped";
const groupName =
mainline.lv2_name || mainline.lv1_name || "其他";
mainline.group_name ||
mainline.lv2_name ||
mainline.lv1_name ||
"其他";
return (
<MainlineCard
key={groupId}