UI完善
authorliangzhenying <867174124@qq.com>
Tue, 26 Aug 2025 10:16:04 +0000 (18:16 +0800)
committerliangzhenying <867174124@qq.com>
Tue, 26 Aug 2025 10:16:04 +0000 (18:16 +0800)
130 files changed:
ShenYin/ShenYin.xcodeproj/project.pbxproj
ShenYin/ShenYin/Assets.xcassets/home/Frame 2247_slices/Contents.json [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/home/send_icon.imageset/Contents.json [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/home/send_icon.imageset/发送_1@2x.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/home/send_icon.imageset/发送_1@3x.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/logo_1.imageset/Contents.json [moved from ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_userAgreement.imageset/Contents.json with 79% similarity]
ShenYin/ShenYin/Assets.xcassets/logo_1.imageset/Group@2x.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/logo_1.imageset/Group@3x.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mine/device_list_icon.imageset/Contents.json [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mine/device_list_icon.imageset/Slice 7@2x.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mine/device_list_icon.imageset/Slice 7@3x.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mine/mine_banner1.imageset/Contents.json [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mine/mine_banner1.imageset/Group_2465@2x.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mine/mine_banner1.imageset/Group_2465@3x.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mine/mine_banner2.imageset/Contents.json [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mine/mine_banner2.imageset/Group_2466@2x.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mine/mine_banner2.imageset/Group_2466@3x.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mine/mine_banner3.imageset/Contents.json [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mine/mine_banner3.imageset/Group_2340@2x.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mine/mine_banner3.imageset/Group_2340@3x.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_about.imageset/Contents.json
ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_about.imageset/Frame-7 1.png [deleted file]
ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_about.imageset/Frame-7.png [deleted file]
ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_about.imageset/Frame@2x(9).png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_about.imageset/Frame@3x(8).png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_device.imageset/Frame-1 1.png [deleted file]
ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_device.imageset/Frame-1.png [deleted file]
ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_feedback.imageset/Contents.json
ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_feedback.imageset/Frame-5 1.png [deleted file]
ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_feedback.imageset/Frame-5.png [deleted file]
ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_feedback.imageset/Frame@2x(2).png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_feedback.imageset/Frame@3x(3).png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_instru.imageset/Contents.json [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_instru.imageset/Frame@2x(6).png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_instru.imageset/Frame@3x(7).png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_language.imageset/Frame-4 1.png [deleted file]
ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_language.imageset/Frame-4.png [deleted file]
ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_more.imageset/Contents.json [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_more.imageset/设置_1@2x.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_more.imageset/设置_1@3x.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_privacy.imageset/Frame-3 1.png [deleted file]
ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_privacy.imageset/Frame-3.png [deleted file]
ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_update.imageset/Contents.json
ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_update.imageset/Frame-6 1.png [deleted file]
ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_update.imageset/Frame-6.png [deleted file]
ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_update.imageset/Frame@2x(4).png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_update.imageset/Frame@3x(5).png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_user.imageset/Frame 1.png [deleted file]
ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_user.imageset/Frame.png [deleted file]
ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_userAgreement.imageset/Frame-2 1.png [deleted file]
ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_userAgreement.imageset/Frame-2.png [deleted file]
ShenYin/ShenYin/Assets.xcassets/mode/Rectangle_745.imageset/Contents.json [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/Rectangle_745.imageset/Rectangle_745.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/Rectangle_745.imageset/Rectangle_745@2x.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/Rectangle_745.imageset/Rectangle_745@3x.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_classic.imageset/Contents.json [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_classic.imageset/Group_2302.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_classic.imageset/Group_2302@2x.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_classic.imageset/Group_2302@3x.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_control_anc.imageset/Contents.json [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_control_anc.imageset/Slice 38.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_control_anc.imageset/Slice 38@2x.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_control_anc.imageset/Slice 38@3x.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_control_call.imageset/Contents.json [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_control_call.imageset/Slice 38(2).png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_control_call.imageset/Slice 38@2x(2).png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_control_call.imageset/Slice 38@3x(2).png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_control_environment.imageset/Contents.json [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_control_environment.imageset/Slice 38(1).png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_control_environment.imageset/Slice 38@2x(1).png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_control_environment.imageset/Slice 38@3x(1).png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_custom.imageset/Contents.json [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_custom.imageset/Group_2305.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_custom.imageset/Group_2305@2x.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_custom.imageset/Group_2305@3x.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_fashion.imageset/Contents.json [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_fashion.imageset/Group_2300.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_fashion.imageset/Group_2300@2x.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_fashion.imageset/Group_2300@3x.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_jazz.imageset/Contents.json [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_jazz.imageset/Group_2307.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_jazz.imageset/Group_2307@2x.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_jazz.imageset/Group_2307@3x.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_normal.imageset/Contents.json [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_normal.imageset/Group_2301.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_normal.imageset/Group_2301@2x.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_normal.imageset/Group_2301@3x.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_rock.imageset/Contents.json [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_rock.imageset/Group_2304.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_rock.imageset/Group_2304@2x.png [new file with mode: 0644]
ShenYin/ShenYin/Assets.xcassets/mode/mode_rock.imageset/Group_2304@3x.png [new file with mode: 0644]
ShenYin/ShenYin/SceneDelegate.swift
ShenYin/ShenYin/UI/Base/BaseNavigation.swift
ShenYin/ShenYin/UI/Base/BaseTC.swift
ShenYin/ShenYin/UI/Home/FieldRecording/FieldRecordingCell.swift [new file with mode: 0644]
ShenYin/ShenYin/UI/Home/FieldRecording/FieldRecordingVC.swift [new file with mode: 0644]
ShenYin/ShenYin/UI/Home/HistoryRecord/HistoryRecordCell.swift
ShenYin/ShenYin/UI/Home/HistoryRecord/HistoryRecordVC.swift
ShenYin/ShenYin/UI/Home/HistoryRecord/SelecteCell.swift
ShenYin/ShenYin/UI/Home/RoleListVC.swift
ShenYin/ShenYin/UI/Home/textTranslateVC/LanguageSelecteView.swift [new file with mode: 0644]
ShenYin/ShenYin/UI/Home/textTranslateVC/TextTranslateVC.swift [new file with mode: 0644]
ShenYin/ShenYin/UI/Home/textTranslateVC/TranslateCell.swift [new file with mode: 0644]
ShenYin/ShenYin/UI/Mine/AboutVC.swift
ShenYin/ShenYin/UI/Mine/AccountSetVC.swift
ShenYin/ShenYin/UI/Mine/InstructionsVC.swift [new file with mode: 0644]
ShenYin/ShenYin/UI/Mine/Login/View/PasswordView.swift
ShenYin/ShenYin/UI/Mine/MoreSetVC.swift [new file with mode: 0644]
ShenYin/ShenYin/UI/Mine/MyDeviceList.swift [new file with mode: 0644]
ShenYin/ShenYin/UI/Mine/Root/MineBannerView.swift [new file with mode: 0644]
ShenYin/ShenYin/UI/Mine/Root/MineCell.swift
ShenYin/ShenYin/UI/Mine/Root/MineHeaderView.swift
ShenYin/ShenYin/UI/Mine/Root/MineOrderView.swift [deleted file]
ShenYin/ShenYin/UI/Mine/Root/MineUserInfoView.swift [deleted file]
ShenYin/ShenYin/UI/Mine/Root/MineVC.swift
ShenYin/ShenYin/UI/Mine/UserInfo/AreaVC.swift [new file with mode: 0644]
ShenYin/ShenYin/UI/Mine/UserInfo/CustomCell1.swift
ShenYin/ShenYin/UI/Mine/UserInfo/CustomSectionHeader.swift [new file with mode: 0644]
ShenYin/ShenYin/UI/Mine/UserInfo/GenderVC.swift [new file with mode: 0644]
ShenYin/ShenYin/UI/Mine/UserInfo/NickNameVC.swift [new file with mode: 0644]
ShenYin/ShenYin/UI/Mine/UserInfo/UserInfoCell.swift
ShenYin/ShenYin/UI/Mine/UserInfo/UserInfoVC.swift
ShenYin/ShenYin/UI/Mode/ModeControView.swift
ShenYin/ShenYin/UI/Mode/ModeEffectsView.swift
ShenYin/ShenYin/UI/Scan/BleScanVC.swift
ShenYin/ShenYin/UI/Sleep/SleepListView.swift
ShenYin/ShenYin/UI/Sleep/SleepVC.swift
ShenYin/ShenYin/UI/common/BrokenLineView.swift [new file with mode: 0644]
ShenYin/ShenYin/UI/common/CustomButton.swift
ShenYin/ShenYin/UI/common/SendToolBar.swift [new file with mode: 0644]

index 9439323..56eef56 100644 (file)
                        inputFileListPaths = (
                                "${PODS_ROOT}/Target Support Files/Pods-ShenYin/Pods-ShenYin-frameworks-${CONFIGURATION}-input-files.xcfilelist",
                        );
+                       inputPaths = (
+                       );
                        name = "[CP] Embed Pods Frameworks";
                        outputFileListPaths = (
                                "${PODS_ROOT}/Target Support Files/Pods-ShenYin/Pods-ShenYin-frameworks-${CONFIGURATION}-output-files.xcfilelist",
                        );
+                       outputPaths = (
+                       );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
                        shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ShenYin/Pods-ShenYin-frameworks.sh\"\n";
diff --git a/ShenYin/ShenYin/Assets.xcassets/home/Frame 2247_slices/Contents.json b/ShenYin/ShenYin/Assets.xcassets/home/Frame 2247_slices/Contents.json
new file mode 100644 (file)
index 0000000..73c0059
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/ShenYin/ShenYin/Assets.xcassets/home/send_icon.imageset/Contents.json b/ShenYin/ShenYin/Assets.xcassets/home/send_icon.imageset/Contents.json
new file mode 100644 (file)
index 0000000..758cc60
--- /dev/null
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "发送_1@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "发送_1@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/ShenYin/ShenYin/Assets.xcassets/home/send_icon.imageset/发送_1@2x.png b/ShenYin/ShenYin/Assets.xcassets/home/send_icon.imageset/发送_1@2x.png
new file mode 100644 (file)
index 0000000..69fe279
Binary files /dev/null and "b/ShenYin/ShenYin/Assets.xcassets/home/send_icon.imageset/\345\217\221\351\200\201_1@2x.png" differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/home/send_icon.imageset/发送_1@3x.png b/ShenYin/ShenYin/Assets.xcassets/home/send_icon.imageset/发送_1@3x.png
new file mode 100644 (file)
index 0000000..466c0d9
Binary files /dev/null and "b/ShenYin/ShenYin/Assets.xcassets/home/send_icon.imageset/\345\217\221\351\200\201_1@3x.png" differ
@@ -5,12 +5,12 @@
       "scale" : "1x"
     },
     {
-      "filename" : "Frame-2 1.png",
+      "filename" : "Group@2x.png",
       "idiom" : "universal",
       "scale" : "2x"
     },
     {
-      "filename" : "Frame-2.png",
+      "filename" : "Group@3x.png",
       "idiom" : "universal",
       "scale" : "3x"
     }
diff --git a/ShenYin/ShenYin/Assets.xcassets/logo_1.imageset/Group@2x.png b/ShenYin/ShenYin/Assets.xcassets/logo_1.imageset/Group@2x.png
new file mode 100644 (file)
index 0000000..4655b6a
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/logo_1.imageset/Group@2x.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/logo_1.imageset/Group@3x.png b/ShenYin/ShenYin/Assets.xcassets/logo_1.imageset/Group@3x.png
new file mode 100644 (file)
index 0000000..aede087
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/logo_1.imageset/Group@3x.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/device_list_icon.imageset/Contents.json b/ShenYin/ShenYin/Assets.xcassets/mine/device_list_icon.imageset/Contents.json
new file mode 100644 (file)
index 0000000..391af57
--- /dev/null
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Slice 7@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Slice 7@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/device_list_icon.imageset/Slice 7@2x.png b/ShenYin/ShenYin/Assets.xcassets/mine/device_list_icon.imageset/Slice 7@2x.png
new file mode 100644 (file)
index 0000000..9c8b926
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mine/device_list_icon.imageset/Slice 7@2x.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/device_list_icon.imageset/Slice 7@3x.png b/ShenYin/ShenYin/Assets.xcassets/mine/device_list_icon.imageset/Slice 7@3x.png
new file mode 100644 (file)
index 0000000..d5ecc95
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mine/device_list_icon.imageset/Slice 7@3x.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_banner1.imageset/Contents.json b/ShenYin/ShenYin/Assets.xcassets/mine/mine_banner1.imageset/Contents.json
new file mode 100644 (file)
index 0000000..416d6a4
--- /dev/null
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Group_2465@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Group_2465@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_banner1.imageset/Group_2465@2x.png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_banner1.imageset/Group_2465@2x.png
new file mode 100644 (file)
index 0000000..2c830ee
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mine/mine_banner1.imageset/Group_2465@2x.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_banner1.imageset/Group_2465@3x.png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_banner1.imageset/Group_2465@3x.png
new file mode 100644 (file)
index 0000000..594a773
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mine/mine_banner1.imageset/Group_2465@3x.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_banner2.imageset/Contents.json b/ShenYin/ShenYin/Assets.xcassets/mine/mine_banner2.imageset/Contents.json
new file mode 100644 (file)
index 0000000..66442b1
--- /dev/null
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Group_2466@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Group_2466@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_banner2.imageset/Group_2466@2x.png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_banner2.imageset/Group_2466@2x.png
new file mode 100644 (file)
index 0000000..06a9e55
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mine/mine_banner2.imageset/Group_2466@2x.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_banner2.imageset/Group_2466@3x.png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_banner2.imageset/Group_2466@3x.png
new file mode 100644 (file)
index 0000000..2060bfa
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mine/mine_banner2.imageset/Group_2466@3x.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_banner3.imageset/Contents.json b/ShenYin/ShenYin/Assets.xcassets/mine/mine_banner3.imageset/Contents.json
new file mode 100644 (file)
index 0000000..bc66a06
--- /dev/null
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Group_2340@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Group_2340@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_banner3.imageset/Group_2340@2x.png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_banner3.imageset/Group_2340@2x.png
new file mode 100644 (file)
index 0000000..2c830ee
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mine/mine_banner3.imageset/Group_2340@2x.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_banner3.imageset/Group_2340@3x.png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_banner3.imageset/Group_2340@3x.png
new file mode 100644 (file)
index 0000000..594a773
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mine/mine_banner3.imageset/Group_2340@3x.png differ
index de43eee..c8994e8 100644 (file)
@@ -5,12 +5,12 @@
       "scale" : "1x"
     },
     {
-      "filename" : "Frame-7 1.png",
+      "filename" : "Frame@2x(9).png",
       "idiom" : "universal",
       "scale" : "2x"
     },
     {
-      "filename" : "Frame-7.png",
+      "filename" : "Frame@3x(8).png",
       "idiom" : "universal",
       "scale" : "3x"
     }
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_about.imageset/Frame-7 1.png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_about.imageset/Frame-7 1.png
deleted file mode 100644 (file)
index e05971b..0000000
Binary files a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_about.imageset/Frame-7 1.png and /dev/null differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_about.imageset/Frame-7.png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_about.imageset/Frame-7.png
deleted file mode 100644 (file)
index 50fac90..0000000
Binary files a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_about.imageset/Frame-7.png and /dev/null differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_about.imageset/Frame@2x(9).png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_about.imageset/Frame@2x(9).png
new file mode 100644 (file)
index 0000000..74e7869
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_about.imageset/Frame@2x(9).png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_about.imageset/Frame@3x(8).png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_about.imageset/Frame@3x(8).png
new file mode 100644 (file)
index 0000000..fdb915b
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_about.imageset/Frame@3x(8).png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_device.imageset/Frame-1 1.png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_device.imageset/Frame-1 1.png
deleted file mode 100644 (file)
index 6e5f371..0000000
Binary files a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_device.imageset/Frame-1 1.png and /dev/null differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_device.imageset/Frame-1.png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_device.imageset/Frame-1.png
deleted file mode 100644 (file)
index a837952..0000000
Binary files a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_device.imageset/Frame-1.png and /dev/null differ
index f52764b..2bda9f7 100644 (file)
@@ -5,12 +5,12 @@
       "scale" : "1x"
     },
     {
-      "filename" : "Frame-5 1.png",
+      "filename" : "Frame@2x(2).png",
       "idiom" : "universal",
       "scale" : "2x"
     },
     {
-      "filename" : "Frame-5.png",
+      "filename" : "Frame@3x(3).png",
       "idiom" : "universal",
       "scale" : "3x"
     }
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_feedback.imageset/Frame-5 1.png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_feedback.imageset/Frame-5 1.png
deleted file mode 100644 (file)
index 9545fdc..0000000
Binary files a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_feedback.imageset/Frame-5 1.png and /dev/null differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_feedback.imageset/Frame-5.png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_feedback.imageset/Frame-5.png
deleted file mode 100644 (file)
index 669e9cc..0000000
Binary files a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_feedback.imageset/Frame-5.png and /dev/null differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_feedback.imageset/Frame@2x(2).png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_feedback.imageset/Frame@2x(2).png
new file mode 100644 (file)
index 0000000..a5d423e
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_feedback.imageset/Frame@2x(2).png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_feedback.imageset/Frame@3x(3).png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_feedback.imageset/Frame@3x(3).png
new file mode 100644 (file)
index 0000000..8669b1b
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_feedback.imageset/Frame@3x(3).png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_instru.imageset/Contents.json b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_instru.imageset/Contents.json
new file mode 100644 (file)
index 0000000..08f6a19
--- /dev/null
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Frame@2x(6).png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Frame@3x(7).png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_instru.imageset/Frame@2x(6).png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_instru.imageset/Frame@2x(6).png
new file mode 100644 (file)
index 0000000..18d9ed0
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_instru.imageset/Frame@2x(6).png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_instru.imageset/Frame@3x(7).png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_instru.imageset/Frame@3x(7).png
new file mode 100644 (file)
index 0000000..8a38a4b
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_instru.imageset/Frame@3x(7).png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_language.imageset/Frame-4 1.png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_language.imageset/Frame-4 1.png
deleted file mode 100644 (file)
index e4a7326..0000000
Binary files a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_language.imageset/Frame-4 1.png and /dev/null differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_language.imageset/Frame-4.png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_language.imageset/Frame-4.png
deleted file mode 100644 (file)
index 357cc23..0000000
Binary files a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_language.imageset/Frame-4.png and /dev/null differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_more.imageset/Contents.json b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_more.imageset/Contents.json
new file mode 100644 (file)
index 0000000..99ffc12
--- /dev/null
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "设置_1@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "设置_1@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_more.imageset/设置_1@2x.png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_more.imageset/设置_1@2x.png
new file mode 100644 (file)
index 0000000..b856efd
Binary files /dev/null and "b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_more.imageset/\350\256\276\347\275\256_1@2x.png" differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_more.imageset/设置_1@3x.png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_more.imageset/设置_1@3x.png
new file mode 100644 (file)
index 0000000..b7a2a2e
Binary files /dev/null and "b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_more.imageset/\350\256\276\347\275\256_1@3x.png" differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_privacy.imageset/Frame-3 1.png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_privacy.imageset/Frame-3 1.png
deleted file mode 100644 (file)
index 111b122..0000000
Binary files a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_privacy.imageset/Frame-3 1.png and /dev/null differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_privacy.imageset/Frame-3.png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_privacy.imageset/Frame-3.png
deleted file mode 100644 (file)
index a1faecb..0000000
Binary files a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_privacy.imageset/Frame-3.png and /dev/null differ
index 0b98d55..ffe9cff 100644 (file)
@@ -5,12 +5,12 @@
       "scale" : "1x"
     },
     {
-      "filename" : "Frame-6 1.png",
+      "filename" : "Frame@2x(4).png",
       "idiom" : "universal",
       "scale" : "2x"
     },
     {
-      "filename" : "Frame-6.png",
+      "filename" : "Frame@3x(5).png",
       "idiom" : "universal",
       "scale" : "3x"
     }
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_update.imageset/Frame-6 1.png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_update.imageset/Frame-6 1.png
deleted file mode 100644 (file)
index d69e374..0000000
Binary files a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_update.imageset/Frame-6 1.png and /dev/null differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_update.imageset/Frame-6.png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_update.imageset/Frame-6.png
deleted file mode 100644 (file)
index dec7936..0000000
Binary files a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_update.imageset/Frame-6.png and /dev/null differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_update.imageset/Frame@2x(4).png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_update.imageset/Frame@2x(4).png
new file mode 100644 (file)
index 0000000..adaeb33
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_update.imageset/Frame@2x(4).png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_update.imageset/Frame@3x(5).png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_update.imageset/Frame@3x(5).png
new file mode 100644 (file)
index 0000000..3670036
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_update.imageset/Frame@3x(5).png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_user.imageset/Frame 1.png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_user.imageset/Frame 1.png
deleted file mode 100644 (file)
index d1b4769..0000000
Binary files a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_user.imageset/Frame 1.png and /dev/null differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_user.imageset/Frame.png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_user.imageset/Frame.png
deleted file mode 100644 (file)
index 06234dc..0000000
Binary files a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_user.imageset/Frame.png and /dev/null differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_userAgreement.imageset/Frame-2 1.png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_userAgreement.imageset/Frame-2 1.png
deleted file mode 100644 (file)
index ac7c882..0000000
Binary files a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_userAgreement.imageset/Frame-2 1.png and /dev/null differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_userAgreement.imageset/Frame-2.png b/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_userAgreement.imageset/Frame-2.png
deleted file mode 100644 (file)
index 14661fe..0000000
Binary files a/ShenYin/ShenYin/Assets.xcassets/mine/mine_cell_userAgreement.imageset/Frame-2.png and /dev/null differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/Rectangle_745.imageset/Contents.json b/ShenYin/ShenYin/Assets.xcassets/mode/Rectangle_745.imageset/Contents.json
new file mode 100644 (file)
index 0000000..aca0edf
--- /dev/null
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Rectangle_745.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Rectangle_745@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Rectangle_745@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/Rectangle_745.imageset/Rectangle_745.png b/ShenYin/ShenYin/Assets.xcassets/mode/Rectangle_745.imageset/Rectangle_745.png
new file mode 100644 (file)
index 0000000..ec1e442
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mode/Rectangle_745.imageset/Rectangle_745.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/Rectangle_745.imageset/Rectangle_745@2x.png b/ShenYin/ShenYin/Assets.xcassets/mode/Rectangle_745.imageset/Rectangle_745@2x.png
new file mode 100644 (file)
index 0000000..af0f00b
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mode/Rectangle_745.imageset/Rectangle_745@2x.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/Rectangle_745.imageset/Rectangle_745@3x.png b/ShenYin/ShenYin/Assets.xcassets/mode/Rectangle_745.imageset/Rectangle_745@3x.png
new file mode 100644 (file)
index 0000000..136aa0c
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mode/Rectangle_745.imageset/Rectangle_745@3x.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_classic.imageset/Contents.json b/ShenYin/ShenYin/Assets.xcassets/mode/mode_classic.imageset/Contents.json
new file mode 100644 (file)
index 0000000..d215a52
--- /dev/null
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Group_2302.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Group_2302@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Group_2302@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_classic.imageset/Group_2302.png b/ShenYin/ShenYin/Assets.xcassets/mode/mode_classic.imageset/Group_2302.png
new file mode 100644 (file)
index 0000000..2117bb4
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mode/mode_classic.imageset/Group_2302.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_classic.imageset/Group_2302@2x.png b/ShenYin/ShenYin/Assets.xcassets/mode/mode_classic.imageset/Group_2302@2x.png
new file mode 100644 (file)
index 0000000..383788c
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mode/mode_classic.imageset/Group_2302@2x.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_classic.imageset/Group_2302@3x.png b/ShenYin/ShenYin/Assets.xcassets/mode/mode_classic.imageset/Group_2302@3x.png
new file mode 100644 (file)
index 0000000..68ad649
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mode/mode_classic.imageset/Group_2302@3x.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_anc.imageset/Contents.json b/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_anc.imageset/Contents.json
new file mode 100644 (file)
index 0000000..217b6c0
--- /dev/null
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Slice 38.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Slice 38@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Slice 38@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_anc.imageset/Slice 38.png b/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_anc.imageset/Slice 38.png
new file mode 100644 (file)
index 0000000..9537f55
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_anc.imageset/Slice 38.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_anc.imageset/Slice 38@2x.png b/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_anc.imageset/Slice 38@2x.png
new file mode 100644 (file)
index 0000000..83c576c
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_anc.imageset/Slice 38@2x.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_anc.imageset/Slice 38@3x.png b/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_anc.imageset/Slice 38@3x.png
new file mode 100644 (file)
index 0000000..7cf12f6
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_anc.imageset/Slice 38@3x.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_call.imageset/Contents.json b/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_call.imageset/Contents.json
new file mode 100644 (file)
index 0000000..c658975
--- /dev/null
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Slice 38(2).png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Slice 38@2x(2).png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Slice 38@3x(2).png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_call.imageset/Slice 38(2).png b/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_call.imageset/Slice 38(2).png
new file mode 100644 (file)
index 0000000..4c5abf3
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_call.imageset/Slice 38(2).png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_call.imageset/Slice 38@2x(2).png b/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_call.imageset/Slice 38@2x(2).png
new file mode 100644 (file)
index 0000000..e1d330f
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_call.imageset/Slice 38@2x(2).png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_call.imageset/Slice 38@3x(2).png b/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_call.imageset/Slice 38@3x(2).png
new file mode 100644 (file)
index 0000000..39416ae
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_call.imageset/Slice 38@3x(2).png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_environment.imageset/Contents.json b/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_environment.imageset/Contents.json
new file mode 100644 (file)
index 0000000..06d9fc3
--- /dev/null
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Slice 38(1).png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Slice 38@2x(1).png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Slice 38@3x(1).png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_environment.imageset/Slice 38(1).png b/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_environment.imageset/Slice 38(1).png
new file mode 100644 (file)
index 0000000..95b0479
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_environment.imageset/Slice 38(1).png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_environment.imageset/Slice 38@2x(1).png b/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_environment.imageset/Slice 38@2x(1).png
new file mode 100644 (file)
index 0000000..80e3eef
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_environment.imageset/Slice 38@2x(1).png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_environment.imageset/Slice 38@3x(1).png b/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_environment.imageset/Slice 38@3x(1).png
new file mode 100644 (file)
index 0000000..d4935fd
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mode/mode_control_environment.imageset/Slice 38@3x(1).png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_custom.imageset/Contents.json b/ShenYin/ShenYin/Assets.xcassets/mode/mode_custom.imageset/Contents.json
new file mode 100644 (file)
index 0000000..8cf83b6
--- /dev/null
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Group_2305.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Group_2305@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Group_2305@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_custom.imageset/Group_2305.png b/ShenYin/ShenYin/Assets.xcassets/mode/mode_custom.imageset/Group_2305.png
new file mode 100644 (file)
index 0000000..1a551bb
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mode/mode_custom.imageset/Group_2305.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_custom.imageset/Group_2305@2x.png b/ShenYin/ShenYin/Assets.xcassets/mode/mode_custom.imageset/Group_2305@2x.png
new file mode 100644 (file)
index 0000000..110ceb3
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mode/mode_custom.imageset/Group_2305@2x.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_custom.imageset/Group_2305@3x.png b/ShenYin/ShenYin/Assets.xcassets/mode/mode_custom.imageset/Group_2305@3x.png
new file mode 100644 (file)
index 0000000..da04767
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mode/mode_custom.imageset/Group_2305@3x.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_fashion.imageset/Contents.json b/ShenYin/ShenYin/Assets.xcassets/mode/mode_fashion.imageset/Contents.json
new file mode 100644 (file)
index 0000000..4dbfa7d
--- /dev/null
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Group_2300.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Group_2300@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Group_2300@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_fashion.imageset/Group_2300.png b/ShenYin/ShenYin/Assets.xcassets/mode/mode_fashion.imageset/Group_2300.png
new file mode 100644 (file)
index 0000000..92c6cc8
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mode/mode_fashion.imageset/Group_2300.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_fashion.imageset/Group_2300@2x.png b/ShenYin/ShenYin/Assets.xcassets/mode/mode_fashion.imageset/Group_2300@2x.png
new file mode 100644 (file)
index 0000000..de37702
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mode/mode_fashion.imageset/Group_2300@2x.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_fashion.imageset/Group_2300@3x.png b/ShenYin/ShenYin/Assets.xcassets/mode/mode_fashion.imageset/Group_2300@3x.png
new file mode 100644 (file)
index 0000000..023a600
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mode/mode_fashion.imageset/Group_2300@3x.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_jazz.imageset/Contents.json b/ShenYin/ShenYin/Assets.xcassets/mode/mode_jazz.imageset/Contents.json
new file mode 100644 (file)
index 0000000..e998ac1
--- /dev/null
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Group_2307.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Group_2307@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Group_2307@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_jazz.imageset/Group_2307.png b/ShenYin/ShenYin/Assets.xcassets/mode/mode_jazz.imageset/Group_2307.png
new file mode 100644 (file)
index 0000000..6f55536
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mode/mode_jazz.imageset/Group_2307.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_jazz.imageset/Group_2307@2x.png b/ShenYin/ShenYin/Assets.xcassets/mode/mode_jazz.imageset/Group_2307@2x.png
new file mode 100644 (file)
index 0000000..9ac3ca0
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mode/mode_jazz.imageset/Group_2307@2x.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_jazz.imageset/Group_2307@3x.png b/ShenYin/ShenYin/Assets.xcassets/mode/mode_jazz.imageset/Group_2307@3x.png
new file mode 100644 (file)
index 0000000..9815aa5
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mode/mode_jazz.imageset/Group_2307@3x.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_normal.imageset/Contents.json b/ShenYin/ShenYin/Assets.xcassets/mode/mode_normal.imageset/Contents.json
new file mode 100644 (file)
index 0000000..2d6859b
--- /dev/null
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Group_2301.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Group_2301@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Group_2301@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_normal.imageset/Group_2301.png b/ShenYin/ShenYin/Assets.xcassets/mode/mode_normal.imageset/Group_2301.png
new file mode 100644 (file)
index 0000000..306dba1
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mode/mode_normal.imageset/Group_2301.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_normal.imageset/Group_2301@2x.png b/ShenYin/ShenYin/Assets.xcassets/mode/mode_normal.imageset/Group_2301@2x.png
new file mode 100644 (file)
index 0000000..6dc86c6
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mode/mode_normal.imageset/Group_2301@2x.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_normal.imageset/Group_2301@3x.png b/ShenYin/ShenYin/Assets.xcassets/mode/mode_normal.imageset/Group_2301@3x.png
new file mode 100644 (file)
index 0000000..fe74fe3
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mode/mode_normal.imageset/Group_2301@3x.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_rock.imageset/Contents.json b/ShenYin/ShenYin/Assets.xcassets/mode/mode_rock.imageset/Contents.json
new file mode 100644 (file)
index 0000000..db7b555
--- /dev/null
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Group_2304.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Group_2304@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Group_2304@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_rock.imageset/Group_2304.png b/ShenYin/ShenYin/Assets.xcassets/mode/mode_rock.imageset/Group_2304.png
new file mode 100644 (file)
index 0000000..11533a9
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mode/mode_rock.imageset/Group_2304.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_rock.imageset/Group_2304@2x.png b/ShenYin/ShenYin/Assets.xcassets/mode/mode_rock.imageset/Group_2304@2x.png
new file mode 100644 (file)
index 0000000..dca2d3a
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mode/mode_rock.imageset/Group_2304@2x.png differ
diff --git a/ShenYin/ShenYin/Assets.xcassets/mode/mode_rock.imageset/Group_2304@3x.png b/ShenYin/ShenYin/Assets.xcassets/mode/mode_rock.imageset/Group_2304@3x.png
new file mode 100644 (file)
index 0000000..5d6e42b
Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/mode/mode_rock.imageset/Group_2304@3x.png differ
index dcaa1d8..90b78c5 100644 (file)
@@ -20,9 +20,9 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
         
         App.shared.window = window
         setConfig()
-
-//        window?.rootViewController = UINavigationController(rootViewController: SetAccountVC())
         window?.rootViewController = BaseTC()
+//        window?.rootViewController = UINavigationController(rootViewController: TextTranlateVC())
+        
     }
 
     func sceneDidDisconnect(_ scene: UIScene) {
index 52f45b3..7ad014d 100644 (file)
@@ -136,7 +136,7 @@ public class BaseNavigationBar: UIView {
         
         titleLabel.do { (v) in
             v.textColor = .rgb(0x121212)
-            v.font = .medium(20)
+            v.font = .medium(16)
             v.textAlignment = .center
             v.lineBreakMode = .byTruncatingTail
             v.text = navTitle
@@ -191,7 +191,7 @@ public class BaseNavigationBar: UIView {
                 else{
                     v.setTitle(item.title!, for: .normal)
                 }
-                v.addTarget(self, action: item.action!, for: .touchUpInside)
+                v.addTarget(item.target, action: item.action!, for: .touchUpInside)
             }
             views.append(rightBtn)
             x = x + w
index 383c318..afa86ac 100644 (file)
@@ -55,6 +55,6 @@ class BaseTC:UITabBarController{
         self.tabBar.backgroundColor = .white
         view.backgroundColor = .color(.bgColor)
 
-        self.selectedIndex = 2
+        self.selectedIndex = 4
     }
 }
diff --git a/ShenYin/ShenYin/UI/Home/FieldRecording/FieldRecordingCell.swift b/ShenYin/ShenYin/UI/Home/FieldRecording/FieldRecordingCell.swift
new file mode 100644 (file)
index 0000000..c5a651c
--- /dev/null
@@ -0,0 +1,134 @@
+//
+//  Fi.swift
+//  ShenYin
+//
+//  Created by liangshi on 2025/8/26.
+//
+
+import UIKit
+
+/// Ai回应模型
+public class UBAiResponse {
+    /// 类型,
+    /// 0:AI录音解析错误(只发类型即可,后面字节均不发)
+    /// 1:AI录音解析内容
+    /// 2:AI回应内容
+    /// 3:AI回应错误(只发类型即可,后面字节均不发)
+    /// 4:AI回应结束(只发类型即可,后面字节均不发)
+    public var type: Int = 0
+    /// 类型 start middle end
+    public var state:String = ""
+    
+    ///  回复id
+    public var reponseId: String = ""
+    ///  内容
+    public var content: String = ""
+    ///  累积内容
+    public var totalContent: String = ""
+    
+    
+    init(_ reponseId:String) {
+        self.reponseId = reponseId
+    }
+    
+    public var description: String  {
+        return "UBAiResponse(type: \(type), state:\(state), content:\(content))"
+    }
+}
+
+
+class FieldRecordingCell:BaseTableViewCell{
+    let bgView = UIView()
+    let line = BrokenLineView()
+    let originalLabel = UILabel()
+    let translationLabel = UILabel()
+    
+    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
+        super.init(style: style, reuseIdentifier: reuseIdentifier)
+        
+    }
+    
+    required init?(coder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+    
+    override func setupViews() {
+        contentView.backgroundColor = .rgb(0xF6F6F6)
+        
+        bgView.do { v in
+            v.yc.setCornerRadius(12)
+            v.backgroundColor = .white
+        }
+        originalLabel.do { v in
+            v.text = "你好,欢迎使用AI翻译,点击下方按钮立即开始咱们的对话吧"
+            v.font = .regular(14)
+            v.textColor = .hexString("#606D80")
+            v.numberOfLines = 0
+            v.textAlignment = .left
+        }
+        translationLabel.do { v in
+            v.text = "Hello, welcome to AI translation, click the button below now Let's start our conversation"
+            v.font = .regular(14)
+            v.textColor = .hexString("#121212")
+            v.numberOfLines = 0
+            v.textAlignment = .left
+        }
+        line.do { v in
+//            v.backgroundColor = .hexString("#93C6EC")
+        }
+        contentView.addSubview(bgView)
+        bgView.addSubviews([originalLabel,translationLabel,line])
+        
+        
+//        let brokenLineView = BrokenLineView(frame: CGRect(x: 0, y: 0, width: 300, height:100))
+//        addSubview(brokenLineView)
+    }
+    
+    override func setupLayout() {
+        bgView.snp.makeConstraints { make in
+            make.top.bottom.equalToSuperview().inset(10)
+            make.width.lessThanOrEqualTo(kScreenWid - 36)
+            make.left.equalToSuperview().inset(18)
+        }
+        
+        originalLabel.snp.makeConstraints { make in
+            make.top.equalToSuperview().inset(14)
+            make.left.equalToSuperview().inset(10)
+            make.width.lessThanOrEqualTo(kScreenWid - 60)
+        }
+        line.snp.makeConstraints { make in
+            make.left.right.equalToSuperview().inset(10)
+            make.height.equalTo(10)
+            make.top.equalTo(originalLabel.snp.bottom).offset(18)
+        }
+        
+        translationLabel.snp.makeConstraints { make in
+            make.top.equalTo(line.snp.bottom).offset(18)
+            make.left.equalToSuperview().inset(10)
+            make.width.lessThanOrEqualTo(kScreenWid - 60)
+            make.bottom.equalToSuperview().inset(10)
+        }
+    }
+    
+//    var data:UBAiResponse!{
+//        didSet{
+//            if data.type == 1 {
+//                bgView.snp.remakeConstraints { make in
+//                    make.top.bottom.equalToSuperview().inset(10)
+//                    make.right.equalToSuperview().inset(20)
+//                }
+//            }
+//            else{
+//                
+//                bgView.snp.remakeConstraints { make in
+//                    make.top.bottom.equalToSuperview().inset(10)
+//                    make.left.equalToSuperview().inset(20)
+//                }
+//            }
+//            msgLabel.text = data.totalContent
+//        }
+//    }
+}
+
+
+
diff --git a/ShenYin/ShenYin/UI/Home/FieldRecording/FieldRecordingVC.swift b/ShenYin/ShenYin/UI/Home/FieldRecording/FieldRecordingVC.swift
new file mode 100644 (file)
index 0000000..c85d261
--- /dev/null
@@ -0,0 +1,73 @@
+//
+//  FieldRecordingVC.swift
+//  ShenYin
+//
+//  Created by liangshi on 2025/8/6.
+//
+
+import UIKit
+
+class FieldRecordingVC:BaseVC{
+    let toolBar = SendToolBar()
+    let tableView = UITableView(frame: CGRectZero, style: .plain)
+    var dataList = [1,2,3]
+    override func viewDidLoad() {
+        super.viewDidLoad()
+    }
+    override func setupViews() {
+        self.navBar.title = "现场录音"
+        tableView.backgroundColor = .clear
+        tableView.delegate = self
+        tableView.dataSource = self
+        tableView.estimatedRowHeight = 60
+        tableView.separatorStyle = .none
+        tableView.register(FieldRecordingCell.self, forCellReuseIdentifier: FieldRecordingCell.reuseID)
+        view.addSubview(tableView)
+        
+        
+        toolBar.textField.text = ""
+        toolBar.delegate = self
+        view.addSubview(toolBar)
+
+    }
+    override func setupLayout() {
+        toolBar.snp.makeConstraints { make in
+            make.width.centerX.equalToSuperview()
+            make.height.equalTo(52)
+            make.bottom.equalToSuperview().inset(20)
+        }
+        tableView.snp.makeConstraints { make in
+            make.top.equalToSuperview().inset(80)
+            make.left.right.equalToSuperview()
+            make.bottom.equalTo(toolBar.snp.top)
+        }
+    }
+    func scrollToBottom(){
+        if dataList.count > 0 {
+            tableView.scrollToRow(at: IndexPath(row: dataList.count - 1, section: 0), at: .none, animated: true)
+        }
+    }
+}
+extension FieldRecordingVC:UITableViewDelegate,UITableViewDataSource {
+    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+        return dataList.count
+    }
+    
+    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+        let cell = FieldRecordingCell.cell(withTableView: tableView, indexPath: indexPath)
+//        cell.data = dataList[indexPath.row]
+        return cell
+    }
+    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+        
+    }
+}
+extension FieldRecordingVC:SendToolBarDelegate{
+    func sendToolBar(_ toolBar: SendToolBar, _ text: String) {
+        toolBar.textField.resignFirstResponder()
+//        list.append(ChatCellModel(isSend:true,content:text))
+//        tableView.reloadData()
+//        scrollToBottom()
+//        StartburstGlassesSdk.shared().chat.fireText(text)
+    }
+}
index 6197192..da7c364 100644 (file)
@@ -15,11 +15,11 @@ class HistoryRecordCell: BaseTableViewCell {
     let dateLabel = UILabel()
     let typeLabel = UILabel()
     
-    var type:MineCellType = .user{
-        didSet{
-            titleLabel.text = type.title
-        }
-    }
+//    var type:MineCellType = .user{
+//        didSet{
+//            titleLabel.text = type.title
+//        }
+//    }
     
     override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
         super.init(style: style, reuseIdentifier: reuseIdentifier)
index f63ca00..e465258 100644 (file)
@@ -10,7 +10,7 @@ import UIKit
 class HistoryRecordVC: BaseVC{
     let tableView = UITableView(frame: .zero, style: .plain)
     let bottomView = HistoryBottonView()
-    var list:[MineCellType] = [.user,.device,.userAgreement,.privacyPolicy,.language,.update,.feeback,.about]
+    var list = [1,2,3,4,5,6,7,8]
     
     override func viewDidLoad() {
         super.viewDidLoad()
@@ -19,7 +19,7 @@ class HistoryRecordVC: BaseVC{
     override func setupViews() {
         navBar.do { v in
             v.title = "历史录音"
-            let items = [NavigationRightItem(image: UIImage(named: "filter"),target: self, action: #selector(searchAction)),NavigationRightItem(image: UIImage(named: "search"), target: self,action: #selector(searchAction))]
+            let items = [NavigationRightItem(image: UIImage(named: "filter"),target: self, action: #selector(filterAction)),NavigationRightItem(image: UIImage(named: "search"), target: self,action: #selector(searchAction))]
             v.setupRightViews(items)
         }
         
@@ -58,7 +58,7 @@ extension HistoryRecordVC:UITableViewDelegate,UITableViewDataSource {
     
     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
         let cell = HistoryRecordCell.cell(withTableView: tableView, indexPath: indexPath)
-        cell.type = list[indexPath.row]
+//        cell.type = list[indexPath.row]
         return cell
     }
     func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
index 97d14ab..fa414f1 100644 (file)
@@ -38,7 +38,18 @@ enum ShareType:Int{
     }
 }
 
-
+enum GenderType:Int{
+    case man
+    case female
+    var title:String{
+        switch self {
+        case .man:
+            return "男"
+        case .female:
+            return "女"
+        }
+    }
+}
 
 class SelectCell: BaseTableViewCell {
     let bgView = UIView()
@@ -57,7 +68,11 @@ class SelectCell: BaseTableViewCell {
             titleLabel.text = shareType.title
         }
     }
-    
+    var genderType:GenderType = .man{
+        didSet{
+            titleLabel.text = genderType.title
+        }
+    }
     
     override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
         super.init(style: style, reuseIdentifier: reuseIdentifier)
index ff0f65f..fba3b1f 100644 (file)
@@ -8,7 +8,7 @@
 import UIKit
 class RoleListVC: BaseVC{
     let tableView = UITableView(frame: .zero, style: .plain)
-    var list:[MineCellType] = [.user,.device,.userAgreement,.privacyPolicy,.language,.update,.feeback,.about]
+    var list:[MineCellType] = []
     
     override func viewDidLoad() {
         super.viewDidLoad()
diff --git a/ShenYin/ShenYin/UI/Home/textTranslateVC/LanguageSelecteView.swift b/ShenYin/ShenYin/UI/Home/textTranslateVC/LanguageSelecteView.swift
new file mode 100644 (file)
index 0000000..912c90a
--- /dev/null
@@ -0,0 +1,7 @@
+//
+//  LangeuageView.swift
+//  ShenYin
+//
+//  Created by liangshi on 2025/8/26.
+//
+
diff --git a/ShenYin/ShenYin/UI/Home/textTranslateVC/TextTranslateVC.swift b/ShenYin/ShenYin/UI/Home/textTranslateVC/TextTranslateVC.swift
new file mode 100644 (file)
index 0000000..86b897f
--- /dev/null
@@ -0,0 +1,73 @@
+//
+//  TextTranlateVC.swift
+//  ShenYin
+//
+//  Created by liangshi on 2025/8/6.
+//
+
+import UIKit
+
+class TextTranlateVC:BaseVC{
+    let toolBar = SendToolBar()
+    let tableView = UITableView(frame: CGRectZero, style: .plain)
+    var dataList = [1,2,3]
+    override func viewDidLoad() {
+        super.viewDidLoad()
+    }
+    override func setupViews() {
+        self.navBar.title = "文本翻译"
+        tableView.backgroundColor = .clear
+        tableView.delegate = self
+        tableView.dataSource = self
+        tableView.estimatedRowHeight = 60
+        tableView.separatorStyle = .none
+        tableView.register(TranslateCell.self, forCellReuseIdentifier: TranslateCell.reuseID)
+        view.addSubview(tableView)
+        
+        
+        toolBar.textField.text = ""
+        toolBar.delegate = self
+        view.addSubview(toolBar)
+        
+    }
+    override func setupLayout() {
+        toolBar.snp.makeConstraints { make in
+            make.width.centerX.equalToSuperview()
+            make.height.equalTo(52)
+            make.bottom.equalToSuperview().inset(20)
+        }
+        tableView.snp.makeConstraints { make in
+            make.top.equalToSuperview().inset(80)
+            make.left.right.equalToSuperview()
+            make.bottom.equalTo(toolBar.snp.top)
+        }
+    }
+    func scrollToBottom(){
+        if dataList.count > 0 {
+            tableView.scrollToRow(at: IndexPath(row: dataList.count - 1, section: 0), at: .none, animated: true)
+        }
+    }
+}
+extension TextTranlateVC:UITableViewDelegate,UITableViewDataSource {
+    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+        return dataList.count
+    }
+    
+    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+        let cell = TranslateCell.cell(withTableView: tableView, indexPath: indexPath)
+        //        cell.data = dataList[indexPath.row]
+        return cell
+    }
+    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+        
+    }
+}
+extension TextTranlateVC:SendToolBarDelegate{
+    func sendToolBar(_ toolBar: SendToolBar, _ text: String) {
+        toolBar.textField.resignFirstResponder()
+        //        list.append(ChatCellModel(isSend:true,content:text))
+        //        tableView.reloadData()
+        //        scrollToBottom()
+        //        StartburstGlassesSdk.shared().chat.fireText(text)
+    }
+}
diff --git a/ShenYin/ShenYin/UI/Home/textTranslateVC/TranslateCell.swift b/ShenYin/ShenYin/UI/Home/textTranslateVC/TranslateCell.swift
new file mode 100644 (file)
index 0000000..6d455c5
--- /dev/null
@@ -0,0 +1,102 @@
+//
+//  TranslateCell.swift
+//  ShenYin
+//
+//  Created by liangshi on 2025/8/26.
+//
+
+class TranslateCell:BaseTableViewCell{
+    let bgView = UIView()
+    let line = BrokenLineView()
+    let originalLabel = UILabel()
+    let translationLabel = UILabel()
+    
+    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
+        super.init(style: style, reuseIdentifier: reuseIdentifier)
+        
+    }
+    
+    required init?(coder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+    
+    override func setupViews() {
+        contentView.backgroundColor = .rgb(0xF6F6F6)
+        
+        bgView.do { v in
+            v.yc.setCornerRadius(12)
+            v.backgroundColor = .white
+        }
+        originalLabel.do { v in
+            v.text = "你好,欢迎使用AI翻译,点击下方按钮立即开始咱们的对话吧"
+            v.font = .regular(14)
+            v.textColor = .hexString("#606D80")
+            v.numberOfLines = 0
+            v.textAlignment = .left
+        }
+        translationLabel.do { v in
+            v.text = "Hello, welcome to AI translation, click the button below now Let's start our conversation"
+            v.font = .regular(14)
+            v.textColor = .hexString("#121212")
+            v.numberOfLines = 0
+            v.textAlignment = .left
+        }
+        line.do { v in
+            //            v.backgroundColor = .hexString("#93C6EC")
+        }
+        contentView.addSubview(bgView)
+        bgView.addSubviews([originalLabel,translationLabel,line])
+        
+        
+        //        let brokenLineView = BrokenLineView(frame: CGRect(x: 0, y: 0, width: 300, height:100))
+        //        addSubview(brokenLineView)
+    }
+    
+    override func setupLayout() {
+        bgView.snp.makeConstraints { make in
+            make.top.bottom.equalToSuperview().inset(10)
+            make.width.lessThanOrEqualTo(kScreenWid - 36)
+            make.left.equalToSuperview().inset(18)
+        }
+        
+        originalLabel.snp.makeConstraints { make in
+            make.top.equalToSuperview().inset(14)
+            make.left.equalToSuperview().inset(10)
+            make.width.lessThanOrEqualTo(kScreenWid - 60)
+        }
+        line.snp.makeConstraints { make in
+            make.left.right.equalToSuperview().inset(10)
+            make.height.equalTo(10)
+            make.top.equalTo(originalLabel.snp.bottom).offset(18)
+        }
+        
+        translationLabel.snp.makeConstraints { make in
+            make.top.equalTo(line.snp.bottom).offset(18)
+            make.left.equalToSuperview().inset(10)
+            make.width.lessThanOrEqualTo(kScreenWid - 60)
+            make.bottom.equalToSuperview().inset(10)
+        }
+    }
+    
+    //    var data:UBAiResponse!{
+    //        didSet{
+    //            if data.type == 1 {
+    //                bgView.snp.remakeConstraints { make in
+    //                    make.top.bottom.equalToSuperview().inset(10)
+    //                    make.right.equalToSuperview().inset(20)
+    //                }
+    //            }
+    //            else{
+    //
+    //                bgView.snp.remakeConstraints { make in
+    //                    make.top.bottom.equalToSuperview().inset(10)
+    //                    make.left.equalToSuperview().inset(20)
+    //                }
+    //            }
+    //            msgLabel.text = data.totalContent
+    //        }
+    //    }
+}
+
+
+
index f1603d6..a08c322 100644 (file)
@@ -6,19 +6,93 @@
 //
 
 import UIKit
-
-class AboutVC:BaseVC{
+class AboutVC: BaseVC{
+    let tableView = UITableView(frame: .zero, style: .plain)
+    let list:[CustomCellType] = [.update,.userAgreement,.privacyPolicy]
     
     override func viewDidLoad() {
         super.viewDidLoad()
-        
-        
+        // Do any additional setup after loading the view.
     }
     override func setupViews() {
         self.navBar.title = "关于我们"
+        tableView.do { v in
+            v.backgroundColor = .color(.bgColor)
+            v.delegate = self
+            v.dataSource = self
+            v.rowHeight = 52
+            v.sectionHeaderHeight = 52
+            v.separatorStyle = .none
+            v.register(CustomCell1.self, forCellReuseIdentifier: CustomCell1.reuseID)
+            v.register(CustomSectionHeader.self, forHeaderFooterViewReuseIdentifier: CustomSectionHeader.reuseID)
+            v.tableHeaderView = AboutHeaderView(frame: CGRect(x: 0, y: 0, width: kScreenWid, height: 175))
+        }
+        view.addSubview(tableView)
     }
     override func setupLayout() {
+        tableView.snp.makeConstraints { make in
+            make.left.right.bottom.equalToSuperview()
+            make.top.equalTo(kNavBtm)
+        }
+    }
+}
+
+extension AboutVC:UITableViewDelegate,UITableViewDataSource {
+    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+        return list.count
+    }
+
+    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+        let cell = CustomCell1.cell(withTableView: tableView, indexPath: indexPath)
+        cell.type = list[indexPath.row]
+        let rect = CGRect(x: 0, y: 0, width: kScreenWid - 36, height: 52)
+        if indexPath.row == 0 {
+            cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.topLeft,.topRight], cornerRadii: CGSize(width: 8, height: 8))
+        }
+        else if indexPath.row == list.count - 1{
+            cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.bottomLeft,.bottomRight], cornerRadii: CGSize(width: 8, height: 8))
+        }
+        else{
+            cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.allCorners], cornerRadii: CGSize(width: 0, height: 0))
+        }
+        return cell
+    }
+    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+        let data = list[indexPath.row]
+        
+    }
+}
+
+
+class AboutHeaderView: BaseView {
+    let icon = UIImageView()
+    let titleLabel = UILabel()
+
+    override func setupViews() {
+        addSubviews([titleLabel,icon])
         
+        icon.do { v in
+            v.image = UIImage(named: "logo_1")
+        }
+        titleLabel.do { (v) in
+            v.textColor = .hexString("#666666")
+            v.font = .regular(14)
+            v.textAlignment = .left
+            v.text = "当前版本:2.1.1"
+        }
+
+    }
+    
+    override func setupLayout() {
+        icon.snp.makeConstraints { (m) in
+            m.size.equalTo(70)
+            m.centerX.equalToSuperview()
+            m.top.equalToSuperview().offset(50)
+        }
+        titleLabel.snp.makeConstraints { (m) in
+            m.top.equalTo(icon.snp.bottom).offset(12)
+            m.centerX.equalToSuperview()
+        }
     }
     
 }
index 2d67f7f..c4510ad 100644 (file)
@@ -23,9 +23,10 @@ class AccountSetVC: BaseVC{
             v.rowHeight = 52
             v.sectionHeaderHeight = 52
             v.separatorStyle = .none
-            v.register(UserInfoCell.self, forCellReuseIdentifier: CustomCell1.reuseID)
-            v.register(UserInfoImageCell.self, forCellReuseIdentifier: UserInfoImageCell.reuseID)
-            v.register(UserInfoSectionHeader.self, forHeaderFooterViewReuseIdentifier: UserInfoSectionHeader.reuseID)
+            v.register(CustomCell1.self, forCellReuseIdentifier: CustomCell1.reuseID)
+            v.register(CustomSectionHeader.self, forHeaderFooterViewReuseIdentifier: CustomSectionHeader.reuseID)
+            v.tableHeaderView = AccountSetHeaderView(frame: CGRect(x: 0, y: 0, width: kScreenWid, height: 50))
+
         }
         
 
@@ -48,7 +49,7 @@ extension AccountSetVC:UITableViewDelegate,UITableViewDataSource {
         return list[section].list.count
     }
     func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
-        let view = UserInfoSectionHeader.header(withTableView: tableView)
+        let view = CustomSectionHeader.header(withTableView: tableView)
         view.titleLabel.text = list[section].title
         return view
     }
@@ -70,12 +71,75 @@ extension AccountSetVC:UITableViewDelegate,UITableViewDataSource {
     }
     func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
         let data = list[indexPath.section].list[indexPath.row]
-        
+        switch data {
+        case .account:
+            App.shared.goToPage(SetAccountVC())
+        case .phone:
+            App.shared.goToPage(SetPhoneVC())
+        case .email:
+            App.shared.goToPage(SetEmailVC())
+        case .thirdLogin:
+//            App.shared.goToPage(SetAccountVC())
+            break
+        default:
+            break
+        }
     }
 }
 
-extension AccountSetVC{
-    @objc func logoutAction(){
+
+class AccountSetHeaderView: BaseView {
+    let icon = UIImageView()
+    let titleLabel = UILabel()
+    let valueLabel = UILabel()
+    let nextIcon = UIImageView()
+    override func setupViews() {
+        addSubviews([titleLabel,icon,valueLabel,nextIcon])
         
+        icon.do { v in
+            v.image = UIImage(named: "head")
+            v.yc.setCornerRadius(27)
+            v.backgroundColor = .black.withAlphaComponent(0.1)
+        }
+        titleLabel.do { (v) in
+            v.textColor = .rgb(0x121212)
+            v.font = .regular(20)
+            v.textAlignment = .left
+            v.text = "Juliaxxxx"
+        }
+        valueLabel.do { (v) in
+            v.textColor = .rgb(0x666666)
+            v.font = .regular(14)
+            v.textAlignment = .left
+            v.text = "手机号:+86 134****4811"
+        }
+        nextIcon.image = UIImage(named: "arrow_next")
+        yc.addTap(target: self, action: #selector(tapAction))
+    }
+    
+    override func setupLayout() {
+        icon.snp.makeConstraints { (m) in
+            m.width.equalTo(54)
+            m.height.equalTo(54)
+            m.left.equalToSuperview().inset(15)
+            m.top.equalToSuperview()
+        }
+        titleLabel.snp.makeConstraints { (m) in
+            m.top.equalToSuperview().inset(5)
+            m.left.equalTo(icon.snp.right).offset(15)
+        }
+        valueLabel.snp.makeConstraints { (m) in
+            m.bottom.equalToSuperview().inset(5)
+            m.left.equalTo(icon.snp.right).offset(15)
+        }
+        nextIcon.snp.makeConstraints { (m) in
+            m.width.equalTo(8)
+            m.height.equalTo(12)
+            m.right.equalToSuperview().inset(15)
+            m.centerY.equalToSuperview()
+        }
+    }
+    @objc func tapAction(){
+        App.shared.goToPage(UserInfoVC())
     }
 }
diff --git a/ShenYin/ShenYin/UI/Mine/InstructionsVC.swift b/ShenYin/ShenYin/UI/Mine/InstructionsVC.swift
new file mode 100644 (file)
index 0000000..eb76678
--- /dev/null
@@ -0,0 +1,66 @@
+//
+//  InstructionsVC.swift
+//  ShenYin
+//
+//  Created by liangshi on 2025/8/26.
+//
+
+import UIKit
+class InstructionsVC: BaseVC{
+    let tableView = UITableView(frame: .zero, style: .plain)
+    let list:[CustomCellType] = [.notice,.language]
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        // Do any additional setup after loading the view.
+    }
+    override func setupViews() {
+        self.navBar.title = "电子说明书"
+        tableView.do { v in
+            v.backgroundColor = .color(.bgColor)
+            v.delegate = self
+            v.dataSource = self
+            v.rowHeight = 52
+            v.sectionHeaderHeight = 52
+            v.separatorStyle = .none
+            v.register(CustomCell1.self, forCellReuseIdentifier: CustomCell1.reuseID)
+            v.tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: kScreenHei, height: 20))
+        }
+        
+        
+        
+        view.addSubview(tableView)
+    }
+    override func setupLayout() {
+        tableView.snp.makeConstraints { make in
+            make.left.right.bottom.equalToSuperview()
+            make.top.equalTo(kNavBtm)
+        }
+    }
+}
+
+extension InstructionsVC:UITableViewDelegate,UITableViewDataSource {
+    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+        return list.count
+    }
+    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+        let cell = CustomCell1.cell(withTableView: tableView, indexPath: indexPath)
+//        cell.type = list[indexPath.row]
+        cell.titleLabel.text = "Deep Gen2 Max"
+        let rect = CGRect(x: 0, y: 0, width: kScreenWid - 36, height: 52)
+        if indexPath.row == 0 {
+            cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.topLeft,.topRight], cornerRadii: CGSize(width: 12, height: 12))
+        }
+        else if indexPath.row == list.count - 1{
+            cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.bottomLeft,.bottomRight], cornerRadii: CGSize(width: 12, height: 12))
+        }
+        else{
+            cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.allCorners], cornerRadii: CGSize(width: 0, height: 0))
+        }
+        return cell
+    }
+    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+        let data = list[indexPath.row]
+
+    }
+}
index 06ff02b..e67cfdf 100644 (file)
@@ -18,9 +18,7 @@ class PasswordView: BaseView {
             v.keyboardType = .phonePad
             v.placeholder = "请输入密码"
             v.isSecureTextEntry = true
-        }
-        
-        
+        }        
         btn.setImage(UIImage(named: "pwd_close"), for: .normal)
         btn.setImage(UIImage(named: "pwd_open"), for: .selected)
         btn.addTarget(self, action: #selector(btnAction), for: .touchUpInside)
diff --git a/ShenYin/ShenYin/UI/Mine/MoreSetVC.swift b/ShenYin/ShenYin/UI/Mine/MoreSetVC.swift
new file mode 100644 (file)
index 0000000..3008cda
--- /dev/null
@@ -0,0 +1,107 @@
+//
+//  MoreSetVC.swift
+//  ShenYin
+//
+//  Created by liangshi on 2025/8/26.
+//
+
+import UIKit
+class MoreSetVC: BaseVC{
+    let tableView = UITableView(frame: .zero, style: .plain)
+    let list:[CustomCellType] = [.notice,.language]
+    
+    let switchBtn = CustomButton()
+    let logoutBtn = CustomButton()
+    let deactivateBtn = CustomButton()
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        // Do any additional setup after loading the view.
+    }
+    override func setupViews() {
+        self.navBar.title = "更多设置"
+        tableView.do { v in
+            v.backgroundColor = .color(.bgColor)
+            v.delegate = self
+            v.dataSource = self
+            v.rowHeight = 52
+            v.sectionHeaderHeight = 52
+            v.separatorStyle = .none
+            v.register(CustomCell1.self, forCellReuseIdentifier: CustomCell1.reuseID)
+            v.tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: kScreenHei, height: 20))
+            v.bounces = false
+        }
+        
+        switchBtn.set(title: "切换账号",style: .theme3, target: self, action: #selector(swictAction))
+        logoutBtn.set(title: "退出登录",style: .theme3, target: self, action: #selector(logoutAction))
+        deactivateBtn.set(title: "注销账号",style: .theme3, target: self, action: #selector(deactivateAction))
+        
+        view.addSubviews([tableView,switchBtn,logoutBtn,deactivateBtn])
+        
+        
+    }
+    override func setupLayout() {
+        tableView.snp.makeConstraints { make in
+            make.left.right.equalToSuperview()
+            make.top.equalToSuperview().inset(kNavBtm)
+            make.height.equalTo(124)
+        }
+        deactivateBtn.snp.makeConstraints { make in
+            make.bottom.equalToSuperview().inset(kSafeBtm + 10)
+            make.left.right.equalToSuperview().inset(18)
+            make.height.equalTo(55)
+        }
+        logoutBtn.snp.makeConstraints { make in
+            make.bottom.equalTo(deactivateBtn.snp.top).offset(-20)
+            make.left.right.equalToSuperview().inset(18)
+            make.height.equalTo(55)
+        }
+        switchBtn.snp.makeConstraints { make in
+            make.bottom.equalTo(logoutBtn.snp.top).offset(-20)
+            make.left.right.equalToSuperview().inset(18)
+            make.height.equalTo(55)
+        }
+    }
+    @objc func swictAction(){
+        
+    }
+    @objc func logoutAction(){
+        
+    }
+    @objc func deactivateAction(){
+        
+    }
+}
+
+extension MoreSetVC:UITableViewDelegate,UITableViewDataSource {
+    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+        return list.count
+    }
+    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+        let cell = CustomCell1.cell(withTableView: tableView, indexPath: indexPath)
+        cell.type = list[indexPath.row]
+        let rect = CGRect(x: 0, y: 0, width: kScreenWid - 36, height: 52)
+        if indexPath.row == 0 {
+            cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.topLeft,.topRight], cornerRadii: CGSize(width: 12, height: 12))
+        }
+        else if indexPath.row == list.count - 1{
+            cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.bottomLeft,.bottomRight], cornerRadii: CGSize(width: 12, height: 12))
+        }
+        else{
+            cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.allCorners], cornerRadii: CGSize(width: 0, height: 0))
+        }
+        return cell
+    }
+    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+        let data = list[indexPath.row]
+        switch data {
+        case .language:
+            App.shared.goToPage(LanguageVC())
+        case .notice:
+//            App.shared.goToPage(SetPhoneVC())
+            break
+        default:
+            break
+        }
+    }
+}
diff --git a/ShenYin/ShenYin/UI/Mine/MyDeviceList.swift b/ShenYin/ShenYin/UI/Mine/MyDeviceList.swift
new file mode 100644 (file)
index 0000000..08c9eeb
--- /dev/null
@@ -0,0 +1,126 @@
+//
+//  MyDeviceList.swift
+//  ShenYin
+//
+//  Created by liangshi on 2025/8/26.
+//
+
+import UIKit
+class MyDeviceList: BaseVC{
+    let tableView = UITableView(frame: .zero, style: .plain)
+    let bottomView = HistoryBottonView()
+    var list = [1,2,3,4,5,6,7,8]
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        // Do any additional setup after loading the view.
+    }
+    override func setupViews() {
+        navBar.do { v in
+            v.title = "设备详情"
+        }
+        
+        tableView.do { v in
+            v.backgroundColor = .rgb(0xF7F7F7)
+            v.delegate = self
+            v.dataSource = self
+            v.estimatedRowHeight = 84
+            v.separatorStyle = .none
+            v.register(MyDeviceListCell.self, forCellReuseIdentifier: MyDeviceListCell.reuseID)
+        }
+        view.addSubviews([tableView])
+    }
+    override func setupLayout() {
+        tableView.snp.makeConstraints { make in
+            make.left.right.equalToSuperview()
+            make.top.equalTo(kNavBtm)
+            make.bottom.equalToSuperview()
+        }
+    }
+}
+
+extension MyDeviceList:UITableViewDelegate,UITableViewDataSource {
+    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+        return list.count
+    }
+    
+    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+        let cell = MyDeviceListCell.cell(withTableView: tableView, indexPath: indexPath)
+        //        cell.type = list[indexPath.row]
+        return cell
+    }
+    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+        let data = list[indexPath.row]
+        
+    }
+//    // 实现滑动删除功能
+//    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
+//        if editingStyle == .delete {
+//            // 从数据源中移除对应数据
+//            list.remove(at: indexPath.row)
+//            // 从表格中删除对应行
+//            tableView.deleteRows(at: [indexPath], with:.fade)
+//        }
+//    }
+//    
+//    // 允许编辑
+//    func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
+//        return true
+//    }
+}
+class MyDeviceListCell: BaseTableViewCell {
+    let bgView = UIView()
+    let playIcon = UIImageView()
+    let titleLabel = UILabel()
+
+    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
+        super.init(style: style, reuseIdentifier: reuseIdentifier)
+    }
+    
+    required init?(coder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+    override func setupViews() {
+        contentView.addSubview(bgView)
+        bgView.addSubviews([playIcon,titleLabel])
+        
+        backgroundColor = .rgb(0xF7F7F7)
+        contentView.backgroundColor = .clear
+        selectionStyle = .none
+        bgView.do { v in
+            v.backgroundColor = UIColor.white
+            v.layer.cornerRadius = 12
+            v.layer.masksToBounds = true
+        }
+        titleLabel.do { (v) in
+            v.textColor = .rgb(0x121212)
+            v.font = .bold(16)
+            v.textAlignment = .left
+            v.text = "Deep Gen2 Max"
+        }
+        
+        playIcon.do { v in
+            v.image = UIImage(named: "device_list_icon")
+        }
+    }
+    
+    override func setupLayout() {
+        bgView.snp.makeConstraints { (m) in
+            m.left.right.equalToSuperview().inset(15)
+            m.top.equalToSuperview().inset(5)
+            m.bottom.equalToSuperview().inset(5)
+            m.height.equalTo(74)
+        }
+        
+        playIcon.snp.makeConstraints { (m) in
+            m.size.equalTo(24)
+            m.centerY.equalToSuperview()
+            m.left.equalToSuperview().inset(16)
+        }
+        titleLabel.snp.makeConstraints { (m) in
+            m.centerY.equalToSuperview()
+            m.left.equalToSuperview().offset(56)
+        }
+       
+    }
+}
diff --git a/ShenYin/ShenYin/UI/Mine/Root/MineBannerView.swift b/ShenYin/ShenYin/UI/Mine/Root/MineBannerView.swift
new file mode 100644 (file)
index 0000000..1e99d12
--- /dev/null
@@ -0,0 +1,127 @@
+//
+//  MineBannerView.swift
+//  ShenYin
+//
+//  Created by liangshi on 2025/8/26.
+//
+
+
+import Foundation
+import UIKit
+import FSPagerView
+
+class BannerModel: NSObject {
+    /// id
+    var id = ""
+    /// 图片
+    var imgPath = ""
+    /// 跳转类型 -1不跳转 0外链
+    var jumpType = -1
+    /// 跳转地址
+    var jumpValue = ""
+}
+
+final class MineBannerView: BaseView {
+    private var dataArray = [BannerModel]()
+    private let pagerView = FSPagerView()
+    private let pageControl = FSPageControl()
+
+    public func config(list:[BannerModel]) {
+        self.dataArray = list
+        self.pageControl.numberOfPages = dataArray.count
+        self.pagerView.reloadData()
+    }
+    override func setupLayout() {
+        addSubview(pagerView)
+        addSubview(pageControl)
+
+        pagerView.snp.makeConstraints { (m) in
+            m.top.bottom.equalToSuperview()
+            m.left.right.equalToSuperview()
+        }
+        pageControl.snp.makeConstraints { (m) in
+            m.width.equalToSuperview()
+            m.height.equalTo(25)
+            m.bottom.equalToSuperview().inset(10)
+            m.centerX.equalToSuperview()
+        }
+    }
+    override func setupViews() {
+        backgroundColor = .clear
+        clipsToBounds = true
+        pagerView.do { v in
+            v.dataSource = self
+            v.delegate = self
+            v.interitemSpacing = 18
+            v.bounces = false
+            v.isInfinite = true
+            v.automaticSlidingInterval = 4
+            v.itemSize = CGSize(width: kScreenWid - 36 , height: 126)
+            v.register(PictureViewCell.self, forCellWithReuseIdentifier: "PictureViewCell")
+        }
+        
+        pageControl.do { v in
+            v.contentHorizontalAlignment = .center
+            v.hidesForSinglePage = true
+            v.setFillColor(UIColor.white.withAlphaComponent(0.4), for: .normal)
+            v.setFillColor(.white, for: .selected)
+        }
+    }
+}
+
+extension MineBannerView: FSPagerViewDataSource, FSPagerViewDelegate {
+    func numberOfItems(in pagerView: FSPagerView) -> Int {
+        return dataArray.count
+    }
+    
+    func pagerView(_ pagerView: FSPagerView, cellForItemAt index: Int) -> FSPagerViewCell {
+        let cell = pagerView.dequeueReusableCell(withReuseIdentifier: "PictureViewCell", at: index) as! PictureViewCell
+        let model = dataArray[index]
+//        cell.picture.kf.setImage(with: model.imgPath.yc.asUrl)
+        cell.picture.image = UIImage(named: model.imgPath)
+        return cell
+    }
+    
+    func pagerViewWillEndDragging(_ pagerView: FSPagerView, targetIndex: Int) {
+        self.pageControl.currentPage = targetIndex
+    }
+    func pagerViewDidEndScrollAnimation(_ pagerView: FSPagerView) {
+        self.pageControl.currentPage = pagerView.currentIndex
+    }
+    
+    func pagerView(_ pagerView: FSPagerView, didSelectItemAt index: Int){
+        let model = dataArray[index]
+//        if model.jumpType == 0 {
+//            if let url = model.jumpValue.fragmentUrl {
+//                let request = URLRequest(url: url)
+//                let params = BaseWebViewParams(request:request)
+//                let vc = BaseWebViewController(initData: params)
+//                UIViewController.yc.currentNav?.pushViewController(vc, animated: true)
+//            } //UIApplication.shared.canOpenURL(URL(string: ))
+//        }
+    }
+}
+
+
+fileprivate class PictureViewCell: FSPagerViewCell {
+    let picture = UIImageView()
+    
+    override init(frame: CGRect) {
+        super.init(frame: frame)
+        
+        addSubview(picture)
+        
+        picture.snp.makeConstraints { (m) in
+            m.edges.equalToSuperview()
+        }
+        
+        picture.do { (v) in
+            v.yc.setCornerRadius(8)
+        }
+//        picture.backgroundColor = .lightGray
+    }
+    
+    required init?(coder aDecoder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+}
index d6aee46..e4f3286 100644 (file)
@@ -8,29 +8,20 @@
 import UIKit
 
 public enum MineCellType: Int {
-    case user
-    case device
-    case userAgreement
-    case privacyPolicy
-    case language
+    case instructions
     case update
+    case more
     case feeback
     case about
     
     var title:String{
         switch self {
-        case .user:
-            return "用户管理"
-        case .device:
-            return "设备详情"
-        case .userAgreement:
-            return "用户协议"
-        case .privacyPolicy:
-            return "隐私政策"
-        case .language:
-            return "语言设置"
+        case .instructions:
+            return "电子说明书"
         case .update:
             return "固件升级"
+        case .more:
+            return "更多设置"
         case .feeback:
             return "意见反馈"
         case .about:
@@ -39,18 +30,12 @@ public enum MineCellType: Int {
     }
     var icon:String{
         switch self {
-        case .user:
-            return "mine_cell_user"
-        case .device:
-            return "mine_cell_device"
-        case .userAgreement:
-            return "mine_cell_userAgreement"
-        case .privacyPolicy:
-            return "mine_cell_privacy"
-        case .language:
-            return "mine_cell_language"
+        case .instructions:
+            return "mine_cell_instru"
         case .update:
             return "mine_cell_update"
+        case .more:
+            return "mine_cell_more"
         case .feeback:
             return "mine_cell_feedback"
         case .about:
@@ -62,17 +47,18 @@ public enum MineCellType: Int {
 
 class MineCell: BaseTableViewCell {
     let bgView = UIView()
-    let icon = UIImageView()
     let titleLabel = UILabel()
     let nextIcon = UIImageView()
+    let valueIcon = UIImageView()
     
-    var type:MineCellType = .user{
+    var type:MineCellType = .update{
         didSet{
-            icon.image = UIImage(named: type.icon)
             titleLabel.text = type.title
+            valueIcon.image = UIImage(named: type.icon)
         }
     }
     
+    
     override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
         super.init(style: style, reuseIdentifier: reuseIdentifier)
     }
@@ -82,19 +68,17 @@ class MineCell: BaseTableViewCell {
     }
     override func setupViews() {
         contentView.addSubview(bgView)
-        bgView.addSubviews([titleLabel,icon,nextIcon])
+        bgView.addSubviews([titleLabel,nextIcon,valueIcon])
         
         backgroundColor = .rgb(0xF7F7F7)
         contentView.backgroundColor = .clear
         selectionStyle = .none
         bgView.do { v in
             v.backgroundColor = UIColor.white
-            v.layer.cornerRadius = 12
-            v.layer.masksToBounds = true
         }
         titleLabel.do { (v) in
             v.textColor = .rgb(0x121212)
-            v.font = .bold(12)
+            v.font = .bold(14)
             v.textAlignment = .left
         }
         nextIcon.image = UIImage(named: "arrow_next")
@@ -102,10 +86,14 @@ class MineCell: BaseTableViewCell {
     
     override func setupLayout() {
         bgView.snp.makeConstraints { (m) in
-            m.left.right.equalToSuperview().inset(15)
-            m.top.equalToSuperview().inset(6)
-            m.bottom.equalToSuperview().inset(6)
-            m.height.equalTo(48)
+            m.left.right.equalToSuperview().inset(18)
+            m.top.equalToSuperview()
+            m.bottom.equalToSuperview()
+        }
+        titleLabel.snp.makeConstraints { (m) in
+            m.centerY.equalToSuperview()
+            m.left.equalToSuperview().offset(60)
+            m.height.equalToSuperview()
         }
         nextIcon.snp.makeConstraints { (m) in
             m.width.equalTo(8)
@@ -113,17 +101,10 @@ class MineCell: BaseTableViewCell {
             m.right.equalToSuperview().inset(15)
             m.centerY.equalToSuperview()
         }
-        icon.snp.makeConstraints { (m) in
-            m.width.equalTo(24)
-            m.height.equalTo(24)
-            m.left.equalToSuperview().inset(15)
+        valueIcon.snp.makeConstraints { (m) in
+            m.size.equalTo(24)
+            m.left.equalToSuperview().inset(20)
             m.centerY.equalToSuperview()
         }
-        titleLabel.snp.makeConstraints { (m) in
-            m.centerY.equalTo(icon)
-            m.left.equalTo(icon.snp.right).offset(15)
-            m.height.equalToSuperview()
-        }
-        
     }
 }
index 2d382d8..327bb8c 100644 (file)
@@ -7,17 +7,90 @@
 
 import UIKit
 class MineHeaderView: BaseView {
-    let userView = MineUserInfoView()
+    let userInfo = MineUserInfoView()
+    let banner = MineBannerView()
+    
+    override func setupViews() {
+        addSubviews([userInfo,banner])
 
+        let model1 = BannerModel()
+        model1.imgPath = "mine_banner1"
+        let model2 = BannerModel()
+        model2.imgPath = "mine_banner2"
+        let model3 = BannerModel()
+        model3.imgPath = "mine_banner3"
+        banner.config(list: [model1,model2,model3])
+    }
     
+    override func setupLayout() {
+        userInfo.snp.makeConstraints { (m) in
+            m.top.equalToSuperview()
+            m.left.right.equalToSuperview()
+            m.height.equalTo(100)
+        }
+        banner.snp.makeConstraints { (m) in
+            m.height.equalTo(126)
+            m.left.right.equalToSuperview()
+            m.top.equalTo(userInfo.snp.bottom).offset(20)
+        }
+    }
+}
+
+
+class MineUserInfoView: BaseView {
+    let icon = UIImageView()
+    let titleLabel = UILabel()
+    let deviceLabel = UILabel()
     override func setupViews() {
-        backgroundColor = .clear
-        addSubviews([userView])
+        addSubviews([titleLabel,icon,deviceLabel])
+        
+        icon.do { v in
+            v.image = UIImage(named: "head")
+            v.yc.setCornerRadius(40)
+            v.backgroundColor = .white
+        }
+        titleLabel.do { (v) in
+            v.textColor = .rgb(0x121212)
+            v.font = .regular(26)
+            v.textAlignment = .left
+            v.text = "Juliaxxxx"
+           
+        }
+        deviceLabel.do { (v) in
+            v.backgroundColor = .white
+            v.textColor = .rgb(0x666666)
+            v.font = .regular(14)
+            v.textAlignment = .center
+            v.text = "共4个智能设备"
+            v.yc.setCornerRadius(15)
+            v.yc.addTap(target: self, action:#selector(deviceListAction))
+        }
+        yc.addTap(target: self, action: #selector(tapAction))
+        
     }
+    
     override func setupLayout() {
-        userView.snp.makeConstraints { make in
-            make.left.right.equalToSuperview().inset(15)
-            make.top.equalToSuperview().inset(30)
+
+        titleLabel.snp.makeConstraints { (m) in
+            m.top.equalToSuperview().inset(10)
+            m.left.equalToSuperview().inset(38)
         }
+        deviceLabel.snp.makeConstraints { (m) in
+            m.top.equalToSuperview().inset(60)
+            m.left.equalToSuperview().inset(38)
+            m.height.equalTo(30)
+            m.width.equalTo(120)
+        }
+        icon.snp.makeConstraints { (m) in
+            m.size.equalTo(80)
+            m.right.equalToSuperview().inset(38)
+            m.top.equalToSuperview().inset(10)
+        }
+    }
+    @objc func tapAction(){
+        App.shared.goToPage(UserInfoVC())
+    }
+    @objc func deviceListAction(){
+        App.shared.goToPage(MyDeviceList())
     }
 }
diff --git a/ShenYin/ShenYin/UI/Mine/Root/MineOrderView.swift b/ShenYin/ShenYin/UI/Mine/Root/MineOrderView.swift
deleted file mode 100644 (file)
index 7a6f90b..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-//
-//  MineOrderView.swift
-//  ShenYin
-//
-//  Created by liangshi on 2025/7/30.
-//
-
-import UIKit
-class MineOrderView: BaseView {
-    let bgView = UIView()
-    let bgImgView1 = UIImageView()
-    let bgImgView2 = UIImageView()
-    let button1 = MineOrderButton1()
-    let button2 = MineOrderButton1()
-    let button3 = MineOrderButton1()
-
-    override func setupViews() {
-        backgroundColor = .clear
-        addSubviews([bgView])
-        bgView.addSubviews([bgImgView2,bgImgView1,button1,button2,button3])
-        
-        bgImgView1.do { v in
-            v.image = UIImage(named: "mine_order_bg1")
-        }
-        bgImgView2.do { v in
-            v.image = UIImage(named: "mine_order_bg2")
-        }
-        
-    }
-    override func setupLayout() {
-        bgView.snp.makeConstraints { make in
-            make.edges.equalToSuperview()
-        }
-        bgImgView1.snp.makeConstraints { make in
-            make.edges.equalToSuperview()
-        }
-        bgImgView2.snp.makeConstraints { make in
-            make.right.equalToSuperview()
-            make.top.equalToSuperview()
-            make.width.equalTo(135)
-            make.height.equalTo(48)
-        }
-        button1.snp.makeConstraints { make in
-            make.left.equalToSuperview().inset(15)
-            make.top.equalToSuperview().inset(15)
-            make.width.equalTo(200)
-        }
-    }
-}
-class MineOrderButton1: BaseView {
-    let icon = UIImageView()
-    let titleLabel = UILabel()
-    let valueLabel = UILabel()
-    
-    
-    
-    override func setupViews() {
-        addSubviews([titleLabel,icon,valueLabel])
-        
-        icon.do { v in
-            v.image = UIImage(named: "head")
-            v.yc.setCornerRadius(27)
-            v.backgroundColor = .black.withAlphaComponent(0.1)
-        }
-        titleLabel.do { (v) in
-            v.textColor = .white
-            v.font = .bold(16)
-            v.textAlignment = .left
-            v.text = "用户未登录"
-        }
-        valueLabel.do { (v) in
-            v.textColor = .black.withAlphaComponent(0.6)
-            v.font = .medium(14)
-            v.textAlignment = .right
-            v.text = "登录帐号后可查看ID"
-        }
-    }
-    
-    override func setupLayout() {
-        icon.snp.makeConstraints { (m) in
-            m.width.equalTo(32)
-            m.height.equalTo(32)
-            m.left.equalToSuperview().inset(15)
-            m.top.equalToSuperview()
-            m.bottom.equalToSuperview()
-        }
-        titleLabel.snp.makeConstraints { (m) in
-            m.top.equalToSuperview().inset(5)
-            m.left.equalTo(icon.snp.right).offset(15)
-        }
-        valueLabel.snp.makeConstraints { (m) in
-            m.bottom.equalToSuperview().inset(5)
-            m.left.equalTo(icon.snp.right).offset(15)
-        }
-    }
-}
diff --git a/ShenYin/ShenYin/UI/Mine/Root/MineUserInfoView.swift b/ShenYin/ShenYin/UI/Mine/Root/MineUserInfoView.swift
deleted file mode 100644 (file)
index 9fe54fc..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-//
-//  MineUserInfoView.swift
-//  ShenYin
-//
-//  Created by liangshi on 2025/7/30.
-//
-
-import UIKit
-class MineUserInfoView: BaseView {
-    let icon = UIImageView()
-    let titleLabel = UILabel()
-    let valueLabel = UILabel()
-
-
-
-    override func setupViews() {
-        addSubviews([titleLabel,icon,valueLabel])
-
-        icon.do { v in
-            v.image = UIImage(named: "head")
-            v.yc.setCornerRadius(27)
-            v.backgroundColor = .black.withAlphaComponent(0.1)
-        }
-        titleLabel.do { (v) in
-            v.textColor = .rgb(0x121212)
-            v.font = .bold(16)
-            v.textAlignment = .left
-            v.text = "用户未登录"
-        }
-        valueLabel.do { (v) in
-            v.textColor = .rgb(0x999999)
-            v.font = .medium(14)
-            v.textAlignment = .right
-            v.text = "登录帐号后可查看ID"
-        }
-    }
-    
-    override func setupLayout() {
-        icon.snp.makeConstraints { (m) in
-            m.width.equalTo(54)
-            m.height.equalTo(54)
-            m.left.equalToSuperview().inset(15)
-            m.top.equalToSuperview()
-            m.bottom.equalToSuperview()
-        }
-        titleLabel.snp.makeConstraints { (m) in
-            m.top.equalToSuperview().inset(5)
-            m.left.equalTo(icon.snp.right).offset(15)
-        }
-        valueLabel.snp.makeConstraints { (m) in
-            m.bottom.equalToSuperview().inset(5)
-            m.left.equalTo(icon.snp.right).offset(15)
-        }
-        
-    }
-    
-}
index a2f1cca..ea16b54 100644 (file)
@@ -4,11 +4,10 @@
 //
 //  Created by incar on 2024/1/3.
 //
-
 import UIKit
 class MineVC: BaseVC{
     let tableView = UITableView(frame: .zero, style: .plain)
-    let list:[MineCellType] = [.user,.device,.userAgreement,.privacyPolicy,.language,.update,.feeback,.about]
+    let list:[MineCellType] = [.instructions,.update,.more,.feeback,.about]
     
     override func viewDidLoad() {
         super.viewDidLoad()
@@ -17,22 +16,18 @@ class MineVC: BaseVC{
     override func setupViews() {
         self.navBar.title = "我的"
         tableView.do { v in
-            v.backgroundColor = .rgb(0xF7F7F7)
+            v.backgroundColor = .color(.bgColor)
             v.delegate = self
             v.dataSource = self
-            v.rowHeight = 68
+            v.rowHeight = 52
+            v.sectionHeaderHeight = 52
             v.separatorStyle = .none
             v.register(MineCell.self, forCellReuseIdentifier: MineCell.reuseID)
-            v.tableHeaderView = MineHeaderView(frame: CGRect(x: 0, y: 0, width: kScreenWid, height: 150))
+            v.tableHeaderView = MineHeaderView(frame: CGRect(x: 0, y: 0, width: kScreenWid, height: 266))
+            
         }
+
         view.addSubview(tableView)
-        
-        let bar = MineNavBar(frame: navBar.frame)
-        navBar.addSubview(bar)
-        
-//        let data = Data([0x48, 0x65, 0x6C, 0x6C, 0x6F])
-//        let hexString = data.map { String(format: "%02hhx", $0) }.joined()
-//        print(hexString)
     }
     override func setupLayout() {
         tableView.snp.makeConstraints { make in
@@ -43,33 +38,33 @@ class MineVC: BaseVC{
 }
 
 extension MineVC:UITableViewDelegate,UITableViewDataSource {
-    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
-        return 60
-    }
     func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
         return list.count
     }
-    
     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
         let cell = MineCell.cell(withTableView: tableView, indexPath: indexPath)
         cell.type = list[indexPath.row]
+        let rect = CGRect(x: 0, y: 0, width: kScreenWid - 36, height: 52)
+        if indexPath.row == 0 {
+            cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.topLeft,.topRight], cornerRadii: CGSize(width: 8, height: 8))
+        }
+        else if indexPath.row == list.count - 1{
+            cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.bottomLeft,.bottomRight], cornerRadii: CGSize(width: 8, height: 8))
+        }
+        else{
+            cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.allCorners], cornerRadii: CGSize(width: 0, height: 0))
+        }
         return cell
     }
     func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
         let data = list[indexPath.row]
         switch data {
-        case .user:
-            App.shared.goToPage(AboutVC())
-        case .device:
-            App.shared.goToPage(DeviceInfoVC())
-        case .userAgreement:
-            App.shared.goToPage(AboutVC())
-        case .privacyPolicy:
-            App.shared.goToPage(AboutVC())
-        case .language:
-            App.shared.goToPage(LanguageVC())
+        case .instructions:
+            App.shared.goToPage(InstructionsVC())
         case .update:
             App.shared.goToPage(UpdateVC())
+        case .more:
+            App.shared.goToPage(MoreSetVC())
         case .feeback:
             App.shared.goToPage(FeekbackVC())
         case .about:
diff --git a/ShenYin/ShenYin/UI/Mine/UserInfo/AreaVC.swift b/ShenYin/ShenYin/UI/Mine/UserInfo/AreaVC.swift
new file mode 100644 (file)
index 0000000..535849a
--- /dev/null
@@ -0,0 +1,68 @@
+//
+//  AreaVC.swift
+//  ShenYin
+//
+//  Created by liangshi on 2025/8/25.
+//
+
+import UIKit
+class AreaVC: BaseVC{
+    let tableView = UITableView(frame: .zero, style: .plain)
+    var list:[GenderType] = [.man,.female,]
+    var currentType = GenderType.man
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        // Do any additional setup after loading the view.
+    }
+    override func setupViews() {
+        self.navBar.title = "性别"
+        tableView.do { v in
+            v.backgroundColor = .rgb(0xF7F7F7)
+            v.delegate = self
+            v.dataSource = self
+            v.rowHeight = 52
+            v.separatorStyle = .none
+            v.register(SelectCell.self, forCellReuseIdentifier: SelectCell.reuseID)
+        }
+        view.addSubviews([tableView])
+        
+    }
+    override func setupLayout() {
+        tableView.snp.makeConstraints { make in
+            make.left.right.bottom.equalToSuperview()
+            make.top.equalTo(kNavBtm)
+        }
+    }
+    @objc func btnAction(){
+        
+    }
+}
+
+extension AreaVC:UITableViewDelegate,UITableViewDataSource {
+    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+        return list.count
+    }
+    
+    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+        let cell = SelectCell.cell(withTableView: tableView, indexPath: indexPath)
+        cell.genderType = list[indexPath.row]
+        let rect = CGRect(x: 0, y: 0, width: kScreenWid - 36, height: 52)
+        if indexPath.row == 0 {
+            cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.topLeft,.topRight], cornerRadii: CGSize(width: 8, height: 8))
+        }
+        else if indexPath.row == list.count - 1{
+            cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.bottomLeft,.bottomRight], cornerRadii: CGSize(width: 8, height: 8))
+        }
+        else{
+            cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.allCorners], cornerRadii: CGSize(width: 0, height: 0))
+        }
+        cell.selectedIcon.isHidden = cell.genderType != currentType
+        return cell
+    }
+    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+        let data = list[indexPath.row]
+        currentType = data
+        tableView.reloadData()
+    }
+}
index 6a56daf..ca53909 100644 (file)
@@ -16,6 +16,14 @@ public enum CustomCellType: Int {
     case email
     case thirdLogin
     
+    
+    case update
+    case userAgreement
+    case privacyPolicy
+    
+    case notice
+    case language
+    
     case deregister
     
     var title:String{
@@ -38,6 +46,17 @@ public enum CustomCellType: Int {
         case .thirdLogin:
             return "第三方账号"
             
+        case .update:
+            return "检查更新"
+        case .userAgreement:
+            return "用户协议"
+        case .privacyPolicy:
+            return "隐私协议"
+           
+        case .notice:
+            return "系统消息通知"
+        case .language:
+            return "语言设置"
             
         case .deregister:
             return "注销账号"
@@ -51,10 +70,21 @@ class CustomCell1: BaseTableViewCell {
     let bgView = UIView()
     let titleLabel = UILabel()
     let nextIcon = UIImageView()
+    let valueIcon = UIImageView()
+    let valueLabel = UILabel()
     
     var type:CustomCellType = .area{
         didSet{
             titleLabel.text = type.title
+            valueIcon.isHidden = type != .avatar
+            
+            if type == .nickName || type == .gender || type == .area {
+                valueLabel.isHidden = false
+            }
+            else{
+                valueLabel.isHidden = true
+            }
+            valueLabel.text = "123"
         }
     }
 
@@ -68,7 +98,7 @@ class CustomCell1: BaseTableViewCell {
     }
     override func setupViews() {
         contentView.addSubview(bgView)
-        bgView.addSubviews([titleLabel,nextIcon])
+        bgView.addSubviews([titleLabel,nextIcon,valueIcon,valueLabel])
         
         backgroundColor = .rgb(0xF7F7F7)
         contentView.backgroundColor = .clear
@@ -81,7 +111,11 @@ class CustomCell1: BaseTableViewCell {
             v.font = .bold(14)
             v.textAlignment = .left
         }
-        
+        valueIcon.do { v in
+            v.yc.setCornerRadius(24)
+            v.image = UIImage(named: "logo_1")
+            v.isHidden = true
+        }
         nextIcon.image = UIImage(named: "arrow_next")
     }
     
@@ -102,5 +136,17 @@ class CustomCell1: BaseTableViewCell {
             m.right.equalToSuperview().inset(15)
             m.centerY.equalToSuperview()
         }
+        valueIcon.snp.makeConstraints { (m) in
+            m.size.equalTo(24)
+            m.right.equalToSuperview().inset(38)
+            m.centerY.equalToSuperview()
+        }
+        valueLabel.snp.makeConstraints { (m) in
+            m.centerY.equalToSuperview()
+            m.right.equalToSuperview().inset(38)
+            m.height.equalToSuperview()
+        }
     }
+    
+
 }
diff --git a/ShenYin/ShenYin/UI/Mine/UserInfo/CustomSectionHeader.swift b/ShenYin/ShenYin/UI/Mine/UserInfo/CustomSectionHeader.swift
new file mode 100644 (file)
index 0000000..5257ccd
--- /dev/null
@@ -0,0 +1,28 @@
+//
+//  CustomSectionHeader.swift
+//  ShenYin
+//
+//  Created by liangshi on 2025/7/31.
+//
+
+
+class CustomSectionHeader: BaseTableViewSetionHeader {
+    let titleLabel = UILabel()
+    override func setupViews() {
+        contentView.backgroundColor = .color(.bgColor)
+        contentView.addSubview(titleLabel)
+        titleLabel.do { (v) in
+            v.textColor = .black.withAlphaComponent(0.8)
+            v.font = .medium(16)
+            v.textAlignment = .left
+        }
+    }
+    
+    override func setupLayout() {
+        titleLabel.snp.makeConstraints { (m) in
+            m.top.equalToSuperview().inset(10)
+            m.bottom.equalToSuperview()
+            m.left.equalToSuperview().inset(30)
+        }
+    }
+}
diff --git a/ShenYin/ShenYin/UI/Mine/UserInfo/GenderVC.swift b/ShenYin/ShenYin/UI/Mine/UserInfo/GenderVC.swift
new file mode 100644 (file)
index 0000000..6f6b64a
--- /dev/null
@@ -0,0 +1,68 @@
+//
+//  GenderVC.swift
+//  ShenYin
+//
+//  Created by liangshi on 2025/8/25.
+//
+
+import UIKit
+class GenderVC: BaseVC{
+    let tableView = UITableView(frame: .zero, style: .plain)
+    var list:[GenderType] = [.man,.female,]
+    var currentType = GenderType.man
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        // Do any additional setup after loading the view.
+    }
+    override func setupViews() {
+        self.navBar.title = "性别"
+        tableView.do { v in
+            v.backgroundColor = .rgb(0xF7F7F7)
+            v.delegate = self
+            v.dataSource = self
+            v.rowHeight = 52
+            v.separatorStyle = .none
+            v.register(SelectCell.self, forCellReuseIdentifier: SelectCell.reuseID)
+        }
+        view.addSubviews([tableView])
+        
+    }
+    override func setupLayout() {
+        tableView.snp.makeConstraints { make in
+            make.left.right.bottom.equalToSuperview()
+            make.top.equalTo(kNavBtm)
+        }
+    }
+    @objc func btnAction(){
+        
+    }
+}
+
+extension GenderVC:UITableViewDelegate,UITableViewDataSource {
+    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+        return list.count
+    }
+    
+    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+        let cell = SelectCell.cell(withTableView: tableView, indexPath: indexPath)
+        cell.genderType = list[indexPath.row]
+        let rect = CGRect(x: 0, y: 0, width: kScreenWid - 36, height: 52)
+        if indexPath.row == 0 {
+            cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.topLeft,.topRight], cornerRadii: CGSize(width: 8, height: 8))
+        }
+        else if indexPath.row == list.count - 1{
+            cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.bottomLeft,.bottomRight], cornerRadii: CGSize(width: 8, height: 8))
+        }
+        else{
+            cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.allCorners], cornerRadii: CGSize(width: 0, height: 0))
+        }
+        cell.selectedIcon.isHidden = cell.genderType != currentType
+        return cell
+    }
+    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+        let data = list[indexPath.row]
+        currentType = data
+        tableView.reloadData()
+    }
+}
diff --git a/ShenYin/ShenYin/UI/Mine/UserInfo/NickNameVC.swift b/ShenYin/ShenYin/UI/Mine/UserInfo/NickNameVC.swift
new file mode 100644 (file)
index 0000000..74a2ed9
--- /dev/null
@@ -0,0 +1,73 @@
+//
+//  NickNameVC.swift
+//  ShenYin
+//
+//  Created by liangshi on 2025/8/25.
+//
+
+import UIKit
+
+class NickNameVC:BaseVC{
+    
+    let titleLabel = UILabel()
+    let phoneView = CustomInputView()
+    let loginBtn = CustomButton()
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+    }
+    override func setupViews(){
+        self.navBar.title = "修改安全邮箱"
+        view.backgroundColor = .color(.bgColor)
+        
+        titleLabel.do { v in
+            v.text = "请输入新的安全邮箱地址"
+            v.font = .medium(18)
+            v.textColor = .hexString("#121212")
+        }
+        phoneView.do { v in
+            v.textField.placeholder = "请输入邮箱地址"
+        }
+        loginBtn.set(title: "下一步",style: .theme1, target: self, action: #selector(loginAction))
+        view.addSubviews([titleLabel,phoneView,loginBtn])
+        
+    }
+    override func setupLayout(){
+        
+        titleLabel.snp.makeConstraints { make in
+            make.top.equalToSuperview().offset(kNavBtm + 30)
+            make.left.right.equalToSuperview().inset(36)
+        }
+        phoneView.snp.makeConstraints { make in
+            make.top.equalTo(titleLabel.snp.bottom).offset(16)
+            make.left.right.equalToSuperview().inset(36)
+        }
+        
+        loginBtn.snp.makeConstraints { make in
+            make.top.equalTo(phoneView.snp.bottom).offset(40)
+            make.left.right.equalToSuperview().inset(51)
+            make.height.equalTo(55)
+        }
+        
+    }
+    
+}
+
+extension NickNameVC{
+    
+    @objc func loginAction(){
+        guard let pwd1 = phoneView.textField.value else{
+            YLprogressHUD.showAutoHiden("请输入邮箱地址")
+            return
+        }
+        //        YLprogressHUD.showLoading()
+        //        LoginVM.login(phone: phone, code: code) {[weak self] result in
+        //            if result.isSuccess{
+        //                YLprogressHUD.showSuccess {
+        //                    self?.view.window?.rootViewController = BaseTC()
+        //                }
+        //            }
+        //            YLprogressHUD.showAutoHiden(result.msg)
+        //        }
+    }
+}
index 58c7540..00f4f51 100644 (file)
+////
+////  UserInfoCell.swift
+////  ShenYin
+////
+////  Created by liangshi on 2025/7/30.
+////
 //
-//  UserInfoCell.swift
-//  ShenYin
+//import UIKit
 //
-//  Created by liangshi on 2025/7/30.
+//public enum UserInfoCellType: Int {
+//    case avatar
+//    case nickName
+//    case gender
+//    case area
+//    
+//    
+//    case account
+//    case phone
+//    case email
+//    case thirdLogin
+//    
+//    case deregister
+//    
+//    var title:String{
+//        switch self {
+//        case .avatar:
+//            return "头像"
+//        case .nickName:
+//            return "昵称"
+//        case .gender:
+//            return "性别"
+//        case .area:
+//            return "国家与地区"
+//            
+//        case .account:
+//            return "账号密码"
+//        case .phone:
+//            return "安全手机"
+//        case .email:
+//            return "安全邮箱"
+//        case .thirdLogin:
+//            return "第三方账号"
+//           
+//        
+//        case .deregister:
+//            return "注销账号"
+//        }
+//    }
+//    
+//}
+//
+//
+//class UserInfoCell: BaseTableViewCell {
+//    let bgView = UIView()
+//    let icon = UIImageView()
+//    let titleLabel = UILabel()
+//    let valueLabel = UILabel()
+//    let nextIcon = UIImageView()
+//    
+//    var type:UserInfoCellType = .avatar{
+//        didSet{
+//            titleLabel.text = type.title
+//            valueLabel.text = "1111"
+//        }
+//    }
+//    
+//    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
+//        super.init(style: style, reuseIdentifier: reuseIdentifier)
+//    }
+//    
+//    required init?(coder: NSCoder) {
+//        fatalError("init(coder:) has not been implemented")
+//    }
+//    override func setupViews() {
+//        contentView.addSubview(bgView)
+//        bgView.addSubviews([titleLabel,icon,valueLabel,nextIcon])
+//        
+//        backgroundColor = .clear
+//        contentView.backgroundColor = .clear
+//        selectionStyle = .none
+//        bgView.do { v in
+//            v.backgroundColor = UIColor.black.withAlphaComponent(0.04)
+//            v.layer.borderColor = UIColor.black.withAlphaComponent(0.1).cgColor
+//            v.layer.borderWidth = 0.5
+//            v.layer.cornerRadius = 12
+//            v.layer.masksToBounds = true
+//        }
+//        titleLabel.do { (v) in
+//            v.textColor = .white
+//            v.font = .medium(16)
+//            v.textAlignment = .left
+//        }
+//        valueLabel.do { (v) in
+//            v.textColor = .black.withAlphaComponent(0.8)
+//            v.font = .medium(14)
+//            v.textAlignment = .right
+//        }
+//        nextIcon.image = UIImage(named: "arrow_next")
+//    }
+//    
+//    override func setupLayout() {
+//        bgView.snp.makeConstraints { (m) in
+//            m.left.right.equalToSuperview().inset(15)
+//            m.top.equalToSuperview().inset(6)
+//            m.bottom.equalToSuperview().inset(6)
+//            m.height.equalTo(52)
+//        }
+//        nextIcon.snp.makeConstraints { (m) in
+//            m.width.equalTo(20)
+//            m.height.equalTo(20)
+//            m.right.equalToSuperview().inset(15)
+//            m.centerY.equalToSuperview()
+//        }
+//        icon.snp.makeConstraints { (m) in
+//            m.width.equalTo(46)
+//            m.height.equalTo(46)
+//            m.right.equalToSuperview().inset(40)
+//            m.centerY.equalToSuperview()
+//        }
+//        titleLabel.snp.makeConstraints { (m) in
+//            m.centerY.equalTo(icon)
+//            m.left.equalToSuperview().inset(15)
+//            m.height.equalToSuperview()
+//        }
+//        valueLabel.snp.makeConstraints { (m) in
+//            m.centerY.equalTo(icon)
+//            m.right.equalToSuperview().inset(40)
+//            m.height.equalToSuperview()
+//        }
+//
+//    }
+//}
+//
+//class UserInfoImageCell: BaseTableViewCell {
+//    let bgView = UIView()
+//    let icon = UIImageView()
+//    let titleLabel = UILabel()
+//    let nextIcon = UIImageView()
+//    let imgPicker = ImagePickerManager()
+//
+//    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
+//        super.init(style: style, reuseIdentifier: reuseIdentifier)
+//    }
+//    
+//    required init?(coder: NSCoder) {
+//        fatalError("init(coder:) has not been implemented")
+//    }
+//    override func setupViews() {
+//        contentView.addSubview(bgView)
+//        bgView.addSubviews([titleLabel,icon,nextIcon])
+//        
+//        backgroundColor = .clear
+//        contentView.backgroundColor = .clear
+//        selectionStyle = .none
+//        bgView.do { v in
+//            v.backgroundColor = UIColor.black.withAlphaComponent(0.04)
+//            v.layer.borderColor = UIColor.black.withAlphaComponent(0.1).cgColor
+//            v.layer.borderWidth = 0.5
+//            v.layer.cornerRadius = 12
+//            v.layer.masksToBounds = true
+//            v.yc.addTap(target: self, action:#selector(pickImageAction ))
+//        }
+//        titleLabel.do { (v) in
+//            v.textColor = .white
+//            v.font = .medium(16)
+//            v.textAlignment = .left
+//            v.text = "头像"
+//        }
+//        icon.do { v in
+//            v.yc.setCornerRadius(23)
+//            v.backgroundColor = .black.withAlphaComponent(0.5)
+//        }
+//        nextIcon.image = UIImage(named: "arrow_next")
+//    }
+//    
+//    override func setupLayout() {
+//        bgView.snp.makeConstraints { (m) in
+//            m.left.right.equalToSuperview().inset(15)
+//            m.top.equalToSuperview().inset(6)
+//            m.bottom.equalToSuperview().inset(6)
+//            m.height.equalTo(72)
+//        }
+//        nextIcon.snp.makeConstraints { (m) in
+//            m.width.equalTo(20)
+//            m.height.equalTo(20)
+//            m.right.equalToSuperview().inset(15)
+//            m.centerY.equalToSuperview()
+//        }
+//        icon.snp.makeConstraints { (m) in
+//            m.width.equalTo(46)
+//            m.height.equalTo(46)
+//            m.right.equalToSuperview().inset(40)
+//            m.centerY.equalToSuperview()
+//        }
+//        titleLabel.snp.makeConstraints { (m) in
+//            m.centerY.equalTo(icon)
+//            m.left.equalToSuperview().inset(15)
+//            m.height.equalToSuperview()
+//        }
+//        
+//    }
+//    
+//    @objc func pickImageAction() -> Void {
+//        imgPicker.showImagePicker(from: App.shared.topVC()) {[weak self] image in
+//            guard let self = self else { return  }
+//            icon.image = image
+//        }
+//    }
+//}
 //
-
-import UIKit
-
-public enum UserInfoCellType: Int {
-    case avatar
-    case nickName
-    case gender
-    case area
-    
-    
-    case account
-    case phone
-    case email
-    case thirdLogin
-    
-    case deregister
-    
-    var title:String{
-        switch self {
-        case .avatar:
-            return "头像"
-        case .nickName:
-            return "昵称"
-        case .gender:
-            return "性别"
-        case .area:
-            return "国家与地区"
-            
-        case .account:
-            return "账号密码"
-        case .phone:
-            return "安全手机"
-        case .email:
-            return "安全邮箱"
-        case .thirdLogin:
-            return "第三方账号"
-           
-        
-        case .deregister:
-            return "注销账号"
-        }
-    }
-    
-}
-
-
-class UserInfoCell: BaseTableViewCell {
-    let bgView = UIView()
-    let icon = UIImageView()
-    let titleLabel = UILabel()
-    let valueLabel = UILabel()
-    let nextIcon = UIImageView()
-    
-    var type:UserInfoCellType = .avatar{
-        didSet{
-            titleLabel.text = type.title
-            valueLabel.text = "1111"
-        }
-    }
-    
-    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-    
-    required init?(coder: NSCoder) {
-        fatalError("init(coder:) has not been implemented")
-    }
-    override func setupViews() {
-        contentView.addSubview(bgView)
-        bgView.addSubviews([titleLabel,icon,valueLabel,nextIcon])
-        
-        backgroundColor = .clear
-        contentView.backgroundColor = .clear
-        selectionStyle = .none
-        bgView.do { v in
-            v.backgroundColor = UIColor.black.withAlphaComponent(0.04)
-            v.layer.borderColor = UIColor.black.withAlphaComponent(0.1).cgColor
-            v.layer.borderWidth = 0.5
-            v.layer.cornerRadius = 12
-            v.layer.masksToBounds = true
-        }
-        titleLabel.do { (v) in
-            v.textColor = .white
-            v.font = .medium(16)
-            v.textAlignment = .left
-        }
-        valueLabel.do { (v) in
-            v.textColor = .black.withAlphaComponent(0.8)
-            v.font = .medium(14)
-            v.textAlignment = .right
-        }
-        nextIcon.image = UIImage(named: "arrow_next")
-    }
-    
-    override func setupLayout() {
-        bgView.snp.makeConstraints { (m) in
-            m.left.right.equalToSuperview().inset(15)
-            m.top.equalToSuperview().inset(6)
-            m.bottom.equalToSuperview().inset(6)
-            m.height.equalTo(52)
-        }
-        nextIcon.snp.makeConstraints { (m) in
-            m.width.equalTo(20)
-            m.height.equalTo(20)
-            m.right.equalToSuperview().inset(15)
-            m.centerY.equalToSuperview()
-        }
-        icon.snp.makeConstraints { (m) in
-            m.width.equalTo(46)
-            m.height.equalTo(46)
-            m.right.equalToSuperview().inset(40)
-            m.centerY.equalToSuperview()
-        }
-        titleLabel.snp.makeConstraints { (m) in
-            m.centerY.equalTo(icon)
-            m.left.equalToSuperview().inset(15)
-            m.height.equalToSuperview()
-        }
-        valueLabel.snp.makeConstraints { (m) in
-            m.centerY.equalTo(icon)
-            m.right.equalToSuperview().inset(40)
-            m.height.equalToSuperview()
-        }
-
-    }
-}
-
-class UserInfoImageCell: BaseTableViewCell {
-    let bgView = UIView()
-    let icon = UIImageView()
-    let titleLabel = UILabel()
-    let nextIcon = UIImageView()
-    let imgPicker = ImagePickerManager()
-
-    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-    
-    required init?(coder: NSCoder) {
-        fatalError("init(coder:) has not been implemented")
-    }
-    override func setupViews() {
-        contentView.addSubview(bgView)
-        bgView.addSubviews([titleLabel,icon,nextIcon])
-        
-        backgroundColor = .clear
-        contentView.backgroundColor = .clear
-        selectionStyle = .none
-        bgView.do { v in
-            v.backgroundColor = UIColor.black.withAlphaComponent(0.04)
-            v.layer.borderColor = UIColor.black.withAlphaComponent(0.1).cgColor
-            v.layer.borderWidth = 0.5
-            v.layer.cornerRadius = 12
-            v.layer.masksToBounds = true
-            v.yc.addTap(target: self, action:#selector(pickImageAction ))
-        }
-        titleLabel.do { (v) in
-            v.textColor = .white
-            v.font = .medium(16)
-            v.textAlignment = .left
-            v.text = "头像"
-        }
-        icon.do { v in
-            v.yc.setCornerRadius(23)
-            v.backgroundColor = .black.withAlphaComponent(0.5)
-        }
-        nextIcon.image = UIImage(named: "arrow_next")
-    }
-    
-    override func setupLayout() {
-        bgView.snp.makeConstraints { (m) in
-            m.left.right.equalToSuperview().inset(15)
-            m.top.equalToSuperview().inset(6)
-            m.bottom.equalToSuperview().inset(6)
-            m.height.equalTo(72)
-        }
-        nextIcon.snp.makeConstraints { (m) in
-            m.width.equalTo(20)
-            m.height.equalTo(20)
-            m.right.equalToSuperview().inset(15)
-            m.centerY.equalToSuperview()
-        }
-        icon.snp.makeConstraints { (m) in
-            m.width.equalTo(46)
-            m.height.equalTo(46)
-            m.right.equalToSuperview().inset(40)
-            m.centerY.equalToSuperview()
-        }
-        titleLabel.snp.makeConstraints { (m) in
-            m.centerY.equalTo(icon)
-            m.left.equalToSuperview().inset(15)
-            m.height.equalToSuperview()
-        }
-        
-    }
-    
-    @objc func pickImageAction() -> Void {
-        imgPicker.showImagePicker(from: App.shared.topVC()) {[weak self] image in
-            guard let self = self else { return  }
-            icon.image = image
-        }
-    }
-}
-
index 498bb3c..1905a35 100644 (file)
@@ -1,83 +1,85 @@
-////
-////  UserInfoVC.swift
-////  ShenYin
-////
-////  Created by liangshi on 2025/7/30.
-////
 //
-//import UIKit
-//class UserInfoVC: BaseVC{
-//    let tableView = UITableView(frame: .zero, style: .plain)
-//    let list:[(title:String,list:[UserInfoCellType])] = [("编辑资料",[.avatar,.nickName,.gender]),("账号与安全",[.phone,.password,.deregister])]
-//    
-//    override func viewDidLoad() {
-//        super.viewDidLoad()
-//        // Do any additional setup after loading the view.
-//    }
-//    override func setupViews() {
-//        self.navBar.title = "用户信息"
-//        tableView.do { v in
-//            v.backgroundColor = .color(.bgColor)
-//            v.delegate = self
-//            v.dataSource = self
-//            v.estimatedRowHeight = 52
-//            v.sectionHeaderHeight = 52
-//            v.sectionFooterHeight = 0.1
-//            v.register(UserInfoCell.self, forCellReuseIdentifier: UserInfoCell.reuseID)
-//            v.register(UserInfoImageCell.self, forCellReuseIdentifier: UserInfoImageCell.reuseID)
-//            
-//            v.register(UserInfoSectionHeader.self, forHeaderFooterViewReuseIdentifier: UserInfoSectionHeader.reuseID)
-//            v.register(BaseTableViewSetionHeader.self, forHeaderFooterViewReuseIdentifier: BaseTableViewSetionHeader.reuseID)
-//        }
-//        
-//        let footView = UIView(frame: CGRect(x: 0, y: 0, width: kScreenWid, height: 200))
-//        let btn = CustomButton(frame: CGRect(x: 15, y: 80, width: kScreenWid - 30, height: 52))
-//        btn.set(title: "退出登录", target: self, action: #selector(logoutAction))
-//        footView.addSubview(btn)
-//        tableView.tableFooterView = footView
-//        
-//        view.addSubview(tableView)
-//    }
-//    override func setupLayout() {
-//        tableView.snp.makeConstraints { make in
-//            make.left.right.bottom.equalToSuperview()
-//            make.top.equalTo(kNavBtm)
-//        }
-//    }
-//}
+//  UserInfoVC.swift
+//  ShenYin
 //
-//extension UserInfoVC:UITableViewDelegate,UITableViewDataSource {
-//    func numberOfSections(in tableView: UITableView) -> Int {
-//        return list.count
-//    }
-//    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
-//        return list[section].list.count
-//    }
-//    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
-//        let view = UserInfoSectionHeader.header(withTableView: tableView)
-//        view.titleLabel.text = list[section].title
-//        return view
-//    }
-//    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
-//        let type = list[indexPath.section].list[indexPath.row]
-//        if type == .avatar {
-//            let cell = UserInfoImageCell.cell(withTableView: tableView, indexPath: indexPath)
-//            return cell
-//        }
-//        else{
-//            let cell = UserInfoCell.cell(withTableView: tableView, indexPath: indexPath)
-//            cell.type = type
-//            return cell
-//        }
-//    }
-//    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
-//        let data = list[indexPath.section].list[indexPath.row]
-//        
-//    }
-//}
+//  Created by liangshi on 2025/7/30.
 //
-//extension UserInfoVC{
-//    @objc func logoutAction(){
-//        
-//    }
-//}
+
+import UIKit
+class UserInfoVC: BaseVC{
+    let tableView = UITableView(frame: .zero, style: .plain)
+    let list:[CustomCellType] = [.avatar,.nickName,.gender,.area]
+    let imgPicker = ImagePickerManager()
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        // Do any additional setup after loading the view.
+    }
+    override func setupViews() {
+        self.navBar.title = "个人资料"
+        tableView.do { v in
+            v.backgroundColor = .color(.bgColor)
+            v.delegate = self
+            v.dataSource = self
+            v.rowHeight = 52
+            v.sectionHeaderHeight = 52
+            v.separatorStyle = .none
+            v.register(CustomCell1.self, forCellReuseIdentifier: CustomCell1.reuseID)
+        }
+        view.addSubview(tableView)
+    }
+    override func setupLayout() {
+        tableView.snp.makeConstraints { make in
+            make.left.right.bottom.equalToSuperview()
+            make.top.equalTo(kNavBtm)
+        }
+    }
+}
+
+    extension UserInfoVC:UITableViewDelegate,UITableViewDataSource {
+        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+            return list.count
+        }
+
+        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+            let cell = CustomCell1.cell(withTableView: tableView, indexPath: indexPath)
+            cell.type = list[indexPath.row]
+            let rect = CGRect(x: 0, y: 0, width: kScreenWid - 36, height: 52)
+            if indexPath.row == 0 {
+                cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.topLeft,.topRight], cornerRadii: CGSize(width: 8, height: 8))
+            }
+            else if indexPath.row == list.count - 1{
+                cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.bottomLeft,.bottomRight], cornerRadii: CGSize(width: 8, height: 8))
+            }
+            else{
+                cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.allCorners], cornerRadii: CGSize(width: 0, height: 0))
+            }
+            return cell
+        }
+        func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+            let data = list[indexPath.row]
+            switch data {
+            case .avatar:
+                pickImageAction()
+            case .nickName:
+                App.shared.goToPage(NickNameVC())
+            case .gender:
+                App.shared.goToPage(GenderVC())
+            case .area:
+                App.shared.goToPage(AreaVC())
+                break
+            default:
+                break
+            }
+        }
+    }
+
+
+extension UserInfoVC{
+    @objc func pickImageAction() -> Void {
+        imgPicker.showImagePicker(from: App.shared.topVC()) {[weak self] image in
+            guard let self = self else { return  }
+//            icon.image = image
+        }
+    }
+}
index 8d6a0ee..22a4586 100644 (file)
@@ -20,6 +20,16 @@ enum ModeContolType:Int{
             return "自由通话"
         }
     }
+    var img:String{
+        switch self {
+        case .anc:
+            return "mode_control_anc"
+        case .environment:
+            return "mode_control_environment"
+        case .free:
+            return "mode_control_call"
+        }
+    }
 }
 
 class ModeControView: BaseView {
@@ -87,29 +97,35 @@ class ModeControView: BaseView {
     }
     
     class ItemView: BaseView {
+        let imgBg = UIView()
         let icon = UIImageView()
         let titleLabel = UILabel()
         var type = ModeContolType.anc{
             didSet{
                 titleLabel.text = type.title
+                icon.image = UIImage(named: type.img)
             }
         }
         var isSelected:Bool = false{
             didSet{
                 if isSelected {
                     titleLabel.textColor = .color(.theme)
+                    imgBg.backgroundColor = .color(.theme)
                 }
                 else{
                     titleLabel.textColor = .rgb(0x666666)
+                    imgBg.backgroundColor = .rgb(0xF7F7F7)
                 }
             }
         }
         
         override func setupViews() {
-            addSubviews([icon,titleLabel])
-            icon.do { v in
+            addSubviews([imgBg,icon,titleLabel])
+            
+            imgBg.do { v in
                 v.backgroundColor = .rgb(0xF7F7F7)
                 v.yc.setCornerRadius(8)
+                v.contentMode = .center
             }
             titleLabel.do { (v) in
                 v.textColor = .rgb(0x666666)
@@ -119,14 +135,19 @@ class ModeControView: BaseView {
         }
         
         override func setupLayout() {
-            icon.snp.makeConstraints { make in
+            imgBg.snp.makeConstraints { make in
                 make.width.equalTo(80)
                 make.height.equalTo(43)
                 make.left.top.equalToSuperview()
             }
+            icon.snp.makeConstraints { make in
+                make.width.equalTo(38)
+                make.height.equalTo(19)
+                make.center.equalTo(imgBg)
+            }
             titleLabel.snp.makeConstraints { make in
                 make.centerX.equalToSuperview()
-                make.top.equalTo(icon.snp.bottom).offset(10)
+                make.top.equalTo(imgBg.snp.bottom).offset(10)
             }
         }
     }
index 3e1475d..1720e1d 100644 (file)
@@ -11,7 +11,7 @@ enum ModeEffectsType:Int{
     case classic
     case rock
     case jazz
-    case eq
+    case custom
     
     var title:String{
         switch self {
@@ -22,18 +22,34 @@ enum ModeEffectsType:Int{
         case .classic:
             return "经典"
         case .rock:
+            return "摇滚"
+        case .jazz:
             return "爵士"
+        case .custom:
+            return "自定义"
+        }
+    }
+    var img:String{
+        switch self {
+        case .normal:
+            return "mode_normal"
+        case .fashion:
+            return "mode_fashion"
+        case .classic:
+            return "mode_classic"
+        case .rock:
+            return "mode_rock"
         case .jazz:
-            return "摇滚"
-        case .eq:
-            return "EQ调音"
+            return "mode_jazz"
+        case .custom:
+            return "mode_custom"
         }
     }
 }
 
 class ModeEffectsView: BaseView {
     let titleLabel = UILabel()
-    var list:[ModeEffectsType] = [.normal,.fashion,.classic,.rock,.jazz,.eq]
+    var list:[ModeEffectsType] = [.normal,.fashion,.classic,.rock,.jazz,.custom]
     var itemViews = [ItemView]()
     
     override func setupViews() {
@@ -45,7 +61,7 @@ class ModeEffectsView: BaseView {
         titleLabel.do { (v) in
             v.textColor = .rgb(0x121212)
             v.font = .bold(14)
-            v.text = "个性化音效"
+            v.text = "EQ调音"
         }
         
         let s = 11.0
@@ -90,13 +106,14 @@ class ModeEffectsView: BaseView {
         var type = ModeEffectsType.fashion{
             didSet{
                 titleLabel.text = type.title
+                icon.image = UIImage(named:type.img)
+
             }
         }
         
         override func setupViews() {
             addSubviews([icon,titleLabel])
             icon.do { v in
-                v.backgroundColor = .black
                 v.yc.setCornerRadius(8)
             }
             titleLabel.do { (v) in
index 8bc8dda..02a23d1 100644 (file)
@@ -8,7 +8,7 @@
 import UIKit
 class BleScanVC: BaseVC{
     let tableView = UITableView(frame: .zero, style: .plain)
-    let list:[MineCellType] = [.user,.device,.userAgreement,.privacyPolicy,.language,.update,.feeback,.about]
+    let list:[MineCellType] = []
     
     override func viewDidLoad() {
         super.viewDidLoad()
@@ -41,7 +41,7 @@ extension BleScanVC:UITableViewDelegate,UITableViewDataSource {
     
     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
         let cell = BleScanCell.cell(withTableView: tableView, indexPath: indexPath)
-        cell.type = list[indexPath.row]
+//        cell.type = list[indexPath.row]
         return cell
     }
     func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
@@ -83,11 +83,11 @@ class BleScanCell: BaseTableViewCell {
     let icon = UIImageView()
     let titleLabel = UILabel()
     
-    var type:MineCellType = .user{
-        didSet{
-            titleLabel.text = type.title
-        }
-    }
+//    var type:MineCellType = .user{
+//        didSet{
+//            titleLabel.text = type.title
+//        }
+//    }
     
     override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
         super.init(style: style, reuseIdentifier: reuseIdentifier)
index f6c4342..93633b1 100644 (file)
@@ -9,43 +9,11 @@ import UIKit
 import JXSegmentedView
 import MJRefresh
 
-public enum SleepListType:Int {
-    case all = 0
-    case school = 1
-    case studycar = 2
-    case exam = 3
-    case system = 4
-    
-    var name:String{
-        switch self {
-        case .all:
-            return "全部"
-        case .studycar:
-            return "学车提醒"
-        case .school:
-            return "驾校通知"
-        case .system:
-            return "系统提醒"
-        case .exam:
-            return "考试通知"
-        }
-    }
-    var icon: UIImage? {
-        switch self {
-        case .all: return UIImage(named: "message_exam")
-        case .studycar: return UIImage(named: "message_oclock")
-        case .school: return UIImage(named: "message_notice")
-        case .system: return UIImage(named: "message_exam")
-        case .exam: return UIImage(named: "message_exam")
-        }
-    }
-}
-
 
  class SleepListView: BaseView,UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout {
     private var collectionView:UICollectionView!
      
-    init(selectType type:SleepListType){
+    init(selectType type:Int){
         super.init(frame: .zero)
 //        setupLayout()
 //        setupStyle()
index 37aa493..542e816 100644 (file)
@@ -81,7 +81,7 @@ import Foundation
 import JXSegmentedView
 
 class SleepVC: BaseVC {
-    private var titles = [SleepListType.all,SleepListType.school,SleepListType.studycar,SleepListType.exam]
+    private var titles = ["专注","旋律","自然","都市","冥想"]
     private let segmentedDataSource = JXSegmentedTitleDataSource()
     private let segmentedView = JXSegmentedView()
     private lazy var listContainerView: JXSegmentedListContainerView! = {
@@ -123,7 +123,8 @@ class SleepVC: BaseVC {
             segmentedDataSource.isTitleStrokeWidthEnabled = true
             segmentedDataSource.isItemSpacingAverageEnabled = true
             segmentedDataSource.isTitleColorGradientEnabled = true
-            segmentedDataSource.titles = titles.map{"\($0.name)"}
+//            segmentedDataSource.titles = titles.map{"\($0.name)"}
+            segmentedDataSource.titles = titles
             segmentedView.backgroundColor = .clear
             
             //配置指示器
@@ -155,7 +156,9 @@ extension SleepVC: JXSegmentedListContainerViewDataSource {
     }
     
     func listContainerView(_ listContainerView: JXSegmentedListContainerView, initListAt index: Int) -> JXSegmentedListContainerViewListDelegate {
-        let dele = SleepListView(selectType: titles[index])
+//        let dele = SleepListView(selectType: titles[index])
+        let dele = SleepListView(selectType: index)
+
 //        dele.popToRoot = { [unowned self] in
 //            navigationController?.popToRootViewController(animated: true)
 //        }
diff --git a/ShenYin/ShenYin/UI/common/BrokenLineView.swift b/ShenYin/ShenYin/UI/common/BrokenLineView.swift
new file mode 100644 (file)
index 0000000..e96c8f2
--- /dev/null
@@ -0,0 +1,27 @@
+//
+//  Untitled.swift
+//  ShenYin
+//
+//  Created by liangshi on 2025/8/26.
+//
+
+class BrokenLineView: UIView {
+    override func draw(_ rect: CGRect) {
+        super.draw(rect)
+        let path = UIBezierPath()
+        let lineWidth: CGFloat = 0.5
+        let dashLength: CGFloat = 5.0
+        let spaceLength: CGFloat = 3.0
+        let startPoint = CGPoint(x: 0, y: bounds.midY)
+        let endPoint = CGPoint(x: bounds.width, y: bounds.midY)
+        path.move(to: startPoint)
+        path.addLine(to: endPoint)
+        let shapeLayer = CAShapeLayer()
+        shapeLayer.path = path.cgPath
+        shapeLayer.strokeColor = UIColor.hexString("#93C6EC").cgColor
+        shapeLayer.fillColor = UIColor.clear.cgColor
+        shapeLayer.lineWidth = lineWidth
+        shapeLayer.lineDashPattern = [NSNumber(value: dashLength), NSNumber(value: spaceLength)]
+        layer.addSublayer(shapeLayer)
+    }
+}
index 320a095..2a56e37 100644 (file)
@@ -10,6 +10,7 @@ import UIKit
 enum CustomButtonStyle:Int{
     case theme1
     case theme2
+    case theme3
     case custom
 }
 
@@ -25,6 +26,11 @@ class CustomButton: UIButton {
             setTitleColor(.white, for: .normal)
             backgroundColor =  UIColor.color(.theme)
         }
+        if style == .theme3 {
+            setTitleColor(.hexString("#121212"), for: .normal)
+            backgroundColor =  UIColor.white
+            titleLabel?.font = .regular(14)
+        }
         else{
             setTitleColor(.color(.theme), for: .normal)
             backgroundColor = .clear
diff --git a/ShenYin/ShenYin/UI/common/SendToolBar.swift b/ShenYin/ShenYin/UI/common/SendToolBar.swift
new file mode 100644 (file)
index 0000000..7fff794
--- /dev/null
@@ -0,0 +1,69 @@
+//
+//  SendToolBar.swift
+//  ShenYin
+//
+//  Created by liangshi on 2025/8/26.
+//
+
+@objc protocol SendToolBarDelegate {
+    func sendToolBar(_ toolBar:SendToolBar,_ text:String)
+}
+
+class SendToolBar:UIView{
+    let bgView = UIView()
+    let textField = UITextField()
+    let sendBtn = UIButton()
+    
+    weak var delegate:SendToolBarDelegate?
+    
+    override init(frame: CGRect) {
+        super.init(frame: frame)
+        backgroundColor = .clear
+        
+        bgView.do { v in
+            v.yc.setCornerRadius(12)
+            v.backgroundColor = .white
+        }
+        
+        sendBtn.setImage(UIImage(named: "send_icon"), for: .normal)
+        sendBtn.addTarget(self, action: #selector(sendAction), for: .touchUpInside)
+        
+        textField.do { v in
+            v.backgroundColor = .clear
+            v.placeholder = "请输入文字"
+        }
+        
+        addSubview(bgView)
+        bgView.addSubview(sendBtn)
+        bgView.addSubview(textField)
+
+        bgView.snp.makeConstraints { make in
+            make.left.right.equalToSuperview().inset(18)
+            make.top.bottom.equalToSuperview()
+        }
+        sendBtn.snp.makeConstraints { make in
+            make.width.equalTo(52)
+            make.height.equalTo(52)
+            make.centerY.equalToSuperview()
+            make.right.equalToSuperview().inset(10)
+        }
+        textField.snp.makeConstraints { make in
+            make.left.equalToSuperview().inset(10)
+            make.top.bottom.equalToSuperview()
+            make.right.equalTo(sendBtn.snp.left).offset(-10)
+        }
+    }
+    
+    
+    required init?(coder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+    
+    @objc func sendAction(){
+        if let text = textField.text {
+            self.delegate?.sendToolBar(self,text)
+        }
+    }
+    
+}
+