ForcePilot/web/src/stores/chatUI.js

83 lines
1.9 KiB
JavaScript

import { defineStore } from 'pinia'
import { ref } from 'vue'
export const useChatUIStore = defineStore('chatUI', () => {
// ==================== 聊天界面 UI 状态 ====================
// 对话列表侧边栏状态
const isSidebarOpen = ref(localStorage.getItem('chat_sidebar_open') !== 'false')
// 加载状态
const creatingNewChat = ref(false)
const isLoadingThreads = ref(false)
const isLoadingMessages = ref(false)
// ==================== AgentView UI 状态 ====================
// 智能体选择弹窗
const agentModalOpen = ref(false)
// 配置侧边栏
const isConfigSidebarOpen = ref(false)
// 更多菜单
const moreMenuOpen = ref(false)
const moreMenuPosition = ref({ x: 0, y: 0 })
// ==================== 方法 ====================
/**
* 切换对话列表侧边栏
*/
function toggleSidebar() {
isSidebarOpen.value = !isSidebarOpen.value
localStorage.setItem('chat_sidebar_open', String(isSidebarOpen.value))
}
/**
* 打开更多菜单
* @param {number} x - X 坐标
* @param {number} y - Y 坐标
*/
function openMoreMenu(x, y) {
moreMenuPosition.value = { x, y }
moreMenuOpen.value = true
}
/**
* 关闭更多菜单
*/
function closeMoreMenu() {
moreMenuOpen.value = false
}
/**
* 重置所有 UI 状态(不包括持久化状态)
*/
function reset() {
creatingNewChat.value = false
isLoadingThreads.value = false
isLoadingMessages.value = false
agentModalOpen.value = false
isConfigSidebarOpen.value = false
moreMenuOpen.value = false
moreMenuPosition.value = { x: 0, y: 0 }
}
return {
// 状态
isSidebarOpen,
creatingNewChat,
isLoadingThreads,
isLoadingMessages,
agentModalOpen,
isConfigSidebarOpen,
moreMenuOpen,
moreMenuPosition,
// 方法
toggleSidebar,
openMoreMenu,
closeMoreMenu,
reset
}
})