Commit 937a83aa authored by David黄金龙's avatar David黄金龙

Merge commit '9f53bf9b' into davidhuang

* commit '9f53bf9b': (22 commits)
  首页银河管家样式更改
  因为七鱼的消息有bug,某些消息不处理未读状态,目前根据未读数量unreadCount来处理红点
  从app头像进去app badge状态清零
  控制 30个字符
  处理 一处 \n
  // 我的界面 未读红点显示逻辑
  未读消息状态清空bug修复
  //  消息
  修改 报名appName
  1、 删除一处备注 2、添加一处备注
  //  七鱼
  // 七鱼配置
  //  消息红点增加UAT逻辑
  优化刷新银河管家消息布局更改逻辑,去除os日志
  银河管家增加灰度逻辑控制
  首页银河管家逻辑刷新优化
  //  银河管家入口
  首页逻辑更改
  文件名更改
  //  UI
  ...
parents 01c42b25 9f53bf9b
...@@ -104,6 +104,8 @@ target 'galaxy' do ...@@ -104,6 +104,8 @@ target 'galaxy' do
pod 'DragCardContainer', '1.2.0' pod 'DragCardContainer', '1.2.0'
#列表截图 #列表截图
pod 'TYSnapshotScroll', '0.4.0' pod 'TYSnapshotScroll', '0.4.0'
#七鱼SDK
pod 'QY_iOS_SDK', '9.7.0'
end end
......
This diff is collapsed.
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<Scheme <Scheme
LastUpgradeVersion = "1520" LastUpgradeVersion = "1540"
version = "1.7"> version = "1.7">
<BuildAction <BuildAction
parallelizeBuildables = "YES" parallelizeBuildables = "YES"
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<Scheme <Scheme
LastUpgradeVersion = "1520" LastUpgradeVersion = "1540"
version = "1.7"> version = "1.7">
<BuildAction <BuildAction
parallelizeBuildables = "YES" parallelizeBuildables = "YES"
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<Scheme <Scheme
LastUpgradeVersion = "1520" LastUpgradeVersion = "1540"
version = "1.7"> version = "1.7">
<BuildAction <BuildAction
parallelizeBuildables = "YES" parallelizeBuildables = "YES"
......
...@@ -66,6 +66,15 @@ class AppDelegate: UIResponder, UIApplicationDelegate, WXApiDelegate { ...@@ -66,6 +66,15 @@ class AppDelegate: UIResponder, UIApplicationDelegate, WXApiDelegate {
YHOneKeyLoginManager.shared.configOneKeyLogin() YHOneKeyLoginManager.shared.configOneKeyLogin()
YHOSSManager.share.getOSSID() YHOSSManager.share.getOSSID()
AGCInstance.startUp()
AGCAppLinking.instance().handle { (link, error) in
let deepLink = link?.deepLink
//TODO: 增加deeplink地址跳转
print(deepLink as Any)
}
// QiYu SDK初始化
YHButlerServiceManager.shared.setupSDK()
//设置主窗口 //设置主窗口
setupRootVC() setupRootVC()
......
...@@ -49,6 +49,7 @@ extension AppDelegate: JPUSHRegisterDelegate { ...@@ -49,6 +49,7 @@ extension AppDelegate: JPUSHRegisterDelegate {
print("deviceToken:\(deviceTokenStr)") print("deviceToken:\(deviceTokenStr)")
JPUSHService.registerDeviceToken(deviceToken) JPUSHService.registerDeviceToken(deviceToken)
YHLoginManager.shared.deviceTokenModel.deviceToken = deviceTokenStr YHLoginManager.shared.deviceTokenModel.deviceToken = deviceTokenStr
YHButlerServiceManager.shared.updateApnsToken(token: deviceToken)
} }
//获取token 失败 //获取token 失败
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { //可选 func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { //可选
...@@ -82,6 +83,7 @@ extension AppDelegate: JPUSHRegisterDelegate { ...@@ -82,6 +83,7 @@ extension AppDelegate: JPUSHRegisterDelegate {
// 请求消息页面通知权限通知 // 请求消息页面通知权限通知
NotificationCenter.default.post(name: YhConstant.YhNotification.didReqeustNotifyPermissionNotification, object: nil) NotificationCenter.default.post(name: YhConstant.YhNotification.didReqeustNotifyPermissionNotification, object: nil)
} }
clearAllUnreadBadge()
YHOSSManager.share.getOSSID() YHOSSManager.share.getOSSID()
} }
...@@ -161,4 +163,14 @@ extension AppDelegate { ...@@ -161,4 +163,14 @@ extension AppDelegate {
} }
} }
} }
private func clearAllUnreadBadge() {
DispatchQueue.main.async {
if #available(iOS 16.0, *) {
UNUserNotificationCenter.current().setBadgeCount(0)
} else {
UIApplication.shared.applicationIconBadgeNumber = 0
}
}
}
} }
...@@ -109,13 +109,7 @@ extension YHTabBarViewController { ...@@ -109,13 +109,7 @@ extension YHTabBarViewController {
} }
} }
} }
@objc func clearAllUnreadBadge() {
DispatchQueue.main.async {
UIApplication.shared.applicationIconBadgeNumber = 0
}
}
func reportDeviceInfo() { func reportDeviceInfo() {
if !YHLoginManager.shared.isLogin() { if !YHLoginManager.shared.isLogin() {
return return
......
//
// YHButlerServiceMessage.swift
// galaxy
//
// Created by alexzzw on 2024/9/5.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
// MARK: - 管家消息简单模型
class YHButlerServiceMessage: NSObject {
var id: String = ""
var content: String = ""
var isRead: Bool = true
var timeStamp: TimeInterval = 0
}
// MARK: - 用于首页显示与否
class YHButlerServiceHomeInfoMessage: NSObject {
var showButler: Bool = false
var serviceMessage: YHButlerServiceMessage?
init(showButler: Bool, serviceMessage: YHButlerServiceMessage? = nil) {
self.showButler = showButler
self.serviceMessage = serviceMessage
super.init()
}
}
//
// YHButlerServiceViewModel.swift
// galaxy
//
// Created by alexzzw on 2024/9/5.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import Foundation
class YHButlerServiceViewModel {
/// 获取透传个人信息
func getUserInfomation(_ id: String, callBackBlock:@escaping (_ dataString: String?, _ error:YHErrorModel?)->()) {
let params: [String : Any] = ["yh_id": id]
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.QiYu.userInfomation
let _ = YHNetRequest.getRequest(url: strUrl, params: params) { json, code in
guard let data = json.data, let jsonData = try? JSONSerialization.data(withJSONObject: data, options: []), let dataString = jsonData.string(encoding: .utf8) else {
callBackBlock(nil, YHErrorModel())
return
}
callBackBlock(dataString, nil)
} failBlock: { err in
callBackBlock(nil, err)
}
}
}
//
// YHButlerServiceManager.swift
// galaxy
//
// Created by alexzzw on 2024/9/4.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
import IQKeyboardManagerSwift
class YHButlerServiceManager: NSObject {
static let shared = YHButlerServiceManager()
private weak var conversationManager = QYSDK.shared().conversationManager()
private lazy var getUserInfoViewModel: YHButlerServiceViewModel = YHButlerServiceViewModel()
var lastMessage: YHButlerServiceMessage?
var unreadCount: Int = 0
private override init() {
super.init()
conversationManager?.setDelegate(self)
NotificationCenter.default.addObserver(self, selector: #selector(loginSuccess), name: YhConstant.YhNotification.didLoginSuccessNotifiction, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(logoutSuccess), name: YhConstant.YhNotification.didLogoutSuccessNotifiction, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(didRevUatParam), name: YhConstant.YhNotification.didRevUatParam, object: nil)
}
deinit {
NotificationCenter.default.removeObserver(self)
}
func setupSDK() {
let qyOption = QYSDKOption(appKey: YhConstant.QiYuSDK.appKey)
qyOption.appName = YhConstant.QiYuSDK.appName
QYSDK.shared().register(with: qyOption)
/*
QYSDK.shared().registerPushMessageNotification { pushMessage in
os_log("#####registerPushMessageNotification %@ %ld %f", (pushMessage?.text ?? ""), (pushMessage?.type.rawValue ?? 0), (pushMessage?.time ?? 0))
printLog("$$$$registerPushMessageNotification \(pushMessage?.text ?? "") \(pushMessage?.type.rawValue ?? 0) \(pushMessage?.time ?? 0)")
}
*/
guard isUatAllowed() else {
return
}
initSDKAccountAndLastMessage()
}
func updateApnsToken(token: Data) {
QYSDK.shared().updateApnsToken(token)
}
@MainActor func gotoButlerServiceSessionVC(sourceTitle: String? = nil, sourceUrl: String? = nil, sessionTitle: String = "银河管家", navigationController: UINavigationController?, completion: @escaping (Bool) -> Void) {
func gotoSessionVC() {
let source = QYSource()
source.title = sourceTitle
source.urlString = sourceUrl
IQKeyboardManager.shared.disabledDistanceHandlingClasses.append(QYSessionViewController.self)
guard let sessionViewController = QYSDK.shared().sessionViewController() else {
completion(false)
return
}
completion(true)
sessionViewController.sessionTitle = sessionTitle
sessionViewController.source = source
sessionViewController.hidesBottomBarWhenPushed = true
navigationController?.pushViewController(sessionViewController)
}
guard let userId = YHLoginManager.shared.userModel?.id, userId.count > 0 else {
completion(false)
return
}
getUserInfoViewModel.getUserInfomation(userId) { [weak self] dataString, error in
self?.updateUserInfo(userId: userId, userData: dataString ?? "", completion: { success in
gotoSessionVC()
})
}
}
}
extension YHButlerServiceManager {
// MARK: - 常用公开方法
/// 灰度打开
func isUatAllowed() -> Bool {
let allowed = YHUatHelper.shared.getUatModuleStatusBy(module: .QiYu_Service) == 1
//TODO: for test Alex
return allowed || true
}
/// 初始化SDK用户信息
func initSDKAccountAndLastMessage() {
updateSDKAccountInfo(completion: { [weak self] _ in
self?.lastMessage = self?.getLastMessage()
})
}
/// 必须在初始化后调用
func getLastMessage() -> YHButlerServiceMessage? {
guard let message = getSessionList().last else {
return nil
}
return YHButlerServiceMessageHandler.handleSessionMessage(sessionMessage: message)
}
}
extension YHButlerServiceManager {
// MARK: - 私有方法以及登录登出的处理逻辑
@objc private func didRevUatParam() {
guard isUatAllowed() else {
return
}
initSDKAccountAndLastMessage()
}
@objc private func loginSuccess() {
guard isUatAllowed() else {
return
}
initSDKAccountAndLastMessage()
}
@objc private func logoutSuccess() {
// 如果登出时需要关闭聊天页
/*
if let controller = QYSDK.shared().sessionViewController(), controller.isViewLoaded && controller.view.window != nil {
controller.closeSession(true) { _, _ in
//
}
}
*/
logoutCurrentUser { _ in
//
}
}
private func updateUserInfo(userId: String, userData: String, completion: @escaping (Bool) -> Void) {
let userInfo = QYUserInfo()
userInfo.userId = userId
userInfo.data = userData
QYSDK.shared().setUserInfo(userInfo) { success, error in
completion(success)
}
}
private func setupInfomationForQiYu(completion: @escaping (Bool) -> Void) {
guard let userId = YHLoginManager.shared.userModel?.id, userId.count > 0 else {
completion(false)
return
}
getUserInfoViewModel.getUserInfomation(userId) { [weak self] dataString, error in
self?.updateUserInfo(userId: userId, userData: dataString ?? "", completion: { success in
completion(success)
})
}
}
/// 启动先判断是否当前登录账号是SDK账号
private func updateSDKAccountInfo(completion: @escaping (Bool) -> Void) {
// 如果未登录直接退出设置
guard let userId = YHLoginManager.shared.userModel?.id, userId.count > 0 else {
completion(false)
return
}
// 如果新旧账号相同,直接设置用户账号信息
guard QYSDK.shared().currentUserID() != userId else {
setupInfomationForQiYu(completion: { done in
completion(done)
})
return
}
// 如果新旧账号不相同,先登出SDK,再用新账号信息写入,
logoutCurrentUser { [weak self] success in
if success {
self?.setupInfomationForQiYu(completion: { done in
completion(done)
})
} else {
completion(success)
}
}
}
private func logoutCurrentUser(completion: @escaping (Bool) -> Void) {
QYSDK.shared().logout { flag in
completion(flag)
}
}
}
extension YHButlerServiceManager {
// MARK: - conversationManager方法
/// 获取所有会话的列表;非平台电商用户,只有一个会话项,平台电商用户,有多个会话项
func getSessionList() -> [QYSessionInfo] {
let list = conversationManager?.getSessionList() ?? []
printLog("$$$$getSessionList \(list.last?.lastMessageText ?? "") \(list.last?.lastMessageType.rawValue ?? 0) \(list.last?.lastMessageTimeStamp ?? 0)")
return list
}
/// 所有的未读数
func allUnreadCount() -> Int {
let count = conversationManager?.allUnreadCount() ?? 0
printLog("$$$$allUnreadCount \(count)")
return count
}
/// 清空未读数
func clearUnreadCount() {
conversationManager?.clearUnreadCount()
// 清空已读消息后刷新最新消息状态
lastMessage = getLastMessage()
printLog("$$$$clearUnreadCount")
unreadCount = 0
NotificationCenter.default.post(name: YhConstant.YhNotification.didQiYuUnReadMsgCountChangeNotification, object: nil)
}
}
extension YHButlerServiceManager: QYConversationManagerDelegate {
// MARK: - QYConversationManagerDelegate
/// 会话列表变化;非平台电商用户,只有一个会话项,平台电商用户,有多个会话项 用这个方法可以拿到最新的完整的消息内容
func onSessionListChanged(_ sessionList: [QYSessionInfo]!) {
printLog("$$$$onSessionListChanged \(sessionList.first?.lastMessageText ?? "") \(sessionList.first?.lastMessageType.rawValue ?? 0) \(sessionList.first?.lastMessageTimeStamp ?? 0) \(sessionList.first?.lastMessage?.messageId ?? "")")
guard let message = sessionList.first else {
return
}
lastMessage = YHButlerServiceMessageHandler.handleSessionMessage(sessionMessage: message)
NotificationCenter.default.post(name: YhConstant.YhNotification.didQiYuReceiveNewMsgNotification, object: nil)
}
/// 接收消息(进聊天页面会刷新, 目前不用这个方法打点记录)
func onReceiveMessage(_ message: QYMessageInfo!) {
printLog("$$$$onReceiveMessage \(message?.text ?? "") \(message?.type.rawValue ?? 0) \(message?.timeStamp ?? 0)")
}
/// 会话未读数变化(进聊天页面会刷新)
func onUnreadCountChanged(_ count: Int) {
printLog("$$$$onUnreadCountChanged \(count)")
unreadCount = count
NotificationCenter.default.post(name: YhConstant.YhNotification.didQiYuUnReadMsgCountChangeNotification, object: nil)
}
}
//
// YHButlerServiceMessageHandler.swift
// galaxy
//
// Created by alexzzw on 2024/9/6.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHButlerServiceMessageHandler: NSObject {
// MARK: - 七鱼消息处理
/// 七鱼消息转成银河需要的类型
static func handleSessionMessage(sessionMessage: QYSessionInfo) -> YHButlerServiceMessage {
// 列表: 暂无消息
// 首页: 您有一条新的消息
let nimMessage = sessionMessage.lastMessage // 网易云信消息
let retMessage = YHButlerServiceMessage()
retMessage.content = getContent(type: sessionMessage.lastMessageType, originalText: sessionMessage.lastMessageText, nimMessage: nimMessage) ?? ""
retMessage.id = nimMessage?.messageId ?? ""
retMessage.timeStamp = sessionMessage.lastMessageTimeStamp
retMessage.isRead = nimMessage?.status == .read
return retMessage
}
}
extension YHButlerServiceMessageHandler {
// MARK: - 私有方法
/// 消息内容简单处理
static private func getContent(type: QYMessageType, originalText: String?, nimMessage: NIMMessage?) -> String? {
var text: String = ""
switch type {
case .audio:
text = "[语音]"
if let audioMessage = nimMessage?.messageObject as? NIMAudioObject {
let duration = audioMessage.duration
if duration > 0 {
let seconds = (duration + 999) / 1000
text += "\(seconds)″"
}
}
case .text:
text = originalText ?? ""
case .image:
text = "[图片]"
case .video:
text = "[视频]"
case .file:
text = "[文件]"
case .custom:
text = originalText ?? ""
@unknown default:
text = originalText ?? ""
}
return text
}
}
...@@ -251,7 +251,12 @@ extension YHHomeHoldViewPageViewController { ...@@ -251,7 +251,12 @@ extension YHHomeHoldViewPageViewController {
[weak self] success, error in [weak self] success, error in
guard let self = self else { return } guard let self = self else { return }
DispatchQueue.main.async { DispatchQueue.main.async {
self.msgUnreadView.unreadCount = self.msgViewModel.unreadTotalCount var unreadCount = self.msgViewModel.unreadTotalCount
if YHButlerServiceManager.shared.isUatAllowed() {
unreadCount = self.msgViewModel.unreadTotalCount + YHButlerServiceManager.shared.unreadCount
}
self.msgUnreadView.unreadCount = unreadCount
} }
} }
} }
...@@ -312,6 +317,10 @@ extension YHHomeHoldViewPageViewController { ...@@ -312,6 +317,10 @@ extension YHHomeHoldViewPageViewController {
NotificationCenter.default.addObserver(self, selector: #selector(clickMsgitem), name: YhConstant.YhNotification.clickHomeMsgNotifiction, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(clickMsgitem), name: YhConstant.YhNotification.clickHomeMsgNotifiction, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(didRefreshMessageCount), name: YhConstant.YhNotification.didQiYuUnReadMsgCountChangeNotification, object: nil)
for i in 0..<arrItemTitles.count { for i in 0..<arrItemTitles.count {
if i == 0 { if i == 0 {
......
...@@ -13,6 +13,8 @@ import SmartCodable ...@@ -13,6 +13,8 @@ import SmartCodable
import JXSegmentedView import JXSegmentedView
class YHHomePageViewController: YHBaseViewController { class YHHomePageViewController: YHBaseViewController {
private var needUpdateMgrItem = false
private var isTopMostAndVisible = true
lazy var viewModel : YHHomePageViewModel = { lazy var viewModel : YHHomePageViewModel = {
let viewModel = YHHomePageViewModel() let viewModel = YHHomePageViewModel()
...@@ -53,17 +55,74 @@ class YHHomePageViewController: YHBaseViewController { ...@@ -53,17 +55,74 @@ class YHHomePageViewController: YHBaseViewController {
//2、请求新的数据 //2、请求新的数据
getData() getData()
//3、接收七鱼推送通知
setupNotification()
} }
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
isTopMostAndVisible = false
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
isTopMostAndVisible = true
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if needUpdateMgrItem {
needUpdateMgrItem = false
updateMgrItem()
}
}
deinit {
NotificationCenter.default.removeObserver(self)
}
lazy var homeHeaderView: YHHomeHeadView = { lazy var homeHeaderView: YHHomeHeadView = {
let view = YHHomeHeadView() let view = YHHomeHeadView()
view.galaxyManagerItemClickEvent = { [weak self] in
YHHUD.show(.progress(message: "加载中..."))
self?.gotoYinHeManager(completion: { [weak self] success in
guard let self = self else {
return
}
YHHUD.hide()
if success {
// 需要回到页面再刷新已读,因为不在当前页
self.needUpdateMgrItem = true
}
})
}
return view return view
}() }()
} }
//MARK: - 私有方法 //MARK: - 私有方法
private extension YHHomePageViewController { private extension YHHomePageViewController {
func updateMgrItem() {
// 页面已经加载了
guard view.window != nil, isViewLoaded, homeHeaderView.superview != nil else {
return
}
guard YHButlerServiceManager.shared.isUatAllowed(), YHLoginManager.shared.isLogin() else {
return
}
needUpdateMgrItem = false
let showButler = true
// 不获取最新消息内容了
// let serviceMessage = YHButlerServiceManager.shared.getLastMessage()
let serviceMessage = YHButlerServiceMessage()
serviceMessage.content = "一对一专属服务"
// 因为七鱼的消息有bug,某些消息不处理未读状态,目前根据未读数量unreadCount来处理红点
serviceMessage.isRead = YHButlerServiceManager.shared.unreadCount == 0
self.homeHeaderView.orderTipsView.customerServiceMessage = YHButlerServiceHomeInfoMessage(showButler: showButler, serviceMessage: serviceMessage)
}
// 是否展示订单提示视图 // 是否展示订单提示视图
func showOrderTipsView(_ show:Bool) { func showOrderTipsView(_ show:Bool) {
...@@ -250,6 +309,42 @@ private extension YHHomePageViewController { ...@@ -250,6 +309,42 @@ private extension YHHomePageViewController {
self.loadMoreData() self.loadMoreData()
} }
} }
@objc func didQiYuReceiveNewMsg() {
if !isTopMostAndVisible {
// 需要回到页面再刷新已读,因为不在当前页
self.needUpdateMgrItem = true
} else {
updateMgrItem()
}
}
@objc func didRevUatParam() {
guard serviceCenterMainReqVM.arrContactList.count > 0 else {
return
}
updateMgrItem()
}
func setupNotification() {
// 改为不监听消息到来,而是未读消息数量改变
// NotificationCenter.default.addObserver(self, selector: #selector(didQiYuReceiveNewMsg), name: YhConstant.YhNotification.didQiYuReceiveNewMsgNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(didQiYuReceiveNewMsg), name: YhConstant.YhNotification.didQiYuUnReadMsgCountChangeNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(didRevUatParam), name: YhConstant.YhNotification.didRevUatParam, object: nil)
}
}
extension YHHomePageViewController {
//MARK: - 跳银河管家
private func gotoYinHeManager(completion: @escaping (Bool) -> Void) {
guard let userId = YHLoginManager.shared.userModel?.id, userId.count > 0 else {
return
}
YHButlerServiceManager.shared.gotoButlerServiceSessionVC(navigationController: navigationController, completion: { success in
completion(success)
})
}
} }
//MARK: - public方法 //MARK: - public方法
...@@ -276,6 +371,7 @@ extension YHHomePageViewController { ...@@ -276,6 +371,7 @@ extension YHHomePageViewController {
guard let self = self else { return } guard let self = self else { return }
let isShow = self.serviceCenterMainReqVM.arrContactList.count > 0 let isShow = self.serviceCenterMainReqVM.arrContactList.count > 0
if isShow { if isShow {
self.updateMgrItem()
self.viewModel.getBasicInfoForSigner { success, error in self.viewModel.getBasicInfoForSigner { success, error in
if success { if success {
......
//
// YHGalaxyManagerTipsItemView.swift
// galaxy
//
// Created by alexzzw on 2024/9/5.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHGalaxyManagerTipsItemView: UIView {
static let viewH = 52.0
private let dotWidth = 6.0
var buttonClickEvent: (() -> Void)?
private var isMessageRead: Bool = true {
didSet {
dotView.isHidden = isMessageRead
}
}
// 银河管家
private lazy var lableGalaxyMgr: UILabel = {
let lable : UILabel = UILabel()
lable.text = "银河管家"
lable.font = UIFont.PFSC_R(ofSize: 13)
lable.textColor = UIColor.mainTextColor
return lable
}()
// 分割线
private lazy var segmentationView: UIView = {
let view : UIView = UIView()
view.backgroundColor = UIColor.mainTextColor18
return view
}()
// 一对一专属服务
private lazy var lableMessage: UILabel = {
let lable : UILabel = UILabel()
lable.text = "一对一专属服务"
lable.font = UIFont.PFSC_R(ofSize: 13)
lable.textColor = UIColor.mainTextColor70
lable.lineBreakMode = .byTruncatingTail
return lable
}()
private lazy var dotView: UIView = {
let view = UIView()
view.backgroundColor = .failColor
view.layer.cornerRadius = self.dotWidth/2.0
view.isHidden = true
return view
}()
// 右箭头
private lazy var rightIconImageV: UIImageView = {
let imgV : UIImageView = UIImageView()
imgV.contentMode = .scaleAspectFill
imgV.image = UIImage(named: "home_order_tips_right_arrow")
return imgV
}()
override init(frame: CGRect) {
super.init(frame: frame)
setupUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
extension YHGalaxyManagerTipsItemView {
func updateMessageState(didReadMessage: Bool) {
self.isMessageRead = didReadMessage
}
func updateManagerTipsItemView(message: String?, didReadMessage: Bool = true) {
lableMessage.text = message
updateMessageState(didReadMessage: didReadMessage)
}
}
extension YHGalaxyManagerTipsItemView {
@objc private func tapButton(gestureRecognizer:UITapGestureRecognizer) {
buttonClickEvent?()
}
private func setupUI() {
backgroundColor = UIColor(hex: 0xffffff, alpha: 0.65)
layer.borderWidth = 0.5
layer.borderColor = UIColor.white.cgColor
addSubview(lableGalaxyMgr)
lableGalaxyMgr.setContentCompressionResistancePriority(.required, for: .horizontal)
lableGalaxyMgr.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.left.equalTo(12)
make.height.equalTo(18)
make.width.equalTo(60)
}
addSubview(segmentationView)
lableGalaxyMgr.setContentCompressionResistancePriority(.required, for: .horizontal)
segmentationView.snp.makeConstraints { make in
make.left.equalTo(lableGalaxyMgr.snp.right).offset(8)
make.height.equalTo(10)
make.width.equalTo(1)
make.centerY.equalToSuperview()
}
addSubview(rightIconImageV)
rightIconImageV.setContentCompressionResistancePriority(.required, for: .horizontal)
rightIconImageV.snp.makeConstraints { make in
make.right.equalTo(-12)
make.centerY.equalToSuperview()
make.width.height.equalTo(12)
}
addSubview(dotView)
dotView.setContentCompressionResistancePriority(.required, for: .horizontal)
dotView.snp.makeConstraints { make in
make.width.height.equalTo(dotWidth)
make.right.equalTo(rightIconImageV.snp.left).offset(-12)
make.centerY.equalToSuperview()
}
addSubview(lableMessage)
lableMessage.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
lableMessage.snp.makeConstraints { make in
make.left.equalTo(segmentationView.snp.right).offset(8)
make.height.equalTo(18)
make.centerY.equalToSuperview()
make.right.lessThanOrEqualTo(dotView.snp.left).offset(-12)
}
let tap = UITapGestureRecognizer(target: self, action: #selector(tapButton(gestureRecognizer:)))
addGestureRecognizer(tap)
}
}
...@@ -19,6 +19,8 @@ class YHHomeHeadView: UIView { ...@@ -19,6 +19,8 @@ class YHHomeHeadView: UIView {
return YHHomeHeadView.fixViewH + (20 + orderTipsView.tipViewH) + YHHomeHeadView.topMargin return YHHomeHeadView.fixViewH + (20 + orderTipsView.tipViewH) + YHHomeHeadView.topMargin
} }
var galaxyManagerItemClickEvent: (() -> Void)?
//获取headView的具体高度 //获取headView的具体高度
func getHomeHeadViewH(showTips : Bool) -> CGFloat { func getHomeHeadViewH(showTips : Bool) -> CGFloat {
if showTips { if showTips {
...@@ -59,6 +61,9 @@ class YHHomeHeadView: UIView { ...@@ -59,6 +61,9 @@ class YHHomeHeadView: UIView {
//4.优才订单提示视图 - 未登录态不展示 //4.优才订单提示视图 - 未登录态不展示
lazy var orderTipsView: YHOrderTipsView = { lazy var orderTipsView: YHOrderTipsView = {
let view = YHOrderTipsView(frame: .zero) let view = YHOrderTipsView(frame: .zero)
view.galaxyManagerItemClickEvent = { [weak self] in
self?.galaxyManagerItemClickEvent?()
}
view.isHidden = true view.isHidden = true
return view return view
}() }()
......
...@@ -9,25 +9,44 @@ ...@@ -9,25 +9,44 @@
import UIKit import UIKit
import AttributedString import AttributedString
class YHOrderTipsView: UIView { enum YHOrderTipsViewStyleType: Int {
case none = 0
private static let viewH : CGFloat = 91.0 case onlyMgr = 1
private static let viewH2 : CGFloat = 162.0 case onlyOneOrder = 2
private static let viewH3 : CGFloat = 226.0 case mgrAndOrder = 3
var tipViewH : CGFloat { func getHeight() -> CGFloat {
switch self {
guard let arr = arrLastTwoMessage else { case .none:
return YHOrderTipsView.viewH return YHOrderTipsView.viewH
} case .onlyMgr, .onlyOneOrder:
if arr.count > 1 {
return YHOrderTipsView.viewH3
} else if arr.count == 1 {
return YHOrderTipsView.viewH2 return YHOrderTipsView.viewH2
case .mgrAndOrder:
return YHOrderTipsView.viewH3
}
}
}
class YHOrderTipsView: UIView {
fileprivate static let viewH : CGFloat = 91.0
fileprivate static let viewH2 : CGFloat = 162.0
fileprivate static let viewH3 : CGFloat = 226.0
private var orderTipsViewStyle: YHOrderTipsViewStyleType = .none {
didSet {
guard oldValue != orderTipsViewStyle else {
return
}
updateItemsStyle()
} }
return YHOrderTipsView.viewH
} }
var tipViewH : CGFloat {
return orderTipsViewStyle.getHeight()
}
var galaxyManagerItemClickEvent: (() -> Void)?
override init(frame: CGRect) { override init(frame: CGRect) {
super.init(frame: frame) super.init(frame: frame)
...@@ -37,7 +56,6 @@ class YHOrderTipsView: UIView { ...@@ -37,7 +56,6 @@ class YHOrderTipsView: UIView {
addGestureRecognizer(tap) addGestureRecognizer(tap)
} }
var dataModelForBasicInfo : YHSignerInfoModel? { var dataModelForBasicInfo : YHSignerInfoModel? {
didSet { didSet {
updateBasicInfo() updateBasicInfo()
...@@ -47,10 +65,18 @@ class YHOrderTipsView: UIView { ...@@ -47,10 +65,18 @@ class YHOrderTipsView: UIView {
var arrLastTwoMessage : [YHHomeLastMessageModel]? { var arrLastTwoMessage : [YHHomeLastMessageModel]? {
didSet { didSet {
updateLastTwoMessges() updateItems()
firstItem.message = arrLastTwoMessage?.first
} }
} }
var customerServiceMessage: YHButlerServiceHomeInfoMessage? {
didSet {
updateItems()
mgrItem.updateManagerTipsItemView(message: customerServiceMessage?.serviceMessage?.content ?? "一对一专属服务", didReadMessage: customerServiceMessage?.serviceMessage?.isRead ?? true)
}
}
required init?(coder: NSCoder) { required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented") fatalError("init(coder:) has not been implemented")
} }
...@@ -84,34 +110,8 @@ class YHOrderTipsView: UIView { ...@@ -84,34 +110,8 @@ class YHOrderTipsView: UIView {
bkgImageV.snp.makeConstraints { make in bkgImageV.snp.makeConstraints { make in
make.edges.equalToSuperview() make.edges.equalToSuperview()
} }
if let arr = arrLastTwoMessage {
if arr.count > 1 {
firstItem.snp.makeConstraints { make in
make.top.equalTo(lableName.snp.bottom).offset(20)
make.left.equalTo(kMargin)
make.right.equalTo(-20)
make.height.equalTo(YHOrderTipsItemView.viewH)
}
secondItem.snp.makeConstraints { make in
make.top.equalTo(firstItem.snp.bottom).offset(12)
make.left.equalTo(kMargin)
make.right.equalTo(-20)
make.height.equalTo(YHOrderTipsItemView.viewH)
}
} else if arr.count == 1 {
firstItem.snp.makeConstraints { make in
make.top.equalTo(lableName.snp.bottom).offset(20)
make.left.equalTo(kMargin)
make.right.equalTo(-kMargin)
make.height.equalTo(YHOrderTipsItemView.viewH)
}
}
}
} }
//智能助理 //智能助理
lazy var lableTip: UILabel = { lazy var lableTip: UILabel = {
let lable : UILabel = UILabel() let lable : UILabel = UILabel()
...@@ -165,17 +165,19 @@ class YHOrderTipsView: UIView { ...@@ -165,17 +165,19 @@ class YHOrderTipsView: UIView {
lazy var firstItem: YHOrderTipsItemView = { lazy var firstItem: YHOrderTipsItemView = {
let itemView : YHOrderTipsItemView = YHOrderTipsItemView() let itemView : YHOrderTipsItemView = YHOrderTipsItemView()
// itemView.indexItem = 1
itemView.isHidden = true itemView.isHidden = true
return itemView return itemView
}() }()
lazy var secondItem: YHOrderTipsItemView = { private lazy var mgrItem: YHGalaxyManagerTipsItemView = {
let itemView : YHOrderTipsItemView = YHOrderTipsItemView() let itemView: YHGalaxyManagerTipsItemView = YHGalaxyManagerTipsItemView()
// itemView.indexItem = 2
itemView.isHidden = true itemView.isHidden = true
itemView.buttonClickEvent = { [weak self] in
self?.galaxyManagerItemClickEvent?()
}
return itemView return itemView
}() }()
} }
private extension YHOrderTipsView { private extension YHOrderTipsView {
...@@ -215,32 +217,82 @@ private extension YHOrderTipsView { ...@@ -215,32 +217,82 @@ private extension YHOrderTipsView {
layoutIfNeeded() layoutIfNeeded()
} }
func updateLastTwoMessges() { private func updateItems() {
guard let arr = arrLastTwoMessage else { if let mgrMessage = customerServiceMessage, mgrMessage.showButler {
firstItem.isHidden = true mgrItem.isHidden = false
secondItem.isHidden = true } else {
return mgrItem.isHidden = true
} }
if arr.count > 1 {
firstItem.isHidden = false if let arrLastTwoMessage = arrLastTwoMessage, arrLastTwoMessage.count > 0 {
secondItem.isHidden = false
} else if arr.count == 1 {
firstItem.isHidden = false firstItem.isHidden = false
secondItem.isHidden = true
} else { } else {
firstItem.isHidden = true firstItem.isHidden = true
secondItem.isHidden = true
} }
if mgrItem.isHidden == false, firstItem.isHidden == false {
if let first = arrLastTwoMessage?.first, let last = arrLastTwoMessage?.last { orderTipsViewStyle = .mgrAndOrder
firstItem.message = first } else if mgrItem.isHidden == true, firstItem.isHidden == false {
secondItem.message = last orderTipsViewStyle = .onlyOneOrder
} else if mgrItem.isHidden == false, firstItem.isHidden == true {
orderTipsViewStyle = .onlyMgr
} else {
orderTipsViewStyle = .none
} }
setNeedsLayout()
layoutIfNeeded()
} }
private func updateItemsStyle() {
switch orderTipsViewStyle {
case .none:
mgrItem.snp.remakeConstraints { make in
make.top.equalTo(lableName.snp.bottom).offset(20)
make.left.equalTo(kMargin)
make.width.height.equalTo(0)
}
firstItem.snp.remakeConstraints { make in
make.top.equalTo(mgrItem.snp.bottom).offset(20)
make.left.equalTo(kMargin)
make.width.height.equalTo(0)
}
case .onlyMgr:
mgrItem.snp.remakeConstraints { make in
make.top.equalTo(lableName.snp.bottom).offset(20)
make.left.equalTo(kMargin)
make.right.equalTo(-kMargin)
make.height.equalTo(YHGalaxyManagerTipsItemView.viewH)
}
firstItem.snp.remakeConstraints { make in
make.top.equalTo(mgrItem.snp.bottom).offset(20)
make.left.equalTo(kMargin)
make.width.height.equalTo(0)
}
case .onlyOneOrder:
mgrItem.snp.makeConstraints { make in
make.top.equalTo(lableName.snp.bottom).offset(20)
make.left.equalTo(kMargin)
make.width.height.equalTo(0)
}
firstItem.snp.remakeConstraints { make in
make.top.equalTo(lableName.snp.bottom).offset(20)
make.left.equalTo(kMargin)
make.right.equalTo(-kMargin)
make.height.equalTo(YHOrderTipsItemView.viewH)
}
case .mgrAndOrder:
mgrItem.snp.remakeConstraints { make in
make.top.equalTo(lableName.snp.bottom).offset(20)
make.left.equalTo(kMargin)
make.right.equalTo(-kMargin)
make.height.equalTo(YHGalaxyManagerTipsItemView.viewH)
}
firstItem.snp.remakeConstraints { make in
make.top.equalTo(mgrItem.snp.bottom).offset(20)
make.left.equalTo(kMargin)
make.right.equalTo(-kMargin)
make.height.equalTo(YHOrderTipsItemView.viewH)
}
}
}
@objc func tapButton(gestureRecognizer:UITapGestureRecognizer) { @objc func tapButton(gestureRecognizer:UITapGestureRecognizer) {
goTabBarBy(tabType: .service) goTabBarBy(tabType: .service)
...@@ -334,9 +386,8 @@ private extension YHOrderTipsView { ...@@ -334,9 +386,8 @@ private extension YHOrderTipsView {
// make.right.equalTo(-kMargin) // make.right.equalTo(-kMargin)
} }
addSubview(mgrItem)
addSubview(firstItem) addSubview(firstItem)
addSubview(secondItem)
layoutIfNeeded() layoutIfNeeded()
setNeedsLayout() setNeedsLayout()
......
...@@ -571,7 +571,7 @@ extension YHItemView: UITextFieldDelegate { ...@@ -571,7 +571,7 @@ extension YHItemView: UITextFieldDelegate {
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if string.isEmpty == true { if string.isEmpty == true {
var newText = (textField.text! as NSString).replacingCharacters(in: range, with: string) let newText = (textField.text! as NSString).replacingCharacters(in: range, with: string)
var data = dataSource ?? YHItemModel() var data = dataSource ?? YHItemModel()
data.message = newText data.message = newText
if let block = block { if let block = block {
...@@ -580,8 +580,12 @@ extension YHItemView: UITextFieldDelegate { ...@@ -580,8 +580,12 @@ extension YHItemView: UITextFieldDelegate {
return true return true
} }
if string == "\n" {
return false
}
var newText = (textField.text! as NSString).replacingCharacters(in: range, with: string) var newText = (textField.text! as NSString).replacingCharacters(in: range, with: string)
if (dataSource?.id == .id21 || dataSource?.id == .id22 || dataSource?.id == .id23) && newText.count > 30 { if (dataSource?.id == .id21 || dataSource?.id == .id22 || dataSource?.id == .id23 || dataSource?.id == .id1) && newText.count > 30 {
return false return false
} }
......
...@@ -101,6 +101,21 @@ class YHMessageListVC: YHBaseViewController { ...@@ -101,6 +101,21 @@ class YHMessageListVC: YHBaseViewController {
view.backgroundColor = .white view.backgroundColor = .white
view.addSubview(navBar) view.addSubview(navBar)
view.addSubview(tableView) view.addSubview(tableView)
// 银河管家 始终放在第一位
if YHButlerServiceManager.shared.isUatAllowed() {
let mgrMsg = YHMessageInfoModel()
mgrMsg.type = YHMessageType.yinheManager.rawValue
mgrMsg.unreadCount = YHButlerServiceManager.shared.unreadCount
if let lastMsg = YHButlerServiceManager.shared.getLastMessage() {
mgrMsg.lastMessage = lastMsg.content
mgrMsg.lastMessageTime = Int64(lastMsg.timeStamp)
}
msgArr.append(mgrMsg)
}
self.tableView.reloadData()
navBar.snp.makeConstraints { make in navBar.snp.makeConstraints { make in
make.left.right.equalToSuperview() make.left.right.equalToSuperview()
make.top.equalToSuperview().offset(k_Height_statusBar()) make.top.equalToSuperview().offset(k_Height_statusBar())
...@@ -119,6 +134,7 @@ class YHMessageListVC: YHBaseViewController { ...@@ -119,6 +134,7 @@ class YHMessageListVC: YHBaseViewController {
NotificationCenter.default.addObserver(self, selector: #selector(getUnreadMsgList), name: YhConstant.YhNotification.didRequestUnreadMsgListNotification, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(getUnreadMsgList), name: YhConstant.YhNotification.didRequestUnreadMsgListNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(getUnreadMsgList), name: YhConstant.YhNotification.didRequestUnreadMsgListNotification, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(getUnreadMsgList), name: YhConstant.YhNotification.didRequestUnreadMsgListNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(checkNotificationPermisson), name: YhConstant.YhNotification.didReqeustNotifyPermissionNotification, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(checkNotificationPermisson), name: YhConstant.YhNotification.didReqeustNotifyPermissionNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(didRefreshYinHeManagerUnreadMsg), name: YhConstant.YhNotification.didQiYuUnReadMsgCountChangeNotification, object: nil)
} }
deinit { deinit {
...@@ -138,6 +154,7 @@ class YHMessageListVC: YHBaseViewController { ...@@ -138,6 +154,7 @@ class YHMessageListVC: YHBaseViewController {
} }
@objc func didCleanButtonClicked() { @objc func didCleanButtonClicked() {
let unreadMessages = self.msgArr.filter { $0.unreadCount > 0 } let unreadMessages = self.msgArr.filter { $0.unreadCount > 0 }
if unreadMessages.count <= 0 { if unreadMessages.count <= 0 {
YHHUD.flash(message: "暂无未读消息~") YHHUD.flash(message: "暂无未读消息~")
...@@ -159,30 +176,38 @@ class YHMessageListVC: YHBaseViewController { ...@@ -159,30 +176,38 @@ class YHMessageListVC: YHBaseViewController {
self.viewModel.getUnreadMsgList { self.viewModel.getUnreadMsgList {
[weak self] success, error in [weak self] success, error in
guard let self = self else { return } guard let self = self else { return }
msgArr.removeAll()
// 保留第一个元素银河管家,删除其他元素
if msgArr.count > 1 {
msgArr.removeSubrange(1..<msgArr.count)
}
if success { if success {
var hasUnreadMsg = false var hasUnreadMsg = false
// 资料填写
if !self.viewModel.msgList.information.lastMessage.isEmpty {
hasUnreadMsg = true
}
// 证件上传
if !self.viewModel.msgList.certificate.lastMessage.isEmpty {
hasUnreadMsg = true
}
// 文书定稿
if !self.viewModel.msgList.draft.lastMessage.isEmpty {
hasUnreadMsg = true
}
// 文件签字
if !self.viewModel.msgList.signature.lastMessage.isEmpty {
hasUnreadMsg = true
}
// 资料递交 if !isHidden {
if !self.viewModel.msgList.dataSubmission.lastMessage.isEmpty { // 资料填写
hasUnreadMsg = true if !self.viewModel.msgList.information.lastMessage.isEmpty {
hasUnreadMsg = true
}
// 证件上传
if !self.viewModel.msgList.certificate.lastMessage.isEmpty {
hasUnreadMsg = true
}
// 文书定稿
if !self.viewModel.msgList.draft.lastMessage.isEmpty {
hasUnreadMsg = true
}
// 文件签字
if !self.viewModel.msgList.signature.lastMessage.isEmpty {
hasUnreadMsg = true
}
// 资料递交
if !self.viewModel.msgList.dataSubmission.lastMessage.isEmpty {
hasUnreadMsg = true
}
} }
// 身份获批 // 身份获批
...@@ -217,6 +242,7 @@ class YHMessageListVC: YHBaseViewController { ...@@ -217,6 +242,7 @@ class YHMessageListVC: YHBaseViewController {
} }
emptyDataTipsView.isHidden = msgArr.count > 0 emptyDataTipsView.isHidden = msgArr.count > 0
self.tableView.reloadData() self.tableView.reloadData()
didRefreshYinHeManagerUnreadMsg()
} }
} }
} }
...@@ -232,7 +258,7 @@ class YHMessageListVC: YHBaseViewController { ...@@ -232,7 +258,7 @@ class YHMessageListVC: YHBaseViewController {
self.serviceCenterViewModel.getStageInformation(params: ["orderId": orderInfo.id]) { self.serviceCenterViewModel.getStageInformation(params: ["orderId": orderInfo.id]) {
[weak self] success, error in [weak self] success, error in
guard let self = self else { return } guard let self = self else { return }
if self.serviceCenterViewModel.personInfoModel.type == 2 { // 申请结果 if self.serviceCenterViewModel.personInfoModel.type != 1 { // 身份申请完成之后
callback?(true) callback?(true)
} else { } else {
...@@ -250,6 +276,9 @@ class YHMessageListVC: YHBaseViewController { ...@@ -250,6 +276,9 @@ class YHMessageListVC: YHBaseViewController {
func markAllMsgsRead() { func markAllMsgsRead() {
// 清除银河管家未读消息数
YHButlerServiceManager.shared.clearUnreadCount()
YHHUD.show(.progress(message: "清除中...")) YHHUD.show(.progress(message: "清除中..."))
self.viewModel.readMessages(type:nil, msgIds:nil, isAllRead:true) { self.viewModel.readMessages(type:nil, msgIds:nil, isAllRead:true) {
[weak self] success, error in [weak self] success, error in
...@@ -314,6 +343,37 @@ class YHMessageListVC: YHBaseViewController { ...@@ -314,6 +343,37 @@ class YHMessageListVC: YHBaseViewController {
} }
} }
extension YHMessageListVC {
private func gotoYinHeManager(completion: @escaping (Bool) -> Void) {
guard let userId = YHLoginManager.shared.userModel?.id, userId.count > 0 else {
return
}
YHButlerServiceManager.shared.gotoButlerServiceSessionVC(navigationController: navigationController, completion: { success in
completion(success)
})
}
@objc func didRefreshYinHeManagerUnreadMsg() {
if !YHButlerServiceManager.shared.isUatAllowed() {
return
}
for msg in msgArr {
if msg.type == YHMessageType.yinheManager.rawValue { // 银河管家
msg.unreadCount = YHButlerServiceManager.shared.unreadCount
if let lastMsg = YHButlerServiceManager.shared.getLastMessage() {
msg.lastMessage = lastMsg.content
msg.lastMessageTime = Int64(lastMsg.timeStamp)
self.tableView.reloadData()
break
}
}
}
}
}
extension YHMessageListVC { extension YHMessageListVC {
@objc func didEnableNotifyBtnClicked() { @objc func didEnableNotifyBtnClicked() {
...@@ -357,7 +417,22 @@ extension YHMessageListVC: UITableViewDelegate, UITableViewDataSource { ...@@ -357,7 +417,22 @@ extension YHMessageListVC: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if 0 <= indexPath.row && indexPath.row < msgArr.count { if 0 <= indexPath.row && indexPath.row < msgArr.count {
let msgItem = msgArr[indexPath.row] let msgItem = msgArr[indexPath.row]
if msgItem.type == YHMessageType.yinheManager.rawValue { // 进银河管家
self.gotoYinHeManager { success in
YHHUD.hide()
if success {
//YHButlerServiceManager.shared.clearUnreadCount()
if let managerSession = self.msgArr.first, managerSession.type == YHMessageType.yinheManager.rawValue {
managerSession.unreadCount = 0
self.tableView.reloadData()
}
}
}
return
}
let vc = YHMessageDetailListVC() let vc = YHMessageDetailListVC()
vc.type = msgItem.type vc.type = msgItem.type
vc.title = msgItem.getTitle() vc.title = msgItem.getTitle()
......
...@@ -19,12 +19,14 @@ enum YHMessageType: Int { ...@@ -19,12 +19,14 @@ enum YHMessageType: Int {
case identityApproved = 6 // 身份获批 case identityApproved = 6 // 身份获批
case goToHK = 7 // 赴港办证 case goToHK = 7 // 赴港办证
case renewal = 8 // 身份续签 case renewal = 8 // 身份续签
case yinheManager = 9527 // 银河管家
} }
class YHMessageInfoModel: SmartCodable { class YHMessageInfoModel: SmartCodable {
var unreadCount: Int = 0 var unreadCount: Int = 0
var lastMessage: String = "" var lastMessage: String = ""
var lastMessageTime: Int = 0 var lastMessageTime: Int64 = 0
var type: Int = 0 var type: Int = 0
required init() { required init() {
...@@ -39,7 +41,11 @@ class YHMessageInfoModel: SmartCodable { ...@@ -39,7 +41,11 @@ class YHMessageInfoModel: SmartCodable {
} }
func getTitle() -> String { func getTitle() -> String {
if type == YHMessageType.infoFill.rawValue {
if type == YHMessageType.yinheManager.rawValue {
return "银河管家"
} else if type == YHMessageType.infoFill.rawValue {
return "资料填写" return "资料填写"
} else if type == YHMessageType.cerUpload.rawValue { } else if type == YHMessageType.cerUpload.rawValue {
......
...@@ -34,7 +34,10 @@ class YHMessageSessionCell: UITableViewCell { ...@@ -34,7 +34,10 @@ class YHMessageSessionCell: UITableViewCell {
self.nameLabel.text = model.getTitle() self.nameLabel.text = model.getTitle()
if model.type == YHMessageType.infoFill.rawValue { if model.type == YHMessageType.yinheManager.rawValue {
self.iconImgView.image = UIImage(named: "msg_icon_yinhe_manager")
} else if model.type == YHMessageType.infoFill.rawValue {
self.iconImgView.image = UIImage(named: "msg_icon_info_fill") self.iconImgView.image = UIImage(named: "msg_icon_info_fill")
} else if model.type == YHMessageType.cerUpload.rawValue { } else if model.type == YHMessageType.cerUpload.rawValue {
...@@ -75,6 +78,13 @@ class YHMessageSessionCell: UITableViewCell { ...@@ -75,6 +78,13 @@ class YHMessageSessionCell: UITableViewCell {
make.width.equalTo(width) make.width.equalTo(width)
} }
self.iconImgView.snp.updateConstraints { make in
let width = model.type == YHMessageType.yinheManager.rawValue ? 32.0 : 21.0
let height = model.type == YHMessageType.yinheManager.rawValue ? 12.0 : 21.0
make.width.equalTo(width)
make.height.equalTo(height)
}
self.detailLabel.text = !model.lastMessage.isEmpty ? model.lastMessage : "暂无消息".local self.detailLabel.text = !model.lastMessage.isEmpty ? model.lastMessage : "暂无消息".local
self.timeLabel.text = formatTimestamp(Double(model.lastMessageTime)) self.timeLabel.text = formatTimestamp(Double(model.lastMessageTime))
self.timeLabel.isHidden = model.lastMessage.isEmpty self.timeLabel.isHidden = model.lastMessage.isEmpty
......
...@@ -237,10 +237,13 @@ class YHMyViewController: YHBaseViewController, ConstraintRelatableTarget { ...@@ -237,10 +237,13 @@ class YHMyViewController: YHBaseViewController, ConstraintRelatableTarget {
[weak self] success, error in [weak self] success, error in
guard let self = self else { return } guard let self = self else { return }
DispatchQueue.main.async { DispatchQueue.main.async {
let count = self.msgViewModel.unreadTotalCount var unreadCount = self.msgViewModel.unreadTotalCount
if YHButlerServiceManager.shared.isUatAllowed() {
unreadCount = self.msgViewModel.unreadTotalCount + YHButlerServiceManager.shared.unreadCount
}
for item in self.items { for item in self.items {
if item.type == .myMessage { if item.type == .myMessage {
item.isShowRedPoint = count > 0 item.isShowRedPoint = unreadCount > 0
break break
} }
} }
......
...@@ -208,6 +208,24 @@ extension YhConstant { ...@@ -208,6 +208,24 @@ extension YhConstant {
static let kAliLoginDefaultSecretKey = "y4uQwHhb6PBfQVKlHou8SINaWIFHkovMalxWpiSjmV7iree+qKEEZHunaf5VN7d+YmHZIu8th0V1mM+JUCSNqrTT1s/rN1KCu5tWtABgzYuIhHoUtzPMB2NbRoQUF/cJj2DAjpvRQwWibWONTVyvtKUVUqhiL+fbYXM4OzXETetCAykppYUQt2Tzob9Jwz2RwOC7WrU4QyOyoa5dbavOysUjo2yv3oTRVFQbE1wdZBczDWpiqHfqUArZ4py7Q5sVuGvCoCvRcAE=" static let kAliLoginDefaultSecretKey = "y4uQwHhb6PBfQVKlHou8SINaWIFHkovMalxWpiSjmV7iree+qKEEZHunaf5VN7d+YmHZIu8th0V1mM+JUCSNqrTT1s/rN1KCu5tWtABgzYuIhHoUtzPMB2NbRoQUF/cJj2DAjpvRQwWibWONTVyvtKUVUqhiL+fbYXM4OzXETetCAykppYUQt2Tzob9Jwz2RwOC7WrU4QyOyoa5dbavOysUjo2yv3oTRVFQbE1wdZBczDWpiqHfqUArZ4py7Q5sVuGvCoCvRcAE="
}
// MARK: - 七鱼客服系统SDK
struct QiYuSDK {
static let appKey = "7922dbeb48141b15d2ae2e91cc156af5"
// 此处的appName 是在七鱼后台管理系统配置
#if DEBUG
static let appName = "银河港生活iOS-Dev"
#elseif TESTENV
static let appName = "银河港生活iOS"
#elseif UATENV
static let appName = "银河港生活iOS"
#else
static let appName = "银河港生活iOS"
#endif
} }
// MARK: - 通知相关 名称 // MARK: - 通知相关 名称
...@@ -267,6 +285,12 @@ extension YhConstant { ...@@ -267,6 +285,12 @@ extension YhConstant {
// 改变底部tabbar上 分享View的展示状态 // 改变底部tabbar上 分享View的展示状态
public static let changeShareViewStatusOnTabBarNotifiction = Notification.Name(rawValue: "com.yinhe.change.shareView.status") public static let changeShareViewStatusOnTabBarNotifiction = Notification.Name(rawValue: "com.yinhe.change.shareView.status")
// 七鱼有新消息
public static let didQiYuReceiveNewMsgNotification = Notification.Name(rawValue: "com.yinhe.qiyu.receiveNewMsg")
// 七鱼未读消息数量变化
public static let didQiYuUnReadMsgCountChangeNotification = Notification.Name(rawValue: "com.yinhe.qiyu.unReadMsgCountChange")
//获取灰度参数 //获取灰度参数
public static let didRevUatParam = Notification.Name(rawValue: "com.yinhe.didRevUatParam") public static let didRevUatParam = Notification.Name(rawValue: "com.yinhe.didRevUatParam")
......
...@@ -510,4 +510,10 @@ class YHAllApiName { ...@@ -510,4 +510,10 @@ class YHAllApiName {
static let dependentsCheck = "super-app/order/information/dependents/check" static let dependentsCheck = "super-app/order/information/dependents/check"
} }
// 七鱼透传信息获取
struct QiYu {
// 获取个人信息
static let userInfomation = "super-app/qiyu/user/information"
}
} }
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "Group@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "Group@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
...@@ -18,6 +18,9 @@ ...@@ -18,6 +18,9 @@
#import <UserNotifications/UserNotifications.h> #import <UserNotifications/UserNotifications.h>
// 列表截图 // 列表截图
#import "TYSnapshotScroll.h" #import "TYSnapshotScroll.h"
// 七鱼SDK
#import <QYSDK/QYSDK.h>
#import <NIMSDK/NIMMessage.h>
#endif #endif
......
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