From 70a8466d9fc33e26f1865bbf04a43d638c5f7361 Mon Sep 17 00:00:00 2001 From: CodeST <694468528@qq.com> Date: Wed, 28 Jan 2026 19:31:27 +0800 Subject: [PATCH] 1 --- keyBoard.xcodeproj/project.pbxproj | 6 + .../AI/message_bg_icon.imageset/Contents.json | 22 ++++ .../message_bg_icon@2x.png | Bin 0 -> 54167 bytes .../message_bg_icon@3x.png | Bin 0 -> 131076 bytes keyBoard/Class/AiTalk/V/KBAIMessageCell.m | 2 +- keyBoard/Class/AiTalk/V/KBPersonaChatCell.m | 48 +++++++- keyBoard/Class/AiTalk/VC/KBAIHomeVC.m | 2 +- .../Class/AiTalk/VC/KBAIMessageChatingVC.m | 109 +++++++++++++----- keyBoard/Class/AiTalk/VC/KBAIMessageListVC.m | 4 +- keyBoard/Class/AiTalk/VC/KBAIMessageVC.m | 22 ++++ 10 files changed, 180 insertions(+), 35 deletions(-) create mode 100644 keyBoard/Assets.xcassets/AI/message_bg_icon.imageset/Contents.json create mode 100644 keyBoard/Assets.xcassets/AI/message_bg_icon.imageset/message_bg_icon@2x.png create mode 100644 keyBoard/Assets.xcassets/AI/message_bg_icon.imageset/message_bg_icon@3x.png diff --git a/keyBoard.xcodeproj/project.pbxproj b/keyBoard.xcodeproj/project.pbxproj index bea2f51..0a51866 100644 --- a/keyBoard.xcodeproj/project.pbxproj +++ b/keyBoard.xcodeproj/project.pbxproj @@ -152,6 +152,7 @@ 048FFD342F29F400005D62AE /* KBAIMessageListVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 048FFD362F29F400005D62AE /* KBAIMessageListVC.m */; }; 048FFD362F29F88E005D62AE /* AIMessageVM.m in Sources */ = {isa = PBXBuildFile; fileRef = 048FFD352F29F88E005D62AE /* AIMessageVM.m */; }; 048FFD372F29F410005D62AE /* KBAIMessageCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 048FFD392F29F410005D62AE /* KBAIMessageCell.m */; }; + 048FFD392F2A24C5005D62AE /* KBAIChatMessageCacheManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 048FFD382F2A24C5005D62AE /* KBAIChatMessageCacheManager.m */; }; 048FFD3C2F29F500005D62AE /* KBLikedCompanionModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 048FFD3B2F29F500005D62AE /* KBLikedCompanionModel.m */; }; 048FFD3F2F29F600005D62AE /* KBChattedCompanionModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 048FFD3E2F29F600005D62AE /* KBChattedCompanionModel.m */; }; 048FFD422F29F700005D62AE /* KBChatSessionResetModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 048FFD412F29F700005D62AE /* KBChatSessionResetModel.m */; }; @@ -569,7 +570,9 @@ 048FFD352F29F400005D62AE /* KBAIMessageListVC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBAIMessageListVC.h; sourceTree = ""; }; 048FFD352F29F88E005D62AE /* AIMessageVM.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AIMessageVM.m; sourceTree = ""; }; 048FFD362F29F400005D62AE /* KBAIMessageListVC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBAIMessageListVC.m; sourceTree = ""; }; + 048FFD372F2A24C5005D62AE /* KBAIChatMessageCacheManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBAIChatMessageCacheManager.h; sourceTree = ""; }; 048FFD382F29F410005D62AE /* KBAIMessageCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBAIMessageCell.h; sourceTree = ""; }; + 048FFD382F2A24C5005D62AE /* KBAIChatMessageCacheManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBAIChatMessageCacheManager.m; sourceTree = ""; }; 048FFD392F29F410005D62AE /* KBAIMessageCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBAIMessageCell.m; sourceTree = ""; }; 048FFD3A2F29F500005D62AE /* KBLikedCompanionModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBLikedCompanionModel.h; sourceTree = ""; }; 048FFD3B2F29F500005D62AE /* KBLikedCompanionModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBLikedCompanionModel.m; sourceTree = ""; }; @@ -1044,6 +1047,8 @@ 048FFD3E2F29F600005D62AE /* KBChattedCompanionModel.m */, 048FFD402F29F700005D62AE /* KBChatSessionResetModel.h */, 048FFD412F29F700005D62AE /* KBChatSessionResetModel.m */, + 048FFD372F2A24C5005D62AE /* KBAIChatMessageCacheManager.h */, + 048FFD382F2A24C5005D62AE /* KBAIChatMessageCacheManager.m */, ); path = M; sourceTree = ""; @@ -2471,6 +2476,7 @@ 04FC970F2EB334F8007BD342 /* KBWebImageManager.m in Sources */, 0498BDDE2EE81508006CC1D5 /* KBShopVM.m in Sources */, 049FB2112EC1F72F00FAB05D /* KBMyListCell.m in Sources */, + 048FFD392F2A24C5005D62AE /* KBAIChatMessageCacheManager.m in Sources */, A1B2D7022EB8C00100000001 /* KBLangTestVC.m in Sources */, 0498BD7B2EE04518006CC1D5 /* KBCharacter.m in Sources */, 04122FB32EC73C0100EF7AB3 /* KBVipReviewListCell.m in Sources */, diff --git a/keyBoard/Assets.xcassets/AI/message_bg_icon.imageset/Contents.json b/keyBoard/Assets.xcassets/AI/message_bg_icon.imageset/Contents.json new file mode 100644 index 0000000..195387b --- /dev/null +++ b/keyBoard/Assets.xcassets/AI/message_bg_icon.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "message_bg_icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "message_bg_icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/keyBoard/Assets.xcassets/AI/message_bg_icon.imageset/message_bg_icon@2x.png b/keyBoard/Assets.xcassets/AI/message_bg_icon.imageset/message_bg_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..83d0d9808a3f5a825ea4c4ae2f12c51598c8ac6b GIT binary patch literal 54167 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 literal 0 HcmV?d00001 diff --git a/keyBoard/Assets.xcassets/AI/message_bg_icon.imageset/message_bg_icon@3x.png b/keyBoard/Assets.xcassets/AI/message_bg_icon.imageset/message_bg_icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..718f2fbe3e1f865351866d7f8a600797fd319a82 GIT binary patch literal 131076 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

&*g1RnCh(&7S#(w3 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 lWxS?IF)%Q&fjX4T3@eFeL(;K literal 0 HcmV?d00001 diff --git a/keyBoard/Class/AiTalk/V/KBAIMessageCell.m b/keyBoard/Class/AiTalk/V/KBAIMessageCell.m index 57c36a8..bf31cb7 100644 --- a/keyBoard/Class/AiTalk/V/KBAIMessageCell.m +++ b/keyBoard/Class/AiTalk/V/KBAIMessageCell.m @@ -25,7 +25,7 @@ self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; if (self) { self.selectionStyle = UITableViewCellSelectionStyleNone; - self.backgroundColor = [UIColor whiteColor]; + self.backgroundColor = [UIColor clearColor]; [self setupSubviews]; } return self; diff --git a/keyBoard/Class/AiTalk/V/KBPersonaChatCell.m b/keyBoard/Class/AiTalk/V/KBPersonaChatCell.m index ea837d8..de82b49 100644 --- a/keyBoard/Class/AiTalk/V/KBPersonaChatCell.m +++ b/keyBoard/Class/AiTalk/V/KBPersonaChatCell.m @@ -16,6 +16,9 @@ #import #import +/// 聊天会话被重置的通知 +static NSString * const KBChatSessionDidResetNotification = @"KBChatSessionDidResetNotification"; + @interface KBPersonaChatCell () /// 背景图 @@ -68,10 +71,20 @@ - (instancetype)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { [self setupUI]; + + // 监听聊天会话重置通知 + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(handleChatSessionReset:) + name:KBChatSessionDidResetNotification + object:nil]; } return self; } +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + /// 关键修复:Cell 复用时不清空数据,避免重复请求 - (void)prepareForReuse { [super prepareForReuse]; @@ -192,8 +205,8 @@ // 如果有缓存,直接显示 if (self.messages.count > 0) { [self.chatView reloadWithMessages:self.messages - hasMoreHistory:self.hasMoreHistory - completion:nil]; + keepOffset:NO + scrollToBottom:YES]; } else { [self.chatView clearMessages]; } @@ -331,6 +344,37 @@ }); } +#pragma mark - 通知处理 + +/// 处理聊天会话被重置的通知 +- (void)handleChatSessionReset:(NSNotification *)notification { + NSNumber *companionIdObj = notification.userInfo[@"companionId"]; + if (!companionIdObj) { + return; + } + + NSInteger companionId = [companionIdObj integerValue]; + + // 如果是当前显示的人设,清空聊天记录 + if (self.persona && self.persona.personaId == companionId) { + NSLog(@"[KBPersonaChatCell] 收到聊天重置通知:companionId=%ld, 清空聊天记录", (long)companionId); + + // 清空消息数组 + self.messages = [NSMutableArray array]; + self.hasLoadedData = NO; + self.currentPage = 1; + self.hasMoreHistory = YES; + + // 清空聊天视图 + [self.chatView clearMessages]; + + // 显示开场白 + if (self.persona.introText.length > 0) { + [self showOpeningMessage]; + } + } +} + #pragma mark - 3:消息追加 - (void)appendUserMessage:(NSString *)text { diff --git a/keyBoard/Class/AiTalk/VC/KBAIHomeVC.m b/keyBoard/Class/AiTalk/VC/KBAIHomeVC.m index 8932c79..cf37381 100644 --- a/keyBoard/Class/AiTalk/VC/KBAIHomeVC.m +++ b/keyBoard/Class/AiTalk/VC/KBAIHomeVC.m @@ -110,7 +110,7 @@ #pragma mark - 1:控件初始化 - (void)setupUI { - self.voiceInputBarHeight = 120.0; + self.voiceInputBarHeight = 80.0; self.baseInputBarBottomSpacing = KB_TABBAR_HEIGHT; [self.view addSubview:self.collectionView]; [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) { diff --git a/keyBoard/Class/AiTalk/VC/KBAIMessageChatingVC.m b/keyBoard/Class/AiTalk/VC/KBAIMessageChatingVC.m index 066ca75..d2d39a5 100644 --- a/keyBoard/Class/AiTalk/VC/KBAIMessageChatingVC.m +++ b/keyBoard/Class/AiTalk/VC/KBAIMessageChatingVC.m @@ -9,8 +9,12 @@ #import "AiVM.h" #import "KBChattedCompanionModel.h" #import "KBHUD.h" +#import "KBAIChatMessageCacheManager.h" #import +/// 聊天会话被重置的通知 +static NSString * const KBChatSessionDidResetNotification = @"KBChatSessionDidResetNotification"; + @interface KBAIMessageChatingVC () @property (nonatomic, strong) AiVM *viewModel; @@ -54,10 +58,11 @@ NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:point]; if (indexPath) { - self.longPressIndexPath = indexPath; - // 在手指位置显示删除按钮 [self showDeleteButtonAtPoint:point]; + + // 在 showDeleteButtonAtPoint 之后再设置,避免被 hideDeleteButton 清空 + self.longPressIndexPath = indexPath; } } } @@ -65,12 +70,14 @@ - (void)handleTapGesture:(UITapGestureRecognizer *)gesture { // 点击其他地方隐藏删除按钮 if (self.deleteButton && !self.deleteButton.hidden) { - CGPoint point = [gesture locationInView:self.view]; - CGPoint buttonPoint = [gesture locationInView:self.deleteButton]; + CGPoint pointInButton = [gesture locationInView:self.deleteButton]; // 如果点击的不是删除按钮,则隐藏 - if (!CGRectContainsPoint(self.deleteButton.bounds, buttonPoint)) { + if (!CGRectContainsPoint(self.deleteButton.bounds, pointInButton)) { + NSLog(@"[KBAIMessageChatingVC] 点击了删除按钮外部,隐藏按钮"); [self hideDeleteButton]; + } else { + NSLog(@"[KBAIMessageChatingVC] 点击了删除按钮内部,不隐藏"); } } } @@ -155,13 +162,75 @@ } - (void)deleteButtonTapped { - if (self.longPressIndexPath) { - // 隐藏按钮 - [self hideDeleteButton]; - - // 执行删除 - [self deleteItemAtIndexPath:self.longPressIndexPath]; + if (!self.longPressIndexPath) { + return; } + + // 保存 indexPath,因为后面会清空 + NSIndexPath *indexPath = self.longPressIndexPath; + + // 获取要删除的数据 + if (indexPath.row >= self.chattedList.count) { + NSLog(@"[KBAIMessageChatingVC] 错误:索引越界,row=%ld, count=%ld", + (long)indexPath.row, (long)self.chattedList.count); + [self hideDeleteButton]; + return; + } + + KBChattedCompanionModel *model = self.chattedList[indexPath.row]; + NSInteger companionId = model.companionId; + + NSLog(@"[KBAIMessageChatingVC] 开始删除聊天记录:companionId=%ld, name=%@", + (long)companionId, model.name); + + // 隐藏删除按钮 + [self hideDeleteButton]; + + // 显示加载提示 + [KBHUD show]; + + __weak typeof(self) weakSelf = self; + + // 调用清空聊天会话的 API + [self.viewModel resetChatSessionWithCompanionId:companionId + completion:^(KBChatSessionResetResponse * _Nullable response, NSError * _Nullable error) { + dispatch_async(dispatch_get_main_queue(), ^{ + [KBHUD dismiss]; + + if (error) { + NSLog(@"[KBAIMessageChatingVC] 删除失败:%@", error.localizedDescription); + [KBHUD showError:@"删除失败,请重试"]; + return; + } + + NSLog(@"[KBAIMessageChatingVC] ✅ API 调用成功,开始清理本地数据"); + + // 1. 删除本地列表数据 + if (indexPath.row < weakSelf.chattedList.count) { + [weakSelf.chattedList removeObjectAtIndex:indexPath.row]; + } + if (indexPath.row < weakSelf.dataArray.count) { + [weakSelf.dataArray removeObjectAtIndex:indexPath.row]; + } + + // 2. 更新 TableView(带动画) + [weakSelf.tableView deleteRowsAtIndexPaths:@[indexPath] + withRowAnimation:UITableViewRowAnimationLeft]; + + // 3. ✅ 清除缓存管理器中的聊天记录(关键!) + [[KBAIChatMessageCacheManager shared] clearMessagesForCompanionId:companionId]; + NSLog(@"[KBAIMessageChatingVC] ✅ 已清除缓存:companionId=%ld", (long)companionId); + + // 4. 发送通知,通知其他页面(主页)刷新 + [[NSNotificationCenter defaultCenter] postNotificationName:KBChatSessionDidResetNotification + object:nil + userInfo:@{@"companionId": @(companionId)}]; + NSLog(@"[KBAIMessageChatingVC] ✅ 已发送重置通知:companionId=%ld", (long)companionId); + + // 5. 显示成功提示 + [KBHUD showSuccess:@"已删除"]; + }); + }]; } #pragma mark - 2:数据加载 @@ -200,24 +269,6 @@ }]; } -#pragma mark - 删除 - -- (void)deleteItemAtIndexPath:(NSIndexPath *)indexPath { - if (indexPath.row >= self.chattedList.count) { - return; - } - - // TODO: 如果有删除聊天记录的接口,在这里调用 - // 目前先只做本地删除 - if (indexPath.row < self.chattedList.count) { - [self.chattedList removeObjectAtIndex:indexPath.row]; - } - if (indexPath.row < self.dataArray.count) { - [self.dataArray removeObjectAtIndex:indexPath.row]; - } - [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft]; -} - #pragma mark - Lazy Load - (AiVM *)viewModel { diff --git a/keyBoard/Class/AiTalk/VC/KBAIMessageListVC.m b/keyBoard/Class/AiTalk/VC/KBAIMessageListVC.m index 894f37f..0b122d9 100644 --- a/keyBoard/Class/AiTalk/VC/KBAIMessageListVC.m +++ b/keyBoard/Class/AiTalk/VC/KBAIMessageListVC.m @@ -19,7 +19,7 @@ - (void)viewDidLoad { [super viewDidLoad]; - self.view.backgroundColor = [UIColor whiteColor]; + self.view.backgroundColor = [UIColor clearColor]; /// 1:控件初始化 [self setupUI]; @@ -130,7 +130,7 @@ _tableView.delegate = self; _tableView.dataSource = self; _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; - _tableView.backgroundColor = [UIColor whiteColor]; + _tableView.backgroundColor = [UIColor clearColor]; _tableView.showsVerticalScrollIndicator = NO; [_tableView registerClass:[KBAIMessageCell class] forCellReuseIdentifier:@"KBAIMessageCell"]; diff --git a/keyBoard/Class/AiTalk/VC/KBAIMessageVC.m b/keyBoard/Class/AiTalk/VC/KBAIMessageVC.m index 6eea594..1f48937 100644 --- a/keyBoard/Class/AiTalk/VC/KBAIMessageVC.m +++ b/keyBoard/Class/AiTalk/VC/KBAIMessageVC.m @@ -13,6 +13,9 @@ @interface KBAIMessageVC () +/// 背景图 +@property (nonatomic, strong) UIImageView *backgroundImageView; + /// 分类标签视图 @property (nonatomic, strong) JXCategoryTitleView *categoryView; @@ -45,6 +48,14 @@ #pragma mark - 1:控件初始化 - (void)setupUI { + // 添加背景图 +// [self.view addSubview:self.backgroundImageView]; + self.kb_navView.backgroundColor = [UIColor clearColor]; + [self.view insertSubview:self.backgroundImageView belowSubview:self.kb_navView]; + [self.backgroundImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.equalTo(self.view); + }]; + // 隐藏默认导航栏标题 self.kb_titleLabel.hidden = YES; @@ -74,6 +85,7 @@ // 关联 categoryView 和 listContainerView self.categoryView.listContainer = self.listContainerView; + self.listContainerView.backgroundColor = [UIColor clearColor]; // 初始状态:默认选中第一个 tab (Thumbs Up),允许左右滑动切换 // self.listContainerView.scrollView.scrollEnabled = YES; @@ -115,6 +127,16 @@ #pragma mark - Lazy Load +- (UIImageView *)backgroundImageView { + if (!_backgroundImageView) { + _backgroundImageView = [[UIImageView alloc] init]; + _backgroundImageView.image = [UIImage imageNamed:@"message_bg_icon"]; + _backgroundImageView.contentMode = UIViewContentModeScaleAspectFill; + _backgroundImageView.clipsToBounds = YES; + } + return _backgroundImageView; +} + - (NSArray *)titles { if (!_titles) { _titles = @[KBLocalized(@"Thumbs Up"), KBLocalized(@"Chatting")];