wtq 5 сар өмнө
parent
commit
fb89062926
100 өөрчлөгдсөн 2849 нэмэгдсэн , 736 устгасан
  1. 59 19
      ABtong/ABtong.xcodeproj/project.pbxproj
  2. 8 0
      ABtong/ABtong/ABtong.entitlements
  3. 1 1
      ABtong/ABtong/ALLController/JSwebRTC/CustomJitsiLogger.h
  4. 1 1
      ABtong/ABtong/ALLController/JSwebRTC/CustomJitsiLogger.m
  5. 1 1
      ABtong/ABtong/ALLController/JSwebRTC/FloatJSWindow.h
  6. 2 2
      ABtong/ABtong/ALLController/JSwebRTC/FloatJSWindow.m
  7. 1 1
      ABtong/ABtong/ALLController/JSwebRTC/JSGController.h
  8. 23 12
      ABtong/ABtong/ALLController/JSwebRTC/JSGController.m
  9. 160 0
      ABtong/ABtong/ALLController/call/CallControllers.storyboard
  10. 18 0
      ABtong/ABtong/ALLController/call/CallIndexCell.h
  11. 271 0
      ABtong/ABtong/ALLController/call/CallIndexCell.m
  12. 20 0
      ABtong/ABtong/ALLController/call/CallIndexController.h
  13. 267 0
      ABtong/ABtong/ALLController/call/CallIndexController.m
  14. 18 0
      ABtong/ABtong/ALLController/call/CalldetailsCell.h
  15. 235 0
      ABtong/ABtong/ALLController/call/CalldetailsCell.m
  16. 19 0
      ABtong/ABtong/ALLController/call/CalldetailsController.h
  17. 185 0
      ABtong/ABtong/ALLController/call/CalldetailsController.m
  18. 26 0
      ABtong/ABtong/ALLController/call/PhoneKeybord.h
  19. 171 0
      ABtong/ABtong/ALLController/call/PhoneKeybord.m
  20. 335 0
      ABtong/ABtong/ALLController/call/PhoneKeybord.xib
  21. 1 1
      ABtong/ABtong/ALLController/chatCtr/CameraViewController.h
  22. 12 12
      ABtong/ABtong/ALLController/chatCtr/CameraViewController.m
  23. 1 1
      ABtong/ABtong/ALLController/chatCtr/ChatController.h
  24. 100 56
      ABtong/ABtong/ALLController/chatCtr/ChatController.m
  25. 1 1
      ABtong/ABtong/ALLController/chatCtr/ChatListCell.h
  26. 33 20
      ABtong/ABtong/ALLController/chatCtr/ChatListCell.m
  27. 16 16
      ABtong/ABtong/ALLController/chatCtr/ChatListCell.xib
  28. 18 0
      ABtong/ABtong/ALLController/chatCtr/ChatListController.h
  29. 9 9
      ABtong/ABtong/ALLController/chatCtr/ChatListController.m
  30. 1 1
      ABtong/ABtong/ALLController/chatCtr/ChatRecordController.h
  31. 2 2
      ABtong/ABtong/ALLController/chatCtr/ChatRecordController.m
  32. 3 3
      ABtong/ABtong/ALLController/chatCtr/GotoDetailController.h
  33. 6 6
      ABtong/ABtong/ALLController/chatCtr/GotoDetailController.m
  34. 1 1
      ABtong/ABtong/ALLController/chatCtr/MentionTextView.h
  35. 1 1
      ABtong/ABtong/ALLController/chatCtr/MentionTextView.m
  36. 1 1
      ABtong/ABtong/ALLController/chatCtr/chetCell/ChatAtMemberCell.h
  37. 1 1
      ABtong/ABtong/ALLController/chatCtr/chetCell/ChatAtMemberCell.m
  38. 1 1
      ABtong/ABtong/ALLController/chatCtr/chetCell/ChatAtMemberView.h
  39. 13 13
      ABtong/ABtong/ALLController/chatCtr/chetCell/ChatAtMemberView.m
  40. 1 1
      ABtong/ABtong/ALLController/chatCtr/chetCell/ChatBatchView.h
  41. 1 1
      ABtong/ABtong/ALLController/chatCtr/chetCell/ChatBatchView.m
  42. 1 1
      ABtong/ABtong/ALLController/chatCtr/chetCell/ChatFileModel.h
  43. 1 1
      ABtong/ABtong/ALLController/chatCtr/chetCell/ChatFileModel.m
  44. 1 1
      ABtong/ABtong/ALLController/chatCtr/chetCell/ChatLongPressMenuView.h
  45. 61 33
      ABtong/ABtong/ALLController/chatCtr/chetCell/ChatLongPressMenuView.m
  46. 1 1
      ABtong/ABtong/ALLController/chatCtr/chetCell/ChatMessageModel.h
  47. 22 9
      ABtong/ABtong/ALLController/chatCtr/chetCell/ChatMessageModel.m
  48. 1 1
      ABtong/ABtong/ALLController/chatCtr/chetCell/ChatPopoverView.h
  49. 2 5
      ABtong/ABtong/ALLController/chatCtr/chetCell/ChatPopoverView.m
  50. 1 1
      ABtong/ABtong/ALLController/chatCtr/chetCell/ChatQuoteView.h
  51. 1 1
      ABtong/ABtong/ALLController/chatCtr/chetCell/ChatQuoteView.m
  52. 1 1
      ABtong/ABtong/ALLController/chatCtr/chetCell/chatCellView.h
  53. 125 121
      ABtong/ABtong/ALLController/chatCtr/chetCell/chatCellView.m
  54. 1 1
      ABtong/ABtong/ALLController/chatCtr/chetCell/chatpopView.h
  55. 1 1
      ABtong/ABtong/ALLController/chatCtr/chetCell/chatpopView.m
  56. 27 27
      ABtong/ABtong/ALLController/chatCtr/chetCell/chatpopView.xib
  57. 2 2
      ABtong/ABtong/ALLController/friendCtr/ChatHistory.storyboard
  58. 1 1
      ABtong/ABtong/ALLController/friendCtr/ChatHistoryController.h
  59. 1 1
      ABtong/ABtong/ALLController/friendCtr/ChatHistoryController.m
  60. 1 1
      ABtong/ABtong/ALLController/friendCtr/EXFriendController.h
  61. 1 1
      ABtong/ABtong/ALLController/friendCtr/EXFriendController.m
  62. 1 1
      ABtong/ABtong/ALLController/friendCtr/EXFriendListCell.h
  63. 1 1
      ABtong/ABtong/ALLController/friendCtr/EXFriendListCell.m
  64. 1 1
      ABtong/ABtong/ALLController/friendCtr/ForwardViewController.h
  65. 5 16
      ABtong/ABtong/ALLController/friendCtr/ForwardViewController.m
  66. 1 1
      ABtong/ABtong/ALLController/friendCtr/FriendController.h
  67. 53 43
      ABtong/ABtong/ALLController/friendCtr/FriendController.m
  68. 1 1
      ABtong/ABtong/ALLController/friendCtr/FriendListCell.h
  69. 1 1
      ABtong/ABtong/ALLController/friendCtr/FriendListCell.m
  70. 1 1
      ABtong/ABtong/ALLController/friendCtr/FriendListController.h
  71. 87 11
      ABtong/ABtong/ALLController/friendCtr/FriendListController.m
  72. 1 1
      ABtong/ABtong/ALLController/friendCtr/ReportViewController.h
  73. 18 19
      ABtong/ABtong/ALLController/friendCtr/ReportViewController.m
  74. 1 1
      ABtong/ABtong/ALLController/friendCtr/addFriendController.h
  75. 20 9
      ABtong/ABtong/ALLController/friendCtr/addFriendController.m
  76. 1 1
      ABtong/ABtong/ALLController/geren/APPLockerChangeController.h
  77. 7 7
      ABtong/ABtong/ALLController/geren/APPLockerChangeController.m
  78. 1 1
      ABtong/ABtong/ALLController/geren/AppLockPasswordController.h
  79. 39 32
      ABtong/ABtong/ALLController/geren/AppLockPasswordController.m
  80. 1 1
      ABtong/ABtong/ALLController/geren/BlackListController.h
  81. 5 5
      ABtong/ABtong/ALLController/geren/BlackListController.m
  82. 1 1
      ABtong/ABtong/ALLController/geren/ChangePasswordController.h
  83. 35 13
      ABtong/ABtong/ALLController/geren/ChangePasswordController.m
  84. 1 1
      ABtong/ABtong/ALLController/geren/ChatSettingController.h
  85. 13 13
      ABtong/ABtong/ALLController/geren/ChatSettingController.m
  86. 1 1
      ABtong/ABtong/ALLController/geren/DeleteAccountController.h
  87. 17 25
      ABtong/ABtong/ALLController/geren/DeleteAccountController.m
  88. 1 1
      ABtong/ABtong/ALLController/geren/FavoritesController.h
  89. 12 12
      ABtong/ABtong/ALLController/geren/FavoritesController.m
  90. 1 1
      ABtong/ABtong/ALLController/geren/PersonalInfoController.h
  91. 84 30
      ABtong/ABtong/ALLController/geren/PersonalInfoController.m
  92. 1 1
      ABtong/ABtong/ALLController/geren/SecurityController.h
  93. 20 19
      ABtong/ABtong/ALLController/geren/SecurityController.m
  94. 1 1
      ABtong/ABtong/ALLController/geren/SecurityPasswordController.h
  95. 11 11
      ABtong/ABtong/ALLController/geren/SecurityPasswordController.m
  96. 1 1
      ABtong/ABtong/ALLController/geren/UserConterController.h
  97. 93 42
      ABtong/ABtong/ALLController/geren/UserConterController.m
  98. 1 1
      ABtong/ABtong/ALLController/geren/ZhanghaoCntroller.h
  99. 11 11
      ABtong/ABtong/ALLController/geren/ZhanghaoCntroller.m
  100. 1 1
      ABtong/ABtong/ALLController/geren/favoritesCells/FavoritesAudioCell.h

+ 59 - 19
ABtong/ABtong.xcodeproj/project.pbxproj

@@ -8,12 +8,20 @@
 
 /* Begin PBXBuildFile section */
 		12E064B214B4CA8D763445A1 /* Pods_ABtong.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FFB889D0E6D88FD0A26C643E /* Pods_ABtong.framework */; };
+		347014282E8805AC002B904A /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 347014272E8805AC002B904A /* AdSupport.framework */; };
+		3470142A2E8805B8002B904A /* CallKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 347014292E8805B8002B904A /* CallKit.framework */; };
+		3470142C2E8805C6002B904A /* PushKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3470142B2E8805C6002B904A /* PushKit.framework */; };
+		3470142E2E8805DB002B904A /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3470142D2E8805DB002B904A /* Security.framework */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXFileReference section */
 		12B7D86DEE4F39C50F89CFF7 /* Pods-ABtong.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ABtong.debug.xcconfig"; path = "Target Support Files/Pods-ABtong/Pods-ABtong.debug.xcconfig"; sourceTree = "<group>"; };
 		2C376453FEA59FF1C01C44E5 /* Pods-ABtong.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ABtong.release.xcconfig"; path = "Target Support Files/Pods-ABtong/Pods-ABtong.release.xcconfig"; sourceTree = "<group>"; };
 		322072212E377A7F00E1698B /* ABtong.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ABtong.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		347014272E8805AC002B904A /* AdSupport.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AdSupport.framework; path = System/Library/Frameworks/AdSupport.framework; sourceTree = SDKROOT; };
+		347014292E8805B8002B904A /* CallKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CallKit.framework; path = System/Library/Frameworks/CallKit.framework; sourceTree = SDKROOT; };
+		3470142B2E8805C6002B904A /* PushKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PushKit.framework; path = System/Library/Frameworks/PushKit.framework; sourceTree = SDKROOT; };
+		3470142D2E8805DB002B904A /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };
 		FFB889D0E6D88FD0A26C643E /* Pods_ABtong.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ABtong.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 /* End PBXFileReference section */
 
@@ -44,6 +52,10 @@
 			buildActionMask = 2147483647;
 			files = (
 				12E064B214B4CA8D763445A1 /* Pods_ABtong.framework in Frameworks */,
+				3470142E2E8805DB002B904A /* Security.framework in Frameworks */,
+				3470142C2E8805C6002B904A /* PushKit.framework in Frameworks */,
+				347014282E8805AC002B904A /* AdSupport.framework in Frameworks */,
+				3470142A2E8805B8002B904A /* CallKit.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -71,6 +83,10 @@
 		D32E9A8380A4C7F1F42D6814 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				3470142D2E8805DB002B904A /* Security.framework */,
+				3470142B2E8805C6002B904A /* PushKit.framework */,
+				347014292E8805B8002B904A /* CallKit.framework */,
+				347014272E8805AC002B904A /* AdSupport.framework */,
 				FFB889D0E6D88FD0A26C643E /* Pods_ABtong.framework */,
 			);
 			name = Frameworks;
@@ -125,7 +141,7 @@
 				};
 			};
 			buildConfigurationList = 3220721C2E377A7F00E1698B /* Build configuration list for PBXProject "ABtong" */;
-			developmentRegion = en;
+			developmentRegion = "zh-Hant";
 			hasScannedForEncodings = 0;
 			knownRegions = (
 				en,
@@ -216,30 +232,41 @@
 			buildSettings = {
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES;
+				CODE_SIGN_ENTITLEMENTS = ABtong/ABtong.entitlements;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
 				CODE_SIGN_STYLE = Manual;
-				CURRENT_PROJECT_VERSION = 1;
+				CURRENT_PROJECT_VERSION = 1001;
 				DEVELOPMENT_TEAM = "";
-				"DEVELOPMENT_TEAM[sdk=iphoneos*]" = ANJCTZ9L4P;
+				"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 638Z4GBU9H;
+				ENABLE_DEBUG_DYLIB = NO;
 				ENABLE_USER_SCRIPT_SANDBOXING = NO;
 				GCC_PREFIX_HEADER = "${SRCROOT}/ABtong/Prefix&Header/PrefixHeader.pch";
 				GENERATE_INFOPLIST_FILE = YES;
 				INFOPLIST_FILE = ABtong/Info.plist;
+				INFOPLIST_KEY_CFBundleDisplayName = "MY‘IM";
+				INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO;
+				INFOPLIST_KEY_NSCalendarsUsageDescription = "访问日历用于时间相关显示";
+				INFOPLIST_KEY_NSCameraUsageDescription = "App 需要访问您的相机来拍摄照片。";
+				INFOPLIST_KEY_NSMicrophoneUsageDescription = "App 需要您允许视频播放。";
+				INFOPLIST_KEY_NSPhotoLibraryAddUsageDescription = "我們需要訪問您的相册以保存視頻和圖片";
+				INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "App 需要访问您的相册来选择照片。";
+				INFOPLIST_KEY_NSSpeechRecognitionUsageDescription = "需要语音识别权限以进行通话";
 				INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
-				INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
+				INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen.storyboard;
 				INFOPLIST_KEY_UIMainStoryboardFile = Main;
-				INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
-				INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+				INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
+				INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown";
 				IPHONEOS_DEPLOYMENT_TARGET = 15.6;
 				LD_RUNPATH_SEARCH_PATHS = (
 					"$(inherited)",
 					"@executable_path/Frameworks",
 				);
-				MARKETING_VERSION = 1.0;
-				PRODUCT_BUNDLE_IDENTIFIER = com.iosapp.test001;
+				MARKETING_VERSION = 1.0.1;
+				PRODUCT_BUNDLE_IDENTIFIER = com.abt.zdyserver;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				PROVISIONING_PROFILE_SPECIFIER = "";
-				"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = allTest;
+				"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = abtdis;
 				SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
 				SUPPORTS_MACCATALYST = NO;
 				SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
@@ -255,30 +282,41 @@
 			buildSettings = {
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES;
+				CODE_SIGN_ENTITLEMENTS = ABtong/ABtong.entitlements;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
 				CODE_SIGN_STYLE = Manual;
-				CURRENT_PROJECT_VERSION = 1;
+				CURRENT_PROJECT_VERSION = 1001;
 				DEVELOPMENT_TEAM = "";
-				"DEVELOPMENT_TEAM[sdk=iphoneos*]" = ANJCTZ9L4P;
+				"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 638Z4GBU9H;
+				ENABLE_DEBUG_DYLIB = NO;
 				ENABLE_USER_SCRIPT_SANDBOXING = NO;
 				GCC_PREFIX_HEADER = "${SRCROOT}/ABtong/Prefix&Header/PrefixHeader.pch";
 				GENERATE_INFOPLIST_FILE = YES;
 				INFOPLIST_FILE = ABtong/Info.plist;
+				INFOPLIST_KEY_CFBundleDisplayName = "MY‘IM";
+				INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO;
+				INFOPLIST_KEY_NSCalendarsUsageDescription = "访问日历用于时间相关显示";
+				INFOPLIST_KEY_NSCameraUsageDescription = "App 需要访问您的相机来拍摄照片。";
+				INFOPLIST_KEY_NSMicrophoneUsageDescription = "App 需要您允许视频播放。";
+				INFOPLIST_KEY_NSPhotoLibraryAddUsageDescription = "我們需要訪問您的相册以保存視頻和圖片";
+				INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "App 需要访问您的相册来选择照片。";
+				INFOPLIST_KEY_NSSpeechRecognitionUsageDescription = "需要语音识别权限以进行通话";
 				INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
-				INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
+				INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen.storyboard;
 				INFOPLIST_KEY_UIMainStoryboardFile = Main;
-				INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
-				INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+				INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
+				INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown";
 				IPHONEOS_DEPLOYMENT_TARGET = 15.6;
 				LD_RUNPATH_SEARCH_PATHS = (
 					"$(inherited)",
 					"@executable_path/Frameworks",
 				);
-				MARKETING_VERSION = 1.0;
-				PRODUCT_BUNDLE_IDENTIFIER = com.iosapp.test001;
+				MARKETING_VERSION = 1.0.1;
+				PRODUCT_BUNDLE_IDENTIFIER = com.abt.zdyserver;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				PROVISIONING_PROFILE_SPECIFIER = "";
-				"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = allTest;
+				"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = abtdis;
 				SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
 				SUPPORTS_MACCATALYST = NO;
 				SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
@@ -291,6 +329,7 @@
 		3220723F2E377A8000E1698B /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
 				ALWAYS_SEARCH_USER_PATHS = NO;
 				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
 				CLANG_ANALYZER_NONNULL = YES;
@@ -352,6 +391,7 @@
 		322072402E377A8000E1698B /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
 				ALWAYS_SEARCH_USER_PATHS = NO;
 				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
 				CLANG_ANALYZER_NONNULL = YES;

+ 8 - 0
ABtong/ABtong/ABtong.entitlements

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>aps-environment</key>
+	<string>development</string>
+</dict>
+</plist>

+ 1 - 1
ABtong/ABtong/Controller/webRTC/CustomJitsiLogger.h → ABtong/ABtong/ALLController/JSwebRTC/CustomJitsiLogger.h

@@ -2,7 +2,7 @@
 //  CustomJitsiLogger.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 #import <Foundation/Foundation.h>
 #import <JitsiMeetSDK/JitsiMeetSDK.h>

+ 1 - 1
ABtong/ABtong/Controller/webRTC/CustomJitsiLogger.m → ABtong/ABtong/ALLController/JSwebRTC/CustomJitsiLogger.m

@@ -2,7 +2,7 @@
 //  CustomJitsiLogger.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import "CustomJitsiLogger.h"

+ 1 - 1
ABtong/ABtong/Controller/webRTC/FloatJSWindow.h → ABtong/ABtong/ALLController/JSwebRTC/FloatJSWindow.h

@@ -2,7 +2,7 @@
 //  FloatingWindow.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #ifndef FloatingWindow_h

+ 2 - 2
ABtong/ABtong/Controller/webRTC/FloatJSWindow.m → ABtong/ABtong/ALLController/JSwebRTC/FloatJSWindow.m

@@ -2,7 +2,7 @@
 //  FloatingWindow.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <Foundation/Foundation.h>
@@ -35,7 +35,7 @@
     if (self) {
         self.backgroundColor = [UIColor clearColor];
         self.isfirstShow=YES;
-        UIImageView * bgImageView = [[UIImageView alloc] initWithImage:kImageMake(@"loginBG")];
+        UIImageView * bgImageView = [[UIImageView alloc] initWithImage:kImageMake(@"bgset")];
         [self addSubview:bgImageView];
         [bgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
             make.left.right.top.bottom.mas_equalTo(0);

+ 1 - 1
ABtong/ABtong/Controller/webRTC/JSGController.h → ABtong/ABtong/ALLController/JSwebRTC/JSGController.h

@@ -2,7 +2,7 @@
 //  JSGController.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #ifndef JSGController_h

+ 23 - 12
ABtong/ABtong/Controller/webRTC/JSGController.m → ABtong/ABtong/ALLController/JSwebRTC/JSGController.m

@@ -2,7 +2,7 @@
 //  JSGController.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <Foundation/Foundation.h>
@@ -15,6 +15,7 @@
 #import "AFNetworking/AFNetworkReachabilityManager.h"
 #import <SystemConfiguration/SystemConfiguration.h>
 #import "CustomJitsiLogger.h"
+#import "FirendStore.h"
 
 @interface JSGController()<WebRTCStoreDelegate,AVAudioPlayerDelegate>
 @property (nonatomic,strong) JitsiMeetView *jitsiView;
@@ -56,6 +57,8 @@
     WebRTCStore.shareInstance.delegate = self;
     _jitsiView = (JitsiMeetView*)self.view;
     _jitsiView.delegate = self;
+    
+    [self updataTongxunlu];
 
 //    CustomJitsiLogger *handler = [CustomJitsiLogger sharedHandler];
 //    handler.errorCount = 0;
@@ -86,7 +89,7 @@
     
     
     _FloadNote = [[UILabel alloc] init];
-    _FloadNote.text = NSLocalizedString(@"JSmeet-connectNote", @"");
+    _FloadNote.text = NSLocalizedString(@"请不要离开", @"");
     _FloadNote.textColor = [UIColor whiteColor];
     _FloadNote.font = [UIFont systemFontOfSize:14.f];
     _FloadNote.textAlignment = NSTextAlignmentCenter;
@@ -105,6 +108,13 @@
     }
 }
 
+//判断并添加到通讯录
+-(void)updataTongxunlu{
+    
+    [FirendStore.shareInstance updataTongxunlu:self.chatId];
+    
+}
+
 #pragma mark 应用被唤醒时判断解锁状态
 - (void)GapplicationDidBecomeActive:(NSNotification *)notification {
     // 应用进入前台
@@ -159,6 +169,7 @@
     NSLog(@"startJitsiMeetCall--------1--------");
     _isClose=NO;
     _isjoin=false;
+    _isSpeacker = NO;
     [self.view bringSubviewToFront:_hangupButton];
     [_hangupButton mas_makeConstraints:^(MASConstraintMaker *make) {
         make.size.mas_equalTo(CGSizeMake(50, 50));
@@ -232,7 +243,7 @@
     [_jitsiView join:self.currentOptions];//进入房间
     [self.audioPlayer play];
     _FloadNote.alpha = 1;
-    
+    [_jitsiView changeAudioSession:NO];
 }
 
 
@@ -279,7 +290,7 @@
 
 
 -(void)sendBusy{
-    NSDictionary *userinfo = [UDManager.shareInstance getDDManager:dkuserinfo];
+    NSDictionary *userinfo = [UDManager.shareInstance getDDManager:nkactuserInfo];
     
     NSLog(@"userinfo:%@",userinfo);
     if (userinfo == nil) {
@@ -289,7 +300,7 @@
         });
         return;
     }
-    NSString *userId = userinfo[@"id"];
+    NSString *userId = userinfo[@"userId"];
     NSString *username = userinfo[@"name"];
     NSString *useravatar = userinfo[@"avatar"];
     NSDate *now = [NSDate date];
@@ -327,9 +338,9 @@
 
 
 -(void)sendCall{
-    NSDictionary *userinfo = [UDManager.shareInstance getDDManager:dkuserinfo];
+    NSDictionary *userinfo = [UDManager.shareInstance getDDManager:nkactuserInfo];
     NSLog(@"userinfo:%@",userinfo);
-    NSString *userId = userinfo[@"id"];
+    NSString *userId = userinfo[@"userId"];
     NSString *username = userinfo[@"name"];
     NSString *useravatar = userinfo[@"avatar"];
     NSLog(@"-------拨打-------");
@@ -372,11 +383,11 @@
         return;
     }
     NSLog(@"-------挂断-------");
-    NSDictionary *userinfo = [UDManager.shareInstance getDDManager:dkuserinfo];
+    NSDictionary *userinfo = [UDManager.shareInstance getDDManager:nkactuserInfo];
     if(userinfo==nil){
         return;
     }
-    NSString *userId = userinfo[@"id"];
+    NSString *userId = userinfo[@"userId"];
     NSString *username = userinfo[@"name"];
     NSString *useravatar = userinfo[@"avatar"];
     NSDate *now = [NSDate date];
@@ -465,10 +476,10 @@
     
     NSString *messageType =actData[@"messageType"]?:@"";
     if([messageType isEqualToString:MessageType_DFBUSY]){
-        UIAlertController *alert = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Common_tips", @"提示")
-                                                                      message:NSLocalizedString(@"JSGController-mang", @"對方正忙")
+        UIAlertController *alert = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"提示", @"提示")
+                                                                      message:NSLocalizedString(@"对方正忙", @"對方正忙")
                                                                preferredStyle:UIAlertControllerStyleAlert];
-        UIAlertAction *okAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"Common_confirm", @"確定")
+        UIAlertAction *okAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"确定", @"確定")
                                                          style:UIAlertActionStyleDefault
                                                        handler:^(UIAlertAction * action) {
             

+ 160 - 0
ABtong/ABtong/ALLController/call/CallControllers.storyboard

@@ -0,0 +1,160 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="23727" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina6_12" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23721"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="System colors in document resources" minToolsVersion="11.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <scenes>
+        <!--Calldetails Controller-->
+        <scene sceneID="s0d-6b-0kx">
+            <objects>
+                <viewController storyboardIdentifier="CalldetailsController" useStoryboardIdentifierAsRestorationIdentifier="YES" id="Y6W-OH-hqX" customClass="CalldetailsController" sceneMemberID="viewController">
+                    <view key="view" contentMode="scaleToFill" id="5EZ-qb-Rvc">
+                        <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="bgset" translatesAutoresizingMaskIntoConstraints="NO" id="3er-UH-p4L">
+                                <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
+                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            </imageView>
+                            <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="0qh-hA-QuY">
+                                <rect key="frame" x="26" y="55" width="44" height="44"/>
+                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                <state key="normal" image="fanhui"/>
+                                <connections>
+                                    <action selector="fanhui:" destination="Y6W-OH-hqX" eventType="touchUpInside" id="U6D-cB-HyI"/>
+                                </connections>
+                            </button>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="V2l-YQ-2Ai">
+                                <rect key="frame" x="151" y="108" width="86" height="86"/>
+                                <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                            </imageView>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xDb-TS-CDb">
+                                <rect key="frame" x="45" y="197" width="300" height="28"/>
+                                <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="20"/>
+                                <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <button opaque="NO" tag="3" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="HMa-Su-XvK">
+                                <rect key="frame" x="285" y="245" width="60" height="60"/>
+                                <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
+                                <color key="tintColor" red="0.1450980392" green="0.1647058824" blue="0.30196078430000001" alpha="1" colorSpace="calibratedRGB"/>
+                                <state key="normal" title="Button"/>
+                                <buttonConfiguration key="configuration" style="filled" image="shipinth">
+                                    <backgroundConfiguration key="background" cornerRadius="30"/>
+                                    <color key="baseBackgroundColor" red="0.1450980392" green="0.1647058824" blue="0.30196078430000001" alpha="1" colorSpace="calibratedRGB"/>
+                                </buttonConfiguration>
+                                <connections>
+                                    <action selector="actBtselect:" destination="Y6W-OH-hqX" eventType="touchUpInside" id="wSs-uD-LXV"/>
+                                </connections>
+                            </button>
+                            <button opaque="NO" tag="2" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="L4g-Xu-DrB">
+                                <rect key="frame" x="165" y="245" width="60" height="60"/>
+                                <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
+                                <color key="tintColor" red="0.1450980392" green="0.1647058824" blue="0.30196078430000001" alpha="1" colorSpace="calibratedRGB"/>
+                                <state key="normal" title="Button"/>
+                                <buttonConfiguration key="configuration" style="filled" image="callhuixiao">
+                                    <backgroundConfiguration key="background" cornerRadius="30"/>
+                                    <color key="baseBackgroundColor" red="0.1450980392" green="0.1647058824" blue="0.30196078430000001" alpha="1" colorSpace="calibratedRGB"/>
+                                </buttonConfiguration>
+                                <connections>
+                                    <action selector="actBtselect:" destination="Y6W-OH-hqX" eventType="touchUpInside" id="QCu-Dv-mRQ"/>
+                                </connections>
+                            </button>
+                            <button opaque="NO" tag="1" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="cAX-aN-TiR">
+                                <rect key="frame" x="45" y="245" width="60" height="60"/>
+                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
+                                <color key="tintColor" red="0.14509803921568626" green="0.16470588235294117" blue="0.30196078431372547" alpha="1" colorSpace="calibratedRGB"/>
+                                <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                <state key="normal" backgroundImage="index"/>
+                                <buttonConfiguration key="configuration" style="filled" image="liaotian">
+                                    <backgroundConfiguration key="background" cornerRadius="30"/>
+                                    <color key="baseBackgroundColor" red="0.1450980392" green="0.1647058824" blue="0.30196078430000001" alpha="1" colorSpace="calibratedRGB"/>
+                                </buttonConfiguration>
+                                <connections>
+                                    <action selector="actBtselect:" destination="Y6W-OH-hqX" eventType="touchUpInside" id="gfn-If-tSb"/>
+                                </connections>
+                            </button>
+                            <tableView clipsSubviews="YES" contentMode="scaleToFill" fixedFrame="YES" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="2FX-RA-Hb4">
+                                <rect key="frame" x="0.0" y="382" width="393" height="350"/>
+                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                            </tableView>
+                            <button opaque="NO" alpha="0.0" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Ccd-AW-3ib">
+                                <rect key="frame" x="337" y="57" width="40" height="40"/>
+                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                <state key="normal" title="Button"/>
+                                <buttonConfiguration key="configuration" style="plain">
+                                    <backgroundConfiguration key="background" image="Cjiahao"/>
+                                </buttonConfiguration>
+                            </button>
+                            <button opaque="NO" alpha="0.0" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="trailing" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="os6-D8-1iH">
+                                <rect key="frame" x="252" y="197" width="110" height="35"/>
+                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                <color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                <state key="normal" title="Button"/>
+                                <buttonConfiguration key="configuration" style="plain" title="全部&gt;">
+                                    <fontDescription key="titleFontDescription" type="system" pointSize="17"/>
+                                </buttonConfiguration>
+                                <connections>
+                                    <action selector="allRecord:" destination="Y6W-OH-hqX" eventType="touchUpInside" id="jmu-uK-6hq"/>
+                                </connections>
+                            </button>
+                            <button opaque="NO" alpha="0.0" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" id="kV3-8Y-w5q">
+                                <rect key="frame" x="45" y="740" width="300" height="35"/>
+                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                <color key="backgroundColor" systemColor="systemGray5Color"/>
+                                <state key="normal" title="Button"/>
+                                <buttonConfiguration key="configuration" style="plain" title="添加到通讯录"/>
+                            </button>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="通话记录" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xe6-RC-L4o">
+                                <rect key="frame" x="114" y="65" width="165" height="24"/>
+                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="20"/>
+                                <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="通话记录" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Gec-hT-StB">
+                                <rect key="frame" x="18" y="344" width="187" height="21"/>
+                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                        </subviews>
+                        <viewLayoutGuide key="safeArea" id="vDu-zF-Fre"/>
+                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                    </view>
+                    <connections>
+                        <outlet property="avatar" destination="V2l-YQ-2Ai" id="AKB-Ti-JH7"/>
+                        <outlet property="nameLb" destination="xDb-TS-CDb" id="upH-85-XE3"/>
+                        <outlet property="tableView" destination="2FX-RA-Hb4" id="gBy-e1-SC3"/>
+                    </connections>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="Ief-a0-LHa" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="87.786259541984734" y="-34.507042253521128"/>
+        </scene>
+    </scenes>
+    <resources>
+        <image name="Cjiahao" width="20" height="20"/>
+        <image name="bgset" width="375" height="812"/>
+        <image name="callhuixiao" width="24" height="24"/>
+        <image name="fanhui" width="20" height="20"/>
+        <image name="index" width="32" height="32"/>
+        <image name="liaotian" width="24" height="24"/>
+        <image name="shipinth" width="28" height="20"/>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+        <systemColor name="systemGray5Color">
+            <color red="0.8980392157" green="0.8980392157" blue="0.91764705879999997" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+        </systemColor>
+    </resources>
+</document>

+ 18 - 0
ABtong/ABtong/ALLController/call/CallIndexCell.h

@@ -0,0 +1,18 @@
+//
+//  CallIndexCell.h
+//  ABtong
+//
+//  Created by qin on 2025/7/31.
+//
+
+#ifndef CallIndexCell_h
+#define CallIndexCell_h
+#import <UIKit/UIKit.h>
+
+
+@interface CallIndexCell : UITableViewCell
+
+- (void)fillWithData:( NSDictionary*)data;
+@end
+
+#endif /* CallIndexCell_h */

+ 271 - 0
ABtong/ABtong/ALLController/call/CallIndexCell.m

@@ -0,0 +1,271 @@
+//
+//  CallIndexCell.m
+//  ABtong
+//
+//  Created by qin on 2025/7/31.
+//
+
+#import <Foundation/Foundation.h>
+#import "CallIndexCell.h"
+#import <SDWebImage/UIImageView+WebCache.h>
+#import "config.h"
+
+
+@interface CallIndexCell()
+
+@property (strong, nonatomic) UILabel *name;
+@property (strong, nonatomic) UILabel *time;
+@property (strong, nonatomic) UILabel *countText;
+@property (strong, nonatomic) UIImageView *avatar;
+
+
+
+@property (strong, nonatomic) UIImageView *liaotianBt;
+@property (strong, nonatomic) UIImageView *tonghuaBt;
+@property (strong, nonatomic) UIImageView *shipinBt;
+
+@property (strong, nonatomic) UIImageView *rightAr;
+
+@property (strong, nonatomic) UILabel *lineLb;
+
+
+@end
+
+@implementation CallIndexCell
+
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
+    if (self) {
+        [self initAlllSubviews];
+        self.selectionStyle = UITableViewCellSelectionStyleNone;
+        self.backgroundColor = [UIColor clearColor];
+    }
+    return self;
+}
+
+
+-(void)initAlllSubviews{
+   
+    // 头像
+    _avatar = [UIImageView new];
+    _avatar.layer.cornerRadius = 25;
+    _avatar.layer.masksToBounds = YES;
+    _avatar.contentMode = UIViewContentModeScaleAspectFill;
+    [self.contentView addSubview:_avatar];
+    
+    
+    _liaotianBt = [UIImageView new];
+    _liaotianBt.contentMode = UIViewContentModeScaleAspectFill;
+    [_liaotianBt setImage:[UIImage imageNamed:@"xiangyou"]];
+    [self.contentView addSubview:_liaotianBt];
+    
+    _tonghuaBt = [UIImageView new];
+    _tonghuaBt.contentMode = UIViewContentModeScaleAspectFill;
+    [_tonghuaBt setImage:[UIImage imageNamed:@"xiangyou"]];
+    [self.contentView addSubview:_tonghuaBt];
+    
+    _shipinBt = [UIImageView new];
+    _shipinBt.contentMode = UIViewContentModeScaleAspectFill;
+    [_shipinBt setImage:[UIImage imageNamed:@"xiangyou"]];
+    [self.contentView addSubview:_shipinBt];
+    
+    
+    // 名字
+    _name = [UILabel new];
+    _name.font = SYSFONT(20);
+    _name.textColor = [UIColor whiteColor];
+    [self.contentView addSubview:_name];
+    
+    // 时间
+    _time = [UILabel new];
+    _time.font = SYSFONT(14);
+    _time.textColor = UIColor.whiteColor;
+    [self.contentView addSubview:_time];
+    
+    // 时间
+    _countText = [UILabel new];
+    _countText.font = SYSFONT(16);
+    _countText.textColor = UIColor.whiteColor;
+    [self.contentView addSubview:_countText];
+    
+    _lineLb = [UILabel new];
+    _lineLb.text = @"";
+    _lineLb.backgroundColor = UIColor.lightGrayColor;
+    [self.contentView addSubview:_lineLb];
+    _lineLb.alpha = 0;
+    
+    [_avatar mas_remakeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(self.contentView.mas_left).offset(10);
+        make.top.mas_equalTo(self.contentView.mas_top).offset(10);
+        make.width.mas_equalTo(50);
+        make.height.mas_equalTo(50);
+    }];
+    
+    
+    [_liaotianBt mas_remakeConstraints:^(MASConstraintMaker *make) {
+        make.right.equalTo(_tonghuaBt.mas_left).offset(-30);
+        make.top.mas_equalTo(self.contentView.mas_top).offset(10);
+        make.width.mas_equalTo(25);
+        make.height.mas_equalTo(25);
+    }];
+    
+    [_tonghuaBt mas_remakeConstraints:^(MASConstraintMaker *make) {
+        make.right.equalTo(_shipinBt.mas_left).offset(-30);
+        make.top.mas_equalTo(self.contentView.mas_top).offset(10);
+        make.width.mas_equalTo(25);
+        make.height.mas_equalTo(25);
+    }];
+    
+    
+    [_shipinBt mas_remakeConstraints:^(MASConstraintMaker *make) {
+        make.right.equalTo(self.contentView.mas_right).offset(-30);
+        make.top.mas_equalTo(self.contentView.mas_top).offset(10);
+        make.width.mas_equalTo(25);
+        make.height.mas_equalTo(25);
+    }];
+    
+    [_name mas_remakeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(_avatar.mas_right).offset(8);
+        make.width.mas_equalTo(250);
+        make.top.mas_equalTo(self.contentView.mas_top).offset(12);
+    }];
+    
+    [_time mas_remakeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(_avatar.mas_right).offset(8);
+        make.top.mas_equalTo(_name.mas_bottom).offset(6);
+    }];
+    
+    [_countText mas_remakeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(_time.mas_right).offset(4);
+        make.top.mas_equalTo(_name.mas_bottom).offset(6);
+    }];
+    
+    [_lineLb mas_remakeConstraints:^(MASConstraintMaker *make) {
+        make.top.mas_equalTo(self.contentView.mas_bottom).offset(-3);
+        make.width.mas_equalTo(self.contentView.mas_width).offset(12);
+        make.height.mas_equalTo(0.5);
+    }];
+    
+    
+}
+
+- (void)fillWithData:( NSDictionary*)data {
+    
+    NSLog(@"fillWithData:%@",data);
+    NSString *avatar =data[@"fromAvatar"]?:@"";
+    if([avatar isKindOfClass:[NSString class]]){
+        
+    }
+    else{
+        avatar = @"";
+    }
+    [self.avatar sd_setImageWithURL:[NSURL URLWithString:avatar] placeholderImage:[UIImage imageNamed:@"Avatar"]];
+    self.name.text =data[@"fromName"]?:@"";
+
+    //NSLog(@"lastTime:%@",data[@"lastTime"]);
+    NSString *timestr =data[@"timestamp"];
+    
+    if([timestr isKindOfClass:[NSNumber class]]){
+        _time.text=[self timeF:timestr.longLongValue];
+    }
+    else if([timestr isKindOfClass:[NSString class]]){
+        _time.text=[self timeF:timestr.longLongValue];
+    }
+    else{
+        _time.text=@"";
+    }
+    NSString *result =data[@"result"];
+    NSString *duration = data[@"duration"];
+    if(result.intValue == 1){
+        _countText.text = [NSString stringWithFormat:@"通話時長:%@",[self formatTimeWithMilliseconds:duration.intValue]];
+        _countText.textColor = [UIColor whiteColor];
+    }
+    else{
+        _countText.text = @"未接通";
+        _countText.textColor = [UIColor redColor];
+    }
+    // tell constraints they need updating
+    [self setNeedsUpdateConstraints];
+
+    // update constraints now so we can animate the change
+    [self updateConstraintsIfNeeded];
+
+    [self layoutIfNeeded];
+}
+
+-(NSString *)timeF:(NSInteger)time{
+    //NSLog(@"time:%ld",(long)time);
+    // 创建日期格式器
+    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+    [formatter setDateFormat:@"dd"]; // 设置你想要的日期格式
+    
+    
+    long long timestamp =(long)time/1000; // 例如:2021-10-01 00:00:00 UTC
+    // 转换为NSDate
+    NSDate *date = [NSDate dateWithTimeIntervalSince1970:timestamp];
+    NSString *dateString = [formatter stringFromDate:date];
+    
+    
+    NSDate *now = [NSDate date];
+    NSTimeInterval trt = [now timeIntervalSince1970];
+    date = [NSDate dateWithTimeIntervalSince1970:trt];
+    NSString *tdateString = [formatter stringFromDate:date];
+    
+    
+    NSInteger shijiancha = trt-timestamp;
+    
+    if(shijiancha<60){
+        return NSLocalizedString(@"1分钟内", @"");
+    }
+    if(shijiancha>24*3600||dateString.intValue!=tdateString.intValue){
+        // 假设这是你的时间戳(以秒为单位)
+        long long timestamp =(long)time/1000; // 例如:2021-10-01 00:00:00 UTC
+        // 转换为NSDate
+        NSDate *date = [NSDate dateWithTimeIntervalSince1970:timestamp];
+        // 创建日期格式器
+        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+        [formatter setDateFormat:@"yyyy-MM-dd HH:mm"]; // 设置你想要的日期格式
+        // 转换为字符串
+        NSString *dateString = [formatter stringFromDate:date];
+        return dateString;
+    }
+    else{
+        NSInteger xiaoshi = shijiancha/3600;
+        NSInteger fenzhong = shijiancha/60;
+        if(xiaoshi>0){
+            // 假设这是你的时间戳(以秒为单位)
+            long long timestamp =(long)time/1000; // 例如:2021-10-01 00:00:00 UTC
+            // 转换为NSDate
+            NSDate *date = [NSDate dateWithTimeIntervalSince1970:timestamp];
+            // 创建日期格式器
+            NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+            [formatter setDateFormat:@"HH:mm"]; // 设置你想要的日期格式
+            // 转换为字符串
+            NSString *dateString = [formatter stringFromDate:date];
+            return dateString;
+        }
+        else{
+            return [NSString stringWithFormat:@"%ld%@",(long)fenzhong,NSLocalizedString(@"分钟前", @"")];
+        }
+    }
+    
+    return @"";
+}
+
+
+- (NSString *)formatTimeWithMilliseconds:(NSInteger)milliseconds{
+    NSInteger seconds = milliseconds / 1000.0;
+        
+    if (seconds >= 60) {
+        // 大于等于60秒时显示为分钟,保留一位小数
+        NSInteger minutes = seconds / 60.0;
+        NSInteger sc = seconds%60;
+        return [NSString stringWithFormat:@"%ld分%ld秒", (long)minutes,(long)sc];
+    } else {
+        // 小于60秒时显示为秒,保留整数
+        return [NSString stringWithFormat:@"%ld秒", seconds];
+    }
+}
+
+@end

+ 20 - 0
ABtong/ABtong/ALLController/call/CallIndexController.h

@@ -0,0 +1,20 @@
+//
+//  CallIndexController.h
+//  ABtong
+//
+//  Created by qin on 2025/7/30.
+//
+
+#ifndef CallIndexController_h
+#define CallIndexController_h
+
+#import <UIKit/UIKit.h>
+
+
+@interface CallIndexController : UIViewController
+
+
+
+@end
+
+#endif /* CallIndexController_h */

+ 267 - 0
ABtong/ABtong/ALLController/call/CallIndexController.m

@@ -0,0 +1,267 @@
+//
+//  CallIndexController.m
+//  ABtong
+//
+//  Created by qin on 2025/7/30.
+//
+
+#import <Foundation/Foundation.h>
+#import "CallIndexController.h"
+#import "GserverListController.h"
+#import "CallIndexCell.h"
+#import "CallListStore.h"
+#import "AppDelegate.h"
+#import "PhoneKeybord.h"
+#import "ChatController.h"
+#import "ChatListStore.h"
+
+#import "CalldetailsController.h"
+#import "GLoginController.h"
+#import "LoginStateManager.h"
+
+
+@interface CallIndexController()<UITableViewDelegate,UITableViewDataSource,CallListStoreDelegate,PhoneKeybordDelegate>
+
+@property (weak, nonatomic) IBOutlet UILabel *titleLb;
+@property (weak, nonatomic) IBOutlet UILabel *meiyoujlLb;
+@property (weak, nonatomic) IBOutlet UISegmentedControl *segCtroller;
+
+@property (weak, nonatomic) IBOutlet UITableView *tableView;
+@property (strong, nonatomic) NSMutableArray *messageArray;
+
+@property (nonatomic,strong) UIButton *jianpanBt;
+@property (nonatomic,strong) PhoneKeybord *phoneKb;
+
+
+@end
+
+
+@implementation CallIndexController
+
+
+-(void)viewDidLoad{
+    [super viewDidLoad];
+
+    
+    _meiyoujlLb.alpha=0;
+    
+    [_segCtroller addTarget:self action:@selector(segmentChanged:) forControlEvents:UIControlEventValueChanged];
+    [_segCtroller setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]} forState:UIControlStateSelected];
+     
+    // 设置未选中状态的字体颜色
+    [_segCtroller setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]} forState:UIControlStateNormal];
+    
+//    _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
+    _tableView.backgroundColor = UIColor.clearColor;
+    _tableView.delegate = self;
+    _tableView.dataSource = self;
+    [_tableView registerClass:CallIndexCell.class forCellReuseIdentifier:@"cellT"];
+    
+    // 添加关闭按钮
+    _jianpanBt = [UIButton buttonWithType:UIButtonTypeSystem];
+    [_jianpanBt setBackgroundImage:kImageMake(@"jianpan") forState:UIControlStateNormal];
+    _jianpanBt.layer.cornerRadius = 5;
+    _jianpanBt.tag = 100; // 用于稍后隐藏/显示
+    [_jianpanBt addTarget:self action:@selector(showPhoneKeybord) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:_jianpanBt];
+    
+    [_jianpanBt mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.size.mas_equalTo(CGSizeMake(60, 60));
+        make.bottom.mas_equalTo(-130);
+        make.right.mas_equalTo(-80);
+    }];
+    
+    
+    NSArray *nibs = [[NSBundle mainBundle] loadNibNamed:@"PhoneKeybord" owner:self options:nil];
+    _phoneKb = [nibs objectAtIndex:0];
+    [self.view addSubview:_phoneKb];
+//    [_phoneKb mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.bottom.mas_equalTo(self.view.mas_bottom).offset(-500);
+//        make.left.mas_equalTo(0);
+//    }];
+//    _phoneKb.backgroundColor = [UIColor whiteColor];
+    _phoneKb.alpha = 0;
+    _phoneKb.delegate=self;
+    [self.view bringSubviewToFront:_phoneKb];
+    
+    CallListStore.shareInstance.delegate = self;
+    [CallListStore.shareInstance reloadData:@""];
+    
+}
+
+-(void)viewWillAppear:(BOOL)animated{
+    [super viewWillAppear:animated];
+    CallListStore.shareInstance.delegate = self;
+    if(_segCtroller.selectedSegmentIndex==0){
+        [CallListStore.shareInstance reloadData:@""];
+    }
+    else{
+        [CallListStore.shareInstance reloadData:@"false"];
+    }
+    _titleLb.text = @"";
+    NSString *sevNmae = [UDManager.shareInstance getSDManager:nkhttphostName];
+    if(sevNmae){
+        if(sevNmae){
+            _titleLb.text = sevNmae;
+        }
+    }
+    
+}
+
+-(NSMutableArray *)messageArray{
+    if(_messageArray){
+        return _messageArray;
+    }
+    _messageArray = [NSMutableArray array];
+    return _messageArray;
+}
+
+- (IBAction)addserver:(id)sender {
+    GserverListController * resetPwdVc = [[GserverListController alloc] init];
+    resetPwdVc.modalPresentationStyle = UIModalPresentationFullScreen;
+    resetPwdVc.canChange = true;
+    UINavigationController * navi = [[UINavigationController alloc] initWithRootViewController:resetPwdVc];
+    navi.modalPresentationStyle = UIModalPresentationFullScreen;
+    [self presentViewController:navi animated:YES completion:nil];
+}
+
+- (void)segmentChanged:(UISegmentedControl *)sender {
+    NSInteger selectedIndex = sender.selectedSegmentIndex;
+    NSString *selectedTitle = [sender titleForSegmentAtIndex:selectedIndex];
+    NSLog(@"Selected segment: %ld, Title: %@", (long)selectedIndex, selectedTitle);
+    if(selectedIndex==0){
+        [CallListStore.shareInstance reloadData:@""];
+    }
+    else{
+        [CallListStore.shareInstance reloadData:@"false"];
+    }
+}
+
+-(void)showPhoneKeybord{
+    if(!LoginStateManager.sharedManager.isLoggedIn){
+        [self gotoLoginView];
+        return;
+    }
+    _phoneKb.frame = CGRectMake(0, -100, self.view.frame.size.width, self.view.frame.size.height);
+    
+    
+    _phoneKb.alpha = 1.0;
+}
+
+-(void)actionNote:(NSDictionary *)dic type:(NSInteger)type{
+    
+    NSString *chtId = dic[@"id"]?:@"";
+    
+    if(chtId.length>0){
+        if(type==1){
+            
+            UIStoryboard *board = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
+            
+            ChatController *chatctr = [board instantiateViewControllerWithIdentifier:@"ChatController"];
+            
+            UINavigationController *uiNavC = [[UINavigationController alloc] initWithRootViewController:chatctr];
+            
+            uiNavC.modalPresentationStyle = UIModalPresentationFullScreen;
+            chatctr.chatId = dic[@"id"];
+            chatctr.type = 0;
+            ChatListStore.shareInstance.chatId =dic[@"id"];
+            chatctr.titlename = dic[@"name"];
+            chatctr.avatar = dic[@"avatar"];
+
+            [self presentViewController :uiNavC animated:YES completion:nil];
+        }
+        else if(type==2){
+            [[AppDelegate sharedInstance] startJSCall:chtId room:@"" isCaller:YES audioOnly:YES];
+        }
+        else if(type==3){
+            [[AppDelegate sharedInstance] startJSCall:chtId room:@"" isCaller:YES audioOnly:NO];
+        }
+    }
+    else{
+        NSLog(@"呼叫用户信息错误");
+    }
+}
+
+
+
+#pragma mark CallListStoreDelegate
+-(void)ChatsChange:(NSArray *)msgList type:(NSInteger)typpe{
+    NSLog(@"msgList:%lu",(unsigned long)msgList.count);
+    if(typpe==4){
+        if(_segCtroller.selectedSegmentIndex==0){
+            [CallListStore.shareInstance reloadData:@""];
+        }
+        else{
+            [CallListStore.shareInstance reloadData:@"false"];
+        }
+        return;
+    }
+    _messageArray =[msgList copy];
+    [_tableView reloadData];
+    
+}
+
+#pragma mark UITableViewDelegate,UITableViewDataSource
+-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
+    return 1;
+}
+-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
+    if(_messageArray.count==0){
+        _meiyoujlLb.alpha=1;
+        _meiyoujlLb.text = NSLocalizedString(@"还没有任何记录哦", @"");
+    }
+    else{
+        _meiyoujlLb.alpha=0;
+    }
+    NSLog(@"_messageArray.count:%lu",(unsigned long)_messageArray.count);
+    return _messageArray.count;
+}
+
+-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
+   
+    static NSString *cellID = @"chatCellView";
+    CallIndexCell *cell =[tableView dequeueReusableCellWithIdentifier:cellID];
+    if(cell==nil){
+        cell=[[CallIndexCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];
+    }
+//    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
+    
+    NSDictionary *dic = [self.messageArray objectAtIndex:indexPath.row];
+    
+    [cell fillWithData:dic];
+    
+    return cell;
+}
+
+
+
+
+- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
+    return 80.0f;
+}
+
+
+
+-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
+    
+    
+    NSDictionary *dic = [self.messageArray objectAtIndex:indexPath.row];
+    
+    UIStoryboard *board = [UIStoryboard storyboardWithName:@"CallControllers" bundle:[NSBundle mainBundle]];
+    CalldetailsController *chatctr = [board instantiateViewControllerWithIdentifier:@"CalldetailsController"];
+    chatctr.callItem = dic;
+    UINavigationController *uiNavC = [[UINavigationController alloc] initWithRootViewController:chatctr];
+    uiNavC.modalPresentationStyle = UIModalPresentationFullScreen;
+    [self presentViewController :uiNavC animated:YES completion:nil];
+}
+
+
+-(void)gotoLoginView{
+    UIStoryboard *board = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
+    GLoginController *login = [board instantiateViewControllerWithIdentifier:@"LoginController"];
+    UINavigationController *uiNavC = [[UINavigationController alloc] initWithRootViewController:login];
+    uiNavC.modalPresentationStyle = UIModalPresentationFullScreen;
+    [self presentViewController:uiNavC animated:YES completion:nil];
+}
+
+@end

+ 18 - 0
ABtong/ABtong/ALLController/call/CalldetailsCell.h

@@ -0,0 +1,18 @@
+//
+//  CalldetailsCell.h
+//  ABtong
+//
+//  Created by qin on 2025/7/31.
+//
+
+#ifndef CalldetailsCell_h
+#define CalldetailsCell_h
+#import <UIKit/UIKit.h>
+
+
+@interface CalldetailsCell : UITableViewCell
+
+- (void)fillWithData:( NSDictionary*)data;
+@end
+
+#endif /* CalldetailsCell_h */

+ 235 - 0
ABtong/ABtong/ALLController/call/CalldetailsCell.m

@@ -0,0 +1,235 @@
+//
+//  CalldetailsCell.m
+//  ABtong
+//
+//  Created by qin on 2025/7/31.
+//
+
+#import <Foundation/Foundation.h>
+#import "CalldetailsCell.h"
+#import <SDWebImage/UIImageView+WebCache.h>
+#import "config.h"
+
+
+@interface CalldetailsCell()
+
+@property (strong, nonatomic) UILabel *name;
+@property (strong, nonatomic) UILabel *time;
+@property (strong, nonatomic) UILabel *countText;
+@property (strong, nonatomic) UIImageView *rightAr;
+
+@property (strong, nonatomic) UILabel *lineLb;
+
+
+@end
+
+@implementation CalldetailsCell
+
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
+    if (self) {
+        [self initAlllSubviews];
+        self.selectionStyle = UITableViewCellSelectionStyleNone;
+        self.backgroundColor = [UIColor clearColor];
+    }
+    return self;
+}
+
+
+-(void)initAlllSubviews{
+   
+    _rightAr = [UIImageView new];
+    _rightAr.contentMode = UIViewContentModeScaleAspectFill;
+    [_rightAr setImage:[UIImage imageNamed:@"arrow-right"]];
+    [self.contentView addSubview:_rightAr];
+    
+    
+    // 名字
+    _name = [UILabel new];
+    _name.font = SYSFONT(18);
+    _name.textColor = [UIColor whiteColor];
+    [self.contentView addSubview:_name];
+    
+    // 时间
+    _time = [UILabel new];
+    _time.font = SYSFONT(14);
+    _time.textColor = UIColor.whiteColor;
+    [self.contentView addSubview:_time];
+    
+    // 时间
+    _countText = [UILabel new];
+    _countText.font = SYSFONT(16);
+    _countText.textColor = UIColor.whiteColor;
+    [self.contentView addSubview:_countText];
+    
+    _lineLb = [UILabel new];
+    _lineLb.text = @"";
+    _lineLb.backgroundColor = UIColor.lightGrayColor;
+    [self.contentView addSubview:_lineLb];
+    _lineLb.alpha = 0;
+    
+    
+    [_rightAr mas_remakeConstraints:^(MASConstraintMaker *make) {
+        make.right.equalTo(self.contentView.mas_right).offset(-30);
+        make.top.mas_equalTo(self.contentView.mas_top).offset(20);
+        make.width.mas_equalTo(32);
+        make.height.mas_equalTo(32);
+    }];
+    
+    [_name mas_remakeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(self.contentView.mas_left).offset(18);
+        make.top.mas_equalTo(self.contentView.mas_top).offset(12);
+    }];
+    
+    [_time mas_remakeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(self.contentView.mas_left).offset(18);
+        make.top.mas_equalTo(_name.mas_bottom).offset(6);
+    }];
+    
+    [_countText mas_remakeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(_time.mas_right).offset(4);
+        make.top.mas_equalTo(_name.mas_bottom).offset(6);
+    }];
+    
+    [_lineLb mas_remakeConstraints:^(MASConstraintMaker *make) {
+        make.top.mas_equalTo(self.contentView.mas_bottom).offset(-3);
+        make.width.mas_equalTo(self.contentView.mas_width).offset(12);
+        make.height.mas_equalTo(0.5);
+    }];
+    
+    
+}
+
+- (void)fillWithData:( NSDictionary*)data {
+    
+//    NSLog(@"fillWithData:%@",data);
+    
+    //NSLog(@"lastTime:%@",data[@"lastTime"]);
+    NSString *timestr =data[@"timestamp"];
+    
+    if([timestr isKindOfClass:[NSNumber class]]){
+        self.name.text=[self timeF:timestr.longLongValue];
+    }
+    else if([timestr isKindOfClass:[NSString class]]){
+        self.name.text=[self timeF:timestr.longLongValue];
+    }
+    else{
+        self.name.text=@"";
+    }
+    
+    NSString *chatId =data[@"chatId"]?:@"";
+    NSString *fromId =data[@"fromId"]?:@"";
+    if([chatId isEqualToString:fromId]){
+        _time.text = @"呼入:";
+    }
+    else{
+        _time.text = @"呼出:";
+    }
+    
+    NSString *video =data[@"video"];
+    if (video.intValue==0) {
+        [_rightAr setImage:[UIImage imageNamed:@"callhuixiao"]];
+    }
+    else{
+        [_rightAr setImage:[UIImage imageNamed:@"shipinth"]];
+    }
+    
+    
+    
+    
+    
+    NSString *result =data[@"result"];
+    NSString *duration = data[@"duration"];
+    if(result.intValue == 1){
+        _countText.text = [NSString stringWithFormat:@"   %@",[self formatTimeWithMilliseconds:duration.intValue]];
+        _countText.textColor = [UIColor whiteColor];
+    }
+    else{
+        _countText.text = @"未接通";
+        _countText.textColor = [UIColor redColor];
+    }
+    // tell constraints they need updating
+    [self setNeedsUpdateConstraints];
+
+    // update constraints now so we can animate the change
+    [self updateConstraintsIfNeeded];
+
+    [self layoutIfNeeded];
+}
+
+-(NSString *)timeF:(NSInteger)time{
+    //NSLog(@"time:%ld",(long)time);
+    // 创建日期格式器
+    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+    [formatter setDateFormat:@"dd"]; // 设置你想要的日期格式
+    
+    
+    long long timestamp =(long)time/1000; // 例如:2021-10-01 00:00:00 UTC
+    // 转换为NSDate
+    NSDate *date = [NSDate dateWithTimeIntervalSince1970:timestamp];
+    NSString *dateString = [formatter stringFromDate:date];
+    
+    
+    NSDate *now = [NSDate date];
+    NSTimeInterval trt = [now timeIntervalSince1970];
+    date = [NSDate dateWithTimeIntervalSince1970:trt];
+    NSString *tdateString = [formatter stringFromDate:date];
+    
+    
+    NSInteger shijiancha = trt-timestamp;
+    
+    if(shijiancha<60){
+        return NSLocalizedString(@"1分钟内", @"");
+    }
+    if(shijiancha>24*3600||dateString.intValue!=tdateString.intValue){
+        // 假设这是你的时间戳(以秒为单位)
+        long long timestamp =(long)time/1000; // 例如:2021-10-01 00:00:00 UTC
+        // 转换为NSDate
+        NSDate *date = [NSDate dateWithTimeIntervalSince1970:timestamp];
+        // 创建日期格式器
+        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+        [formatter setDateFormat:@"yyyy-MM-dd HH:mm"]; // 设置你想要的日期格式
+        // 转换为字符串
+        NSString *dateString = [formatter stringFromDate:date];
+        return dateString;
+    }
+    else{
+        NSInteger xiaoshi = shijiancha/3600;
+        NSInteger fenzhong = shijiancha/60;
+        if(xiaoshi>0){
+            // 假设这是你的时间戳(以秒为单位)
+            long long timestamp =(long)time/1000; // 例如:2021-10-01 00:00:00 UTC
+            // 转换为NSDate
+            NSDate *date = [NSDate dateWithTimeIntervalSince1970:timestamp];
+            // 创建日期格式器
+            NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+            [formatter setDateFormat:@"HH:mm"]; // 设置你想要的日期格式
+            // 转换为字符串
+            NSString *dateString = [formatter stringFromDate:date];
+            return dateString;
+        }
+        else{
+            return [NSString stringWithFormat:@"%ld%@",(long)fenzhong,NSLocalizedString(@"分钟前", @"")];
+        }
+    }
+    
+    return @"";
+}
+
+
+- (NSString *)formatTimeWithMilliseconds:(NSInteger)milliseconds{
+    NSInteger seconds = milliseconds / 1000.0;
+        
+    if (seconds >= 60) {
+        // 大于等于60秒时显示为分钟,保留一位小数
+        NSInteger minutes = seconds / 60.0;
+        NSInteger sc = seconds%60;
+        return [NSString stringWithFormat:@"%ld分%ld秒", (long)minutes,(long)sc];
+    } else {
+        // 小于60秒时显示为秒,保留整数
+        return [NSString stringWithFormat:@"%ld秒", seconds];
+    }
+}
+
+@end

+ 19 - 0
ABtong/ABtong/ALLController/call/CalldetailsController.h

@@ -0,0 +1,19 @@
+//
+//  CalldetailsController.h
+//  ABtong
+//
+//  Created by qin on 2025/8/11.
+//
+
+#ifndef CalldetailsController_h
+#define CalldetailsController_h
+
+
+@interface CalldetailsController : UIViewController
+
+
+@property (strong, nonatomic) NSDictionary *callItem;
+
+@end
+
+#endif /* CalldetailsController_h */

+ 185 - 0
ABtong/ABtong/ALLController/call/CalldetailsController.m

@@ -0,0 +1,185 @@
+//
+//  CalldetailsController.m
+//  ABtong
+//
+//  Created by qin on 2025/8/11.
+//
+
+#import <Foundation/Foundation.h>
+#import "CalldetailsController.h"
+#import "CallListStore.h"
+#import "CalldetailsCell.h"
+#import "ChatController.h"
+#import "ChatListStore.h"
+#import "AppDelegate.h"
+
+@interface CalldetailsController()<UITableViewDelegate,UITableViewDataSource,CallListStoreDelegate>
+@property (weak, nonatomic) IBOutlet UIView *topcontent;
+@property (weak, nonatomic) IBOutlet UIImageView *avatar;
+@property (weak, nonatomic) IBOutlet UILabel *nameLb;
+@property (weak, nonatomic) IBOutlet UITableView *tableView;
+
+@property (strong, nonatomic) NSMutableArray *messageArray;
+
+@end
+
+@implementation CalldetailsController
+
+-(void)viewDidLoad{
+    [super viewDidLoad];
+    [self.navigationController setNavigationBarHidden:YES animated:NO];
+    _tableView.backgroundColor = UIColor.clearColor;
+    _tableView.delegate = self;
+    _tableView.dataSource = self;
+    [_tableView registerClass:CalldetailsCell.class forCellReuseIdentifier:@"cellT"];
+    _topcontent.layer.cornerRadius = 8.0f;
+    
+    CallListStore.shareInstance.delegate = self;
+    if(self.callItem){
+        NSString *chatId = self.callItem[@"chatId"];
+        [CallListStore.shareInstance loadUserCallMsg:chatId];
+        
+        _avatar.layer.cornerRadius = 43;
+        _avatar.layer.masksToBounds = YES;
+        _avatar.contentMode = UIViewContentModeScaleAspectFill;
+        
+        NSString *avatar =self.callItem[@"fromAvatar"]?:@"";
+        if([avatar isKindOfClass:[NSString class]]){
+            
+        }
+        else{
+            avatar = @"";
+        }
+        [self.avatar sd_setImageWithURL:[NSURL URLWithString:avatar] placeholderImage:[UIImage imageNamed:@"Avatar"]];
+        self.nameLb.text =self.callItem[@"fromName"]?:@"";
+        
+    }
+
+}
+
+-(void)viewWillAppear:(BOOL)animated{
+    [super viewWillAppear:animated];
+    CallListStore.shareInstance.delegate = self;
+}
+
+-(NSMutableArray *)messageArray{
+    if(_messageArray){
+        return _messageArray;
+    }
+    _messageArray = [NSMutableArray array];
+    return _messageArray;
+}
+
+- (IBAction)fanhui:(id)sender {
+    NSLog(@"fanhui------");
+    CallListStore.shareInstance.delegate = nil;
+    [self dismissViewControllerAnimated:YES completion:nil];
+}
+
+- (IBAction)actBtselect:(id)sender {
+    
+    NSString *chatId = self.callItem[@"chatId"];
+    
+    UIButton *bt = (UIButton *)sender;
+    NSInteger type =bt.tag;
+    if(chatId.length>0){
+        if(type==1){
+            
+            UIStoryboard *board = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
+            
+            ChatController *chatctr = [board instantiateViewControllerWithIdentifier:@"ChatController"];
+            
+            UINavigationController *uiNavC = [[UINavigationController alloc] initWithRootViewController:chatctr];
+            
+            uiNavC.modalPresentationStyle = UIModalPresentationFullScreen;
+            chatctr.chatId = chatId;
+            chatctr.type = 0;
+            ChatListStore.shareInstance.chatId =chatId;
+            
+            chatctr.titlename = self.callItem[@"fromName"]?:@"";
+            chatctr.avatar = self.callItem[@"fromAvatar"]?:@"";
+
+            [self presentViewController :uiNavC animated:YES completion:nil];
+        }
+        else if(type==2){
+            [[AppDelegate sharedInstance] startJSCall:chatId room:@"" isCaller:YES audioOnly:YES];
+        }
+        else if(type==3){
+            [[AppDelegate sharedInstance] startJSCall:chatId room:@"" isCaller:YES audioOnly:NO];
+        }
+    }
+    else{
+        NSLog(@"呼叫用户信息错误");
+    }
+}
+
+
+- (IBAction)allRecord:(id)sender {
+}
+
+
+
+#pragma mark CallListStoreDelegate
+-(void)ChatsChange:(NSArray *)msgList type:(NSInteger)typpe{
+    NSLog(@"CalldetailsController:msgList:%lu",(unsigned long)msgList.count);
+    _messageArray =[msgList copy];
+    [_tableView reloadData];
+    
+}
+
+
+
+#pragma mark UITableViewDelegate,UITableViewDataSource
+-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
+    return 1;
+}
+-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
+//    if(_messageArray.count==0){
+//        _meiyoujlLb.alpha=1;
+//    }
+//    else{
+//        _meiyoujlLb.alpha=0;
+//    }
+    NSLog(@"_messageArray.count:%lu",(unsigned long)_messageArray.count);
+    return _messageArray.count;
+}
+
+-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
+   
+    static NSString *cellID = @"chatCellView";
+    CalldetailsCell *cell =[tableView dequeueReusableCellWithIdentifier:cellID];
+    if(cell==nil){
+        cell=[[CalldetailsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];
+    }
+//    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
+    
+    NSDictionary *dic = [self.messageArray objectAtIndex:indexPath.row];
+    
+    [cell fillWithData:dic];
+    
+    return cell;
+}
+
+
+
+
+- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
+    return 80.0f;
+}
+
+
+
+-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
+    
+    
+//    NSDictionary *dic = [self.messageArray objectAtIndex:indexPath.row];
+//    
+//    UIStoryboard *board = [UIStoryboard storyboardWithName:@"CallControllers" bundle:[NSBundle mainBundle]];
+//    CalldetailsController *chatctr = [board instantiateViewControllerWithIdentifier:@"CalldetailsController"];
+//    chatctr.callItem = dic;
+//    UINavigationController *uiNavC = [[UINavigationController alloc] initWithRootViewController:chatctr];
+//    uiNavC.modalPresentationStyle = UIModalPresentationFullScreen;
+//    [self presentViewController :uiNavC animated:YES completion:nil];
+}
+
+@end

+ 26 - 0
ABtong/ABtong/ALLController/call/PhoneKeybord.h

@@ -0,0 +1,26 @@
+//
+//  PhoneKeybord.h
+//  ABtong
+//
+//  Created by qin on 2025/8/6.
+//
+
+#ifndef PhoneKeybord_h
+#define PhoneKeybord_h
+
+#import <UIKit/UIKit.h>
+
+@protocol PhoneKeybordDelegate <NSObject>
+@optional
+- (void)actionNote:(NSDictionary *_Nullable)dic type:(NSInteger)type;
+@end
+
+@interface PhoneKeybord : UIView
+
+@property (nonatomic,weak) id <PhoneKeybordDelegate> delegate;
+
+@end
+
+
+
+#endif /* PhoneKeybord_h */

+ 171 - 0
ABtong/ABtong/ALLController/call/PhoneKeybord.m

@@ -0,0 +1,171 @@
+//
+//  PhoneKeybord.m
+//  ABtong
+//
+//  Created by qin on 2025/8/6.
+//
+
+#import <Foundation/Foundation.h>
+#import "FriendNetApi.h"
+#import "PhoneKeybord.h"
+#import "FirendStore.h"
+
+@interface PhoneKeybord()
+
+
+
+
+@property (weak, nonatomic) IBOutlet UILabel *phoneInput;
+
+@property (strong, nonatomic) NSDictionary *showDic;
+
+@property (weak, nonatomic) IBOutlet UIView *userContentV;
+@property (weak, nonatomic) IBOutlet UIImageView *avatar;
+@property (weak, nonatomic) IBOutlet UILabel *nameLb;
+
+
+
+@end
+
+@implementation PhoneKeybord
+
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    self = [super initWithFrame:frame];
+    if (self) {
+        self.backgroundColor = [UIColor whiteColor];
+        _userContentV.alpha = 0;
+    }
+    return self;
+}
+
+- (IBAction)actBtselect:(id)sender {
+    UIButton *bt = (UIButton *)sender;
+    NSLog(@"actBtselect:%ld",(long)bt.tag);
+    
+    if (self.delegate) {
+        [self.delegate actionNote:_showDic type:bt.tag];
+    }
+    self.alpha = 0;
+    _phoneInput.text = @"";
+    _userContentV.alpha = 0;
+    [FirendStore.shareInstance reciveMsg:[_showDic copy]];
+    [self addAbtFirend:_showDic];
+    
+    
+}
+
+
+
+- (IBAction)keybtselect:(id)sender {
+    UIButton *bt = (UIButton *)sender;
+    if (bt.tag<10) {//1到九
+        _phoneInput.text = [NSString stringWithFormat:@"%@%ld",_phoneInput.text,(long)bt.tag];
+    }
+    if(bt.tag==10){//零
+        _phoneInput.text = [NSString stringWithFormat:@"%@0",_phoneInput.text];
+    }
+    
+    
+    if(bt.tag==11){//星号*
+        _phoneInput.text = [NSString stringWithFormat:@"%@*",_phoneInput.text];
+    }
+    if(bt.tag==12){//井号#
+        _phoneInput.text = [NSString stringWithFormat:@"%@#",_phoneInput.text];
+    }
+    if(bt.tag==13){//关闭
+        self.alpha = 0;
+        _phoneInput.text = @"";
+    }
+    if(bt.tag==14){//拨号
+        
+        if(_userContentV.alpha != 1){
+            [MBProgressHUD showWithText:NSLocalizedString(@"无效号码", @"")];
+            return;
+        }
+        
+        self.alpha = 0;
+        if (self.delegate) {
+            [self.delegate actionNote:_showDic type:2];
+        }
+        _phoneInput.text = @"";
+        _userContentV.alpha = 0;
+    }
+    if(bt.tag==15){//粘贴
+        UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
+        NSString *string = pasteboard.string;
+        if (string&&string.length>0&&string.length<7) {
+            _phoneInput.text=string;
+        }
+    }
+    if(bt.tag==16){//删除
+        NSString *str =_phoneInput.text;
+        if(str.length>0){
+            str=[str substringToIndex:str.length-1];
+            _phoneInput.text = str;
+        }
+    }
+    
+    if(_phoneInput.text.length==6){
+        [self getUserinfo:_phoneInput.text];
+    }
+    else{
+        _userContentV.alpha = 0;
+    }
+    
+}
+
+-(void)getUserinfo:(NSString *)keyword{
+    [FriendNetApi searchfriend:keyword succ:^(int code, NSDictionary * res) {
+        NSLog(@"res:%@",res);
+        NSArray *data= res[@"data"];
+        if(data.count>0){
+            NSLog(@"1:%@",data[0]);
+            [self shouwUserinfo:data[0]];
+        }
+        else{
+            NSLog(@"呼叫用户信息错误");
+        }
+        
+    } fail:^(NSError * _Nonnull error) {
+        
+    }];
+}
+
+-(void)shouwUserinfo:(NSDictionary *)info{
+    NSString *userId = [UDManager.shareInstance getSDManager:dkuserId];
+    if(userId&&[userId isEqualToString:info[@"id"]]){
+        return;
+    }
+    _showDic = info.copy;
+    _userContentV.layer.cornerRadius = 8;
+    _userContentV.alpha = 1;
+    _avatar.layer.cornerRadius = 25;
+    _nameLb.text =info[@"name"]?:@"";
+    NSString *url = info[@"avatar"];
+    if([url isKindOfClass:[NSNull class]]){
+        url=@"";
+    }
+    [_avatar sd_setImageWithURL:[NSURL URLWithString:url] placeholderImage:[UIImage imageNamed:@"Avatar"]];
+}
+
+-(void)addAbtFirend:(NSDictionary *)dic{
+    if(dic==nil){
+        return;
+    }
+    NSDictionary *dis = @{
+        @"friendId":dic[@"id"],
+        @"message":@""
+    };
+    
+    [FriendNetApi AddTongxunlu:dis succ:^(int code, NSDictionary * res) {
+        NSLog(@"res:%@",res);
+        
+    } fail:^(NSError * _Nonnull error) {
+        NSLog(@"error:%@",error);
+    }];
+}
+
+
+
+@end

+ 335 - 0
ABtong/ABtong/ALLController/call/PhoneKeybord.xib

@@ -0,0 +1,335 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23727" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina6_12" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23721"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="System colors in document resources" minToolsVersion="11.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="PhoneKeybord">
+            <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <view alpha="0.69999999999999996" contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2Zt-D3-2ZK">
+                    <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
+                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                    <color key="backgroundColor" systemColor="opaqueSeparatorColor"/>
+                </view>
+                <view alpha="0.0" contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="NUO-3I-vzO">
+                    <rect key="frame" x="8" y="358" width="377" height="67"/>
+                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
+                    <subviews>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="Avatar0" translatesAutoresizingMaskIntoConstraints="NO" id="t0I-QC-OQE">
+                            <rect key="frame" x="8" y="8" width="50" height="50"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
+                        </imageView>
+                        <button opaque="NO" tag="1" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="0e4-YE-NyQ">
+                            <rect key="frame" x="180" y="11" width="44" height="44"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
+                            <color key="tintColor" red="0.26274509800000001" green="0.26274509800000001" blue="0.26274509800000001" alpha="1" colorSpace="calibratedRGB"/>
+                            <state key="normal" title="Button"/>
+                            <buttonConfiguration key="configuration" style="filled" image="liaotian">
+                                <backgroundConfiguration key="background"/>
+                                <color key="baseBackgroundColor" red="0.2627450980392157" green="0.2627450980392157" blue="0.2627450980392157" alpha="1" colorSpace="calibratedRGB"/>
+                            </buttonConfiguration>
+                            <connections>
+                                <action selector="actBtselect:" destination="iN0-l3-epB" eventType="touchUpInside" id="UwA-eC-fUe"/>
+                            </connections>
+                        </button>
+                        <button opaque="NO" tag="2" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="NuN-kp-UlZ">
+                            <rect key="frame" x="247" y="11" width="44" height="44"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
+                            <color key="tintColor" red="0.26274509800000001" green="0.26274509800000001" blue="0.26274509800000001" alpha="1" colorSpace="calibratedRGB"/>
+                            <state key="normal" title="Button"/>
+                            <buttonConfiguration key="configuration" style="filled" image="callhuixiao">
+                                <backgroundConfiguration key="background"/>
+                                <color key="baseBackgroundColor" white="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            </buttonConfiguration>
+                            <connections>
+                                <action selector="actBtselect:" destination="iN0-l3-epB" eventType="touchUpInside" id="l6j-8e-PcM"/>
+                            </connections>
+                        </button>
+                        <button opaque="NO" tag="3" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="trA-hA-yzG">
+                            <rect key="frame" x="314" y="11" width="44" height="44"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
+                            <color key="tintColor" red="0.26274509800000001" green="0.26274509800000001" blue="0.26274509800000001" alpha="1" colorSpace="calibratedRGB"/>
+                            <state key="normal" title="Button"/>
+                            <buttonConfiguration key="configuration" style="filled" image="shipinth">
+                                <backgroundConfiguration key="background"/>
+                                <color key="baseBackgroundColor" white="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            </buttonConfiguration>
+                            <connections>
+                                <action selector="actBtselect:" destination="iN0-l3-epB" eventType="touchUpInside" id="G6k-9K-WRT"/>
+                            </connections>
+                        </button>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Ubp-9s-7vW">
+                            <rect key="frame" x="66" y="23" width="106" height="21"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
+                            <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                            <nil key="textColor"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                    </subviews>
+                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                </view>
+                <view contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="BD3-3p-1Ue">
+                    <rect key="frame" x="0.0" y="434" width="393" height="418"/>
+                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
+                    <subviews>
+                        <button opaque="NO" tag="3" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="F6j-ju-0EL">
+                            <rect key="frame" x="277" y="60" width="65" height="40"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <state key="normal" title="3"/>
+                            <buttonConfiguration key="configuration" style="filled" title="3">
+                                <color key="baseForegroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                <color key="baseBackgroundColor" red="0.10196078431372549" green="0.11764705882352941" blue="0.22745098039215686" alpha="1" colorSpace="calibratedRGB"/>
+                            </buttonConfiguration>
+                            <connections>
+                                <action selector="keybtselect:" destination="iN0-l3-epB" eventType="touchUpInside" id="pvg-ra-Gel"/>
+                            </connections>
+                        </button>
+                        <button opaque="NO" tag="2" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="bFV-yC-FDA">
+                            <rect key="frame" x="164" y="61" width="65" height="40"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <state key="normal" title="2" backgroundImage="yuandian"/>
+                            <buttonConfiguration key="configuration" style="filled" title="2">
+                                <backgroundConfiguration key="background"/>
+                                <color key="baseForegroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                <color key="baseBackgroundColor" red="0.10196078431372549" green="0.11764705882352941" blue="0.22745098039215686" alpha="1" colorSpace="calibratedRGB"/>
+                            </buttonConfiguration>
+                            <connections>
+                                <action selector="keybtselect:" destination="iN0-l3-epB" eventType="touchUpInside" id="Yay-uV-D86"/>
+                            </connections>
+                        </button>
+                        <button opaque="NO" tag="1" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="nyT-QY-mOH">
+                            <rect key="frame" x="57" y="60" width="65" height="40"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <state key="normal" title="1"/>
+                            <buttonConfiguration key="configuration" style="filled" title="1" cornerStyle="dynamic">
+                                <backgroundConfiguration key="background"/>
+                                <fontDescription key="titleFontDescription" type="system" pointSize="20"/>
+                                <color key="baseForegroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                <color key="baseBackgroundColor" red="0.10196078431372549" green="0.11764705882352941" blue="0.22745098039215686" alpha="1" colorSpace="calibratedRGB"/>
+                            </buttonConfiguration>
+                            <connections>
+                                <action selector="keybtselect:" destination="iN0-l3-epB" eventType="touchUpInside" id="yoy-Yk-xYl"/>
+                            </connections>
+                        </button>
+                        <button opaque="NO" tag="6" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="vPP-mP-Ffs">
+                            <rect key="frame" x="277" y="128" width="65" height="40"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <state key="normal" title="6" backgroundImage="yuandian"/>
+                            <buttonConfiguration key="configuration" style="filled" title="6">
+                                <backgroundConfiguration key="background"/>
+                                <color key="baseBackgroundColor" red="0.1019607843" green="0.1176470588" blue="0.2274509804" alpha="1" colorSpace="calibratedRGB"/>
+                            </buttonConfiguration>
+                            <connections>
+                                <action selector="keybtselect:" destination="iN0-l3-epB" eventType="touchUpInside" id="Oqu-bh-ejU"/>
+                            </connections>
+                        </button>
+                        <button opaque="NO" tag="5" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="vh7-3g-GDi">
+                            <rect key="frame" x="164" y="128" width="65" height="40"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <state key="normal" title="5" backgroundImage="yuandian"/>
+                            <buttonConfiguration key="configuration" style="filled" title="5">
+                                <backgroundConfiguration key="background"/>
+                                <color key="baseBackgroundColor" red="0.1019607843" green="0.1176470588" blue="0.2274509804" alpha="1" colorSpace="calibratedRGB"/>
+                            </buttonConfiguration>
+                            <connections>
+                                <action selector="keybtselect:" destination="iN0-l3-epB" eventType="touchUpInside" id="3ta-ew-Eh7"/>
+                            </connections>
+                        </button>
+                        <button opaque="NO" tag="4" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="tro-4w-Cqf">
+                            <rect key="frame" x="57" y="128" width="65" height="40"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <state key="normal" title="4" backgroundImage="yuandian"/>
+                            <buttonConfiguration key="configuration" style="filled" title="4">
+                                <backgroundConfiguration key="background"/>
+                                <color key="baseBackgroundColor" red="0.1019607843" green="0.1176470588" blue="0.2274509804" alpha="1" colorSpace="calibratedRGB"/>
+                            </buttonConfiguration>
+                            <connections>
+                                <action selector="keybtselect:" destination="iN0-l3-epB" eventType="touchUpInside" id="Kd4-fI-3ta"/>
+                            </connections>
+                        </button>
+                        <button opaque="NO" tag="9" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="WBZ-Qk-FM9">
+                            <rect key="frame" x="277" y="196" width="65" height="40"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <state key="normal" title="9" backgroundImage="yuandian"/>
+                            <buttonConfiguration key="configuration" style="filled" title="9">
+                                <backgroundConfiguration key="background"/>
+                                <color key="baseBackgroundColor" red="0.1019607843" green="0.1176470588" blue="0.2274509804" alpha="1" colorSpace="calibratedRGB"/>
+                            </buttonConfiguration>
+                            <connections>
+                                <action selector="keybtselect:" destination="iN0-l3-epB" eventType="touchUpInside" id="Toq-fl-vt7"/>
+                            </connections>
+                        </button>
+                        <button opaque="NO" tag="8" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="4nQ-0K-O8y">
+                            <rect key="frame" x="164" y="196" width="65" height="40"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <state key="normal" title="8" backgroundImage="yuandian"/>
+                            <buttonConfiguration key="configuration" style="filled" title="8">
+                                <backgroundConfiguration key="background"/>
+                                <color key="baseBackgroundColor" red="0.1019607843" green="0.1176470588" blue="0.2274509804" alpha="1" colorSpace="calibratedRGB"/>
+                            </buttonConfiguration>
+                            <connections>
+                                <action selector="keybtselect:" destination="iN0-l3-epB" eventType="touchUpInside" id="wqT-MT-YWq"/>
+                            </connections>
+                        </button>
+                        <button opaque="NO" tag="7" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="XWO-OU-PHN">
+                            <rect key="frame" x="57" y="196" width="65" height="40"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <state key="normal" title="7" backgroundImage="yuandian"/>
+                            <buttonConfiguration key="configuration" style="filled" title="7">
+                                <backgroundConfiguration key="background"/>
+                                <color key="baseBackgroundColor" red="0.1019607843" green="0.1176470588" blue="0.2274509804" alpha="1" colorSpace="calibratedRGB"/>
+                            </buttonConfiguration>
+                            <connections>
+                                <action selector="keybtselect:" destination="iN0-l3-epB" eventType="touchUpInside" id="POE-AR-SDa"/>
+                            </connections>
+                        </button>
+                        <button opaque="NO" tag="10" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="j3x-j7-LnC">
+                            <rect key="frame" x="164" y="264" width="65" height="40"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <state key="normal" title="0" backgroundImage="yuandian"/>
+                            <buttonConfiguration key="configuration" style="filled" title="0">
+                                <backgroundConfiguration key="background"/>
+                                <color key="baseBackgroundColor" red="0.1019607843" green="0.1176470588" blue="0.2274509804" alpha="1" colorSpace="calibratedRGB"/>
+                            </buttonConfiguration>
+                            <connections>
+                                <action selector="keybtselect:" destination="iN0-l3-epB" eventType="touchUpInside" id="5eX-SC-rmg"/>
+                            </connections>
+                        </button>
+                        <button opaque="NO" tag="12" contentMode="top" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Yaz-k8-sr5">
+                            <rect key="frame" x="277" y="264" width="65" height="40"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <state key="normal" title="#" backgroundImage="yuandian"/>
+                            <buttonConfiguration key="configuration" style="filled" title="#">
+                                <backgroundConfiguration key="background"/>
+                                <color key="baseBackgroundColor" red="0.1019607843" green="0.1176470588" blue="0.2274509804" alpha="1" colorSpace="calibratedRGB"/>
+                            </buttonConfiguration>
+                            <connections>
+                                <action selector="keybtselect:" destination="iN0-l3-epB" eventType="touchUpInside" id="3qT-Gw-PBV"/>
+                            </connections>
+                        </button>
+                        <button opaque="NO" tag="11" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="JAY-Uo-fWh">
+                            <rect key="frame" x="57" y="264" width="65" height="40"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <state key="normal" title="*" backgroundImage="yuandian"/>
+                            <buttonConfiguration key="configuration" style="filled" title="*">
+                                <backgroundConfiguration key="background"/>
+                                <color key="baseBackgroundColor" red="0.1019607843" green="0.1176470588" blue="0.2274509804" alpha="1" colorSpace="calibratedRGB"/>
+                            </buttonConfiguration>
+                            <connections>
+                                <action selector="keybtselect:" destination="iN0-l3-epB" eventType="touchUpInside" id="a4M-Jj-cg6"/>
+                            </connections>
+                        </button>
+                        <button opaque="NO" tag="15" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="qt4-IT-EQV">
+                            <rect key="frame" x="277" y="337" width="65" height="40"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
+                            <fontDescription key="fontDescription" name=".AppleSystemUIFont" family=".AppleSystemUIFont" pointSize="17"/>
+                            <color key="tintColor" systemColor="opaqueSeparatorColor"/>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <state key="normal" title="删除">
+                                <color key="titleColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            </state>
+                            <buttonConfiguration key="configuration" style="filled" title="粘贴">
+                                <fontDescription key="titleFontDescription" type="system" pointSize="18"/>
+                                <color key="baseForegroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                <color key="baseBackgroundColor" red="0.1019607843" green="0.1176470588" blue="0.2274509804" alpha="1" colorSpace="calibratedRGB"/>
+                            </buttonConfiguration>
+                            <connections>
+                                <action selector="keybtselect:" destination="iN0-l3-epB" eventType="touchUpInside" id="OHV-ce-MRX"/>
+                            </connections>
+                        </button>
+                        <button opaque="NO" tag="13" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="RvE-9s-1yB">
+                            <rect key="frame" x="57" y="337" width="65" height="40"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                            <color key="tintColor" systemColor="opaqueSeparatorColor"/>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <state key="normal" title="关闭"/>
+                            <buttonConfiguration key="configuration" style="filled" image="arrow_down">
+                                <color key="baseBackgroundColor" red="0.1019607843" green="0.1176470588" blue="0.2274509804" alpha="1" colorSpace="calibratedRGB"/>
+                            </buttonConfiguration>
+                            <connections>
+                                <action selector="keybtselect:" destination="iN0-l3-epB" eventType="touchUpInside" id="4pB-VC-I8X"/>
+                            </connections>
+                        </button>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="9WM-im-d2y">
+                            <rect key="frame" x="97" y="15" width="199" height="21"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
+                            <fontDescription key="fontDescription" type="system" pointSize="22"/>
+                            <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <button opaque="NO" tag="16" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="id8-gj-vqa">
+                            <rect key="frame" x="296" y="8" width="61" height="35"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
+                            <state key="normal" title="Button"/>
+                            <buttonConfiguration key="configuration" style="plain" image="shanjian"/>
+                            <connections>
+                                <action selector="keybtselect:" destination="iN0-l3-epB" eventType="touchUpInside" id="fMu-LA-ebj"/>
+                            </connections>
+                        </button>
+                        <button opaque="NO" tag="14" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="YRK-hc-emB">
+                            <rect key="frame" x="153" y="337" width="87" height="40"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
+                            <state key="normal" title="Button"/>
+                            <buttonConfiguration key="configuration" style="filled" image="callbai">
+                                <color key="baseBackgroundColor" systemColor="linkColor"/>
+                            </buttonConfiguration>
+                            <connections>
+                                <action selector="keybtselect:" destination="iN0-l3-epB" eventType="touchUpInside" id="JEx-ss-H2A"/>
+                            </connections>
+                        </button>
+                    </subviews>
+                    <color key="backgroundColor" red="0.14509803921568626" green="0.16470588235294117" blue="0.30196078431372547" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
+                </view>
+            </subviews>
+            <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
+            <color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <connections>
+                <outlet property="avatar" destination="t0I-QC-OQE" id="TR3-1m-AzF"/>
+                <outlet property="nameLb" destination="Ubp-9s-7vW" id="bij-Gw-i7W"/>
+                <outlet property="phoneInput" destination="9WM-im-d2y" id="Ll9-1V-nP2"/>
+                <outlet property="userContentV" destination="NUO-3I-vzO" id="6Hv-T2-bY6"/>
+            </connections>
+            <point key="canvasLocation" x="200.76335877862596" y="-269.01408450704224"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="Avatar0" width="88" height="88"/>
+        <image name="arrow_down" width="18" height="10"/>
+        <image name="callbai" width="28" height="28"/>
+        <image name="callhuixiao" width="24" height="24"/>
+        <image name="liaotian" width="24" height="24"/>
+        <image name="shanjian" width="24" height="24"/>
+        <image name="shipinth" width="28" height="20"/>
+        <image name="yuandian" width="200" height="200"/>
+        <systemColor name="linkColor">
+            <color red="0.0" green="0.47843137254901963" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+        </systemColor>
+        <systemColor name="opaqueSeparatorColor">
+            <color red="0.77647058823529413" green="0.77647058823529413" blue="0.78431372549019607" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+        </systemColor>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

+ 1 - 1
ABtong/ABtong/Controller/chat/CameraViewController.h → ABtong/ABtong/ALLController/chatCtr/CameraViewController.h

@@ -2,7 +2,7 @@
 //  CameraViewController.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <UIKit/UIKit.h>

+ 12 - 12
ABtong/ABtong/Controller/chat/CameraViewController.m → ABtong/ABtong/ALLController/chatCtr/CameraViewController.m

@@ -2,7 +2,7 @@
 //  CameraViewController.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import "CameraViewController.h"
@@ -52,7 +52,7 @@
     // 关闭按钮
     self.closeButton = [UIButton buttonWithType:UIButtonTypeCustom];
     self.closeButton.frame = CGRectMake(20, STATUS_Height + 20, 44, 44);
-    [self.closeButton setImage:[UIImage imageNamed:@"common_close_white"] forState:UIControlStateNormal];
+    [self.closeButton setImage:[UIImage imageNamed:@"close_view"] forState:UIControlStateNormal];
     [self.closeButton addTarget:self action:@selector(closeButtonTapped) forControlEvents:UIControlEventTouchUpInside];
     [self.view addSubview:self.closeButton];
     
@@ -145,15 +145,15 @@
 }
 
 - (void)showPermissionDeniedAlert {
-    UIAlertController *alert = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Permission_camera_title", @"")
-                                                                   message:NSLocalizedString(@"Permission_camera_alter", @"")
+    UIAlertController *alert = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"相机权限", @"")
+                                                                   message:NSLocalizedString(@"允许访问相机", @"")
                                                             preferredStyle:UIAlertControllerStyleAlert];
     
-    [alert addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"Common_cancel", @"") style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
+    [alert addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"取消", @"") style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
         [self dismissViewControllerAnimated:YES completion:nil];
     }]];
     
-    [alert addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"Common_goToSetting", @"") style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+    [alert addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"去设置", @"") style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
         [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString] options:@{} completionHandler:nil];
     }]];
     
@@ -291,9 +291,9 @@
     
     UIButton *sendButton = [UIButton buttonWithType:UIButtonTypeCustom];
     sendButton.frame = CGRectMake(CGRectGetWidth(self.view.frame) - 100, CGRectGetHeight(self.view.frame) - 60, 80, 40);
-    [sendButton setTitle:NSLocalizedString(@"Common_send", @"") forState:UIControlStateNormal];
+    [sendButton setTitle:NSLocalizedString(@"发送", @"") forState:UIControlStateNormal];
     [sendButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
-    sendButton.backgroundColor = globalColor(GCTypeGreen);
+    sendButton.backgroundColor = globalColor(GCTypeBlued);
     sendButton.layer.cornerRadius = 4;
     [sendButton addTarget:self action:@selector(sendImage:) forControlEvents:UIControlEventTouchUpInside];
     [previewVC.view addSubview:sendButton];
@@ -324,9 +324,9 @@
     
     UIButton *sendButton = [UIButton buttonWithType:UIButtonTypeCustom];
     sendButton.frame = CGRectMake(CGRectGetWidth(self.view.frame) - 100, CGRectGetHeight(self.view.frame) - 60, 80, 40);
-    [sendButton setTitle:NSLocalizedString(@"Common_send", @"") forState:UIControlStateNormal];
+    [sendButton setTitle:NSLocalizedString(@"发送", @"") forState:UIControlStateNormal];
     [sendButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
-    sendButton.backgroundColor = globalColor(GCTypeGreen);
+    sendButton.backgroundColor = globalColor(GCTypeBlued);
     sendButton.layer.cornerRadius = 4;
     [sendButton addTarget:self action:@selector(sendVideo:) forControlEvents:UIControlEventTouchUpInside];
     [previewVC.view addSubview:sendButton];
@@ -366,10 +366,10 @@
 }
 
 - (void)showErrorAlert:(NSString *)message {
-    UIAlertController *alert = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Common_wrong", @"")
+    UIAlertController *alert = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"错误", @"")
                                                                    message:message
                                                             preferredStyle:UIAlertControllerStyleAlert];
-    [alert addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"Common_confirm", @"") style:UIAlertActionStyleDefault handler:nil]];
+    [alert addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"确定", @"") style:UIAlertActionStyleDefault handler:nil]];
     [self presentViewController:alert animated:YES completion:nil];
 }
 

+ 1 - 1
ABtong/ABtong/Controller/chat/ChatController.h → ABtong/ABtong/ALLController/chatCtr/ChatController.h

@@ -2,7 +2,7 @@
 //  ChatController.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #ifndef ChatController_h

+ 100 - 56
ABtong/ABtong/Controller/chat/ChatController.m → ABtong/ABtong/ALLController/chatCtr/ChatController.m

@@ -2,7 +2,7 @@
 //  ChatController.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <Foundation/Foundation.h>
@@ -13,12 +13,12 @@
 #import <UniformTypeIdentifiers/UniformTypeIdentifiers.h>
 #import "ChatController.h"
 #import "FriendController.h"
-#import "GroupController.h"
 #import "ChatsStore.h"
 #import "ChatListStore.h"
+#import "FirendStore.h"
+
 #import "FriendNetApi.h"
 #import "FileNetApi.h"
-#import "GroupNetApi.h"
 #import "UserNetApi.h"
 #import "GWebSocket.h"
 #import "UDManager.h"
@@ -26,7 +26,7 @@
 #import "GDBManager.h"
 #import "chatpopView.h"
 #import "config.h"
-#import "JSGController.h"
+
 #import "SDWebImage/SDWebImage.h"
 #import "ChatMessageModel.h"
 #import "ChatFileModel.h"
@@ -45,8 +45,9 @@
 
 static const CGFloat kQuoteViewHeight = 46.0f;
 @interface ChatController()<UITextViewDelegate,ChatsStoreDelegate,UITableViewDelegate,UITableViewDataSource,chatpopViewDelegate,PHPickerViewControllerDelegate,UINavigationControllerDelegate,UIDocumentPickerDelegate,UIScrollViewDelegate>
+@property (weak, nonatomic) IBOutlet UIImageView *avatarImg;
 
-@property (weak, nonatomic) IBOutlet UILabel *titlelb;
+@property (weak, nonatomic) IBOutlet UIButton *rightBt;
 @property (weak, nonatomic) IBOutlet UITableView *_tableView;
 
 @property(nonatomic, strong) MentionTextView *inputView;
@@ -112,10 +113,10 @@ static const CGFloat kQuoteViewHeight = 46.0f;
     _isfriend=true;
     
     //输入框
-    _inputView = [[MentionTextView alloc] initWithFrame:CGRectMake(54, 10, self.view.frame.size.width - 180, 40)];
-    _inputView.backgroundColor = globalColor(GCTypeDark2);
+    _inputView = [[MentionTextView alloc] initWithFrame:CGRectMake(54, 10, self.view.frame.size.width - 170, 40)];
+    _inputView.backgroundColor = globalColor(GCTypeinpuv);
     _inputView.layer.cornerRadius = 4.0;
-    _inputView.textColor = [UIColor blackColor];
+    _inputView.textColor = [UIColor whiteColor];
     _inputView.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];
     [_bottonView addSubview:_inputView];
     _inputView.delegate = self; // 设置代理
@@ -137,11 +138,11 @@ static const CGFloat kQuoteViewHeight = 46.0f;
     _AVRecordBt = [[UIButton alloc] initWithFrame:CGRectMake(54, 10, self.view.frame.size.width - 180, 40)];
     [_bottonView addSubview:_AVRecordBt];
     _AVRecordBt.alpha = 0;
-    _AVRecordBt.layer.backgroundColor = globalColor(GCTypeDark2).CGColor;
+    _AVRecordBt.layer.backgroundColor = globalColor(GCTypeinpuv).CGColor;
     _AVRecordBt.layer.cornerRadius = 4.0;
-    [_AVRecordBt setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
+    [_AVRecordBt setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
     [_AVRecordBt setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft];
-    [_AVRecordBt setTitle:@" 按住 说话" forState:UIControlStateNormal];
+    [_AVRecordBt setTitle:NSLocalizedString(@"按住说话", @"") forState:UIControlStateNormal];
     [_AVRecordBt addTarget:self action:@selector(longTarget) forControlEvents:UIControlEventTouchDown];
     [_AVRecordBt addTarget:self action:@selector(UpInside) forControlEvents:UIControlEventTouchUpInside];
     
@@ -166,7 +167,7 @@ static const CGFloat kQuoteViewHeight = 46.0f;
                                                  name:nkonNewMessageNote
                                                object:nil];
     
-    [self inidatastate];
+    [self updataTongxunlu];
     _textV=[[UITextView alloc] init];
     
     _markView=[[UIView alloc] init];
@@ -179,9 +180,9 @@ static const CGFloat kQuoteViewHeight = 46.0f;
     [self initpopbottonView];
     [self setupPreloader];
     
-    NSDictionary *userinfo = [UDManager.shareInstance getDDManager:dkuserinfo];
+    NSDictionary *userinfo = [UDManager.shareInstance getDDManager:nkactuserInfo];
     NSLog(@"viewDidLoad userinfo:%@",userinfo);
-    self.userId = userinfo[@"id"];
+    self.userId = userinfo[@"userId"];
     self.username = userinfo[@"name"];
     self.useravatar = userinfo[@"avatar"];
     
@@ -195,12 +196,7 @@ static const CGFloat kQuoteViewHeight = 46.0f;
         type=@"0";
         [ChatsStore.shareInstance reloadData:self.chatId type:self.type];
     }
-    else if(self.type==1){
-        type=@"1";
-//        [ChatsStore.shareInstance reloadQunData:@"1871105598206210050" type:self.type];
-        [ChatsStore.shareInstance getGroupUserList:self.chatId];
-        [self getGroupInfo];
-    }
+    
     _canloadhistory=true;
     
     NSDictionary *chatMsg=@{
@@ -221,8 +217,12 @@ static const CGFloat kQuoteViewHeight = 46.0f;
     self.msgList = @[];
     [__tableView reloadData];
     
-    _titlelb.text = self.titlename;
-    
+    [_rightBt setTitle:self.titlename forState:UIControlStateNormal];
+    NSDictionary *userinfo = [UDManager.shareInstance getDDManager:nkactuserInfo];
+    NSLog(@"reloadAllData userinfo:%@",userinfo);
+    self.userId = userinfo[@"userId"];
+    self.username = userinfo[@"name"];
+    self.useravatar = userinfo[@"avatar"];
     ChatsStore.shareInstance.delegate = self;
     ChatsStore.shareInstance.chatId = self.chatId;
     ChatsStore.shareInstance.userid =self.userId;
@@ -233,12 +233,7 @@ static const CGFloat kQuoteViewHeight = 46.0f;
         type=@"0";
         [ChatsStore.shareInstance reloadData:self.chatId type:self.type];
     }
-    else if(self.type==1){
-        type=@"1";
-//        [ChatsStore.shareInstance reloadQunData:@"1871105598206210050" type:self.type];
-        [ChatsStore.shareInstance getGroupUserList:self.chatId];
-        [self getGroupInfo];
-    }
+    
     _canloadhistory=true;
     
     NSDictionary *chatMsg=@{
@@ -262,7 +257,13 @@ static const CGFloat kQuoteViewHeight = 46.0f;
 }
 -(void)viewDidAppear:(BOOL)animated{
     [super viewDidAppear:animated];
-    _titlelb.text = self.titlename;
+    [_rightBt setTitle:self.titlename forState:UIControlStateNormal];
+    if (self.avatar) {
+        [_avatarImg sd_setImageWithURL:getURL(self.avatar) placeholderImage:kImageMake(@"Avatar")];
+    }else{
+        _avatarImg.image = kImageMake(@"Avatar");
+    }
+    _avatarImg.layer.cornerRadius = 22;
     [self startTimer];
     [self movetoBotton];
 //    NSLog(@"viewDidAppear-----:%@",self);
@@ -360,29 +361,19 @@ static const CGFloat kQuoteViewHeight = 46.0f;
         friendctr.friendId = self.chatId;
         [self presentViewController :uiNavC animated:YES completion:nil];
     }
-    else{
-        UIStoryboard *board = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
-        GroupController *friendctr = [board instantiateViewControllerWithIdentifier:@"GroupController"];
-        UINavigationController *uiNavC = [[UINavigationController alloc] initWithRootViewController:friendctr];
-        uiNavC.modalPresentationStyle = UIModalPresentationFullScreen;
-        friendctr.groupMsg = nil;
-        friendctr.groupId = self.chatId;
-        [self presentViewController :uiNavC animated:YES completion:nil];
-    }
-    
 }
 
 - (IBAction)yuyinBt:(id)sender {
     if(_AVRecordBt.alpha==1){
         _AVRecordBt.alpha = 0;
         _inputView.alpha = 1;
-        [_yuyinctr setImage:[UIImage imageNamed:@"yuyin"] forState:UIControlStateNormal];
+        [_yuyinctr setImage:[UIImage imageNamed:@"huatong"] forState:UIControlStateNormal];
         [self dismissKeyboard];
     }
     else{
         _AVRecordBt.alpha = 1;
         _inputView.alpha = 0;
-        [_yuyinctr setImage:[UIImage imageNamed:@"jianpan"] forState:UIControlStateNormal];
+        [_yuyinctr setImage:[UIImage imageNamed:@"shuru"] forState:UIControlStateNormal];
     }
 }
 - (IBAction)biaoqingBt:(id)sender {
@@ -417,18 +408,16 @@ static const CGFloat kQuoteViewHeight = 46.0f;
     alert = nil;
 }
 
-#pragma mark 群信息
-- (void)getGroupInfo{
-    [GroupNetApi getGroupInfo:self.chatId succ:^(int code, NSDictionary * _Nullable result) {
-//        NSLog(@"GroupInfo:----%@",result);
-        self.groupInfo = result[@"data"];
-        self.titlename = self.groupInfo[@"name"];
-        self.titlelb.text = self.groupInfo[@"name"];
-    } fail:^(NSError * _Nonnull error) {
-        NSLog(@"error:%@",error);
-    }];
+
+//判断并添加到通讯录
+-(void)updataTongxunlu{
+    
+    [FirendStore.shareInstance updataTongxunlu:self.chatId];
+    
 }
 
+
+
 #pragma mark ChatsStoreDelegate
 
 -(void)getlocalData{
@@ -755,6 +744,10 @@ static const CGFloat kQuoteViewHeight = 46.0f;
             case 7:
                 NSLog(@"------保存------");
                 
+                break;
+            case 8:
+                NSLog(@"------保存相册------");
+                
                 break;
             case 99:
 //                NSLog(@"------长按开始------");
@@ -1777,8 +1770,8 @@ static const CGFloat kQuoteViewHeight = 46.0f;
 }
 
 -(void)UpInside{
-    _AVRecordBt.layer.backgroundColor = globalColor(GCTypeDark2).CGColor;
-    [_AVRecordBt setTitle:@" 按住 说话" forState:UIControlStateNormal];
+    _AVRecordBt.layer.backgroundColor = globalColor(GCTypeinpuv).CGColor;
+    [_AVRecordBt setTitle:NSLocalizedString(@"按住说话", @"") forState:UIControlStateNormal];
     NSLog(@"UpInside----------");
     [_recorder stop];
     _recorder=nil;
@@ -1852,6 +1845,16 @@ static const CGFloat kQuoteViewHeight = 46.0f;
 }
 
 
+- (IBAction)yuyintuhuAct:(id)sender {
+    [self showWebRtcVidio:4];
+}
+
+- (IBAction)shipintuhuAct:(id)sender {
+    [self showWebRtcVidio:5];
+}
+
+
+
 -(void)showWebRtcVidio:(NSInteger)state{
     if(self.type==1){
         [MBProgressHUD showWithText:@"群聊暂时不支持该功能"];
@@ -1930,7 +1933,7 @@ static const CGFloat kQuoteViewHeight = 46.0f;
     UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
     pasteboard.string = content;
     
-    [MBProgressHUD showWithText:NSLocalizedString(@"cellact-copysuccese", @"")];
+    [MBProgressHUD showWithText:NSLocalizedString(@"拷贝成功", @"")];
 }
 
 - (void)addFavorites:(NSDictionary *)dict{
@@ -1954,7 +1957,7 @@ static const CGFloat kQuoteViewHeight = 46.0f;
             }
         }
         else{
-            [MBProgressHUD showWithText:NSLocalizedString(@"AppLock_fail", @"收藏失败")];
+            [MBProgressHUD showWithText:NSLocalizedString(@"操作失败", @"收藏失败")];
         }
         
     } fail:^(NSError * _Nonnull error) {
@@ -2109,6 +2112,47 @@ static const CGFloat kQuoteViewHeight = 46.0f;
     [self.inputView becomeFirstResponder];
 }
 
+
+- (void)saveBendi:(ChatMessageModel *)message{
+    //保存视频
+    if(message.messageType==ChatMessageTypeVideo){
+        
+        NSURL *videoURL = [NSURL fileURLWithPath:message.url];
+        if (message.localurl && [[NSFileManager defaultManager] fileExistsAtPath:message.localurl]) {
+            videoURL = [NSURL fileURLWithPath:message.localurl];
+        }
+        [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
+            [PHAssetChangeRequest creationRequestForAssetFromVideoAtFileURL:videoURL];
+        } completionHandler:^(BOOL success, NSError *error) {
+            if (success) {
+                NSLog(@"视频保存成功");
+            } else {
+                NSLog(@"视频保存失败: %@", error.localizedDescription);
+            }
+        }];
+        return;
+    }
+    
+    if(message.messageType==ChatMessageTypeFile){
+        // 创建文件保存器实例
+        NSURL *videoURL = [NSURL fileURLWithPath:message.url];
+        if (message.localurl && [[NSFileManager defaultManager] fileExistsAtPath:message.localurl]) {//文件存在沙盒
+            videoURL = [NSURL fileURLWithPath:message.localurl];
+        }
+        else{//下载线上文件
+            [FileNetApi downLoadWToken:videoURL succ:^(int code, NSDictionary * res) {
+                NSLog(@"downLoadWToken:%@",res);
+            } fail:^(NSError * _Nonnull error) {
+                NSLog(@"error:%@",error);
+            }];
+        }
+    }
+
+    
+}
+
+
+
 - (void)closeQuoteView{
     self.isQuoteMessage = NO;
     self.quoteView.hidden = YES;
@@ -2249,7 +2293,7 @@ static const CGFloat kQuoteViewHeight = 46.0f;
             }
             if (message.content.length==0) {
                 if (message.messageType==7) {
-                    message.content=NSLocalizedString(@"ChatVtr-guaduan", @"");
+                    message.content=NSLocalizedString(@"通话结束", @"");
                 }
                 else{
                     return;

+ 1 - 1
ABtong/ABtong/Controller/chat/ChatListCell.h → ABtong/ABtong/ALLController/chatCtr/ChatListCell.h

@@ -2,7 +2,7 @@
 //  ChatListCell.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #ifndef ChatListCell_h

+ 33 - 20
ABtong/ABtong/Controller/chat/ChatListCell.m → ABtong/ABtong/ALLController/chatCtr/ChatListCell.m

@@ -2,7 +2,7 @@
 //  ChatListCell.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <Foundation/Foundation.h>
@@ -28,6 +28,8 @@
     }
     return self;
 }
+
+
 - (void)fillWithData:( NSDictionary*)data {
     
 //    NSLog(@"fillWithData:%@",data);
@@ -86,29 +88,40 @@
 
 -(NSString *)timeF:(NSInteger)time{
     //NSLog(@"time:%ld",(long)time);
+    //NSLog(@"time:%ld",(long)time);
+    // 创建日期格式器
+    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+    [formatter setDateFormat:@"dd"]; // 设置你想要的日期格式
+    
+    
+    long long timestamp =(long)time/1000; // 例如:2021-10-01 00:00:00 UTC
+    // 转换为NSDate
+    NSDate *date = [NSDate dateWithTimeIntervalSince1970:timestamp];
+    NSString *dateString = [formatter stringFromDate:date];
+    
     
-    if(time<=0){
-        return @"";
-    }
     NSDate *now = [NSDate date];
     NSTimeInterval trt = [now timeIntervalSince1970];
-    NSInteger shijiancha = trt-(long)time/1000;
+    date = [NSDate dateWithTimeIntervalSince1970:trt];
+    NSString *tdateString = [formatter stringFromDate:date];
+    
+    
+    NSInteger shijiancha = trt-timestamp;
+    
     if(shijiancha<60){
-        return NSLocalizedString(@"time-oneminint", @"");
+        return NSLocalizedString(@"1分钟内", @"");
     }
-    if(shijiancha>24*3600){
-        shijiancha=shijiancha/(24*3600);
-        if(shijiancha>0){
-            NSDate *date = [NSDate dateWithTimeIntervalSince1970:(long)time/1000];
-            // 初始化NSDateFormatter
-            NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
-            // 设置日期格式,例如:"yyyy-MM-dd HH:mm:ss"
-            [formatter setDateFormat:@"yyyy-MM-dd"];
-            // 将日期格式化为字符串
-            NSString *dateString = [formatter stringFromDate:date];
-            return dateString;
-        }
-        return [NSString stringWithFormat:@"%ld%@",(long)shijiancha,NSLocalizedString(@"time-outday", @"")];
+    if(shijiancha>24*3600||dateString.intValue!=tdateString.intValue){
+        // 假设这是你的时间戳(以秒为单位)
+        long long timestamp =(long)time/1000; // 例如:2021-10-01 00:00:00 UTC
+        // 转换为NSDate
+        NSDate *date = [NSDate dateWithTimeIntervalSince1970:timestamp];
+        // 创建日期格式器
+        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+        [formatter setDateFormat:@"yyyy-MM-dd HH:mm"]; // 设置你想要的日期格式
+        // 转换为字符串
+        NSString *dateString = [formatter stringFromDate:date];
+        return dateString;
     }
     else{
         NSInteger xiaoshi = shijiancha/3600;
@@ -126,7 +139,7 @@
             return dateString;
         }
         else{
-            return [NSString stringWithFormat:@"%ld%@",(long)fenzhong,NSLocalizedString(@"time-outmin", @"")];
+            return [NSString stringWithFormat:@"%ld%@",(long)fenzhong,NSLocalizedString(@"分钟前", @"")];
         }
     }
     

+ 16 - 16
ABtong/ABtong/Controller/chat/ChatListCell.xib → ABtong/ABtong/ALLController/chatCtr/ChatListCell.xib

@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23727" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
     <device id="retina6_12" orientation="portrait" appearance="light"/>
     <dependencies>
         <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23721"/>
         <capability name="System colors in document resources" minToolsVersion="11.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
@@ -21,20 +21,6 @@
                         <rect key="frame" x="30" y="18" width="44" height="44"/>
                         <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                     </imageView>
-                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="9gh-hv-yML">
-                        <rect key="frame" x="84" y="18" width="220" height="30"/>
-                        <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
-                        <fontDescription key="fontDescription" type="boldSystem" pointSize="16"/>
-                        <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-                        <nil key="highlightedColor"/>
-                    </label>
-                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="KT8-3a-O4o">
-                        <rect key="frame" x="84" y="44" width="280" height="30"/>
-                        <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
-                        <fontDescription key="fontDescription" type="system" pointSize="14"/>
-                        <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-                        <nil key="highlightedColor"/>
-                    </label>
                     <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="99" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ypC-gO-ZGJ">
                         <rect key="frame" x="59" y="10" width="20" height="20"/>
                         <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
@@ -50,6 +36,20 @@
                         <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                         <nil key="highlightedColor"/>
                     </label>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="9gh-hv-yML">
+                        <rect key="frame" x="84" y="10" width="220" height="30"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
+                        <fontDescription key="fontDescription" type="boldSystem" pointSize="16"/>
+                        <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="KT8-3a-O4o">
+                        <rect key="frame" x="82" y="36" width="280" height="30"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
+                        <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                        <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                        <nil key="highlightedColor"/>
+                    </label>
                 </subviews>
             </tableViewCellContentView>
             <connections>

+ 18 - 0
ABtong/ABtong/ALLController/chatCtr/ChatListController.h

@@ -0,0 +1,18 @@
+//
+//  ChatListController.h
+//  ABtong
+//
+//  Created by qin on 2025/7/28.
+//
+
+#ifndef ChatListController_h
+#define ChatListController_h
+
+
+#endif /* ChatListController_h */
+#import <UIKit/UIKit.h>
+@interface ChatListController : UIViewController
+
+@property(nonatomic, strong) NSMutableArray *chatlist;
+
+@end

+ 9 - 9
ABtong/ABtong/Controller/chat/ChatIndexController.m → ABtong/ABtong/ALLController/chatCtr/ChatListController.m

@@ -1,28 +1,28 @@
 //
-//  ChatIndexController.m
+//  ChatListController.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <Foundation/Foundation.h>
-#import "ChatIndexController.h"
+#import "ChatListController.h"
 #import "ChatListCell.h"
 #import "ChatListStore.h"
 #import "ChatController.h"
 #import "ChatNetApi.h"
 
 
-@interface ChatIndexController()<UITableViewDelegate,UITableViewDataSource,ChatListStoreDelegate>
+@interface ChatListController()<UITableViewDelegate,UITableViewDataSource,ChatListStoreDelegate>
 @property (weak, nonatomic) IBOutlet UITableView *_tableView;
 
 
 @end
 
-@implementation ChatIndexController
+@implementation ChatListController
 -(void)viewDidLoad{
     [super viewDidLoad];
-    NSLog(@"ChatIndexController viewDidLoad");
+    NSLog(@"ChatListController viewDidLoad");
     self._tableView.delegate = self;
     self._tableView.dataSource = self;
     self._tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
@@ -37,7 +37,7 @@
 
 -(void)viewWillAppear:(BOOL)animated{
     [super viewWillAppear:animated];
-    NSLog(@"ChatIndexController viewWillAppear");
+    NSLog(@"ChatListController viewWillAppear");
     ChatListStore.shareInstance.delegate = self;
     ChatListStore.shareInstance.chatId =@"";
     [ChatListStore.shareInstance reloadData:true];
@@ -46,7 +46,7 @@
 
 -(void)viewDidDisappear:(BOOL)animated{
     [super viewDidDisappear:animated];
-    NSLog(@"ChatIndexController viewDidDisappear");
+    NSLog(@"ChatListController viewDidDisappear");
     ChatListStore.shareInstance.delegate = nil;
 }
 
@@ -54,7 +54,7 @@
 -(void)ChatListChange:(NSArray *)array{
     
     self.chatlist = [NSMutableArray arrayWithArray:array];
-//    NSLog(@"self.chatlist:%@",self.chatlist);
+    NSLog(@"self.chatlist:%@",self.chatlist);
     [self._tableView reloadData];
 }
 

+ 1 - 1
ABtong/ABtong/Controller/chat/ChatRecordController.h → ABtong/ABtong/ALLController/chatCtr/ChatRecordController.h

@@ -2,7 +2,7 @@
 //  ChatRecordController.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <UIKit/UIKit.h>

+ 2 - 2
ABtong/ABtong/Controller/chat/ChatRecordController.m → ABtong/ABtong/ALLController/chatCtr/ChatRecordController.m

@@ -2,7 +2,7 @@
 //  ChatRecordController.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import "ChatRecordController.h"
@@ -97,7 +97,7 @@
 #pragma mark lazy
 - (UIImageView *)backgroudImageView{
     if (!_backgroudImageView) {
-        _backgroudImageView = [[UIImageView alloc] initWithImage:kImageMake(@"loginBG")];
+        _backgroudImageView = [[UIImageView alloc] initWithImage:kImageMake(@"bgset")];
     }
     return _backgroudImageView;
 }

+ 3 - 3
ABtong/ABtong/Controller/chat/QuoteDetailController.h → ABtong/ABtong/ALLController/chatCtr/GotoDetailController.h

@@ -1,15 +1,15 @@
 //
-//  QuoteDetailController.h
+//  GotoDetailController.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <UIKit/UIKit.h>
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface QuoteDetailController : UIViewController
+@interface GotoDetailController : UIViewController
 @property (nonatomic, strong) NSString *quotedSenderName;
 @property (nonatomic, strong) NSString *quotedContent;
 @end

+ 6 - 6
ABtong/ABtong/Controller/chat/QuoteDetailController.m → ABtong/ABtong/ALLController/chatCtr/GotoDetailController.m

@@ -1,19 +1,19 @@
 //
-//  QuoteDetailController.m
+//  GotoDetailController.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
-#import "QuoteDetailController.h"
+#import "GotoDetailController.h"
 
-@interface QuoteDetailController ()
+@interface GotoDetailController ()
 @property (nonatomic, strong) UIScrollView *scrollView;
 @property (nonatomic, strong) UIView *contentView;
 @property (nonatomic, strong) UILabel *quoteContentLabel;
 @end
 
-@implementation QuoteDetailController
+@implementation GotoDetailController
 
 - (void)viewDidLoad {
     [super viewDidLoad];
@@ -25,7 +25,7 @@
 - (void)configUI{
 //    self.view.backgroundColor = UIColor.whiteColor;
     
-    UIImageView * bgImageView = [[UIImageView alloc] initWithImage:kImageMake(@"loginBG")];
+    UIImageView * bgImageView = [[UIImageView alloc] initWithImage:kImageMake(@"bgset")];
     [self.view addSubview:bgImageView];
     [bgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.right.top.bottom.mas_equalTo(0);

+ 1 - 1
ABtong/ABtong/Controller/chat/MentionTextView.h → ABtong/ABtong/ALLController/chatCtr/MentionTextView.h

@@ -2,7 +2,7 @@
 //  MentionTextView.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <UIKit/UIKit.h>

+ 1 - 1
ABtong/ABtong/Controller/chat/MentionTextView.m → ABtong/ABtong/ALLController/chatCtr/MentionTextView.m

@@ -2,7 +2,7 @@
 //  MentionTextView.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import "MentionTextView.h"

+ 1 - 1
ABtong/ABtong/Controller/chat/chetCell/ChatAtMemberCell.h → ABtong/ABtong/ALLController/chatCtr/chetCell/ChatAtMemberCell.h

@@ -2,7 +2,7 @@
 //  ChatAtMemberCell.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <UIKit/UIKit.h>

+ 1 - 1
ABtong/ABtong/Controller/chat/chetCell/ChatAtMemberCell.m → ABtong/ABtong/ALLController/chatCtr/chetCell/ChatAtMemberCell.m

@@ -2,7 +2,7 @@
 //  ChatAtMemberCell.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import "ChatAtMemberCell.h"

+ 1 - 1
ABtong/ABtong/Controller/chat/chetCell/ChatAtMemberView.h → ABtong/ABtong/ALLController/chatCtr/chetCell/ChatAtMemberView.h

@@ -2,7 +2,7 @@
 //  ChatAtMemberView.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 #import <UIKit/UIKit.h>
 

+ 13 - 13
ABtong/ABtong/Controller/chat/chetCell/ChatAtMemberView.m → ABtong/ABtong/ALLController/chatCtr/chetCell/ChatAtMemberView.m

@@ -2,7 +2,7 @@
 //  ChatAtMemberView.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import "ChatAtMemberView.h"
@@ -65,10 +65,10 @@
 
 #pragma mark setter
 - (void)setMemberArray:(NSArray *)memberArray{
-    NSDictionary *userinfo = [UDManager.shareInstance getDDManager:dkuserinfo];
+    NSDictionary *userinfo = [UDManager.shareInstance getDDManager:nkactuserInfo];
     NSMutableArray * tempArr = [NSMutableArray arrayWithArray:memberArray];
     for (NSDictionary * member in memberArray) {
-        if ([member[@"id"] isEqualToString:userinfo[@"id"]]) {
+        if ([member[@"id"] isEqualToString:userinfo[@"userId"]]) {
             [tempArr removeObjectAtIndex:[memberArray indexOfObject:member]];
             break;
         }
@@ -82,8 +82,8 @@
     if (self.isBatchMode) {
         //取消多选
         self.isBatchMode = NO;
-        [_rightBtn setTitle:NSLocalizedString(@"Common_multi", @"") forState:UIControlStateNormal];
-        [_leftBtn setTitle:NSLocalizedString(@"Common_close", @"") forState:UIControlStateNormal];
+        [_rightBtn setTitle:NSLocalizedString(@"多选", @"") forState:UIControlStateNormal];
+        [_leftBtn setTitle:NSLocalizedString(@"关闭", @"") forState:UIControlStateNormal];
         [self.tableView reloadData];
     }else{
         //关闭窗口
@@ -95,7 +95,7 @@
     if (self.isBatchMode) {
         //@多人
         if (self.selectedMemberArray.count == 0) {
-            [MBProgressHUD showWithText:NSLocalizedString(@"At_alter", @"")];
+            [MBProgressHUD showWithText:NSLocalizedString(@"At_提示", @"")];
             return;
         }
         
@@ -103,8 +103,8 @@
     }else{
         //@多人模式
         _isBatchMode = YES;
-        [_rightBtn setTitle:NSLocalizedString(@"Common_done", @"") forState:UIControlStateNormal];
-        [_leftBtn setTitle:NSLocalizedString(@"Common_cancel", @"") forState:UIControlStateNormal];
+        [_rightBtn setTitle:NSLocalizedString(@"完成", @"") forState:UIControlStateNormal];
+        [_leftBtn setTitle:NSLocalizedString(@"取消", @"") forState:UIControlStateNormal];
         [self.tableView reloadData];
     }
 }
@@ -120,8 +120,8 @@
 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
     if (self.isGroupMaster && indexPath.row == 0) {
         ChatAtMemberCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass(ChatAtMemberCell.class) forIndexPath:indexPath];
-        cell.avatar.image = kImageMake(@"at_everyone");
-        cell.nickNameLbl.text = NSLocalizedString(@"At_everyone", @"");
+        cell.avatar.image = kImageMake(@"At_所有人");
+        cell.nickNameLbl.text = NSLocalizedString(@"At_所有人", @"");
         return cell;
     }
     
@@ -170,7 +170,7 @@
 - (UIButton *)leftBtn{
     if (!_leftBtn) {
         _leftBtn = [UIButton buttonWithType:UIButtonTypeCustom];
-        [_leftBtn setTitle:NSLocalizedString(@"Common_close", @"") forState:UIControlStateNormal];
+        [_leftBtn setTitle:NSLocalizedString(@"关闭", @"") forState:UIControlStateNormal];
         [_leftBtn setTitleColor:globalColor(GCTypeBlack) forState:UIControlStateNormal];
         _leftBtn.titleLabel.font = SYSFONT(16);
         [_leftBtn addTarget:self action:@selector(leftButtonClicked) forControlEvents:UIControlEventTouchUpInside];
@@ -181,7 +181,7 @@
 - (UIButton *)rightBtn{
     if (!_rightBtn) {
         _rightBtn = [UIButton buttonWithType:UIButtonTypeCustom];
-        [_rightBtn setTitle:NSLocalizedString(@"Common_multi", @"") forState:UIControlStateNormal];
+        [_rightBtn setTitle:NSLocalizedString(@"多选", @"") forState:UIControlStateNormal];
         [_rightBtn setTitleColor:globalColor(GCTypeBlack) forState:UIControlStateNormal];
         _rightBtn.titleLabel.font = SYSFONT(16);
         [_rightBtn addTarget:self action:@selector(rightButtonClicked) forControlEvents:UIControlEventTouchUpInside];
@@ -192,7 +192,7 @@
 - (UILabel *)titleLbl{
     if (!_titleLbl) {
         _titleLbl = [[UILabel alloc] init];
-        _titleLbl.text = NSLocalizedString(@"At_title", @"");
+        _titleLbl.text = NSLocalizedString(@"At_标题", @"");
         _titleLbl.font = SYSBFONT(14);
         _titleLbl.textAlignment = NSTextAlignmentCenter;
         _titleLbl.textColor = globalColor(GCTypeBlack);

+ 1 - 1
ABtong/ABtong/Controller/chat/chetCell/ChatBatchView.h → ABtong/ABtong/ALLController/chatCtr/chetCell/ChatBatchView.h

@@ -2,7 +2,7 @@
 //  ChatBatchView.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 #import <UIKit/UIKit.h>
 

+ 1 - 1
ABtong/ABtong/Controller/chat/chetCell/ChatBatchView.m → ABtong/ABtong/ALLController/chatCtr/chetCell/ChatBatchView.m

@@ -2,7 +2,7 @@
 //  ChatBatchView.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import "ChatBatchView.h"

+ 1 - 1
ABtong/ABtong/Controller/chat/chetCell/ChatFileModel.h → ABtong/ABtong/ALLController/chatCtr/chetCell/ChatFileModel.h

@@ -2,7 +2,7 @@
 //  ChatFileModel.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <Foundation/Foundation.h>

+ 1 - 1
ABtong/ABtong/Controller/chat/chetCell/ChatFileModel.m → ABtong/ABtong/ALLController/chatCtr/chetCell/ChatFileModel.m

@@ -2,7 +2,7 @@
 //  ChatFileModel.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import "ChatFileModel.h"

+ 1 - 1
ABtong/ABtong/Controller/chat/chetCell/ChatLongPressMenuView.h → ABtong/ABtong/ALLController/chatCtr/chetCell/ChatLongPressMenuView.h

@@ -2,7 +2,7 @@
 //  ChatLongPressMenuView.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <UIKit/UIKit.h>

+ 61 - 33
ABtong/ABtong/Controller/chat/chetCell/ChatLongPressMenuView.m → ABtong/ABtong/ALLController/chatCtr/chetCell/ChatLongPressMenuView.m

@@ -2,7 +2,7 @@
 //  ChatLongPressMenuView.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import "ChatLongPressMenuView.h"
@@ -26,35 +26,58 @@
     NSMutableArray * tempArray = [NSMutableArray array];
     if (isSender) {
         if (type == 0) {
-            [tempArray addObjectsFromArray:@[NSLocalizedString(@"cellact-copy", @""),
-                                             NSLocalizedString(@"cellact-deleat", @""),
-                                             NSLocalizedString(@"cellact-zhuanfa", @""),
-                                             NSLocalizedString(@"cellact-shouchang", @""),
-                                             NSLocalizedString(@"cellact-chehui", @""),
-                                             NSLocalizedString(@"cellact-duoxuan", @""),
-                                             NSLocalizedString(@"cellact-yinyong", @"")]];
+            [tempArray addObjectsFromArray:@[NSLocalizedString(@"复制", @""),
+                                             NSLocalizedString(@"删除", @""),
+                                             NSLocalizedString(@"转发", @""),
+                                             NSLocalizedString(@"收藏", @""),
+                                             NSLocalizedString(@"撤回", @""),
+                                             NSLocalizedString(@"多选", @""),
+                                             NSLocalizedString(@"引用", @"")]];
         }else{
-            [tempArray addObjectsFromArray:@[NSLocalizedString(@"cellact-deleat", @""),
-                                             NSLocalizedString(@"cellact-zhuanfa", @""),
-                                             NSLocalizedString(@"cellact-shouchang", @""),
-                                             NSLocalizedString(@"cellact-chehui", @""),
-                                             NSLocalizedString(@"cellact-duoxuan", @""),
-                                             NSLocalizedString(@"cellact-yinyong", @"")]];
+            if(type == 2||type == 5){
+                [tempArray addObjectsFromArray:@[NSLocalizedString(@"删除", @""),
+                                                 NSLocalizedString(@"转发", @""),
+                                                 NSLocalizedString(@"收藏", @""),
+                                                 NSLocalizedString(@"撤回", @""),
+                                                 NSLocalizedString(@"多选", @""),
+                                                 NSLocalizedString(@"引用", @""),
+                                                 NSLocalizedString(@"保存相册", @"")]];
+            }
+            else{
+                [tempArray addObjectsFromArray:@[NSLocalizedString(@"删除", @""),
+                                                 NSLocalizedString(@"转发", @""),
+                                                 NSLocalizedString(@"收藏", @""),
+                                                 NSLocalizedString(@"撤回", @""),
+                                                 NSLocalizedString(@"多选", @""),
+                                                 NSLocalizedString(@"引用", @"")]];
+            }
+            
         }
     }else{
         if (type == 0) {
-            [tempArray addObjectsFromArray:@[NSLocalizedString(@"cellact-copy", @""),
-                                             NSLocalizedString(@"cellact-deleat", @""),
-                                             NSLocalizedString(@"cellact-zhuanfa", @""),
-                                             NSLocalizedString(@"cellact-shouchang", @""),
-                                             NSLocalizedString(@"cellact-duoxuan", @""),
-                                             NSLocalizedString(@"cellact-yinyong", @"")]];
+            [tempArray addObjectsFromArray:@[NSLocalizedString(@"复制", @""),
+                                             NSLocalizedString(@"删除", @""),
+                                             NSLocalizedString(@"转发", @""),
+                                             NSLocalizedString(@"收藏", @""),
+                                             NSLocalizedString(@"多选", @""),
+                                             NSLocalizedString(@"引用", @"")]];
         }else{
-            [tempArray addObjectsFromArray:@[NSLocalizedString(@"cellact-copy", @""),
-                                             NSLocalizedString(@"cellact-zhuanfa", @""),
-                                             NSLocalizedString(@"cellact-shouchang", @""),
-                                             NSLocalizedString(@"cellact-duoxuan", @""),
-                                             NSLocalizedString(@"cellact-yinyong", @"")]];
+            if(type == 2||type == 5){
+                [tempArray addObjectsFromArray:@[NSLocalizedString(@"复制", @""),
+                                                 NSLocalizedString(@"转发", @""),
+                                                 NSLocalizedString(@"收藏", @""),
+                                                 NSLocalizedString(@"多选", @""),
+                                                 NSLocalizedString(@"引用", @""),
+                                                 NSLocalizedString(@"保存相册", @"")]];
+            }
+            else{
+                [tempArray addObjectsFromArray:@[NSLocalizedString(@"复制", @""),
+                                                 NSLocalizedString(@"转发", @""),
+                                                 NSLocalizedString(@"收藏", @""),
+                                                 NSLocalizedString(@"多选", @""),
+                                                 NSLocalizedString(@"引用", @"")]];
+            }
+            
         }
         
     }
@@ -120,24 +143,29 @@
 - (void)menuButtonClicked:(UIButton *)button{
     NSInteger index = 0;
     NSString * titleString = self.titles[button.tag-3000];
-    if ([titleString isEqualToString:NSLocalizedString(@"cellact-copy", @"")]) {
+    if ([titleString isEqualToString:NSLocalizedString(@"复制", @"")]) {
         index = 0;
-    }else if ([titleString isEqualToString:NSLocalizedString(@"cellact-deleat", @"")]) {
+    }else if ([titleString isEqualToString:NSLocalizedString(@"删除", @"")]) {
         index = 1;
-    }else if ([titleString isEqualToString:NSLocalizedString(@"cellact-zhuanfa", @"")]) {
+    }else if ([titleString isEqualToString:NSLocalizedString(@"转发", @"")]) {
         index = 2;
-    }else if ([titleString isEqualToString:NSLocalizedString(@"cellact-shouchang", @"")]) {
+    }else if ([titleString isEqualToString:NSLocalizedString(@"收藏", @"")]) {
         index = 3;
-    }else if ([titleString isEqualToString:NSLocalizedString(@"cellact-chehui", @"")]) {
+    }else if ([titleString isEqualToString:NSLocalizedString(@"撤回", @"")]) {
         index = 4;
-    }else if ([titleString isEqualToString:NSLocalizedString(@"cellact-duoxuan", @"")]) {
+    }else if ([titleString isEqualToString:NSLocalizedString(@"多选", @"")]) {
         index = 5;
-    }else if ([titleString isEqualToString:NSLocalizedString(@"cellact-yinyong", @"")]) {
+    }else if ([titleString isEqualToString:NSLocalizedString(@"引用", @"")]) {
         index = 6;
     }
-    else if ([titleString isEqualToString:NSLocalizedString(@"cellact-save", @"")]) {
+    else if ([titleString isEqualToString:NSLocalizedString(@"保存", @"")]) {
         index = 7;
     }
+    else if ([titleString isEqualToString:NSLocalizedString(@"保存相册", @"")]) {
+        index = 8;
+    }
+    
+    
     
     
     

+ 1 - 1
ABtong/ABtong/Controller/chat/chetCell/ChatMessageModel.h → ABtong/ABtong/ALLController/chatCtr/chetCell/ChatMessageModel.h

@@ -2,7 +2,7 @@
 //  ChatMessageModel.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <Foundation/Foundation.h>

+ 22 - 9
ABtong/ABtong/Controller/chat/chetCell/ChatMessageModel.m → ABtong/ABtong/ALLController/chatCtr/chetCell/ChatMessageModel.m

@@ -2,7 +2,7 @@
 //  ChatMessageModel.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import "ChatMessageModel.h"
@@ -42,8 +42,8 @@
     self.msgId = mutableDict[@"id"];
     self.fromId = mutableDict[@"fromId"];
     // 发送方标识
-    NSDictionary *userinfo = [UDManager.shareInstance getDDManager:dkuserinfo];
-    NSString *userId = userinfo[@"id"];
+    NSDictionary *userinfo = [UDManager.shareInstance getDDManager:nkactuserInfo];
+    NSString *userId = userinfo[@"userId"];
     if([self.fromId isEqualToString:userId]){
         self.isSender=true;
     }
@@ -155,17 +155,30 @@
 }
 
 -(NSString *)timeF:(NSInteger)time{
+    //NSLog(@"time:%ld",(long)time);
+    // 创建日期格式器
+    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+    [formatter setDateFormat:@"dd"]; // 设置你想要的日期格式
+    
+    
+    long long timestamp =(long)time/1000; // 例如:2021-10-01 00:00:00 UTC
+    // 转换为NSDate
+    NSDate *date = [NSDate dateWithTimeIntervalSince1970:timestamp];
+    NSString *dateString = [formatter stringFromDate:date];
+    
+    
     NSDate *now = [NSDate date];
     NSTimeInterval trt = [now timeIntervalSince1970];
+    date = [NSDate dateWithTimeIntervalSince1970:trt];
+    NSString *tdateString = [formatter stringFromDate:date];
+    
     
-    NSInteger shijiancha = trt-(long)time/1000;
+    NSInteger shijiancha = trt-timestamp;
     
-//    NSLog(@"trt:%f",trt);
-//    NSLog(@"time:%ld",(long)time);
     if(shijiancha<60){
-        return NSLocalizedString(@"time-oneminint", @"");
+        return NSLocalizedString(@"1分钟内", @"");
     }
-    if(shijiancha>24*3600){
+    if(shijiancha>24*3600||dateString.intValue!=tdateString.intValue){
         // 假设这是你的时间戳(以秒为单位)
         long long timestamp =(long)time/1000; // 例如:2021-10-01 00:00:00 UTC
         // 转换为NSDate
@@ -193,7 +206,7 @@
             return dateString;
         }
         else{
-            return [NSString stringWithFormat:@"%ld%@",(long)fenzhong,NSLocalizedString(@"time-outmin", @"")];
+            return [NSString stringWithFormat:@"%ld%@",(long)fenzhong,NSLocalizedString(@"分钟前", @"")];
         }
     }
     

+ 1 - 1
ABtong/ABtong/Controller/chat/chetCell/ChatPopoverView.h → ABtong/ABtong/ALLController/chatCtr/chetCell/ChatPopoverView.h

@@ -2,7 +2,7 @@
 //  ChatPopoverView.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <UIKit/UIKit.h>

+ 2 - 5
ABtong/ABtong/Controller/chat/chetCell/ChatPopoverView.m → ABtong/ABtong/ALLController/chatCtr/chetCell/ChatPopoverView.m

@@ -2,15 +2,12 @@
 //  ChatPopoverView.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import "ChatPopoverView.h"
 
-static CGFloat const kDefaultArrowHeight = 8.0;
-static CGFloat const kDefaultCornerRadius = 5.0;
-static CGFloat const kDefaultPopoverMargin = 10.0;
-static CGFloat const kDefaultBorderWidth = 1.0;
+
 
 @interface ChatPopoverView ()
 @property (nonatomic, strong) UIView *contentView;

+ 1 - 1
ABtong/ABtong/Controller/chat/chetCell/ChatQuoteView.h → ABtong/ABtong/ALLController/chatCtr/chetCell/ChatQuoteView.h

@@ -2,7 +2,7 @@
 //  ChatQuoteView.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <UIKit/UIKit.h>

+ 1 - 1
ABtong/ABtong/Controller/chat/chetCell/ChatQuoteView.m → ABtong/ABtong/ALLController/chatCtr/chetCell/ChatQuoteView.m

@@ -2,7 +2,7 @@
 //  ChatQuoteView.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import "ChatQuoteView.h"

+ 1 - 1
ABtong/ABtong/Controller/chat/chetCell/chatCellView.h → ABtong/ABtong/ALLController/chatCtr/chetCell/chatCellView.h

@@ -2,7 +2,7 @@
 //  chatCellView.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #ifndef chatCellView_h

+ 125 - 121
ABtong/ABtong/Controller/chat/chetCell/chatCellView.m → ABtong/ABtong/ALLController/chatCtr/chetCell/chatCellView.m

@@ -2,7 +2,7 @@
 //  chatCellView.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <Foundation/Foundation.h>
@@ -17,7 +17,7 @@
 #import "config.h"
 #import "FilePreviewer.h"
 #import "ChatRecordController.h"
-#import "QuoteDetailController.h"
+#import "GotoDetailController.h"
 
 
 // 定义一些常量
@@ -26,7 +26,7 @@ static const CGFloat kTextHorizontalMargin = 12.0f;        //文本水平边距
 static const CGFloat kVerticalMargin = 18.0f;        // 垂直边距
 static const CGFloat kContentMaxWidth = 220.0f;     // 内容最大宽度
 static const CGFloat kAvatarSize = 36.0f;           // 头像大小
-static const CGFloat kAvatarMargin = 20.0f;          // 头像边距
+static const CGFloat kAvatarMargin = 24.0f;          // 头像边距
 static const CGFloat kAvatarBatchMargin = 70.0f;     // 批量操作头像边距
 static const CGFloat kBubbleTopMargin = 20.0f;      // 气泡顶部距离
 static const CGFloat kBubbleBottomMargin = 40.0f;      // 气泡底部距离
@@ -37,8 +37,8 @@ static const CGFloat kMediaCornerRadius = 4.0f;
 @interface chatCellView()
 
 // 基本视图
-@property (nonatomic, strong) UIImageView *avatarImageView;
-@property (nonatomic, strong) UILabel *nameLabel;
+//@property (nonatomic, strong) UIImageView *avatarImageView;
+//@property (nonatomic, strong) UILabel *nameLabel;
 @property (nonatomic, strong) UIImageView *bubbleImageView;
 @property (nonatomic, strong) UILabel * timeLabel;
 @property (nonatomic, strong) UILabel * readStateLbl;
@@ -90,27 +90,24 @@ static const CGFloat kMediaCornerRadius = 4.0f;
     _batchStateBtn.hidden = YES;
     [self.contentView addSubview:_batchStateBtn];
     [_batchStateBtn addTarget:self action:@selector(batchStateButtonClicked) forControlEvents:UIControlEventTouchUpInside];
-    // 头像
-    _avatarImageView = [UIImageView new];
-    _avatarImageView.layer.cornerRadius = kAvatarSize / 2;
-    _avatarImageView.layer.masksToBounds = YES;
-    _avatarImageView.userInteractionEnabled = YES;
-    _avatarImageView.contentMode = UIViewContentModeScaleAspectFill;
-    [self.contentView addSubview:_avatarImageView];
-    
-    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleAvatarTap)];
-    [_avatarImageView addGestureRecognizer:tap];
-    
-//    [_avatarImageView jk_addLongPressActionWithBlock:^(UIGestureRecognizer *gestureRecoginzer) {
-//        [self handleAvatarLongPress];
-//    }];
+//    // 头像
+//    _avatarImageView = [UIImageView new];
+//    _avatarImageView.layer.cornerRadius = kAvatarSize / 2;
+//    _avatarImageView.layer.masksToBounds = YES;
+//    _avatarImageView.userInteractionEnabled = YES;
+//    _avatarImageView.contentMode = UIViewContentModeScaleAspectFill;
+//    [self.contentView addSubview:_avatarImageView];
+//    
+//    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleAvatarTap)];
+//    [_avatarImageView addGestureRecognizer:tap];
     
-    // 名字
-    _nameLabel = [UILabel new];
-    _nameLabel.font = SYSFONT(12);
-    _nameLabel.textColor = [UIColor whiteColor];
-    [self.contentView addSubview:_nameLabel];
     
+    // 名字
+//    _nameLabel = [UILabel new];
+//    _nameLabel.font = SYSFONT(12);
+//    _nameLabel.textColor = [UIColor whiteColor];
+//    [self.contentView addSubview:_nameLabel];
+//    
     // 时间
     _timeLabel = [UILabel new];
     _timeLabel.font = SYSFONT(12);
@@ -145,7 +142,7 @@ static const CGFloat kMediaCornerRadius = 4.0f;
 - (void)setupTextContentView {
     _textLbl = [UILabel new];
     _textLbl.numberOfLines = 0;
-    _textLbl.textColor = UIColor.blackColor;
+    _textLbl.textColor = UIColor.whiteColor;
     [self.contentView addSubview:_textLbl];
     
     _quoteLbl = [UILabel new];
@@ -217,12 +214,12 @@ static const CGFloat kMediaCornerRadius = 4.0f;
     
     UIImageView *iconView = [[UIImageView alloc] init];
     UILabel *nameLabel = [[UILabel alloc] init];
-    nameLabel.textColor = UIColor.blackColor;
+    nameLabel.textColor = UIColor.whiteColor;
     nameLabel.font = [UIFont systemFontOfSize:14];
     nameLabel.numberOfLines = 1;
     UILabel *sizeLabel = [[UILabel alloc] init];
     sizeLabel.font = [UIFont systemFontOfSize:12];
-    sizeLabel.textColor = [UIColor grayColor];
+    sizeLabel.textColor = [UIColor whiteColor];
     
     [_fileContentView addSubview:iconView];
     [_fileContentView addSubview:nameLabel];
@@ -259,7 +256,7 @@ static const CGFloat kMediaCornerRadius = 4.0f;
     
     UIImageView *voiceIcon = [[UIImageView alloc] initWithImage:kImageMake(@"play_btn")];
     UILabel *durationLabel = [[UILabel alloc] init];
-    durationLabel.textColor = UIColor.blackColor;
+    durationLabel.textColor = UIColor.whiteColor;
     durationLabel.font = [UIFont systemFontOfSize:14];
     
     [_voiceContentView addSubview:voiceIcon];
@@ -287,11 +284,11 @@ static const CGFloat kMediaCornerRadius = 4.0f;
     
     UIImageView *callIcon = [[UIImageView alloc] init];
     UILabel *callLabel = [[UILabel alloc] init];
-    callLabel.textColor = UIColor.blackColor;
+    callLabel.textColor = UIColor.whiteColor;
     callLabel.font = [UIFont systemFontOfSize:16];
     UILabel *durationLabel = [[UILabel alloc] init];
     durationLabel.font = [UIFont systemFontOfSize:16];
-    durationLabel.textColor = [UIColor grayColor];
+    durationLabel.textColor = [UIColor whiteColor];
     
     [_callContentView addSubview:callIcon];
     [_callContentView addSubview:callLabel];
@@ -330,7 +327,7 @@ static const CGFloat kMediaCornerRadius = 4.0f;
     UILabel *titleLabel = [[UILabel alloc] init];
     titleLabel.font = SYSBFONT(14);
     titleLabel.text = @"聊天记录";
-    titleLabel.textColor = UIColor.blackColor;
+    titleLabel.textColor = UIColor.whiteColor;
     
     UILabel *contentLabel = [[UILabel alloc] init];
     contentLabel.font = SYSFONT(12);
@@ -383,7 +380,7 @@ static const CGFloat kMediaCornerRadius = 4.0f;
 - (void)setupdeleateContentView {
     _deleateLbl = [[UILabel alloc] init];
     _deleateLbl.font = SYSFONT(14);
-    _deleateLbl.textColor = UIColor.blackColor;
+    _deleateLbl.textColor = UIColor.whiteColor;
     _deleateLbl.layer.cornerRadius = 2.f;
     _deleateLbl.layer.masksToBounds = YES;
     
@@ -470,21 +467,21 @@ static const CGFloat kMediaCornerRadius = 4.0f;
     
     _batchState = batchState;
     self.batchStateBtn.hidden = !batchState;
-    if (!_messageModel.isSender) {
-        if (batchState) {
-            [_avatarImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
-                make.size.mas_equalTo(CGSizeMake(kAvatarSize, kAvatarSize));
-                make.left.mas_equalTo(kAvatarBatchMargin);
-                make.top.equalTo(self.contentView).offset(kVerticalMargin);
-            }];
-        }else{
-            [_avatarImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
-                make.size.mas_equalTo(CGSizeMake(kAvatarSize, kAvatarSize));
-                make.left.mas_equalTo(kAvatarMargin);
-                make.top.equalTo(self.contentView).offset(kVerticalMargin);
-            }];
-        }
-    }
+//    if (!_messageModel.isSender) {
+//        if (batchState) {
+//            [_avatarImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
+//                make.size.mas_equalTo(CGSizeMake(kAvatarSize, kAvatarSize));
+//                make.left.mas_equalTo(kAvatarBatchMargin);
+//                make.top.equalTo(self.contentView).offset(kVerticalMargin);
+//            }];
+//        }else{
+//            [_avatarImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
+//                make.size.mas_equalTo(CGSizeMake(kAvatarSize, kAvatarSize));
+//                make.left.mas_equalTo(kAvatarMargin);
+//                make.top.equalTo(self.contentView).offset(kVerticalMargin);
+//            }];
+//        }
+//    }
     
     self.batchStateBtn.selected = NO;
 }
@@ -492,11 +489,11 @@ static const CGFloat kMediaCornerRadius = 4.0f;
 - (void)setupAvatarAndName {
     self.readStateLbl.text = nil;
     // 这里应该根据实际数据设置头像和名字
-    if (_messageModel.avatar) {
-        [_avatarImageView sd_setImageWithURL:getURL(_messageModel.avatar) placeholderImage:kImageMake(@"Avatar")];
-    }else{
-        _avatarImageView.image = kImageMake(@"Avatar");
-    }
+//    if (_messageModel.avatar) {
+//        [_avatarImageView sd_setImageWithURL:getURL(_messageModel.avatar) placeholderImage:kImageMake(@"Avatar")];
+//    }else{
+//        _avatarImageView.image = kImageMake(@"Avatar");
+//    }
     
     _timeLabel.text = _messageModel.formatterTime;
     _readStateLbl.text = _messageModel.readStatus;
@@ -507,28 +504,28 @@ static const CGFloat kMediaCornerRadius = 4.0f;
         _readStateLbl.textColor = [UIColor whiteColor];
     }
     
-    if (_messageModel.type==1) {
-        if (_messageModel.nickName && ![_messageModel.nickName isKindOfClass:NSNull.class]) {
-            _nameLabel.text = _messageModel.isSender ? @"": _messageModel.nickName;
-            _nameLabel.textAlignment = _messageModel.isSender ? NSTextAlignmentRight : NSTextAlignmentLeft;
-        }
-    }
+//    if (_messageModel.type==1) {
+//        if (_messageModel.nickName && ![_messageModel.nickName isKindOfClass:NSNull.class]) {
+//            _nameLabel.text = _messageModel.isSender ? @"": _messageModel.nickName;
+//            _nameLabel.textAlignment = _messageModel.isSender ? NSTextAlignmentRight : NSTextAlignmentLeft;
+//        }
+//    }
     
     
     if (_messageModel.messageType == ChatMessageTypeEvent || _messageModel.messageType == ChatMessageTypeCallBack || _messageModel.messageType == ChatMessageTypeCallBack2) {
-        _avatarImageView.hidden = YES;
-        _nameLabel.hidden = YES;
+//        _avatarImageView.hidden = YES;
+        //_nameLabel.hidden = YES;
         _readStateLbl.hidden = YES;
         _timeLabel.hidden = YES;
     }else{
-        _avatarImageView.hidden = NO;
-        _nameLabel.hidden = NO;
-        _readStateLbl.hidden = NO;
+//        _avatarImageView.hidden = NO;
+//        _nameLabel.hidden = NO;
+        _readStateLbl.hidden = YES;
         _timeLabel.hidden = NO;
     }
     
     if (_messageModel.type == 0&& _messageModel.isSender) {
-        _readStateLbl.hidden = NO;
+        _readStateLbl.hidden = YES;
     }else{
         _readStateLbl.hidden = YES;
     }
@@ -764,7 +761,7 @@ static const CGFloat kMediaCornerRadius = 4.0f;
 //    UILabel *sizeLabel = _fileContentView.subviews[2];
     
     // 设置文件内容
-    iconView.image = [UIImage imageNamed: @"file_icon_black"];
+    iconView.image = [UIImage imageNamed: @"file_icon"];
     nameLabel.text = _messageModel.fileName ?: @"未知文件";
 //    sizeLabel.text = _messageModel.fileSize ?: @"0KB";
     
@@ -940,22 +937,22 @@ static const CGFloat kMediaCornerRadius = 4.0f;
     
     // 头像布局
     if (_messageModel.isSender) {
-        [_avatarImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
-            make.right.equalTo(self.contentView).offset(-kAvatarMargin);
-            make.top.equalTo(self.contentView).offset(kVerticalMargin);
-            make.width.height.mas_equalTo(kAvatarSize);
-        }];
+//        [_avatarImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
+//            make.right.equalTo(self.contentView).offset(-kAvatarMargin);
+//            make.top.equalTo(self.contentView).offset(kVerticalMargin);
+//            make.width.height.mas_equalTo(kAvatarSize);
+//        }];
         
-        [_nameLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
-            make.right.equalTo(_avatarImageView.mas_left).offset(-4);
-            make.top.equalTo(_avatarImageView);
-            make.left.greaterThanOrEqualTo(self.contentView).offset(10);
-        }];
+//        [_nameLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
+//            make.right.equalTo(_avatarImageView.mas_left).offset(-4);
+//            make.top.equalTo(_avatarImageView);
+//            make.left.greaterThanOrEqualTo(self.contentView).offset(10);
+//        }];
         
         [_timeLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
             make.height.mas_equalTo(14);
-            make.right.mas_equalTo(self.nameLabel.mas_left).offset(-12);
-            make.top.mas_equalTo(self.avatarImageView);
+            make.right.equalTo(self.contentView).offset(-kAvatarMargin);
+            make.top.equalTo(self.contentView).offset(kVerticalMargin);
         }];
         
         if (_messageModel.messageType == ChatMessageTypeImage || _messageModel.messageType == ChatMessageTypeVideo) {
@@ -981,22 +978,22 @@ static const CGFloat kMediaCornerRadius = 4.0f;
             
         }
     } else {
-        [_avatarImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
-            make.left.equalTo(self.contentView).offset(kAvatarMargin);
-            make.top.equalTo(self.contentView).offset(kVerticalMargin);
-            make.width.height.mas_equalTo(kAvatarSize);
-        }];
+//        [_avatarImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
+//            make.left.equalTo(self.contentView).offset(kAvatarMargin);
+//            make.top.equalTo(self.contentView).offset(kVerticalMargin);
+//            make.width.height.mas_equalTo(kAvatarSize);
+//        }];
         
-        [_nameLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
-            make.left.equalTo(_avatarImageView.mas_right).offset(4);
-            make.top.equalTo(_avatarImageView);
-            make.right.lessThanOrEqualTo(self.contentView).offset(-10);
-        }];
+//        [_nameLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
+//            make.left.equalTo(_avatarImageView.mas_right).offset(4);
+//            make.top.equalTo(_avatarImageView);
+//            make.right.lessThanOrEqualTo(self.contentView).offset(-10);
+//        }];
         
         [_timeLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
             make.height.mas_equalTo(14);
-            make.left.mas_equalTo(self.nameLabel.mas_right).offset(12);
-            make.top.mas_equalTo(self.avatarImageView);
+            make.left.equalTo(self.contentView).offset(kAvatarMargin);
+            make.top.equalTo(self.contentView).offset(kVerticalMargin);
         }];
     }
     
@@ -1046,8 +1043,8 @@ static const CGFloat kMediaCornerRadius = 4.0f;
     
     if (_messageModel.isSender) {
         [_textLbl mas_remakeConstraints:^(MASConstraintMaker *make) {
-            make.right.equalTo(_avatarImageView.mas_left).offset(-26);
-            make.top.mas_equalTo(_avatarImageView.mas_top).offset(28);
+            make.right.equalTo(self.contentView).offset(-kAvatarMargin);
+            make.top.mas_equalTo(_timeLabel.mas_top).offset(28);
             make.width.mas_equalTo(textSize.width);
             make.height.mas_equalTo(textSize.height);
             make.bottom.equalTo(self.contentView).offset(-kVerticalMargin).priorityHigh();
@@ -1063,8 +1060,8 @@ static const CGFloat kMediaCornerRadius = 4.0f;
         }
     } else {
         [_textLbl mas_remakeConstraints:^(MASConstraintMaker *make) {
-            make.left.equalTo(_avatarImageView.mas_right).offset(26);
-            make.top.mas_equalTo(_avatarImageView.mas_top).offset(28);
+            make.left.equalTo(self.contentView).offset(kAvatarMargin);
+            make.top.mas_equalTo(_timeLabel.mas_top).offset(28);
             make.width.mas_equalTo(textSize.width);
             make.height.mas_equalTo(textSize.height);
             make.bottom.equalTo(self.contentView).offset(-kVerticalMargin).priorityHigh();
@@ -1087,16 +1084,16 @@ static const CGFloat kMediaCornerRadius = 4.0f;
     
     if (_messageModel.isSender) {
         [_imageContentView mas_remakeConstraints:^(MASConstraintMaker *make) {
-            make.right.equalTo(_avatarImageView.mas_left).offset(-16);
-            make.top.mas_equalTo(_avatarImageView.mas_top).offset(28);
+            make.right.equalTo(self.contentView).offset(-kAvatarMargin);
+            make.top.mas_equalTo(_timeLabel.mas_top).offset(28);
             make.width.mas_equalTo(imageSize.width);
             make.height.mas_equalTo(imageSize.height);
             make.bottom.equalTo(self.contentView).offset(-kVerticalMargin).priorityHigh();
         }];
     } else {
         [_imageContentView mas_remakeConstraints:^(MASConstraintMaker *make) {
-            make.left.equalTo(_avatarImageView.mas_right).offset(16);
-            make.top.mas_equalTo(_avatarImageView.mas_top).offset(28);
+            make.left.equalTo(self.contentView).offset(kAvatarMargin);
+            make.top.mas_equalTo(_timeLabel.mas_top).offset(28);
             make.width.mas_equalTo(imageSize.width);
             make.height.mas_equalTo(imageSize.height);
             make.bottom.equalTo(self.contentView).offset(-kVerticalMargin).priorityHigh();
@@ -1109,16 +1106,16 @@ static const CGFloat kMediaCornerRadius = 4.0f;
     
     if (_messageModel.isSender) {
         [_videoContentView mas_remakeConstraints:^(MASConstraintMaker *make) {
-            make.right.equalTo(_avatarImageView.mas_left).offset(-16);
-            make.top.mas_equalTo(_avatarImageView.mas_top).offset(28);
+            make.right.equalTo(self.contentView).offset(-kAvatarMargin);
+            make.top.mas_equalTo(_timeLabel.mas_top).offset(28);
             make.width.mas_equalTo(videoSize.width);
             make.height.mas_equalTo(videoSize.height);
             make.bottom.equalTo(self.contentView).offset(-kVerticalMargin).priorityHigh();
         }];
     } else {
         [_videoContentView mas_remakeConstraints:^(MASConstraintMaker *make) {
-            make.left.equalTo(_avatarImageView.mas_right).offset(16);
-            make.top.mas_equalTo(_avatarImageView.mas_top).offset(28);
+            make.left.equalTo(self.contentView).offset(kAvatarMargin);
+            make.top.mas_equalTo(_timeLabel.mas_top).offset(28);
             make.width.mas_equalTo(videoSize.width);
             make.height.mas_equalTo(videoSize.height);
             make.bottom.equalTo(self.contentView).offset(-kVerticalMargin).priorityHigh();
@@ -1130,11 +1127,11 @@ static const CGFloat kMediaCornerRadius = 4.0f;
     // 设置内容视图约束
     [_voiceContentView mas_remakeConstraints:^(MASConstraintMaker *make) {
         if (_messageModel.isSender) {
-            make.right.equalTo(_avatarImageView.mas_left).offset(-26);
+            make.right.equalTo(self.contentView).offset(-kAvatarMargin);
         } else {
-            make.left.equalTo(_avatarImageView.mas_right).offset(26);
+            make.left.equalTo(self.contentView).offset(kAvatarMargin);
         }
-        make.top.equalTo(_avatarImageView).offset(28);
+        make.top.equalTo(_timeLabel).offset(28);
         make.width.mas_equalTo(_messageModel.voiceWidth);
         make.bottom.equalTo(self.contentView).offset(-kVerticalMargin).priorityHigh();
     }];
@@ -1148,15 +1145,15 @@ static const CGFloat kMediaCornerRadius = 4.0f;
     
     if (_messageModel.isSender) {
         [_callContentView mas_remakeConstraints:^(MASConstraintMaker *make) {
-            make.right.equalTo(_avatarImageView.mas_left).offset(-26);
-            make.top.mas_equalTo(_avatarImageView.mas_top).offset(28);
+            make.right.equalTo(self.contentView).offset(-kAvatarMargin);
+            make.top.mas_equalTo(_timeLabel.mas_top).offset(28);
             make.width.mas_lessThanOrEqualTo(kContentMaxWidth);
             make.bottom.equalTo(self.contentView).offset(-kVerticalMargin).priorityHigh();
         }];
     } else {
         [_callContentView mas_remakeConstraints:^(MASConstraintMaker *make) {
-            make.left.equalTo(_avatarImageView.mas_right).offset(26);
-            make.top.mas_equalTo(_avatarImageView.mas_top).offset(28);
+            make.left.equalTo(self.contentView).offset(kAvatarMargin);
+            make.top.mas_equalTo(_timeLabel.mas_top).offset(28);
             make.width.mas_lessThanOrEqualTo(kContentMaxWidth);
             make.bottom.equalTo(self.contentView).offset(-kVerticalMargin).priorityHigh();
         }];
@@ -1189,11 +1186,11 @@ static const CGFloat kMediaCornerRadius = 4.0f;
 - (void)layoutHistoryContent {
     [_historyContentView mas_remakeConstraints:^(MASConstraintMaker *make) {
         if (_messageModel.isSender) {
-            make.right.equalTo(_avatarImageView.mas_left).offset(-26);
+            make.right.equalTo(self.contentView).offset(-kAvatarMargin);
         } else {
-            make.left.equalTo(_avatarImageView.mas_right).offset(26);
+            make.left.equalTo(self.contentView).offset(kAvatarMargin);
         }
-        make.top.equalTo(_avatarImageView).offset(28);
+        make.top.equalTo(_timeLabel).offset(28);
         make.width.mas_equalTo(160);
         make.bottom.equalTo(self.contentView).offset(-kVerticalMargin).priorityHigh();
     }];
@@ -1202,15 +1199,15 @@ static const CGFloat kMediaCornerRadius = 4.0f;
 - (void)layoutOtherContent {
     if (_messageModel.isSender) {
         [_currentContentView mas_remakeConstraints:^(MASConstraintMaker *make) {
-            make.right.equalTo(_avatarImageView.mas_left).offset(-26);
-            make.top.mas_equalTo(_avatarImageView.mas_top).offset(28);
+            make.right.equalTo(self.contentView).offset(-kAvatarMargin);
+            make.top.mas_equalTo(_timeLabel.mas_top).offset(28);
             make.width.mas_lessThanOrEqualTo(kContentMaxWidth);
             make.bottom.equalTo(self.contentView).offset(-kVerticalMargin).priorityHigh();
         }];
     } else {
         [_currentContentView mas_remakeConstraints:^(MASConstraintMaker *make) {
-            make.left.equalTo(_avatarImageView.mas_right).offset(26);
-            make.top.mas_equalTo(_avatarImageView.mas_top).offset(28);
+            make.left.equalTo(self.contentView).offset(kAvatarMargin);
+            make.top.mas_equalTo(_timeLabel.mas_top).offset(28);
             make.width.mas_lessThanOrEqualTo(kContentMaxWidth);
             make.bottom.equalTo(self.contentView).offset(-kVerticalMargin).priorityHigh();
         }];
@@ -1275,15 +1272,16 @@ static const CGFloat kMediaCornerRadius = 4.0f;
 }
 
 - (NSString *)formatTimeWithMilliseconds:(NSInteger)milliseconds{
-    CGFloat seconds = milliseconds / 1000.0;
+    NSInteger seconds = milliseconds / 1000.0;
         
     if (seconds >= 60) {
         // 大于等于60秒时显示为分钟,保留一位小数
-        CGFloat minutes = seconds / 60.0;
-        return [NSString stringWithFormat:@"%.1f分钟", minutes];
+        NSInteger minutes = seconds / 60.0;
+        NSInteger sc = seconds%60;
+        return [NSString stringWithFormat:@"%ld分%ld秒", (long)minutes,(long)sc];
     } else {
         // 小于60秒时显示为秒,保留整数
-        return [NSString stringWithFormat:@"%.0f秒", seconds];
+        return [NSString stringWithFormat:@"%ld秒", seconds];
     }
 }
 
@@ -1301,8 +1299,14 @@ static const CGFloat kMediaCornerRadius = 4.0f;
             [MBProgressHUD showWithText:@"图片正在上传"];
             return;
         }
+        NSMutableArray *array = [NSMutableArray new];
+        NSDictionary *item = @{
+            @"localPath":_messageModel.localurl,
+            @"remoteURL":_messageModel.url
+        };
+        [array addObject:item];
         
-        [FilePreviewer.shared previewFileWithLocalPath:_messageModel.localurl remoteURL:getURL(_messageModel.url) fromViewController:self.parentViewController];
+        [FilePreviewer.shared shouImages:array actindex:0 fromViewController:self.parentViewController];
     }
 }
 
@@ -1415,7 +1419,7 @@ static const CGFloat kMediaCornerRadius = 4.0f;
         return;
     }
     if (_messageModel.quoteMessage.messageType == ChatMessageTypeText) {
-        QuoteDetailController * quoteDetailVc = [[QuoteDetailController alloc] init];
+        GotoDetailController * quoteDetailVc = [[GotoDetailController alloc] init];
         quoteDetailVc.quotedContent = _messageModel.quoteMessage.content;
         quoteDetailVc.quotedSenderName = _messageModel.quoteMessage.nickName;
         

+ 1 - 1
ABtong/ABtong/Controller/chat/chetCell/chatpopView.h → ABtong/ABtong/ALLController/chatCtr/chetCell/chatpopView.h

@@ -2,7 +2,7 @@
 //  chatpopView.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #ifndef chatpopView_h

+ 1 - 1
ABtong/ABtong/Controller/chat/chetCell/chatpopView.m → ABtong/ABtong/ALLController/chatCtr/chetCell/chatpopView.m

@@ -2,7 +2,7 @@
 //  chatpopView.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <Foundation/Foundation.h>

+ 27 - 27
ABtong/ABtong/Controller/chat/chetCell/chatpopView.xib → ABtong/ABtong/ALLController/chatCtr/chetCell/chatpopView.xib

@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23727" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
     <device id="retina6_12" orientation="portrait" appearance="light"/>
     <dependencies>
         <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23721"/>
         <capability name="Safe area layout guides" minToolsVersion="9.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
@@ -19,7 +19,7 @@
                     <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
                     <color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                     <state key="normal" title="Button"/>
-                    <buttonConfiguration key="configuration" style="plain" image="Ctupian" imagePlacement="top" title="发送图片" imagePadding="4">
+                    <buttonConfiguration key="configuration" style="plain" image="fasongtup" imagePlacement="top" title="发送图片" imagePadding="4">
                         <fontDescription key="titleFontDescription" type="system" pointSize="0.0"/>
                     </buttonConfiguration>
                     <connections>
@@ -31,7 +31,7 @@
                     <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
                     <color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                     <state key="normal" title="Button"/>
-                    <buttonConfiguration key="configuration" style="plain" image="Cshipin" imagePlacement="top" title="发送视频" imagePadding="4">
+                    <buttonConfiguration key="configuration" style="plain" image="fasongsp" imagePlacement="top" title="发送视频" imagePadding="4">
                         <fontDescription key="titleFontDescription" type="system" pointSize="0.0"/>
                     </buttonConfiguration>
                     <connections>
@@ -43,62 +43,62 @@
                     <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
                     <color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                     <state key="normal" title="Button"/>
-                    <buttonConfiguration key="configuration" style="plain" image="Cwenjian" imagePlacement="top" title="发送文件" imagePadding="4">
+                    <buttonConfiguration key="configuration" style="plain" image="fasongwj" imagePlacement="top" title="发送文件" imagePadding="4">
                         <fontDescription key="titleFontDescription" type="system" pointSize="0.0"/>
                     </buttonConfiguration>
                     <connections>
                         <action selector="bt3act:" destination="OMp-gG-LGm" eventType="touchUpInside" id="9ON-qO-QhA"/>
                     </connections>
                 </button>
-                <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Bud-Ol-wK2">
-                    <rect key="frame" x="40" y="114" width="72" height="71"/>
-                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="qAv-5Y-9ih">
+                    <rect key="frame" x="40" y="115" width="72" height="71"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
                     <color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                     <state key="normal" title="Button"/>
-                    <buttonConfiguration key="configuration" style="plain" image="Cyuyinth" imagePlacement="top" title="语音通话" imagePadding="4">
+                    <buttonConfiguration key="configuration" style="plain" image="paistup" imagePlacement="top" title="拍摄" imagePadding="4">
                         <fontDescription key="titleFontDescription" type="system" pointSize="0.0"/>
                     </buttonConfiguration>
                     <connections>
-                        <action selector="bt4act:" destination="OMp-gG-LGm" eventType="touchUpInside" id="7dd-fh-1vW"/>
+                        <action selector="bt6act:" destination="OMp-gG-LGm" eventType="touchUpInside" id="N0h-Hi-Utc"/>
                     </connections>
                 </button>
-                <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Akx-Vp-a2l">
-                    <rect key="frame" x="161" y="114" width="72" height="71"/>
-                    <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
+                <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Bud-Ol-wK2">
+                    <rect key="frame" x="159" y="115" width="72" height="71"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
                     <color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                     <state key="normal" title="Button"/>
-                    <buttonConfiguration key="configuration" style="plain" image="Cshipinth" imagePlacement="top" title="视频通话" imagePadding="4">
+                    <buttonConfiguration key="configuration" style="plain" image="yunyinth" imagePlacement="top" title="语音通话">
                         <fontDescription key="titleFontDescription" type="system" pointSize="0.0"/>
                     </buttonConfiguration>
                     <connections>
-                        <action selector="bt5act:" destination="OMp-gG-LGm" eventType="touchUpInside" id="1qF-bG-ONe"/>
+                        <action selector="bt4act:" destination="OMp-gG-LGm" eventType="touchUpInside" id="7dd-fh-1vW"/>
                     </connections>
                 </button>
-                <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="qAv-5Y-9ih">
-                    <rect key="frame" x="280" y="113" width="72" height="71"/>
-                    <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
+                <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Akx-Vp-a2l">
+                    <rect key="frame" x="280" y="115" width="72" height="71"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
                     <color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                     <state key="normal" title="Button"/>
-                    <buttonConfiguration key="configuration" style="plain" image="Cpaissc" imagePlacement="top" title="拍摄" imagePadding="4">
+                    <buttonConfiguration key="configuration" style="plain" image="shipinda" imagePlacement="top" title="视频通话" imagePadding="4">
                         <fontDescription key="titleFontDescription" type="system" pointSize="0.0"/>
                     </buttonConfiguration>
                     <connections>
-                        <action selector="bt6act:" destination="OMp-gG-LGm" eventType="touchUpInside" id="N0h-Hi-Utc"/>
+                        <action selector="bt5act:" destination="OMp-gG-LGm" eventType="touchUpInside" id="1qF-bG-ONe"/>
                     </connections>
                 </button>
             </subviews>
             <viewLayoutGuide key="safeArea" id="z4B-XS-7PW"/>
-            <color key="backgroundColor" white="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <color key="backgroundColor" red="0.054901960784313725" green="0.074509803921568626" blue="0.15294117647058825" alpha="1" colorSpace="calibratedRGB"/>
             <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
             <point key="canvasLocation" x="350.38167938931298" y="177.46478873239437"/>
         </view>
     </objects>
     <resources>
-        <image name="Cpaissc" width="56" height="56"/>
-        <image name="Cshipin" width="56" height="56"/>
-        <image name="Cshipinth" width="56" height="56"/>
-        <image name="Ctupian" width="56" height="56"/>
-        <image name="Cwenjian" width="56" height="56"/>
-        <image name="Cyuyinth" width="56" height="56"/>
+        <image name="fasongsp" width="36" height="36"/>
+        <image name="fasongtup" width="36" height="36"/>
+        <image name="fasongwj" width="36" height="36"/>
+        <image name="paistup" width="36" height="36"/>
+        <image name="shipinda" width="36" height="25.666666030883789"/>
+        <image name="yunyinth" width="36" height="36"/>
     </resources>
 </document>

+ 2 - 2
ABtong/ABtong/Controller/chat/ChatHistory.storyboard → ABtong/ABtong/ALLController/friendCtr/ChatHistory.storyboard

@@ -17,7 +17,7 @@
                         <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                         <subviews>
-                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="loginBG" translatesAutoresizingMaskIntoConstraints="NO" id="YYR-Ev-nor">
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="bgset" translatesAutoresizingMaskIntoConstraints="NO" id="YYR-Ev-nor">
                                 <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
                                 <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                             </imageView>
@@ -69,8 +69,8 @@
         </scene>
     </scenes>
     <resources>
+        <image name="bgset" width="375" height="812"/>
         <image name="fanhui" width="20" height="20"/>
-        <image name="loginBG" width="375" height="812"/>
         <systemColor name="systemBackgroundColor">
             <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
         </systemColor>

+ 1 - 1
ABtong/ABtong/Controller/chat/ChatHistoryController.h → ABtong/ABtong/ALLController/friendCtr/ChatHistoryController.h

@@ -2,7 +2,7 @@
 //  ChatHistoryController.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #ifndef ChatHistoryController_h

+ 1 - 1
ABtong/ABtong/Controller/chat/ChatHistoryController.m → ABtong/ABtong/ALLController/friendCtr/ChatHistoryController.m

@@ -2,7 +2,7 @@
 //  ChatHistoryController.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <Foundation/Foundation.h>

+ 1 - 1
ABtong/ABtong/Controller/friend/EXFriendController.h → ABtong/ABtong/ALLController/friendCtr/EXFriendController.h

@@ -2,7 +2,7 @@
 //  EXFriendController.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 #ifndef EXFriendController_h
 #define EXFriendController_h

+ 1 - 1
ABtong/ABtong/Controller/friend/EXFriendController.m → ABtong/ABtong/ALLController/friendCtr/EXFriendController.m

@@ -2,7 +2,7 @@
 //  EXFriendController.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <Foundation/Foundation.h>

+ 1 - 1
ABtong/ABtong/Controller/friend/EXFriendListCell.h → ABtong/ABtong/ALLController/friendCtr/EXFriendListCell.h

@@ -2,7 +2,7 @@
 //  EXFriendListCell.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #ifndef EXFriendListCell_h

+ 1 - 1
ABtong/ABtong/Controller/friend/EXFriendListCell.m → ABtong/ABtong/ALLController/friendCtr/EXFriendListCell.m

@@ -2,7 +2,7 @@
 //  EXFriendListCell.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 #import "EXFriendListCell.h"
 #import <SDWebImage/UIImageView+WebCache.h>

+ 1 - 1
ABtong/ABtong/Controller/friend/ForwardViewController.h → ABtong/ABtong/ALLController/friendCtr/ForwardViewController.h

@@ -2,7 +2,7 @@
 //  ForwardViewController.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <UIKit/UIKit.h>

+ 5 - 16
ABtong/ABtong/Controller/friend/ForwardViewController.m → ABtong/ABtong/ALLController/friendCtr/ForwardViewController.m

@@ -2,14 +2,13 @@
 //  ForwardViewController.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import "ForwardViewController.h"
 
 #import "FriendListCell.h"
 #import "FriendNetApi.h"
-#import "GroupNetApi.h"
 #import "ChatListStore.h"
 #import "GWebSocket.h"
 #import "UDManager.h"
@@ -28,7 +27,6 @@
 - (void)viewDidLoad {
     [super viewDidLoad];
     [self configUI];
-    [self getGroupList];
     [self getFriendlist];
 }
 
@@ -52,15 +50,6 @@
 }
 
 #pragma mark api
-- (void)getGroupList{
-    [GroupNetApi getGroupList:^(int code, NSDictionary * _Nullable result) {
-        NSLog(@"result:%@",result);
-        [self.groupArray addObjectsFromArray:result[@"data"]];
-        [self.tableView reloadData];
-    } fail:^(NSError * _Nonnull error) {
-        
-    }];
-}
 
 -(void)getFriendlist{
     [FriendNetApi getfriends:nil succ:^(int code, NSDictionary * res) {
@@ -86,7 +75,7 @@
     NSDate *now = [NSDate date];
     NSTimeInterval trt = [now timeIntervalSince1970];
     NSInteger time = trt*1000;
-    NSDictionary * userInfo = [UDManager.shareInstance getDDManager:dkuserinfo];
+    NSDictionary * userInfo = [UDManager.shareInstance getDDManager:nkactuserInfo];
     NSString * typeString = type == 0 ? @"1" : @"0";
     if (!self.isMultiple) {//逐条转发
         for (NSDictionary * msg in self.msgArray) {
@@ -95,7 +84,7 @@
             NSDictionary *Smsgd=@{
                 @"messageType":msg[@"messageType"],
                 @"chatId":friend[@"id"],
-                @"fromId":userInfo[@"id"],
+                @"fromId":userInfo[@"userId"],
                 @"fromName":self.userName,
                 @"fromAvatar":self.userAvatar,
                 @"content":msg[@"content"],
@@ -132,7 +121,7 @@
         NSDictionary *Smsgd=@{
             @"messageType":@"6",
             @"chatId":friend[@"id"],
-            @"fromId":userInfo[@"id"],
+            @"fromId":userInfo[@"userId"],
             @"fromName":self.userName,
             @"fromAvatar":self.userAvatar,
             @"content":@"聊天记录",
@@ -241,7 +230,7 @@
 #pragma mark lazy
 - (UIImageView *)bgImageView{
     if (!_bgImageView) {
-        _bgImageView = [[UIImageView alloc] initWithImage:kImageMake(@"loginBG")];
+        _bgImageView = [[UIImageView alloc] initWithImage:kImageMake(@"bgset")];
     }
     return _bgImageView;
 }

+ 1 - 1
ABtong/ABtong/Controller/friend/FriendController.h → ABtong/ABtong/ALLController/friendCtr/FriendController.h

@@ -2,7 +2,7 @@
 //  FriendController.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #ifndef FriendController_h

+ 53 - 43
ABtong/ABtong/Controller/friend/FriendController.m → ABtong/ABtong/ALLController/friendCtr/FriendController.m

@@ -2,7 +2,7 @@
 //  FriendController.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <Foundation/Foundation.h>
@@ -18,6 +18,7 @@
 
 @interface FriendController()<UITableViewDelegate,UITableViewDataSource>
 @property (weak, nonatomic) IBOutlet UIImageView *avatar;
+@property (weak, nonatomic) IBOutlet UILabel *namelb;
 @property (weak, nonatomic) IBOutlet UITableView *tableView;
 @property (weak, nonatomic) IBOutlet UIButton *gotochatBt;
 
@@ -42,16 +43,17 @@
         [self getNoDiturbSettingData];
     }
     else{
-        _gotochatBt.alpha = 0;
+//        _gotochatBt.alpha = 0;
         [self getnetFriendMsg];
-        [self chetRelation];
+//        [self chetRelation];
     }
     
     [self initsubView];
 }
 
 -(void)initsubView{
-    [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cellA"];
+    [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cellA1"];
+    [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cellA2"];
     [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cellB"];
     [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cellC"];
     _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
@@ -64,8 +66,8 @@
     _gotochatBt.layer.borderWidth = 0.5f;
 //    _gotochatBt.layer.borderColor = [UIColor lightGrayColor].CGColor; //globalColor(GCTypeGreen);
     _gotochatBt.layer.cornerRadius = 8.0f; // 可选,设置圆角
-    _gotochatBt.backgroundColor=globalColor(GCTypeGreen);
-    _gotochatBt.tintColor = [UIColor blackColor];
+    _gotochatBt.backgroundColor=globalColor(GCTypeBlued);
+    _gotochatBt.tintColor = [UIColor whiteColor];
     
 }
 
@@ -73,38 +75,41 @@
     NSString *stravatar = self.friendMsg[@"avatar"]?:@"";
     [_avatar sd_setImageWithURL:[NSURL URLWithString:stravatar] placeholderImage:[UIImage imageNamed:@"Avatar"]];
     NSDictionary *d1 =@{
-        @"name":@"FriendCtr-mingzi",
+        @"name":@"名字",
         @"image":@"wgerenxx",
         @"detetle":self.friendMsg[@"name"]
     };
+    
+    _namelb.text = self.friendMsg[@"name"];
+    
     NSDictionary *d2 =@{
-        @"name":@"FriendCtr-shuji",
-        @"image":@"wgerenxx",
+        @"name":@"手机",
+        @"image":@"shouji",
         @"detetle":self.friendMsg[@"mobile"]?:@""
     };
     NSDictionary *d3 =@{
-        @"name":@"FriendCtr-youxiang",
-        @"image":@"wgerenxx",
+        @"name":@"邮箱",
+        @"image":@"youxiang",
         @"detetle":self.friendMsg[@"email"]?:@""
     };
     NSDictionary *d4 =@{
-        @"name":@"FriendCtr-liaotanjl",
-        @"image":@"wgerenxx",
+        @"name":@"聊天记录",
+        @"image":@"liaotjl",
     };
     NSDictionary *d5 =@{
-        @"name":@"FriendCtr-toushujb",
-        @"image":@"wgerenxx",
+        @"name":@"投诉举报",
+        @"image":@"tousjb",
     };
     NSDictionary *d6 =@{
-        @"name":@"FriendCtr-jiaruhmd",
-        @"image":@"wgerenxx",
+        @"name":@"加入黑名单",
+        @"image":@"hmd",
     };
     NSDictionary *d7 =@{
-        @"name":@"FriendCtr-xiaoximdr",
-        @"image":@"wgerenxx",
+        @"name":@"消息免打扰",
+        @"image":@"lingdang",
     };
     _cellDatas = [[NSMutableArray alloc] init];
-    [_cellDatas addObject:d1];
+//    [_cellDatas addObject:d1];
     [_cellDatas addObject:d2];
     [_cellDatas addObject:d3];
     [_cellDatas addObject:d4];
@@ -192,17 +197,20 @@
     
     NSInteger section =indexPath.section;
     NSString *cellT =@"cellC";
-    if(section==0||section==1||section==2){
-        cellT =@"cellA";
+    if(section==0){
+        cellT =@"cellA1";
     }
-    if(section==3||section==4||section==5){
+    if(section==1){
+        cellT =@"cellA2";
+    }
+    if(section==2||section==3||section==4){
         cellT =@"cellB";
     }
     
     UITableViewCell *cell =[tableView dequeueReusableCellWithIdentifier:cellT forIndexPath:indexPath];
     
     if(cell==nil){
-        cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellT];
+        cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:cellT];
     }
     
     cell.selectionStyle = UITableViewCellSelectionStyleNone;
@@ -210,7 +218,7 @@
     NSDictionary *time =_cellDatas[section];
     NSString *title = NSLocalizedString(time[@"name"], @"");
     
-    if(section==0||section==1||section==2){
+    if(section==0||section==1){
         cell.imageView.image = [UIImage imageNamed:time[@"image"]];
         cell.textLabel.text =title;
         cell.textLabel.textColor = [UIColor whiteColor];
@@ -218,15 +226,20 @@
         NSString *detetle=time[@"detetle"];
         
         if([detetle isKindOfClass:[NSNull class]]||detetle.length==0){
-            detetle=NSLocalizedString(@"app-nomsg", @"");
+            detetle=NSLocalizedString(@"没有信息", @"");
         }
+//        cell.detailTextLabel.text = @"Right Text";
+//        cell.detailTextLabel.textColor =[UIColor whiteColor];
+
+        
         UILabel *titleLb = [[UILabel alloc] initWithFrame:CGRectMake(ctfrm.size.width/3-10, 0, ctfrm.size.width/3*2, 52)];
         titleLb.text =detetle;
         titleLb.textColor = [UIColor whiteColor];
         titleLb.textAlignment = NSTextAlignmentRight;
         titleLb.font = [UIFont systemFontOfSize:17.0f];
         [cell.contentView addSubview:titleLb];
-    }else if(section==3||section==4||section==5){
+        
+    }else if(section==2||section==3||section==4){
         cell.imageView.image = [UIImage imageNamed:time[@"image"]];
         cell.textLabel.text =title;
         cell.textLabel.textColor = [UIColor whiteColor];
@@ -234,7 +247,7 @@
         CGRect ctfrm = cell.contentView.frame;
         right.frame = CGRectMake(ctfrm.size.width-30, 21, 20, 20);
         [cell.contentView addSubview:right];
-    }else if (section==6){
+    }else if (section==5){
         cell.imageView.image = [UIImage imageNamed:time[@"image"]];
         cell.textLabel.text =title;
         cell.textLabel.textColor = [UIColor whiteColor];
@@ -250,8 +263,9 @@
         [cell.contentView addSubview:switchButton];
     }
     
-    cell.contentView.layer.borderWidth = 0.5f;
-    cell.contentView.layer.borderColor = [UIColor lightGrayColor].CGColor; //globalColor(GCTypeGreen);
+//    cell.contentView.layer.borderWidth = 0.5f;
+//    cell.contentView.layer.borderColor = [UIColor lightGrayColor].CGColor; //globalColor(GCTypeGreen);
+    cell.contentView.layer.backgroundColor =globalColor(GCTycellbg).CGColor;
     cell.contentView.layer.cornerRadius = 8.0f; // 可选,设置圆角
     return cell;
 
@@ -273,11 +287,7 @@
 
 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
     NSLog(@"indexPath:%ld",(long)indexPath.section);
-    if(indexPath.section==3){
-        if(!self.isfriend){
-            [MBProgressHUD showWithText:NSLocalizedString(@"login-agreed", @"")];
-            return;
-        }
+    if(indexPath.section==2){
         UIStoryboard *board = [UIStoryboard storyboardWithName:@"ChatHistory" bundle:[NSBundle mainBundle]];
         ChatHistoryController *chatctr = [board instantiateViewControllerWithIdentifier:@"ChatHistoryController"];
         UINavigationController *uiNavC = [[UINavigationController alloc] initWithRootViewController:chatctr];
@@ -289,7 +299,7 @@
         [self presentViewController :uiNavC animated:YES completion:nil];
     }
     
-    if(indexPath.section==4){
+    if(indexPath.section==3){
         
         ReportViewController *Reportctr = [[ReportViewController alloc] init];
         UINavigationController *uiNavC = [[UINavigationController alloc] initWithRootViewController:Reportctr];
@@ -302,19 +312,19 @@
     }
     
     
-    if (indexPath.section == 5) {
+    if (indexPath.section == 4) {
         //拉黑
-        NSString *msgnot = [NSString stringWithFormat:@"%@%@",self.friendMsg[@"name"],NSLocalizedString(@"FriendCtr-jiaruhmd", @"")];
-        UIAlertController *alert = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"FriendCtr-jiaruhmd", @"")
+        NSString *msgnot = [NSString stringWithFormat:@"%@%@",self.friendMsg[@"name"],NSLocalizedString(@"加入黑名单", @"")];
+        UIAlertController *alert = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"加入黑名单", @"")
                                                                       message:msgnot
                                                                preferredStyle:UIAlertControllerStyleAlert];
          
-        UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"Common_cancel",@"取消")
+        UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"取消",@"取消")
                                                                style:UIAlertActionStyleCancel
                                                              handler:^(UIAlertAction * action) {
             // 点击取消后的操作
         }];
-        UIAlertAction *okAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"Common_confirm", @"确定")
+        UIAlertAction *okAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"确定", @"确定")
                                                          style:UIAlertActionStyleDefault
                                                        handler:^(UIAlertAction * action) {
             [self AddToBlacklist:self.friendMsg[@"id"]];
@@ -329,9 +339,9 @@
 
 -(void)AddToBlacklist:(NSString *)friendId{
     [FriendNetApi AddToBlacklistWithId:self.friendMsg[@"id"] succ:^(int code, NSDictionary * _Nullable result) {
-        [MBProgressHUD showWithText:NSLocalizedString(@"friendCtr-caozuocg", @"")];
+        [MBProgressHUD showWithText:NSLocalizedString(@"操作成功", @"")];
     } fail:^(NSError * _Nonnull error) {
-        [MBProgressHUD showWithText:NSLocalizedString(@"AppLock_fail", @"")];
+        [MBProgressHUD showWithText:NSLocalizedString(@"操作失败", @"")];
     }];
 }
 

+ 1 - 1
ABtong/ABtong/Controller/friend/FriendListCell.h → ABtong/ABtong/ALLController/friendCtr/FriendListCell.h

@@ -2,7 +2,7 @@
 //  FriendListCell.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #ifndef FriendListCell_h

+ 1 - 1
ABtong/ABtong/Controller/friend/FriendListCell.m → ABtong/ABtong/ALLController/friendCtr/FriendListCell.m

@@ -2,7 +2,7 @@
 //  FriendListCell.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 #import "FriendListCell.h"
 #import <SDWebImage/UIImageView+WebCache.h>

+ 1 - 1
ABtong/ABtong/Controller/friend/FriendListController.h → ABtong/ABtong/ALLController/friendCtr/FriendListController.h

@@ -2,7 +2,7 @@
 //  FriendListController.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #ifndef FriendListController_h

+ 87 - 11
ABtong/ABtong/Controller/friend/FriendListController.m → ABtong/ABtong/ALLController/friendCtr/FriendListController.m

@@ -2,7 +2,7 @@
 //  FriendListController.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <Foundation/Foundation.h>
@@ -13,10 +13,15 @@
 #import "FriendController.h"
 #import "EXFriendController.h"
 #import "addFriendController.h"
+#import "GLoginController.h"
+#import "LoginStateManager.h"
 
-@interface FriendListController()<UITableViewDelegate,UITableViewDataSource>
+#import "FirendStore.h"
 
+@interface FriendListController()<UITableViewDelegate,UITableViewDataSource,FirendStoreDelegate,UISearchBarDelegate>
 
+
+@property (weak, nonatomic) IBOutlet UISearchBar *searchBr;
 @property (weak, nonatomic) IBOutlet UILabel *titleLb;
 @property (weak, nonatomic) IBOutlet UITableView *_tableView;
 @property (weak, nonatomic) IBOutlet UIView *topBview;
@@ -24,6 +29,8 @@
 
 @property (nonatomic,strong) UIView *markView;
 @property (strong, nonatomic) NSTimer *timer;
+
+@property (strong ,nonatomic) NSString *keyword;
 @end
 
 @implementation FriendListController
@@ -31,13 +38,19 @@
 -(void)viewDidLoad{
     [super viewDidLoad];
     
-    _titleLb.text = NSLocalizedString(@"TabBarItem2", @"");
+    _titleLb.text = NSLocalizedString(@"通讯录", @"");
+    
+    _searchBr.delegate = self;
+    [_searchBr becomeFirstResponder];
+    _searchBr.searchTextField.backgroundColor =[UIColor whiteColor];
+    // 设置文本颜色
+    [[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setDefaultTextAttributes:@{NSForegroundColorAttributeName: [UIColor blackColor]}];
     
     self._tableView.delegate = self;
     self._tableView.dataSource = self;
     self._tableView.backgroundColor = [UIColor clearColor];
     [self._tableView registerClass:[FriendListCell class] forCellReuseIdentifier:@"friend"]; // 使用 Storyboard 时不需要这行代码,除非你混合使用 Storyboard 和代码配置 Cell。
-    _topBview.backgroundColor=globalColor(GCTypeDark3);
+    _topBview.backgroundColor=globalColor(GCTypeinpuv);
     _topBview.layer.cornerRadius = 8.0f;
     
     _countLb.backgroundColor = globalColor(GCTypeOrangeR);
@@ -54,17 +67,29 @@
 }
 
 -(void)viewWillAppear:(BOOL)animated{
-    [self getFriendlist];
+    [self gettongxunlulist];
     [self getexfriends];
-    [self startTimer];
+//    [self startTimer];
     // 获取TabBarController
     UITabBarController *tabBarController = (UITabBarController *)self.parentViewController;
     // 移除红点(使用系统方法)
     tabBarController.tabBar.items[1].badgeValue = nil;
+    FirendStore.shareInstance.delegate = self;
+    [self getLocalFrends];
 }
 -(void)viewWillDisappear:(BOOL)animated{
     [super viewWillDisappear:animated];
     [self endTimer];
+    FirendStore.shareInstance.delegate = nil;
+}
+
+
+- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
+    // 当用户点击搜索按钮时调用
+    NSLog(@"Search button clicked with text: %@", searchBar.text);
+    [searchBar resignFirstResponder]; // 隐藏键盘
+    self.keyword = searchBar.text;
+    
 }
 
 
@@ -89,17 +114,28 @@
 }
 
 
+-(void)getLocalFrends{
+    [FirendStore.shareInstance reloadData:@""];
+}
 
--(void)getFriendlist{
-    [FriendNetApi getfriends:nil succ:^(int code, NSDictionary * res) {
+- (void)FirendChange:(NSArray *_Nullable)msgList type:(NSInteger)typpe{
+    NSLog(@"fList-----:%@",msgList);
+}
+
+
+-(void)gettongxunlulist{
+    
+    [FriendNetApi getabtTongxunlus:nil succ:^(int code, NSDictionary * res) {
         self.friendlist = res[@"data"];
         NSLog(@"self.friendlist:%@",self.friendlist);
         if(self.friendlist){
             [self._tableView reloadData];
+            [self updataLocalFirends:self.friendlist];
         }
     } fail:^(NSError * _Nonnull error) {
-        
+        ;
     }];
+
 }
 
 -(void)getexfriends{
@@ -131,6 +167,10 @@
 
 
 -(void)gotoexFriend{
+    if(!LoginStateManager.sharedManager.isLoggedIn){
+        [self gotoLoginView];
+        return;
+    }
     UIStoryboard *board = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
     EXFriendController *friendctr = [board instantiateViewControllerWithIdentifier:@"EXFriendController"];
     UINavigationController *uiNavC = [[UINavigationController alloc] initWithRootViewController:friendctr];
@@ -140,7 +180,10 @@
 
 
 - (IBAction)addNewFriend:(id)sender {
-    
+    if(!LoginStateManager.sharedManager.isLoggedIn){
+        [self gotoLoginView];
+        return;
+    }
     UIStoryboard *board = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
     addFriendController *addfriendctr = [board instantiateViewControllerWithIdentifier:@"addFriendController"];
     UINavigationController *uiNavC = [[UINavigationController alloc] initWithRootViewController:addfriendctr];
@@ -149,6 +192,19 @@
     
 //    [self showpopView];
 }
+    
+-(void)searchFriend{
+    
+    if (self.friendlist.count>0) {
+        NSMutableArray *tempArray = [NSMutableArray new];
+        for (NSDictionary *item in self.friendlist) {
+            NSString *name =  item[@"name"];
+            if([name containsString:self.keyword]){
+                [tempArray addObject:item];
+            }
+        }
+    }
+}
 
 #pragma mark UITableViewDelegate
 
@@ -209,11 +265,14 @@
 -(void)deleteFriend:(NSInteger)index{
     if(self.friendlist.count>index){
         NSDictionary *dic = self.friendlist[index];
-        [FriendNetApi deletefriend:dic[@"id"] succ:^(int code, NSDictionary * res) {
+        
+        [FriendNetApi deleteTongxunlu:dic[@"id"] succ:^(int code, NSDictionary * res) {
+            NSLog(@"deleteTongxunlu:%@",res);
             NSMutableArray *tempArray = [NSMutableArray arrayWithArray:self.friendlist];
             [tempArray removeObjectAtIndex:index];
             self.friendlist = tempArray;
             [self._tableView reloadData];
+            [FirendStore.shareInstance deleteAbtFirend:dic[@"id"]];
         } fail:^(NSError * _Nonnull error) {
             ;
         }];
@@ -221,4 +280,21 @@
 }
 
 
+-(void)gotoLoginView{
+    UIStoryboard *board = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
+    GLoginController *login = [board instantiateViewControllerWithIdentifier:@"LoginController"];
+    UINavigationController *uiNavC = [[UINavigationController alloc] initWithRootViewController:login];
+    uiNavC.modalPresentationStyle = UIModalPresentationFullScreen;
+    [self presentViewController:uiNavC animated:YES completion:nil];
+}
+
+
+
+-(void)updataLocalFirends:(NSArray *)array{
+    for (NSDictionary *dic in array) {
+        [FirendStore.shareInstance reciveMsg:dic];
+    }
+}
+    
+
 @end

+ 1 - 1
ABtong/ABtong/Controller/friend/ReportViewController.h → ABtong/ABtong/ALLController/friendCtr/ReportViewController.h

@@ -2,7 +2,7 @@
 //  ForwardViewController.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <UIKit/UIKit.h>

+ 18 - 19
ABtong/ABtong/Controller/friend/ReportViewController.m → ABtong/ABtong/ALLController/friendCtr/ReportViewController.m

@@ -2,14 +2,13 @@
 //  ForwardViewController.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import "ReportViewController.h"
 
 #import "FriendListCell.h"
 #import "FriendNetApi.h"
-#import "GroupNetApi.h"
 #import "ChatListStore.h"
 #import "GWebSocket.h"
 #import "UDManager.h"
@@ -35,7 +34,7 @@
 }
 
 - (void)configUI{
-    [self setNavigationTitle:NSLocalizedString(@"FriendCtr-toushujb", @"")];
+    [self setNavigationTitle:NSLocalizedString(@"投诉举报", @"")];
     [self setNavigationBarTransparent:YES];
     [self setNavigationBarBackgroundColor:UIColor.clearColor];
     [self setNavigationTitleColor:UIColor.whiteColor font:SYSBFONT(18)];
@@ -46,28 +45,28 @@
         make.left.right.top.bottom.mas_equalTo(0);
     }];
     
-    [_textSrray addObject:NSLocalizedString(@"Report-fabubudangnr", @"")];
+    [_textSrray addObject:NSLocalizedString(@"发布不适当", @"")];
     [_selSrray addObject:@"0"];
     
-    [_textSrray addObject:NSLocalizedString(@"Report-cunzaiqzxw", @"")];
+    [_textSrray addObject:NSLocalizedString(@"存在欺诈", @"")];
     [_selSrray addObject:@"0"];
     
-    [_textSrray addObject:NSLocalizedString(@"Report-zhanghaobd", @"")];
+    [_textSrray addObject:NSLocalizedString(@"被盜用了", @"")];
     [_selSrray addObject:@"0"];
     
-    [_textSrray addObject:NSLocalizedString(@"Report-fangmaopin", @"")];
+    [_textSrray addObject:NSLocalizedString(@"发布仿冒", @"")];
     [_selSrray addObject:@"0"];
     
-    [_textSrray addObject:NSLocalizedString(@"Report-maocongtr", @"")];
+    [_textSrray addObject:NSLocalizedString(@"冒充他人", @"")];
     [_selSrray addObject:@"0"];
     
-    [_textSrray addObject:NSLocalizedString(@"Report-qinquan", @"")];
+    [_textSrray addObject:NSLocalizedString(@"存在侵权", @"")];
     [_selSrray addObject:@"0"];
     
-    [_textSrray addObject:NSLocalizedString(@"Report-qinfanwcnr", @"")];
+    [_textSrray addObject:NSLocalizedString(@"侵犯未成年人", @"")];
     [_selSrray addObject:@"0"];
     
-    [_textSrray addObject:NSLocalizedString(@"Report-qitayuanyin", @"")];
+    [_textSrray addObject:NSLocalizedString(@"其他原因", @"")];
     [_selSrray addObject:@"0"];
     
     
@@ -78,7 +77,7 @@
 #pragma mark lazy
 - (UIImageView *)bgImageView{
     if (!_bgImageView) {
-        _bgImageView = [[UIImageView alloc] initWithImage:kImageMake(@"loginBG")];
+        _bgImageView = [[UIImageView alloc] initWithImage:kImageMake(@"bgset")];
     }
     return _bgImageView;
 }
@@ -100,12 +99,12 @@
     notelb1.textColor = UIColor.whiteColor;
     notelb1.textAlignment = NSTextAlignmentLeft;
     [self.view addSubview:notelb1];
-    notelb1.text =NSLocalizedString(@"Report-duixiang", @"");
+    notelb1.text =NSLocalizedString(@"投诉举报对象", @"");
     
     UIButton *tijiaoBT = [UIButton buttonWithType:UIButtonTypeSystem];
-    [tijiaoBT setTitle:NSLocalizedString(@"app-tijiao", @"") forState:UIControlStateNormal];
-    [tijiaoBT setTitleColor:UIColor.blackColor forState:UIControlStateNormal];
-    [tijiaoBT setBackgroundColor:globalColor(GCTypeGreen)];
+    [tijiaoBT setTitle:NSLocalizedString(@"提交", @"") forState:UIControlStateNormal];
+    [tijiaoBT setTitleColor:UIColor.whiteColor forState:UIControlStateNormal];
+    [tijiaoBT setBackgroundColor:globalColor(GCTypeBlued)];
     tijiaoBT.layer.cornerRadius = 5.f;
     tijiaoBT.layer.masksToBounds = YES;
     [self.view addSubview:tijiaoBT];
@@ -128,7 +127,7 @@
     notelb3.textColor = globalColor(GCTypeYellow);
     notelb3.textAlignment = NSTextAlignmentLeft;
     [self.view addSubview:notelb3];
-    notelb3.text =NSLocalizedString(@"Report-yuanyin", @"");
+    notelb3.text =NSLocalizedString(@"举报原因", @"");
     
     _tableview = [[UITableView alloc] init];
     [self.view addSubview:_tableview];
@@ -250,7 +249,7 @@
     }
     
     if(spec.length==0){
-        [MBProgressHUD showWithText:NSLocalizedString(@"Report-yuanyin", @"")];
+        [MBProgressHUD showWithText:NSLocalizedString(@"举报原因", @"")];
         return;
     }
     
@@ -265,7 +264,7 @@
         NSLog(@"reportUser res:%@",res);
         NSString *coder=res[@"code"];
         if (coder.intValue==200) {
-            [MBProgressHUD showWithText:NSLocalizedString(@"friendCtr-caozuocg", @"")];
+            [MBProgressHUD showWithText:NSLocalizedString(@"操作成功", @"")];
         }
         
     } fail:^(NSError * _Nonnull error) {

+ 1 - 1
ABtong/ABtong/Controller/friend/addFriendController.h → ABtong/ABtong/ALLController/friendCtr/addFriendController.h

@@ -2,7 +2,7 @@
 //  addFriendController.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #ifndef addFriendController_h

+ 20 - 9
ABtong/ABtong/Controller/friend/addFriendController.m → ABtong/ABtong/ALLController/friendCtr/addFriendController.m

@@ -2,7 +2,7 @@
 //  addFriendController.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <Foundation/Foundation.h>
@@ -16,10 +16,8 @@
 @property (weak, nonatomic) IBOutlet UIImageView *avarvImg;
 @property (weak, nonatomic) IBOutlet UILabel *nameLb;
 @property (weak, nonatomic) IBOutlet UITextView *beizhuT;
-@property (weak, nonatomic) IBOutlet UIButton *quxiaoBt;
 @property (weak, nonatomic) IBOutlet UIButton *tianjiaBt;
 
-@property (weak, nonatomic) IBOutlet UILabel *beizhuNoteLb;
 
 @property (nonatomic,strong) NSString *keyword;
 @property (nonatomic,strong) NSDictionary *userDic;
@@ -58,13 +56,18 @@
     _beizhuT.layer.borderColor = [UIColor whiteColor].CGColor;
     _beizhuT.layer.backgroundColor = [UIColor whiteColor].CGColor;
     _beizhuT.textColor = UIColor.blackColor;
-    
-    _nameLb.text = @"没有数据";
-    [_tianjiaBt setBackgroundColor:globalColor(GCTypeGreen)];
+    _beizhuT.attributedText = [[NSAttributedString alloc] initWithString:@"請輸入備註..." attributes:@{NSForegroundColorAttributeName: [UIColor lightGrayColor]}];
+    _nameLb.text = @"沒有數據";
+    [_tianjiaBt setBackgroundColor:globalColor(GCTypeBlued)];
     _tianjiaBt.layer.cornerRadius = 8;
     _tianjiaBt.layer.masksToBounds = YES; // 防止子视图超出圆角边界
-    _tianjiaBt.tintColor = UIColor.blackColor;
+    _tianjiaBt.tintColor = UIColor.whiteColor;
     self.userDic=nil;
+    
+    self.cntentView.alpha = 0;
+    self.beizhuT.alpha = 0;
+    self.tianjiaBt.alpha = 0;
+    
 }
 
 -(void)dismissKeyboard{
@@ -86,7 +89,8 @@
         @"friendId":self.userDic[@"id"],
         @"message":_beizhuT.text
     };
-    [FriendNetApi shenqingADDfriend:dis succ:^(int code, NSDictionary * res) {
+    
+    [FriendNetApi AddTongxunlu:dis succ:^(int code, NSDictionary * res) {
         NSLog(@"res:%@",res);
         self.userDic = nil;
         [self dismissViewControllerAnimated:YES completion:nil];
@@ -120,8 +124,15 @@
                 self.userDic =data[0];
                 NSLog(@"1:%@",self.userDic);
                 [self getData];
+
+                self.cntentView.alpha = 1;
+                self.beizhuT.alpha = 1;
+                self.tianjiaBt.alpha = 1;
             }
             else{
+                self.cntentView.alpha = 0;
+                self.beizhuT.alpha = 0;
+                self.tianjiaBt.alpha = 0;
             }
             
         } fail:^(NSError * _Nonnull error) {
@@ -132,7 +143,7 @@
 
 -(void)getData{
     if(self.userDic==nil){
-        self.nameLb.text = @"没有数据";
+        self.nameLb.text = @"沒有數據";
         _avarvImg.alpha = 0;
         return;
     }

+ 1 - 1
ABtong/ABtong/Controller/mine/APPLockerChangeController.h → ABtong/ABtong/ALLController/geren/APPLockerChangeController.h

@@ -2,7 +2,7 @@
 //  APPLockerChangeController.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <UIKit/UIKit.h>

+ 7 - 7
ABtong/ABtong/Controller/mine/APPLockerChangeController.m → ABtong/ABtong/ALLController/geren/APPLockerChangeController.m

@@ -2,7 +2,7 @@
 //  APPLockerChangeController.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import "APPLockerChangeController.h"
@@ -24,7 +24,7 @@
 }
 
 - (void)configUI{
-    [self setNavigationTitle:NSLocalizedString(@"userCenter-yingysm", @"")];
+    [self setNavigationTitle:NSLocalizedString(@"应用锁密码", @"")];
     // 设置导航栏背景色
     [self setNavigationBarBackgroundColor:UIColor.clearColor];
     
@@ -35,7 +35,7 @@
     [self setBackButtonTitle:@""];
     [self setBackButtonColor:[UIColor whiteColor]];
     
-    UIImageView * bgImageView = [[UIImageView alloc] initWithImage:kImageMake(@"loginBG")];
+    UIImageView * bgImageView = [[UIImageView alloc] initWithImage:kImageMake(@"bgset")];
     [self.view addSubview:bgImageView];
     [bgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.right.top.bottom.mas_equalTo(0);
@@ -108,7 +108,7 @@
     if (!_switchTitle) {
         _switchTitle = [[UILabel alloc] init];
         _switchTitle.textColor = UIColor.whiteColor;
-        _switchTitle.text = NSLocalizedString(@"AppLock_switch", @"");
+        _switchTitle.text = NSLocalizedString(@"是否开启应用密码锁", @"");
         _switchTitle.font = SYSFONT(16);
     }
     return _switchTitle;
@@ -117,10 +117,10 @@
 - (UIButton *)changePwdBtn{
     if (!_changePwdBtn) {
         _changePwdBtn = [UIButton buttonWithType:UIButtonTypeCustom];
-        [_changePwdBtn setBackgroundColor:globalColor(GCTypeGreen)];
+        [_changePwdBtn setBackgroundColor:globalColor(GCTypeBlued)];
 //        [_changePwdBtn setBackgroundColor:[UIColor jk_colorWithHexString:@"#6E75FB"]];
-        [_changePwdBtn setTitle:NSLocalizedString(@"userCenter-xiugaimm", @"") forState: UIControlStateNormal];
-        [_changePwdBtn setTitleColor:UIColor.blackColor forState:UIControlStateNormal];
+        [_changePwdBtn setTitle:NSLocalizedString(@"修改密码", @"") forState: UIControlStateNormal];
+        [_changePwdBtn setTitleColor:UIColor.whiteColor forState:UIControlStateNormal];
         _changePwdBtn.titleLabel.font = SYSFONT(16);
         _changePwdBtn.layer.cornerRadius = 5.f;
         _changePwdBtn.layer.masksToBounds = YES;

+ 1 - 1
ABtong/ABtong/Controller/mine/AppLockPasswordController.h → ABtong/ABtong/ALLController/geren/AppLockPasswordController.h

@@ -2,7 +2,7 @@
 //  AppLockPasswordController.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <UIKit/UIKit.h>

+ 39 - 32
ABtong/ABtong/Controller/mine/AppLockPasswordController.m → ABtong/ABtong/ALLController/geren/AppLockPasswordController.m

@@ -2,7 +2,7 @@
 //  AppLockPasswordController.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import "AppLockPasswordController.h"
@@ -58,7 +58,7 @@
     [self setBackButtonTitle:@""];
     [self setBackButtonColor:[UIColor whiteColor]];
 
-    UIImageView * bgImageView = [[UIImageView alloc] initWithImage:kImageMake(@"loginBG")];
+    UIImageView * bgImageView = [[UIImageView alloc] initWithImage:kImageMake(@"bgset")];
     [self.view addSubview:bgImageView];
     [bgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.right.top.bottom.mas_equalTo(0);
@@ -82,30 +82,30 @@
     
     // 旧密码输入框(仅修改密码模式显示)
     self.oldPasswordField = [[UITextField alloc] init];
-    self.oldPasswordField.placeholder = NSLocalizedString(@"AppLock_oldPwd_placeholder", @"");
+    self.oldPasswordField.placeholder = NSLocalizedString(@"请输入旧密码", @"");
     self.oldPasswordField.secureTextEntry = YES;
     self.oldPasswordField.borderStyle = UITextBorderStyleRoundedRect;
     [self.view addSubview:self.oldPasswordField];
     
     // 密码输入框
     self.passwordField = [[UITextField alloc] init];
-    self.passwordField.placeholder = NSLocalizedString(@"login-passw-note", @"");
+    self.passwordField.placeholder = NSLocalizedString(@"请输入密码", @"");
     self.passwordField.secureTextEntry = YES;
     self.passwordField.borderStyle = UITextBorderStyleRoundedRect;
     [self.view addSubview:self.passwordField];
     
     // 确认密码输入框 (仅在设置和修改模式显示)
     self.confirmField = [[UITextField alloc] init];
-    self.confirmField.placeholder = NSLocalizedString(@"AppLock_secondPwd_placeholder", @"");
+    self.confirmField.placeholder = NSLocalizedString(@"请再次输入密码", @"");
     self.confirmField.secureTextEntry = YES;
     self.confirmField.borderStyle = UITextBorderStyleRoundedRect;
     [self.view addSubview:self.confirmField];
     
     // 提交按钮
     self.submitButton = [UIButton buttonWithType:UIButtonTypeSystem];
-    [self.submitButton setTitle:NSLocalizedString(@"Common_confirm", @"") forState:UIControlStateNormal];
-    [self.submitButton setTitleColor:UIColor.blackColor forState:UIControlStateNormal];
-    [self.submitButton setBackgroundColor:globalColor(GCTypeGreen)];
+    [self.submitButton setTitle:NSLocalizedString(@"确定", @"") forState:UIControlStateNormal];
+    [self.submitButton setTitleColor:UIColor.whiteColor forState:UIControlStateNormal];
+    [self.submitButton setBackgroundColor:globalColor(GCTypeBlued)];
     self.submitButton.layer.cornerRadius = 5.f;
     self.submitButton.layer.masksToBounds = YES;
     [self.submitButton addTarget:self action:@selector(submitAction) forControlEvents:UIControlEventTouchUpInside];
@@ -113,7 +113,7 @@
     
     // 取消按钮
     self.cancelButton = [UIButton buttonWithType:UIButtonTypeSystem];
-    [self.cancelButton setTitle:NSLocalizedString(@"Common_cancel", @"") forState:UIControlStateNormal];
+    [self.cancelButton setTitle:NSLocalizedString(@"取消", @"") forState:UIControlStateNormal];
     [self.cancelButton setTitleColor:globalColor(GCTypeDark4) forState:UIControlStateNormal];
     [self.cancelButton setBackgroundColor:UIColor.whiteColor];
     self.cancelButton.layer.cornerRadius = 5.f;
@@ -182,20 +182,20 @@
 - (void)updateUIForMode {
     switch (self.mode) {
         case LockViewModeSet:
-            self.titleLabel.text = NSLocalizedString(@"AppLock_title_set", @"");
+            self.titleLabel.text = NSLocalizedString(@"设置应用锁密码", @"");
             self.oldPasswordField.hidden = YES;
             self.confirmField.hidden = NO;
             self.cancelButton.hidden = YES;
             break;
         case LockViewModeVerify:
-            self.titleLabel.text = NSLocalizedString(@"AppLock_title_verify", @"");
+            self.titleLabel.text = NSLocalizedString(@"请输入应用锁密码", @"");
             self.oldPasswordField.hidden = YES;
             self.confirmField.hidden = YES;
             self.cancelButton.hidden = NO;
             
             break;
         case LockViewModeChange:
-            self.titleLabel.text = NSLocalizedString(@"AppLock_title_change", @"");
+            self.titleLabel.text = NSLocalizedString(@"修改应用锁密码", @"");
             self.oldPasswordField.hidden = NO;
             self.confirmField.hidden = NO;
             self.cancelButton.hidden = YES;
@@ -253,12 +253,12 @@
     switch (self.mode) {
         case LockViewModeSet:
             if (password.length == 0) {
-                self.messageLabel.text = NSLocalizedString(@"AppLock_pwd_alter", @"");
+                self.messageLabel.text = NSLocalizedString(@"密码不能为空", @"");
                 return;
             }
             
             if (![password isEqualToString:confirmPassword]) {
-                self.messageLabel.text = NSLocalizedString(@"Security_passwordDefferent", @"");
+                self.messageLabel.text = NSLocalizedString(@"密码不一致", @"");
                 return;
             }
             
@@ -267,7 +267,7 @@
             
         case LockViewModeVerify:
             if (password.length == 0) {
-                self.messageLabel.text = NSLocalizedString(@"AppLock_pwd_alter", @"");
+                self.messageLabel.text = NSLocalizedString(@"密码不能为空", @"");
                 return;
             }
             
@@ -284,26 +284,26 @@
             
         case LockViewModeChange:
             if (oldPassword.length == 0 || password.length == 0) {
-                self.messageLabel.text = NSLocalizedString(@"AppLock_pwd_alter", @"");
+                self.messageLabel.text = NSLocalizedString(@"密码不能为空", @"");
                 return;
             }
             
             if (![password isEqualToString:confirmPassword]) {
-                self.messageLabel.text = NSLocalizedString(@"Security_passwordDefferent", @"");
+                self.messageLabel.text = NSLocalizedString(@"密码不一致", @"");
                 return;
             }
             
             // 验证安全密码不能跟应用锁密码一致
             BOOL res = [[APPLocker sharedLocker] verifySecurtyPassword:password];
             if (res) {
-                [MBProgressHUD showWithText:NSLocalizedString(@"Security_lockf-same", @"")];
+                [MBProgressHUD showWithText:NSLocalizedString(@"不能使用同一个", @"")];
                 return;
             }
             
             // 旧密码不正确
             success = [[APPLocker sharedLocker] verifyPassword:oldPassword];
             if (!success) {
-                [MBProgressHUD showWithText:NSLocalizedString(@"AppLock_oldPwdWrong_alter", @"")];
+                [MBProgressHUD showWithText:NSLocalizedString(@"旧密码不正确", @"")];
                 return;
             }
             
@@ -312,7 +312,7 @@
                                                      toNewPassword:password
                                                              error:&error];
             if (!success) {
-                self.messageLabel.text = error ? error.localizedDescription : NSLocalizedString(@"AppLock_oldPwdWrong_alter", @"");
+                self.messageLabel.text = error ? error.localizedDescription : NSLocalizedString(@"旧密码不正确", @"");
                 return;
             }
             break;
@@ -329,7 +329,7 @@
             }
         }
         else{
-            [MBProgressHUD showWithText:NSLocalizedString(@"AppLock_pwdWrong_alter", @"")];
+            [MBProgressHUD showWithText:NSLocalizedString(@"密码错误重试", @"")];
         }
     }else{
         if (success) {
@@ -338,7 +338,7 @@
             }
             [self dismissViewControllerAnimated:YES completion:nil];
         } else {
-            self.messageLabel.text = error ? error.localizedDescription : NSLocalizedString(@"AppLock_fail", @"");
+            self.messageLabel.text = error ? error.localizedDescription : NSLocalizedString(@"操作失败", @"");
         }
     }
     
@@ -361,19 +361,15 @@
     
     
     NSString *userid = [UDManager.shareInstance getSDManager:dkuserloginId];
-    NSDictionary * userInfo = [UDManager.shareInstance getDDManager:dkuserinfo];
-    [GDBManager.shareInstance delLocalmsglistTable:userid];
-    [GDBManager.shareInstance delchatlistTable:^(NSArray * _Nullable array) {
-        
-    } fail:^(NSString * _Nullable error) {
-        
-    }];
-    [GDBManager.shareInstance deleteDB];
+    NSDictionary * userInfo = [UDManager.shareInstance getDDManager:nkactuserInfo];
+    
+    [GDBManager.shareInstance replayAllData];
+    
     //清空token
     
     //断开socket
     [[GWebSocket shareInstance] closeWebSocket];
-//    [UDManager.shareInstance removeUDManager:gkeytoken];
+    [UDManager.shareInstance removeUDManager:gkeytoken];
     NSDictionary * param = @{
         @"username":userInfo[@"username"],
         @"password":@"qtw123..xx",
@@ -430,7 +426,18 @@
                                 };
             if([gcode intValue]==200){
                 NSLog(@"ps:%@",ps);
-                [UDManager.shareInstance setDDManager:ps key:dkuserinfo];
+                
+                [UDManager.shareInstance setSDManager:ps[@"id"] key:dkuserId];
+                
+                NSDictionary *actuserInfo = [UDManager.shareInstance getDDManager:nkactuserInfo];
+                NSMutableDictionary *Dict = [NSMutableDictionary dictionaryWithDictionary:actuserInfo];
+                [Dict setObject:ps[@"id"]?:@"" forKey:@"userId"];
+                [Dict setObject:ps[@"name"]?:@"" forKey:@"name"];
+                [Dict setObject:ps[@"avatar"]?:@"" forKey:@"avatar"];
+                actuserInfo = [Dict copy];
+                [UDManager.shareInstance setDDManager:actuserInfo key:nkactuserInfo];
+                [GDBManager.shareInstance updataUserServer:actuserInfo succ:nil fail:nil];
+                
                 if(self.onSuccessWithSecurity){
                     self.onSuccessWithSecurity();
                 }

+ 1 - 1
ABtong/ABtong/Controller/mine/BlackListController.h → ABtong/ABtong/ALLController/geren/BlackListController.h

@@ -2,7 +2,7 @@
 //  BlackListController.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <UIKit/UIKit.h>

+ 5 - 5
ABtong/ABtong/Controller/mine/BlackListController.m → ABtong/ABtong/ALLController/geren/BlackListController.m

@@ -2,7 +2,7 @@
 //  BlackListController.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import "BlackListController.h"
@@ -34,7 +34,7 @@
 #pragma mark UI
 - (void)configUI{
     [self setNavigationBarHidden:NO animated:YES];
-    [self setNavigationTitle:NSLocalizedString(@"userCenter-heimdan", @"")];
+    [self setNavigationTitle:NSLocalizedString(@"黑名单", @"")];
     // 设置导航栏背景色
     [self setNavigationBarBackgroundColor:UIColor.clearColor];
     
@@ -45,7 +45,7 @@
     [self setBackButtonTitle:@""];
     [self setBackButtonColor:[UIColor whiteColor]];
     
-    UIImageView * bgImageView = [[UIImageView alloc] initWithImage:kImageMake(@"loginBG")];
+    UIImageView * bgImageView = [[UIImageView alloc] initWithImage:kImageMake(@"bgset")];
     [self.view addSubview:bgImageView];
     [bgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.right.top.bottom.mas_equalTo(0);
@@ -104,7 +104,7 @@
     NSDictionary * user = self.dataArray[indexPath.row];
     // 创建删除操作
     UIContextualAction *deleteAction = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleDestructive
-                                                                               title:NSLocalizedString(@"GroupCtr-yichu", @"")
+                                                                               title:NSLocalizedString(@"移除", @"")
                                                                              handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) {
         // 更新数据
         [weakself removeFromBlacklist:user];
@@ -124,7 +124,7 @@
 
 #pragma mark emptyDataset
 - (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView{
-    return [[NSAttributedString alloc] initWithString:NSLocalizedString(@"Common_nodata", @"")];
+    return [[NSAttributedString alloc] initWithString:NSLocalizedString(@"暂无数据", @"")];
 }
 
 - (CGFloat)verticalOffsetForEmptyDataSet:(UIScrollView *)scrollView{

+ 1 - 1
ABtong/ABtong/Controller/mine/ChangePasswordController.h → ABtong/ABtong/ALLController/geren/ChangePasswordController.h

@@ -2,7 +2,7 @@
 //  ChangePasswordController.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <UIKit/UIKit.h>

+ 35 - 13
ABtong/ABtong/Controller/mine/ChangePasswordController.m → ABtong/ABtong/ALLController/geren/ChangePasswordController.m

@@ -2,7 +2,7 @@
 //  ChangePasswordController.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import "ChangePasswordController.h"
@@ -11,6 +11,7 @@
 #import "Masonry.h"
 #import "config.h"
 #import "UserNetApi.h"
+#import "GDBManager.h"
 
 @interface ChangePasswordController ()<UITextFieldDelegate>
 @property (nonatomic, strong) UIStackView * titleStackView;
@@ -45,7 +46,7 @@
 #pragma mark UI
 - (void)configUI{
     
-    [self setNavigationTitle:NSLocalizedString(@"userCenter-xiugaimm", @"")];
+    [self setNavigationTitle:NSLocalizedString(@"修改密码", @"")];
     // 设置导航栏背景色
     [self setNavigationBarBackgroundColor:UIColor.clearColor];
     
@@ -56,7 +57,7 @@
     [self setBackButtonTitle:@""];
     [self setBackButtonColor:[UIColor whiteColor]];
 
-    UIImageView * bgImageView = [[UIImageView alloc] initWithImage:kImageMake(@"loginBG")];
+    UIImageView * bgImageView = [[UIImageView alloc] initWithImage:kImageMake(@"bgset")];
     [self.view addSubview:bgImageView];
     [bgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.right.top.bottom.mas_equalTo(0);
@@ -145,7 +146,7 @@
     }
     
     if (![self.confirmPasswordTextfield.text isEqualToString:self.changePasswordTextfield.text]) {
-        self.confirmPwdAlertLbl.text = NSLocalizedString(@"PwdChange_passwordsDifferent_alter", @"");
+        self.confirmPwdAlertLbl.text = NSLocalizedString(@"密码不一致", @"");
         self.confirmPwdAlertLbl.hidden = NO;
         self.confirmPasswordTextfield.layer.borderColor = UIColor.redColor.CGColor;
         return;
@@ -158,6 +159,11 @@
         NSLog(@"result:%@",res);
         if ([res jk_hasKey:@"msg"]) {
             [MBProgressHUD showWithText:[res objectForKey:@"msg"]];
+            
+            
+        }
+        if ([res jk_hasKey:@"code"] && [res[@"code"] integerValue] == 200) {
+            [self updatalocalDB];
         }
     } fail:^(NSError * _Nonnull error) {
         NSLog(@"error:%@",error);
@@ -165,6 +171,22 @@
     }];
 }
 
+-(void)updatalocalDB{
+    
+    NSDictionary *dic = [UDManager.shareInstance getDDManager:nkactuserInfo];
+    
+    NSMutableDictionary *mdic = [dic mutableCopy];
+    [mdic setObject:self.confirmPasswordTextfield.text forKey:@"passWord"];
+    
+    
+    [GDBManager.shareInstance insertlcUserServer:mdic succ:^(NSArray * _Nullable array) {
+
+    } fail:^(NSString * _Nullable error) {
+        [MBProgressHUD showWithText:@"数据保存失败"];
+    }];
+    
+}
+
 #pragma mark textfield delegate
 - (void)textFieldDidEndEditing:(UITextField *)textField{
     if (textField == self.oldPasswordTextfield && self.oldPasswordTextfield.text.length != 0) {
@@ -203,7 +225,7 @@
 - (UILabel *)oldPasswordLbl{
     if (!_oldPasswordLbl) {
         _oldPasswordLbl = [[UILabel alloc] init];
-        _oldPasswordLbl.text = NSLocalizedString(@"PwdChange_oldPassword", @"");
+        _oldPasswordLbl.text = NSLocalizedString(@"旧密码", @"");
         _oldPasswordLbl.textColor = UIColor.whiteColor;
         _oldPasswordLbl.font = [UIFont systemFontOfSize:16 weight:UIFontWeightRegular];
     }
@@ -213,7 +235,7 @@
 - (UILabel *)changePasswordLbl{
     if (!_changePasswordLbl) {
         _changePasswordLbl = [[UILabel alloc] init];
-        _changePasswordLbl.text = NSLocalizedString(@"PwdChange_newPassword", @"");
+        _changePasswordLbl.text = NSLocalizedString(@"新密码", @"");
         _changePasswordLbl.textColor = UIColor.whiteColor;
         _changePasswordLbl.font = [UIFont systemFontOfSize:16 weight:UIFontWeightRegular];
     }
@@ -223,7 +245,7 @@
 - (UILabel *)confirmPasswordLbl{
     if (!_confirmPasswordLbl) {
         _confirmPasswordLbl = [[UILabel alloc] init];
-        _confirmPasswordLbl.text = NSLocalizedString(@"PwdChange_confirmPassword", @"");
+        _confirmPasswordLbl.text = NSLocalizedString(@"确认密码", @"");
         _confirmPasswordLbl.textColor = UIColor.whiteColor;
         _confirmPasswordLbl.font = [UIFont systemFontOfSize:16 weight:UIFontWeightRegular];
     }
@@ -233,7 +255,7 @@
 - (UILabel *)oldPwdAlertLbl{
     if (!_oldPwdAlertLbl) {
         _oldPwdAlertLbl = [[UILabel alloc] init];
-        _oldPwdAlertLbl.text = NSLocalizedString(@"PwdChange_oldPwd_alter", @"");
+        _oldPwdAlertLbl.text = NSLocalizedString(@"旧密码不空", @"");
         _oldPwdAlertLbl.textColor = globalColor(GCTypeRedd);
         _oldPwdAlertLbl.font = SYSFONT(12);
         _oldPwdAlertLbl.hidden = YES;
@@ -244,7 +266,7 @@
 - (UILabel *)changePwdAlterLbl{
     if (!_changePwdAlterLbl) {
         _changePwdAlterLbl = [[UILabel alloc] init];
-        _changePwdAlterLbl.text = NSLocalizedString(@"PwdChange_newPwd_alter", @"");
+        _changePwdAlterLbl.text = NSLocalizedString(@"新密码不空", @"");
         _changePwdAlterLbl.textColor = globalColor(GCTypeRedd);
         _changePwdAlterLbl.font = SYSFONT(12);
         _changePwdAlterLbl.hidden = YES;
@@ -255,7 +277,7 @@
 - (UILabel *)confirmPwdAlertLbl{
     if (!_confirmPwdAlertLbl) {
         _confirmPwdAlertLbl = [[UILabel alloc] init];
-        _confirmPwdAlertLbl.text = NSLocalizedString(@"PwdChange_confirmPwd_alter", @"");
+        _confirmPwdAlertLbl.text = NSLocalizedString(@"确认密码不能为空", @"");
         _confirmPwdAlertLbl.textColor = globalColor(GCTypeRedd);
         _confirmPwdAlertLbl.font = SYSFONT(12);
         _confirmPwdAlertLbl.hidden = YES;
@@ -317,9 +339,9 @@
 - (UIButton *)saveBtn{
     if (!_saveBtn) {
         _saveBtn = [UIButton buttonWithType:UIButtonTypeCustom];
-        [_saveBtn setTitle:NSLocalizedString(@"EGroupCtr-baocun", @"") forState:UIControlStateNormal];
-        [_saveBtn setBackgroundColor:globalColor(GCTypeGreen)];
-        [_saveBtn setTitleColor:UIColor.blackColor forState:UIControlStateNormal];
+        [_saveBtn setTitle:NSLocalizedString(@"保存", @"") forState:UIControlStateNormal];
+        [_saveBtn setBackgroundColor:globalColor(GCTypeBlued)];
+        [_saveBtn setTitleColor:UIColor.whiteColor forState:UIControlStateNormal];
         _saveBtn.titleLabel.font = [UIFont systemFontOfSize:16 weight:UIFontWeightMedium];
         _saveBtn.layer.cornerRadius = 5.f;
         _saveBtn.layer.masksToBounds = YES;

+ 1 - 1
ABtong/ABtong/Controller/mine/ChatSettingController.h → ABtong/ABtong/ALLController/geren/ChatSettingController.h

@@ -2,7 +2,7 @@
 //  ChatSettingController.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 #import <UIKit/UIKit.h>
 

+ 13 - 13
ABtong/ABtong/Controller/mine/ChatSettingController.m → ABtong/ABtong/ALLController/geren/ChatSettingController.m

@@ -2,7 +2,7 @@
 //  ChatSettingController.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import "ChatSettingController.h"
@@ -33,7 +33,7 @@
 }
 
 - (void)configUI{
-    [self setNavigationTitle:NSLocalizedString(@"userCenter-liaotsz", @"")];
+    [self setNavigationTitle:NSLocalizedString(@"聊天设置", @"")];
     // 设置导航栏背景色
     [self setNavigationBarBackgroundColor:UIColor.clearColor];
     
@@ -44,7 +44,7 @@
     [self setBackButtonTitle:@""];
     [self setBackButtonColor:[UIColor whiteColor]];
     
-    UIImageView * bgImageView = [[UIImageView alloc] initWithImage:kImageMake(@"loginBG")];
+    UIImageView * bgImageView = [[UIImageView alloc] initWithImage:kImageMake(@"bgset")];
     [self.view addSubview:bgImageView];
     [bgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.right.top.bottom.mas_equalTo(0);
@@ -62,15 +62,15 @@
     [self.saveBtn mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.mas_equalTo(20);
         make.right.mas_equalTo(-20);
-        make.top.mas_equalTo(self.tableView.mas_bottom).offset(20);
+        make.top.mas_equalTo(self.tableView.mas_bottom).offset(30);
         make.height.mas_equalTo(46);
     }];
 }
 
 #pragma mark api
 - (void)getChatSettingData{
-    NSDictionary * userInfo = [UDManager.shareInstance getDDManager:dkuserinfo];
-    [UserNetApi getChatSetting:userInfo[@"id"] succ:^(int code, NSDictionary * _Nullable result) {
+    NSDictionary * userInfo = [UDManager.shareInstance getDDManager:nkactuserInfo];
+    [UserNetApi getChatSetting:userInfo[@"userId"] succ:^(int code, NSDictionary * _Nullable result) {
         NSLog(@"chat setting:%@",result);
         if ([result jk_hasKey:@"data"]) {
             self.settingDict = [NSMutableDictionary dictionaryWithDictionary:result[@"data"]];
@@ -184,10 +184,10 @@
         _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
         _tableView.delegate = self;
         _tableView.dataSource =self;
-        _tableView.backgroundColor = UIColor.clearColor;
-        _tableView.separatorColor = globalColor(GCTypeGreen);
+        _tableView.backgroundColor = globalColor(GCTypeinpuv);
+        _tableView.separatorColor = globalColor(GCTypeBlued);
         _tableView.layer.cornerRadius = 5.f;
-        _tableView.layer.borderColor = globalColor(GCTypeGreen).CGColor;
+        _tableView.layer.borderColor = globalColor(GCTypeBlued).CGColor;
         _tableView.layer.borderWidth = 0.5f;
         _tableView.scrollEnabled = NO;
         [_tableView registerClass:ChatSettingCell.class forCellReuseIdentifier:NSStringFromClass(ChatSettingCell.class)];
@@ -198,10 +198,10 @@
 - (UIButton *)saveBtn{
     if (!_saveBtn) {
         _saveBtn = [UIButton buttonWithType:UIButtonTypeCustom];
-        [_saveBtn setTitle:NSLocalizedString(@"EGroupCtr-baocun", @"") forState:UIControlStateNormal];
-        [_saveBtn setTitleColor:UIColor.blackColor forState:UIControlStateNormal];
+        [_saveBtn setTitle:NSLocalizedString(@"保存", @"") forState:UIControlStateNormal];
+        [_saveBtn setTitleColor:UIColor.whiteColor forState:UIControlStateNormal];
         _saveBtn.titleLabel.font = SYSMFONT(16);
-        [_saveBtn setBackgroundColor:globalColor(GCTypeGreen)];
+        [_saveBtn setBackgroundColor:globalColor(GCTypeBlued)];
         _saveBtn.layer.cornerRadius = 5.f;
         _saveBtn.layer.masksToBounds = YES;
         [_saveBtn addTarget:self action:@selector(saveButtonClicked) forControlEvents:UIControlEventTouchUpInside];
@@ -211,7 +211,7 @@
 
 - (NSMutableArray *)titlesArray{
     if (!_titlesArray) {
-        _titlesArray = [NSMutableArray arrayWithArray:@[NSLocalizedString(@"ChatSetting_addFriend", @""),NSLocalizedString(@"ChatSetting_review", @""),NSLocalizedString(@"ChatSetting_privateChat", @""),NSLocalizedString(@"ChatSetting_audioRemind", @""),NSLocalizedString(@"ChatSetting_vedioRemind", @""),NSLocalizedString(@"ChatSetting_mobileDisplay", @""),NSLocalizedString(@"ChatSetting_emialDisplay", @"")]];
+        _titlesArray = [NSMutableArray arrayWithArray:@[NSLocalizedString(@"允许加好友", @""),NSLocalizedString(@"加好友审核", @""),NSLocalizedString(@"允许私聊", @""),NSLocalizedString(@"语音消息提醒", @""),NSLocalizedString(@"通话消息提醒", @""),NSLocalizedString(@"展示手机", @""),NSLocalizedString(@"展示邮箱", @"")]];
     }
     return _titlesArray;
 }

+ 1 - 1
ABtong/ABtong/Controller/mine/DeleteAccountController.h → ABtong/ABtong/ALLController/geren/DeleteAccountController.h

@@ -2,7 +2,7 @@
 //  DeleteAccountController.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <UIKit/UIKit.h>

+ 17 - 25
ABtong/ABtong/Controller/mine/DeleteAccountController.m → ABtong/ABtong/ALLController/geren/DeleteAccountController.m

@@ -2,7 +2,7 @@
 //  DeleteAccountController.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import "DeleteAccountController.h"
@@ -41,7 +41,7 @@
     [self.view endEditing:YES];
 }
 - (void)configUI{
-    [self setNavigationTitle:NSLocalizedString(@"userCenter-zhuxiaozh", @"")];
+    [self setNavigationTitle:NSLocalizedString(@"注销账号", @"")];
     // 设置导航栏背景色
     [self setNavigationBarBackgroundColor:UIColor.clearColor];
     
@@ -52,7 +52,7 @@
     [self setBackButtonTitle:@""];
     [self setBackButtonColor:[UIColor whiteColor]];
     
-    UIImageView * bgImageView = [[UIImageView alloc] initWithImage:kImageMake(@"loginBG")];
+    UIImageView * bgImageView = [[UIImageView alloc] initWithImage:kImageMake(@"bgset")];
     [self.view addSubview:bgImageView];
     [bgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.right.top.bottom.mas_equalTo(0);
@@ -110,37 +110,29 @@
             // 禁用按钮并改变样式
             self.getCodeBtn.enabled = NO;
             [self.getCodeBtn setTitleColor:[UIColor grayColor] forState:UIControlStateDisabled];
-            [self.getCodeBtn setTitle:[NSString stringWithFormat:@"%@(%ld)",NSLocalizedString(@"Sign-wangjimm", @"验证码"), (long)self.remainingSeconds] forState:UIControlStateDisabled];
+            [self.getCodeBtn setTitle:[NSString stringWithFormat:@"%@(%ld)",NSLocalizedString(@"验证码", @"验证码"), (long)self.remainingSeconds] forState:UIControlStateDisabled];
             
-//            [AlertHelper showAlertWithTitle:@"" message:NSLocalizedString(@"Sign-yanzhengmts", @"") cancelButtonTitle:NSLocalizedString(@"Common_getIt", @"") confirmButtonTitle:nil completion:^(NSInteger buttonIndex) {
-//                
-//            }];
         }else{
             [MBProgressHUD showWithText:res[@"msg"]];
         }
     } fail:^(NSError * _Nonnull error) {
         NSLog(@"error:%@",error);
-        [MBProgressHUD showWithText:NSLocalizedString(@"Login_network_alter", @"")];
+        [MBProgressHUD showWithText:NSLocalizedString(@"网络不可用", @"")];
     }];
 }
 
 - (void)deleteAccountButtonClicked{
     if (self.passwordTextfield.text.length == 0) {
-        [MBProgressHUD showWithText:NSLocalizedString(@"Sign-passw-note", @"")];
+        [MBProgressHUD showWithText:NSLocalizedString(@"请输入密码", @"")];
         return;
     }
     
     if (self.codeTextfield.text.length == 0) {
-        [MBProgressHUD showWithText:NSLocalizedString(@"Sign-qingsryzm", @"")];
+        [MBProgressHUD showWithText:NSLocalizedString(@"请输入验证码", @"")];
         return;
     }
     
-//    [AlertHelper showAlertWithTitle:NSLocalizedString(@"Common_tips", @"") message:NSLocalizedString(@"Security_deleteAccount_alter", @"") cancelButtonTitle:NSLocalizedString(@"Common_cancel", @"") confirmButtonTitle:NSLocalizedString(@"Common_deleteAccount", @"") completion:^(NSInteger buttonIndex) {
-//        
-//        if (buttonIndex == 0) {
-//            [self deleteAccount];
-//        }
-//    }];
+
 }
 
 #pragma mark api
@@ -189,9 +181,9 @@
         
         // 恢复按钮状态
         self.getCodeBtn.enabled = YES;
-        [self.getCodeBtn setTitle:NSLocalizedString(@"Sign-huoquyzm", @"") forState:UIControlStateNormal];
+        [self.getCodeBtn setTitle:NSLocalizedString(@"获取验证码", @"") forState:UIControlStateNormal];
     } else {
-        [self.getCodeBtn setTitle:[NSString stringWithFormat:@"%@(%ld)",NSLocalizedString(@"Sign-wangjimm", @"验证码"), (long)self.remainingSeconds] forState:UIControlStateDisabled];
+        [self.getCodeBtn setTitle:[NSString stringWithFormat:@"%@(%ld)",NSLocalizedString(@"验证码", @"验证码"), (long)self.remainingSeconds] forState:UIControlStateDisabled];
     }
 }
 
@@ -221,7 +213,7 @@
 - (UILabel *)passwordTitle{
     if (!_passwordTitle) {
         _passwordTitle = [[UILabel alloc] init];
-        _passwordTitle.text = NSLocalizedString(@"Common_password", @"");
+        _passwordTitle.text = NSLocalizedString(@"密码", @"");
         _passwordTitle.textColor = UIColor.whiteColor;
         _passwordTitle.font = SYSFONT(16);
     }
@@ -231,7 +223,7 @@
 - (UILabel *)codeTitle{
     if (!_codeTitle) {
         _codeTitle = [[UILabel alloc] init];
-        _codeTitle.text = NSLocalizedString(@"Sign-wangjimm", @"");
+        _codeTitle.text = NSLocalizedString(@"验证码", @"");
         _codeTitle.textColor = UIColor.whiteColor;
         _codeTitle.font = SYSFONT(16);
     }
@@ -273,7 +265,7 @@
     if (!_getCodeBtn) {
         _getCodeBtn = [UIButton buttonWithType:UIButtonTypeCustom];
         [_getCodeBtn setBackgroundColor:globalColor(GCTypeGreen)];
-        [_getCodeBtn setTitle:NSLocalizedString(@"Sign-huoquyzm", @"") forState:UIControlStateNormal];
+        [_getCodeBtn setTitle:NSLocalizedString(@"获取验证码", @"") forState:UIControlStateNormal];
         [_getCodeBtn setTitleColor:UIColor.blackColor forState:UIControlStateNormal];
         _getCodeBtn.titleLabel.font = SYSMFONT(14);
         _getCodeBtn.layer.cornerRadius = 5.f;
@@ -286,9 +278,9 @@
 - (UIButton *)deleteBtn{
     if (!_deleteBtn) {
         _deleteBtn = [UIButton buttonWithType:UIButtonTypeCustom];
-        [_deleteBtn setBackgroundColor:globalColor(GCTypeGreen)];
-        [_deleteBtn setTitle:NSLocalizedString(@"userCenter-zhuxiaozh", @"") forState:UIControlStateNormal];
-        [_deleteBtn setTitleColor:UIColor.blackColor forState:UIControlStateNormal];
+        [_deleteBtn setBackgroundColor:globalColor(GCTypeBlued)];
+        [_deleteBtn setTitle:NSLocalizedString(@"注销账号", @"") forState:UIControlStateNormal];
+        [_deleteBtn setTitleColor:UIColor.whiteColor forState:UIControlStateNormal];
         _deleteBtn.titleLabel.font = SYSMFONT(16);
         _deleteBtn.layer.cornerRadius = 5.f;
         _deleteBtn.layer.masksToBounds = YES;
@@ -300,7 +292,7 @@
 
 - (NSMutableDictionary *)userInfo{
     if (!_userInfo) {
-        _userInfo = [NSMutableDictionary dictionaryWithDictionary:[UDManager.shareInstance getDDManager:dkuserinfo]];
+        _userInfo = [NSMutableDictionary dictionaryWithDictionary:[UDManager.shareInstance getDDManager:nkactuserInfo]];
     }
     return _userInfo;
 }

+ 1 - 1
ABtong/ABtong/Controller/mine/FavoritesController.h → ABtong/ABtong/ALLController/geren/FavoritesController.h

@@ -2,7 +2,7 @@
 //  FavoritesController.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <UIKit/UIKit.h>

+ 12 - 12
ABtong/ABtong/Controller/mine/FavoritesController.m → ABtong/ABtong/ALLController/geren/FavoritesController.m

@@ -2,7 +2,7 @@
 //  FavoritesController.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import "FavoritesController.h"
@@ -13,7 +13,7 @@
 
 #import "UserNetApi.h"
 #import "FilePreviewer.h"
-#import "QuoteDetailController.h"
+#import "GotoDetailController.h"
 #import "CryptoAES.h"
 #import "FileNetApi.h"
 #import "AVFoundation/AVFoundation.h"
@@ -45,7 +45,7 @@
 #pragma mark UI
 - (void)configUI{
     [self setNavigationBarHidden:NO animated:YES];
-    [self setNavigationTitle:NSLocalizedString(@"userCenter-shoucjia", @"")];
+    [self setNavigationTitle:NSLocalizedString(@"收藏夹", @"")];
         
     // 设置导航栏背景色
     [self setNavigationBarBackgroundColor:UIColor.clearColor];
@@ -68,7 +68,7 @@
 //        make.right.mas_equalTo(-20);
 //    }];
     
-    UIImageView * bgImageView = [[UIImageView alloc] initWithImage:kImageMake(@"loginBG")];
+    UIImageView * bgImageView = [[UIImageView alloc] initWithImage:kImageMake(@"bgset")];
     [self.view addSubview:bgImageView];
     [bgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.right.top.bottom.mas_equalTo(0);
@@ -258,11 +258,11 @@
         if([extendDict jk_hasKey:@"url"]){
             [FilePreviewer.shared previewFileWithLocalPath:extendDict[@"localurl"]?:@"" remoteURL:getURL(extendDict[@"url"]) fromViewController:self];
         }else{
-            [MBProgressHUD showWithText:NSLocalizedString(@"AppLock_fail", @"操作失败")];
+            [MBProgressHUD showWithText:NSLocalizedString(@"操作失败", @"操作失败")];
         }
     }else if ([dict[@"messageType"] isEqualToString:@"0"]) {
         NSLog(@"dict:%@",dict);
-        QuoteDetailController * quoteDetailVc = [[QuoteDetailController alloc] init];
+        GotoDetailController * quoteDetailVc = [[GotoDetailController alloc] init];
         quoteDetailVc.quotedContent = [CryptoAES.shareInstance decryptDataL:dict[@"content"]];
         quoteDetailVc.quotedSenderName = dict[@"formName"];
         
@@ -331,7 +331,7 @@
     
     // 创建删除操作
     UIContextualAction *deleteAction = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleDestructive
-                                                                               title:NSLocalizedString(@"GroupCtr-yichu", @"")
+                                                                               title:NSLocalizedString(@"移除", @"")
                                                                              handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) {
         
         // 删除数据
@@ -391,7 +391,7 @@
 - (UIButton *)allBtn{
     if (!_allBtn) {
         _allBtn = [UIButton buttonWithType:UIButtonTypeCustom];
-        [_allBtn setTitle:NSLocalizedString(@"Favorites_type_all", @"") forState:UIControlStateNormal];
+        [_allBtn setTitle:NSLocalizedString(@"全部", @"") forState:UIControlStateNormal];
         [_allBtn setTitleColor:UIColor.whiteColor forState:UIControlStateNormal];
         [_allBtn setTitleColor:globalColor(GCTypeGreen) forState:UIControlStateSelected];
         _allBtn.titleLabel.font = [UIFont systemFontOfSize:14 weight:UIFontWeightRegular];
@@ -404,7 +404,7 @@
 - (UIButton *)textBtn{
     if (!_textBtn) {
         _textBtn = [UIButton buttonWithType:UIButtonTypeCustom];
-        [_textBtn setTitle:NSLocalizedString(@"Favorites_type_text", @"") forState:UIControlStateNormal];
+        [_textBtn setTitle:NSLocalizedString(@"文本", @"") forState:UIControlStateNormal];
         [_textBtn setTitleColor:UIColor.whiteColor forState:UIControlStateNormal];
         [_textBtn setTitleColor:globalColor(GCTypeGreen) forState:UIControlStateSelected];
         _textBtn.titleLabel.font = [UIFont systemFontOfSize:14 weight:UIFontWeightRegular];
@@ -416,7 +416,7 @@
 - (UIButton *)pictrueBtn{
     if (!_pictrueBtn) {
         _pictrueBtn = [UIButton buttonWithType:UIButtonTypeCustom];
-        [_pictrueBtn setTitle:NSLocalizedString(@"Favorites_type_pictrue", @"") forState:UIControlStateNormal];
+        [_pictrueBtn setTitle:NSLocalizedString(@"图片", @"") forState:UIControlStateNormal];
         [_pictrueBtn setTitleColor:UIColor.whiteColor forState:UIControlStateNormal];
         [_pictrueBtn setTitleColor:globalColor(GCTypeGreen) forState:UIControlStateSelected];
         _pictrueBtn.titleLabel.font = [UIFont systemFontOfSize:14 weight:UIFontWeightRegular];
@@ -428,7 +428,7 @@
 - (UIButton *)fileBtn{
     if (!_fileBtn) {
         _fileBtn = [UIButton buttonWithType:UIButtonTypeCustom];
-        [_fileBtn setTitle:NSLocalizedString(@"Favorites_type_file", @"") forState:UIControlStateNormal];
+        [_fileBtn setTitle:NSLocalizedString(@"文件", @"") forState:UIControlStateNormal];
         [_fileBtn setTitleColor:UIColor.whiteColor forState:UIControlStateNormal];
         [_fileBtn setTitleColor:globalColor(GCTypeGreen) forState:UIControlStateSelected];
         _fileBtn.titleLabel.font = [UIFont systemFontOfSize:14 weight:UIFontWeightRegular];
@@ -440,7 +440,7 @@
 - (UIButton *)audioBtn{
     if (!_audioBtn) {
         _audioBtn = [UIButton buttonWithType:UIButtonTypeCustom];
-        [_audioBtn setTitle:NSLocalizedString(@"Favorites_type_audio", @"") forState:UIControlStateNormal];
+        [_audioBtn setTitle:NSLocalizedString(@"语音", @"") forState:UIControlStateNormal];
         [_audioBtn setTitleColor:UIColor.whiteColor forState:UIControlStateNormal];
         [_audioBtn setTitleColor:globalColor(GCTypeGreen) forState:UIControlStateSelected];
         _audioBtn.titleLabel.font = [UIFont systemFontOfSize:14 weight:UIFontWeightRegular];

+ 1 - 1
ABtong/ABtong/Controller/mine/PersonalInfoController.h → ABtong/ABtong/ALLController/geren/PersonalInfoController.h

@@ -2,7 +2,7 @@
 //  PersonalInfoController.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <UIKit/UIKit.h>

+ 84 - 30
ABtong/ABtong/Controller/mine/PersonalInfoController.m → ABtong/ABtong/ALLController/geren/PersonalInfoController.m

@@ -2,14 +2,13 @@
 //  PersonalInfoController.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import "PersonalInfoController.h"
-
+#import "GDBManager.h"
 #import "UDManager.h"
 #import "UserNetApi.h"
-#import "GroupNetApi.h"
 
 @interface PersonalInfoController ()<UITextFieldDelegate,UINavigationControllerDelegate,UIImagePickerControllerDelegate>
 @property (nonatomic, strong) UIImageView * avatarImageView;
@@ -50,7 +49,7 @@
 #pragma mark UI
 - (void)configUI{
     [self setNavigationBarHidden:NO animated:YES];
-    [self setNavigationTitle:NSLocalizedString(@"userCenter-gerenxinx", @"")];
+    [self setNavigationTitle:NSLocalizedString(@"个人信息", @"")];
     // 设置导航栏背景色
     [self setNavigationBarTransparent:YES];
     [self setNavigationBarBackgroundColor:UIColor.clearColor];
@@ -63,7 +62,7 @@
     [self setBackButtonColor:[UIColor whiteColor]];
     self.view.backgroundColor = UIColor.blackColor;
     
-    UIImageView * bgImageView = [[UIImageView alloc] initWithImage:kImageMake(@"loginBG")];
+    UIImageView * bgImageView = [[UIImageView alloc] initWithImage:kImageMake(@"bgset")];
     [self.view addSubview:bgImageView];
     [bgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.right.top.bottom.mas_equalTo(0);
@@ -138,15 +137,58 @@
         make.right.mas_equalTo(-20);
         make.top.mas_equalTo(self.genderTextfield.mas_bottom).offset(30);
     }];
-    
-    [self.avatarImageView sd_setImageWithURL:getURL(self.userInfo[@"avatar"]) placeholderImage:kImageMake(@"Avatar")];
-    self.nameTextfield.text = self.userInfo[@"username"];
-    self.signTextfield.text = self.userInfo[@"name"];
-    self.emailTextfield.text = self.userInfo[@"email"];
-    self.mobileTextfield.text = self.userInfo[@"mobile"];
-    self.genderTextfield.text =  [self.userInfo[@"sex"] isEqualToString:@"0"] ? @"男": @"女";
     _genderLbl.alpha = 0;
     _genderTextfield.alpha = 0;
+    [self getUserinfo];
+}
+
+
+-(void)getUserinfo{
+    NSString *token = [UDManager.shareInstance getSDManager:gkeytoken];
+    if([token isKindOfClass:[NSString class]]&&token.length>10){
+        [UserNetApi getUserinfo:^(int code, NSDictionary * res) {
+            NSLog(@"%d", code);
+            NSNumber *gcode=res[@"code"];
+            NSDictionary *data=res[@"data"];
+            NSLog(@"%@", res);
+            if([gcode intValue]!=200){
+                NSLog(@"%@",res[@"msg"]);
+                [MBProgressHUD showWithText:@"登录异常,请重新登录"];
+                return;
+            }
+            NSDictionary *ps = @{@"avatar": data[@"avatar"]?:@"",
+                                 @"deptId": data[@"deptId"]?:@"",
+                                 //@"domainId":data[@"domainId"],
+                                 @"email":data[@"email"]?:@"",
+                                 @"id":data[@"id"]?:@"",
+                                 @"mobile":data[@"mobile"]?:@"",
+                                 @"name":data[@"name"]?:@"",
+                                 //@"platformType":data[@"platformType"]?:@"",
+                                 //@"registrationId":data[@"registrationId"]?:@"",
+                                 @"sex":data[@"sex"]?:@"",
+                                 //@"tgbotAdmin":data[@"tgbotAdmin"],
+                                 //@"tgbotName":data[@"tgbotName"],
+                                 //@"tgbotTk":data[@"tgbotTk"]?:@"",
+                                 @"username":data[@"username"]?:@"",
+                                 //@"uuid":data[@"uuid"],
+                                 //@"voipTk":data[@"voipTk"]?:@""
+                                };
+            if([gcode intValue]==200){
+                NSLog(@"ps:%@",ps);
+                NSLog(@"-userInfo:%@",self.userInfo);
+                self.userInfo=[ps mutableCopy];
+                [self.avatarImageView sd_setImageWithURL:getURL(self.userInfo[@"avatar"]) placeholderImage:kImageMake(@"Avatar")];
+                self.nameTextfield.text = self.userInfo[@"username"];
+                self.signTextfield.text = self.userInfo[@"name"];
+                self.emailTextfield.text = self.userInfo[@"email"];
+                self.mobileTextfield.text = self.userInfo[@"mobile"];
+                self.genderTextfield.text =  [self.userInfo[@"sex"] isEqualToString:@"0"] ? @"男": @"女";
+            }
+            
+        } fail:^(NSError * _Nonnull error) {
+            NSLog(@"%@", error);
+        }];
+    }
 }
 
 
@@ -163,10 +205,10 @@
 #pragma mark event
 - (void)saveButtonClicked{
     
-    if (self.mobileTextfield.text.length<5&&self.mobileTextfield.text.length>0) {
-        [MBProgressHUD showWithText:@"请输入有效的手机号"];
-        return;
-    }
+//    if (self.mobileTextfield.text.length<5&&self.mobileTextfield.text.length>0) {
+//        [MBProgressHUD showWithText:@"请输入有效的手机号"];
+//        return;
+//    }
     
     if (![self isValidEmail:self.emailTextfield.text]) {
         [MBProgressHUD showWithText:@"请输入有效的邮箱"];
@@ -201,7 +243,16 @@
                                      @"sex":[self.genderTextfield.text isEqualToString:@"男"]?@"0":@"1",
                                      @"username":self.userInfo[@"username"]?:@"",
                                     };
-                [UDManager.shareInstance setDDManager:ps key:dkuserinfo];
+                
+                NSDictionary *actuserInfo = [UDManager.shareInstance getDDManager:nkactuserInfo];
+                NSMutableDictionary *Dict = [NSMutableDictionary dictionaryWithDictionary:actuserInfo];
+                [Dict setObject:ps[@"id"]?:@"" forKey:@"userId"];
+                [Dict setObject:ps[@"name"]?:@"" forKey:@"name"];
+                [Dict setObject:ps[@"avatar"]?:@"" forKey:@"avatar"];
+                actuserInfo = [Dict copy];
+                [UDManager.shareInstance setDDManager:actuserInfo key:nkactuserInfo];
+                [GDBManager.shareInstance updataUserServer:actuserInfo succ:nil fail:nil];
+                
                 !self->_infoRefreshBlock ?: self->_infoRefreshBlock();
             }
         }
@@ -312,8 +363,13 @@
     
     NSString *fileName = [NSString stringWithFormat:@"%ld.png",(long)time];
     NSData *imageData = UIImagePNGRepresentation(image);
-    [GroupNetApi upLoaddataWToken:imageData fileName:fileName succ:^(int code, NSDictionary * res) {
+    [UserNetApi upLoaddataWToken:imageData fileName:fileName succ:^(int code, NSDictionary * res) {
         NSLog(@"res:%@",res);
+        NSString *strcode = res[@"code"];
+        if([strcode intValue]!=200){
+            [MBProgressHUD showWithText:@"上传失败"];
+            return;
+        }
         [self.avatarImageView sd_setImageWithURL:getURL(res[@"url"]) placeholderImage:kImageMake(@"Avatar")];
         [self.userInfo setObject:res[@"url"] forKey:@"avatar"];
     } fail:^(NSError * _Nonnull error) {
@@ -350,7 +406,7 @@
 - (UILabel *)nameLbl{
     if (!_nameLbl) {
         _nameLbl = [[UILabel alloc] init];
-        _nameLbl.text = NSLocalizedString(@"UserInfo_userName", @"");
+        _nameLbl.text = NSLocalizedString(@"用户名", @"");
         _nameLbl.textColor = UIColor.whiteColor;
         _nameLbl.font = [UIFont systemFontOfSize:16 weight:UIFontWeightRegular];
     }
@@ -360,7 +416,7 @@
 - (UILabel *)signLbl{
     if (!_signLbl) {
         _signLbl = [[UILabel alloc] init];
-        _signLbl.text = NSLocalizedString(@"UserInfo_nickName", @"");
+        _signLbl.text = NSLocalizedString(@"昵称", @"");
         _signLbl.textColor = UIColor.whiteColor;
         _signLbl.font = [UIFont systemFontOfSize:16 weight:UIFontWeightRegular];
     }
@@ -370,7 +426,7 @@
 - (UILabel *)emailLbl{
     if (!_emailLbl) {
         _emailLbl = [[UILabel alloc] init];
-        _emailLbl.text = NSLocalizedString(@"UserInfo_email", @"");
+        _emailLbl.text = NSLocalizedString(@"邮箱", @"");
         _emailLbl.textColor = UIColor.whiteColor;
         _emailLbl.font = SYSFONT(16);
     }
@@ -380,7 +436,7 @@
 - (UILabel *)mobileLbl{
     if (!_mobileLbl) {
         _mobileLbl = [[UILabel alloc] init];
-        _mobileLbl.text = NSLocalizedString(@"UserInfo_phoneNumber", @"");
+        _mobileLbl.text = NSLocalizedString(@"拨号号码", @"");
         _mobileLbl.textColor = UIColor.whiteColor;
         _mobileLbl.font = [UIFont systemFontOfSize:16 weight:UIFontWeightRegular];
     }
@@ -390,7 +446,7 @@
 - (UILabel *)genderLbl{
     if (!_genderLbl) {
         _genderLbl = [[UILabel alloc] init];
-        _genderLbl.text = NSLocalizedString(@"UserInfo_gender", @"");
+        _genderLbl.text = NSLocalizedString(@"性别", @"");
         _genderLbl.textColor = UIColor.whiteColor;
         _genderLbl.font = [UIFont systemFontOfSize:16 weight:UIFontWeightRegular];
     }
@@ -461,10 +517,8 @@
         _mobileTextfield = [[UITextField alloc] init];
         _mobileTextfield.textColor = UIColor.whiteColor;
         _mobileTextfield.borderStyle = UITextBorderStyleNone;
-        _mobileTextfield.layer.borderWidth = 1.f;
-        _mobileTextfield.layer.borderColor = UIColor.lightGrayColor.CGColor;
-        _mobileTextfield.layer.cornerRadius = 5.f;
         _mobileTextfield.delegate = self;
+        _mobileTextfield.enabled = NO;
         _mobileTextfield.keyboardType = UIKeyboardTypePhonePad;
         _mobileTextfield.leftViewMode = UITextFieldViewModeAlways;
         UIView * leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 15, 50)];
@@ -492,9 +546,9 @@
 - (UIButton *)saveBtn{
     if (!_saveBtn) {
         _saveBtn = [UIButton buttonWithType:UIButtonTypeCustom];
-        [_saveBtn setTitle:NSLocalizedString(@"NGroupCtr-baocun", @"") forState:UIControlStateNormal];
-        [_saveBtn setBackgroundColor:globalColor(GCTypeGreen)];
-        [_saveBtn setTitleColor:UIColor.blackColor forState:UIControlStateNormal];
+        [_saveBtn setTitle:NSLocalizedString(@"保存", @"") forState:UIControlStateNormal];
+        [_saveBtn setBackgroundColor:globalColor(GCTypeBlued)];
+        [_saveBtn setTitleColor:UIColor.whiteColor forState:UIControlStateNormal];
         _saveBtn.titleLabel.font = [UIFont systemFontOfSize:16 weight:UIFontWeightMedium];
         _saveBtn.layer.cornerRadius = 5.f;
         _saveBtn.layer.masksToBounds = YES;
@@ -505,7 +559,7 @@
 
 - (NSMutableDictionary *)userInfo{
     if (!_userInfo) {
-        _userInfo = [NSMutableDictionary dictionaryWithDictionary:[UDManager.shareInstance getDDManager:dkuserinfo]];
+        _userInfo = [NSMutableDictionary dictionaryWithDictionary:[UDManager.shareInstance getDDManager:nkactuserInfo]];
     }
     return _userInfo;
 }

+ 1 - 1
ABtong/ABtong/Controller/mine/SecurityController.h → ABtong/ABtong/ALLController/geren/SecurityController.h

@@ -2,7 +2,7 @@
 //  SecurityController.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <UIKit/UIKit.h>

+ 20 - 19
ABtong/ABtong/Controller/mine/SecurityController.m → ABtong/ABtong/ALLController/geren/SecurityController.m

@@ -2,7 +2,7 @@
 //  SecurityController.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import "SecurityController.h"
@@ -33,7 +33,7 @@
 
 - (void)configUI{
     [self setNavigationBarHidden:NO animated:YES];
-    [self setNavigationTitle:NSLocalizedString(@"userCenter-zhanghaoaq", @"")];
+    [self setNavigationTitle:NSLocalizedString(@"账号安全", @"")];
         
     // 设置导航栏背景色
     [self setNavigationBarTransparent:YES];
@@ -42,7 +42,7 @@
     // 设置标题颜色和字体
     [self setNavigationTitleColor:[UIColor whiteColor] font:[UIFont boldSystemFontOfSize:16]];
     
-    UIImageView * bgImageView = [[UIImageView alloc] initWithImage:kImageMake(@"loginBG")];
+    UIImageView * bgImageView = [[UIImageView alloc] initWithImage:kImageMake(@"bgset")];
     [self.view addSubview:bgImageView];
     [bgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.right.top.bottom.mas_equalTo(0);
@@ -68,31 +68,32 @@
     
     
     NSDictionary *d4 =@{
-        @"name":@"userCenter-xiugaimm",
-        @"image":@"wxiugmm",
+        @"name":@"修改密码",
+        @"image":@"xiugaimm",
     };
     NSDictionary *d5 =@{
-        @"name":@"userCenter-anquanmm",
-        @"image":@"wanquan",
+        @"name":@"安全密码",
+        @"image":@"anquanmm",
     };
     NSDictionary *d6 =@{
-        @"name":@"userCenter-yingysm",
-        @"image":@"wyingys",
+        @"name":@"应用锁密码",
+        @"image":@"wyyshuo",
     };
     NSDictionary *d12 =@{
-        @"name":@"userCenter-chongzhimm",
-        @"image":@"wchongzmm",
+        @"name":@"重置密码",
+        @"image":@"chzhimm",
     };
     NSDictionary *d13 =@{
-        @"name":@"userCenter-zhuxiaozh",
-        @"image":@"wzhuxiaozz",
+        @"name":@"注销账号",
+        @"image":@"zhuxzhao",
     };
     
     _cellDatas = [[NSMutableArray alloc] init];
 
-    [_cellDatas addObject:d4];
+    
     [_cellDatas addObject:d6];
     [_cellDatas addObject:d5];
+    [_cellDatas addObject:d4];
     [_cellDatas addObject:d12];
     [_cellDatas addObject:d13];
     
@@ -119,7 +120,7 @@
 }
 
 - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
-    if(section==1||section==2){
+    if(section==0||section==1){
         return 60;
     }
     return 5.f;
@@ -129,23 +130,23 @@
     
     UIView *view =[UIView new];
     
-    if(section==1){
+    if(section==0){
         UILabel *notlb = [[UILabel alloc] init];
         notlb.frame = CGRectMake(0, 0, tableView.frame.size.width, 60);
         [view addSubview:notlb];
         notlb.font = [UIFont systemFontOfSize:15];
         notlb.textColor = [UIColor whiteColor];
         notlb.numberOfLines=2;
-        notlb.text = NSLocalizedString(@"APPnote-yingyongsuo", @"");
+        notlb.text = NSLocalizedString(@"应用锁密码说明", @"");
     }
-    if(section==2){
+    if(section==1){
         UILabel *notlb = [[UILabel alloc] init];
         notlb.frame = CGRectMake(0, 0, tableView.frame.size.width, 60);
         [view addSubview:notlb];
         notlb.font = [UIFont systemFontOfSize:15];
         notlb.textColor = [UIColor whiteColor];
         notlb.numberOfLines=2;
-        notlb.text = NSLocalizedString(@"APPnote-anquanmim", @"");
+        notlb.text = NSLocalizedString(@"安全密码说明", @"");
     }
     
     return view;

+ 1 - 1
ABtong/ABtong/Controller/mine/SecurityPasswordController.h → ABtong/ABtong/ALLController/geren/SecurityPasswordController.h

@@ -2,7 +2,7 @@
 //  SecurityPasswordController.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <UIKit/UIKit.h>

+ 11 - 11
ABtong/ABtong/Controller/mine/SecurityPasswordController.m → ABtong/ABtong/ALLController/geren/SecurityPasswordController.m

@@ -2,7 +2,7 @@
 //  SecurityPasswordController.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 #import "SecurityPasswordController.h"
 #import "APPLocker.h"
@@ -32,7 +32,7 @@
 }
 
 - (void)configUI{
-    [self setNavigationTitle:NSLocalizedString(@"userCenter-anquanmm", @"")];
+    [self setNavigationTitle:NSLocalizedString(@"安全密码", @"")];
     // 设置导航栏背景色
     [self setNavigationBarBackgroundColor:UIColor.clearColor];
     
@@ -43,7 +43,7 @@
     [self setBackButtonTitle:@""];
     [self setBackButtonColor:[UIColor whiteColor]];
     
-    UIImageView * bgImageView = [[UIImageView alloc] initWithImage:kImageMake(@"loginBG")];
+    UIImageView * bgImageView = [[UIImageView alloc] initWithImage:kImageMake(@"bgset")];
     [self.view addSubview:bgImageView];
     [bgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.right.top.bottom.mas_equalTo(0);
@@ -88,17 +88,17 @@
     NSString *password = self.passwordTextfield.text;
     NSString *confirmPassword = self.confirmTextfield.text;
     if (password.length == 0) {
-        [MBProgressHUD showWithText:NSLocalizedString(@"Security_confirmPassword_alter", @"")];
+        [MBProgressHUD showWithText:NSLocalizedString(@"再输入一次", @"")];
         return;
     }
     
     if (confirmPassword.length == 0) {
-        [MBProgressHUD showWithText:NSLocalizedString(@"Security_newPassword_alter", @"")];
+        [MBProgressHUD showWithText:NSLocalizedString(@"请输入新密码", @"")];
         return;
     }
     
     if (![password isEqualToString:confirmPassword]) {
-        [MBProgressHUD showWithText:NSLocalizedString(@"Security_passwordDefferent", @"")];
+        [MBProgressHUD showWithText:NSLocalizedString(@"密码不一致", @"")];
         return;
     }
     
@@ -109,18 +109,18 @@
     success = [[APPLocker sharedLocker] verifyPassword:password];
     if (success) {
         NSLog(@"验证安全密码不能跟应用锁密码一致");
-        [MBProgressHUD showWithText:NSLocalizedString(@"Security_lockf-same", @"")];
+        [MBProgressHUD showWithText:NSLocalizedString(@"不能使用同一个", @"")];
         return;
     }
     
     success = [APPLocker.sharedLocker setSecurityPassword:password error:&error];
     
     if (success) {
-        [MBProgressHUD showWithText:NSLocalizedString(@"Common_successfully_set", @"")];
+        [MBProgressHUD showWithText:NSLocalizedString(@"设置成功", @"")];
         [self.navigationController popViewControllerAnimated:YES];
     }
     else{
-        [MBProgressHUD showWithText:NSLocalizedString(@"AppLock_fail", @"")];
+        [MBProgressHUD showWithText:NSLocalizedString(@"操作失败", @"")];
         
     }
 }
@@ -195,8 +195,8 @@
     if (!_saveBtn) {
         _saveBtn = [UIButton buttonWithType:UIButtonTypeCustom];
         [_saveBtn setTitle:@"保存" forState:UIControlStateNormal];
-        [_saveBtn setBackgroundColor:globalColor(GCTypeGreen)];
-        [_saveBtn setTitleColor:UIColor.blackColor forState:UIControlStateNormal];
+        [_saveBtn setBackgroundColor:globalColor(GCTypeBlued)];
+        [_saveBtn setTitleColor:UIColor.whiteColor forState:UIControlStateNormal];
         _saveBtn.titleLabel.font = [UIFont systemFontOfSize:16 weight:UIFontWeightMedium];
         _saveBtn.layer.cornerRadius = 5.f;
         _saveBtn.layer.masksToBounds = YES;

+ 1 - 1
ABtong/ABtong/Controller/mine/UserConterController.h → ABtong/ABtong/ALLController/geren/UserConterController.h

@@ -2,7 +2,7 @@
 //  UserConterController.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #ifndef UserConterController_h

+ 93 - 42
ABtong/ABtong/Controller/mine/UserConterController.m → ABtong/ABtong/ALLController/geren/UserConterController.m

@@ -2,7 +2,7 @@
 //  UserConterController.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <Foundation/Foundation.h>
@@ -20,6 +20,8 @@
 #import "FilePreviewer.h"
 #import "GDBManager.h"
 #import <AdSupport/AdSupport.h>
+#import "GLoginController.h"
+#import "LoginStateManager.h"
 
 @interface UserConterController()<UITableViewDelegate,UITableViewDataSource>
 @property (weak, nonatomic) IBOutlet UIImageView *avatar;
@@ -43,11 +45,20 @@
     
     [self initCellData];
     [self initsubView];
-    
+    if(!LoginStateManager.sharedManager.isLoggedIn){
+        [self gotoLoginView];
+        return;
+    }
 }
 
 - (void)viewWillAppear:(BOOL)animated{
+    [super viewWillAppear:animated];
     [self setNavigationBarHidden:YES animated:YES];
+    NSDictionary *userinfo = [UDManager.shareInstance getDDManager:nkactuserInfo];
+    _nameLb.text = userinfo[@"name"];
+    NSURL *av = [NSURL URLWithString:userinfo[@"avatar"]];
+    [_avatar sd_setImageWithURL:av placeholderImage:[UIImage imageNamed:@"Avatar"]];
+
 }
 
 -(void)initsubView{
@@ -57,7 +68,7 @@
     _tableView.backgroundColor = [UIColor clearColor];
     _tableView.delegate =self;
     _tableView.dataSource = self;
-    NSDictionary *userinfo = [UDManager.shareInstance getDDManager:dkuserinfo];
+    NSDictionary *userinfo = [UDManager.shareInstance getDDManager:nkactuserInfo];
     _nameLb.text = userinfo[@"name"];
     _qianmLb.alpha = 0;
     NSURL *av = [NSURL URLWithString:userinfo[@"avatar"]];
@@ -71,44 +82,44 @@
 -(void)initCellData{
     
     NSDictionary *d1 =@{
-        @"name":@"userCenter-gerenxinx",
-        @"image":@"wgerenxx",
+        @"name":@"个人信息",
+        @"image":@"grxi",
     };
     NSDictionary *d2 =@{
-        @"name":@"userCenter-qiehuanyy",
+        @"name":@"切换语言",
         @"image":@"wqiehyy",
     };
     NSDictionary *d3 =@{
-        @"name":@"userCenter-zitidax",
+        @"name":@"字体大小",
         @"image":@"wzitidx",
     };
     NSDictionary *d4 =@{
-        @"name":@"userCenter-zhanghaoaq",
-        @"image":@"wzitidx",
+        @"name":@"账号安全",
+        @"image":@"zhaq",
     };
     NSDictionary *d7 =@{
-        @"name":@"userCenter-shoucjia",
-        @"image":@"wscjia",
+        @"name":@"收藏夹",
+        @"image":@"shcj",
     };
     NSDictionary *d8 =@{
-        @"name":@"userCenter-heimdan",
-        @"image":@"wheimd",
+        @"name":@"黑名单",
+        @"image":@"hmd",
     };
     NSDictionary *d9 =@{
-        @"name":@"userCenter-liaotsz",
-        @"image":@"wliaotsz",
+        @"name":@"聊天设置",
+        @"image":@"ltsz",
     };
     NSDictionary *d10 =@{
-        @"name":@"userCenter-yinsizhc",
-        @"image":@"wyinsisz",
+        @"name":@"隐私政策",
+        @"image":@"yszc",
     };
     NSDictionary *d11 =@{
-        @"name":@"userCenter-tianjiabmd",
+        @"name":@"添加白名单",
         @"image":@"wbaimdan",
     };
     
     NSDictionary *d14 =@{
-        @"name":@"userCenter-tuichudl",
+        @"name":@"退出登录",
         @"image":@"",
     };
     
@@ -155,13 +166,27 @@
     NSString *title = NSLocalizedString(time[@"name"], @"");
     
     if(section>=_cellDatas.count-2){
-        CGRect ctfrm = cell.contentView.frame;
-        UILabel *titleLb = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, ctfrm.size.width, 52)];
-        titleLb.text =title;
-        titleLb.textColor = [UIColor whiteColor];
-        titleLb.textAlignment = NSTextAlignmentCenter;
-        titleLb.font = [UIFont systemFontOfSize:17.0f];
-        [cell.contentView addSubview:titleLb];
+        if(section==_cellDatas.count-2){
+            CGRect ctfrm = cell.contentView.frame;
+            UILabel *titleLb = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, ctfrm.size.width, 52)];
+            titleLb.text =title;
+            titleLb.textColor = [UIColor whiteColor];
+            titleLb.textAlignment = NSTextAlignmentCenter;
+            titleLb.font = [UIFont systemFontOfSize:20.0f];
+            [cell.contentView addSubview:titleLb];
+            cell.contentView.layer.backgroundColor = [UIColor redColor].CGColor;
+            cell.contentView.layer.cornerRadius = 8.0f; // 可选,设置圆角
+        }
+        else{
+            CGRect ctfrm = cell.contentView.frame;
+            UILabel *titleLb = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, ctfrm.size.width, 52)];
+            titleLb.text =title;
+            titleLb.textColor = [UIColor whiteColor];
+            titleLb.textAlignment = NSTextAlignmentCenter;
+            titleLb.font = [UIFont systemFontOfSize:17.0f];
+            [cell.contentView addSubview:titleLb];
+        }
+        
     }
     else{
         cell.imageView.image = [UIImage imageNamed:time[@"image"]];
@@ -171,11 +196,14 @@
         CGRect ctfrm = cell.contentView.frame;
         right.frame = CGRectMake(ctfrm.size.width-30, 21, 20, 20);
         [cell.contentView addSubview:right];
+        cell.contentView.layer.backgroundColor = globalColor(GCTycellbg).CGColor;
+        cell.contentView.layer.cornerRadius = 8.0f; // 可选,设置圆角
     }
     
-    cell.contentView.layer.borderWidth = 0.5f;
-    cell.contentView.layer.borderColor = [UIColor lightGrayColor].CGColor; //globalColor(GCTypeGreen);
-    cell.contentView.layer.cornerRadius = 8.0f; // 可选,设置圆角
+//    cell.contentView.layer.borderWidth = 0.5f;
+//    cell.contentView.layer.borderColor = [UIColor lightGrayColor].CGColor; //globalColor(GCTypeGreen);
+    
+    
     return cell;
 
 }
@@ -184,18 +212,19 @@
         [self tuichudengl];
     }
     if (indexPath.section == 0) {
-        NSLog(@"111111---------");
+        if(!LoginStateManager.sharedManager.isLoggedIn){
+            [self gotoLoginView];
+            return;
+        }
         PersonalInfoController * personalInfoVc = [[PersonalInfoController alloc] init];
         personalInfoVc.hidesBottomBarWhenPushed = YES;
-       
-//        personalInfoVc.infoRefreshBlock = ^{
-//            NSDictionary *userinfo = [UDManager.shareInstance getDDManager:dkuserinfo];
-//            weakself.nameLb.text = userinfo[@"name"];
-//            [weakself.avatar sd_setImageWithURL:getURL(userinfo[@"avatar"]) placeholderImage:kImageMake(@"Avatar")];
-//        };
         [self.navigationController pushViewController:personalInfoVc animated:YES];
     }
     if(indexPath.section==1){
+        if(!LoginStateManager.sharedManager.isLoggedIn){
+            [self gotoLoginView];
+            return;
+        }
         SecurityController * securityVc = [[SecurityController alloc] init];
         securityVc.hidesBottomBarWhenPushed = YES;
         [self.navigationController pushViewController:securityVc animated:YES];
@@ -203,18 +232,30 @@
     }
     
     if (indexPath.section == 2) {
+        if(!LoginStateManager.sharedManager.isLoggedIn){
+            [self gotoLoginView];
+            return;
+        }
         FavoritesController * favoritesVc = [[FavoritesController alloc] init];
         favoritesVc.hidesBottomBarWhenPushed = YES;
         [self.navigationController pushViewController:favoritesVc animated:YES];
     }
     
     if (indexPath.section == 3) {
+        if(!LoginStateManager.sharedManager.isLoggedIn){
+            [self gotoLoginView];
+            return;
+        }
         BlackListController * blackListVc = [[BlackListController alloc] init];
         blackListVc.hidesBottomBarWhenPushed = YES;
         [self.navigationController pushViewController:blackListVc animated:YES];
     }
     
     if (indexPath.section == 4) {
+        if(!LoginStateManager.sharedManager.isLoggedIn){
+            [self gotoLoginView];
+            return;
+        }
         ChatSettingController * chatSettingVc = [[ChatSettingController alloc] init];
         chatSettingVc.hidesBottomBarWhenPushed = YES;
         [self.navigationController pushViewController:chatSettingVc animated:YES];
@@ -239,17 +280,13 @@
 
 -(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
     CGFloat height =10.0;
-    if(section==1){
-        height =0.0;
-    }
+    
     return height;
 }
 
 -(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{
     CGFloat height =10.0;
-    if(section==1){
-        height =0.0;
-    }
+    
     UIView *view =[[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, height)];
     view.backgroundColor = [UIColor clearColor];
     return view;
@@ -258,6 +295,10 @@
 #pragma mark allactions
 
 -(void)tuichudengl{
+    if(!LoginStateManager.sharedManager.isLoggedIn){
+        [self gotoLoginView];
+        return;
+    }
     UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"确认"
                                                                   message:@"确定要退出登录吗?"
                                                            preferredStyle:UIAlertControllerStyleAlert];
@@ -280,6 +321,7 @@
     [self presentViewController:alert animated:YES completion:nil];
 }
 -(void)logoutAccaut{
+    [UDManager.shareInstance setSDManager:@"" key:nkhttphostName];
     [UserNetApi logout:nil succ:^(int code, NSDictionary * res) {
         NSLog(@"res:%@",res);
         [[NSNotificationCenter defaultCenter] postNotificationName: nkonLogoutSucc object:nil];
@@ -288,6 +330,15 @@
     }];
 }
 
+-(void)gotoLoginView{
+    [UDManager.shareInstance setSDManager:@"" key:nkhttphostName];
+    UIStoryboard *board = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
+    GLoginController *login = [board instantiateViewControllerWithIdentifier:@"LoginController"];
+    UINavigationController *uiNavC = [[UINavigationController alloc] initWithRootViewController:login];
+    uiNavC.modalPresentationStyle = UIModalPresentationFullScreen;
+    [self presentViewController:uiNavC animated:YES completion:nil];
+}
+
 #pragma mark statusBar
 - (UIStatusBarStyle)preferredStatusBarStyle{
     return UIStatusBarStyleLightContent;

+ 1 - 1
ABtong/ABtong/Controller/mine/ZhanghaoCntroller.h → ABtong/ABtong/ALLController/geren/ZhanghaoCntroller.h

@@ -2,7 +2,7 @@
 //  ZhanghaoCntroller.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #ifndef ZhanghaoCntroller_h

+ 11 - 11
ABtong/ABtong/Controller/mine/ZhanghaoCntroller.m → ABtong/ABtong/ALLController/geren/ZhanghaoCntroller.m

@@ -2,7 +2,7 @@
 //  ZhanghaoCntroller.m
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <Foundation/Foundation.h>
@@ -42,24 +42,24 @@
     
     
     NSDictionary *d4 =@{
-        @"name":@"userCenter-xiugaimm",
-        @"image":@"wxiugmm",
+        @"name":@"修改密码",
+        @"image":@"xiugaimm",
     };
     NSDictionary *d5 =@{
-        @"name":@"userCenter-anquanmm",
-        @"image":@"wanquan",
+        @"name":@"安全密码",
+        @"image":@"anquanmm",
     };
     NSDictionary *d6 =@{
-        @"name":@"userCenter-yingysm",
-        @"image":@"wyingys",
+        @"name":@"应用锁密码",
+        @"image":@"wyyshuo",
     };
     NSDictionary *d12 =@{
-        @"name":@"userCenter-chongzhimm",
-        @"image":@"wchongzmm",
+        @"name":@"重置密码",
+        @"image":@"chzhimm",
     };
     NSDictionary *d13 =@{
-        @"name":@"userCenter-zhuxiaozh",
-        @"image":@"wzhuxiaozz",
+        @"name":@"注销账号",
+        @"image":@"zhuxzhao",
     };
     
     _cellDatas = [[NSMutableArray alloc] init];

+ 1 - 1
ABtong/ABtong/Controller/mine/favoritesCells/FavoritesAudioCell.h → ABtong/ABtong/ALLController/geren/favoritesCells/FavoritesAudioCell.h

@@ -2,7 +2,7 @@
 //  FavoritesAudioCell.h
 //  ABtong
 //
-//  Created by gan on 2025/7/28.
+//  Created by qin on 2025/7/28.
 //
 
 #import <UIKit/UIKit.h>

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно