整条会话删除功能开发

This commit is contained in:
冯辉
2026-03-16 14:46:36 +08:00
parent 5046e7467f
commit eb324ceada
2 changed files with 128 additions and 35 deletions

View File

@@ -25,17 +25,21 @@
<scroll-view scroll-y :show-scrollbar="false" class="chat-scroll">
<view
class="drawer-rows"
@click="changeDialogue(item)"
v-for="(item, index) in filteredList"
:key="item.id"
>
<view v-if="!item.isTitle" class="drawer-row-container">
<view
v-if="!item.isTitle"
class="drawer-row-list"
:class="{ 'drawer-row-active': item.sessionId === chatSessionID }"
@click="changeDialogue(item)"
>
{{ item.title }}
</view>
<view class="drawer-row-delete" @click.stop="deleteDialogue(item)">
<uni-icons type="trash" size="24" color="#FF4D4F"></uni-icons>
</view>
</view>
<view class="drawer-row-title" v-else>
{{ item.title }}
</view>
@@ -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('该功能正在开发中,敬请期待后续更新!');
}
@@ -284,16 +303,39 @@ footer-height = 98rpx
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
height: 66rpx;
flex: 1
height: 66rpx
line-height: 66rpx
font-size: 28rpx
overflow: hidden
text-overflow: ellipsis
font-weight: 500;
color: #595959;
padding: 0 24rpx
.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;

View File

@@ -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
};
});