合约全景刷新时自动拉取打分,并同步回写完整合约代码

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
fish
2026-05-07 22:49:33 +08:00
parent 512d43121c
commit fef806f796

View File

@@ -36,17 +36,23 @@ async function reload() {
]) ])
candles.value = candleData candles.value = candleData
scores.value = scoreData scores.value = scoreData
// 如果数据库里没有该合约数据,自动拉取并打分
if (candleData.length === 0) {
await doFetchAndScore(true)
}
} finally { } finally {
loading.value = false loading.value = false
} }
} }
async function handleFetchAndScore() { async function doFetchAndScore(skipConfirm: boolean) {
if (!filter.ts_code) { if (!filter.ts_code) {
ElMessage.warning('请输入或选择合约') ElMessage.warning('请输入或选择合约')
return return
} }
if (!skipConfirm) {
try { try {
await ElMessageBox.confirm( await ElMessageBox.confirm(
`即将拉取 ${filter.ts_code} 的全部历史数据并逐日打分,这可能需要一些时间。`, `即将拉取 ${filter.ts_code} 的全部历史数据并逐日打分,这可能需要一些时间。`,
@@ -56,14 +62,17 @@ async function handleFetchAndScore() {
} catch { } catch {
return return
} }
}
fullLoading.value = true fullLoading.value = true
fullResult.value = null fullResult.value = null
try { try {
const resp = await runFull({ ts_code: filter.ts_code }) const resp = await runFull({ ts_code: filter.ts_code })
fullResult.value = resp fullResult.value = resp
// 用后端返回的完整代码(含交易所后缀)更新输入框
filter.ts_code = resp.ts_code
ElMessage.success(`完成: ${resp.scored_count} 天已打分, ${resp.skipped_count} 天跳过`) ElMessage.success(`完成: ${resp.scored_count} 天已打分, ${resp.skipped_count} 天跳过`)
await reload() await loadData()
} catch (err: any) { } catch (err: any) {
const msg = err?.response?.data?.error || err.message || '请求失败' const msg = err?.response?.data?.error || err.message || '请求失败'
ElMessage.error(msg) ElMessage.error(msg)
@@ -72,6 +81,21 @@ async function handleFetchAndScore() {
} }
} }
async function handleFetchAndScore() {
await doFetchAndScore(false)
}
async function loadData() {
if (!filter.ts_code) return
const [start, end] = filter.range || []
const [candleData, scoreData] = await Promise.all([
listCandles(filter.ts_code, start, end),
listScores({ ts_code: filter.ts_code, start, end, limit: 1000 }),
])
candles.value = candleData
scores.value = scoreData
}
onMounted(async () => { onMounted(async () => {
contracts.value = await listContracts().catch(() => []) contracts.value = await listContracts().catch(() => [])
if (contracts.value.length > 0) { if (contracts.value.length > 0) {