Commit 2b46bfd3 authored by Steven杜宇's avatar Steven杜宇

// 对话

parent cadadf54
...@@ -575,7 +575,7 @@ ...@@ -575,7 +575,7 @@
0493B3DC2BA7EFE600AF9393 /* YHCertificateSearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0493B3DB2BA7EFE600AF9393 /* YHCertificateSearchViewController.swift */; }; 0493B3DC2BA7EFE600AF9393 /* YHCertificateSearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0493B3DB2BA7EFE600AF9393 /* YHCertificateSearchViewController.swift */; };
0493B3DE2BA80C2300AF9393 /* YHCertificateFilterButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0493B3DD2BA80C2300AF9393 /* YHCertificateFilterButton.swift */; }; 0493B3DE2BA80C2300AF9393 /* YHCertificateFilterButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0493B3DD2BA80C2300AF9393 /* YHCertificateFilterButton.swift */; };
04943BE82CF0A0B500BF2255 /* submit_page_scroll.gif in Resources */ = {isa = PBXBuildFile; fileRef = 04943BE72CF0A0B500BF2255 /* submit_page_scroll.gif */; }; 04943BE82CF0A0B500BF2255 /* submit_page_scroll.gif in Resources */ = {isa = PBXBuildFile; fileRef = 04943BE72CF0A0B500BF2255 /* submit_page_scroll.gif */; };
04943BEA2CF1B44100BF2255 /* YHAIChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04943BE92CF1B44100BF2255 /* YHAIChatViewController.swift */; }; 04943BEA2CF1B44100BF2255 /* YHAIMainChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04943BE92CF1B44100BF2255 /* YHAIMainChatViewController.swift */; };
04943BED2CF46B6600BF2255 /* YHAIRequestManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04943BEC2CF46B6600BF2255 /* YHAIRequestManager.swift */; }; 04943BED2CF46B6600BF2255 /* YHAIRequestManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04943BEC2CF46B6600BF2255 /* YHAIRequestManager.swift */; };
04943BF42CF4954800BF2255 /* YHAIMessageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04943BF32CF4954800BF2255 /* YHAIMessageCell.swift */; }; 04943BF42CF4954800BF2255 /* YHAIMessageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04943BF32CF4954800BF2255 /* YHAIMessageCell.swift */; };
04943BF62CF49E3E00BF2255 /* YHAITextInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04943BF52CF49E3E00BF2255 /* YHAITextInputView.swift */; }; 04943BF62CF49E3E00BF2255 /* YHAITextInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04943BF52CF49E3E00BF2255 /* YHAITextInputView.swift */; };
...@@ -677,6 +677,8 @@ ...@@ -677,6 +677,8 @@
04BE39362CF9AFF200BD31DB /* YHFixProductItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04BE39352CF9AFF200BD31DB /* YHFixProductItemView.swift */; }; 04BE39362CF9AFF200BD31DB /* YHFixProductItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04BE39352CF9AFF200BD31DB /* YHFixProductItemView.swift */; };
04BE393C2CF9B67000BD31DB /* ai_chat_loading.json in Resources */ = {isa = PBXBuildFile; fileRef = 04BE393B2CF9B67000BD31DB /* ai_chat_loading.json */; }; 04BE393C2CF9B67000BD31DB /* ai_chat_loading.json in Resources */ = {isa = PBXBuildFile; fileRef = 04BE393B2CF9B67000BD31DB /* ai_chat_loading.json */; };
04BE393E2CF9B67700BD31DB /* ai_chat_input_pause.json in Resources */ = {isa = PBXBuildFile; fileRef = 04BE393D2CF9B67700BD31DB /* ai_chat_input_pause.json */; }; 04BE393E2CF9B67700BD31DB /* ai_chat_input_pause.json in Resources */ = {isa = PBXBuildFile; fileRef = 04BE393D2CF9B67700BD31DB /* ai_chat_input_pause.json */; };
04BE39402CF9B95800BD31DB /* YHAIRobotChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04BE393F2CF9B95800BD31DB /* YHAIRobotChatViewController.swift */; };
04BE39422CF9B99200BD31DB /* YHAIChatConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04BE39412CF9B99200BD31DB /* YHAIChatConfiguration.swift */; };
04C693622B723AB8004C1758 /* YHMySettingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04C693612B723AB8004C1758 /* YHMySettingViewController.swift */; }; 04C693622B723AB8004C1758 /* YHMySettingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04C693612B723AB8004C1758 /* YHMySettingViewController.swift */; };
04C693642B723B56004C1758 /* YHMySettingCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04C693632B723B56004C1758 /* YHMySettingCell.swift */; }; 04C693642B723B56004C1758 /* YHMySettingCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04C693632B723B56004C1758 /* YHMySettingCell.swift */; };
04C85DDF2C364FE9008B20D6 /* YHAboutUsCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04C85DDE2C364FE9008B20D6 /* YHAboutUsCell.swift */; }; 04C85DDF2C364FE9008B20D6 /* YHAboutUsCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04C85DDE2C364FE9008B20D6 /* YHAboutUsCell.swift */; };
...@@ -1634,7 +1636,7 @@ ...@@ -1634,7 +1636,7 @@
0493B3DB2BA7EFE600AF9393 /* YHCertificateSearchViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHCertificateSearchViewController.swift; sourceTree = "<group>"; }; 0493B3DB2BA7EFE600AF9393 /* YHCertificateSearchViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHCertificateSearchViewController.swift; sourceTree = "<group>"; };
0493B3DD2BA80C2300AF9393 /* YHCertificateFilterButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHCertificateFilterButton.swift; sourceTree = "<group>"; }; 0493B3DD2BA80C2300AF9393 /* YHCertificateFilterButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHCertificateFilterButton.swift; sourceTree = "<group>"; };
04943BE72CF0A0B500BF2255 /* submit_page_scroll.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = submit_page_scroll.gif; sourceTree = "<group>"; }; 04943BE72CF0A0B500BF2255 /* submit_page_scroll.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = submit_page_scroll.gif; sourceTree = "<group>"; };
04943BE92CF1B44100BF2255 /* YHAIChatViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHAIChatViewController.swift; sourceTree = "<group>"; }; 04943BE92CF1B44100BF2255 /* YHAIMainChatViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHAIMainChatViewController.swift; sourceTree = "<group>"; };
04943BEC2CF46B6600BF2255 /* YHAIRequestManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHAIRequestManager.swift; sourceTree = "<group>"; }; 04943BEC2CF46B6600BF2255 /* YHAIRequestManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHAIRequestManager.swift; sourceTree = "<group>"; };
04943BF32CF4954800BF2255 /* YHAIMessageCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHAIMessageCell.swift; sourceTree = "<group>"; }; 04943BF32CF4954800BF2255 /* YHAIMessageCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHAIMessageCell.swift; sourceTree = "<group>"; };
04943BF52CF49E3E00BF2255 /* YHAITextInputView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHAITextInputView.swift; sourceTree = "<group>"; }; 04943BF52CF49E3E00BF2255 /* YHAITextInputView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHAITextInputView.swift; sourceTree = "<group>"; };
...@@ -1736,6 +1738,8 @@ ...@@ -1736,6 +1738,8 @@
04BE39352CF9AFF200BD31DB /* YHFixProductItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHFixProductItemView.swift; sourceTree = "<group>"; }; 04BE39352CF9AFF200BD31DB /* YHFixProductItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHFixProductItemView.swift; sourceTree = "<group>"; };
04BE393B2CF9B67000BD31DB /* ai_chat_loading.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = ai_chat_loading.json; sourceTree = "<group>"; }; 04BE393B2CF9B67000BD31DB /* ai_chat_loading.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = ai_chat_loading.json; sourceTree = "<group>"; };
04BE393D2CF9B67700BD31DB /* ai_chat_input_pause.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = ai_chat_input_pause.json; sourceTree = "<group>"; }; 04BE393D2CF9B67700BD31DB /* ai_chat_input_pause.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = ai_chat_input_pause.json; sourceTree = "<group>"; };
04BE393F2CF9B95800BD31DB /* YHAIRobotChatViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHAIRobotChatViewController.swift; sourceTree = "<group>"; };
04BE39412CF9B99200BD31DB /* YHAIChatConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHAIChatConfiguration.swift; sourceTree = "<group>"; };
04C693612B723AB8004C1758 /* YHMySettingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHMySettingViewController.swift; sourceTree = "<group>"; }; 04C693612B723AB8004C1758 /* YHMySettingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHMySettingViewController.swift; sourceTree = "<group>"; };
04C693632B723B56004C1758 /* YHMySettingCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHMySettingCell.swift; sourceTree = "<group>"; }; 04C693632B723B56004C1758 /* YHMySettingCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHMySettingCell.swift; sourceTree = "<group>"; };
04C85DDE2C364FE9008B20D6 /* YHAboutUsCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHAboutUsCell.swift; sourceTree = "<group>"; }; 04C85DDE2C364FE9008B20D6 /* YHAboutUsCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHAboutUsCell.swift; sourceTree = "<group>"; };
...@@ -4000,9 +4004,11 @@ ...@@ -4000,9 +4004,11 @@
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
045F28412CF6028A00520F19 /* YHAITabViewController.swift */, 045F28412CF6028A00520F19 /* YHAITabViewController.swift */,
04943BE92CF1B44100BF2255 /* YHAIChatViewController.swift */, 04943BE92CF1B44100BF2255 /* YHAIMainChatViewController.swift */,
045F28432CF608C100520F19 /* YHAIServiceListViewController.swift */, 045F28432CF608C100520F19 /* YHAIServiceListViewController.swift */,
04BE393F2CF9B95800BD31DB /* YHAIRobotChatViewController.swift */,
04943BEC2CF46B6600BF2255 /* YHAIRequestManager.swift */, 04943BEC2CF46B6600BF2255 /* YHAIRequestManager.swift */,
04BE39412CF9B99200BD31DB /* YHAIChatConfiguration.swift */,
); );
path = C; path = C;
sourceTree = "<group>"; sourceTree = "<group>";
...@@ -5980,7 +5986,7 @@ ...@@ -5980,7 +5986,7 @@
045EEEA42B9F171A0022A143 /* YHImageResultViewController.swift in Sources */, 045EEEA42B9F171A0022A143 /* YHImageResultViewController.swift in Sources */,
045EEE812B9F171A0022A143 /* YHPreviewQuestionAndAnswerModel.swift in Sources */, 045EEE812B9F171A0022A143 /* YHPreviewQuestionAndAnswerModel.swift in Sources */,
049D62C02C6F1E6700E811A1 /* YHFamilyInfoWarmTipsView.swift in Sources */, 049D62C02C6F1E6700E811A1 /* YHFamilyInfoWarmTipsView.swift in Sources */,
04943BEA2CF1B44100BF2255 /* YHAIChatViewController.swift in Sources */, 04943BEA2CF1B44100BF2255 /* YHAIMainChatViewController.swift in Sources */,
04C85DDF2C364FE9008B20D6 /* YHAboutUsCell.swift in Sources */, 04C85DDF2C364FE9008B20D6 /* YHAboutUsCell.swift in Sources */,
045EEEB02B9F171A0022A143 /* YHWorkItemView.swift in Sources */, 045EEEB02B9F171A0022A143 /* YHWorkItemView.swift in Sources */,
0468D4222B493A5E00CFB916 /* YHPhoneMessageView.swift in Sources */, 0468D4222B493A5E00CFB916 /* YHPhoneMessageView.swift in Sources */,
...@@ -5994,6 +6000,7 @@ ...@@ -5994,6 +6000,7 @@
04912F7E2CB7B2BA00CC3105 /* YHResignAppointOptionResultCell.swift in Sources */, 04912F7E2CB7B2BA00CC3105 /* YHResignAppointOptionResultCell.swift in Sources */,
A567E5972BD7643D00D5D5A0 /* YHHomeModel.swift in Sources */, A567E5972BD7643D00D5D5A0 /* YHHomeModel.swift in Sources */,
04AF82D82C291E960028CE2A /* YHMatchUserViewModel.swift in Sources */, 04AF82D82C291E960028CE2A /* YHMatchUserViewModel.swift in Sources */,
04BE39402CF9B95800BD31DB /* YHAIRobotChatViewController.swift in Sources */,
0468D4362B57752F00CFB916 /* YHUserModel.swift in Sources */, 0468D4362B57752F00CFB916 /* YHUserModel.swift in Sources */,
040450CF2CC8A0F400D1CFE5 /* YHResignDocumentMultiLineTipsCell.swift in Sources */, 040450CF2CC8A0F400D1CFE5 /* YHResignDocumentMultiLineTipsCell.swift in Sources */,
A567E5982BD7643D00D5D5A0 /* YHHKEventModel.swift in Sources */, A567E5982BD7643D00D5D5A0 /* YHHKEventModel.swift in Sources */,
...@@ -6560,6 +6567,7 @@ ...@@ -6560,6 +6567,7 @@
048097712BA18D66000B9DCA /* YHCertificateSearchBar.swift in Sources */, 048097712BA18D66000B9DCA /* YHCertificateSearchBar.swift in Sources */,
04F243432C9BB3F800DF2C74 /* YHHKRecordsHeaderCell.swift in Sources */, 04F243432C9BB3F800DF2C74 /* YHHKRecordsHeaderCell.swift in Sources */,
04256E172C75BD2700A37BA4 /* YHVisaPaymentTipsCell.swift in Sources */, 04256E172C75BD2700A37BA4 /* YHVisaPaymentTipsCell.swift in Sources */,
04BE39422CF9B99200BD31DB /* YHAIChatConfiguration.swift in Sources */,
045EEEAA2B9F171A0022A143 /* YHWorkExampleViewController.swift in Sources */, 045EEEAA2B9F171A0022A143 /* YHWorkExampleViewController.swift in Sources */,
04256E1F2C7618A800A37BA4 /* YHAppointWarmTipsCell.swift in Sources */, 04256E1F2C7618A800A37BA4 /* YHAppointWarmTipsCell.swift in Sources */,
04256E132C75BD2700A37BA4 /* YHPayMemberContentItems.swift in Sources */, 04256E132C75BD2700A37BA4 /* YHPayMemberContentItems.swift in Sources */,
......
//
// YHAIChatUIConfiguration.swift
// galaxy
//
// Created by Dufet on 2024/11/29.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHAIChatConfiguration {
static let defaultConfig = YHAIChatConfiguration()
func registerMessageGroupCells(_ tableView: UITableView) {
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "UITableViewCell")
tableView.register(YHAIMessageCell.self, forCellReuseIdentifier: YHAIMessageCell.cellReuseIdentifier)
tableView.register(YHAIThinkingMessageCell.self, forCellReuseIdentifier: YHAIThinkingMessageCell.cellReuseIdentifier)
tableView.register(YHProductListMessageCell.self, forCellReuseIdentifier: YHProductListMessageCell.cellReuseIdentifier)
tableView.register(YHFixProductListMessageCell.self, forCellReuseIdentifier: YHFixProductListMessageCell.cellReuseIdentifier)
tableView.register(YHCardMessageCell.self, forCellReuseIdentifier: YHCardMessageCell.cellReuseIdentifier)
}
func getMessageCell(_ msg: YHAIMessage, _ tableView: UITableView, indexPath: IndexPath) -> UITableViewCell {
let msgType = msg.getType()
if msgType == .text {
let cell = tableView.dequeueReusableCell(withIdentifier: YHAIMessageCell.cellReuseIdentifier, for: indexPath) as! YHAIMessageCell
cell.message = msg
return cell
} else if msgType == .thinking {
let cell = tableView.dequeueReusableCell(withIdentifier: YHAIThinkingMessageCell.cellReuseIdentifier, for: indexPath) as! YHAIThinkingMessageCell
return cell
} else if msgType == .productList {
let cell = tableView.dequeueReusableCell(withIdentifier: YHProductListMessageCell.cellReuseIdentifier, for: indexPath) as! YHProductListMessageCell
if let listModel = msg.body.getProductList() {
cell.listModel = listModel
}
return cell
} else if msgType == .fixProductList {
let cell = tableView.dequeueReusableCell(withIdentifier: YHFixProductListMessageCell.cellReuseIdentifier, for: indexPath) as! YHFixProductListMessageCell
if let listModel = msg.body.getFixProductList() {
cell.listModel = listModel
}
return cell
} else if msgType == .card {
let cell = tableView.dequeueReusableCell(withIdentifier: YHCardMessageCell.cellReuseIdentifier, for: indexPath) as! YHCardMessageCell
return cell
}
let defaultCell = tableView.dequeueReusableCell(withIdentifier: "UITableViewCell", for: indexPath)
return defaultCell
}
func handleReceiveMessage(_ res: YHAIMessage?, _ done: Bool, _ messages: inout [YHAIMessage]) {
// 去除loading消息
removeThinkingMessageFromChatList(&messages)
if let res = res {
var find = false
for msg in messages {
if msg.uuid == res.uuid {
let msgType = msg.getType()
if msgType == .text, res.getType() == .text {
// 多个文字需要拼接
find = true
msg.body.contentText += res.body.contentText
}
}
}
if !find {
messages.append(res)
}
} else {
if done { // 思考完成
}
}
}
func removeThinkingMessageFromChatList( _ messages: inout [YHAIMessage]) {
var findIndex = -1
for (index, msg) in messages.enumerated() {
if msg.getType() == .thinking {
findIndex = index
}
}
if findIndex != -1 {
messages.remove(at: findIndex)
}
}
}
...@@ -11,7 +11,7 @@ import Alamofire ...@@ -11,7 +11,7 @@ import Alamofire
import IQKeyboardManagerSwift import IQKeyboardManagerSwift
import JXSegmentedView import JXSegmentedView
class YHAIChatViewController: YHBaseViewController { class YHAIMainChatViewController: YHBaseViewController {
var messages:[YHAIMessage] = [] var messages:[YHAIMessage] = []
...@@ -29,12 +29,7 @@ class YHAIChatViewController: YHBaseViewController { ...@@ -29,12 +29,7 @@ class YHAIChatViewController: YHBaseViewController {
tableView.separatorStyle = .none tableView.separatorStyle = .none
tableView.delegate = self tableView.delegate = self
tableView.dataSource = self tableView.dataSource = self
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "UITableViewCell") YHAIChatConfiguration.defaultConfig.registerMessageGroupCells(tableView)
tableView.register(YHAIMessageCell.self, forCellReuseIdentifier: YHAIMessageCell.cellReuseIdentifier)
tableView.register(YHAIThinkingMessageCell.self, forCellReuseIdentifier: YHAIThinkingMessageCell.cellReuseIdentifier)
tableView.register(YHProductListMessageCell.self, forCellReuseIdentifier: YHProductListMessageCell.cellReuseIdentifier)
tableView.register(YHFixProductListMessageCell.self, forCellReuseIdentifier: YHFixProductListMessageCell.cellReuseIdentifier)
tableView.register(YHCardMessageCell.self, forCellReuseIdentifier: YHCardMessageCell.cellReuseIdentifier)
return tableView return tableView
}() }()
...@@ -44,7 +39,7 @@ class YHAIChatViewController: YHBaseViewController { ...@@ -44,7 +39,7 @@ class YHAIChatViewController: YHBaseViewController {
[weak self] text in [weak self] text in
guard let self = self else { return } guard let self = self else { return }
self.removeThinkingMessage() YHAIChatConfiguration.defaultConfig.removeThinkingMessageFromChatList(&messages)
let question = YHAIMessage.createQuestionMessage(text) let question = YHAIMessage.createQuestionMessage(text)
messages.append(question) messages.append(question)
messages.append(thinkingMessage) messages.append(thinkingMessage)
...@@ -53,7 +48,9 @@ class YHAIChatViewController: YHBaseViewController { ...@@ -53,7 +48,9 @@ class YHAIChatViewController: YHBaseViewController {
YHAIRequestManager.shared.requestAI(botId: "", conversationId: "", question:text) { YHAIRequestManager.shared.requestAI(botId: "", conversationId: "", question:text) {
[weak self] res, done in [weak self] res, done in
guard let self = self else { return } guard let self = self else { return }
self.handleMessage(res, done) YHAIChatConfiguration.defaultConfig.handleReceiveMessage(res, done, &messages)
self.scrollToBottom()
} }
} }
return v return v
...@@ -86,46 +83,6 @@ class YHAIChatViewController: YHBaseViewController { ...@@ -86,46 +83,6 @@ class YHAIChatViewController: YHBaseViewController {
} }
} }
func handleMessage(_ res: YHAIMessage?, _ done: Bool) {
removeThinkingMessage()
if let res = res {
var find = false
for msg in messages {
if msg.uuid == res.uuid {
let msgType = msg.getType()
if msgType == .text, res.getType() == .text {
// 多个文字需要拼接
find = true
msg.body.contentText += res.body.contentText
}
}
}
if !find {
messages.append(res)
}
} else {
if done { // 思考完成
}
}
self.scrollToBottom()
}
func removeThinkingMessage() {
var findIndex = -1
for (index, msg) in messages.enumerated() {
if msg.getType() == .thinking {
findIndex = index
}
}
if findIndex != -1 {
messages.remove(at: findIndex)
}
}
func scrollToBottom() { func scrollToBottom() {
self.tableView.reloadData { self.tableView.reloadData {
let indexPath = IndexPath(row: self.messages.count-1, section: 0) let indexPath = IndexPath(row: self.messages.count-1, section: 0)
...@@ -134,7 +91,7 @@ class YHAIChatViewController: YHBaseViewController { ...@@ -134,7 +91,7 @@ class YHAIChatViewController: YHBaseViewController {
} }
} }
extension YHAIChatViewController: UITableViewDelegate, UITableViewDataSource { extension YHAIMainChatViewController: UITableViewDelegate, UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int { func numberOfSections(in tableView: UITableView) -> Int {
return 1 return 1
...@@ -147,37 +104,9 @@ extension YHAIChatViewController: UITableViewDelegate, UITableViewDataSource { ...@@ -147,37 +104,9 @@ extension YHAIChatViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if 0 <= indexPath.row, indexPath.row < messages.count { if 0 <= indexPath.row, indexPath.row < messages.count {
let msg = messages[indexPath.row] let msg = messages[indexPath.row]
let msgType = msg.getType() let cell = YHAIChatConfiguration.defaultConfig.getMessageCell(msg, tableView, indexPath: indexPath)
return cell
if msgType == .text {
let cell = tableView.dequeueReusableCell(withIdentifier: YHAIMessageCell.cellReuseIdentifier, for: indexPath) as! YHAIMessageCell
cell.message = msg
return cell
} else if msgType == .thinking {
let cell = tableView.dequeueReusableCell(withIdentifier: YHAIThinkingMessageCell.cellReuseIdentifier, for: indexPath) as! YHAIThinkingMessageCell
return cell
} else if msgType == .productList {
let cell = tableView.dequeueReusableCell(withIdentifier: YHProductListMessageCell.cellReuseIdentifier, for: indexPath) as! YHProductListMessageCell
if let listModel = msg.body.getProductList() {
cell.listModel = listModel
}
return cell
} else if msgType == .fixProductList {
let cell = tableView.dequeueReusableCell(withIdentifier: YHFixProductListMessageCell.cellReuseIdentifier, for: indexPath) as! YHFixProductListMessageCell
if let listModel = msg.body.getFixProductList() {
cell.listModel = listModel
}
return cell
} else if msgType == .card {
let cell = tableView.dequeueReusableCell(withIdentifier: YHCardMessageCell.cellReuseIdentifier, for: indexPath) as! YHCardMessageCell
return cell
}
} }
let defaultCell = tableView.dequeueReusableCell(withIdentifier: "UITableViewCell", for: indexPath) let defaultCell = tableView.dequeueReusableCell(withIdentifier: "UITableViewCell", for: indexPath)
...@@ -204,7 +133,7 @@ extension YHAIChatViewController: UITableViewDelegate, UITableViewDataSource { ...@@ -204,7 +133,7 @@ extension YHAIChatViewController: UITableViewDelegate, UITableViewDataSource {
} }
extension YHAIChatViewController: JXSegmentedListContainerViewListDelegate { extension YHAIMainChatViewController: JXSegmentedListContainerViewListDelegate {
func listView() -> UIView { func listView() -> UIView {
return view return view
} }
......
//
// YHAIRobotChatViewController.swift
// galaxy
//
// Created by Dufet on 2024/11/29.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHAIRobotChatViewController: YHBaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destination.
// Pass the selected object to the new view controller.
}
*/
}
...@@ -94,7 +94,7 @@ class YHAITabViewController: YHBaseViewController { ...@@ -94,7 +94,7 @@ class YHAITabViewController: YHBaseViewController {
arrItemVCs.append(vc) arrItemVCs.append(vc)
} else if i == 1 { // 对话 } else if i == 1 { // 对话
let vc = YHAIChatViewController() let vc = YHAIMainChatViewController()
arrItemVCs.append(vc) arrItemVCs.append(vc)
} }
} }
......
...@@ -23,7 +23,7 @@ class YHAIMessageCell: UITableViewCell { ...@@ -23,7 +23,7 @@ class YHAIMessageCell: UITableViewCell {
make.left.greaterThanOrEqualTo(20) make.left.greaterThanOrEqualTo(20)
make.right.equalTo(-20) make.right.equalTo(-20)
make.top.equalTo(20) make.top.equalTo(20)
make.bottom.equalTo(-20) make.bottom.equalTo(0)
} }
} else { } else {
...@@ -33,7 +33,7 @@ class YHAIMessageCell: UITableViewCell { ...@@ -33,7 +33,7 @@ class YHAIMessageCell: UITableViewCell {
make.left.equalTo(20) make.left.equalTo(20)
make.right.lessThanOrEqualTo(-20) make.right.lessThanOrEqualTo(-20)
make.top.equalTo(20) make.top.equalTo(20)
make.bottom.equalTo(-20) make.bottom.equalTo(0)
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment