0 ? 'up' : summary.totalHoldingReturn < 0 ? 'down' : ''}
+
0 ? 'up' : summary.totalHoldingReturn < 0 ? 'down' : ''}
style={{ fontSize: '18px', fontWeight: 700, fontFamily: 'var(--font-mono)', cursor: 'pointer' }}
onClick={() => setShowPercent(!showPercent)}
title="点击切换金额/百分比"
@@ -1735,7 +1735,7 @@ export default function HomePage() {
if (e.target.closest('.swipe-action-bg')) {
return;
}
-
+
if (swipedFundCode) {
setSwipedFundCode(null);
}
@@ -1756,7 +1756,7 @@ export default function HomePage() {
const checkTradingDay = () => {
const now = new Date();
const isWeekend = now.getDay() === 0 || now.getDay() === 6;
-
+
// 周末直接判定为非交易日
if (isWeekend) {
setIsTradingDay(false);
@@ -1775,7 +1775,7 @@ export default function HomePage() {
if (parts.length > 30) {
const dateStr = parts[30].slice(0, 8); // 20260205
const currentStr = todayStr.replace(/-/g, '');
-
+
if (dateStr === currentStr) {
setIsTradingDay(true); // 日期匹配,确认为交易日
} else {
@@ -1882,6 +1882,9 @@ export default function HomePage() {
const valB = pb?.profitTotal ?? Number.NEGATIVE_INFINITY;
return sortOrder === 'asc' ? valA - valB : valB - valA;
}
+ if(sortBy === 'name'){
+ return sortOrder === 'asc' ? a.name.localeCompare(b.name, 'zh-CN') : b.name.localeCompare(a.name, 'zh-CN');
+ }
return 0;
});
@@ -1940,16 +1943,16 @@ export default function HomePage() {
const handleTrade = (fund, data) => {
const current = holdings[fund.code] || { share: 0, cost: 0 };
const isBuy = tradeModal.type === 'buy';
-
+
let newShare, newCost;
-
+
if (isBuy) {
newShare = current.share + data.share;
-
+
// 如果传递了 totalCost(即买入总金额),则用它来计算新成本
// 否则回退到用 share * price 计算(减仓或旧逻辑)
const buyCost = data.totalCost !== undefined ? data.totalCost : (data.price * data.share);
-
+
// 加权平均成本 = (原持仓成本 * 原份额 + 本次买入总花费) / 新总份额
// 注意:这里默认将手续费也计入成本(如果 totalCost 包含了手续费)
newCost = (current.cost * current.share + buyCost) / newShare;
@@ -2247,10 +2250,10 @@ export default function HomePage() {
if (v) {
const p = v.split('~');
// p[5]: 单位净值, p[7]: 涨跌幅, p[8]: 净值日期
- resolveT({
- dwjz: p[5],
- zzl: parseFloat(p[7]),
- jzrq: p[8] ? p[8].slice(0, 10) : ''
+ resolveT({
+ dwjz: p[5],
+ zzl: parseFloat(p[7]),
+ jzrq: p[8] ? p[8].slice(0, 10) : ''
});
} else {
resolveT(null);
@@ -2404,15 +2407,15 @@ export default function HomePage() {
// 使用 JSONP 方式获取数据,添加 callback 参数
const callbackName = `SuggestData_${Date.now()}`;
const url = `https://fundsuggest.eastmoney.com/FundSearch/api/FundSearchAPI.ashx?m=1&key=${encodeURIComponent(val)}&callback=${callbackName}&_=${Date.now()}`;
-
+
try {
await new Promise((resolve, reject) => {
window[callbackName] = (data) => {
if (data && data.Datas) {
// 过滤出基金类型的数据 (CATEGORY 为 700 是公募基金)
- const fundsOnly = data.Datas.filter(d =>
- d.CATEGORY === 700 ||
- d.CATEGORY === "700" ||
+ const fundsOnly = data.Datas.filter(d =>
+ d.CATEGORY === 700 ||
+ d.CATEGORY === "700" ||
d.CATEGORYDESC === "基金"
);
setSearchResults(fundsOnly);
@@ -2462,7 +2465,7 @@ export default function HomePage() {
if (selectedFunds.length === 0) return;
setLoading(true);
setError('');
-
+
try {
const newFunds = [];
for (const f of selectedFunds) {
@@ -2474,13 +2477,13 @@ export default function HomePage() {
console.error(`添加基金 ${f.CODE} 失败`, e);
}
}
-
+
if (newFunds.length > 0) {
const updated = dedupeByCode([...newFunds, ...funds]);
setFunds(updated);
localStorage.setItem('funds', JSON.stringify(updated));
}
-
+
setSelectedFunds([]);
setSearchTerm('');
setSearchResults([]);
@@ -2512,7 +2515,7 @@ export default function HomePage() {
});
}
}
-
+
if (updated.length > 0) {
setFunds(prev => {
// 将更新后的数据合并回当前最新的 state 中,防止覆盖掉刚刚导入的数据
@@ -2543,7 +2546,7 @@ export default function HomePage() {
setViewMode(nextMode);
localStorage.setItem('viewMode', nextMode);
};
-
+
const requestRemoveFund = (fund) => {
const h = holdings[fund.code];
const hasHolding = h && typeof h.share === 'number' && h.share > 0;
@@ -2809,13 +2812,13 @@ export default function HomePage() {
};
useEffect(() => {
- const isAnyModalOpen =
- settingsOpen ||
- feedbackOpen ||
- addResultOpen ||
- addFundToGroupOpen ||
- groupManageOpen ||
- groupModalOpen ||
+ const isAnyModalOpen =
+ settingsOpen ||
+ feedbackOpen ||
+ addResultOpen ||
+ addFundToGroupOpen ||
+ groupManageOpen ||
+ groupModalOpen ||
successModal.open ||
holdingModal.open ||
actionModal.open ||
@@ -2823,23 +2826,23 @@ export default function HomePage() {
!!clearConfirm ||
donateOpen ||
!!fundDeleteConfirm;
-
+
if (isAnyModalOpen) {
document.body.style.overflow = 'hidden';
} else {
document.body.style.overflow = '';
}
-
+
return () => {
document.body.style.overflow = '';
};
}, [
- settingsOpen,
- feedbackOpen,
- addResultOpen,
- addFundToGroupOpen,
- groupManageOpen,
- groupModalOpen,
+ settingsOpen,
+ feedbackOpen,
+ addResultOpen,
+ addFundToGroupOpen,
+ groupManageOpen,
+ groupModalOpen,
successModal.open,
holdingModal.open,
actionModal.open,
@@ -2909,7 +2912,7 @@ export default function HomePage() {
添加基金
搜索并选择基金(支持名称或代码)
-
+
@@ -2992,13 +2995,13 @@ export default function HomePage() {
-
-
{groups.length > 0 && (
-
)}
-