diff --git a/public/docs.html b/public/docs.html index 0c7d7398..d59212eb 100644 --- a/public/docs.html +++ b/public/docs.html @@ -1469,7 +1469,7 @@
-
© 2024 价值前沿. 保留所有权利.
+
© 2026 北京价值前沿科技有限公司
京公网安备11010802046286号 diff --git a/public/landing.html b/public/landing.html index 6bad18aa..ec3ef151 100644 --- a/public/landing.html +++ b/public/landing.html @@ -692,7 +692,7 @@
-
© 2024 价值前沿. 保留所有权利.
+
© 2026 北京价值前沿科技有限公司
京公网安备11010802046286号 diff --git a/src/components/Footer/index.js b/src/components/Footer/index.js index bf1f9067..8f27a83c 100644 --- a/src/components/Footer/index.js +++ b/src/components/Footer/index.js @@ -31,8 +31,11 @@ const Footer = () => (
-

- © 2024 价值前沿. 保留所有权利. +

+ © 2026 北京价值前沿科技有限公司

diff --git a/src/components/Navbars/components/NavStockSearch/index.js b/src/components/Navbars/components/NavStockSearch/index.js index eea7ad28..ccf36412 100644 --- a/src/components/Navbars/components/NavStockSearch/index.js +++ b/src/components/Navbars/components/NavStockSearch/index.js @@ -68,7 +68,9 @@ const NavStockSearch = memo(() => { // 选择股票 - 跳转到详情页 const handleSelectStock = useCallback((stock) => { clearSearch(); - navigate(`/company/${stock.stock_code}`); + // 提取纯数字股票代码(去掉 .SZ/.SH 后缀) + const scode = stock.stock_code.split('.')[0]; + navigate(`/company?scode=${scode}`); }, [navigate, clearSearch]); // 处理键盘事件 diff --git a/src/layouts/AppFooter.js b/src/layouts/AppFooter.js index 68981f23..b573bfe5 100644 --- a/src/layouts/AppFooter.js +++ b/src/layouts/AppFooter.js @@ -1,5 +1,5 @@ import React from 'react'; -import { Box, VStack, HStack, Text, Link, useColorModeValue } from '@chakra-ui/react'; +import { Box, VStack, HStack, Text, Link, useColorModeValue, Tooltip } from '@chakra-ui/react'; import RiskDisclaimer from '../components/RiskDisclaimer'; import { LAYOUT_PADDING, Z_INDEX } from './config/layoutConfig'; @@ -12,9 +12,15 @@ const AppFooter = () => { - - © 2024 价值前沿. 保留所有权利. - + + + © 2026 北京价值前沿科技有限公司 + + { + if (key === "4连板+") return "#ff4d4f"; + if (key === "3连板") return "#fa541c"; + if (key === "2连板") return "#fa8c16"; + return "#52c41a"; +}; + +/** + * 获取时间颜色 + */ +const getTimeColor = (key) => { + if (key === "秒板") return "#ff4d4f"; + if (key === "早盘") return "#fa8c16"; + if (key === "盘中") return "#52c41a"; + return "#888"; +}; + +/** + * 获取关键词样式(根据排名) + */ +const getKeywordStyle = (index) => { + if (index < 3) { + return { + fontSize: "12px", + fontWeight: "bold", + background: "linear-gradient(135deg, rgba(255,215,0,0.3) 0%, rgba(255,165,0,0.2) 100%)", + border: "1px solid rgba(255,215,0,0.5)", + color: "#FFD700", + padding: "2px 8px", + }; + } + if (index < 6) { + return { + fontSize: "11px", + fontWeight: "600", + background: "rgba(255,215,0,0.15)", + border: "1px solid rgba(255,215,0,0.3)", + color: "#D4A84B", + padding: "2px 6px", + }; + } + return { + fontSize: "11px", + fontWeight: "normal", + background: "rgba(255,255,255,0.08)", + border: "1px solid rgba(255,255,255,0.15)", + color: "#888", + padding: "2px 6px", + }; +}; + +/** + * 涨停概览紧凑组件 + * @param {Object} props + * @param {Array} props.keywords - 关键词数组 + * @param {Object} props.stats - 统计数据 + */ +const CompactZTOverview = ({ keywords = [], stats }) => { + if (!stats && (!keywords || keywords.length === 0)) { + return null; + } + + return ( +
+ {/* 热门关键词 - 紧凑版 */} + {keywords && keywords.length > 0 && ( +
+
+ + + 热词 + +
+
+ {keywords.slice(0, 8).map((kw, idx) => { + const style = getKeywordStyle(idx); + return ( + + {kw.name} + + ); + })} + {keywords.length > 8 && ( + + +{keywords.length - 8} + + )} +
+
+ )} + + {/* 分隔线 */} + {keywords && keywords.length > 0 && stats && ( +
+ )} + + {/* 统计数据 - 紧凑版 */} + {stats && ( +
+ {/* 连板分布 */} +
+ 连板 +
+ {Object.entries(stats.continuousStats).map(([key, value]) => ( +
+ + {value} + + + {key.replace("连板", "").replace("+", "+")} + +
+ ))} +
+
+ + {/* 分隔点 */} + · + + {/* 封板时间 */} +
+ 封板 +
+ {Object.entries(stats.timeStats).map(([key, value]) => ( +
+ + {value} + + + {key} + +
+ ))} +
+
+ + {/* 公告驱动 - 仅在有数据时显示 */} + {stats.announcementCount > 0 && ( + <> + · +
+ 公告 + + {stats.announcementCount} + + + ({stats.announcementRatio}%) + +
+ + )} +
+ )} +
+ ); +}; + +export default CompactZTOverview; diff --git a/src/views/Community/components/HeroPanel/components/DetailModal/DetailModal.js b/src/views/Community/components/HeroPanel/components/DetailModal/DetailModal.js index 021a2e70..c8acd9f5 100644 --- a/src/views/Community/components/HeroPanel/components/DetailModal/DetailModal.js +++ b/src/views/Community/components/HeroPanel/components/DetailModal/DetailModal.js @@ -35,8 +35,7 @@ import { SectorStocksModal, ZTSectorView, EventsTabView, - HotKeywordsCloud, - ZTStatsCards, + CompactZTOverview, } from "../index"; import { createStockColumns, @@ -584,14 +583,11 @@ const DetailModal = ({ style={{ display: "flex", flexDirection: "column", - gap: "20px", + gap: "12px", }} > - {/* 热门关键词 */} - - - {/* 涨停统计卡片 */} - + {/* 涨停概览 - 紧凑版(热门关键词 + 统计数据一行显示) */} + {/* 视图切换按钮 - 更精致的样式 */}
{ + if (!time) return null; + const d = dayjs(time); + if (!d.isValid()) return null; + return d.format("MM-DD HH:mm"); +}; /** * 获取相关度颜色 @@ -115,23 +126,34 @@ const RelatedEventsModal = ({ }} >
- {/* 标题 */} + {/* 标题 + 时间 */}
- - - {event.title} - + +
+ + {event.title} + + {/* 事件时间 */} + {(event.created_at || event.event_time || event.publish_time) && ( +
+ + + {formatEventTime(event.created_at || event.event_time || event.publish_time)} + +
+ )} +
相关度 {event.relevance_score || 0} diff --git a/src/views/Community/components/HeroPanel/components/index.js b/src/views/Community/components/HeroPanel/components/index.js index 8de31be0..02a4417b 100644 --- a/src/views/Community/components/HeroPanel/components/index.js +++ b/src/views/Community/components/HeroPanel/components/index.js @@ -5,3 +5,4 @@ export { default as InfoModal } from "./InfoModal"; export { default as CombinedCalendar } from "./CombinedCalendar"; export { default as HotKeywordsCloud } from "./HotKeywordsCloud"; export { default as ZTStatsCards } from "./ZTStatsCards"; +export { default as CompactZTOverview } from "./CompactZTOverview";