diff --git a/packageA/pages/chat/chat.vue b/packageA/pages/chat/chat.vue index 56adf5c..4b0e33d 100644 --- a/packageA/pages/chat/chat.vue +++ b/packageA/pages/chat/chat.vue @@ -25,16 +25,20 @@ - - {{ item.title }} + + + {{ item.title }} + + + + {{ item.title }} @@ -166,6 +170,21 @@ const changeDialogue = (item) => { }); } }; + +const deleteDialogue = (item) => { + if (item.sessionId) { + uni.showModal({ + content: '确定删除该会话吗?', + success(res) { + if (res.confirm) { + useChatGroupDBStore().deleteDialogue(item.sessionId); + $api.msg('会话删除成功'); + } + } + }); + } +}; + function updateSetting() { $api.msg('该功能正在开发中,敬请期待后续更新!'); } @@ -271,33 +290,56 @@ footer-height = 98rpx flex: 1 overflow: hidden .drawer-rows - padding: 0 28rpx; - // border-bottom: 2rpx dashed #e8e8e8 - overflow:hidden; //超出的文本隐藏 - text-overflow:ellipsis; //溢出用省略号显示 - white-space:nowrap; //溢出不换行 - .drawer-row-title - color: #A6A6A6; - font-weight: 500; - font-weight: bold; - font-size: 28rpx - padding: 0 24rpx - margin-top: 50rpx - margin-bottom: 16rpx - .drawer-row-list - height: 66rpx; - line-height: 66rpx - font-size: 28rpx - overflow: hidden - text-overflow: ellipsis - font-weight: 500; - color: #595959; - padding: 0 24rpx - .drawer-row-active - .drawer-row-list:active - color: #333333; - background: #F6F6F6; - border-radius: 16rpx 16rpx 16rpx 16rpx; + padding: 0 28rpx; + // border-bottom: 2rpx dashed #e8e8e8 + overflow:hidden; //超出的文本隐藏 + text-overflow:ellipsis; //溢出用省略号显示 + white-space:nowrap; //溢出不换行 + .drawer-row-title + color: #A6A6A6; + font-weight: 500; + font-weight: bold; + font-size: 28rpx + padding: 0 24rpx + margin-top: 50rpx + margin-bottom: 16rpx + .drawer-row-container + display: flex + align-items: center + justify-content: space-between + padding: 0 24rpx + height: 66rpx + + .drawer-row-list + flex: 1 + height: 66rpx + line-height: 66rpx + font-size: 28rpx + overflow: hidden + text-overflow: ellipsis + font-weight: 500; + color: #595959; + + .drawer-row-delete + margin-left: 20rpx + display: flex + align-items: center + justify-content: center + padding: 10rpx + opacity: 0.6 + &:hover + &:active + opacity: 1 + + .drawer-row-active + color: #333333; + background: #F6F6F6; + border-radius: 16rpx 16rpx 16rpx 16rpx; + + .drawer-row-list:active + color: #333333; + background: #F6F6F6; + border-radius: 16rpx 16rpx 16rpx 16rpx; /* 主要内容区域 */ diff --git a/stores/userChatGroupStore.js b/stores/userChatGroupStore.js index 9c6de44..62aabb9 100644 --- a/stores/userChatGroupStore.js +++ b/stores/userChatGroupStore.js @@ -351,6 +351,56 @@ const useChatGroupDBStore = defineStore("messageGroup", () => { } } + // 删除会话 + async function deleteDialogue(sessionId) { + if (!baseDB.isDBReady) await baseDB.initDB(); + + // 删除会话下的所有消息 + const messageList = await baseDB.db.queryByField(massageName.value, 'parentGroupId', sessionId); + for (const message of messageList) { + if (message.id) { + await baseDB.db.delete(massageName.value, message.id); + } + } + + // 删除会话本身 + const sessionList = await baseDB.db.queryByField(tableName.value, 'sessionId', sessionId); + for (const session of sessionList) { + if (session.id) { + await baseDB.db.delete(tableName.value, session.id); + } + } + + // 重新获取所有会话并重新分组 + const allSessions = await baseDB.db.getAll(tableName.value); + if (allSessions.length) { + const [result, lastData] = insertSortData(allSessions); + tabeList.value = result; + } else { + tabeList.value = []; + } + + // 如果删除的是当前会话,切换到第一个会话或清空 + if (chatSessionID.value === sessionId) { + if (tabeList.value.length > 0) { + // 找到第一个非标题的会话 + const firstSession = tabeList.value.find(item => !item.isTitle); + if (firstSession) { + chatSessionID.value = firstSession.sessionId; + await initMessage(firstSession.sessionId); + } else { + // 没有会话了 + chatSessionID.value = ''; + messages.value = []; + } + } else { + // 没有会话了 + chatSessionID.value = ''; + messages.value = []; + } + } + } + return { messages, isTyping, @@ -365,7 +415,8 @@ const useChatGroupDBStore = defineStore("messageGroup", () => { getStearm, getHistory, badFeedback, - deleteMessages + deleteMessages, + deleteDialogue }; });