فهرست منبع

AI Stroe 一级页面改版

100Years 3 هفته پیش
والد
کامیت
f049ddd138
38فایلهای تغییر یافته به همراه262 افزوده شده و 143 حذف شده
  1. 22 0
      AIEmoji/Assets.xcassets/AIList/aiList_MotherDay.imageset/Contents.json
  2. BIN
      AIEmoji/Assets.xcassets/AIList/aiList_MotherDay.imageset/aiList_MotherDay@2x.png
  3. BIN
      AIEmoji/Assets.xcassets/AIList/aiList_MotherDay.imageset/aiList_MotherDay@3x.png
  4. 2 2
      AIEmoji/Assets.xcassets/AIList/aiList_aiChat.imageset/Contents.json
  5. BIN
      AIEmoji/Assets.xcassets/AIList/aiList_aiChat.imageset/aiList_aiChat@2x.png
  6. BIN
      AIEmoji/Assets.xcassets/AIList/aiList_aiChat.imageset/aiList_aiChat@3x.png
  7. 22 0
      AIEmoji/Assets.xcassets/AIList/aiList_catTohuman.imageset/Contents.json
  8. BIN
      AIEmoji/Assets.xcassets/AIList/aiList_catTohuman.imageset/aiList_catTohuman@2x.png
  9. BIN
      AIEmoji/Assets.xcassets/AIList/aiList_catTohuman.imageset/aiList_catTohuman@3x.png
  10. BIN
      AIEmoji/Assets.xcassets/AIList/aiList_emote.imageset/aiList_emote@2x.png
  11. BIN
      AIEmoji/Assets.xcassets/AIList/aiList_emote.imageset/aiList_emote@3x.png
  12. BIN
      AIEmoji/Assets.xcassets/AIList/aiList_hair.imageset/aiList_hair@2x.png
  13. BIN
      AIEmoji/Assets.xcassets/AIList/aiList_hair.imageset/aiList_hair@3x.png
  14. BIN
      AIEmoji/Assets.xcassets/AIList/aiList_hairColor.imageset/aiList_hairColor@2x.png
  15. BIN
      AIEmoji/Assets.xcassets/AIList/aiList_hairColor.imageset/aiList_hairColor@3x.png
  16. BIN
      AIEmoji/Assets.xcassets/AIList/aiList_livePhoto.imageset/aiList_livePhoto@2x.png
  17. BIN
      AIEmoji/Assets.xcassets/AIList/aiList_livePhoto.imageset/aiList_livePhoto@3x.png
  18. BIN
      AIEmoji/Assets.xcassets/AIList/aiList_oldPeople.imageset/aiList_oldPeople@2x.png
  19. BIN
      AIEmoji/Assets.xcassets/AIList/aiList_oldPeople.imageset/aiList_oldPeople@3x.png
  20. BIN
      AIEmoji/Assets.xcassets/AIList/aiList_photoExpand.imageset/aiList_photoExpand@2x.png
  21. BIN
      AIEmoji/Assets.xcassets/AIList/aiList_photoExpand.imageset/aiList_photoExpand@3x.png
  22. BIN
      AIEmoji/Assets.xcassets/AIList/aiList_quality.imageset/aiList_quality@2x.png
  23. BIN
      AIEmoji/Assets.xcassets/AIList/aiList_quality.imageset/aiList_quality@3x.png
  24. BIN
      AIEmoji/Assets.xcassets/AIList/aiList_restOldPhoto.imageset/aiList_restOldPhoto@2x.png
  25. BIN
      AIEmoji/Assets.xcassets/AIList/aiList_restOldPhoto.imageset/aiList_restOldPhoto@3x.png
  26. BIN
      AIEmoji/Assets.xcassets/AIList/aiList_ttp.imageset/aiList_ttp@2x.png
  27. BIN
      AIEmoji/Assets.xcassets/AIList/aiList_ttp.imageset/aiList_ttp@3x.png
  28. BIN
      AIEmoji/Assets.xcassets/AIList/ailist_child.imageset/ailist_child@2x.png
  29. BIN
      AIEmoji/Assets.xcassets/AIList/ailist_child.imageset/ailist_child@3x.png
  30. BIN
      AIEmoji/Assets.xcassets/AIList/ailist_eyeOpen.imageset/ailist_eyeOpen@2x.png
  31. BIN
      AIEmoji/Assets.xcassets/AIList/ailist_eyeOpen.imageset/ailist_eyeOpen@3x.png
  32. BIN
      AIEmoji/Assets.xcassets/AIList/ailist_pretty.imageset/ailist_pretty@2x.png
  33. BIN
      AIEmoji/Assets.xcassets/AIList/ailist_pretty.imageset/ailist_pretty@3x.png
  34. 18 9
      AIEmoji/Business/AIChat/TSChatViewController/TSChatViewController/TSChatViewController+NaviBar.swift
  35. 9 0
      AIEmoji/Business/AIChat/TSChatViewController/TSChatViewController/TSChatViewController.swift
  36. 1 0
      AIEmoji/Business/AIChat/TSChatViewController/ViewModel/TSAIChatVM.swift
  37. 60 47
      AIEmoji/Business/TSAILIstVC/TSAILIstVC/TSAILIstCell.swift
  38. 128 85
      AIEmoji/Business/TSAILIstVC/TSAILIstVC/TSAILIstVC.swift

+ 22 - 0
AIEmoji/Assets.xcassets/AIList/aiList_MotherDay.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "aiList_MotherDay@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "aiList_MotherDay@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
AIEmoji/Assets.xcassets/AIList/aiList_MotherDay.imageset/aiList_MotherDay@2x.png


BIN
AIEmoji/Assets.xcassets/AIList/aiList_MotherDay.imageset/aiList_MotherDay@3x.png


+ 2 - 2
AIEmoji/Assets.xcassets/AIList/aiList_ttp.imageset/Contents.json → AIEmoji/Assets.xcassets/AIList/aiList_aiChat.imageset/Contents.json

@@ -5,12 +5,12 @@
       "scale" : "1x"
     },
     {
-      "filename" : "aiList_ttp@2x.png",
+      "filename" : "aiList_aiChat@2x.png",
       "idiom" : "universal",
       "scale" : "2x"
     },
     {
-      "filename" : "aiList_ttp@3x.png",
+      "filename" : "aiList_aiChat@3x.png",
       "idiom" : "universal",
       "scale" : "3x"
     }

BIN
AIEmoji/Assets.xcassets/AIList/aiList_aiChat.imageset/aiList_aiChat@2x.png


BIN
AIEmoji/Assets.xcassets/AIList/aiList_aiChat.imageset/aiList_aiChat@3x.png


+ 22 - 0
AIEmoji/Assets.xcassets/AIList/aiList_catTohuman.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "aiList_catTohuman@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "aiList_catTohuman@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
AIEmoji/Assets.xcassets/AIList/aiList_catTohuman.imageset/aiList_catTohuman@2x.png


BIN
AIEmoji/Assets.xcassets/AIList/aiList_catTohuman.imageset/aiList_catTohuman@3x.png


BIN
AIEmoji/Assets.xcassets/AIList/aiList_emote.imageset/aiList_emote@2x.png


BIN
AIEmoji/Assets.xcassets/AIList/aiList_emote.imageset/aiList_emote@3x.png


BIN
AIEmoji/Assets.xcassets/AIList/aiList_hair.imageset/aiList_hair@2x.png


BIN
AIEmoji/Assets.xcassets/AIList/aiList_hair.imageset/aiList_hair@3x.png


BIN
AIEmoji/Assets.xcassets/AIList/aiList_hairColor.imageset/aiList_hairColor@2x.png


BIN
AIEmoji/Assets.xcassets/AIList/aiList_hairColor.imageset/aiList_hairColor@3x.png


BIN
AIEmoji/Assets.xcassets/AIList/aiList_livePhoto.imageset/aiList_livePhoto@2x.png


BIN
AIEmoji/Assets.xcassets/AIList/aiList_livePhoto.imageset/aiList_livePhoto@3x.png


BIN
AIEmoji/Assets.xcassets/AIList/aiList_oldPeople.imageset/aiList_oldPeople@2x.png


BIN
AIEmoji/Assets.xcassets/AIList/aiList_oldPeople.imageset/aiList_oldPeople@3x.png


BIN
AIEmoji/Assets.xcassets/AIList/aiList_photoExpand.imageset/aiList_photoExpand@2x.png


BIN
AIEmoji/Assets.xcassets/AIList/aiList_photoExpand.imageset/aiList_photoExpand@3x.png


BIN
AIEmoji/Assets.xcassets/AIList/aiList_quality.imageset/aiList_quality@2x.png


BIN
AIEmoji/Assets.xcassets/AIList/aiList_quality.imageset/aiList_quality@3x.png


BIN
AIEmoji/Assets.xcassets/AIList/aiList_restOldPhoto.imageset/aiList_restOldPhoto@2x.png


BIN
AIEmoji/Assets.xcassets/AIList/aiList_restOldPhoto.imageset/aiList_restOldPhoto@3x.png


BIN
AIEmoji/Assets.xcassets/AIList/aiList_ttp.imageset/aiList_ttp@2x.png


BIN
AIEmoji/Assets.xcassets/AIList/aiList_ttp.imageset/aiList_ttp@3x.png


BIN
AIEmoji/Assets.xcassets/AIList/ailist_child.imageset/ailist_child@2x.png


BIN
AIEmoji/Assets.xcassets/AIList/ailist_child.imageset/ailist_child@3x.png


BIN
AIEmoji/Assets.xcassets/AIList/ailist_eyeOpen.imageset/ailist_eyeOpen@2x.png


BIN
AIEmoji/Assets.xcassets/AIList/ailist_eyeOpen.imageset/ailist_eyeOpen@3x.png


BIN
AIEmoji/Assets.xcassets/AIList/ailist_pretty.imageset/ailist_pretty@2x.png


BIN
AIEmoji/Assets.xcassets/AIList/ailist_pretty.imageset/ailist_pretty@3x.png


+ 18 - 9
AIEmoji/Business/AIChat/TSChatViewController/TSChatViewController/TSChatViewController+NaviBar.swift

@@ -53,9 +53,7 @@ extension TSChatViewController {
         
         let historyBtn = UIButton.createButton(image: UIImage(named: "aichat_history")) { [weak self]  in
             guard let self = self else { return }
-            let historyVC = TSAIChatHistoryVC()
-            historyVC.hidesBottomBarWhenPushed = true
-            navigationController?.pushViewController(historyVC, animated: true)
+            clickHistory()
         }
         navBarView.barView.addSubview(historyBtn)
         historyBtn.snp.makeConstraints { make in
@@ -132,15 +130,21 @@ extension TSChatViewController {
             make.height.equalTo(k_Nav_Height)
         }
         
-        if viewModel.uiStyle == .history {
-            addNormalNavBarView()
-            setPageTitle("History".localized)
-            _ = setNavigationItem("", imageName: "delete_white", direction: .right, action: #selector(clickDelete))
-        }else{
+        switch viewModel.uiStyle {
+        case .chat:
             navBarContentView.addSubview(navBarView)
             navBarView.snp.makeConstraints { make in
                 make.edges.equalToSuperview()
             }
+        case .history:
+            addNormalNavBarView()
+            setPageTitle("History".localized)
+            _ = setNavigationItem("", imageName: "delete_white", direction: .right, action: #selector(clickDelete))
+        case .perfectHint:
+            addNormalNavBarView()
+            setPageTitle("DeepSeek-R1".localized)
+            _ = setNavigationItem("", imageName: "aichat_history", direction: .right, action: #selector(clickHistory))
+            
         }
 
     }
@@ -154,6 +158,11 @@ extension TSChatViewController {
             pop()
         })
     }
-
+    
+    @objc func clickHistory(){
+        let historyVC = TSAIChatHistoryVC()
+        historyVC.hidesBottomBarWhenPushed = true
+        navigationController?.pushViewController(historyVC, animated: true)
+    }
     
 }

+ 9 - 0
AIEmoji/Business/AIChat/TSChatViewController/TSChatViewController/TSChatViewController.swift

@@ -55,6 +55,15 @@ class TSChatViewController: MessagesViewController, MessagesDataSource {
         formatter.dateStyle = .medium
         return formatter
     }()
+  
+//    init(uiStyle: TSAIChatVM.UIStype) {
+//        self.viewModel.uiStyle = uiStyle
+//        super.init(nibName: nil, bundle: nil)
+//    }
+//    
+//    @MainActor required init?(coder: NSCoder) {
+//        fatalError("init(coder:) has not been implemented")
+//    }
     
     override func viewDidLoad() {
         //在父类前先设置好inputBarType,否则会先加载默认白色,再加载自定义黑色,会一闪而过白色默认的

+ 1 - 0
AIEmoji/Business/AIChat/TSChatViewController/ViewModel/TSAIChatVM.swift

@@ -13,6 +13,7 @@ class TSAIChatVM {
     enum UIStype {
         case chat
         case history
+        case perfectHint    //完善提示词
     }
         
     lazy var dbAIChatList: TSDBAIChatList = {

+ 60 - 47
AIEmoji/Business/TSAILIstVC/TSAILIstVC/TSAILIstCell.swift

@@ -13,34 +13,35 @@ class TSAILIstCell: TSBaseCollectionCell {
         didSet{
             
             if let imageNamed = itemModel.leftImageName{
-                if imageNamed.contains("gif") {
-                    
-                    if let gifURL = Bundle.main.url(forResource: imageNamed, withExtension: nil) {
-                        animatedImageView.kf.setImage(with: gifURL, options: [.cacheOriginalImage]) { result in
-                            switch result {
-                            case .success(let value):
-                                print("GIF 加载成功: \(value.source.url?.absoluteString ?? "")")
-                            case .failure(let error):
-                                print("GIF 加载失败: \(error.localizedDescription)")
-                            }
-                        }
-                    }
-                    
-                    kDelayMainShort {
-                        self.animatedImageView.startAnimating()
-                    }
-                    
-                    animatedImageView.isHidden = false
-                    shadowImageView.isHidden = false
-                    
-                }else{
-                    animatedImageView.isHidden = true
-                    shadowImageView.isHidden = true
+//                if imageNamed.contains("gif") {
+//                    
+//                    if let gifURL = Bundle.main.url(forResource: imageNamed, withExtension: nil) {
+//                        animatedImageView.kf.setImage(with: gifURL, options: [.cacheOriginalImage]) { result in
+//                            switch result {
+//                            case .success(let value):
+//                                print("GIF 加载成功: \(value.source.url?.absoluteString ?? "")")
+//                            case .failure(let error):
+//                                print("GIF 加载失败: \(error.localizedDescription)")
+//                            }
+//                        }
+//                    }
+//                    
+//                    kDelayMainShort {
+//                        self.animatedImageView.startAnimating()
+//                    }
+//                    
+//                    animatedImageView.isHidden = false
+//                    shadowImageView.isHidden = false
+//                    
+//                }else{
+//                    animatedImageView.isHidden = true
+//                    shadowImageView.isHidden = true
                     bgImageView.image = UIImage(named: itemModel.leftImageName ?? "")
-                }
+//                }
 
             }
             titleLab.text = itemModel.leftTitle
+            infoLab.text = itemModel.leftSubTitle
         }
     }
     
@@ -50,26 +51,31 @@ class TSAILIstCell: TSBaseCollectionCell {
         return bgImageView
     }()
     
-    lazy var animatedImageView: AnimatedImageView = {
-        let animatedImageView = AnimatedImageView()
-        animatedImageView.autoPlayAnimatedImage = false
-        animatedImageView.isHidden = true
-        animatedImageView.cornerRadius = 16.0
-        return animatedImageView
-    }()
+//    lazy var animatedImageView: AnimatedImageView = {
+//        let animatedImageView = AnimatedImageView()
+//        animatedImageView.autoPlayAnimatedImage = false
+//        animatedImageView.isHidden = true
+//        animatedImageView.cornerRadius = 16.0
+//        return animatedImageView
+//    }()
     
-    lazy var shadowImageView: UIImageView = {
-        let shadowImageView = UIImageView.createImageView(imageName: "alList_shadow",contentMode: .scaleToFill)
-        shadowImageView.alpha = 0.7
-        shadowImageView.isHidden = true
-        return shadowImageView
-    }()
+//    lazy var shadowImageView: UIImageView = {
+//        let shadowImageView = UIImageView.createImageView(imageName: "alList_shadow",contentMode: .scaleToFill)
+//        shadowImageView.alpha = 0.7
+//        shadowImageView.isHidden = true
+//        return shadowImageView
+//    }()
     
     lazy var titleLab: UILabel = {
         let titleLab = UILabel.createLabel(font: .font(size: 16,weight: .medium),textColor: .fromHex("FFFFFF"),numberOfLines: 0)
         return titleLab
     }()
     
+    lazy var infoLab: UILabel = {
+        let infoLab = UILabel.createLabel(font: .font(size: 12,weight: .regular),textColor: .white.withAlphaComponent(0.8),numberOfLines: 0)
+        return infoLab
+    }()
+    
     override func creatUI() {
         bgContentView.clipsToBounds = true
         bgContentView.addSubview(bgImageView)
@@ -77,22 +83,29 @@ class TSAILIstCell: TSBaseCollectionCell {
             make.top.bottom.leading.trailing.equalTo(0)
         }
         
-        bgContentView.addSubview(animatedImageView)
-        animatedImageView.snp.makeConstraints { make in
-            make.top.bottom.leading.trailing.equalTo(0)
-        }
+//        bgContentView.addSubview(animatedImageView)
+//        animatedImageView.snp.makeConstraints { make in
+//            make.top.bottom.leading.trailing.equalTo(0)
+//        }
 
-        bgContentView.addSubview(shadowImageView)
-        shadowImageView.snp.makeConstraints { make in
-            make.bottom.leading.trailing.equalTo(0)
-            make.height.equalTo(90*kDesignScale)
+//        bgContentView.addSubview(shadowImageView)
+//        shadowImageView.snp.makeConstraints { make in
+//            make.bottom.leading.trailing.equalTo(0)
+//            make.height.equalTo(90*kDesignScale)
+//        }
+        
+        bgContentView.addSubview(infoLab)
+        infoLab.snp.makeConstraints { make in
+            make.trailing.equalTo(-110)
+            make.leading.equalTo(12)
+            make.bottom.equalTo(-16)
         }
 
         bgContentView.addSubview(titleLab)
         titleLab.snp.makeConstraints { make in
-            make.trailing.equalTo(-14)
+            make.trailing.equalTo(-110)
             make.leading.equalTo(12)
-            make.bottom.equalTo(-16)
+            make.bottom.equalTo(infoLab.snp.top).offset(0)
         }
     }
     

+ 128 - 85
AIEmoji/Business/TSAILIstVC/TSAILIstVC/TSAILIstVC.swift

@@ -12,41 +12,30 @@ class TSAILIstVC: TSBaseVC {
         let sectionModel = TSBasicSectionModel()
         dataArray.append(sectionModel)
 
-        
-        sectionModel.addSubItemModel(
-            createItemModel(
-                leftImageName:"aiList_ttp",
-                leftTitle: "Text ➡️ Photo".localized,
-                leftSubTitle: "Turn words into visually stunning artwork".localized,
-                rightViewStyle: 0,
-                tapBlock: { [weak self] model, _, _ in
-                   guard let self = self else { return }
-                    kPushVC(target: self, modelVC: TSTextGeneralPictureVC())
-        }))
-        
+        //母亲节
         sectionModel.addSubItemModel(
             createItemModel(
-                leftImageName:"aiList_quality",
-                leftTitle: "Photo Enhancer".localized,
-                leftSubTitle: "".localized,
+                leftImageName:"aiList_MotherDay",
+                leftTitle: "Happy Mother's Day".localized,
+                leftSubTitle: "Create sweet memories with Mom".localized,
                 rightViewStyle: 0,
                 tapBlock: { [weak self] model, _, _ in
                    guard let self = self else { return }
 //                    enterSelectPhotos(
-//                        userDefaultsKey: "",//"isFirstAIListQualityHintVC",
+//                        userDefaultsKey: "",
 //                        maxBitSize: kUploadImageMaxBit10Size,
-//                        config:.defaultConfig
+//                         config:.getDefaultConfig(imageMaxBitSize: kUploadImageMaxBit10Size)
 //                    ) { image in
                     let baseVc = TSAIUploadPhotoBaseVC(titleString: model.leftTitle ?? "",upLoadImage: nil,imageMaxBitSize: kUploadImageMaxBit10Size, generatorStyle: .photoQuality)
                         kPushVC(target: self, modelVC: baseVc)
 //                    }
         }))
-        
+        //猫咪变人
         sectionModel.addSubItemModel(
             createItemModel(
-                leftImageName:"aiList_photoExpand",
-                leftTitle: "AI Expand Photo".localized,
-                leftSubTitle: "".localized,
+                leftImageName:"aiList_catTohuman",
+                leftTitle: "Pet Humanization".localized,
+                leftSubTitle: "Curious about what your pet is like?".localized,
                 rightViewStyle: 0,
                 tapBlock: { [weak self] model, _, _ in
                    guard let self = self else { return }
@@ -55,65 +44,68 @@ class TSAILIstVC: TSBaseVC {
 //                        maxBitSize: kUploadImageMaxBit10Size,
 //                         config:.getDefaultConfig(imageMaxBitSize: kUploadImageMaxBit10Size)
 //                    ) { image in
-                        let baseVc = TSAIExpandImageVC(upLoadImage: nil)
+                    let baseVc = TSAIUploadPhotoBaseVC(titleString: model.leftTitle ?? "",upLoadImage: nil,imageMaxBitSize: kUploadImageMaxBit10Size, generatorStyle: .photoQuality)
                         kPushVC(target: self, modelVC: baseVc)
 //                    }
         }))
         
+        //改发型
         sectionModel.addSubItemModel(
             createItemModel(
-                leftImageName:"activePhoto.gif",
-                leftTitle: "Make photo live".localized,
-                leftSubTitle: "".localized,
+                leftImageName:"aiList_hair",
+                leftTitle: "Hair Salon".localized,
+                leftSubTitle: "Try new hair looks for every style".localized,
                 rightViewStyle: 0,
                 tapBlock: { [weak self] model, _, _ in
                    guard let self = self else { return }
-//                    enterSelectPhotos(
-//                        userDefaultsKey: "isFirstAILivePhoto",
-//                        maxBitSize: kUploadImageMaxBit5Size,
-//                         config:.getDefaultConfig(imageMaxBitSize: kUploadImageMaxBit5Size)
-//                    ) { image in
-                        let baseVc = TSAIUploadPhotoBaseVC(titleString: model.leftTitle ?? "",upLoadImage: nil,imageMaxBitSize: kUploadImageMaxBit5Size, generatorStyle: .photoLive)
+                    enterSelectPhotos(
+                        userDefaultsKey: "isFirstAIChangeHair",
+                        maxBitSize: kUploadImageMaxBit10Size,
+                        config:.changeHairConfig
+                    ) { image in
+                        let baseVc = TSAIChangeEmoteVC(upLoadImage: image, style: .changehair)
                         kPushVC(target: self, modelVC: baseVc)
-//                    }
+                    }
         }))
         
+        //改发色
         sectionModel.addSubItemModel(
             createItemModel(
-                leftImageName:"ailist_pretty",
-                leftTitle: "Be Pretty".localized,
-                leftSubTitle: "".localized,
+                leftImageName:"aiList_hairColor",
+                leftTitle: "Transform Hair Color".localized,
+                leftSubTitle: "Find out what hair color suits you".localized,
                 rightViewStyle: 0,
                 tapBlock: { [weak self] model, _, _ in
                    guard let self = self else { return }
-//                    enterSelectPhotos(
-//                        userDefaultsKey: "isFirstAIPrettyPhoto",
-//                        maxBitSize: kUploadImageMaxBit5Size,
-//                         config:.getDefaultConfig(imageMaxBitSize: kUploadImageMaxBit5Size)
-//                    ) { image in
-                        let baseVc = TSAIUploadPhotoBaseVC(titleString: model.leftTitle ?? "",upLoadImage: nil,imageMaxBitSize: kUploadImageMaxBit5Size, generatorStyle: .pretty)
+                    enterSelectPhotos(
+                        userDefaultsKey: "isFirstAIChangeHairColor",
+                        maxBitSize: kUploadImageMaxBit10Size,
+                        config:.changeHairConfig
+                    ) { image in
+                        let baseVc = TSAIChangeEmoteVC(upLoadImage: image, style: .changehairColor)
                         kPushVC(target: self, modelVC: baseVc)
-//                    }
+                    }
         }))
         
+        //照片高清修复
         sectionModel.addSubItemModel(
             createItemModel(
-                leftImageName:"ailist_eyeOpen",
-                leftTitle: "Open Eyes".localized,
-                leftSubTitle: "".localized,
+                leftImageName:"aiList_quality",
+                leftTitle: "Photo Enhancer".localized,
+                leftSubTitle: "Enhance photo's quality".localized,
                 rightViewStyle: 0,
                 tapBlock: { [weak self] model, _, _ in
                    guard let self = self else { return }
 //                    enterSelectPhotos(
-//                        userDefaultsKey: "isFirstAIEyeOpenPhoto",
-//                        maxBitSize: kUploadImageMaxBit5Size,
-//                        config: .getDefaultConfig(imageMaxBitSize: kUploadImageMaxBit5Size)
+//                        userDefaultsKey: "",//"isFirstAIListQualityHintVC",
+//                        maxBitSize: kUploadImageMaxBit10Size,
+//                        config:.defaultConfig
 //                    ) { image in
-                        let baseVc = TSAIUploadPhotoBaseVC(titleString: model.leftTitle ?? "",upLoadImage: nil,imageMaxBitSize: kUploadImageMaxBit5Size, generatorStyle: .eyeOpen)
+                    let baseVc = TSAIUploadPhotoBaseVC(titleString: model.leftTitle ?? "",upLoadImage: nil,imageMaxBitSize: kUploadImageMaxBit10Size, generatorStyle: .photoQuality)
                         kPushVC(target: self, modelVC: baseVc)
 //                    }
         }))
-        
+        //老照片修复
         sectionModel.addSubItemModel(
             createItemModel(
                 leftImageName:"aiList_restOldPhoto",
@@ -131,43 +123,38 @@ class TSAILIstVC: TSBaseVC {
                         kPushVC(target: self, modelVC: baseVc)
 //                    }
         }))
-        
+        //扩图
         sectionModel.addSubItemModel(
             createItemModel(
-                leftImageName:"aiList_hairColor",
-                leftTitle: "Transform Hair Color".localized,
-                leftSubTitle: "Find out what hair color suits you".localized,
+                leftImageName:"aiList_photoExpand",
+                leftTitle: "AI Expand Photo".localized,
+                leftSubTitle: "Seamlessly extend image boundaries".localized,
                 rightViewStyle: 0,
                 tapBlock: { [weak self] model, _, _ in
                    guard let self = self else { return }
-                    enterSelectPhotos(
-                        userDefaultsKey: "isFirstAIChangeHairColor",
-                        maxBitSize: kUploadImageMaxBit10Size,
-                        config:.changeHairConfig
-                    ) { image in
-                        let baseVc = TSAIChangeEmoteVC(upLoadImage: image, style: .changehairColor)
+//                    enterSelectPhotos(
+//                        userDefaultsKey: "",
+//                        maxBitSize: kUploadImageMaxBit10Size,
+//                         config:.getDefaultConfig(imageMaxBitSize: kUploadImageMaxBit10Size)
+//                    ) { image in
+                        let baseVc = TSAIExpandImageVC(upLoadImage: nil)
                         kPushVC(target: self, modelVC: baseVc)
-                    }
+//                    }
         }))
-        
+        //AI 助手
         sectionModel.addSubItemModel(
             createItemModel(
-                leftImageName:"aiList_hair",
-                leftTitle: "Hair Salon".localized,
-                leftSubTitle: "Try new hair looks for every style".localized,
+                leftImageName:"aiList_aiChat",
+                leftTitle: "AI Assistant".localized,
+                leftSubTitle: "Get smart and instant answers".localized,
                 rightViewStyle: 0,
                 tapBlock: { [weak self] model, _, _ in
                    guard let self = self else { return }
-                    enterSelectPhotos(
-                        userDefaultsKey: "isFirstAIChangeHair",
-                        maxBitSize: kUploadImageMaxBit10Size,
-                        config:.changeHairConfig
-                    ) { image in
-                        let baseVc = TSAIChangeEmoteVC(upLoadImage: image, style: .changehair)
-                        kPushVC(target: self, modelVC: baseVc)
-                    }
+                    let vc = TSChatViewController()//(uiStyle: .perfectHint)
+                    vc.viewModel.uiStyle = .perfectHint
+                    kPushVC(target: self, modelVC: vc)
         }))
-        
+        //预测老年
         sectionModel.addSubItemModel(
             createItemModel(
                 leftImageName:"aiList_oldPeople",
@@ -185,7 +172,7 @@ class TSAILIstVC: TSBaseVC {
                         kPushVC(target: self, modelVC: baseVc)
 //                    }
         }))
-        
+        //变回宝宝
         sectionModel.addSubItemModel(
             createItemModel(
                 leftImageName:"ailist_child",
@@ -205,7 +192,43 @@ class TSAILIstVC: TSBaseVC {
                     
                                 
         }))
-        
+        //变漂亮
+        sectionModel.addSubItemModel(
+            createItemModel(
+                leftImageName:"ailist_pretty",
+                leftTitle: "Be Pretty".localized,
+                leftSubTitle: "Get the best face in every photo".localized,
+                rightViewStyle: 0,
+                tapBlock: { [weak self] model, _, _ in
+                   guard let self = self else { return }
+//                    enterSelectPhotos(
+//                        userDefaultsKey: "isFirstAIPrettyPhoto",
+//                        maxBitSize: kUploadImageMaxBit5Size,
+//                         config:.getDefaultConfig(imageMaxBitSize: kUploadImageMaxBit5Size)
+//                    ) { image in
+                        let baseVc = TSAIUploadPhotoBaseVC(titleString: model.leftTitle ?? "",upLoadImage: nil,imageMaxBitSize: kUploadImageMaxBit5Size, generatorStyle: .pretty)
+                        kPushVC(target: self, modelVC: baseVc)
+//                    }
+        }))
+        //睁眼
+        sectionModel.addSubItemModel(
+            createItemModel(
+                leftImageName:"ailist_eyeOpen",
+                leftTitle: "Open Eyes".localized,
+                leftSubTitle: "One-tap Retouch".localized,
+                rightViewStyle: 0,
+                tapBlock: { [weak self] model, _, _ in
+                   guard let self = self else { return }
+//                    enterSelectPhotos(
+//                        userDefaultsKey: "isFirstAIEyeOpenPhoto",
+//                        maxBitSize: kUploadImageMaxBit5Size,
+//                        config: .getDefaultConfig(imageMaxBitSize: kUploadImageMaxBit5Size)
+//                    ) { image in
+                        let baseVc = TSAIUploadPhotoBaseVC(titleString: model.leftTitle ?? "",upLoadImage: nil,imageMaxBitSize: kUploadImageMaxBit5Size, generatorStyle: .eyeOpen)
+                        kPushVC(target: self, modelVC: baseVc)
+//                    }
+        }))
+        //改表情
         sectionModel.addSubItemModel(
             createItemModel(
                 leftImageName:"aiList_emote",
@@ -223,18 +246,38 @@ class TSAILIstVC: TSBaseVC {
                         kPushVC(target: self, modelVC: baseVc)
                     }
         }))
-        
-
+        //活照片
         sectionModel.addSubItemModel(
             createItemModel(
-                leftImageName:"aiList_emoji",
-                leftTitle: "Text ➡️ Emoji".localized,
-                leftSubTitle: "Turn your inspiration into brilliant emojis".localized,
+                leftImageName:"aiList_livePhoto",
+                leftTitle: "Make photo live".localized,
+                leftSubTitle: "Bringing photos to life".localized,
                 rightViewStyle: 0,
                 tapBlock: { [weak self] model, _, _ in
                    guard let self = self else { return }
-                    kPushVC(target: self, modelVC: TSGenmojiVC())
+//                    enterSelectPhotos(
+//                        userDefaultsKey: "isFirstAILivePhoto",
+//                        maxBitSize: kUploadImageMaxBit5Size,
+//                         config:.getDefaultConfig(imageMaxBitSize: kUploadImageMaxBit5Size)
+//                    ) { image in
+                        let baseVc = TSAIUploadPhotoBaseVC(titleString: model.leftTitle ?? "",upLoadImage: nil,imageMaxBitSize: kUploadImageMaxBit5Size, generatorStyle: .photoLive)
+                        kPushVC(target: self, modelVC: baseVc)
+//                    }
         }))
+        
+        //文生表情
+//        sectionModel.addSubItemModel(
+//            createItemModel(
+//                leftImageName:"aiList_emoji",
+//                leftTitle: "Text ➡️ Emoji".localized,
+//                leftSubTitle: "Turn your inspiration into brilliant emojis".localized,
+//                rightViewStyle: 0,
+//                tapBlock: { [weak self] model, _, _ in
+//                   guard let self = self else { return }
+//                    kPushVC(target: self, modelVC: TSGenmojiVC())
+//        }))
+        
+        
         return dataArray
 
     }()
@@ -275,11 +318,11 @@ class TSAILIstVC: TSBaseVC {
     lazy var layout: UICollectionViewFlowLayout = {
         let layout = UICollectionViewFlowLayout()
         layout.scrollDirection = .vertical
-        let w = (k_ScreenWidth-32-10)/2
-        let h = kGetScaleHeight(originalSize: CGSizeMake(167, 236), width: w)
+        let w = k_ScreenWidth-32
+        let h = kGetScaleHeight(originalSize: CGSizeMake(343, 124), width: w)
         layout.itemSize = CGSize(width: w, height: h)
         layout.minimumInteritemSpacing = 9.0
-        layout.minimumLineSpacing = 12.0
+        layout.minimumLineSpacing = 16.0
         
         layout.sectionInset = UIEdgeInsets(top: 16, left: 16, bottom: 16, right: 16)
         return layout