From 2aea269e9beac08c60adb546470855a025a048d6 Mon Sep 17 00:00:00 2001 From: Lxy Date: Sat, 11 Apr 2026 19:59:29 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=B0=86=E8=82=A1=E7=A5=A8=E5=92=8C?= =?UTF-8?q?=E6=9C=9F=E8=B4=A7=E6=95=B0=E6=8D=AE=E5=8C=BA=E5=88=86=E5=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/services/future_service.py | 12 +- frontend/src/api/future.ts | 9 + .../src/views/DataQuery/FutureBatchQuery.vue | 176 ++++++++++++ .../src/views/DataQuery/FutureKlineQuery.vue | 267 +++++++++++++++++ .../src/views/DataQuery/StockBatchQuery.vue | 176 ++++++++++++ .../src/views/DataQuery/StockKlineQuery.vue | 270 ++++++++++++++++++ frontend/src/views/DataQuery/index.vue | 34 ++- 7 files changed, 934 insertions(+), 10 deletions(-) create mode 100644 frontend/src/views/DataQuery/FutureBatchQuery.vue create mode 100644 frontend/src/views/DataQuery/FutureKlineQuery.vue create mode 100644 frontend/src/views/DataQuery/StockBatchQuery.vue create mode 100644 frontend/src/views/DataQuery/StockKlineQuery.vue diff --git a/backend/app/services/future_service.py b/backend/app/services/future_service.py index 4079e68..7028dd1 100644 --- a/backend/app/services/future_service.py +++ b/backend/app/services/future_service.py @@ -180,7 +180,11 @@ class FutureService: return for idx, row in df.iterrows(): - trade_date = idx if isinstance(idx, date) else parse_date(str(idx)) + kline_time = row.get("kline_time") + if kline_time is None: + continue + + trade_date = kline_time.date() if hasattr(kline_time, 'date') else parse_date(str(kline_time)[:10]) existing = self.db.query(FutureKlineDaily).filter( and_( @@ -223,7 +227,11 @@ class FutureService: from datetime import datetime for idx, row in df.iterrows(): - trade_datetime = idx if isinstance(idx, datetime) else datetime.fromisoformat(str(idx)) + kline_time = row.get("kline_time") + if kline_time is None: + continue + + trade_datetime = kline_time if isinstance(kline_time, datetime) else datetime.fromisoformat(str(kline_time)) existing = self.db.query(FutureKlineMin).filter( and_( diff --git a/frontend/src/api/future.ts b/frontend/src/api/future.ts index 079748d..dc098fa 100644 --- a/frontend/src/api/future.ts +++ b/frontend/src/api/future.ts @@ -19,3 +19,12 @@ export const getFutureKlineChart = ( ) => { return request.get(`/future/kline/${code}/chart`, { params }) } + +export const batchGetFutureKline = (data: { + codes: string[] + start_date: string + end_date: string + period?: string +}) => { + return request.post('/future/kline/batch', data) +} diff --git a/frontend/src/views/DataQuery/FutureBatchQuery.vue b/frontend/src/views/DataQuery/FutureBatchQuery.vue new file mode 100644 index 0000000..9483b7c --- /dev/null +++ b/frontend/src/views/DataQuery/FutureBatchQuery.vue @@ -0,0 +1,176 @@ + + + + + \ No newline at end of file diff --git a/frontend/src/views/DataQuery/FutureKlineQuery.vue b/frontend/src/views/DataQuery/FutureKlineQuery.vue new file mode 100644 index 0000000..d948b93 --- /dev/null +++ b/frontend/src/views/DataQuery/FutureKlineQuery.vue @@ -0,0 +1,267 @@ + + + + + \ No newline at end of file diff --git a/frontend/src/views/DataQuery/StockBatchQuery.vue b/frontend/src/views/DataQuery/StockBatchQuery.vue new file mode 100644 index 0000000..71b4e79 --- /dev/null +++ b/frontend/src/views/DataQuery/StockBatchQuery.vue @@ -0,0 +1,176 @@ + + + + + \ No newline at end of file diff --git a/frontend/src/views/DataQuery/StockKlineQuery.vue b/frontend/src/views/DataQuery/StockKlineQuery.vue new file mode 100644 index 0000000..3249231 --- /dev/null +++ b/frontend/src/views/DataQuery/StockKlineQuery.vue @@ -0,0 +1,270 @@ + + + + + \ No newline at end of file diff --git a/frontend/src/views/DataQuery/index.vue b/frontend/src/views/DataQuery/index.vue index cbb1a07..17ac01a 100644 --- a/frontend/src/views/DataQuery/index.vue +++ b/frontend/src/views/DataQuery/index.vue @@ -1,11 +1,25 @@