From 52cb6b74d5e793dc38fc3ca0b16834c59fecf8ca Mon Sep 17 00:00:00 2001 From: LYFxiaoan Date: Wed, 23 Jul 2025 10:58:20 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8D=AF=E5=93=81=E9=A2=84=E6=B5=8B=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E6=A8=A1=E5=9E=8B=E6=94=B9=E5=88=97=E8=A1=A8=E5=B1=95?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../prediction/ProductPredictionView.vue | 100 ++++++++++-------- prediction_history.db | Bin 233472 -> 266240 bytes server/api.py | 8 +- 3 files changed, 60 insertions(+), 48 deletions(-) diff --git a/UI/src/views/prediction/ProductPredictionView.vue b/UI/src/views/prediction/ProductPredictionView.vue index 279d38f..ad19c34 100644 --- a/UI/src/views/prediction/ProductPredictionView.vue +++ b/UI/src/views/prediction/ProductPredictionView.vue @@ -44,25 +44,7 @@ - - - - - - - - + - + - + - + -
- - - 开始预测 - +
+

📦 可用模型版本

+ + + + + + + + + + + + + + + + + + +
@@ -162,9 +172,7 @@ const form = reactive({ analyze_result: true }) -const canPredict = computed(() => { - return form.product_id && form.model_type && form.version -}) + const fetchModelTypes = async () => { try { @@ -188,9 +196,7 @@ const fetchAvailableVersions = async () => { const response = await axios.get(url) if (response.data.status === 'success') { availableVersions.value = response.data.data.versions || [] - if (response.data.data.latest_version) { - form.version = response.data.data.latest_version - } + // No longer setting a default version, the user will choose from the list. } } catch (error) { availableVersions.value = [] @@ -203,26 +209,29 @@ const handleProductChange = () => { form.model_type = '' form.version = '' availableVersions.value = [] + predictionResult.value = null; } const handleModelTypeChange = () => { form.version = '' + availableVersions.value = [] + predictionResult.value = null; fetchAvailableVersions() } -const startPrediction = async () => { +const startPrediction = async (version) => { + form.version = version; // Keep track of which version is running try { predicting.value = true const payload = { product_id: form.product_id, model_type: form.model_type, - version: form.version, + version: version, future_days: form.future_days, history_lookback_days: form.history_lookback_days, start_date: form.start_date, include_visualization: form.analyze_result, } - // Corrected API endpoint from /api/predict to /api/prediction const response = await axios.post('/api/prediction', payload) if (response.data.status === 'success') { // The backend response may have history_data and prediction_data at the top level @@ -382,13 +391,14 @@ watch([() => form.product_id, () => form.model_type], () => { .model-selection-section h4 { margin-bottom: 16px; } -.prediction-actions { - display: flex; - justify-content: center; +.versions-list-section { margin-top: 20px; padding-top: 20px; border-top: 1px solid #ebeef5; } +.versions-list-section h4 { + margin-bottom: 16px; +} .prediction-chart { margin-top: 20px; } diff --git a/prediction_history.db b/prediction_history.db index 6544b32acf4fae70517e61cc3b1f8c10c8f2c224..1f58e6f181720c8a0ed302850b3742fbee0d310c 100644 GIT binary patch delta 8821 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 delta 282 zcmV+#0pS$K1``K_2q+5*3b+Re295}N57-Xk4!H}353dLR4+{sa3F{5) z1?mek40{H*4~7kK2_6We3KR*M4M+(`1(*o+4Vnx93)crS2i68W2U`za3@Hw03Ox>x z49yCU3tSB!3gHRD2+R&X4iyZf1;Gqb2H*_#3kR+SWeR2qaI=9B4g~}#162W+aD@XT zv%n=k8UaDFKm;HbK??c+56BLl4p|OH4FnAF4BiWJ3ty8QU_z5