import { defineStore } from 'pinia' import { ref } from 'vue' import axios from 'axios' const api = axios.create({ baseURL: '/api', timeout: 30000 }) export const useChatStore = defineStore('chat', () => { const messages = ref([]) const isLoading = ref(false) const currentSession = ref(null) // Mock responses for when backend is not available const mockResponses = { '城市生命线': '城市生命线是指城市中维持城市正常运转的关键基础设施系统,包括供水、供电、供气、通信、交通等系统。这些系统如同城市的"生命线",一旦发生故障,将对城市运行和居民生活产生重大影响。', '关键设施': '城市生命线关键设施包括:\n1. 供水系统:水厂、管网、加压站\n2. 供电系统:变电站、配电网\n3. 供气系统:门站、调压站、管网\n4. 通信系统:基站、光纤网络\n5. 交通系统:道路、桥梁、隧道', '消防安全': '消防安全隐患常见问题及处理措施:\n1. 消防通道堵塞 - 立即清理,保持畅通\n2. 灭火器过期 - 及时更换检修\n3. 电气线路老化 - 专业检测更换\n4. 易燃物品堆放 - 规范存储管理\n5. 消防设施损坏 - 定期检查维护', '排水': '如何平衡排水能力和生态环境保护:\n1. 采用海绵城市理念,增加透水面积\n2. 建设生态调蓄池,减缓雨水径流\n3. 推广透水铺装,促进雨水下渗\n4. 保护自然水系,维护生态平衡\n5. 雨污分流改造,提高污水处理效率' } const getMockResponse = (input) => { for (const [key, value] of Object.entries(mockResponses)) { if (input.includes(key)) { return value } } return `您好!关于"${input}"的问题,我正在为您查询相关资料。作为城市生命线智能助手,我可以帮助您:\n\n1. 查询城市生命线相关知识\n2. 识别潜在安全隐患\n3. 编制应急预案\n4. 撰写公文报告\n\n请问还有什么可以帮助您的?` } const sendMessage = async (content) => { isLoading.value = true try { const response = await api.post('/chat/send', { content, role: 'user', sessionId: currentSession.value }) return response.data } catch (error) { console.log('Backend not available, using mock response') // Return mock response when backend is not available return { id: Date.now().toString(), content: getMockResponse(content), role: 'assistant', timestamp: new Date().toISOString() } } finally { isLoading.value = false } } const getHistory = async () => { try { const response = await api.get('/chat/history') messages.value = response.data return response.data } catch (error) { console.log('Backend not available') return [] } } const getSuggestions = async () => { try { const response = await api.get('/chat/suggestions') return response.data } catch (error) { return [ '城市生命线关键设施有哪些?', '消防安全隐患常见问题以及处理措施有哪些?', '如何平衡排水能力和生态环境保护?' ] } } const newChat = async () => { try { await api.post('/chat/new') messages.value = [] currentSession.value = Date.now().toString() } catch (error) { messages.value = [] currentSession.value = Date.now().toString() } } return { messages, isLoading, currentSession, sendMessage, getHistory, getSuggestions, newChat } })