diff --git a/frontend/src/mock/index.ts b/frontend/src/mock/index.ts index 35b3428..756e331 100644 --- a/frontend/src/mock/index.ts +++ b/frontend/src/mock/index.ts @@ -4,7 +4,9 @@ * 样板阶段用于让每个页面都有内容可看。接真实后端时无需改这里。 */ import * as D from './data' -export const MOCK_ON = true +// dev(npm run dev)=true 走 mock 假数据(本地无后端看原型);build(vite build)=false 走真实后端。 +// 这样 NAS/生产 dist 自动真实,Mac 本地 dev 自动 mock。 +export const MOCK_ON = import.meta.env.DEV type Builder = (url: string) => unknown interface Route { diff --git a/frontend/src/views/backtest/PortfolioBacktest.vue b/frontend/src/views/backtest/PortfolioBacktest.vue index c58dd38..972eeb3 100644 --- a/frontend/src/views/backtest/PortfolioBacktest.vue +++ b/frontend/src/views/backtest/PortfolioBacktest.vue @@ -26,15 +26,39 @@ const errorMsg = ref('') const stageHint = ref('') let pollTimer: ReturnType | null = null +function loadDateRange(): { start: string; end: string } { + try { + const s = localStorage.getItem('portfolio_date_range') + if (s) return JSON.parse(s) as { start: string; end: string } + } catch { + /* ignore */ + } + const end = new Date() + const start = new Date(end) + start.setFullYear(start.getFullYear() - 1) + const f = (d: Date): string => d.toISOString().slice(0, 10) + return { start: f(start), end: f(end) } +} +const dr = loadDateRange() const form = reactive({ pool: 'hs300_subset', strategy: 'all_weather', max_pool: 30, - start: '2024-01-01', - end: '2024-02-29', + start: dr.start, + end: dr.end, cash: 1_000_000, benchmark: '000300.XSHG', }) +watch( + () => [form.start, form.end], + ([s, e]) => { + try { + localStorage.setItem('portfolio_date_range', JSON.stringify({ start: s, end: e })) + } catch { + /* ignore */ + } + }, +) const poolOptions = [ { label: 'HS300 子集(小范围验证)', value: 'hs300_subset' },