feat: 多会话基础逻辑梳理
parent
33c02cfe10
commit
de34af8747
@ -0,0 +1,30 @@
|
|||||||
|
import { useHistoryStore } from '@/store'
|
||||||
|
|
||||||
|
export function useChat() {
|
||||||
|
const historyStore = useHistoryStore()
|
||||||
|
|
||||||
|
function addChat(message: string, args?: { reversal?: boolean; error?: boolean; options?: Chat.ChatOptions }) {
|
||||||
|
if (historyStore.historyChat.length === 0) {
|
||||||
|
historyStore.addHistory({
|
||||||
|
title: message,
|
||||||
|
isEdit: false,
|
||||||
|
data: [],
|
||||||
|
})
|
||||||
|
historyStore.chooseHistory(historyStore.historyChat.length - 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
historyStore.addChat({
|
||||||
|
dateTime: new Date().toLocaleString(),
|
||||||
|
message,
|
||||||
|
reversal: args?.reversal ?? false,
|
||||||
|
error: args?.error ?? false,
|
||||||
|
options: args?.options ?? undefined,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function clearChat() {
|
||||||
|
historyStore.clearChat()
|
||||||
|
}
|
||||||
|
|
||||||
|
return { addChat, clearChat }
|
||||||
|
}
|
@ -1,18 +0,0 @@
|
|||||||
export interface ChatOptions {
|
|
||||||
conversationId?: string
|
|
||||||
parentMessageId?: string
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface ChatProps {
|
|
||||||
dateTime: string
|
|
||||||
message: string
|
|
||||||
reversal?: boolean
|
|
||||||
error?: boolean
|
|
||||||
options?: ChatOptions
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface HistoryChatProps {
|
|
||||||
title: string
|
|
||||||
edit: boolean
|
|
||||||
data: ChatProps[]
|
|
||||||
}
|
|
@ -0,0 +1,21 @@
|
|||||||
|
import { ss } from '@/utils/storage'
|
||||||
|
|
||||||
|
const LOCAL_NAME = 'historyChat'
|
||||||
|
|
||||||
|
export interface HistoryState {
|
||||||
|
historyChat: Chat.HistoryChat[]
|
||||||
|
active: number | null
|
||||||
|
}
|
||||||
|
|
||||||
|
export function defaultSetting() {
|
||||||
|
return { historyChat: [], active: null }
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getLocalHistory() {
|
||||||
|
const localSetting: HistoryState | undefined = ss.get(LOCAL_NAME)
|
||||||
|
return localSetting ?? defaultSetting()
|
||||||
|
}
|
||||||
|
|
||||||
|
export function setLocalHistory(data: HistoryState) {
|
||||||
|
ss.set(LOCAL_NAME, data)
|
||||||
|
}
|
@ -1,12 +1,55 @@
|
|||||||
import { defineStore } from 'pinia'
|
import { defineStore } from 'pinia'
|
||||||
|
import type { HistoryState } from './helper'
|
||||||
|
import { getLocalHistory, setLocalHistory } from './helper'
|
||||||
|
|
||||||
interface HistoryState {
|
export const useHistoryStore = defineStore('history-store', {
|
||||||
list: any[]
|
state: (): HistoryState => getLocalHistory(),
|
||||||
|
getters: {
|
||||||
|
getCurrentChat(state): Chat.Chat[] {
|
||||||
|
if (state.historyChat.length === 0)
|
||||||
|
return []
|
||||||
|
|
||||||
|
if (state.active === null)
|
||||||
|
state.active = state.historyChat.length - 1
|
||||||
|
|
||||||
|
return state.historyChat[state.active].data
|
||||||
|
},
|
||||||
|
},
|
||||||
|
actions: {
|
||||||
|
addChat(data: Chat.Chat) {
|
||||||
|
if (this.active !== null) {
|
||||||
|
this.historyChat[this.active].data.push(data)
|
||||||
|
this.active = this.historyChat.length - 1
|
||||||
|
setLocalHistory(this.$state)
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
export const useHistoryStore = defineStore('history-store', {
|
clearChat() {
|
||||||
state: (): HistoryState => ({
|
if (this.active !== null) {
|
||||||
list: [],
|
this.historyChat[this.active].data = []
|
||||||
}),
|
setLocalHistory(this.$state)
|
||||||
actions: {},
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
chooseHistory(index: number) {
|
||||||
|
this.active = index
|
||||||
|
setLocalHistory(this.$state)
|
||||||
|
},
|
||||||
|
|
||||||
|
addHistory(data: Chat.HistoryChat) {
|
||||||
|
this.historyChat.push(data)
|
||||||
|
this.active = this.historyChat.length - 1
|
||||||
|
setLocalHistory(this.$state)
|
||||||
|
},
|
||||||
|
|
||||||
|
editHistory(index: number, isEdit: boolean) {
|
||||||
|
this.historyChat[index].isEdit = isEdit
|
||||||
|
setLocalHistory(this.$state)
|
||||||
|
},
|
||||||
|
|
||||||
|
removeHistory(index: number) {
|
||||||
|
this.historyChat.splice(index, 1)
|
||||||
|
setLocalHistory(this.$state)
|
||||||
|
},
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
@ -0,0 +1,20 @@
|
|||||||
|
declare namespace Chat{
|
||||||
|
interface ChatOptions {
|
||||||
|
conversationId?: string
|
||||||
|
parentMessageId?: string
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Chat {
|
||||||
|
dateTime: string
|
||||||
|
message: string
|
||||||
|
reversal?: boolean
|
||||||
|
error?: boolean
|
||||||
|
options?: ChatOptions
|
||||||
|
}
|
||||||
|
|
||||||
|
interface HistoryChat {
|
||||||
|
title: string
|
||||||
|
isEdit: boolean
|
||||||
|
data: Chat[]
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue