feat(portfolio): 参数表单分块(策略与选股/时间与资金/基准与费用); 进行中页加「发起新回测」(治等待页无法新建) [nas]
CI/CD / test (push) Successful in 13s
CI/CD / nas-deploy (push) Successful in 25s
CI/CD / nas-verify (push) Successful in 9s

This commit is contained in:
2026-08-13 11:36:35 +08:00
parent ebe368f54a
commit 15f132ccb5
@@ -270,69 +270,51 @@ function fmtNum(v: number | null | undefined, digits = 2): string {
</div>
</div>
<!-- 表单 -->
<!-- 策略与选股 -->
<el-card v-if="phase === 'form'" class="blk" shadow="never">
<template #header><span class="section-title">回测参数</span></template>
<template #header><span class="section-title">策略与选股</span></template>
<el-form :model="form" label-width="120px">
<el-form-item label="标的池">
<el-select v-model="form.pool" style="width: 320px">
<el-option
v-for="opt in poolOptions"
:key="opt.value"
:label="opt.label"
:value="opt.value"
/>
<el-option v-for="opt in poolOptions" :key="opt.value" :label="opt.label" :value="opt.value" />
</el-select>
<span class="muted form-hint">MVP 默认 HS300 子集(20-30 ),快速验证链路</span>
</el-form-item>
<el-form-item label="策略">
<el-select v-model="form.strategy" style="width: 320px">
<el-option
v-for="opt in strategyOptions"
:key="opt.value"
:label="opt.label"
:value="opt.value"
/>
<el-option v-for="opt in strategyOptions" :key="opt.value" :label="opt.label" :value="opt.value" />
</el-select>
<span class="muted form-hint">选择回测策略</span>
</el-form-item>
<el-form-item label="选股池上限">
<el-input-number
v-model="form.max_pool"
:min="0"
:step="10"
:controls="false"
style="width: 220px"
/>
<el-input-number v-model="form.max_pool" :min="0" :step="10" :controls="false" style="width: 220px" />
<span class="muted form-hint">0=全市场不限, N=前N只(MVP验证用, 默认30)</span>
</el-form-item>
</el-form>
</el-card>
<!-- 时间与资金 -->
<el-card v-if="phase === 'form'" class="blk" shadow="never">
<template #header><span class="section-title">时间与资金</span></template>
<el-form :model="form" label-width="120px">
<el-form-item label="开始日期">
<el-date-picker
v-model="form.start"
type="date"
value-format="YYYY-MM-DD"
style="width: 220px"
/>
<el-date-picker v-model="form.start" type="date" value-format="YYYY-MM-DD" style="width: 220px" />
</el-form-item>
<el-form-item label="结束日期">
<el-date-picker
v-model="form.end"
type="date"
value-format="YYYY-MM-DD"
style="width: 220px"
/>
<el-date-picker v-model="form.end" type="date" value-format="YYYY-MM-DD" style="width: 220px" />
</el-form-item>
<el-form-item label="初始资金">
<el-input-number
v-model="form.cash"
:min="10000"
:step="100000"
:controls="false"
style="width: 220px"
/>
<el-input-number v-model="form.cash" :min="10000" :step="100000" :controls="false" style="width: 220px" />
<span class="muted form-hint"></span>
</el-form-item>
<el-form-item label="基准">
</el-form>
</el-card>
<!-- 基准与费用 -->
<el-card v-if="phase === 'form'" class="blk" shadow="never">
<template #header><span class="section-title">基准与费用</span></template>
<el-form :model="form" label-width="120px">
<el-form-item label="比较基准">
<el-select v-model="form.benchmark" style="width: 220px">
<el-option v-for="b in BENCHMARK_OPTIONS" :key="b.value" :label="b.label" :value="b.value" />
</el-select>
@@ -354,12 +336,14 @@ function fmtNum(v: number | null | undefined, digits = 2): string {
<span class="muted form-hint">0.001=万10,0=不加</span>
</el-form-item>
</el-form>
<div class="submit-bar">
<el-button type="primary" size="large" @click="onSubmit">开始回测</el-button>
<span class="muted form-hint">提交后可切换其他页面,回来自动续看进度/结果</span>
</div>
</el-card>
<!-- 提交 -->
<div v-if="phase === 'form'" class="submit-bar">
<el-button type="primary" size="large" @click="onSubmit">开始回测</el-button>
<span class="muted form-hint">提交后可切换其他页面,回来自动续看进度/结果</span>
</div>
<!-- 进行中(可切走,回来恢复) -->
<el-card v-if="phase === 'running'" class="blk" shadow="never">
<template #header><span class="section-title">回测进行中</span></template>
@@ -372,6 +356,10 @@ function fmtNum(v: number | null | undefined, digits = 2): string {
task: <span class="mono">{{ trackingTid }}</span> · 组合回测加载大库数据预计 1-3 分钟
<strong>可切换其他页面,本页保留进度,回来继续</strong>
</p>
<div class="submit-bar">
<el-button @click="resetToForm">发起新回测</el-button>
<span class="muted form-hint">当前回测仍在后台运行,完成后可在历史任务查看</span>
</div>
</el-card>
<!-- 失败 -->