update pay function
This commit is contained in:
@@ -105,6 +105,68 @@ const ConceptTimelineModal = ({
|
|||||||
const [selectedNews, setSelectedNews] = useState(null);
|
const [selectedNews, setSelectedNews] = useState(null);
|
||||||
const [isNewsModalOpen, setIsNewsModalOpen] = useState(false);
|
const [isNewsModalOpen, setIsNewsModalOpen] = useState(false);
|
||||||
|
|
||||||
|
// 辅助函数:格式化日期显示(包含年份)
|
||||||
|
const formatDateDisplay = (dateStr) => {
|
||||||
|
const date = new Date(dateStr);
|
||||||
|
const today = new Date();
|
||||||
|
const diffTime = today - date;
|
||||||
|
const diffDays = Math.floor(diffTime / (1000 * 60 * 60 * 24));
|
||||||
|
|
||||||
|
const year = date.getFullYear();
|
||||||
|
const month = String(date.getMonth() + 1).padStart(2, '0');
|
||||||
|
const day = String(date.getDate()).padStart(2, '0');
|
||||||
|
const formatted = `${year}-${month}-${day}`;
|
||||||
|
|
||||||
|
if (diffDays === 0) return `今天 ${formatted}`;
|
||||||
|
if (diffDays === 1) return `昨天 ${formatted}`;
|
||||||
|
if (diffDays < 7) return `${diffDays}天前 ${formatted}`;
|
||||||
|
if (diffDays < 30) return `${Math.floor(diffDays / 7)}周前 ${formatted}`;
|
||||||
|
if (diffDays < 365) return `${Math.floor(diffDays / 30)}月前 ${formatted}`;
|
||||||
|
return formatted;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 辅助函数:格式化完整时间(YYYY-MM-DD HH:mm)
|
||||||
|
const formatDateTime = (dateTimeStr) => {
|
||||||
|
if (!dateTimeStr) return '-';
|
||||||
|
const normalized = typeof dateTimeStr === 'string' ? dateTimeStr.replace(' ', 'T') : dateTimeStr;
|
||||||
|
const dt = new Date(normalized);
|
||||||
|
if (isNaN(dt.getTime())) return '-';
|
||||||
|
const y = dt.getFullYear();
|
||||||
|
const m = String(dt.getMonth() + 1).padStart(2, '0');
|
||||||
|
const d = String(dt.getDate()).padStart(2, '0');
|
||||||
|
const hh = String(dt.getHours()).padStart(2, '0');
|
||||||
|
const mm = String(dt.getMinutes()).padStart(2, '0');
|
||||||
|
return `${y}-${m}-${d} ${hh}:${mm}`;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 辅助函数:获取涨跌幅颜色和图标
|
||||||
|
const getPriceInfo = (price) => {
|
||||||
|
if (!price || price.avg_change_pct === null) {
|
||||||
|
return { color: 'gray', icon: null, text: '无数据' };
|
||||||
|
}
|
||||||
|
|
||||||
|
const value = price.avg_change_pct;
|
||||||
|
if (value > 0) {
|
||||||
|
return {
|
||||||
|
color: 'red',
|
||||||
|
icon: FaArrowUp,
|
||||||
|
text: `+${value.toFixed(2)}%`
|
||||||
|
};
|
||||||
|
} else if (value < 0) {
|
||||||
|
return {
|
||||||
|
color: 'green',
|
||||||
|
icon: FaArrowDown,
|
||||||
|
text: `${value.toFixed(2)}%`
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
return {
|
||||||
|
color: 'gray',
|
||||||
|
icon: null,
|
||||||
|
text: '0.00%'
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// 转换时间轴数据为日历事件格式
|
// 转换时间轴数据为日历事件格式
|
||||||
const calendarEvents = useMemo(() => {
|
const calendarEvents = useMemo(() => {
|
||||||
return timelineData.map(item => {
|
return timelineData.map(item => {
|
||||||
@@ -170,68 +232,6 @@ const ConceptTimelineModal = ({
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// 辅助函数:格式化日期显示(包含年份)
|
|
||||||
const formatDateDisplay = (dateStr) => {
|
|
||||||
const date = new Date(dateStr);
|
|
||||||
const today = new Date();
|
|
||||||
const diffTime = today - date;
|
|
||||||
const diffDays = Math.floor(diffTime / (1000 * 60 * 60 * 24));
|
|
||||||
|
|
||||||
const year = date.getFullYear();
|
|
||||||
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
||||||
const day = String(date.getDate()).padStart(2, '0');
|
|
||||||
const formatted = `${year}-${month}-${day}`;
|
|
||||||
|
|
||||||
if (diffDays === 0) return `今天 ${formatted}`;
|
|
||||||
if (diffDays === 1) return `昨天 ${formatted}`;
|
|
||||||
if (diffDays < 7) return `${diffDays}天前 ${formatted}`;
|
|
||||||
if (diffDays < 30) return `${Math.floor(diffDays / 7)}周前 ${formatted}`;
|
|
||||||
if (diffDays < 365) return `${Math.floor(diffDays / 30)}月前 ${formatted}`;
|
|
||||||
return formatted;
|
|
||||||
};
|
|
||||||
|
|
||||||
// 辅助函数:格式化完整时间(YYYY-MM-DD HH:mm)
|
|
||||||
const formatDateTime = (dateTimeStr) => {
|
|
||||||
if (!dateTimeStr) return '-';
|
|
||||||
const normalized = typeof dateTimeStr === 'string' ? dateTimeStr.replace(' ', 'T') : dateTimeStr;
|
|
||||||
const dt = new Date(normalized);
|
|
||||||
if (isNaN(dt.getTime())) return '-';
|
|
||||||
const y = dt.getFullYear();
|
|
||||||
const m = String(dt.getMonth() + 1).padStart(2, '0');
|
|
||||||
const d = String(dt.getDate()).padStart(2, '0');
|
|
||||||
const hh = String(dt.getHours()).padStart(2, '0');
|
|
||||||
const mm = String(dt.getMinutes()).padStart(2, '0');
|
|
||||||
return `${y}-${m}-${d} ${hh}:${mm}`;
|
|
||||||
};
|
|
||||||
|
|
||||||
// 辅助函数:获取涨跌幅颜色和图标
|
|
||||||
const getPriceInfo = (price) => {
|
|
||||||
if (!price || price.avg_change_pct === null) {
|
|
||||||
return { color: 'gray', icon: null, text: '无数据' };
|
|
||||||
}
|
|
||||||
|
|
||||||
const value = price.avg_change_pct;
|
|
||||||
if (value > 0) {
|
|
||||||
return {
|
|
||||||
color: 'red',
|
|
||||||
icon: FaArrowUp,
|
|
||||||
text: `+${value.toFixed(2)}%`
|
|
||||||
};
|
|
||||||
} else if (value < 0) {
|
|
||||||
return {
|
|
||||||
color: 'green',
|
|
||||||
icon: FaArrowDown,
|
|
||||||
text: `${value.toFixed(2)}%`
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
return {
|
|
||||||
color: 'gray',
|
|
||||||
icon: null,
|
|
||||||
text: '0.00%'
|
|
||||||
};
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// 获取时间轴数据
|
// 获取时间轴数据
|
||||||
const fetchTimelineData = async () => {
|
const fetchTimelineData = async () => {
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
|
|||||||
Reference in New Issue
Block a user