Browse Source

新增逻辑:当后端数据为空或不全时,不需要渲染页面内容,直接在对话界面返回。

dev
宋杰 3 days ago
parent
commit
6ae3b328a4
  1. 154
      src/views/AiEmotion.vue

154
src/views/AiEmotion.vue

@ -1001,7 +1001,9 @@ async function handleSendMessage(input, onComplete) {
// //
if (!parsedData || !parsedData.market || !parsedData.code) { if (!parsedData || !parsedData.market || !parsedData.code) {
// refuse
// refuse
isLoading.value = false;
isPageLoaded.value = false;
const aiMessage = reactive({ sender: 'ai', text: processRefuseMessage(parsedData.refuse) }); const aiMessage = reactive({ sender: 'ai', text: processRefuseMessage(parsedData.refuse) });
messages.value.push(aiMessage); messages.value.push(aiMessage);
isRotating.value = false; isRotating.value = false;
@ -1094,10 +1096,23 @@ async function handleSendMessage(input, onComplete) {
} else { } else {
// //
isLoading.value = false; isLoading.value = false;
const aiMessage = reactive({ sender: 'ai', text: '数据加载失败,请重试' });
messages.value.push(aiMessage);
// fetchDataResult false fetchData messages
// conclusionResponse
if (!conclusionResponse || !conclusionResponse.data) {
const aiMessage = reactive({ sender: 'ai', text: '数据加载失败,请重试' });
messages.value.push(aiMessage);
}
isRotating.value = false; isRotating.value = false;
messages.value = [...previousMessages, ...messages.value]; messages.value = [...previousMessages, ...messages.value];
//
if (isPageLoaded.value && emotionStore.activeStock && emotionStore.activeStock.apiData) {
nextTick(() => {
renderCharts(emotionStore.activeStock.apiData);
console.log('搜索失败,恢复显示之前股票的图表:', emotionStore.activeStock.stockInfo.name);
});
}
// //
if (onComplete && typeof onComplete === 'function') { if (onComplete && typeof onComplete === 'function') {
onComplete(); onComplete();
@ -1107,11 +1122,36 @@ async function handleSendMessage(input, onComplete) {
return; return;
} }
} catch (error) { } catch (error) {
//
isLoading.value = false;
// false
if (emotionStore.stockList.length > 0 && emotionStore.activeStock) {
isPageLoaded.value = true;
console.log('请求工作流接口失败,但恢复显示之前的股票数据');
//
nextTick(() => {
renderCharts(emotionStore.activeStock.apiData);
console.log('立即恢复显示之前股票的图表:', emotionStore.activeStock.stockInfo.name);
});
} else {
isPageLoaded.value = false;
}
const aiMessage = reactive({ sender: 'ai', text: '请求工作流接口失败,请检查网络连接' }); const aiMessage = reactive({ sender: 'ai', text: '请求工作流接口失败,请检查网络连接' });
messages.value.push(aiMessage); messages.value.push(aiMessage);
// //
isRotating.value = false; isRotating.value = false;
messages.value = [...previousMessages, ...messages.value]; messages.value = [...previousMessages, ...messages.value];
//
if (isPageLoaded.value && emotionStore.activeStock && emotionStore.activeStock.apiData) {
nextTick(() => {
renderCharts(emotionStore.activeStock.apiData);
console.log('请求失败,恢复显示之前股票的图表:', emotionStore.activeStock.stockInfo.name);
});
}
// //
if (onComplete && typeof onComplete === 'function') { if (onComplete && typeof onComplete === 'function') {
onComplete(); onComplete();
@ -1154,7 +1194,37 @@ async function fetchData(code, market, stockName, queryText) {
const stockDataResponse = stockDataResult.data; // const stockDataResponse = stockDataResult.data; //
if (stockDataResponse.code === 200 && stockDataResponse.data) { if (stockDataResponse.code === 200 && stockDataResponse.data) {
//
//
const validation = validateRequiredFields(stockDataResponse.data);
// StockTabs
if (!validation.isValid) {
console.log('API返回数据不完整,缺失字段:', validation.missingFields);
//
isLoading.value = false;
// false
if (emotionStore.stockList.length > 0 && emotionStore.activeStock) {
isPageLoaded.value = true;
console.log('数据验证失败,但恢复显示之前的股票数据');
//
nextTick(() => {
renderCharts(emotionStore.activeStock.apiData);
console.log('立即恢复显示之前股票的图表:', emotionStore.activeStock.stockInfo.name);
});
} else {
isPageLoaded.value = false;
}
const aiMessage = reactive({
sender: 'ai',
text: `数据丢失了,请稍后重试。`
});
messages.value.push(aiMessage);
return false; //
}
// store
const stockData = { const stockData = {
queryText: queryText, queryText: queryText,
stockInfo: { stockInfo: {
@ -1166,21 +1236,72 @@ async function fetchData(code, market, stockName, queryText) {
conclusionData: conclusionData.value, // conclusionData: conclusionData.value, //
timestamp: new Date().toISOString() timestamp: new Date().toISOString()
}; };
// store
// storeStockTabs
emotionStore.addStock(stockData); emotionStore.addStock(stockData);
return true; // return true; //
} else { } else {
//
isLoading.value = false;
// false
if (emotionStore.stockList.length > 0 && emotionStore.activeStock) {
isPageLoaded.value = true;
console.log('API请求失败,但恢复显示之前的股票数据');
//
nextTick(() => {
renderCharts(emotionStore.activeStock.apiData);
console.log('立即恢复显示之前股票的图表:', emotionStore.activeStock.stockInfo.name);
});
} else {
isPageLoaded.value = false;
}
const aiMessage = reactive({ sender: 'ai', text: '图表数据请求失败,请检查网络连接' }); const aiMessage = reactive({ sender: 'ai', text: '图表数据请求失败,请检查网络连接' });
messages.value.push(aiMessage); messages.value.push(aiMessage);
return false; // return false; //
} }
} catch (error) { } catch (error) {
//
isLoading.value = false;
// false
if (emotionStore.stockList.length > 0 && emotionStore.activeStock) {
isPageLoaded.value = true;
console.log('网络异常,但恢复显示之前的股票数据');
//
nextTick(() => {
renderCharts(emotionStore.activeStock.apiData);
console.log('立即恢复显示之前股票的图表:', emotionStore.activeStock.stockInfo.name);
});
} else {
isPageLoaded.value = false;
}
const aiMessage = reactive({ sender: 'ai', text: '图表数据请求失败,请检查网络连接' }); const aiMessage = reactive({ sender: 'ai', text: '图表数据请求失败,请检查网络连接' });
messages.value.push(aiMessage); messages.value.push(aiMessage);
return false; // return false; //
} }
} }
//
function validateRequiredFields(data) {
const requiredFields = ['GSWDJ', 'KLine20', 'QXJMQ', 'QXTDLD', 'WDRL'];
const missingFields = [];
for (const field of requiredFields) {
if (!data[field] ||
(Array.isArray(data[field]) && data[field].length === 0) ||
(typeof data[field] === 'object' && !hasValidData(data[field]))) {
missingFields.push(field);
}
}
return {
isValid: missingFields.length === 0,
missingFields: missingFields
};
}
// //
function hasValidData(obj) { function hasValidData(obj) {
if (!obj || typeof obj !== 'object') { if (!obj || typeof obj !== 'object') {
@ -1236,6 +1357,25 @@ function renderCharts(data) {
// //
const clonedData = JSON.parse(JSON.stringify(data)); const clonedData = JSON.parse(JSON.stringify(data));
//
const validation = validateRequiredFields(clonedData);
//
if (!validation.isValid) {
console.log('关键数据缺失:', validation.missingFields);
const aiMessage = reactive({
sender: 'ai',
text: `数据不完整,缺少以下关键数据:${validation.missingFields.join('、')}。请稍后重试或联系客服。`
});
messages.value.push(aiMessage);
//
isPageLoaded.value = false;
isLoading.value = false;
return; //
}
// //
chartVisibility.value = { chartVisibility.value = {
marketTemperature: !!(clonedData.GSWDJ && clonedData.GSWDJ.length > 0), marketTemperature: !!(clonedData.GSWDJ && clonedData.GSWDJ.length > 0),
@ -1871,13 +2011,13 @@ defineExpose({
right: 0; right: 0;
height: 2px; height: 2px;
background: linear-gradient(90deg, #00d4ff, #0099ff, #00d4ff); background: linear-gradient(90deg, #00d4ff, #0099ff, #00d4ff);
opacity: 0.8;
opacity: 0.8;
} }
&:last-child { &:last-child {
margin-bottom: 0;
margin-bottom: 0;
} }
.conclusion-title { .conclusion-title {

Loading…
Cancel
Save