2024-12-06 08:55:15 +00:00
|
|
|
|
import { defineStore } from 'pinia'
|
|
|
|
|
import { useDialogueStore } from '@/store'
|
|
|
|
|
import lodash from 'lodash'
|
|
|
|
|
|
2025-02-06 09:01:28 +00:00
|
|
|
|
import { ref } from 'vue'
|
|
|
|
|
import { createGlobalState, useStorage } from '@vueuse/core'
|
|
|
|
|
import { uniStorage } from '@/utils/uniStorage.js'
|
2024-12-06 08:55:15 +00:00
|
|
|
|
|
2024-12-10 03:31:36 +00:00
|
|
|
|
export const useDialogueListStore = createGlobalState(() => {
|
2025-03-15 01:41:11 +00:00
|
|
|
|
// const dialogueList = useStorage('dialogueList', [], uniStorage)
|
2025-03-11 05:58:25 +00:00
|
|
|
|
const dialogueList = ref([])
|
2024-12-10 03:31:36 +00:00
|
|
|
|
const zpagingRef = ref()
|
2024-12-13 05:09:38 +00:00
|
|
|
|
const virtualList = ref([])
|
2024-12-06 08:55:15 +00:00
|
|
|
|
|
2025-02-06 09:01:28 +00:00
|
|
|
|
const getDialogueList = (indexName) => {
|
|
|
|
|
return dialogueList.value.find((item) => item.index_name === indexName)
|
2024-12-10 03:31:36 +00:00
|
|
|
|
}
|
|
|
|
|
|
2025-02-06 09:01:28 +00:00
|
|
|
|
const addDialogueRecord = (newRecords, type = 'add') => {
|
|
|
|
|
console.log(newRecords)
|
2024-12-06 08:55:15 +00:00
|
|
|
|
|
2024-12-10 03:31:36 +00:00
|
|
|
|
const dialogue = lodash.cloneDeep(useDialogueStore())
|
|
|
|
|
if (!dialogue || typeof dialogue !== 'object') return
|
|
|
|
|
// 检查是否已存在相同 index_name 的对话
|
2025-02-06 09:01:28 +00:00
|
|
|
|
const existingIndex = dialogueList.value.findIndex(
|
|
|
|
|
(item) => item.index_name === dialogue.index_name,
|
|
|
|
|
)
|
2024-12-10 03:31:36 +00:00
|
|
|
|
if (existingIndex === -1) {
|
|
|
|
|
// 如果不存在,直接添加
|
|
|
|
|
dialogueList.value.push(dialogue)
|
|
|
|
|
} else {
|
|
|
|
|
// 如果对话存在,处理 records 数组
|
|
|
|
|
const { records = [] } = dialogue
|
2025-02-06 09:01:28 +00:00
|
|
|
|
newRecords.forEach((newRecord) => {
|
2024-12-10 03:31:36 +00:00
|
|
|
|
const recordIndex = dialogueList.value[existingIndex].records.findIndex(
|
2025-02-06 09:01:28 +00:00
|
|
|
|
(record) => record.msg_id === newRecord.msg_id,
|
2024-12-10 03:31:36 +00:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
if (recordIndex === -1) {
|
|
|
|
|
// 如果记录不存在,添加到 records 数组
|
2025-02-06 09:01:28 +00:00
|
|
|
|
if (type === 'add') {
|
2024-12-10 03:31:36 +00:00
|
|
|
|
dialogueList.value[existingIndex].records.push(newRecord)
|
2025-02-06 09:01:28 +00:00
|
|
|
|
} else {
|
2024-12-10 03:31:36 +00:00
|
|
|
|
dialogueList.value[existingIndex].records.unshift(newRecord)
|
|
|
|
|
}
|
2024-12-06 08:55:15 +00:00
|
|
|
|
}
|
2024-12-10 03:31:36 +00:00
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
// 更新除 records 和 index_name 外的其他属性
|
|
|
|
|
const { index_name, records: _, ...updateProps } = dialogue
|
|
|
|
|
dialogueList.value[existingIndex] = {
|
|
|
|
|
...dialogueList.value[existingIndex],
|
2025-02-06 09:01:28 +00:00
|
|
|
|
...updateProps,
|
2024-12-06 08:55:15 +00:00
|
|
|
|
}
|
2024-12-10 03:31:36 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2024-12-06 08:55:15 +00:00
|
|
|
|
|
2025-02-06 09:01:28 +00:00
|
|
|
|
const updateDialogueRecord = (record) => {
|
2024-12-19 03:02:47 +00:00
|
|
|
|
const dialogue = lodash.cloneDeep(useDialogueStore())
|
|
|
|
|
const item = getDialogueList(dialogue.index_name)
|
2025-02-06 09:01:28 +00:00
|
|
|
|
const recordIndex = item.records.findIndex(
|
|
|
|
|
(item) => item.msg_id === record.msg_id,
|
|
|
|
|
)
|
|
|
|
|
if (recordIndex !== -1) {
|
2024-12-19 03:02:47 +00:00
|
|
|
|
item.records[recordIndex] = {
|
|
|
|
|
...item.records[recordIndex],
|
2025-02-06 09:01:28 +00:00
|
|
|
|
...record,
|
2024-12-19 03:02:47 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2025-02-06 09:01:28 +00:00
|
|
|
|
const virtualIndex = virtualList.value.findIndex(
|
|
|
|
|
(item) => item.msg_id === record.msg_id,
|
|
|
|
|
)
|
|
|
|
|
if (virtualIndex !== -1) {
|
2024-12-19 03:02:47 +00:00
|
|
|
|
virtualList.value[virtualIndex] = {
|
|
|
|
|
...virtualList.value[virtualIndex],
|
2025-02-06 09:01:28 +00:00
|
|
|
|
...record,
|
2024-12-19 03:02:47 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-06 09:01:28 +00:00
|
|
|
|
const deleteDialogueRecord = (record) => {
|
2024-12-10 03:31:36 +00:00
|
|
|
|
const dialogue = lodash.cloneDeep(useDialogueStore())
|
|
|
|
|
const item = getDialogueList(dialogue.index_name)
|
2025-02-06 09:01:28 +00:00
|
|
|
|
const recordIndex = item.records.findIndex(
|
|
|
|
|
(item) => item.msg_id === record.msg_id,
|
|
|
|
|
)
|
|
|
|
|
if (recordIndex !== -1) {
|
|
|
|
|
item.records.splice(recordIndex, 1)
|
2024-12-10 03:31:36 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2024-12-06 08:55:15 +00:00
|
|
|
|
|
2025-02-06 09:01:28 +00:00
|
|
|
|
const updateUploadProgress = (id, progress) => {
|
|
|
|
|
const record = virtualList.value.find((item) => item.msg_id === id)
|
|
|
|
|
if (record) {
|
2024-12-10 03:31:36 +00:00
|
|
|
|
record.uploadCurrent = progress
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-12-06 08:55:15 +00:00
|
|
|
|
|
2025-02-06 09:01:28 +00:00
|
|
|
|
const updateZpagingRef = (params) => {
|
|
|
|
|
zpagingRef.value = params
|
2024-12-10 03:31:36 +00:00
|
|
|
|
}
|
2024-12-06 08:55:15 +00:00
|
|
|
|
|
2025-03-07 07:02:53 +00:00
|
|
|
|
const zpagingComplete = (index_name, newRecords) => {
|
|
|
|
|
zpagingRef.value?.complete(lodash.cloneDeep(newRecords).reverse())
|
2024-12-10 03:31:36 +00:00
|
|
|
|
}
|
2024-12-06 08:55:15 +00:00
|
|
|
|
|
2025-02-06 09:01:28 +00:00
|
|
|
|
const addChatRecord = (indexName, item) => {
|
2024-12-10 03:31:36 +00:00
|
|
|
|
const dialogue = lodash.cloneDeep(useDialogueStore())
|
|
|
|
|
if (dialogue?.index_name === indexName) {
|
2025-03-17 08:32:29 +00:00
|
|
|
|
if (item?.file_num) {
|
|
|
|
|
const index = virtualList.value.findIndex(
|
|
|
|
|
(v) => v?.file_num === item?.file_num,
|
|
|
|
|
)
|
|
|
|
|
if (index > -1) {
|
|
|
|
|
// 保持响应性的同时替换整个对象
|
|
|
|
|
virtualList.value.splice(index, 1, {
|
|
|
|
|
...virtualList.value[index], // 保留原有不需要修改的字段
|
|
|
|
|
...item, // 覆盖需要更新的字段
|
|
|
|
|
})
|
|
|
|
|
}
|
2025-03-15 08:44:40 +00:00
|
|
|
|
} else {
|
|
|
|
|
zpagingRef.value?.addChatRecordData(item, false, false)
|
|
|
|
|
}
|
2024-12-10 03:31:36 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2024-12-06 08:55:15 +00:00
|
|
|
|
|
2025-02-06 09:01:28 +00:00
|
|
|
|
const batchDelDialogueRecord = (msgIds) => {
|
2024-12-20 08:59:58 +00:00
|
|
|
|
const dialogue = lodash.cloneDeep(useDialogueStore())
|
|
|
|
|
const item = getDialogueList(dialogue.index_name)
|
2025-02-06 09:01:28 +00:00
|
|
|
|
item.records = item.records.filter((item) => !msgIds.includes(item.msg_id))
|
2024-12-20 08:59:58 +00:00
|
|
|
|
}
|
|
|
|
|
|
2025-02-05 08:22:32 +00:00
|
|
|
|
//删除会话时,同时刪除storage中存儲的會話
|
2025-02-06 09:01:28 +00:00
|
|
|
|
const delDialogueStorage = (indexName) => {
|
|
|
|
|
if (dialogueList?.value?.length > 0) {
|
2025-02-05 08:22:32 +00:00
|
|
|
|
dialogueList.value.forEach((item, index) => {
|
|
|
|
|
if (item?.index_name === indexName) {
|
|
|
|
|
dialogueList.value.splice(index, 1)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-06 09:01:28 +00:00
|
|
|
|
//清空聊天记录时,同时清空本地保存的聊天记录
|
|
|
|
|
const clearDialogueRecord = () => {
|
|
|
|
|
const dialogue = lodash.cloneDeep(useDialogueStore())
|
|
|
|
|
const item = getDialogueList(dialogue.index_name)
|
|
|
|
|
item.records = []
|
|
|
|
|
virtualList.value = []
|
|
|
|
|
}
|
|
|
|
|
|
2024-12-10 03:31:36 +00:00
|
|
|
|
return {
|
|
|
|
|
dialogueList,
|
|
|
|
|
zpagingRef,
|
|
|
|
|
getDialogueList,
|
|
|
|
|
addDialogueRecord,
|
2024-12-19 03:02:47 +00:00
|
|
|
|
updateDialogueRecord,
|
2024-12-10 03:31:36 +00:00
|
|
|
|
deleteDialogueRecord,
|
|
|
|
|
updateUploadProgress,
|
|
|
|
|
updateZpagingRef,
|
|
|
|
|
zpagingComplete,
|
|
|
|
|
addChatRecord,
|
2024-12-19 03:02:47 +00:00
|
|
|
|
virtualList,
|
2024-12-20 08:59:58 +00:00
|
|
|
|
batchDelDialogueRecord,
|
2025-02-06 09:01:28 +00:00
|
|
|
|
delDialogueStorage,
|
|
|
|
|
clearDialogueRecord,
|
2024-12-06 08:55:15 +00:00
|
|
|
|
}
|
|
|
|
|
})
|