From ecaf8069072e71db4bff94671e72764b211d6af1 Mon Sep 17 00:00:00 2001
From: Linjiajia <319408893@qq.com>
Date: 星期四, 26 十月 2023 00:43:51 +0800
Subject: [PATCH] 功能完善

---
 app/src/main/java/com/application/zhangshi_app_android/data/source/http/ApiService.java                        |   25 
 app/src/main/res/layout/pop_annual_health_status.xml                                                           |   18 
 app/src/main/java/com/application/zhangshi_app_android/ui/dialog/UpdateDialog.java                             |    4 
 app/src/main/java/com/application/zhangshi_app_android/widget/Node.java                                        |   60 
 app/src/main/java/com/application/zhangshi_app_android/ui/function/AnnualHealthStatusActivityViewModel.java    |    4 
 app/src/main/java/com/application/zhangshi_app_android/ui/function/AnnualHealthStatusDetailActivity.java       |    3 
 app/src/main/res/drawable/shape_gradient_browser_progress.xml                                                  |   22 
 app/src/main/java/com/application/zhangshi_app_android/ui/function/VideoCarouselFragment.java                  |    2 
 app/src/main/res/layout/activity_annual_health_status.xml                                                      |    5 
 app/src/main/java/com/application/zhangshi_app_android/ui/function/HealthCareActivity.java                     |   16 
 app/src/main/java/com/application/zhangshi_app_android/ui/function/ExaminationInfoActivityViewModel.java       |  346 +++++
 app/src/main/res/layout/activity_health_care.xml                                                               |    1 
 app/src/main/java/com/application/zhangshi_app_android/widget/HomeMindMapLayout.java                           |    4 
 app/src/main/res/layout/activity_growth_experience.xml                                                         |    2 
 app/build.gradle                                                                                               |    6 
 app/src/main/java/com/application/zhangshi_app_android/bean/ExaminationInfoBean.java                           |   61 
 app/src/main/java/com/application/zhangshi_app_android/ui/function/CertificateOfHonorActivityViewModel.java    |    1 
 app/src/main/res/layout/activity_annual_health_status_detail.xml                                               |    8 
 app/src/main/java/com/application/zhangshi_app_android/ui/PlayerActivity.java                                  |   34 
 app/src/main/java/com/application/zhangshi_app_android/ui/main/MainActivity.java                               |   28 
 app/src/main/res/values/strings.xml                                                                            |    2 
 app/src/main/res/layout/layout_drawer.xml                                                                      |    1 
 app/src/main/java/com/application/zhangshi_app_android/data/DataRepository.java                                |   29 
 app/src/main/java/com/application/zhangshi_app_android/ui/DLBaseActivity.java                                  |   16 
 app_base/src/main/java/com/android/app_base/base/viewmodel/BaseViewModel.java                                  |    2 
 app/src/main/java/com/application/zhangshi_app_android/ui/function/AnnualHealthStatusActivity.java             |   19 
 app/src/main/res/layout/item_family_member.xml                                                                 |   17 
 app_base/src/main/java/com/android/app_base/base/adapter/databinding/ImageViewAdapter.java                     |    9 
 app/src/main/java/com/application/zhangshi_app_android/widget/SimpleNode.java                                  |   22 
 app_base/src/main/java/com/android/app_base/base/adapter/BaseVp2FragmentAdapter.java                           |   15 
 app/src/main/java/com/application/zhangshi_app_android/adapter/ElectronicFileAddAdapter.java                   |   88 
 app_base/src/main/java/com/android/app_base/base/adapter/databinding/TextViewAdapter.java                      |    5 
 app/src/main/java/com/application/zhangshi_app_android/ui/function/FamilyAssetsActivityViewModel.java          |    1 
 app/src/main/java/com/application/zhangshi_app_android/data/source/http/HttpDataSourceImpl.java                |   35 
 app/src/main/res/layout/item_tourism.xml                                                                       |    3 
 app/src/main/java/com/application/zhangshi_app_android/ui/function/ExaminationInfoActivity.java                |  348 +++++
 app_base/src/main/java/com/android/app_base/http/interceptor/AuthInterceptor.java                              |    2 
 app/src/main/java/com/application/zhangshi_app_android/bean/ExaminationInfoRequestBean.java                    |   47 
 app/src/main/java/com/application/zhangshi_app_android/ui/function/ExaminationInfoDetailActivity.java          |  313 +++++
 app/src/main/java/com/application/zhangshi_app_android/ui/function/TourismExperienceActivityViewModel.java     |    2 
 app/src/main/java/com/application/zhangshi_app_android/ui/function/ExaminationInfoDetailActivityViewModel.java |  361 +++++
 app/src/main/res/layout/item_examination_info.xml                                                              |  181 ++
 app/src/main/java/com/application/zhangshi_app_android/ui/DLBaseFragment.java                                  |   18 
 app_base/src/main/java/com/android/app_base/base/BaseConfig.java                                               |    4 
 app/src/main/java/com/application/zhangshi_app_android/widget/DoubleNode.java                                  |   19 
 app/src/main/java/com/application/zhangshi_app_android/data/source/HttpDataSource.java                         |   21 
 app/src/main/res/layout/pop_operate_exam_info.xml                                                              |  143 ++
 app/src/main/res/layout/activity_examination_info.xml                                                          |  318 +++++
 app/src/main/java/com/application/zhangshi_app_android/ui/function/ImageCarouselFragment.java                  |    9 
 app/src/main/res/layout/activity_examination_info_detail.xml                                                   |  129 ++
 app/src/main/AndroidManifest.xml                                                                               |  152 +
 app/src/main/java/com/application/zhangshi_app_android/ui/home/HomeFragment.java                               |    3 
 app/src/main/java/com/application/zhangshi_app_android/ui/BrowserActivity.java                                 |  184 ++
 .idea/deploymentTargetDropDown.xml                                                                             |    4 
 app/src/main/java/com/application/zhangshi_app_android/bean/AnnualHealthStatusBean.java                        |    2 
 app/src/main/java/com/application/zhangshi_app_android/adapter/ExaminationInfoRvAdapter.java                   |  167 ++
 app/src/main/res/layout/pop_basic_information_double.xml                                                       |    7 
 /dev/null                                                                                                      |  244 ---
 app/src/main/java/com/application/zhangshi_app_android/ui/function/FunctionFragment.java                       |    2 
 app_base/src/main/java/com/android/app_base/base/view/BaseActivity.java                                        |    1 
 app/src/main/res/layout/activity_browser.xml                                                                   |   55 
 app/src/main/java/com/application/zhangshi_app_android/ui/function/VideoFragment.java                          |   10 
 app_base/src/main/java/com/android/app_base/action/TitleBarAction.java                                         |    6 
 app_base/src/main/java/com/android/app_base/http/OkHttpHelper.java                                             |   11 
 app_base/src/main/java/com/android/app_base/widget/ExtendTitleBar.java                                         |    1 
 65 files changed, 3,209 insertions(+), 469 deletions(-)

diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
index 6f1b369..f1ef53d 100644
--- a/.idea/deploymentTargetDropDown.xml
+++ b/.idea/deploymentTargetDropDown.xml
@@ -7,11 +7,11 @@
         <deviceKey>
           <Key>
             <type value="VIRTUAL_DEVICE_PATH" />
-            <value value="D:\software\Android\.android\avd\Nexus_6_API_30.avd" />
+            <value value="D:\software\Android\.android\avd\Pixel_API_30.avd" />
           </Key>
         </deviceKey>
       </Target>
     </targetSelectedWithDropDown>
-    <timeTargetWasSelectedWithDropDown value="2023-10-06T11:49:32.134674900Z" />
+    <timeTargetWasSelectedWithDropDown value="2023-10-25T11:40:17.439780100Z" />
   </component>
 </project>
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index d0ea531..917df11 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,12 +8,12 @@
         applicationId "com.application.zhangshi_app_android"
         minSdk 24
         targetSdk 33
-        versionCode 6
-        versionName "1.0.32"
+        versionCode 3
+        versionName "1.0.2"
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
         ndk {
             //APP鐨刡uild.gradle璁剧疆鏀寔鐨凷O搴撴灦鏋�
-            abiFilters 'armeabi', 'armeabi-v7a', 'x86'
+            abiFilters 'armeabi', 'armeabi-v7a', 'x86' , 'arm64-v8a', 'x86_64'
         }
     }
     signingConfigs {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 16def59..4e682ce 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -86,12 +86,14 @@
         <activity
             android:name=".ui.main.MainActivity"
             android:exported="true"
+            android:launchMode="singleTask"
             android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"
             />
         <activity
             android:name=".ui.login.LoginActivity"
             android:exported="true"
-            android:screenOrientation="portrait">
+            android:screenOrientation="portrait"
+            >
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
 
@@ -100,133 +102,186 @@
         </activity>
         <activity
             android:name=".ui.function.FamilyMemorabiliaActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.FamilyMemorabiliaDetailActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait"
+            />
         <activity
             android:name=".ui.function.FamilyAssetsActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.FamilyAssetsDetailActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.HomeDevicesActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.HomeDevicesDetailActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.GrowthExperienceActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.HonorCollectionDetailActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.HonorCollectionActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.LittleDoctorDetailActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.LittleDoctorActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.CleanStorageActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.CleanStorageDetailActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.IncomeAndExpensesActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.IncomeAndExpensesDetailActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.PropertyActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.PropertyDetailActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.HundredWishActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.HundredWishDetailActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.CertificateOfHonorActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.CertificateOfHonorDetailActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.MarriageActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.PetDetailActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.PetMemoActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.PetMemoDetailActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.HealthCareActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.AnnualHealthStatusActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.AnnualHealthStatusDetailActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.PrivacyActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.PrivacyDetailActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.TourismActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.TourismDetailActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.TourismExperienceActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.TourismExperienceDetailActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.personal_center.BasicInfoActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.ContactsActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.ContactsImportActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.PersonalNotepadActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.PersonalNotepadDetailActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.PetActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
+        <activity
+            android:name=".ui.function.ExaminationInfoActivity"
+            android:exported="false"
+            android:screenOrientation="portrait" />
+        <activity
+            android:name=".ui.function.ExaminationInfoDetailActivity"
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.function.ImageSelectActivity"
-            android:exported="false" />
+            android:exported="false"
+            android:screenOrientation="portrait" />
         <activity android:name=".ui.home.GenealogyActivity"
-            android:exported="false"/>
+            android:exported="false"
+            android:screenOrientation="portrait"/>
         <activity android:name=".ui.personal_center.LoginBgChangeActivity"
-            android:exported="false"/>
+            android:exported="false"
+            android:screenOrientation="portrait"/>
         <activity android:name=".ui.home.HomeMindMapActivity"
-            android:exported="false"/>
+            android:exported="false"
+            android:screenOrientation="portrait"/>
 
         <!-- 鏌ョ湅澶у浘 -->
         <activity
@@ -255,12 +310,17 @@
             android:theme="@style/FullScreenTheme" />
 
         <activity
-            android:name=".ui.PlayActivity"
+            android:name=".ui.PlayerActivity"
             android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"
             android:screenOrientation="portrait"
             android:theme="@style/FullScreenTheme"
             />
 
+        <activity
+            android:name=".ui.BrowserActivity"
+            android:screenOrientation="portrait" />
+
+
     </application>
 
 </manifest>
\ No newline at end of file
diff --git a/app/src/main/java/com/application/zhangshi_app_android/adapter/ElectronicFileAddAdapter.java b/app/src/main/java/com/application/zhangshi_app_android/adapter/ElectronicFileAddAdapter.java
index 19895e1..3f27eeb 100644
--- a/app/src/main/java/com/application/zhangshi_app_android/adapter/ElectronicFileAddAdapter.java
+++ b/app/src/main/java/com/application/zhangshi_app_android/adapter/ElectronicFileAddAdapter.java
@@ -2,22 +2,21 @@
 
 import android.app.Activity;
 import android.content.Context;
-import android.content.Intent;
-import android.content.pm.ActivityInfo;
+import android.util.Base64;
 import android.view.View;
 
 import androidx.annotation.Nullable;
-import androidx.core.app.ActivityCompat;
-import androidx.core.app.ActivityOptionsCompat;
-import androidx.core.util.Pair;
 
+import com.android.app_base.base.BaseConfig;
 import com.android.app_base.base.adapter.BaseRVAdapter;
 import com.application.zhangshi_app_android.R;
 import com.application.zhangshi_app_android.databinding.ItemElectronicFileAddBinding;
+import com.application.zhangshi_app_android.ui.BrowserActivity;
 import com.application.zhangshi_app_android.ui.ImagePreviewActivity;
-import com.application.zhangshi_app_android.ui.PlayActivity;
-import com.application.zhangshi_app_android.ui.VideoPlayActivity;
+import com.application.zhangshi_app_android.ui.PlayerActivity;
 
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -93,7 +92,6 @@
         if (getItemViewType(position) == TYPE_Add) {
             holder.getBinding().flAdd.setVisibility(View.VISIBLE);
             holder.getBinding().flImage.setVisibility(View.GONE);
-
             holder.itemView.setOnClickListener(new View.OnClickListener() {
                 @Override
                 public void onClick(View v) {
@@ -109,6 +107,30 @@
             holder.getBinding().flAdd.setVisibility(View.GONE);
             holder.getBinding().flImage.setVisibility(View.VISIBLE);
 
+            String item = mDataList.get(position);
+            if (isShowAddItem) {
+                holder.getBinding().ivDelete.setVisibility(View.VISIBLE);
+            } else {
+                holder.getBinding().ivDelete.setVisibility(View.GONE);
+            }
+
+            if (isShowDeleteIcon) {
+                holder.getBinding().ivDelete.setVisibility(View.VISIBLE);
+            } else {
+                holder.getBinding().ivDelete.setVisibility(View.GONE);
+            }
+
+            if (isShowSelectIcon) {
+                holder.getBinding().ivSelect.setVisibility(View.VISIBLE);
+                if (selectedItems.contains(item)){
+                    holder.getBinding().ivSelect.setBackgroundResource(R.drawable.ic_checked);
+                } else {
+                    holder.getBinding().ivSelect.setBackgroundResource(R.drawable.ic_unchecked);
+                }
+            } else {
+                holder.getBinding().ivSelect.setVisibility(View.GONE);
+            }
+
             //闈為瑙堢姸鎬佷笅锛岀偣鍑籭tem 璋冪敤 mItemAndAddClickListener.onItemClick
             //棰勮鐘舵�佷笅锛岀偣鍑籭tem 璋冪敤 鐩稿簲鐨� 鏂囦欢棰勮
             if (!isPreview){
@@ -120,10 +142,32 @@
                         }
                     }
                 });
+            }else {
+                holder.itemView.setOnClickListener(new View.OnClickListener() {
+                    @Override
+                    public void onClick(View v) {
+                        String url = mDataList.get(position);
+                        if (url.contains("profile/upload")) {//濡傛灉鏄笂浼犲埌鏈嶅姟鍣ㄧ殑鏂囦欢
+                            //鍙彇profile/upload浠ュ悗鐨勯儴鍒�
+                            url = url.substring(url.indexOf("profile/upload"));
+                            url = BaseConfig.BASE_URL_DOMAIN + "/" + url;
+                            //澶勭悊url杩涜Base64缂栫爜锛屽�熷姪 kkfileview 杩涜鏂囦欢棰勮
+                            // URL缂栫爜Base64缂栫爜鍚庣殑URL
+                            try {
+                                String encodedUrl = URLEncoder.encode(Base64.encodeToString(url.getBytes(), Base64.NO_WRAP), "UTF-8");
+                                String kkFileViewUrl = "https://www.bendudu.com:8085/preview/onlinePreview?url=" + encodedUrl;
+                                BrowserActivity.start(mContext, kkFileViewUrl);
+                            } catch (UnsupportedEncodingException e) {
+                                e.printStackTrace();
+                            }
+                        }
+                    }
+                });
             }
 
-            String item = mDataList.get(position);
             if (item != null) {
+                //闈炲浘鐗囪棰戯紝鎵撳紑鏂囦欢棰勮
+
                 if (item.endsWith(".pdf")) {
                     holder.getBinding().ivImage.setImageResource(R.drawable.ic_pdf);
                 } else if (item.endsWith(".zip") || item.endsWith(".aar") || item.endsWith(".7z")) {
@@ -157,8 +201,7 @@
 //                                        .setVideoSource(item)
 //                                        .setActivityOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
 //                                        .start(mContext);
-                                PlayActivity.start((Activity) mContext, item,holder.itemView,true);
-
+                                PlayerActivity.startWrapUrl((Activity) mContext, item,holder.itemView,true);
                             }
                         });
                     }
@@ -169,29 +212,6 @@
                 } else {
                     holder.getBinding().ivImage.setImageResource(R.drawable.ic_others);
                 }
-            }
-
-            if (isShowAddItem) {
-                holder.getBinding().ivDelete.setVisibility(View.VISIBLE);
-            } else {
-                holder.getBinding().ivDelete.setVisibility(View.GONE);
-            }
-
-            if (isShowDeleteIcon) {
-                holder.getBinding().ivDelete.setVisibility(View.VISIBLE);
-            } else {
-                holder.getBinding().ivDelete.setVisibility(View.GONE);
-            }
-
-            if (isShowSelectIcon) {
-                holder.getBinding().ivSelect.setVisibility(View.VISIBLE);
-                if (selectedItems.contains(item)){
-                    holder.getBinding().ivSelect.setBackgroundResource(R.drawable.ic_checked);
-                } else {
-                    holder.getBinding().ivSelect.setBackgroundResource(R.drawable.ic_unchecked);
-                }
-            } else {
-                holder.getBinding().ivSelect.setVisibility(View.GONE);
             }
 
         }
diff --git a/app/src/main/java/com/application/zhangshi_app_android/adapter/ExaminationInfoRvAdapter.java b/app/src/main/java/com/application/zhangshi_app_android/adapter/ExaminationInfoRvAdapter.java
new file mode 100644
index 0000000..eeb7577
--- /dev/null
+++ b/app/src/main/java/com/application/zhangshi_app_android/adapter/ExaminationInfoRvAdapter.java
@@ -0,0 +1,167 @@
+package com.application.zhangshi_app_android.adapter;
+
+import android.content.Context;
+import android.content.Intent;
+import android.view.View;
+import android.widget.CompoundButton;
+import android.widget.FrameLayout;
+
+import androidx.recyclerview.widget.GridLayoutManager;
+
+import com.android.app_base.base.BaseConfig;
+import com.android.app_base.base.adapter.BaseRVAdapter;
+import com.android.app_base.base.dialog.BaseDialog;
+import com.android.app_base.base.dialog.UIDialog;
+import com.android.app_base.manager.AppManager;
+import com.android.app_base.utils.Utils;
+import com.application.zhangshi_app_android.R;
+import com.application.zhangshi_app_android.bean.ExaminationInfoBean;
+import com.application.zhangshi_app_android.databinding.ItemExaminationInfoBinding;
+import com.application.zhangshi_app_android.ui.function.ExaminationInfoDetailActivity;
+import com.application.zhangshi_app_android.ui.function.ExaminationInfoActivityViewModel;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Ljj
+ * @date 2023.10.23. 22:11
+ * @desc 鍘嗗勾浣撴鎶ュ憡閫傞厤鍣�
+ */
+public class ExaminationInfoRvAdapter extends BaseRVAdapter<ExaminationInfoBean, ItemExaminationInfoBinding, ExaminationInfoRvAdapter.ViewHolder> {
+    private ExaminationInfoActivityViewModel viewModel;
+    private final Map<ExaminationInfoBean, Boolean> expendMap = new HashMap<>();
+    private boolean isCheckable;
+
+    public ExaminationInfoRvAdapter(Context context, ExaminationInfoActivityViewModel viewModel) {
+        super(context);
+        this.viewModel = viewModel;
+    }
+
+    @Override
+    protected int getLayoutId() {
+        return R.layout.item_examination_info;
+    }
+
+    @Override
+    protected ViewHolder getViewHolder(ItemExaminationInfoBinding itemBind, int viewType) {
+        return new ViewHolder(itemBind);
+    }
+
+    @Override
+    protected void onBind(ViewHolder holder, int position) {
+        holder.getBinding().setBean(mDataList.get(position));
+        if (position % 2 != 0){
+            holder.getBinding().cardView.setCardBackgroundColor(mContext.getColor(R.color.color_card_blue));
+        }else {
+            holder.getBinding().cardView.setCardBackgroundColor(mContext.getColor(R.color.color_card_pink));
+        }
+        if (!expendMap.containsKey(getItem(position))){
+            expendMap.put(getItem(position),false);
+        }
+        if (Boolean.TRUE.equals(expendMap.get(getItem(position)))){
+            holder.getBinding().ivFold.setBackgroundResource(R.drawable.ic_unfold);
+            holder.getBinding().cardView.post(() -> {
+                holder.getBinding().cardView.getLayoutParams().height = FrameLayout.LayoutParams.WRAP_CONTENT;
+                holder.getBinding().cardView.requestLayout();
+            });
+        }else{
+            holder.getBinding().ivFold.setBackgroundResource(R.drawable.ic_fold);
+            holder.getBinding().cardView.post(() -> {
+                holder.getBinding().cardView.getLayoutParams().height = holder.getBinding().layoutTitle.getMeasuredHeight();
+                holder.getBinding().cardView.requestLayout();
+            });
+        }
+        if (isCheckable){
+            holder.getBinding().checkbox.setVisibility(View.VISIBLE);
+            holder.getBinding().checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+                @Override
+                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+                    if (viewModel.getCheckListLiveData().getValue() == null){
+                        viewModel.getCheckListLiveData().setValue(new ArrayList<>());
+                    }
+                    List<ExaminationInfoBean> list = new ArrayList<>(viewModel.getCheckListLiveData().getValue());
+                    if (isChecked){
+                        if (!list.contains(mDataList.get(position))){
+                            list.add(mDataList.get(position));
+                        }
+                    }else{
+                        list.remove(mDataList.get(position));
+                    }
+                    viewModel.getCheckListLiveData().setValue(list);
+                }
+            });
+            holder.getBinding().checkbox.setChecked(viewModel.getCheckListLiveData().getValue().contains(mDataList.get(position)));
+        }else{
+            holder.getBinding().checkbox.setVisibility(View.GONE);
+        }
+        holder.getBinding().layoutTitle.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                if (Boolean.TRUE.equals(expendMap.get(getItem(position)))){
+                    int initialHeight = holder.getBinding().cardView.getMeasuredHeight();
+                    int collapsedHeight = holder.getBinding().layoutTitle.getMeasuredHeight();
+                    Utils.pullCollapse(holder.getBinding().cardView,initialHeight,collapsedHeight);
+                    holder.getBinding().ivFold.setBackgroundResource(R.drawable.ic_fold);
+                    expendMap.put(getItem(position),false);
+                }else{
+                    final int initialHeight = holder.getBinding().cardView.getMeasuredHeight();
+                    holder.getBinding().cardView.measure(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT);
+                    int targetHeight = holder.getBinding().cardView.getMeasuredHeight();
+                    Utils.dropExpand(holder.getBinding().cardView,initialHeight,targetHeight);
+                    holder.getBinding().ivFold.setBackgroundResource(R.drawable.ic_unfold);
+                    expendMap.put(getItem(position),true);
+                }
+            }
+        });
+        holder.itemView.setOnClickListener(v -> {
+            AppManager.getAppManager().startActivity(
+                    new Intent(getRecyclerView().getContext(), ExaminationInfoDetailActivity.class)
+                            .putExtra(BaseConfig.EXTRA_TYPE,0)
+                            .putExtra("bean",mDataList.get(position)));
+        });
+
+        holder.getBinding().layoutModify.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                AppManager.getAppManager().startActivity(
+                        new Intent(getRecyclerView().getContext(), ExaminationInfoDetailActivity.class)
+                                .putExtra(BaseConfig.EXTRA_TYPE,2)
+                                .putExtra("bean",mDataList.get(position)));
+            }
+        });
+        holder.getBinding().layoutDelete.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                new UIDialog.Builder(mContext)
+                        .setTitle("鎮ㄧ‘瀹氳鍒犻櫎璇ラ」鐩悧")
+                        .setContent("椤圭洰鍒犻櫎鍚庡皢鏃犳硶鎭㈠")
+                        .setConfirm("纭畾")
+                        .setCancel("鍙栨秷")
+                        .setListener(new UIDialog.OnListener() {
+                            @Override
+                            public void onConfirm(BaseDialog dialog) {
+                                viewModel.deleteItem(mDataList.get(position));
+                            }
+                        })
+                        .show();
+            }
+        });
+        ElectronicFileAdapter adapter = new ElectronicFileAdapter(mContext);
+        holder.getBinding().rvImage.setLayoutManager(new GridLayoutManager(mContext,3));
+        holder.getBinding().rvImage.setAdapter(adapter);
+        adapter.setData(Utils.splitString2List(mDataList.get(position).getUrl(),","));
+
+    }
+    public void setCheckable(boolean b) {
+        isCheckable = b;
+        notifyDataSetChanged();
+    }
+    public static class ViewHolder extends BaseRVAdapter.BaseViewHolder<ItemExaminationInfoBinding> {
+        public ViewHolder(ItemExaminationInfoBinding binding) {
+            super(binding);
+        }
+    }
+}
diff --git a/app/src/main/java/com/application/zhangshi_app_android/bean/AnnualHealthStatusBean.java b/app/src/main/java/com/application/zhangshi_app_android/bean/AnnualHealthStatusBean.java
index c706f47..0049a50 100644
--- a/app/src/main/java/com/application/zhangshi_app_android/bean/AnnualHealthStatusBean.java
+++ b/app/src/main/java/com/application/zhangshi_app_android/bean/AnnualHealthStatusBean.java
@@ -9,7 +9,7 @@
  */
 public class AnnualHealthStatusBean implements Serializable {
     //搴忓彿
-    private int id;
+    private int id = -1;
     //浣撴鏃堕棿
     private String checkTime;
     //绫诲埆
diff --git a/app/src/main/java/com/application/zhangshi_app_android/bean/ExaminationInfoBean.java b/app/src/main/java/com/application/zhangshi_app_android/bean/ExaminationInfoBean.java
new file mode 100644
index 0000000..00da0d3
--- /dev/null
+++ b/app/src/main/java/com/application/zhangshi_app_android/bean/ExaminationInfoBean.java
@@ -0,0 +1,61 @@
+package com.application.zhangshi_app_android.bean;
+
+import java.io.Serializable;
+
+/**
+ * @author Ljj
+ * @date 2023.10.23. 22:12
+ * @desc 浣撴淇℃伅
+ */
+public class ExaminationInfoBean implements Serializable {
+    //id
+    private int id;
+    //uid
+    private int uid;
+    //浣撴鏃ユ湡
+    private String happenTime;
+    //骞村害鎶ュ憡
+    private String report;
+    //鐢靛瓙鏂囦欢
+    private String url;
+
+    public String getHappenTime() {
+        return happenTime;
+    }
+
+    public void setHappenTime(String happenTime) {
+        this.happenTime = happenTime;
+    }
+
+    public String getReport() {
+        return report;
+    }
+
+    public void setReport(String report) {
+        this.report = report;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public int getUid() {
+        return uid;
+    }
+
+    public void setUid(int uid) {
+        this.uid = uid;
+    }
+}
diff --git a/app/src/main/java/com/application/zhangshi_app_android/bean/ExaminationInfoRequestBean.java b/app/src/main/java/com/application/zhangshi_app_android/bean/ExaminationInfoRequestBean.java
new file mode 100644
index 0000000..2886c9f
--- /dev/null
+++ b/app/src/main/java/com/application/zhangshi_app_android/bean/ExaminationInfoRequestBean.java
@@ -0,0 +1,47 @@
+package com.application.zhangshi_app_android.bean;
+
+import java.util.Map;
+
+/**
+ * @author Ljj
+ * @date 2023.10.23. 22:24
+ * @desc 浣撴淇℃伅璇锋眰bean
+ */
+public class ExaminationInfoRequestBean extends PageRequestBean{
+    private String report;
+    private String happenStartTime;
+    private String happenEndTime;
+
+    public String getReport() {
+        return report;
+    }
+
+    public void setReport(String report) {
+        this.report = report;
+    }
+
+    public String getHappenStartTime() {
+        return happenStartTime;
+    }
+
+    public void setHappenStartTime(String happenStartTime) {
+        this.happenStartTime = happenStartTime;
+    }
+
+    public String getHappenEndTime() {
+        return happenEndTime;
+    }
+
+    public void setHappenEndTime(String happenEndTime) {
+        this.happenEndTime = happenEndTime;
+    }
+
+    @Override
+    public Map<String, Object> toMap() {
+        Map<String, Object> map = super.toMap();
+        map.put("report",report == null ? "" : report);
+        map.put("happenStartTime",happenStartTime == null ? "" : happenStartTime);
+        map.put("happenEndTime",happenEndTime == null ? "" : happenEndTime);
+        return map;
+    }
+}
diff --git a/app/src/main/java/com/application/zhangshi_app_android/data/DataRepository.java b/app/src/main/java/com/application/zhangshi_app_android/data/DataRepository.java
index b805a04..ac2e5c9 100644
--- a/app/src/main/java/com/application/zhangshi_app_android/data/DataRepository.java
+++ b/app/src/main/java/com/application/zhangshi_app_android/data/DataRepository.java
@@ -10,6 +10,7 @@
 import com.application.zhangshi_app_android.bean.CertificateOfHonorBean;
 import com.application.zhangshi_app_android.bean.CleanStorageBean;
 import com.application.zhangshi_app_android.bean.ContactsDetailBean;
+import com.application.zhangshi_app_android.bean.ExaminationInfoBean;
 import com.application.zhangshi_app_android.bean.FamilyAssetsBean;
 import com.application.zhangshi_app_android.bean.FamilyMemorabiliaBean;
 import com.application.zhangshi_app_android.bean.GrowthExperienceAbroadConditionBean;
@@ -656,6 +657,34 @@
         return mHttpDataSource.getUpdateVersion();
     }
 
+    /**
+     *  鑾峰彇鍘嗗勾浣撴鎶ュ憡
+     */
+    public Observable<ResultData<PageResponseBean<ExaminationInfoBean>>> getExaminationInfo(Map<String, Object> toMap) {
+        return mHttpDataSource.getExaminationInfo(toMap);
+    }
+
+    /**
+     *  鍒犻櫎鍘嗗勾浣撴鎶ュ憡
+     */
+    public Observable<ResultData<String>> deleteExaminationInfo(String ids) {
+        return mHttpDataSource.deleteExaminationInfo(ids);
+    }
+
+    /**
+     *  淇敼鍘嗗勾浣撴鎶ュ憡
+     */
+    public Observable<ResultData<String>> updateExaminationInfo(ExaminationInfoBean examinationInfoBean) {
+        return mHttpDataSource.updateExaminationInfo(examinationInfoBean);
+    }
+
+    /**
+     *  娣诲姞鍘嗗勾浣撴鎶ュ憡
+     */
+    public Observable<ResultData<String>> addExaminationInfo(ExaminationInfoBean examinationInfoBean) {
+        return mHttpDataSource.addExaminationInfo(examinationInfoBean);
+    }
+
 
     /**
      * @see LocalDataSourceImpl
diff --git a/app/src/main/java/com/application/zhangshi_app_android/data/source/HttpDataSource.java b/app/src/main/java/com/application/zhangshi_app_android/data/source/HttpDataSource.java
index a0f3b93..c524605 100644
--- a/app/src/main/java/com/application/zhangshi_app_android/data/source/HttpDataSource.java
+++ b/app/src/main/java/com/application/zhangshi_app_android/data/source/HttpDataSource.java
@@ -7,6 +7,7 @@
 import com.application.zhangshi_app_android.bean.CertificateOfHonorBean;
 import com.application.zhangshi_app_android.bean.CleanStorageBean;
 import com.application.zhangshi_app_android.bean.ContactsDetailBean;
+import com.application.zhangshi_app_android.bean.ExaminationInfoBean;
 import com.application.zhangshi_app_android.bean.HealthCareBaseInfoBean;
 import com.application.zhangshi_app_android.bean.HealthCareExistingProblemsBean;
 import com.application.zhangshi_app_android.bean.HealthCareLifeHabitsBean;
@@ -440,6 +441,26 @@
     Observable<ResultData<UpdateVersionBean>> getUpdateVersion();
 
 
+    /**
+     *  鑾峰彇鍘嗗勾浣撴鎶ュ憡
+     */
+    Observable<ResultData<PageResponseBean<ExaminationInfoBean>>> getExaminationInfo(Map<String, Object> toMap);
+
+    /**
+     *  鍒犻櫎鍘嗗勾浣撴鎶ュ憡
+     */
+    Observable<ResultData<String>> deleteExaminationInfo(String ids);
+
+    /**
+     *  淇敼鍘嗗勾浣撴鎶ュ憡
+     */
+    Observable<ResultData<String>> updateExaminationInfo(ExaminationInfoBean examinationInfoBean);
+
+    /**
+     *  娣诲姞鍘嗗勾浣撴鎶ュ憡
+     */
+    Observable<ResultData<String>> addExaminationInfo(ExaminationInfoBean examinationInfoBean);
+
 }
 
 
diff --git a/app/src/main/java/com/application/zhangshi_app_android/data/source/http/ApiService.java b/app/src/main/java/com/application/zhangshi_app_android/data/source/http/ApiService.java
index 96fc687..07ea9ea 100644
--- a/app/src/main/java/com/application/zhangshi_app_android/data/source/http/ApiService.java
+++ b/app/src/main/java/com/application/zhangshi_app_android/data/source/http/ApiService.java
@@ -7,6 +7,7 @@
 import com.application.zhangshi_app_android.bean.CertificateOfHonorBean;
 import com.application.zhangshi_app_android.bean.CleanStorageBean;
 import com.application.zhangshi_app_android.bean.ContactsDetailBean;
+import com.application.zhangshi_app_android.bean.ExaminationInfoBean;
 import com.application.zhangshi_app_android.bean.HealthCareBaseInfoBean;
 import com.application.zhangshi_app_android.bean.HealthCareExistingProblemsBean;
 import com.application.zhangshi_app_android.bean.HealthCareLifeHabitsBean;
@@ -548,4 +549,28 @@
     @GET("/version")
     Observable<ResultData<UpdateVersionBean>> getUpdateVersion();
 
+    /**
+     * 鑾峰彇鍘嗗勾浣撴鎶ュ憡
+     */
+    @GET("/physcial/all")
+    Observable<ResultData<PageResponseBean<ExaminationInfoBean>>> getExaminationInfo(@QueryMap Map<String, Object> toMap);
+
+    /**
+     * 鍒犻櫎鍘嗗勾浣撴鎶ュ憡
+     */
+    @DELETE("/physcial/{ids}")
+    Observable<ResultData<String>> deleteExaminationInfo(@Path("ids") String ids);
+
+    /**
+     * 淇敼鍘嗗勾浣撴鎶ュ憡
+     */
+    @PUT("/physcial")
+    Observable<ResultData<String>> updateExaminationInfo(@Body ExaminationInfoBean examinationInfoBean);
+
+    /**
+     * 娣诲姞鍘嗗勾浣撴鎶ュ憡
+     */
+    @POST("/physcial")
+    Observable<ResultData<String>> addExaminationInfo(@Body ExaminationInfoBean examinationInfoBean);
+
 }
diff --git a/app/src/main/java/com/application/zhangshi_app_android/data/source/http/HttpDataSourceImpl.java b/app/src/main/java/com/application/zhangshi_app_android/data/source/http/HttpDataSourceImpl.java
index f570b8f..85e2257 100644
--- a/app/src/main/java/com/application/zhangshi_app_android/data/source/http/HttpDataSourceImpl.java
+++ b/app/src/main/java/com/application/zhangshi_app_android/data/source/http/HttpDataSourceImpl.java
@@ -8,6 +8,7 @@
 import com.application.zhangshi_app_android.bean.CertificateOfHonorBean;
 import com.application.zhangshi_app_android.bean.CleanStorageBean;
 import com.application.zhangshi_app_android.bean.ContactsDetailBean;
+import com.application.zhangshi_app_android.bean.ExaminationInfoBean;
 import com.application.zhangshi_app_android.bean.HealthCareBaseInfoBean;
 import com.application.zhangshi_app_android.bean.HealthCareExistingProblemsBean;
 import com.application.zhangshi_app_android.bean.HealthCareLifeHabitsBean;
@@ -62,7 +63,7 @@
     private volatile static HttpDataSourceImpl INSTANCE = null;
 
     private HttpDataSourceImpl() {
-        this.apiService = RetrofitManager.getInstance().getRetrofit(BaseConfig.BASE_URL).create(ApiService.class);
+        this.apiService = RetrofitManager.getInstance().getRetrofit(BaseConfig.BASE_URL_DOMAIN).create(ApiService.class);
     }
 
     public static HttpDataSourceImpl getInstance() {
@@ -710,4 +711,36 @@
     public Observable<ResultData<UpdateVersionBean>> getUpdateVersion() {
         return apiService.getUpdateVersion();
     }
+
+    /**
+     *  鑾峰彇鍘嗗勾浣撴鎶ュ憡
+     */
+    @Override
+    public Observable<ResultData<PageResponseBean<ExaminationInfoBean>>> getExaminationInfo(Map<String, Object> toMap) {
+        return apiService.getExaminationInfo(toMap);
+    }
+
+    /**
+     *  鍒犻櫎鍘嗗勾浣撴鎶ュ憡
+     */
+    @Override
+    public Observable<ResultData<String>> deleteExaminationInfo(String ids) {
+        return apiService.deleteExaminationInfo(ids);
+    }
+
+    /**
+     *  淇敼鍘嗗勾浣撴鎶ュ憡
+     */
+    @Override
+    public Observable<ResultData<String>> updateExaminationInfo(ExaminationInfoBean examinationInfoBean) {
+        return apiService.updateExaminationInfo(examinationInfoBean);
+    }
+
+    /**
+     *  鏂板鍘嗗勾浣撴鎶ュ憡
+     */
+    @Override
+    public Observable<ResultData<String>> addExaminationInfo(ExaminationInfoBean examinationInfoBean) {
+        return apiService.addExaminationInfo(examinationInfoBean);
+    }
 }
diff --git a/app/src/main/java/com/application/zhangshi_app_android/ui/BrowserActivity.java b/app/src/main/java/com/application/zhangshi_app_android/ui/BrowserActivity.java
new file mode 100644
index 0000000..ab92389
--- /dev/null
+++ b/app/src/main/java/com/application/zhangshi_app_android/ui/BrowserActivity.java
@@ -0,0 +1,184 @@
+package com.application.zhangshi_app_android.ui;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.drawable.BitmapDrawable;
+import android.text.TextUtils;
+import android.util.Base64;
+import android.view.KeyEvent;
+import android.view.View;
+import android.webkit.WebChromeClient;
+import android.webkit.WebSettings;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+
+import androidx.annotation.NonNull;
+
+import com.android.app_base.base.dialog.BaseDialog;
+import com.android.app_base.base.dialog.WaitDialog;
+import com.android.app_base.base.view.BaseActivity;
+import com.application.zhangshi_app_android.R;
+import com.application.zhangshi_app_android.databinding.ActivityBrowserBinding;
+import com.hjq.bar.TitleBar;
+import com.scwang.smart.refresh.layout.api.RefreshLayout;
+import com.scwang.smart.refresh.layout.listener.OnRefreshListener;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+
+/**
+ * @author Ljj
+ * @date 2023.10.15. 22:36
+ * @desc 娴忚鍣ㄧ晫闈�
+ */
+public class BrowserActivity extends BaseActivity<ActivityBrowserBinding,SimpleViewModel> {
+
+    private static final String INTENT_URL = "url";
+
+    private String url;
+    private BaseDialog mWaitDialog;
+
+
+    public static void start(Context context, String url) {
+        if (TextUtils.isEmpty(url)) {
+            return;
+        }
+        Intent intent = new Intent(context, BrowserActivity.class);
+        intent.putExtra(INTENT_URL, url);
+        if (!(context instanceof Activity)) {
+            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        }
+        context.startActivity(intent);
+    }
+
+    @Override
+    public int getLayoutId() {
+        return R.layout.activity_browser;
+    }
+
+    @Override
+    public int getVariableId() {
+        return 0;
+    }
+
+    @Override
+    public void initParam() {
+        url = getIntent().getStringExtra(INTENT_URL);
+    }
+
+    @Override
+    public void initView() {
+        binding.slBrowserRefresh.setEnableRefresh(true);
+        binding.slBrowserRefresh.setEnableLoadMore(false);
+        binding.slBrowserRefresh.setOnRefreshListener(new OnRefreshListener() {
+            @Override
+            public void onRefresh(@NonNull RefreshLayout refreshLayout) {
+                binding.wvBrowserView.reload();
+            }
+        });
+
+        WebSettings webSettings = binding.wvBrowserView.getSettings();
+        webSettings.setJavaScriptEnabled(true); // 鍚敤JavaScript
+        webSettings.setBuiltInZoomControls(true); // 鍚敤鍐呯疆鐨勭缉鏀炬帶浠�
+        webSettings.setDisplayZoomControls(false); // 闅愯棌缂╂斁鎸夐挳
+        webSettings.setSupportZoom(true); // 鍚敤缂╂斁
+        webSettings.setLoadWithOverviewMode(true); // 缂╂斁鑷冲睆骞曠殑澶у皬
+        webSettings.setUseWideViewPort(true); // 鍚敤鏀寔瑙嗙獥
+
+        binding.wvBrowserView.setWebViewClient(new WebViewClient(){
+            /**
+             * 寮�濮嬪姞杞界綉椤�
+             */
+            @Override
+            public void onPageStarted(WebView view, String url, Bitmap favicon) {
+                binding.pbBrowserProgress.setVisibility(View.VISIBLE);
+            }
+
+            /**
+             * 瀹屾垚鍔犺浇缃戦〉
+             */
+            @Override
+            public void onPageFinished(WebView view, String url) {
+                binding.pbBrowserProgress.setVisibility(View.GONE);
+                binding.slBrowserRefresh.finishRefresh();
+                dialogDismiss();
+            }
+        });
+        binding.wvBrowserView.setWebChromeClient(new WebChromeClient(){
+            /**
+             * 鏀跺埌缃戦〉鏍囬
+             */
+            @Override
+            public void onReceivedTitle(WebView view, String title) {
+                if (title == null) {
+                    return;
+                }
+                binding.tbBrowserTitle.setTitle(title);
+            }
+
+            @Override
+            public void onReceivedIcon(WebView view, Bitmap icon) {
+                if (icon == null) {
+                    return;
+                }
+//                setRightIcon(new BitmapDrawable(getResources(), icon));
+            }
+
+            /**
+             * 鏀跺埌鍔犺浇杩涘害鍙樺寲
+             */
+            @Override
+            public void onProgressChanged(WebView view, int newProgress) {
+                binding.pbBrowserProgress.setProgress(newProgress);
+            }
+        });
+    }
+
+    @Override
+    public void initData() {
+        dialogLoading();
+        binding.wvBrowserView.loadUrl(url);
+    }
+
+    @Override
+    public void initLiveDataObserve() {
+
+    }
+
+    @Override
+    public void onLeftClick(TitleBar titleBar) {
+        finish();
+    }
+
+    @Override
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
+        if (keyCode == KeyEvent.KEYCODE_BACK && binding.wvBrowserView.canGoBack()) {
+            // 鍚庨��缃戦〉骞朵笖鎷︽埅璇ヤ簨浠�
+            binding.wvBrowserView.goBack();
+            return true;
+        }
+        return super.onKeyDown(keyCode, event);
+    }
+
+    @Override
+    protected void dialogLoading() {
+        if (mWaitDialog == null) {
+            mWaitDialog = new WaitDialog.Builder(this)
+                    .create();
+            mWaitDialog.setCancelable(true);
+        }
+        if (!mWaitDialog.isShowing()) {
+            mWaitDialog.show();
+        }
+    }
+
+    @Override
+    protected void dialogDismiss() {
+        if (mWaitDialog != null && mWaitDialog.isShowing()) {
+            mWaitDialog.dismiss();
+            mWaitDialog = null;
+        }
+    }
+}
diff --git a/app/src/main/java/com/application/zhangshi_app_android/ui/DLBaseActivity.java b/app/src/main/java/com/application/zhangshi_app_android/ui/DLBaseActivity.java
index a93d8b1..c5b1f88 100644
--- a/app/src/main/java/com/application/zhangshi_app_android/ui/DLBaseActivity.java
+++ b/app/src/main/java/com/application/zhangshi_app_android/ui/DLBaseActivity.java
@@ -15,6 +15,7 @@
 import androidx.databinding.ViewDataBinding;
 import androidx.drawerlayout.widget.DrawerLayout;
 
+import com.android.app_base.base.BaseConfig;
 import com.android.app_base.base.view.BaseActivity;
 import com.android.app_base.base.viewmodel.BaseViewModel;
 import com.android.app_base.manager.AppManager;
@@ -24,13 +25,13 @@
 import com.android.app_base.utils.rxbus.MessageEvent;
 import com.android.app_base.utils.rxbus.RxBus;
 import com.application.zhangshi_app_android.R;
+import com.application.zhangshi_app_android.ui.function.AnnualHealthStatusActivity;
 import com.application.zhangshi_app_android.ui.function.CertificateOfHonorActivity;
 import com.application.zhangshi_app_android.ui.function.CleanStorageActivity;
 import com.application.zhangshi_app_android.ui.function.ContactsActivity;
 import com.application.zhangshi_app_android.ui.function.FamilyAssetsActivity;
 import com.application.zhangshi_app_android.ui.function.FamilyMemorabiliaActivity;
 import com.application.zhangshi_app_android.ui.function.GrowthExperienceActivity;
-import com.application.zhangshi_app_android.ui.function.HealthCareActivity;
 import com.application.zhangshi_app_android.ui.function.HomeDevicesActivity;
 import com.application.zhangshi_app_android.ui.function.HonorCollectionActivity;
 import com.application.zhangshi_app_android.ui.function.HundredWishActivity;
@@ -38,7 +39,6 @@
 import com.application.zhangshi_app_android.ui.function.LittleDoctorActivity;
 import com.application.zhangshi_app_android.ui.function.MarriageActivity;
 import com.application.zhangshi_app_android.ui.function.PetActivity;
-import com.application.zhangshi_app_android.ui.function.PetDetailActivity;
 import com.application.zhangshi_app_android.ui.function.PrivacyActivity;
 import com.application.zhangshi_app_android.ui.function.PropertyActivity;
 import com.application.zhangshi_app_android.ui.function.TourismActivity;
@@ -121,7 +121,7 @@
             classMap.put(MarriageActivity.class,(LinearLayout) findViewById(R.id.dl_marriage));
             classMap.put(PropertyActivity.class,(LinearLayout) findViewById(R.id.dl_property));
             classMap.put(HundredWishActivity.class,(LinearLayout) findViewById(R.id.dl_hundred_wish));
-            classMap.put(HealthCareActivity.class,(LinearLayout) findViewById(R.id.dl_health_care));
+            classMap.put(AnnualHealthStatusActivity.class,(LinearLayout) findViewById(R.id.dl_health_care));
             classMap.put(CertificateOfHonorActivity.class,(LinearLayout) findViewById(R.id.dl_certificate_of_honor));
             classMap.put(PrivacyActivity.class,(LinearLayout) findViewById(R.id.dl_privacy));
             classMap.put(TourismActivity.class,(LinearLayout) findViewById(R.id.dl_tourism));
@@ -135,8 +135,11 @@
                             if (set.getKey() == HomeFragment.class) {
                                 MainActivity.start(this, HomeFragment.class);
                             }else{
-                                AppManager.getAppManager().startActivity(set.getKey());
+                                if(this.getClass() != set.getKey()){
+                                    AppManager.getAppManager().startActivity(set.getKey());
+                                }
                             }
+                            mDrawerLayout.close();
                         }
                     });
                 } else {
@@ -160,6 +163,11 @@
 
     public void setNameAndAvatar(String name,String avatar){
         if (mDrawerLayout != null){
+            if (avatar.contains("profile/upload")) {//濡傛灉鏄笂浼犲埌鏈嶅姟鍣ㄧ殑鍥剧墖
+                //鍙彇profile/upload浠ュ悗鐨勯儴鍒�
+                avatar = avatar.substring(avatar.indexOf("profile/upload"));
+                avatar = BaseConfig.BASE_URL_DOMAIN + "/" + avatar;
+            }
             GlideUtil.loadImage(avatar, findViewById(R.id.dl_home_user_avatar));
             TextView userNameTv = findViewById(R.id.dl_home_user_name);
             userNameTv.setText(name);
diff --git a/app/src/main/java/com/application/zhangshi_app_android/ui/DLBaseFragment.java b/app/src/main/java/com/application/zhangshi_app_android/ui/DLBaseFragment.java
index 1985b69..eb32c4c 100644
--- a/app/src/main/java/com/application/zhangshi_app_android/ui/DLBaseFragment.java
+++ b/app/src/main/java/com/application/zhangshi_app_android/ui/DLBaseFragment.java
@@ -17,6 +17,7 @@
 import androidx.databinding.ViewDataBinding;
 import androidx.drawerlayout.widget.DrawerLayout;
 
+import com.android.app_base.base.BaseConfig;
 import com.android.app_base.base.view.BaseFragment;
 import com.android.app_base.base.viewmodel.BaseViewModel;
 import com.android.app_base.manager.AppManager;
@@ -25,13 +26,13 @@
 import com.android.app_base.utils.rxbus.MessageEvent;
 import com.android.app_base.utils.rxbus.RxBus;
 import com.application.zhangshi_app_android.R;
+import com.application.zhangshi_app_android.ui.function.AnnualHealthStatusActivity;
 import com.application.zhangshi_app_android.ui.function.CertificateOfHonorActivity;
 import com.application.zhangshi_app_android.ui.function.CleanStorageActivity;
 import com.application.zhangshi_app_android.ui.function.ContactsActivity;
 import com.application.zhangshi_app_android.ui.function.FamilyAssetsActivity;
 import com.application.zhangshi_app_android.ui.function.FamilyMemorabiliaActivity;
 import com.application.zhangshi_app_android.ui.function.GrowthExperienceActivity;
-import com.application.zhangshi_app_android.ui.function.HealthCareActivity;
 import com.application.zhangshi_app_android.ui.function.HomeDevicesActivity;
 import com.application.zhangshi_app_android.ui.function.HonorCollectionActivity;
 import com.application.zhangshi_app_android.ui.function.HundredWishActivity;
@@ -43,6 +44,7 @@
 import com.application.zhangshi_app_android.ui.function.PropertyActivity;
 import com.application.zhangshi_app_android.ui.function.TourismActivity;
 import com.application.zhangshi_app_android.ui.home.HomeFragment;
+import com.application.zhangshi_app_android.ui.main.MainActivity;
 import com.hjq.bar.TitleBar;
 
 import java.util.HashMap;
@@ -128,7 +130,7 @@
             classMap.put(MarriageActivity.class,(LinearLayout) findViewById(R.id.dl_marriage));
             classMap.put(PropertyActivity.class,(LinearLayout) findViewById(R.id.dl_property));
             classMap.put(HundredWishActivity.class,(LinearLayout) findViewById(R.id.dl_hundred_wish));
-            classMap.put(HealthCareActivity.class,(LinearLayout) findViewById(R.id.dl_health_care));
+            classMap.put(AnnualHealthStatusActivity.class,(LinearLayout) findViewById(R.id.dl_health_care));
             classMap.put(CertificateOfHonorActivity.class,(LinearLayout) findViewById(R.id.dl_certificate_of_honor));
             classMap.put(PrivacyActivity.class,(LinearLayout) findViewById(R.id.dl_privacy));
             classMap.put(TourismActivity.class,(LinearLayout) findViewById(R.id.dl_tourism));
@@ -139,7 +141,12 @@
                 if (linearLayout != null) {
                     linearLayout.setOnClickListener(v -> {
                         if (set.getKey() != null){
-                            AppManager.getAppManager().startActivity(set.getKey());
+                            if (set.getKey() == HomeFragment.class) {
+                                MainActivity.start(getContext(), HomeFragment.class);
+                            }else{
+                                AppManager.getAppManager().startActivity(set.getKey());
+                            }
+                            mDrawerLayout.close();
                         }
                     });
                 } else {
@@ -171,6 +178,11 @@
 
     public void setNameAndAvatar(String name,String avatar){
         if (mDrawerLayout != null){
+            if (avatar.contains("profile/upload")) {//濡傛灉鏄笂浼犲埌鏈嶅姟鍣ㄧ殑鍥剧墖
+                //鍙彇profile/upload浠ュ悗鐨勯儴鍒�
+                avatar = avatar.substring(avatar.indexOf("profile/upload"));
+                avatar = BaseConfig.BASE_URL_DOMAIN + "/" + avatar;
+            }
             GlideUtil.loadImage(avatar, findViewById(R.id.dl_home_user_avatar));
             TextView userNameTv = findViewById(R.id.dl_home_user_name);
             userNameTv.setText(name);
diff --git a/app/src/main/java/com/application/zhangshi_app_android/ui/PlayActivity.java b/app/src/main/java/com/application/zhangshi_app_android/ui/PlayerActivity.java
similarity index 88%
rename from app/src/main/java/com/application/zhangshi_app_android/ui/PlayActivity.java
rename to app/src/main/java/com/application/zhangshi_app_android/ui/PlayerActivity.java
index 3be527b..e035502 100644
--- a/app/src/main/java/com/application/zhangshi_app_android/ui/PlayActivity.java
+++ b/app/src/main/java/com/application/zhangshi_app_android/ui/PlayerActivity.java
@@ -2,13 +2,11 @@
 
 import android.annotation.TargetApi;
 import android.app.Activity;
-import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
 import android.os.Build;
 import android.os.Handler;
 import android.transition.Transition;
-import android.transition.TransitionListenerAdapter;
 import android.view.View;
 import android.widget.ImageView;
 
@@ -17,6 +15,7 @@
 import androidx.core.util.Pair;
 import androidx.core.view.ViewCompat;
 
+import com.android.app_base.base.BaseConfig;
 import com.android.app_base.base.view.BaseActivity;
 import com.android.app_base.utils.GlideUtil;
 import com.application.zhangshi_app_android.R;
@@ -24,15 +23,12 @@
 import com.shuyu.gsyvideoplayer.GSYVideoManager;
 import com.shuyu.gsyvideoplayer.utils.OrientationUtils;
 
-import java.util.ArrayList;
-import java.util.List;
-
 /**
  * @author Ljj
  * @date 2023.09.04. 15:59
- * @desc
+ * @desc 瑙嗛鎾斁 Activity
  */
-public class PlayActivity extends BaseActivity<ActivityPlayBinding,SimpleViewModel> {
+public class PlayerActivity extends BaseActivity<ActivityPlayBinding,SimpleViewModel> {
     public final static String IMG_TRANSITION = "IMG_TRANSITION";
     public final static String TRANSITION = "TRANSITION";
     public final static String VIDEO_URL = "VIDEO_URL";
@@ -228,11 +224,11 @@
      * @param isTransition 鏄惁鏈夎繃娓″姩鐢�
      */
     public static void start(Activity activity, String url, View view, boolean isTransition){
-        Intent intent = new Intent(activity, PlayActivity.class);
-        intent.putExtra(PlayActivity.TRANSITION, isTransition);
-        intent.putExtra(PlayActivity.VIDEO_URL, url);
+        Intent intent = new Intent(activity, PlayerActivity.class);
+        intent.putExtra(PlayerActivity.TRANSITION, isTransition);
+        intent.putExtra(PlayerActivity.VIDEO_URL, url);
         if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
-            Pair pair = new Pair<>(view, PlayActivity.IMG_TRANSITION);
+            Pair pair = new Pair<>(view, PlayerActivity.IMG_TRANSITION);
             ActivityOptionsCompat activityOptions = ActivityOptionsCompat.makeSceneTransitionAnimation(
                     activity, pair);
             ActivityCompat.startActivity(activity, intent, activityOptions.toBundle());
@@ -241,4 +237,20 @@
             activity.overridePendingTransition(androidx.appcompat.R.anim.abc_fade_in, androidx.appcompat.R.anim.abc_fade_out);
         }
     }
+
+    /**
+     * 鍚姩鎾斁鐣岄潰锛堟嫾鎺ュ畬鏁寸殑url锛�
+     * @param activity
+     * @param url
+     * @param view
+     * @param isTransition
+     */
+    public static void startWrapUrl(Activity activity, String url, View view, boolean isTransition){
+        if (url.contains("profile/upload")) {//濡傛灉鏄笂浼犲埌鏈嶅姟鍣ㄧ殑鍥剧墖
+            //鍙彇profile/upload浠ュ悗鐨勯儴鍒�
+            url = url.substring(url.indexOf("profile/upload"));
+            url = BaseConfig.BASE_URL_DOMAIN + "/" + url;
+        }
+        start(activity,url,view,isTransition);
+    }
 }
diff --git a/app/src/main/java/com/application/zhangshi_app_android/ui/dialog/UpdateDialog.java b/app/src/main/java/com/application/zhangshi_app_android/ui/dialog/UpdateDialog.java
index 00cb688..314e963 100644
--- a/app/src/main/java/com/application/zhangshi_app_android/ui/dialog/UpdateDialog.java
+++ b/app/src/main/java/com/application/zhangshi_app_android/ui/dialog/UpdateDialog.java
@@ -41,7 +41,9 @@
 import java.util.Timer;
 import java.util.TimerTask;
 
-
+/**
+ *  鐗堟湰鏇存柊寮圭獥
+ */
 public final class UpdateDialog {
 
     public static final class Builder
diff --git a/app/src/main/java/com/application/zhangshi_app_android/ui/dialog/VersionUpdateDialog.java b/app/src/main/java/com/application/zhangshi_app_android/ui/dialog/VersionUpdateDialog.java
deleted file mode 100644
index b7679c7..0000000
--- a/app/src/main/java/com/application/zhangshi_app_android/ui/dialog/VersionUpdateDialog.java
+++ /dev/null
@@ -1,244 +0,0 @@
-package com.application.zhangshi_app_android.ui.dialog;
-
-import static com.blankj.utilcode.util.StringUtils.getString;
-
-import android.animation.Animator;
-import android.animation.ValueAnimator;
-import android.annotation.SuppressLint;
-import android.app.DownloadManager;
-import android.content.Context;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Environment;
-import android.os.Handler;
-import android.util.Log;
-import android.view.Gravity;
-import android.view.View;
-import android.widget.ProgressBar;
-import android.widget.RelativeLayout;
-import android.widget.TextView;
-
-import androidx.annotation.StringRes;
-
-import com.android.app_base.base.dialog.BaseDialog;
-import com.android.app_base.utils.Utils;
-import com.application.zhangshi_app_android.MyApplication;
-import com.application.zhangshi_app_android.R;
-
-import java.util.Timer;
-import java.util.TimerTask;
-
-/**
- * @author Ljj
- * @date 2023.07.25. 16:59
- * @desc
- */
-public final class VersionUpdateDialog {
-    @SuppressWarnings("unchecked")
-    public static class Builder<B extends VersionUpdateDialog.Builder<B>>
-            extends BaseDialog.Builder<B> {
-
-        private boolean mAutoDismiss = true;
-
-        private final TextView mTitleView;
-        private final TextView mContentView;
-        private final TextView mConfirmView;
-        private final ProgressBar progressBar;
-        private final TextView tv_pro;
-        private final TextView tv_pro_percent;
-        private final RelativeLayout layout_progress;
-
-        private String downloadUrl;
-
-        public Builder(Context context) {
-            super(context);
-            setContentView(R.layout.dialog_version_update);
-            setAnimStyle(BaseDialog.ANIM_IOS);
-            setGravity(Gravity.CENTER);
-            setBackgroundDimAmount(0.5F);
-            setCanceledOnTouchOutside(true);
-            mTitleView = findViewById(R.id.tv_update_dialog_title);
-            mContentView = findViewById(R.id.tv_update_dialog_content);
-            mConfirmView = findViewById(R.id.tv_update_dialog_confirm);
-            progressBar = findViewById(R.id.pb_download);
-            tv_pro = findViewById(R.id.tv_pro);
-            tv_pro_percent = findViewById(R.id.tv_pro_percent);
-            layout_progress = findViewById(R.id.layout_progress);
-            setOnClickListener(mConfirmView);
-        }
-
-        public B setDownloadUrl(String downloadUrl) {
-            this.downloadUrl = downloadUrl;
-            return (B) this;
-        }
-
-        public B setTitle(@StringRes int id) {
-            return setTitle(getString(id));
-        }
-
-        public B setTitle(CharSequence text) {
-            mTitleView.setText(text);
-            return (B) this;
-        }
-
-        public B setContent(CharSequence text) {
-            mContentView.setText(text);
-            return (B) this;
-        }
-
-        public B setConfirm(@StringRes int id) {
-            return setConfirm(getString(id));
-        }
-
-        public B setConfirm(CharSequence text) {
-            mConfirmView.setText(text);
-            return (B) this;
-        }
-
-        public B setAutoDismiss(boolean dismiss) {
-            mAutoDismiss = dismiss;
-            return (B) this;
-        }
-
-        public void autoDismiss() {
-            if (mAutoDismiss) {
-                dismiss();
-            }
-        }
-
-        @Override
-        public void onClick(View v) {
-            if (v == mConfirmView) {
-                changeVisi(View.GONE,View.VISIBLE);
-                if (downloadUrl != null){
-                    startDownLoadApp(downloadUrl);
-                }
-            }
-        }
-
-
-        @Override
-        public BaseDialog show() {
-            return super.show();
-        }
-
-
-        public long totalBytes;
-        public long downloadBytes;
-        public int dl_progress;
-
-        private Handler handler = new Handler();
-        Runnable runnable = new Runnable() {
-            @Override
-            public void run() {
-                // TODO Auto-generated method stub
-                progressBar.setProgress(dl_progress);
-                ValueAnimator animator = ValueAnimator.ofInt(progressBar.getProgress(), dl_progress);
-                animator.setDuration(100);
-                animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
-                    @Override
-                    public void onAnimationUpdate(ValueAnimator animation) {
-                        int currentValue = (int) animation.getAnimatedValue();
-                        progressBar.setProgress(currentValue);
-                        tv_pro.setText(currentValue + "%");
-                        tv_pro_percent.setText(currentValue + "/100");
-                    }
-                });
-                animator.start();
-//                tv_pro.setText((downloadBytes * 100 / totalBytes) + "%");
-//                tv_pro_percent.setText((downloadBytes * 100 / totalBytes) + "/100");
-            }
-        };
-
-        public void changeVisi(int a, int b) {
-            mConfirmView.setVisibility(a);
-            layout_progress.setVisibility(b);
-            progressBar.setProgress(0);
-            tv_pro.setText("0");
-            tv_pro_percent.setText("0/100");
-        }
-
-        /**
-         * 涓嶆秹鍙婃暟鎹簱锛屽崟鐙笅杞芥枃浠�
-         */
-        public void startDownLoadApp(String url) {
-            String fileName = "app_update";
-            //鍒涘缓涓嬭浇浠诲姟,downloadUrl灏辨槸涓嬭浇閾炬帴
-            DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
-            request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);//涓嬭浇杩涜涓拰涓嬭浇瀹屾垚鐨勯�氱煡鏍忔槸鍚︽樉绀�
-            //鐢ㄤ簬璁剧疆涓嬭浇鏃舵椂鍊欏湪鐘舵�佹爮鏄剧ず閫氱煡淇℃伅
-            request.allowScanningByMediaScanner();//璁剧疆鍏佽琚壂鎻忓埌
-            request.setVisibleInDownloadsUi(true);//涓嬭浇鐨勬枃浠跺彲浠ヨ绯荤粺鐨凞ownloads搴旂敤鎵弿鍒板苟绠$悊
-
-            request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName); //鎸囧畾涓嬭浇璺緞鍜屼笅杞芥枃浠跺悕
-
-            final DownloadManager downloadManager = (DownloadManager) MyApplication.getInstance().getSystemService(Context.DOWNLOAD_SERVICE);//鑾峰彇涓嬭浇绠$悊鍣�
-            final long downloadID = downloadManager.enqueue(request);//灏嗕笅杞戒换鍔″姞鍏ヤ笅杞介槦鍒楋紝鍚﹀垯涓嶄細杩涜涓嬭浇
-
-            final DownloadManager.Query query = new DownloadManager.Query();
-            query.setFilterById(downloadID);//绛涢�変笅杞戒换鍔★紝浼犲叆浠诲姟ID锛屽彲鍙樺弬鏁�
-
-
-            final Timer mTimer = new Timer();
-            mTimer.schedule(new TimerTask() {
-                @Override
-                public void run() {
-                    updateDownloadSize(query, mTimer, downloadManager, fileName);
-                }
-            }, 0, 1000);
-        }
-
-        @SuppressLint("Range")
-        private void updateDownloadSize(DownloadManager.Query query, Timer mTimer, DownloadManager downloadManager, String fileName) {
-            Cursor c = null;
-            try {
-                c = downloadManager.query(query);
-                if (c != null) {
-                    if (c.moveToFirst()) {
-                        int downloadBytesIdx = c.getColumnIndexOrThrow(
-                                DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR);
-                        int totalBytesIdx = c.getColumnIndexOrThrow(
-                                DownloadManager.COLUMN_TOTAL_SIZE_BYTES);
-                        totalBytes = c.getLong(totalBytesIdx);
-                        downloadBytes = c.getLong(downloadBytesIdx);
-                        int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));
-                        // 宸蹭笅杞界殑瀛楄妭澶у皬
-                        final long downloadedSoFar = c.getLong(c.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));
-                        // 涓嬭浇鏂囦欢鐨勬�诲瓧鑺傚ぇ灏�
-                        final long totalSize = c.getLong(c.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));
-                        dl_progress = (int) (downloadedSoFar * 100 / totalSize);
-                        switch (status) {
-                            case DownloadManager.STATUS_PAUSED:
-                                Log.d("APPUpdate", "涓嬭浇鏆傚仠:" + fileName);
-                            case DownloadManager.STATUS_PENDING:
-                                Log.d("APPUpdate", "涓嬭浇寤惰繜:" + fileName);
-                            case DownloadManager.STATUS_RUNNING:
-                                Log.d("APPUpdate", "姝e湪涓嬭浇:" + fileName);
-                                handler.postDelayed(runnable, 100);
-                                break;
-                            case DownloadManager.STATUS_SUCCESSFUL:
-                                Log.d("APPUpdate", "涓嬭浇瀹屾垚:" + fileName);
-                                mTimer.cancel();
-                                dismiss();
-                                handler=null;
-                                //涓嬭浇瀹屾垚瀹夎APK
-                                Utils.installAPK(getContext(), fileName);
-                                break;
-                            case DownloadManager.STATUS_FAILED:
-                                Log.d("APPUpdate", "涓嬭浇澶辫触:" + fileName);
-                                setContent("涓嬭浇澶辫触锛岃閲嶆柊涓嬭浇");
-                                changeVisi(View.VISIBLE,View.GONE);
-                                break;
-                        }
-                    }
-                }
-            } finally {
-                if (c != null) {
-                    c.close();
-                }
-            }
-
-        }
-
-    }
-}
diff --git a/app/src/main/java/com/application/zhangshi_app_android/ui/function/AnnualHealthStatusActivity.java b/app/src/main/java/com/application/zhangshi_app_android/ui/function/AnnualHealthStatusActivity.java
index 8cbc7af..a1d3edb 100644
--- a/app/src/main/java/com/application/zhangshi_app_android/ui/function/AnnualHealthStatusActivity.java
+++ b/app/src/main/java/com/application/zhangshi_app_android/ui/function/AnnualHealthStatusActivity.java
@@ -69,12 +69,14 @@
         binding.recyclerView.addItemDecoration(itemDecoration);
         binding.recyclerView.setAdapter(adapter);
         //鍙充笂瑙掓搷浣滃脊绐�
-        mOperatePopupWindow = initPopUpWindow(View.inflate(this,R.layout.pop_operate,null));
+        mOperatePopupWindow = initPopUpWindow(View.inflate(this, R.layout.pop_operate_exam_info, null));
         setOnClickListener(
                 mOperatePopupWindow.getContentView().findViewById(R.id.tv_add),
                 mOperatePopupWindow.getContentView().findViewById(R.id.tv_select),
                 mOperatePopupWindow.getContentView().findViewById(R.id.tv_from_new_to_old),
-                mOperatePopupWindow.getContentView().findViewById(R.id.tv_from_old_to_new)
+                mOperatePopupWindow.getContentView().findViewById(R.id.tv_from_old_to_new),
+                mOperatePopupWindow.getContentView().findViewById(R.id.tv_exam_info),
+                mOperatePopupWindow.getContentView().findViewById(R.id.tv_health_care)
         );
         //鐐瑰嚮鏀惧ぇ闀滄寜閽樉绀哄嚭鎼滅储妗�
         binding.ivSearchDefault.setOnClickListener(v -> {
@@ -235,7 +237,7 @@
             if (integer == 0){
                 binding.ivOperate.setBackgroundResource(R.drawable.ic_operate);
                 binding.ivOperate.setOnClickListener(v -> {
-                    mOperatePopupWindow.showAsDropDown(binding.ivOperate,-ScreenSizeUtils.dip2px(this,85) +binding.ivOperate.getWidth(),0);
+                    mOperatePopupWindow.showAsDropDown(binding.ivOperate,-ScreenSizeUtils.dip2px(this,118) +binding.ivOperate.getWidth(),0);
                 });
                 adapter.setCheckable(false);
             }else if (integer == 1){
@@ -311,6 +313,12 @@
         } else if (id == R.id.tv_from_old_to_new) {
             viewModel.changeOrder(false);
             mOperatePopupWindow.dismiss();
+        }else if (id == R.id.tv_health_care){
+            AppManager.getAppManager().startActivity(HealthCareActivity.class);
+            mOperatePopupWindow.dismiss();
+        }else if (id == R.id.tv_exam_info){
+            AppManager.getAppManager().startActivity(ExaminationInfoActivity.class);
+            mOperatePopupWindow.dismiss();
         }
     }
 
@@ -336,8 +344,5 @@
         return super.dispatchTouchEvent(event);
     }
 
-    @Override
-    public void onLeftClick(TitleBar titleBar) {
-        finish();
-    }
+
 }
diff --git a/app/src/main/java/com/application/zhangshi_app_android/ui/function/AnnualHealthStatusActivityViewModel.java b/app/src/main/java/com/application/zhangshi_app_android/ui/function/AnnualHealthStatusActivityViewModel.java
index 858180e..9a3560d 100644
--- a/app/src/main/java/com/application/zhangshi_app_android/ui/function/AnnualHealthStatusActivityViewModel.java
+++ b/app/src/main/java/com/application/zhangshi_app_android/ui/function/AnnualHealthStatusActivityViewModel.java
@@ -96,10 +96,6 @@
      * 鍔犺浇鏇村
      */
     public void getMoreAnnualHealthStatus() {
-        if (true){
-            changeStateView(StateViewEnum.DATA_NULL);
-            return;
-        }
         if (getRequestBeanLiveData().getValue() == null){
             getRequestBeanLiveData().setValue(new AnnualHealthStatusRequestBean());
         }
diff --git a/app/src/main/java/com/application/zhangshi_app_android/ui/function/AnnualHealthStatusDetailActivity.java b/app/src/main/java/com/application/zhangshi_app_android/ui/function/AnnualHealthStatusDetailActivity.java
index d4a5ead..5a9f31b 100644
--- a/app/src/main/java/com/application/zhangshi_app_android/ui/function/AnnualHealthStatusDetailActivity.java
+++ b/app/src/main/java/com/application/zhangshi_app_android/ui/function/AnnualHealthStatusDetailActivity.java
@@ -85,9 +85,6 @@
         GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3);
         binding.rvImage.setLayoutManager(gridLayoutManager);
         binding.rvImage.setNestedScrollingEnabled(false);
-        View footerView = View.inflate(this,R.layout.item_image_footer,null);
-        binding.rvImage.addFooterView(footerView);
-        binding.rvImage.requestLayout();
         adapter.setItemAndAddClickListener(new ElectronicFileAddAdapter.OnItemAndAddClickListener() {
             @Override
             public void onItemClick(View v, int position) {
diff --git a/app/src/main/java/com/application/zhangshi_app_android/ui/function/CertificateOfHonorActivityViewModel.java b/app/src/main/java/com/application/zhangshi_app_android/ui/function/CertificateOfHonorActivityViewModel.java
index 94341b7..04a9a4c 100644
--- a/app/src/main/java/com/application/zhangshi_app_android/ui/function/CertificateOfHonorActivityViewModel.java
+++ b/app/src/main/java/com/application/zhangshi_app_android/ui/function/CertificateOfHonorActivityViewModel.java
@@ -177,7 +177,6 @@
         if (list == null || list.isEmpty()){
             return;
         }
-        System.out.println(dataListLiveData.getValue().size());
         if (type == 0) {
             // 浠庢柊鍒版棫锛宯ull鎺掓渶鍚�
             list.sort((o1, o2) -> {
diff --git a/app/src/main/java/com/application/zhangshi_app_android/ui/function/ExaminationInfoActivity.java b/app/src/main/java/com/application/zhangshi_app_android/ui/function/ExaminationInfoActivity.java
new file mode 100644
index 0000000..8bc9e7b
--- /dev/null
+++ b/app/src/main/java/com/application/zhangshi_app_android/ui/function/ExaminationInfoActivity.java
@@ -0,0 +1,348 @@
+package com.application.zhangshi_app_android.ui.function;
+
+import android.content.Intent;
+import android.text.Editable;
+import android.text.TextUtils;
+import android.text.TextWatcher;
+import android.view.MotionEvent;
+import android.view.View;
+import android.widget.PopupWindow;
+
+import com.android.app_base.base.BaseConfig;
+import com.android.app_base.base.dialog.BaseDialog;
+import com.android.app_base.base.dialog.UIDialog;
+import com.android.app_base.manager.AppManager;
+import com.android.app_base.utils.ScreenSizeUtils;
+import com.android.app_base.utils.Utils;
+import com.android.app_base.utils.rxbus.RxBus;
+import com.android.app_base.widget.LinearItemDecoration;
+import com.application.zhangshi_app_android.BR;
+import com.application.zhangshi_app_android.R;
+import com.application.zhangshi_app_android.adapter.ExaminationInfoRvAdapter;
+import com.application.zhangshi_app_android.bean.ExaminationInfoBean;
+import com.application.zhangshi_app_android.databinding.ActivityExaminationInfoBinding;
+import com.application.zhangshi_app_android.ui.DLBaseActivity;
+import com.github.gzuliyujiang.wheelpicker.DatePicker;
+import com.github.gzuliyujiang.wheelpicker.contract.OnDatePickedListener;
+import com.hjq.bar.TitleBar;
+
+/**
+ * @author Ljj
+ * @date 2023.10.23. 22:02
+ * @desc 鍘嗗勾浣撴淇℃伅
+ */
+public class ExaminationInfoActivity extends DLBaseActivity<ActivityExaminationInfoBinding,ExaminationInfoActivityViewModel > {
+
+    private ExaminationInfoRvAdapter adapter;
+    private boolean isSearchLayoutVisible;
+    private PopupWindow mOperatePopupWindow;
+
+    @Override
+    public int getLayoutId() {
+        return R.layout.activity_examination_info;
+    }
+
+    @Override
+    public int getVariableId() {
+        return BR.viewModel;
+    }
+
+    @Override
+    public void initParam() {
+
+    }
+
+    @Override
+    public void initView() {
+        //涓嬫媺鍒锋柊甯冨眬
+        binding.refreshLayout.setEnableRefresh(false);
+        binding.refreshLayout.setEnableLoadMore(true);
+        binding.refreshLayout.setEnableOverScrollDrag(true);
+        binding.refreshLayout.setOnLoadMoreListener(refreshLayout -> {
+            viewModel.getMoreExaminationInfo();
+        });
+        //recyclerView閫傞厤鍣�
+        adapter = new ExaminationInfoRvAdapter(this, viewModel);
+        LinearItemDecoration itemDecoration = new LinearItemDecoration();
+        itemDecoration.setBottomSpace((int) getResources().getDimension(com.android.app_base.R.dimen.dp_12));
+        itemDecoration.setHorizontalSpace((int) getResources().getDimension(com.android.app_base.R.dimen.dp_20));
+        itemDecoration.setFirstTop((int) getResources().getDimension(com.android.app_base.R.dimen.dp_20));
+        binding.recyclerView.addItemDecoration(itemDecoration);
+        binding.recyclerView.setAdapter(adapter);
+        //鍙充笂瑙掓搷浣滃脊绐�
+        mOperatePopupWindow = initPopUpWindow(View.inflate(this,R.layout.pop_operate,null));
+        mOperatePopupWindow.getContentView().findViewById(R.id.layout_own_top).setVisibility(View.GONE);
+
+        setOnClickListener(
+                mOperatePopupWindow.getContentView().findViewById(R.id.tv_add),
+                mOperatePopupWindow.getContentView().findViewById(R.id.tv_select),
+                mOperatePopupWindow.getContentView().findViewById(R.id.tv_from_new_to_old),
+                mOperatePopupWindow.getContentView().findViewById(R.id.tv_from_old_to_new)
+        );
+
+        //鐐瑰嚮鏀惧ぇ闀滄寜閽樉绀哄嚭鎼滅储妗�
+        binding.ivSearchDefault.setOnClickListener(v -> {
+            binding.layoutSearch.setVisibility(View.VISIBLE);
+            binding.layoutDefault.setVisibility(View.GONE);
+        });
+        //鐐瑰嚮鎼滅储妗嗚彍鍗曚笅鎷夊嚭 鎼滅储鍙傛暟
+        binding.ivSearchType.setOnClickListener(v -> {
+            if (!isSearchLayoutVisible) {
+                binding.layoutSearchParameter.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
+                int targetHeight = binding.layoutSearchParameter.getMeasuredHeight();
+                Utils.dropExpand(binding.containerSearchParameter, 0, targetHeight);
+                isSearchLayoutVisible = true;
+            }
+        });
+        //鎼滅储鍙傛暟layout娣诲姞绌虹偣鍑讳簨浠讹紝闃叉鐐瑰嚮瀹冨唴閮╲iew鏃跺畠鍚庨潰鐨剅ecycler杩樿兘鍝嶅簲鐐瑰嚮浜嬩欢
+        binding.layoutSearchParameter.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+            }
+        });
+        //鐐瑰嚮鎼滅储鎸夐挳杩涜鎼滅储
+        binding.ivSearch.setOnClickListener(v -> {
+            viewModel.getExaminationInfo();
+            binding.layoutSearch.setVisibility(View.GONE);
+            binding.layoutDefault.setVisibility(View.VISIBLE);
+            binding.tvTitle.setText("鎼滅储缁撴灉");
+            hideSoftKeyboard();
+        });
+        //鐐瑰嚮娣诲姞鎸夐挳璺宠浆鍒板垱寤洪〉闈�
+        binding.fabAdd.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                AppManager.getAppManager().startActivity(new Intent(getSelfActivity(), ExaminationInfoDetailActivity.class).putExtra(BaseConfig.EXTRA_TYPE, 1));
+            }
+        });
+        binding.etStartTime.addTextChangedListener(new TextWatcher() {
+            @Override
+            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+            }
+
+            @Override
+            public void onTextChanged(CharSequence s, int start, int before, int count) {
+                if (!TextUtils.isEmpty(s)) {
+                    binding.ivTimeClear.setVisibility(View.VISIBLE);
+                } else {
+                    if (TextUtils.isEmpty(binding.etEndTime.getText().toString())) {
+                        binding.ivTimeClear.setVisibility(View.INVISIBLE);
+                    }
+                }
+            }
+
+            @Override
+            public void afterTextChanged(Editable s) {
+
+            }
+        });
+        binding.etEndTime.addTextChangedListener(new TextWatcher() {
+            @Override
+            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+            }
+
+            @Override
+            public void onTextChanged(CharSequence s, int start, int before, int count) {
+                if (!TextUtils.isEmpty(s)) {
+                    binding.ivTimeClear.setVisibility(View.VISIBLE);
+                } else {
+                    if (TextUtils.isEmpty(binding.etStartTime.getText().toString())) {
+                        binding.ivTimeClear.setVisibility(View.INVISIBLE);
+                    }
+                }
+            }
+
+            @Override
+            public void afterTextChanged(Editable s) {
+
+            }
+        });
+        binding.etStartTime.setOnClickListener(v -> {
+            hideSoftKeyboard();
+            DatePicker datePicker = getDatePicker();
+            datePicker.setTitle("璇烽�夋嫨寮�濮嬫椂闂�");
+            datePicker.setOnDatePickedListener(new OnDatePickedListener() {
+                @Override
+                public void onDatePicked(int year, int month, int day) {
+                    //浠yyy-MM-dd鐨勬牸寮忔樉绀猴紝鏈堟棩灏忎簬10鏃跺墠闈㈣ˉ0
+                    binding.etStartTime.setText(String.format("%d-%02d-%02d", year, month, day));
+                    if (binding.etEndTime.getText().toString().isEmpty()) {
+                        binding.etEndTime.setText(String.format("%d-%02d-%02d", year, month, day));
+                    } else {
+                        //姣旇緝寮�濮嬫椂闂村拰缁撴潫鏃堕棿鐨勫ぇ灏�
+                        String startTime = binding.etStartTime.getText().toString();
+                        String endTime = binding.etEndTime.getText().toString();
+                        if (Utils.compareDate(startTime, endTime) > 0) {
+                            //浜ゆ崲
+                            binding.etStartTime.setText(endTime);
+                            binding.etEndTime.setText(startTime);
+                        }
+                    }
+                }
+            });
+            datePicker.show();
+        });
+        binding.etEndTime.setOnClickListener(v -> {
+            hideSoftKeyboard();
+            DatePicker datePicker = getDatePicker();
+            datePicker.setTitle("璇烽�夋嫨缁撴潫鏃堕棿");
+            datePicker.setOnDatePickedListener(new OnDatePickedListener() {
+                @Override
+                public void onDatePicked(int year, int month, int day) {
+                    binding.etEndTime.setText(String.format("%d-%02d-%02d", year, month, day));
+                    if (binding.etStartTime.getText().toString().isEmpty()) {
+                        binding.etStartTime.setText(String.format("%d-%02d-%02d", year, month, day));
+                    } else {
+                        //姣旇緝寮�濮嬫椂闂村拰缁撴潫鏃堕棿鐨勫ぇ灏�
+                        String startTime = binding.etStartTime.getText().toString();
+                        String endTime = binding.etEndTime.getText().toString();
+                        if (Utils.compareDate(startTime, endTime) > 0) {
+                            //浜ゆ崲
+                            binding.etStartTime.setText(endTime);
+                            binding.etEndTime.setText(startTime);
+                        }
+                    }
+                }
+            });
+            datePicker.show();
+        });
+        binding.ivTimeClear.setOnClickListener(v -> {
+            binding.etStartTime.setText("");
+            binding.etEndTime.setText("");
+        });
+    }
+
+    @Override
+    public void initData() {
+        viewModel.getExaminationInfo();
+    }
+
+    @Override
+    public void initLiveDataObserve() {
+        viewModel.getDataListLiveData().observe(this, dataList -> {
+            adapter.setData(dataList);
+        });
+        viewModel.getCheckListLiveData().observe(this, checkList -> {
+            if (0 == viewModel.getOperateTypeLiveData().getValue()) {
+                return;
+            }
+            if (checkList.isEmpty()) {
+                viewModel.getOperateTypeLiveData().setValue(1);
+            } else {
+                viewModel.getOperateTypeLiveData().setValue(2);
+            }
+        });
+        viewModel.getMoreListLiveData().observe(this, moreList -> {
+            adapter.addData(moreList);
+        });
+        viewModel.getOperateTypeLiveData().observe(this, integer -> {
+            if (integer == 0) {
+                binding.ivOperate.setBackgroundResource(R.drawable.ic_operate);
+                binding.ivOperate.setOnClickListener(v -> {
+                    mOperatePopupWindow.showAsDropDown(binding.ivOperate, -ScreenSizeUtils.dip2px(this, 85) + binding.ivOperate.getWidth(), 0);
+                });
+                adapter.setCheckable(false);
+            } else if (integer == 1) {
+                binding.ivOperate.setBackgroundResource(R.drawable.ic_operate_finish);
+                binding.ivOperate.setOnClickListener(v -> {
+                    viewModel.getOperateTypeLiveData().postValue(0);
+                });
+                adapter.setCheckable(true);
+            } else if (integer == 2) {
+                binding.ivOperate.setBackgroundResource(R.drawable.ic_delete_white);
+                binding.ivOperate.setOnClickListener(v -> {
+                    new UIDialog.Builder(this)
+                            .setTitle("鎮ㄧ‘瀹氳鍒犻櫎閫変腑鐨勯」鐩悧")
+                            .setContent("椤圭洰鍒犻櫎鍚庡皢鏃犳硶鎭㈠")
+                            .setConfirm("纭畾")
+                            .setCancel("鍙栨秷")
+                            .setListener(new UIDialog.OnListener() {
+                                @Override
+                                public void onConfirm(BaseDialog dialog) {
+                                    viewModel.deleteCheckList();
+                                }
+                            })
+                            .show();
+                });
+            }
+        });
+
+        viewModel.getFinishDeleteListLiveData().observe(this, beans -> {
+            for (ExaminationInfoBean bean : beans) {
+                adapter.removeItem(bean);
+            }
+        });
+
+        //瑙傚療鏁版嵁鐨勫彉鍖栵紝鏈夊彉鍖栧寘鎷坊鍔犮�佷慨鏀广�佸垹闄ら兘浼氬彂閫佹秷鎭紝鎺ユ敹鍒版秷鎭悗閲嶆柊鑾峰彇鏁版嵁杩涜鍒锋柊
+        RxBus.getInstance().toObservable(this, ExaminationInfoBean.class)
+                .subscribe(bean -> {
+                    viewModel.getExaminationInfo();
+                });
+    }
+
+    @Override
+    protected void dataNull() {
+        super.dataNull();
+        binding.layoutDataNull.setVisibility(View.VISIBLE);
+        binding.refreshLayout.setVisibility(View.GONE);
+    }
+
+    @Override
+    protected void dataFinish() {
+        super.dataFinish();
+        binding.refreshLayout.finishLoadMore();
+    }
+
+    @Override
+    protected void hide() {
+        super.hide();
+        binding.layoutDataNull.setVisibility(View.GONE);
+        binding.refreshLayout.setVisibility(View.VISIBLE);
+        binding.refreshLayout.finishLoadMore();
+    }
+
+    @Override
+    public void onClick(View v) {
+        int id = v.getId();
+        if (id == R.id.tv_add) {
+            AppManager.getAppManager().startActivity(new Intent(this, ExaminationInfoDetailActivity.class).putExtra(BaseConfig.EXTRA_TYPE, 1));
+            mOperatePopupWindow.dismiss();
+        } else if (id == R.id.tv_select) {
+            viewModel.getOperateTypeLiveData().postValue(1);
+            mOperatePopupWindow.dismiss();
+        } else if (id == R.id.tv_from_new_to_old) {
+            viewModel.changeOrder(true);
+            mOperatePopupWindow.dismiss();
+        } else if (id == R.id.tv_from_old_to_new) {
+            viewModel.changeOrder(false);
+            mOperatePopupWindow.dismiss();
+        }
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        if (mOperatePopupWindow != null) {
+            mOperatePopupWindow.dismiss();
+        }
+    }
+
+    @Override
+    public boolean dispatchTouchEvent(MotionEvent event) {
+        float x = event.getX();
+        float y = event.getY();
+        if (isSearchLayoutVisible) {
+            if (!Utils.isPointInsideView(x, y, binding.layoutSearchParameter)) {
+                Utils.pullCollapse(binding.containerSearchParameter, binding.layoutSearchParameter.getMeasuredHeight(), 0);
+                isSearchLayoutVisible = false;
+                return true;
+            }
+        }
+        return super.dispatchTouchEvent(event);
+    }
+
+    @Override
+    public void onLeftClick(TitleBar titleBar) {
+        finish();
+    }
+}
diff --git a/app/src/main/java/com/application/zhangshi_app_android/ui/function/ExaminationInfoActivityViewModel.java b/app/src/main/java/com/application/zhangshi_app_android/ui/function/ExaminationInfoActivityViewModel.java
new file mode 100644
index 0000000..73a0cfa
--- /dev/null
+++ b/app/src/main/java/com/application/zhangshi_app_android/ui/function/ExaminationInfoActivityViewModel.java
@@ -0,0 +1,346 @@
+package com.application.zhangshi_app_android.ui.function;
+
+import static com.android.app_base.base.BaseConfig.CODE_SUCCESS;
+
+import android.app.Application;
+import android.text.TextUtils;
+
+import androidx.annotation.NonNull;
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.MutableLiveData;
+
+import com.android.app_base.base.StateViewEnum;
+import com.android.app_base.base.viewmodel.BaseViewModel;
+import com.android.app_base.http.ResultData;
+import com.android.app_base.utils.RxUtils;
+import com.android.app_base.utils.Utils;
+import com.application.zhangshi_app_android.bean.ExaminationInfoBean;
+import com.application.zhangshi_app_android.bean.ExaminationInfoRequestBean;
+import com.application.zhangshi_app_android.bean.PageResponseBean;
+import com.application.zhangshi_app_android.data.DataRepository;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import io.reactivex.Observer;
+import io.reactivex.disposables.Disposable;
+import io.reactivex.functions.Action;
+
+/**
+ * @author Ljj
+ * @date 2023.10.23. 22:08
+ * @desc
+ */
+public class ExaminationInfoActivityViewModel extends BaseViewModel<DataRepository> {
+    private MutableLiveData<List<ExaminationInfoBean>> dataListLiveData;
+    private MutableLiveData<List<ExaminationInfoBean>> checkListLiveData;//閫変腑鐨勬暟鎹�
+    private MutableLiveData<List<ExaminationInfoBean>> moreListLiveData;//涓嬫媺鍔犺浇鏁版嵁
+    private MutableLiveData<ExaminationInfoRequestBean> requestBeanLiveData;//璇锋眰鍙傛暟
+    private MutableLiveData<List<ExaminationInfoBean>> finishDeleteListLiveData;//宸茬粡瀹屾垚鍒犻櫎鐨勬暟鎹紝鐢ㄤ簬adapter鐨剅emove鎿嶄綔
+
+    private MutableLiveData<Integer> operateTypeLiveData;//鎿嶄綔绫诲瀷 0 閫夋嫨鎿嶄綔 1.瀹屾垚 2.鍒犻櫎
+    public ExaminationInfoActivityViewModel(@NonNull Application application) {
+        super(application);
+    }
+
+    @Override
+    protected DataRepository initModel() {
+        return DataRepository.getInstance();
+    }
+
+    /**
+     *  鑾峰彇鏁版嵁
+     */
+    public void getExaminationInfo() {
+        if (getRequestBeanLiveData().getValue() == null){
+            getRequestBeanLiveData().setValue(new ExaminationInfoRequestBean());
+        }
+        getRequestBeanLiveData().getValue().setPageNum(1);
+        model.getExaminationInfo(getRequestBeanLiveData().getValue().toMap())
+                .compose(RxUtils.schedulersTransformer())
+                .subscribe(new Observer<ResultData<PageResponseBean<ExaminationInfoBean>>>() {
+                    @Override
+                    public void onSubscribe(Disposable d) {
+                        addSubscribe(d);
+                    }
+
+                    @Override
+                    public void onNext(ResultData<PageResponseBean<ExaminationInfoBean>> data) {
+                        if (data.getCode() == CODE_SUCCESS){
+                            if (data.getData().getData().isEmpty()){
+                                changeStateView(StateViewEnum.DATA_NULL);
+                            }else {
+                                changeStateView(StateViewEnum.HIDE);
+                                dataListLiveData.postValue(data.getData().getData());
+                            }
+                        }else {
+                            messageLiveData.postValue(data.getMsg());
+                        }
+                    }
+
+                    @Override
+                    public void onError(Throwable e) {
+                        messageLiveData.postValue(e.getMessage());
+                    }
+
+                    @Override
+                    public void onComplete() {
+
+                    }
+                });
+    }
+    /**
+     * 鍔犺浇鏇村
+     */
+    public void getMoreExaminationInfo() {
+        if (getRequestBeanLiveData().getValue() == null){
+            getRequestBeanLiveData().setValue(new ExaminationInfoRequestBean());
+        }
+        getRequestBeanLiveData().getValue().setPageNum(getRequestBeanLiveData().getValue().getPageNum() + 1);
+        model.getExaminationInfo(getRequestBeanLiveData().getValue().toMap())
+                .compose(RxUtils.schedulersTransformer())
+                .doFinally(new Action() {
+                    @Override
+                    public void run() throws Exception {
+                        changeStateView(StateViewEnum.DATA_FINISH);
+                    }
+                })
+                .subscribe(new Observer<ResultData<PageResponseBean<ExaminationInfoBean>>>() {
+                    @Override
+                    public void onSubscribe(Disposable d) {
+                        addSubscribe(d);
+                    }
+
+                    @Override
+                    public void onNext(ResultData<PageResponseBean<ExaminationInfoBean>> data) {
+                        if (data.getCode() == CODE_SUCCESS){
+                            if (data.getData().getData().isEmpty()){
+                                messageLiveData.postValue("娌℃湁鏇村鏁版嵁浜�");
+                            }else {
+                                changeStateView(StateViewEnum.HIDE);
+                                moreListLiveData.postValue(data.getData().getData());
+                            }
+                        }else {
+                            messageLiveData.postValue(data.getMsg());
+                        }
+                    }
+
+                    @Override
+                    public void onError(Throwable e) {
+                        messageLiveData.postValue(e.getMessage());
+                    }
+
+                    @Override
+                    public void onComplete() {
+
+                    }
+                });
+    }
+    /**
+     * 鍒犻櫎澶氶�夐�変腑鐨勬暟鎹�
+     */
+    public void deleteCheckList() {
+        List<ExaminationInfoBean> deleteList = getCheckListLiveData().getValue();
+        if (deleteList == null){
+            return;
+        }
+        StringBuffer sb = new StringBuffer();
+        deleteList.forEach(ExaminationInfoBean -> sb.append(ExaminationInfoBean.getId()).append(","));
+        sb.deleteCharAt(sb.length()-1);
+        model.deleteExaminationInfo(sb.toString())
+                .compose(RxUtils.schedulersTransformer())
+                .subscribe(new Observer<ResultData<String>>() {
+                    @Override
+                    public void onSubscribe(Disposable d) {
+                        addSubscribe(d);
+                    }
+
+                    @Override
+                    public void onNext(ResultData<String> stringResultData) {
+                        if (stringResultData.getCode() == CODE_SUCCESS){
+                            finishDeleteListLiveData.postValue(checkListLiveData.getValue());
+                            messageLiveData.postValue("鍒犻櫎鎴愬姛");
+                            getCheckListLiveData().postValue(new ArrayList<>());
+                        }else {
+                            messageLiveData.postValue(stringResultData.getMsg());
+                        }
+                    }
+
+                    @Override
+                    public void onError(Throwable e) {
+                        messageLiveData.postValue(e.getMessage());
+                    }
+
+                    @Override
+                    public void onComplete() {
+
+                    }
+                });
+    }
+    /**
+     * 鍒犻櫎鍗曚釜鏁版嵁
+     */
+    public void deleteItem(ExaminationInfoBean ExaminationInfoBean) {
+        model.deleteExaminationInfo(String.valueOf(ExaminationInfoBean.getId()))
+                .compose(RxUtils.schedulersTransformer())
+                .subscribe(new Observer<ResultData<String>>() {
+                    @Override
+                    public void onSubscribe(Disposable d) {
+                        addSubscribe(d);
+                    }
+
+                    @Override
+                    public void onNext(ResultData<String> stringResultData) {
+                        if (stringResultData.getCode() == CODE_SUCCESS){
+                            List<ExaminationInfoBean> list = new ArrayList<>();
+                            list.add(ExaminationInfoBean);
+                            finishDeleteListLiveData.postValue(list);
+                            messageLiveData.postValue("鍒犻櫎鎴愬姛");
+                        }else {
+                            messageLiveData.postValue(stringResultData.getMsg());
+                        }
+                    }
+
+                    @Override
+                    public void onError(Throwable e) {
+                        messageLiveData.postValue(e.getMessage());
+                    }
+
+                    @Override
+                    public void onComplete() {
+
+                    }
+                });
+    }
+
+    public MutableLiveData<List<ExaminationInfoBean>> getCheckListLiveData() {
+        if (checkListLiveData==null){
+            checkListLiveData = new MutableLiveData<>();
+            checkListLiveData.postValue(new ArrayList<>());
+        }
+        if (checkListLiveData.getValue() == null){
+            checkListLiveData.postValue(new ArrayList<>());
+        }
+        return checkListLiveData;
+    }
+
+    public void setCheckListLiveData(MutableLiveData<List<ExaminationInfoBean>> checkListLiveData) {
+        this.checkListLiveData = checkListLiveData;
+    }
+
+    @NonNull
+    public MutableLiveData<ExaminationInfoRequestBean> getRequestBeanLiveData() {
+        if (requestBeanLiveData == null){
+            requestBeanLiveData = new MutableLiveData<>();
+        }
+        if (requestBeanLiveData.getValue() == null){
+            requestBeanLiveData.setValue(new ExaminationInfoRequestBean());
+        }
+        return requestBeanLiveData;
+    }
+
+    public void setRequestBeanLiveData(MutableLiveData<ExaminationInfoRequestBean> requestBeanLiveData) {
+        this.requestBeanLiveData = requestBeanLiveData;
+    }
+
+    public MutableLiveData<List<ExaminationInfoBean>> getDataListLiveData() {
+        if (dataListLiveData == null){
+            dataListLiveData = new MutableLiveData<>();
+        }
+        return dataListLiveData;
+    }
+
+    public void setDataListLiveData(MutableLiveData<List<ExaminationInfoBean>> dataListLiveData) {
+        this.dataListLiveData = dataListLiveData;
+    }
+
+    @NonNull
+    public MutableLiveData<List<ExaminationInfoBean>> getMoreListLiveData() {
+        if (moreListLiveData == null){
+            moreListLiveData = new MutableLiveData<>();
+        }
+        return moreListLiveData;
+    }
+
+    public void setMoreListLiveData(MutableLiveData<List<ExaminationInfoBean>> moreListLiveData) {
+        this.moreListLiveData = moreListLiveData;
+    }
+
+    @NonNull
+    public MutableLiveData<Integer> getOperateTypeLiveData() {
+        if (operateTypeLiveData == null){
+            operateTypeLiveData = new MutableLiveData<>();
+            operateTypeLiveData.setValue(0);
+        }
+        return operateTypeLiveData;
+    }
+
+    public void setOperateTypeLiveData(MutableLiveData<Integer> operateTypeLiveData) {
+        this.operateTypeLiveData = operateTypeLiveData;
+    }
+
+    public LiveData<List<ExaminationInfoBean>> getFinishDeleteListLiveData() {
+        if (finishDeleteListLiveData == null){
+            finishDeleteListLiveData = new MutableLiveData<>();
+        }
+        return finishDeleteListLiveData;
+    }
+
+    public void setFinishDeleteListLiveData(MutableLiveData<List<ExaminationInfoBean>> finishDeleteListLiveData) {
+        this.finishDeleteListLiveData = finishDeleteListLiveData;
+    }
+
+    /**
+     * 鏀瑰彉鎺掑簭
+     * @param b true 闄嶅簭 false 鍗囧簭
+     */
+    public void changeOrder(boolean b) {
+        List<ExaminationInfoBean> list = getDataListLiveData().getValue();
+        if (list == null || list.isEmpty()){
+            return;
+        }
+        if (b) {
+            // 浠庢柊鍒版棫锛宯ull鎺掓渶鍚�
+            list.sort((o1, o2) -> {
+                String happenTime1 = o1.getHappenTime();
+                String happenTime2 = o2.getHappenTime();
+                if (TextUtils.isEmpty(happenTime1) && TextUtils.isEmpty(happenTime2)) {
+                    return 0;
+                } else if (TextUtils.isEmpty(happenTime1)) {
+                    return 1;
+                } else if (TextUtils.isEmpty(happenTime2)) {
+                    return -1;
+                } else {
+                    Date date1 = Utils.parseDate(happenTime1);
+                    Date date2 = Utils.parseDate(happenTime2);
+                    if (date1 != null && date2 != null) {
+                        return date2.compareTo(date1);
+                    }
+                    return 0;
+                }
+            });
+        } else  {
+            // 浠庢棫鍒版柊锛宯ull鎺掓渶鍓�
+            list.sort((o1, o2) -> {
+                String happenTime1 = o1.getHappenTime();
+                String happenTime2 = o2.getHappenTime();
+                if (TextUtils.isEmpty(happenTime1) && TextUtils.isEmpty(happenTime2)) {
+                    return 0;
+                } else if (TextUtils.isEmpty(happenTime1)) {
+                    return -1;
+                } else if (TextUtils.isEmpty(happenTime2)) {
+                    return 1;
+                } else {
+                    Date date1 = Utils.parseDate(happenTime1);
+                    Date date2 = Utils.parseDate(happenTime2);
+                    if (date1 != null && date2 != null) {
+                        return date1.compareTo(date2);
+                    }
+                    return 0;
+                }
+            });
+        }
+        getDataListLiveData().setValue(list);
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/application/zhangshi_app_android/ui/function/ExaminationInfoDetailActivity.java b/app/src/main/java/com/application/zhangshi_app_android/ui/function/ExaminationInfoDetailActivity.java
new file mode 100644
index 0000000..ebfc568
--- /dev/null
+++ b/app/src/main/java/com/application/zhangshi_app_android/ui/function/ExaminationInfoDetailActivity.java
@@ -0,0 +1,313 @@
+package com.application.zhangshi_app_android.ui.function;
+
+import android.app.Activity;
+import android.content.ClipData;
+import android.content.Intent;
+import android.net.Uri;
+import android.view.View;
+import android.widget.PopupWindow;
+
+import androidx.activity.result.ActivityResult;
+import androidx.activity.result.ActivityResultCallback;
+import androidx.activity.result.ActivityResultLauncher;
+import androidx.activity.result.contract.ActivityResultContracts;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.android.app_base.base.BaseConfig;
+import com.android.app_base.base.adapter.BaseRVAdapter;
+import com.android.app_base.base.dialog.BaseDialog;
+import com.android.app_base.base.dialog.UIDialog;
+import com.android.app_base.base.dialog.WaitDialog;
+import com.android.app_base.manager.UserManager;
+import com.android.app_base.utils.GetFilePathFromUri;
+import com.android.app_base.utils.ScreenSizeUtils;
+import com.android.app_base.utils.Utils;
+import com.application.zhangshi_app_android.BR;
+import com.application.zhangshi_app_android.R;
+import com.application.zhangshi_app_android.adapter.ElectronicFileAddAdapter;
+import com.application.zhangshi_app_android.bean.ExaminationInfoBean;
+import com.application.zhangshi_app_android.databinding.ActivityExaminationInfoDetailBinding;
+import com.application.zhangshi_app_android.databinding.ActivityExaminationInfoDetailBinding;
+import com.application.zhangshi_app_android.ui.DLBaseActivity;
+import com.github.gzuliyujiang.wheelpicker.DatePicker;
+import com.github.gzuliyujiang.wheelpicker.OptionPicker;
+import com.github.gzuliyujiang.wheelpicker.contract.OnDatePickedListener;
+import com.github.gzuliyujiang.wheelpicker.contract.OnOptionPickedListener;
+import com.hjq.bar.TitleBar;
+import com.luck.picture.lib.entity.LocalMedia;
+import com.luck.picture.lib.interfaces.OnResultCallbackListener;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Locale;
+
+/**
+ * @author Ljj
+ * @date 2023.10.23. 22:40
+ * @desc 鍘嗗勾浣撴鎶ュ憡璇︽儏
+ */
+public class ExaminationInfoDetailActivity extends DLBaseActivity<ActivityExaminationInfoDetailBinding,ExaminationInfoDetailActivityViewModel> {
+
+    private ElectronicFileAddAdapter adapter;
+    private BaseDialog mWaitDialog;
+    private ActivityResultLauncher<Intent> activityResultLauncher;
+
+    private int type;// 0 鏌ョ湅鍙慨鏀瑰垹闄� 1 鏂板 2 鐩存帴淇敼
+    private PopupWindow popupWindow;
+    @Override
+    public int getLayoutId() {
+        return R.layout.activity_examination_info_detail;
+    }
+
+    @Override
+    public int getVariableId() {
+        return BR.viewModel;
+    }
+
+    @Override
+    public void initParam() {
+        type = getIntent().getIntExtra(BaseConfig.EXTRA_TYPE,0);
+        if (type == 0 || type == 2){
+            ExaminationInfoBean bean = (ExaminationInfoBean) getIntent().getSerializableExtra("bean");
+            if (bean !=null){
+                viewModel.getBeanLiveData().setValue(bean);
+            }
+        }
+    }
+
+    @Override
+    public void initView() {
+        adapter = new ElectronicFileAddAdapter(this);
+        GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3);
+        binding.rvImage.setLayoutManager(gridLayoutManager);
+        binding.rvImage.setNestedScrollingEnabled(false);
+        adapter.setItemAndAddClickListener(new ElectronicFileAddAdapter.OnItemAndAddClickListener() {
+            @Override
+            public void onItemClick(View v, int position) {
+
+            }
+
+            @Override
+            public void onAddClick() {
+                OptionPicker picker = getOptionPicker(Arrays.asList("鍥剧墖瑙嗛","鍏朵粬鏂囦欢"));
+                picker.setTitle("閫夋嫨鏂囦欢绫诲瀷");
+                picker.setOnOptionPickedListener(new OnOptionPickedListener() {
+                    @Override
+                    public void onOptionPicked(int position, Object item) {
+                        if (item.equals("鍥剧墖瑙嗛")) {
+                            UserManager.getInstance().selectImage(getSelfActivity(), 0,9, new OnResultCallbackListener<LocalMedia>() {
+                                @Override
+                                public void onResult(ArrayList<LocalMedia> result) {
+                                    if (result.size() == 0) return;
+                                    for (LocalMedia media : result) {
+                                        String path = media.getRealPath();
+                                        if (path!=null){
+                                            viewModel.addUploadFile(path);
+                                            ExaminationInfoBean bean = viewModel.getBeanLiveData().getValue();
+                                            if (bean !=null){
+                                                List<String> urlList = Utils.splitString2List(bean.getUrl(),",");
+                                                urlList.add(path);
+                                                bean.setUrl(Utils.appendList2String(urlList,","));
+                                            }
+                                            viewModel.getBeanLiveData().setValue(bean);
+                                        }
+                                    }
+                                }
+                                @Override
+                                public void onCancel() {
+
+                                }
+                            });
+                        }else {
+                            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
+//                            Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
+                            intent.setType("*/*"); // 闄愬埗鏂囦欢绫诲瀷
+                            intent.addCategory(Intent.CATEGORY_OPENABLE); // 娣诲姞 CATEGORY_OPENABLE 鍒嗙被,鍛婅瘔绯荤粺瑕侀�夋嫨鐨勫唴瀹瑰彲浠ヨ鎵撳紑锛岃繖鏍风郴缁熶細杩囨护鎺変笉鑳借搴旂敤鎵撳紑鐨勬枃浠讹紝浠ユ彁渚涙洿濂界殑鐢ㄦ埛浣撻獙銆�
+                            intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); // 鍏佽澶氶��
+                            activityResultLauncher.launch(intent);
+                        }
+                    }
+                });
+                picker.show();
+
+            }
+        });
+
+        adapter.setOnChildClickListener(R.id.iv_delete, new BaseRVAdapter.OnChildClickListener() {
+            @Override
+            public void onChildClick(RecyclerView recyclerView, View childView, int position) {
+                ExaminationInfoBean bean = viewModel.getBeanLiveData().getValue();
+                if (bean !=null){
+                    List<String> urlList = Utils.splitString2List(bean.getUrl(),",");
+                    urlList.remove(adapter.getItem(position));
+                    bean.setUrl(Utils.appendList2String(urlList,","));
+                }
+                adapter.removeItem(position);
+                viewModel.getBeanLiveData().setValue(bean);
+            }
+        });
+        binding.rvImage.setAdapter(adapter);
+
+        if (type == 1){
+            viewModel.getTypeLiveData().postValue(true);
+            binding.ivOperate.setOnClickListener(v -> {
+                viewModel.add();
+            });
+        }else if (type == 0){
+            popupWindow = initPopUpWindow(View.inflate(this,R.layout.pop_operate_delete,null));
+            popupWindow.getContentView().findViewById(R.id.tv_modify).setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    viewModel.getTypeLiveData().postValue(true);
+                    popupWindow.dismiss();
+                }
+            });
+            popupWindow.getContentView().findViewById(R.id.tv_delete).setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    popupWindow.dismiss();
+                    new UIDialog.Builder(getSelfActivity())
+                            .setTitle("鎮ㄧ‘瀹氳鍒犻櫎椤圭洰鍚�")
+                            .setContent("椤圭洰鍒犻櫎鍚庡皢鏃犳硶鎭㈠")
+                            .setConfirm("纭畾")
+                            .setCancel("鍙栨秷")
+                            .setListener(new UIDialog.OnListener() {
+                                @Override
+                                public void onConfirm(BaseDialog dialog) {
+                                    viewModel.delete();
+                                }
+                            })
+                            .show();
+                }
+            });
+            viewModel.getTypeLiveData().postValue(false);
+        }else if (type == 2){
+            viewModel.getTypeLiveData().postValue(true);
+
+        }
+        binding.etTime.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                DatePicker picker = getDatePicker();
+                picker.setTitle("閫夋嫨鏃堕棿");
+                picker.setOnDatePickedListener(new OnDatePickedListener() {
+                    @Override
+                    public void onDatePicked(int year, int month, int day) {
+                        String date = String.format(Locale.CHINA, "%d-%02d-%02d", year, month, day);
+                        binding.etTime.setText(date);
+                    }
+                });
+                picker.show();
+            }
+        });
+        activityResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
+            @Override
+            public void onActivityResult(ActivityResult result) {
+                if (result.getResultCode() == Activity.RESULT_OK) {
+                    if (result.getData() == null){
+                        return;
+                    }
+                    // 鑾峰彇閫変腑鐨勫涓枃浠剁殑 URI
+                    ClipData clipData = result.getData().getClipData();
+                    if (clipData != null) {
+                        int itemCount = clipData.getItemCount();
+                        for (int i = 0; i < itemCount; i++) {
+                            Uri uri = clipData.getItemAt(i).getUri();
+                            // 浣跨敤閫変腑鐨勬枃浠� URI 杩涜鍚庣画鎿嶄綔锛屾瘮濡傝鍙栨枃浠跺唴瀹圭瓑
+                            String path = GetFilePathFromUri.getFileAbsolutePath(getSelfActivity(),uri);
+                            if (path!=null){
+                                viewModel.addUploadFile(path);
+                                ExaminationInfoBean bean = viewModel.getBeanLiveData().getValue();
+                                if (bean !=null){
+                                    List<String> urlList = Utils.splitString2List(bean.getUrl(),",");
+                                    urlList.add(path);
+                                    bean.setUrl(Utils.appendList2String(urlList,","));
+                                }
+                                viewModel.getBeanLiveData().setValue(bean);
+                            }
+                        }
+                    }else {
+                        // 鑾峰彇閫変腑鐨勫崟涓枃浠剁殑 URI
+                        Uri selectedFileUri = result.getData().getData();
+                        String path = GetFilePathFromUri.getFileAbsolutePath(getSelfActivity(),selectedFileUri);
+                        if (path!=null){
+                            viewModel.addUploadFile(path);
+                            ExaminationInfoBean bean = viewModel.getBeanLiveData().getValue();
+                            if (bean !=null){
+                                List<String> urlList = Utils.splitString2List(bean.getUrl(),",");
+                                urlList.add(path);
+                                bean.setUrl(Utils.appendList2String(urlList,","));
+                            }
+                            viewModel.getBeanLiveData().setValue(bean);
+                        }
+                    }
+                }
+            }
+        });
+    }
+
+    @Override
+    public void initData() {
+
+    }
+
+    @Override
+    public void initLiveDataObserve() {
+        viewModel.getBeanLiveData().observe(this,bean -> {
+            if (bean!=null){
+                adapter.setData(Utils.splitString2List(bean.getUrl(),","));
+            }
+        });
+        viewModel.getTypeLiveData().observe(this,operateType -> {
+            if (operateType){
+                if (type == 1) {
+                    binding.ivOperate.setOnClickListener(v -> {
+                        viewModel.add();
+                    });
+                }else {
+                    binding.ivOperate.setOnClickListener(v -> {
+                        viewModel.update();
+                    });
+                }
+                setIsEdited(true);
+            }else {
+                binding.ivOperate.setOnClickListener(v -> {
+                    popupWindow.showAsDropDown(binding.ivOperate,-ScreenSizeUtils.dip2px(this,85) +binding.ivOperate.getWidth(),0);
+                });
+                setIsEdited(false);
+            }
+        });
+    }
+
+    public void setIsEdited(boolean isEdited){
+        adapter.setIsEdited(isEdited);
+    }
+
+    @Override
+    protected void dialogLoading() {
+        if (mWaitDialog == null) {
+            mWaitDialog = new WaitDialog.Builder(this)
+                    // 娑堟伅鏂囨湰鍙互涓嶇敤濉啓
+                    .setMessage("姝e湪涓婁紶")
+                    .create();
+        }
+        if (!mWaitDialog.isShowing()) {
+            mWaitDialog.show();
+        }
+    }
+
+    @Override
+    protected void dialogDismiss() {
+        if (mWaitDialog != null && mWaitDialog.isShowing()) {
+            mWaitDialog.dismiss();
+            mWaitDialog = null;
+        }
+    }
+
+    @Override
+    public void onLeftClick(TitleBar titleBar) {
+        finish();
+    }
+}
diff --git a/app/src/main/java/com/application/zhangshi_app_android/ui/function/ExaminationInfoDetailActivityViewModel.java b/app/src/main/java/com/application/zhangshi_app_android/ui/function/ExaminationInfoDetailActivityViewModel.java
new file mode 100644
index 0000000..a9541f9
--- /dev/null
+++ b/app/src/main/java/com/application/zhangshi_app_android/ui/function/ExaminationInfoDetailActivityViewModel.java
@@ -0,0 +1,361 @@
+package com.application.zhangshi_app_android.ui.function;
+
+import static com.android.app_base.base.BaseConfig.CODE_SUCCESS;
+
+import android.app.Application;
+
+import androidx.annotation.NonNull;
+import androidx.lifecycle.MutableLiveData;
+
+import com.android.app_base.base.StateViewEnum;
+import com.android.app_base.base.viewmodel.BaseViewModel;
+import com.android.app_base.http.ResultData;
+import com.android.app_base.manager.AppManager;
+import com.android.app_base.utils.RxUtils;
+import com.android.app_base.utils.rxbus.RxBus;
+import com.application.zhangshi_app_android.bean.ExaminationInfoBean;
+import com.application.zhangshi_app_android.bean.UploadFileResponseBean;
+import com.application.zhangshi_app_android.data.DataRepository;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import io.reactivex.Observable;
+import io.reactivex.ObservableSource;
+import io.reactivex.Observer;
+import io.reactivex.disposables.Disposable;
+import io.reactivex.functions.Action;
+import io.reactivex.functions.Consumer;
+import io.reactivex.functions.Function;
+import okhttp3.MediaType;
+import okhttp3.MultipartBody;
+import okhttp3.RequestBody;
+
+/**
+ * @author Ljj
+ * @date 2023.10.23. 22:44
+ * @desc 鍘嗗勾浣撴鎶ュ憡璇︽儏 ViewModel
+ */
+public class ExaminationInfoDetailActivityViewModel extends BaseViewModel<DataRepository> {
+
+    private MutableLiveData<ExaminationInfoBean> beanLiveData;
+    private MutableLiveData<Boolean> typeLiveData;//true 缂栬緫鐘舵�� false 灞曠ず鐘舵��
+    private final List<String> uploadFileList = new ArrayList<>();//闇�瑕佷笂浼犵殑鏂囦欢鍒楄〃
+
+
+    public ExaminationInfoDetailActivityViewModel(@NonNull Application application) {
+        super(application);
+    }
+
+    @Override
+    protected DataRepository initModel() {
+        return DataRepository.getInstance();
+    }
+
+    /**
+     * 娣诲姞
+     */
+    public void add() {
+        if (uploadFileList.size() > 0) {
+            List<Observable<String>> observables = new ArrayList<>();
+            for (String path : uploadFileList) {
+                File file = new File(path);
+                RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);
+                MultipartBody.Part body = MultipartBody.Part.createFormData("uploadFile", file.getName(), requestBody);
+                Observable<String> uploadObservable = model.uploadFile(body)
+                        .flatMap(new Function<ResultData<UploadFileResponseBean>, ObservableSource<String>>() {
+                            @Override
+                            public ObservableSource<String> apply(ResultData<UploadFileResponseBean> resultData) throws Exception {
+                                if (resultData.getCode() == CODE_SUCCESS) {
+                                    ExaminationInfoBean bean = getBeanLiveData().getValue();
+                                    if (bean != null) {
+                                        String urls = bean.getUrl();
+                                        //鏇挎崲鍥剧墖鍦板潃
+                                        urls = urls.replace(path, resultData.getData().getUrl());
+                                        bean.setUrl(urls);
+                                        beanLiveData.postValue(bean);
+                                    }
+                                    return Observable.just(path);
+                                } else {
+                                    return Observable.error(new Exception(resultData.getMsg()));
+                                }
+                            }
+                        });
+
+                observables.add(uploadObservable);
+            }
+            Observable.zip(observables, result -> result)
+                    .flatMap(new Function<Object[], Observable<ResultData<String>>>() {
+                        @Override
+                        public Observable<ResultData<String>> apply(Object[] objects) throws Exception {
+                            //绉婚櫎宸茬粡涓婁紶鐨勬枃浠�
+                            //鎶妎bjects鏁扮粍杞崲鎴恖ist锛岀劧鍚庣Щ闄�
+                            for (Object object : objects) {
+                                uploadFileList.remove((String) object);
+                            }
+                            return model.addExaminationInfo(beanLiveData.getValue());
+                        }
+                    })
+                    .doOnSubscribe(new Consumer<Disposable>() {
+                        @Override
+                        public void accept(Disposable disposable) throws Exception {
+                            changeStateView(StateViewEnum.DIALOG_LOADING);
+                        }
+                    })
+                    .doFinally(new Action() {
+                        @Override
+                        public void run() throws Exception {
+                            changeStateView(StateViewEnum.DIALOG_DISMISS);
+                        }
+                    })
+                    .compose(RxUtils.schedulersTransformer())
+                    .subscribe(new Observer<ResultData<String>>() {
+                        @Override
+                        public void onSubscribe(Disposable d) {
+                            addSubscribe(d);
+                        }
+
+                        @Override
+                        public void onNext(ResultData<String> stringResultData) {
+                            if (stringResultData.getCode() == CODE_SUCCESS) {
+                                AppManager.getAppManager().finishCurrentActivity();
+                                RxBus.getInstance().post(beanLiveData.getValue());
+                                messageLiveData.postValue("娣诲姞鎴愬姛");
+                            } else {
+                                messageLiveData.postValue(stringResultData.getMsg());
+                            }
+                        }
+
+                        @Override
+                        public void onError(Throwable e) {
+                            messageLiveData.postValue(e.getMessage());
+                        }
+
+                        @Override
+                        public void onComplete() {
+
+                        }
+                    });
+        }else {
+            model.addExaminationInfo(beanLiveData.getValue())
+                    .compose(RxUtils.schedulersTransformer())
+                    .subscribe(new Observer<ResultData<String>>() {
+                        @Override
+                        public void onSubscribe(Disposable d) {
+                            addSubscribe(d);
+                        }
+
+                        @Override
+                        public void onNext(ResultData<String> stringResultData) {
+                            if (stringResultData.getCode() == CODE_SUCCESS){
+                                AppManager.getAppManager().finishCurrentActivity();
+                                RxBus.getInstance().post(beanLiveData.getValue());
+                                messageLiveData.postValue("娣诲姞鎴愬姛");
+                            }else {
+                                messageLiveData.postValue(stringResultData.getMsg());
+                            }
+                        }
+
+                        @Override
+                        public void onError(Throwable e) {
+                            messageLiveData.postValue(e.getMessage());
+                        }
+
+                        @Override
+                        public void onComplete() {
+
+                        }
+                    });
+        }
+
+    }
+    /**
+     * 鍒犻櫎
+     */
+    public void delete() {
+        if (beanLiveData.getValue() == null){
+            return;
+        }
+        model.deleteExaminationInfo(String.valueOf(beanLiveData.getValue().getId()))
+                .compose(RxUtils.schedulersTransformer())
+                .subscribe(new Observer<ResultData<String>>() {
+                    @Override
+                    public void onSubscribe(Disposable d) {
+                        addSubscribe(d);
+                    }
+
+                    @Override
+                    public void onNext(ResultData<String> stringResultData) {
+                        if (stringResultData.getCode() == CODE_SUCCESS){
+                            AppManager.getAppManager().finishCurrentActivity();
+                            RxBus.getInstance().post(beanLiveData.getValue());
+                            messageLiveData.postValue("鍒犻櫎鎴愬姛");
+                        }else {
+                            messageLiveData.postValue(stringResultData.getMsg());
+                        }
+                    }
+
+                    @Override
+                    public void onError(Throwable e) {
+                        messageLiveData.postValue(e.getMessage());
+                    }
+
+                    @Override
+                    public void onComplete() {
+
+                    }
+                });
+    }
+    /**
+     * 淇敼
+     */
+    public void update() {
+        if (uploadFileList.size() > 0){
+            List<Observable<String>> observables = new ArrayList<>();
+            for (String path : uploadFileList) {
+                File file = new File(path);
+                RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);
+                MultipartBody.Part body = MultipartBody.Part.createFormData("uploadFile", file.getName(), requestBody);
+                Observable<String> uploadObservable = model.uploadFile(body)
+                        .flatMap(new Function<ResultData<UploadFileResponseBean>, ObservableSource<String>>() {
+                            @Override
+                            public ObservableSource<String> apply(ResultData<UploadFileResponseBean> resultData) throws Exception {
+                                if (resultData.getCode() == CODE_SUCCESS){
+                                    ExaminationInfoBean bean = getBeanLiveData().getValue();
+                                    if (bean != null){
+                                        String urls = bean.getUrl();
+                                        //鏇挎崲鍥剧墖鍦板潃
+                                        urls = urls.replace(path,resultData.getData().getUrl());
+                                        bean.setUrl(urls);
+                                        beanLiveData.postValue(bean);
+                                    }
+                                    return Observable.just(path);
+                                }else {
+                                    return Observable.error(new Exception(resultData.getMsg()));
+                                }
+                            }
+                        });
+
+                observables.add(uploadObservable);
+            }
+            Observable.zip(observables,result -> result)
+                    .flatMap(new Function<Object[], Observable<ResultData<String>>>() {
+                        @Override
+                        public Observable<ResultData<String>> apply(Object[] objects) throws Exception {
+                            //绉婚櫎宸茬粡涓婁紶鐨勬枃浠�
+                            //鎶妎bjects鏁扮粍杞崲鎴恖ist锛岀劧鍚庣Щ闄�
+                            for (Object object : objects) {
+                                uploadFileList.remove((String) object);
+                            }
+                            return model.updateExaminationInfo(beanLiveData.getValue());
+                        }
+                    })
+                    .doOnSubscribe(new Consumer<Disposable>() {
+                        @Override
+                        public void accept(Disposable disposable) throws Exception {
+                            changeStateView(StateViewEnum.DIALOG_LOADING);
+                        }
+                    })
+                    .doFinally(new Action() {
+                        @Override
+                        public void run() throws Exception {
+                            changeStateView(StateViewEnum.DIALOG_DISMISS);
+                        }
+                    })
+                    .compose(RxUtils.schedulersTransformer())
+                    .subscribe(new Observer<ResultData<String>>() {
+                        @Override
+                        public void onSubscribe(Disposable d) {
+                            addSubscribe(d);
+                        }
+
+                        @Override
+                        public void onNext(ResultData<String> stringResultData) {
+                            if (stringResultData.getCode() == CODE_SUCCESS){
+                                AppManager.getAppManager().finishCurrentActivity();
+                                RxBus.getInstance().post(beanLiveData.getValue());
+                                messageLiveData.postValue("淇敼鎴愬姛");
+                            }else {
+                                messageLiveData.postValue(stringResultData.getMsg());
+                            }
+                        }
+
+                        @Override
+                        public void onError(Throwable e) {
+                            messageLiveData.postValue(e.getMessage());
+                        }
+
+                        @Override
+                        public void onComplete() {
+
+                        }
+                    });
+        }else {
+            model.updateExaminationInfo(beanLiveData.getValue())
+                    .compose(RxUtils.schedulersTransformer())
+                    .subscribe(new Observer<ResultData<String>>() {
+                        @Override
+                        public void onSubscribe(Disposable d) {
+                            addSubscribe(d);
+                        }
+
+                        @Override
+                        public void onNext(ResultData<String> stringResultData) {
+                            if (stringResultData.getCode() == CODE_SUCCESS){
+                                AppManager.getAppManager().finishCurrentActivity();
+                                RxBus.getInstance().post(beanLiveData.getValue());
+                                messageLiveData.postValue("淇敼鎴愬姛");
+                            }else {
+                                messageLiveData.postValue(stringResultData.getMsg());
+                            }
+                        }
+
+                        @Override
+                        public void onError(Throwable e) {
+                            messageLiveData.postValue(e.getMessage());
+                        }
+
+                        @Override
+                        public void onComplete() {
+
+                        }
+                    });
+        }
+    }
+
+
+    public MutableLiveData<Boolean> getTypeLiveData() {
+        if (typeLiveData == null){
+            typeLiveData = new MutableLiveData<>();
+        }
+        return typeLiveData;
+    }
+
+    public void setTypeLiveData(MutableLiveData<Boolean> typeLiveData) {
+        this.typeLiveData = typeLiveData;
+    }
+
+    public MutableLiveData<ExaminationInfoBean> getBeanLiveData() {
+        if (beanLiveData == null) {
+            beanLiveData = new MutableLiveData<>();
+        }
+        if (beanLiveData.getValue() == null){
+            beanLiveData.setValue(new ExaminationInfoBean());
+        }
+        return beanLiveData;
+    }
+
+    public void setBeanLiveData(MutableLiveData<ExaminationInfoBean> beanLiveData) {
+        this.beanLiveData = beanLiveData;
+    }
+
+    public List<String> getUploadFileList() {
+        return uploadFileList;
+    }
+
+    public void addUploadFile(String url) {
+        uploadFileList.add(url);
+    }
+}
+
diff --git a/app/src/main/java/com/application/zhangshi_app_android/ui/function/FamilyAssetsActivityViewModel.java b/app/src/main/java/com/application/zhangshi_app_android/ui/function/FamilyAssetsActivityViewModel.java
index 0b47b7c..0561c0f 100644
--- a/app/src/main/java/com/application/zhangshi_app_android/ui/function/FamilyAssetsActivityViewModel.java
+++ b/app/src/main/java/com/application/zhangshi_app_android/ui/function/FamilyAssetsActivityViewModel.java
@@ -180,7 +180,6 @@
         if (list == null || list.isEmpty()){
             return;
         }
-        System.out.println(dataListLiveData.getValue().size());
         if (type == 0) {
             // 浠庢柊鍒版棫锛宯ull鎺掓渶鍚�
             list.sort((o1, o2) -> {
diff --git a/app/src/main/java/com/application/zhangshi_app_android/ui/function/FunctionFragment.java b/app/src/main/java/com/application/zhangshi_app_android/ui/function/FunctionFragment.java
index dbb4ce6..921ee34 100644
--- a/app/src/main/java/com/application/zhangshi_app_android/ui/function/FunctionFragment.java
+++ b/app/src/main/java/com/application/zhangshi_app_android/ui/function/FunctionFragment.java
@@ -122,7 +122,7 @@
             AppManager.getAppManager().startActivity(MarriageActivity.class);
         });
         binding.layoutHealthCare.setOnClickListener(v->{
-            AppManager.getAppManager().startActivity(HealthCareActivity.class);
+            AppManager.getAppManager().startActivity(AnnualHealthStatusActivity.class);
         });
         binding.layoutPrivacy.setOnClickListener(v->{
             AppManager.getAppManager().startActivity(PrivacyActivity.class);
diff --git a/app/src/main/java/com/application/zhangshi_app_android/ui/function/HealthCareActivity.java b/app/src/main/java/com/application/zhangshi_app_android/ui/function/HealthCareActivity.java
index 83a9b6a..0e5df68 100644
--- a/app/src/main/java/com/application/zhangshi_app_android/ui/function/HealthCareActivity.java
+++ b/app/src/main/java/com/application/zhangshi_app_android/ui/function/HealthCareActivity.java
@@ -26,6 +26,7 @@
 import com.github.gzuliyujiang.wheelpicker.OptionPicker;
 import com.github.gzuliyujiang.wheelpicker.contract.OnOptionPickedListener;
 import com.google.android.material.tabs.TabLayout;
+import com.hjq.bar.TitleBar;
 
 import java.util.Arrays;
 import java.util.List;
@@ -58,14 +59,6 @@
     public void initView() {
         View view = View.inflate(this,R.layout.pop_annual_health_status,null);
         popupWindow = initPopUpWindow(view);
-
-        view.findViewById(R.id.tv_annual_health_status).setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                popupWindow.dismiss();
-                AppManager.getAppManager().startActivity(AnnualHealthStatusActivity.class);
-            }
-        });
         view.findViewById(R.id.tv_edit).setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
@@ -124,7 +117,6 @@
 
     @Override
     public void initLiveDataObserve() {
-        System.out.println("鎴�"+binding.ivA.isClickable());
         viewModel.getIsLifeHabitsExpendedLiveData().observe(this, aBoolean -> {
             if (aBoolean){
                 binding.layoutTitleLifeHabits.setOnClickListener(view -> {
@@ -179,7 +171,7 @@
                     binding.ivOperate.setOnClickListener(new View.OnClickListener() {
                         @Override
                         public void onClick(View v) {
-                            popupWindow.showAsDropDown(binding.ivOperate,-ScreenSizeUtils.dip2px(HealthCareActivity.this,118) +binding.ivOperate.getWidth(),0);
+                            popupWindow.showAsDropDown(binding.ivOperate,-ScreenSizeUtils.dip2px(HealthCareActivity.this,85) +binding.ivOperate.getWidth(),0);
                         }
                     });
                 }
@@ -288,4 +280,8 @@
         animator.start();
     }
 
+    @Override
+    public void onLeftClick(TitleBar titleBar) {
+        finish();
+    }
 }
diff --git a/app/src/main/java/com/application/zhangshi_app_android/ui/function/ImageCarouselFragment.java b/app/src/main/java/com/application/zhangshi_app_android/ui/function/ImageCarouselFragment.java
index 6b834ac..4fde637 100644
--- a/app/src/main/java/com/application/zhangshi_app_android/ui/function/ImageCarouselFragment.java
+++ b/app/src/main/java/com/application/zhangshi_app_android/ui/function/ImageCarouselFragment.java
@@ -6,6 +6,7 @@
 import android.widget.FrameLayout;
 import android.widget.ImageView;
 
+import com.android.app_base.base.BaseConfig;
 import com.android.app_base.base.view.BaseFragment;
 import com.android.app_base.base.viewmodel.BaseViewModel;
 import com.android.app_base.utils.GlideUtil;
@@ -118,7 +119,13 @@
         adapter = new BannerImageAdapter<BannerBean>(chooseList) {
             @Override
             public void onBindView(BannerImageHolder holder, BannerBean data, int position, int size) {
-                GlideUtil.loadImage(data.getUrl(), holder.imageView);
+                String url = data.getUrl();
+                if (url.contains("profile/upload")) {//濡傛灉鏄笂浼犲埌鏈嶅姟鍣ㄧ殑鍥剧墖
+                    //鍙彇profile/upload浠ュ悗鐨勯儴鍒�
+                    url = url.substring(url.indexOf("profile/upload"));
+                    url = BaseConfig.BASE_URL_DOMAIN + "/" + url;
+                }
+                GlideUtil.loadImage(url, holder.imageView);
             }
 
             @Override
diff --git a/app/src/main/java/com/application/zhangshi_app_android/ui/function/TourismExperienceActivityViewModel.java b/app/src/main/java/com/application/zhangshi_app_android/ui/function/TourismExperienceActivityViewModel.java
index e256c17..75b1831 100644
--- a/app/src/main/java/com/application/zhangshi_app_android/ui/function/TourismExperienceActivityViewModel.java
+++ b/app/src/main/java/com/application/zhangshi_app_android/ui/function/TourismExperienceActivityViewModel.java
@@ -60,13 +60,13 @@
             getRequestBeanLiveData().setValue(new TourismExperienceRequestBean());
         }
         model.getTourismExperience(getRequestBeanLiveData().getValue().toMap())
-                .compose(RxUtils.schedulersTransformer())
                 .doFinally(new Action() {
                     @Override
                     public void run() throws Exception {
                         changeStateView(StateViewEnum.DATA_FINISH);
                     }
                 })
+                .compose(RxUtils.schedulersTransformer())
                 .subscribe(new Observer<ResultData<List<TourismExperienceBean>>>() {
                     @Override
                     public void onSubscribe(Disposable d) {
diff --git a/app/src/main/java/com/application/zhangshi_app_android/ui/function/VideoCarouselFragment.java b/app/src/main/java/com/application/zhangshi_app_android/ui/function/VideoCarouselFragment.java
index 9dce2b6..c04c364 100644
--- a/app/src/main/java/com/application/zhangshi_app_android/ui/function/VideoCarouselFragment.java
+++ b/app/src/main/java/com/application/zhangshi_app_android/ui/function/VideoCarouselFragment.java
@@ -5,6 +5,7 @@
 
 import androidx.viewpager2.widget.ViewPager2;
 
+import com.android.app_base.base.BaseConfig;
 import com.android.app_base.base.adapter.BaseVp2FragmentAdapter;
 import com.android.app_base.base.view.BaseFragment;
 import com.application.zhangshi_app_android.R;
@@ -67,7 +68,6 @@
             public void onPageSelected(int position) {
                 super.onPageSelected(position);
                 if (adapter.getFragment(position) != null){
-                    System.out.println("onPageSelected:"+position);
                     adapter.getFragment(position).startPlay();
                 }
             }
diff --git a/app/src/main/java/com/application/zhangshi_app_android/ui/function/VideoFragment.java b/app/src/main/java/com/application/zhangshi_app_android/ui/function/VideoFragment.java
index 3c008a5..57d27e1 100644
--- a/app/src/main/java/com/application/zhangshi_app_android/ui/function/VideoFragment.java
+++ b/app/src/main/java/com/application/zhangshi_app_android/ui/function/VideoFragment.java
@@ -8,6 +8,7 @@
 
 import androidx.annotation.NonNull;
 
+import com.android.app_base.base.BaseConfig;
 import com.android.app_base.base.view.BaseFragment;
 import com.android.app_base.utils.GlideUtil;
 import com.application.zhangshi_app_android.R;
@@ -38,10 +39,15 @@
     public VideoFragment() {
     }
 
-    public static VideoFragment newInstance(String playUrl) {
+    public static VideoFragment newInstance(String url) {
         VideoFragment fragment = new VideoFragment();
+        if (url.contains("profile/upload")) {//濡傛灉鏄笂浼犲埌鏈嶅姟鍣ㄧ殑鍥剧墖
+            //鍙彇profile/upload浠ュ悗鐨勯儴鍒�
+            url = url.substring(url.indexOf("profile/upload"));
+            url = BaseConfig.BASE_URL_DOMAIN + "/" + url;
+        }
         Bundle args = new Bundle();
-        args.putSerializable("playUrl", playUrl);
+        args.putSerializable("playUrl", url);
         fragment.setArguments(args);
         return fragment;
     }
diff --git a/app/src/main/java/com/application/zhangshi_app_android/ui/home/HomeFragment.java b/app/src/main/java/com/application/zhangshi_app_android/ui/home/HomeFragment.java
index 9123e90..467c702 100644
--- a/app/src/main/java/com/application/zhangshi_app_android/ui/home/HomeFragment.java
+++ b/app/src/main/java/com/application/zhangshi_app_android/ui/home/HomeFragment.java
@@ -68,13 +68,14 @@
         });
         binding.scrollHomeMindMapLayout.setOnItemClickListener(new HomeMindMapLayout.OnItemClickListener() {
             @Override
-            public void onItemClick(View view, HomeRootBean bean) {
+            public void onItemClick(View view, HomeRootBean bean,boolean isFamily) {
                 View contentView;
                 if (bean.getSpouse()!=null) {
                     bean.getSpouse().setSpouse(bean);
                     PopBasicInformationDoubleBinding binding= DataBindingUtil.inflate(getLayoutInflater(),R.layout.pop_basic_information_double,null,false);
                     binding.setSelfBean(bean);
                     binding.setSpouseBean(bean.getSpouse());
+                    binding.setIsFamily(isFamily);
                     contentView = binding.getRoot();
                 }else {
                     PopBasicInformationSingleBinding binding = DataBindingUtil.inflate(getLayoutInflater(),R.layout.pop_basic_information_single,null,false);
diff --git a/app/src/main/java/com/application/zhangshi_app_android/ui/main/MainActivity.java b/app/src/main/java/com/application/zhangshi_app_android/ui/main/MainActivity.java
index 9185898..648db3d 100644
--- a/app/src/main/java/com/application/zhangshi_app_android/ui/main/MainActivity.java
+++ b/app/src/main/java/com/application/zhangshi_app_android/ui/main/MainActivity.java
@@ -28,7 +28,6 @@
 import com.application.zhangshi_app_android.bean.UpdateVersionBean;
 import com.application.zhangshi_app_android.databinding.ActivityMainBinding;
 import com.application.zhangshi_app_android.ui.dialog.UpdateDialog;
-import com.application.zhangshi_app_android.ui.dialog.VersionUpdateDialog;
 import com.application.zhangshi_app_android.ui.function.FunctionFragment;
 import com.application.zhangshi_app_android.ui.home.HomeFragment;
 import com.application.zhangshi_app_android.ui.personal_center.PersonalCenterFragment;
@@ -151,6 +150,31 @@
     }
 
     @Override
+    protected void onNewIntent(Intent intent) {
+        super.onNewIntent(intent);
+        switchFragment(mPagerAdapter.getFragmentIndex((Class<? extends Fragment>) intent.getSerializableExtra(INTENT_KEY_IN_FRAGMENT_CLASS)));
+    }
+
+    private void switchFragment(int fragmentIndex) {
+        if (fragmentIndex == -1) {
+            return;
+        }
+
+        switch (fragmentIndex) {
+            case 0:
+            case 1:
+            case 2:
+            case 3:
+                binding.mainVp.setCurrentItem(fragmentIndex);
+                binding.mainBnv.setSelectedItemId(binding.mainBnv.getMenu().getItem(fragmentIndex).getItemId());
+                break;
+            default:
+                break;
+        }
+    }
+
+
+    @Override
     protected void onDestroy() {
         binding.mainVp.setAdapter(null);
         binding.mainBnv.setOnItemSelectedListener(null);
@@ -175,7 +199,7 @@
         start(context, HomeFragment.class);
     }
 
-    public static void start(Context context, Class<? extends BaseFragment> fragmentClass) {
+    public static void start(Context context, Class<? extends Fragment> fragmentClass) {
         Intent intent = new Intent(context, MainActivity.class);
         intent.putExtra(INTENT_KEY_IN_FRAGMENT_CLASS, fragmentClass);
         if (!(context instanceof Activity)) {
diff --git a/app/src/main/java/com/application/zhangshi_app_android/widget/DoubleNode.java b/app/src/main/java/com/application/zhangshi_app_android/widget/DoubleNode.java
index 7870d56..0b2b7f0 100644
--- a/app/src/main/java/com/application/zhangshi_app_android/widget/DoubleNode.java
+++ b/app/src/main/java/com/application/zhangshi_app_android/widget/DoubleNode.java
@@ -25,6 +25,7 @@
     public DoubleNode(Context context,HomeRootBean member) {
         super(context,member);
         member.getSpouse().setSpouse(member);
+        initView();
         //鍙屼翰鑺傜偣 鍓嶅悗璺緞闀垮害 鏈変袱鍊嶇殑 pathLength
         if (member.getIdentity() > 1 && member.getChildList() != null && member.getChildList().size() > 0){
             //闈� 绗竴浠� 涓� 鏈夊瓙浠�, 鑺傜偣瀹藉害 = view瀹藉害 + 鍓嶅悗璺緞闀垮害 + 灞曞紑鎸夐挳瀹藉害
@@ -41,7 +42,6 @@
         }
         //鍙屼翰鑺傜偣 楂樺害 = view楂樺害 + 閰嶅伓view楂樺害 + 閰嶅伓view涓婁笅闂磋窛
         height = getItemViewHeight() * 2 + spouseMargin;
-        initView();
     }
 
     private void initView() {
@@ -89,8 +89,10 @@
         } else {
             viewLeft = left;
         }
+
         memberItemView.setX(viewLeft);
         memberItemView.setY(centerY - memberItemView.getMeasuredHeight() - spouseMargin/2f);
+
         viewRight = viewLeft + memberItemView.getMeasuredWidth();
 
         spouseView.setX(viewLeft);
@@ -241,4 +243,19 @@
         forkPathList.add(path);
     }
 
+    @Override
+    public int getItemViewWidth() {
+        if (memberItemView != null){
+            return memberItemView.getMeasuredWidth();
+        }
+        return 0;
+    }
+
+    @Override
+    public int getItemViewHeight() {
+        if (memberItemView != null){
+            return memberItemView.getMeasuredHeight();
+        }
+        return 0;
+    }
 }
diff --git a/app/src/main/java/com/application/zhangshi_app_android/widget/HomeMindMapLayout.java b/app/src/main/java/com/application/zhangshi_app_android/widget/HomeMindMapLayout.java
index 400e797..19578f1 100644
--- a/app/src/main/java/com/application/zhangshi_app_android/widget/HomeMindMapLayout.java
+++ b/app/src/main/java/com/application/zhangshi_app_android/widget/HomeMindMapLayout.java
@@ -72,7 +72,7 @@
 
     private void setRootMemberReal(HomeRootBean root) {
         this.rootMember = root;
-        if (rootMember != null) { // 缁樺埗鏍硅妭鐐癸紝鍦ㄧ珫鐩存柟鍚戜笂灞呬腑
+        if (rootMember != null) { // 缁樺埗鏍硅妭鐐�
             if (rootMember.getSpouse() == null){
                 rootNode = new SimpleNode(getContext(),rootMember);
             }else {
@@ -173,7 +173,7 @@
     }
 
     public interface OnItemClickListener{
-        void onItemClick(View view,HomeRootBean member);
+        void onItemClick(View view,HomeRootBean member,boolean isFamily);
     }
 
 }
diff --git a/app/src/main/java/com/application/zhangshi_app_android/widget/Node.java b/app/src/main/java/com/application/zhangshi_app_android/widget/Node.java
index 71c81ad..5c98ec3 100644
--- a/app/src/main/java/com/application/zhangshi_app_android/widget/Node.java
+++ b/app/src/main/java/com/application/zhangshi_app_android/widget/Node.java
@@ -12,12 +12,15 @@
 import android.widget.TextView;
 
 import androidx.constraintlayout.utils.widget.ImageFilterView;
+import androidx.core.content.res.ResourcesCompat;
+import androidx.databinding.DataBindingUtil;
 
 import com.android.app_base.manager.AppManager;
 import com.android.app_base.utils.GlideUtil;
 import com.android.app_base.utils.ScreenSizeUtils;
 import com.application.zhangshi_app_android.R;
 import com.application.zhangshi_app_android.bean.HomeRootBean;
+import com.application.zhangshi_app_android.databinding.ItemFamilyMemberBinding;
 
 import java.util.ArrayList;
 import java.util.LinkedList;
@@ -100,7 +103,7 @@
      * 閫掑綊璁剧疆鎵�鏈夎妭鐐圭殑浣嶇疆
      * @param topNode 椤堕儴鑺傜偣锛岃繖棰楄妭鐐规爲鐨勬渶涓婅竟鐨勮妭鐐�
      * @param rootNode 鏍硅妭鐐癸紝杩欓鑺傜偣鏍戠殑鏍硅妭鐐�
-     *                startNode 蹇呴』鏄� topNode 绁栧厛鑺傜偣
+     *                rootNode 蹇呴』鏄� topNode 绁栧厛鑺傜偣
      * @param x 鏁撮鑺傜偣鏍戠殑x鍧愭爣
      * @param y 鏁撮鑺傜偣鏍戠殑y鍧愭爣
      */
@@ -189,6 +192,7 @@
 
     // 璁剧疆瀵瑰簲绫诲瀷鑺傜偣鐨勪綅缃� 鐢卞瓙绫诲疄鐜�
     protected abstract void setViewPosition(int x, int centerY);
+    // 璁剧疆鍒嗗弶鑺傜偣鐨勪綅缃� 鐢卞瓙绫诲疄鐜�,蹇呴』鍏坰etViewPosition鎵嶈兘璋冪敤
     protected abstract void setForkYList(List<Integer> yList);
 
     /**
@@ -200,45 +204,39 @@
     protected View createItemView(HomeRootBean bean,boolean isFamily){
         // 浣跨敤甯冨眬濉厖鍣ㄥ姞杞借妭鐐瑰竷灞�
         LayoutInflater inflater = LayoutInflater.from(context);
-        View familyMemberView = inflater.inflate(R.layout.item_family_member, null, false);
-        familyMemberView.measure(View.MeasureSpec.makeMeasureSpec((1 << 30) - 1, View.MeasureSpec.AT_MOST),
-                View.MeasureSpec.makeMeasureSpec((1 << 30) - 1, View.MeasureSpec.AT_MOST));
+        ItemFamilyMemberBinding binding = DataBindingUtil.inflate(inflater, R.layout.item_family_member, null, false);
+
+        View familyMemberView = binding.getRoot();
 
         // 闃叉addView鏃讹紝鎵�鏈夎繖閲屽垱寤虹殑view鐨勯珮瀹借闄愬埗鎴愪竴鏍风殑
         ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
         familyMemberView.setLayoutParams(params);
 
-        if (bean == null) {
-            return familyMemberView;
-        }
-        // 鑾峰彇甯冨眬涓殑缁勪欢
-        TextView tv_generation = familyMemberView.findViewById(R.id.tv_generation);
-        ImageFilterView iv_avatar = familyMemberView.findViewById(R.id.iv_avatar);
-        TextView tv_name = familyMemberView.findViewById(R.id.tv_name);
-
-        if (!isFamily){
-            tv_name.setTextColor(Color.parseColor("#FF8296C5"));
-            tv_name.setTypeface(Typeface.DEFAULT);
-        }
-        // 璁剧疆鑺傜偣鍐呭
-        tv_generation.setText(String.valueOf(bean.getIdentity()));
-        if (bean.getImg() != null) {
-            GlideUtil.loadImage(bean.getImg(), iv_avatar);
-        }
-        tv_name.setText(bean.getNickName());
-        tv_name.setSelected(true);
         familyMemberView.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                 if (onItemClickListener != null){
-                    onItemClickListener.onItemClick(familyMemberView,bean);
+                    onItemClickListener.onItemClick(familyMemberView,bean,isFamily);
                 }
             }
         });
+        if (bean != null) {
+            binding.setBean(bean);
+            if (!isFamily){
+                binding.tvName.setTextColor(Color.parseColor("#FF8296C5"));
+                //鑾峰彇瀛椾綋
+                Typeface typeface = ResourcesCompat.getFont(context, com.android.app_base.R.font.roboto_regular);
+                binding.tvName.setTypeface(typeface);
+            }
+            // 浣跨敤databinding鏃犳硶娴嬮噺view鐨勫甫鍐呭鐨勫噯纭楂橈紝鎵�浠ヨ繖閲屾墜鍔ㄨ缃竴涓�
+            binding.tvGeneration.setText(bean.getIdentity()+"");
+        }
+        familyMemberView.measure(View.MeasureSpec.makeMeasureSpec((1 << 30) - 1, View.MeasureSpec.AT_MOST),
+                View.MeasureSpec.makeMeasureSpec((1 << 30) - 1, View.MeasureSpec.AT_MOST));
         return familyMemberView;
     }
     protected ImageView createExpandIconView() {
-        ImageView expandView = new ImageView(AppManager.getAppManager().currentActivity());
+        ImageView expandView = new ImageView(context);
         FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(pathLength,pathLength);
         expandView.setLayoutParams(params);
         int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(pathLength, View.MeasureSpec.EXACTLY);
@@ -468,15 +466,11 @@
     }
 
     // 鑾峰彇 姣忎釜 itemView 鐨勫搴�
-    public int getItemViewWidth(){
-        View itemView =  createItemView(null,false);
-        return itemView.getMeasuredWidth();
-    }
+    public abstract int getItemViewWidth();
+
     // 鑾峰彇 姣忎釜 itemView 鐨勯珮搴�
-    public int getItemViewHeight(){
-        View itemView =  createItemView(null,false);
-        return itemView.getMeasuredHeight();
-    }
+    public abstract int getItemViewHeight();
+
     //鑾峰彇灞曞紑鎸夐挳鐨勫搴�
     public int getExpandIconWidth(){
         ImageView expandIconView = createExpandIconView();
diff --git a/app/src/main/java/com/application/zhangshi_app_android/widget/SimpleNode.java b/app/src/main/java/com/application/zhangshi_app_android/widget/SimpleNode.java
index c19a3db..0799930 100644
--- a/app/src/main/java/com/application/zhangshi_app_android/widget/SimpleNode.java
+++ b/app/src/main/java/com/application/zhangshi_app_android/widget/SimpleNode.java
@@ -23,9 +23,12 @@
 
     public SimpleNode(Context context,HomeRootBean member) {
         super(context,member);
+
+        initView();
+
         if (member.getIdentity() > 1 && member.getChildList() != null && member.getChildList().size() > 0){
             //闈� 绗竴浠� 涓� 鏈夊瓙浠�, 鑺傜偣瀹藉害 = view瀹藉害 + 鍓嶅悗璺緞闀垮害 + 灞曞紑鎸夐挳瀹藉害
-            width = pathLength + getItemViewWidth() + pathLength  + getExpandIconWidth();
+            width = pathLength + memberItemView.getMeasuredWidth() + pathLength  + expandIconView.getMeasuredWidth();
         }else if (member.getIdentity() > 1 && (member.getChildList() == null || member.getChildList().size() == 0)) {
             //闈� 绗竴浠� 涓� 鏃犲瓙浠�, 鑺傜偣瀹藉害 = view瀹藉害 + 鍓嶈矾寰勯暱搴�
             width = getItemViewWidth() + pathLength;
@@ -38,7 +41,6 @@
         }
         //鍗曚翰鑺傜偣 楂樺害 = view楂樺害
         height = getItemViewHeight();
-        initView();
     }
 
     private void initView() {
@@ -178,4 +180,20 @@
         }
         forkPathList.add(path);
     }
+
+    @Override
+    public int getItemViewWidth() {
+        if (memberItemView != null){
+            return memberItemView.getMeasuredWidth();
+        }
+        return 0;
+    }
+
+    @Override
+    public int getItemViewHeight() {
+        if (memberItemView != null){
+            return memberItemView.getMeasuredHeight();
+        }
+        return 0;
+    }
 }
diff --git a/app/src/main/res/drawable/shape_gradient_browser_progress.xml b/app/src/main/res/drawable/shape_gradient_browser_progress.xml
new file mode 100644
index 0000000..a451a49
--- /dev/null
+++ b/app/src/main/res/drawable/shape_gradient_browser_progress.xml
@@ -0,0 +1,22 @@
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <item android:id="@android:id/background">
+        <shape>
+            <gradient
+                android:centerColor="@color/transparent"
+                android:endColor="@color/transparent"
+                android:startColor="@color/transparent" />
+        </shape>
+    </item>
+    <item android:id="@android:id/progress">
+        <clip>
+            <shape>
+                <gradient
+                    android:centerColor="#5A8DDF"
+                    android:endColor="#AA5A8DDF"
+                    android:startColor="@color/transparent" />
+            </shape>
+        </clip>
+    </item>
+
+</layer-list>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_annual_health_status.xml b/app/src/main/res/layout/activity_annual_health_status.xml
index f098a82..0a4519f 100644
--- a/app/src/main/res/layout/activity_annual_health_status.xml
+++ b/app/src/main/res/layout/activity_annual_health_status.xml
@@ -20,7 +20,6 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             app:layout_constraintTop_toTopOf="parent"
-            app:leftIcon="@drawable/ic_back"
             >
             <FrameLayout
                 android:layout_width="24dp"
@@ -49,7 +48,7 @@
                     android:layout_width="0dp"
                     android:layout_height="wrap_content"
                     android:layout_marginStart="16dp"
-                    android:text="浣撴鎴栫湅鐥�"
+                    android:text="灏卞尰淇℃伅"
                     android:layout_weight="1"
                     android:textColor="@color/white"
                     android:textSize="20sp"
@@ -91,7 +90,7 @@
                     android:imeOptions="actionSearch"
                     android:text=""
                     android:singleLine="true"
-                    android:hint="鍦ㄢ�滃勾搴﹀仴搴锋儏鍐碘�濆唴鎼滅储"
+                    android:hint="鍦ㄢ�滃氨鍖讳俊鎭�濆唴鎼滅储"
                     android:focusable="false"
                     android:clickable="false"
                     android:editable="false"
diff --git a/app/src/main/res/layout/activity_annual_health_status_detail.xml b/app/src/main/res/layout/activity_annual_health_status_detail.xml
index 127a651..b0b643d 100644
--- a/app/src/main/res/layout/activity_annual_health_status_detail.xml
+++ b/app/src/main/res/layout/activity_annual_health_status_detail.xml
@@ -18,7 +18,7 @@
         <com.android.app_base.widget.ExtendTitleBar
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            app:title="@{viewModel.beanLiveData.id==0?`鏂板缓浣撴鎴栫湅鐥卄:viewModel.beanLiveData.title}"
+            app:title="@{viewModel.beanLiveData.id==-1?`鏂板缓灏卞尰淇℃伅`:viewModel.beanLiveData.title}"
             app:titleGravity="left"
             app:leftIcon="@drawable/ic_back"
             >
@@ -43,7 +43,7 @@
             >
             <LinearLayout
                 android:layout_width="match_parent"
-                android:layout_height="match_parent"
+                android:layout_height="wrap_content"
                 android:orientation="vertical"
                 android:paddingHorizontal="20dp"
                 android:paddingBottom="20dp"
@@ -55,13 +55,13 @@
                     android:text="搴忓彿"
                     android:textColor="#767375"
                     android:textSize="12sp"
-                    android:visibility="@{viewModel.typeLiveData}"
+                    android:visibility="@{viewModel.beanLiveData.id!=-1?true:false}"
                     />
 
                 <androidx.constraintlayout.widget.ConstraintLayout
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:visibility="@{viewModel.typeLiveData}"
+                    android:visibility="@{viewModel.beanLiveData.id!=-1?true:false}"
                     >
                     <EditText
                         android:id="@+id/et_id"
diff --git a/app/src/main/res/layout/activity_browser.xml b/app/src/main/res/layout/activity_browser.xml
new file mode 100644
index 0000000..2ad641b
--- /dev/null
+++ b/app/src/main/res/layout/activity_browser.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools">
+
+    <data>
+
+    </data>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="vertical">
+
+        <com.hjq.bar.TitleBar
+            android:id="@+id/tb_browser_title"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            app:leftIcon="@drawable/ic_back"
+            />
+
+        <ProgressBar
+            android:id="@+id/pb_browser_progress"
+            style="?android:attr/progressBarStyleHorizontal"
+            android:layout_width="match_parent"
+            android:layout_height="3dp"
+            android:progressDrawable="@drawable/shape_gradient_browser_progress"
+            android:visibility="gone" />
+
+        <com.scwang.smart.refresh.layout.SmartRefreshLayout
+            android:id="@+id/sl_browser_refresh"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            app:srlEnableHeaderTranslationContent="false"
+            app:srlEnableLoadMore="false"
+            app:srlEnablePreviewInEditMode="false"
+            app:srlPrimaryColor="#444444">
+
+            <com.scwang.smart.refresh.header.MaterialHeader
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                />
+            <WebView
+                android:id="@+id/wv_browser_view"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent" />
+            <com.scwang.smart.refresh.footer.BallPulseFooter
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"/>
+
+        </com.scwang.smart.refresh.layout.SmartRefreshLayout>
+
+
+    </LinearLayout>
+</layout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_examination_info.xml b/app/src/main/res/layout/activity_examination_info.xml
new file mode 100644
index 0000000..ac555f1
--- /dev/null
+++ b/app/src/main/res/layout/activity_examination_info.xml
@@ -0,0 +1,318 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools">
+
+    <data>
+        <variable
+            name="viewModel"
+            type="com.application.zhangshi_app_android.ui.function.ExaminationInfoActivityViewModel" />
+    </data>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:background="@color/color_normal_background"
+        >
+
+        <com.android.app_base.widget.ExtendTitleBar
+            android:id="@+id/titleBar"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            app:layout_constraintTop_toTopOf="parent"
+            app:leftIcon="@drawable/ic_back"
+            >
+            <FrameLayout
+                android:layout_width="24dp"
+                android:layout_height="24dp"
+                android:layout_marginHorizontal="16dp"
+                android:layout_gravity="center_vertical|end"
+                >
+                <ImageView
+                    android:id="@+id/iv_operate"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="center"
+                    android:background="@drawable/ic_operate"
+                    />
+            </FrameLayout>
+
+            <LinearLayout
+                android:id="@+id/layout_default"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_marginHorizontal="56dp"
+                android:gravity="center_vertical"
+                >
+                <TextView
+                    android:id="@+id/tv_title"
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="16dp"
+                    android:text="鍘嗗勾浣撴淇℃伅"
+                    android:layout_weight="1"
+                    android:textColor="@color/white"
+                    android:textSize="20sp"
+                    />
+                <ImageView
+                    android:id="@+id/iv_search_default"
+                    android:layout_width="24dp"
+                    android:layout_height="24dp"
+                    android:background="@drawable/ic_search"
+                    />
+            </LinearLayout>
+
+            <LinearLayout
+                android:id="@+id/layout_search"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_marginVertical="4dp"
+                android:layout_marginHorizontal="56dp"
+                android:gravity="center_vertical"
+                android:background="@color/white"
+                android:paddingHorizontal="5dp"
+                android:visibility="gone"
+                >
+                <ImageView
+                    android:id="@+id/iv_search"
+                    android:layout_width="24dp"
+                    android:layout_height="24dp"
+                    android:background="@drawable/ic_search_gray"
+                    />
+                <EditText
+                    android:id="@+id/et_search"
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:layout_marginStart="5dp"
+                    android:textSize="14sp"
+                    android:textColor="#61000000"
+                    android:background="@null"
+                    android:imeOptions="actionSearch"
+                    android:text=""
+                    android:singleLine="true"
+                    android:hint="鍦ㄢ�滃巻骞翠綋妫�淇℃伅鈥濆唴鎼滅储"
+                    android:focusable="false"
+                    android:clickable="false"
+                    android:editable="false"
+                    />
+                <ImageView
+                    android:id="@+id/iv_search_type"
+                    android:layout_width="24dp"
+                    android:layout_height="24dp"
+                    android:background="@drawable/ic_search_by"
+                    />
+            </LinearLayout>
+
+        </com.android.app_base.widget.ExtendTitleBar>
+
+        <LinearLayout
+            android:id="@+id/layout_data_null"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:orientation="vertical"
+            android:gravity="center"
+            android:visibility="gone"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/titleBar">
+
+            <ImageView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:background="@drawable/img_data_null"
+                />
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="18dp"
+                android:text="鏆傛椂杩樻病鏈夋暟鎹摝~\n鐐瑰嚮鈥濓紜鈥濈珛鍗冲垱寤�"
+                android:textSize="14sp"
+                android:textColor="#73000000"
+                />
+        </LinearLayout>
+        <com.scwang.smart.refresh.layout.SmartRefreshLayout
+            android:id="@+id/refreshLayout"
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/titleBar"
+            >
+            <com.scwang.smart.refresh.header.MaterialHeader
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                />
+            <androidx.recyclerview.widget.RecyclerView
+                android:id="@+id/recyclerView"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                tools:itemCount="20"
+                tools:listitem="@layout/item_examination_info" />
+            <com.scwang.smart.refresh.footer.BallPulseFooter
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"/>
+        </com.scwang.smart.refresh.layout.SmartRefreshLayout>
+        <RelativeLayout
+            android:id="@+id/container_search_parameter"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            app:layout_constraintTop_toBottomOf="@id/titleBar"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            android:layout_marginTop="-4dp"
+            tools:layout_height="wrap_content"
+            >
+            <LinearLayout
+                android:id="@+id/layout_search_parameter"
+                android:orientation="vertical"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:background="@color/white"
+                android:layout_marginHorizontal="56dp"
+                android:paddingEnd="12dp"
+                android:paddingStart="5dp"
+                >
+                <View
+                    android:layout_width="match_parent"
+                    android:layout_height="0.5dp"
+                    android:background="#FF939393" />
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="40dp"
+                    android:gravity="center">
+
+                    <androidx.appcompat.widget.AppCompatTextView
+                        android:layout_width="0dp"
+                        android:layout_weight="1"
+                        android:layout_height="match_parent"
+                        android:text="骞村害鎶ュ憡"
+                        android:textColor="#FF333333"
+                        android:textSize="14sp"
+                        android:gravity="center"
+                        android:maxLines="1"
+                        app:autoSizeTextType="uniform"
+                        app:autoSizeMinTextSize="8sp"
+                        app:autoSizeMaxTextSize="14sp"
+                        />
+
+                    <com.android.app_base.widget.ClearEditText
+                        android:layout_width="0dp"
+                        android:layout_weight="4"
+                        android:layout_height="wrap_content"
+                        android:background="@null"
+                        android:inputType="text"
+                        android:layout_marginStart="6dp"
+                        android:text="@={viewModel.requestBeanLiveData.report}"
+                        android:hint="璇疯緭鍏ュ勾搴︽姤鍛�"
+                        android:textColorHint="#61000000"
+                        android:textColor="#FF333333"
+                        android:textSize="14sp"
+                        android:maxLines="1"
+                        app:autoSizeTextType="uniform"
+                        app:autoSizeMinTextSize="8sp"
+                        app:autoSizeMaxTextSize="14sp"
+                        app:background="@drawable/ic_clear"
+                        />
+
+                </LinearLayout>
+
+                <View
+                    android:layout_width="match_parent"
+                    android:layout_height="0.3dp"
+                    android:background="#FF939393" />
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="40dp"
+                    android:gravity="center"
+                    >
+
+                    <androidx.appcompat.widget.AppCompatTextView
+                        android:layout_width="0dp"
+                        android:layout_weight="1"
+                        android:layout_height="wrap_content"
+                        android:text="鏃堕棿"
+                        android:textColor="#FF333333"
+                        android:textSize="14sp"
+                        android:gravity="center"
+                        android:maxLines="1"
+                        app:autoSizeTextType="uniform"
+                        app:autoSizeMinTextSize="8sp"
+                        app:autoSizeMaxTextSize="14sp"
+                        />
+
+                    <LinearLayout
+                        android:layout_width="0dp"
+                        android:layout_height="wrap_content"
+                        android:layout_weight="4"
+                        android:gravity="center"
+                        >
+                        <androidx.appcompat.widget.AppCompatTextView
+                            android:id="@+id/et_start_time"
+                            android:layout_width="0dp"
+                            android:layout_weight="1"
+                            android:layout_height="wrap_content"
+                            android:gravity="center"
+                            android:layout_marginStart="6dp"
+                            android:text="@={viewModel.requestBeanLiveData.happenStartTime}"
+                            android:hint="寮�濮嬫椂闂�"
+                            android:textColorHint="#61000000"
+                            android:textColor="#FF333333"
+                            android:textSize="14sp"
+                            android:maxLines="1"
+                            android:lines="1"
+                            app:autoSizeTextType="uniform"
+                            app:autoSizeMinTextSize="8sp"
+                            app:autoSizeMaxTextSize="14sp"
+                            tools:text="2022-01-01"
+                            />
+                        <TextView
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:text="鈥�"
+                            />
+                        <androidx.appcompat.widget.AppCompatTextView
+                            android:id="@+id/et_end_time"
+                            android:layout_width="0dp"
+                            android:layout_weight="1"
+                            android:gravity="center"
+                            android:layout_height="wrap_content"
+                            android:text="@={viewModel.requestBeanLiveData.happenEndTime}"
+                            android:hint="缁撴潫鏃堕棿"
+                            android:textColorHint="#61000000"
+                            android:textColor="#FF333333"
+                            android:textSize="14sp"
+                            android:maxLines="1"
+                            app:autoSizeTextType="uniform"
+                            app:autoSizeMinTextSize="8sp"
+                            app:autoSizeMaxTextSize="14sp"
+                            tools:text="2022-01-01"
+                            />
+                        <ImageView
+                            android:id="@+id/iv_time_clear"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:background="@drawable/ic_clear"
+                            android:visibility="invisible"
+                            />
+                    </LinearLayout>
+
+                </LinearLayout>
+            </LinearLayout>
+
+        </RelativeLayout>
+        <com.google.android.material.floatingactionbutton.FloatingActionButton
+            android:id="@+id/fab_add"
+            android:layout_width="56dp"
+            android:layout_height="56dp"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            android:layout_marginEnd="25dp"
+            android:layout_marginBottom="@dimen/dp_44"
+            android:src="@drawable/ic_add"
+            app:fabCustomSize="56dp"
+            />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+</layout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_examination_info_detail.xml b/app/src/main/res/layout/activity_examination_info_detail.xml
new file mode 100644
index 0000000..fefdd46
--- /dev/null
+++ b/app/src/main/res/layout/activity_examination_info_detail.xml
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools">
+
+    <data>
+        <variable
+            name="viewModel"
+            type="com.application.zhangshi_app_android.ui.function.ExaminationInfoDetailActivityViewModel" />
+    </data>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:background="@color/color_normal_background"
+        android:orientation="vertical">
+
+        <com.android.app_base.widget.ExtendTitleBar
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            app:title="鍘嗗勾浣撴淇℃伅"
+            app:titleGravity="left"
+            app:leftIcon="@drawable/ic_back"
+            >
+            <FrameLayout
+                android:layout_width="24dp"
+                android:layout_height="24dp"
+                android:layout_marginHorizontal="16dp"
+                android:layout_gravity="center_vertical|end"
+                >
+
+                <ImageView
+                    android:id="@+id/iv_operate"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="center"
+                    android:background="@{viewModel.typeLiveData?@drawable/ic_operate_finish:@drawable/ic_operate}" />
+            </FrameLayout>
+        </com.android.app_base.widget.ExtendTitleBar>
+        <ScrollView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            >
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="vertical"
+                android:paddingHorizontal="20dp"
+                android:paddingBottom="20dp"
+                >
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_marginTop="10dp"
+                    android:layout_height="wrap_content"
+                    android:text="骞村害鎶ュ憡(娉ㄦ剰浜嬮」鎻忚堪)"
+                    android:textColor="#767375"
+                    android:textSize="12sp"
+                    />
+                <EditText
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="2dp"
+                    android:inputType="text"
+                    android:textColorHint="#6b000000"
+                    android:hint="@{viewModel.typeLiveData?`璇疯緭鍏ュ勾搴︽姤鍛奰:``}"
+                    android:text="@={viewModel.beanLiveData.report}"
+                    android:textColor="#DE000000"
+                    android:textSize="16sp"
+                    android:enabled="@{viewModel.typeLiveData}"
+                    />
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_marginTop="10dp"
+                    android:layout_height="wrap_content"
+                    android:text="浣撴鏃堕棿"
+                    android:textColor="#767375"
+                    android:textSize="12sp"
+                    />
+
+                <EditText
+                    android:id="@+id/et_time"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="2dp"
+                    android:inputType="text"
+                    android:textColorHint="#6b000000"
+                    android:hint="@{viewModel.typeLiveData?`璇烽�夋嫨鏃堕棿`:``}"
+                    android:textColor="#DE000000"
+                    android:text="@={viewModel.beanLiveData.happenTime}"
+                    android:textSize="16sp"
+                    app:isEditable="@{false}"
+                    android:enabled="@{viewModel.typeLiveData}"
+
+                    />
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_marginTop="10dp"
+                    android:layout_height="wrap_content"
+                    android:text="鐢靛瓙鏂囦欢"
+                    android:textColor="#767375"
+                    android:textSize="12sp"
+                    />
+                <RelativeLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:background="@drawable/shape_6b0000_stroke"
+                    >
+                    <com.android.app_base.widget.WrapRecyclerView
+                        android:id="@+id/rv_image"
+                        android:orientation="vertical"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_marginBottom="10dp"
+                        android:layout_marginTop="2sp"
+                        android:paddingStart="10dp"
+                        android:paddingEnd="5dp"
+                        android:paddingVertical="10dp"
+                        />
+
+                </RelativeLayout>
+
+
+            </LinearLayout>
+        </ScrollView>
+
+
+    </LinearLayout>
+</layout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_growth_experience.xml b/app/src/main/res/layout/activity_growth_experience.xml
index e19293b..0bd2932 100644
--- a/app/src/main/res/layout/activity_growth_experience.xml
+++ b/app/src/main/res/layout/activity_growth_experience.xml
@@ -603,7 +603,7 @@
                                 android:layout_width="0dp"
                                 android:layout_height="wrap_content"
                                 android:layout_weight="1"
-                                android:text="鎸佹湁澧冭瘉浠舵儏鍐�"
+                                android:text="鎸佹湁璇佷欢鎯呭喌"
                                 android:textColor="#ff000000"
                                 android:textSize="20sp"
                                 android:textStyle="bold"
diff --git a/app/src/main/res/layout/activity_health_care.xml b/app/src/main/res/layout/activity_health_care.xml
index 7d5bb4d..b464bed 100644
--- a/app/src/main/res/layout/activity_health_care.xml
+++ b/app/src/main/res/layout/activity_health_care.xml
@@ -24,6 +24,7 @@
             app:layout_constraintTop_toTopOf="parent"
             app:title="鍋ュ悍淇濆仴"
             app:titleGravity="left"
+            app:leftIcon="@drawable/ic_back"
             >
 
             <FrameLayout
diff --git a/app/src/main/res/layout/item_examination_info.xml b/app/src/main/res/layout/item_examination_info.xml
new file mode 100644
index 0000000..8d17ad4
--- /dev/null
+++ b/app/src/main/res/layout/item_examination_info.xml
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools">
+
+    <data>
+        <variable
+            name="bean"
+            type="com.application.zhangshi_app_android.bean.ExaminationInfoBean" />
+    </data>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        >
+        <androidx.cardview.widget.CardView
+            android:id="@+id/cardView"
+            android:layout_width="match_parent"
+            android:layout_height="40dp"
+            android:layout_margin="@dimen/dp_2"
+            app:cardCornerRadius="@dimen/dp_10"
+            app:cardBackgroundColor="@color/color_card_pink"
+            tools:layout_height="wrap_content"
+            >
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="vertical"
+                >
+                <androidx.constraintlayout.widget.ConstraintLayout
+                    android:id="@+id/layout_title"
+                    android:layout_width="match_parent"
+                    android:layout_height="40dp"
+                    android:gravity="center_vertical"
+                    >
+                    <CheckBox
+                        android:id="@+id/checkbox"
+                        android:layout_width="18dp"
+                        android:layout_height="18dp"
+                        android:layout_marginStart="3dp"
+                        android:layout_centerVertical="true"
+                        android:button="@drawable/selector_checkbox"
+                        android:background="?selectableItemBackgroundBorderless"
+                        app:layout_constraintStart_toStartOf="parent"
+                        app:layout_constraintTop_toTopOf="parent"
+                        app:layout_constraintBottom_toBottomOf="parent"
+                        />
+
+                    <TextView
+                        android:layout_width="0dp"
+                        android:layout_height="wrap_content"
+                        android:layout_centerVertical="true"
+                        android:ellipsize="end"
+                        android:maxLines="1"
+                        android:text="@{bean.report}"
+                        android:textColor="@color/black"
+                        android:textSize="16sp"
+                        android:layout_marginStart="24dp"
+                        app:layout_constraintBottom_toBottomOf="parent"
+                        app:layout_constraintStart_toStartOf="parent"
+                        app:layout_constraintTop_toTopOf="parent"
+                        app:layout_constraintWidth_percent="0.5"
+                        tools:text="寮犳皬App绔嬮」" />
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:textSize="16sp"
+                        android:textColor="@color/black"
+                        android:text="@{bean.happenTime}"
+                        android:layout_alignParentEnd="true"
+                        android:layout_centerVertical="true"
+                        tools:text="2023-05-16"
+                        app:layout_constraintBottom_toBottomOf="parent"
+                        app:layout_constraintTop_toTopOf="parent"
+                        app:layout_constraintEnd_toStartOf="@id/iv_fold"
+                        android:layout_marginEnd="10dp"
+                        />
+                    <ImageView
+                        android:id="@+id/iv_fold"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:background="@drawable/ic_fold"
+                        app:layout_constraintTop_toTopOf="parent"
+                        app:layout_constraintBottom_toBottomOf="parent"
+                        app:layout_constraintEnd_toEndOf="parent"
+                        android:layout_marginEnd="10dp"
+                        />
+
+                </androidx.constraintlayout.widget.ConstraintLayout>
+                <LinearLayout
+                    android:id="@+id/layout_content"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:orientation="vertical"
+                    android:paddingHorizontal="@dimen/dp_24"
+                    >
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginBottom="6dp"
+                        android:text="鐢靛瓙鏂囦欢锛�"
+                        android:textColor="@color/black"
+                        android:textSize="12sp"
+
+                        />
+                    <LinearLayout
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:orientation="horizontal"
+                        android:layout_marginBottom="15dp"
+                        >
+                        <androidx.recyclerview.widget.RecyclerView
+                            android:id="@+id/rv_image"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            tools:listitem="@layout/item_electronic_file"
+                            tools:itemCount="3"
+                            />
+
+                    </LinearLayout>
+                    <LinearLayout
+                        tools:visibility="visible"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_gravity="center"
+                        android:layout_marginBottom="12dp"
+                        android:visibility="gone"
+                        >
+                        <LinearLayout
+                            android:id="@+id/layout_modify"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            >
+                            <ImageView
+                                android:layout_width="wrap_content"
+                                android:layout_height="wrap_content"
+                                android:background="@drawable/ic_modify"
+                                android:layout_gravity="center"
+                                />
+                            <TextView
+                                android:layout_width="wrap_content"
+                                android:layout_height="wrap_content"
+                                android:text="淇敼"
+                                android:textColor="@color/black"
+                                android:textSize="@dimen/sp_14"
+
+                                android:layout_marginStart="@dimen/dp_4"
+                                />
+                        </LinearLayout>
+                        <LinearLayout
+                            android:id="@+id/layout_delete"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:layout_marginStart="@dimen/dp_52"
+                            >
+                            <ImageView
+                                android:layout_width="wrap_content"
+                                android:layout_height="wrap_content"
+                                android:background="@drawable/ic_delete"
+                                android:layout_gravity="center"
+                                />
+                            <TextView
+                                android:layout_width="wrap_content"
+                                android:layout_height="wrap_content"
+                                android:text="鍒犻櫎"
+                                android:textColor="#FFE86F72"
+                                android:textSize="@dimen/sp_14"
+
+                                android:layout_marginStart="@dimen/dp_4"
+                                />
+                        </LinearLayout>
+                    </LinearLayout>
+
+                </LinearLayout>
+            </LinearLayout>
+
+        </androidx.cardview.widget.CardView>
+
+    </LinearLayout>
+
+</layout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_family_member.xml b/app/src/main/res/layout/item_family_member.xml
index a625660..80ea031 100644
--- a/app/src/main/res/layout/item_family_member.xml
+++ b/app/src/main/res/layout/item_family_member.xml
@@ -1,9 +1,12 @@
 <?xml version="1.0" encoding="utf-8"?>
 <layout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto">
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools">
 
     <data>
-
+        <variable
+            name="bean"
+            type="com.application.zhangshi_app_android.bean.HomeRootBean" />
     </data>
 
     <androidx.cardview.widget.CardView
@@ -17,7 +20,7 @@
         <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:layout_marginHorizontal="12dp"
+            android:layout_marginHorizontal="10dp"
             android:layout_marginVertical="5dp"
             android:orientation="horizontal"
             android:gravity="center"
@@ -28,9 +31,12 @@
                 android:id="@+id/tv_generation"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:text="1"
+                android:text="@{bean.identity+``}"
                 android:textSize="18sp"
                 android:textColor="#FFEBA4AA"
+                android:gravity="center"
+                android:maxLines="1"
+                tools:text="100"
                 />
 
             <!-- 澶村儚 -->
@@ -42,13 +48,14 @@
                 android:layout_marginEnd="10dp"
                 android:scaleType="fitCenter"
                 app:roundPercent="1"
+                app:imageUrl="@{bean.img}"
                 />
             <!-- 鍚嶅瓧 -->
             <TextView
                 android:id="@+id/tv_name"
                 android:layout_width="70dp"
                 android:layout_height="wrap_content"
-                android:text="鏋椾匠鏋椾匠"
+                android:text="@{bean.nickName}"
                 android:textSize="16sp"
                 android:textStyle="bold"
                 android:textColor="#FFF6739F"
diff --git a/app/src/main/res/layout/item_tourism.xml b/app/src/main/res/layout/item_tourism.xml
index ce08e55..b8bda6c 100644
--- a/app/src/main/res/layout/item_tourism.xml
+++ b/app/src/main/res/layout/item_tourism.xml
@@ -313,6 +313,7 @@
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:layout_gravity="center"
+                        android:gravity="center_vertical"
                         android:layout_marginBottom="@dimen/dp_12"
                         android:layout_marginTop="6dp"
                         >
@@ -364,7 +365,7 @@
                             android:layout_height="wrap_content"
                             android:text="姣忔棩娓歌"
                             android:textColor="@color/black"
-                            android:textSize="14sp"
+                            android:textSize="18sp"
                             android:layout_marginStart="20dp"
                             />
                     </LinearLayout>
diff --git a/app/src/main/res/layout/layout_drawer.xml b/app/src/main/res/layout/layout_drawer.xml
index 80e30d8..0511593 100644
--- a/app/src/main/res/layout/layout_drawer.xml
+++ b/app/src/main/res/layout/layout_drawer.xml
@@ -27,7 +27,6 @@
                 android:layout_width="50dp"
                 android:layout_height="50dp"
                 app:roundPercent="1"
-                android:background="@drawable/img_sakura"
                 />
             <TextView
                 android:id="@+id/dl_home_user_name"
diff --git a/app/src/main/res/layout/pop_annual_health_status.xml b/app/src/main/res/layout/pop_annual_health_status.xml
index 123389f..5df77f0 100644
--- a/app/src/main/res/layout/pop_annual_health_status.xml
+++ b/app/src/main/res/layout/pop_annual_health_status.xml
@@ -9,7 +9,7 @@
     app:cardElevation="0dp"
     >
     <LinearLayout
-        android:layout_width="118dp"
+        android:layout_width="85dp"
         android:layout_height="wrap_content"
         android:orientation="vertical"
         android:gravity="center"
@@ -25,20 +25,8 @@
             app:drawableStartCompat="@drawable/ic_modify"
             android:drawablePadding="5dp"
             />
-        <View
-            android:layout_width="match_parent"
-            android:layout_height="0.3dp"
-            android:background="#FF939393"
-            />
-        <androidx.appcompat.widget.AppCompatTextView
-            android:id="@+id/tv_annual_health_status"
-            android:layout_width="wrap_content"
-            android:layout_height="30dp"
-            android:gravity="center"
-            android:text="浣撴鎴栫湅鐥�"
-            android:textColor="#FF333333"
-            android:textSize="12sp"
-            />
+
+
     </LinearLayout>
 
 </androidx.cardview.widget.CardView>
\ No newline at end of file
diff --git a/app/src/main/res/layout/pop_basic_information_double.xml b/app/src/main/res/layout/pop_basic_information_double.xml
index 4f61c73..02c9734 100644
--- a/app/src/main/res/layout/pop_basic_information_double.xml
+++ b/app/src/main/res/layout/pop_basic_information_double.xml
@@ -5,6 +5,9 @@
 
     <data>
         <variable
+            name="isFamily"
+            type="boolean" />
+        <variable
             name="spouseBean"
             type="com.application.zhangshi_app_android.bean.HomeRootBean" />
         <variable
@@ -190,7 +193,7 @@
                                     android:layout_width="wrap_content"
                                     android:layout_height="wrap_content"
                                     android:paddingHorizontal="6dp"
-                                    android:text="@{`绗琡+ selfBean.identity + `浠}"
+                                    android:text="@{`绗琡+ selfBean.identity + `浠 + (isFamily?``:`閰嶅伓`)}"
                                     android:textColor="#FF000000"
                                     android:textSize="12sp"
                                     android:layout_gravity="center_vertical"
@@ -945,7 +948,7 @@
                                     android:paddingHorizontal="6dp"
                                     android:layout_gravity="center_vertical"
                                     app:textOverflowMode="@{4}"
-                                    android:text="@{`绗琡 + spouseBean.identity + `浠}"
+                                    android:text="@{`绗琡 + spouseBean.identity + `浠+ (isFamily?`閰嶅伓`:``)}"
                                     android:textColor="#FF000000"
                                     android:textSize="12sp"
                                     />
diff --git a/app/src/main/res/layout/pop_operate_exam_info.xml b/app/src/main/res/layout/pop_operate_exam_info.xml
new file mode 100644
index 0000000..04d4b69
--- /dev/null
+++ b/app/src/main/res/layout/pop_operate_exam_info.xml
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:orientation="vertical"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    app:cardBackgroundColor="#FFFAD1E0"
+    app:cardCornerRadius="10dp"
+    app:cardElevation="0dp"
+    >
+    <LinearLayout
+        android:layout_width="118dp"
+        android:layout_height="wrap_content"
+        android:orientation="vertical"
+        android:gravity="center_horizontal"
+        >
+        <LinearLayout
+            android:id="@+id/layout_add"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical"
+            android:gravity="center_horizontal"
+            >
+            <TextView
+                android:id="@+id/tv_add"
+                android:layout_width="wrap_content"
+                android:layout_height="32dp"
+                android:gravity="center"
+                android:text="鏂板缓"
+                android:textColor="#FF333333"
+                android:textSize="12sp"
+                app:drawableStartCompat="@drawable/ic_operate_add"
+                android:drawablePadding="5dp"
+                />
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="0.3dp"
+                android:background="#FF939393"
+                />
+        </LinearLayout>
+        <LinearLayout
+            android:id="@+id/layout_select"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical"
+            android:gravity="center_horizontal"
+            >
+            <TextView
+                android:id="@+id/tv_select"
+                android:layout_width="wrap_content"
+                android:layout_height="32dp"
+                android:text="閫夋嫨"
+                android:gravity="center"
+                android:textColor="#FF333333"
+                android:textSize="12sp"
+                app:drawableStartCompat="@drawable/ic_operate_select"
+                android:drawablePadding="5dp"
+                />
+            <View
+                android:id="@+id/view_select_underline"
+                android:layout_width="match_parent"
+                android:layout_height="0.3dp"
+                android:background="#FF939393"
+                />
+        </LinearLayout>
+
+        <TextView
+            android:id="@+id/tv_from_new_to_old"
+            android:layout_width="wrap_content"
+            android:layout_height="32dp"
+            android:text="鐢辨柊鍒版棫"
+            android:gravity="center"
+            android:textColor="#FF333333"
+            android:textSize="12sp"
+            app:drawableStartCompat="@drawable/ic_operate_order"
+            android:drawablePadding="3dp"
+            />
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="0.3dp"
+            android:background="#FF939393"
+            />
+        <TextView
+            android:id="@+id/tv_from_old_to_new"
+            android:layout_width="wrap_content"
+            android:layout_height="32dp"
+            android:text="鐢辨棫鍒版柊"
+            android:gravity="center"
+            android:textColor="#FF333333"
+            android:textSize="12sp"
+            app:drawableStartCompat="@drawable/ic_operate_order"
+            android:drawablePadding="3dp"
+            />
+        <LinearLayout
+            android:id="@+id/layout_exam_info"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical"
+            android:gravity="center_horizontal"
+            >
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="0.3dp"
+                android:background="#FF939393"
+                />
+            <TextView
+                android:id="@+id/tv_exam_info"
+                android:layout_width="wrap_content"
+                android:layout_height="32dp"
+                android:text="鍘嗗勾浣撴淇℃伅"
+                android:gravity="center"
+                android:textColor="#FF333333"
+                android:textSize="12sp"
+                android:drawablePadding="3dp"
+                />
+        </LinearLayout>
+        <LinearLayout
+            android:id="@+id/layout_health_care"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical"
+            android:gravity="center_horizontal"
+            >
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="0.3dp"
+                android:background="#FF939393"
+                />
+            <TextView
+                android:id="@+id/tv_health_care"
+                android:layout_width="wrap_content"
+                android:layout_height="32dp"
+                android:text="鍋ュ悍鐘跺喌淇℃伅"
+                android:gravity="center"
+                android:textColor="#FF333333"
+                android:textSize="12sp"
+                android:drawablePadding="3dp"
+                />
+        </LinearLayout>
+
+    </LinearLayout>
+
+</androidx.cardview.widget.CardView>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 114485d..0783d36 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,5 +1,5 @@
 <resources>
-    <string name="app_name">寮犳皬APP</string>
+    <string name="app_name">鏈兘閮藉缃�</string>
 
     <string name="title_home">棣栭〉</string>
     <string name="title_function">鍔熻兘</string>
diff --git a/app_base/src/main/java/com/android/app_base/action/TitleBarAction.java b/app_base/src/main/java/com/android/app_base/action/TitleBarAction.java
index 54d0371..ff77006 100644
--- a/app_base/src/main/java/com/android/app_base/action/TitleBarAction.java
+++ b/app_base/src/main/java/com/android/app_base/action/TitleBarAction.java
@@ -24,16 +24,16 @@
     /**
      * 璁剧疆鏍囬鏍忕殑鏍囬
      */
-    default void setTitle(@StringRes int id) {
+    default void setCenterTitle(@StringRes int id) {
         if (getTitleBar() != null) {
-            setTitle(getTitleBar().getResources().getString(id));
+            setCenterTitle(getTitleBar().getResources().getString(id));
         }
     }
 
     /**
      * 璁剧疆鏍囬鏍忕殑鏍囬
      */
-    default void setTitle(CharSequence title) {
+    default void setCenterTitle(CharSequence title) {
         if (getTitleBar() != null) {
             getTitleBar().setTitle(title);
         }
diff --git a/app_base/src/main/java/com/android/app_base/base/BaseConfig.java b/app_base/src/main/java/com/android/app_base/base/BaseConfig.java
index 288a12a..86c1df2 100644
--- a/app_base/src/main/java/com/android/app_base/base/BaseConfig.java
+++ b/app_base/src/main/java/com/android/app_base/base/BaseConfig.java
@@ -6,7 +6,9 @@
  * @desc
  */
 public class BaseConfig {
-    public final static String BASE_URL = "http://47.93.189.255:8080";
+    public final static String BASE_URL = "http://47.93.189.255:8080";// ip鍦板潃
+    public final static String BASE_URL_DOMAIN = "https://www.bendudu.com:8080";//鍩熷悕缃戝潃
+
     public final static int CODE_SUCCESS = 200;
 
     public static final int TOKEN_INVALID = 401;//token瓒呮椂鎴栧け鏁�
diff --git a/app_base/src/main/java/com/android/app_base/base/adapter/BaseVp2FragmentAdapter.java b/app_base/src/main/java/com/android/app_base/base/adapter/BaseVp2FragmentAdapter.java
index 4fcc559..99ac083 100644
--- a/app_base/src/main/java/com/android/app_base/base/adapter/BaseVp2FragmentAdapter.java
+++ b/app_base/src/main/java/com/android/app_base/base/adapter/BaseVp2FragmentAdapter.java
@@ -171,6 +171,21 @@
     }
 
     /**
+     * 鑾峰彇鏌愪釜 Fragment 鐨勭储寮曪紙娌℃湁灏辫繑鍥� -1锛�
+     */
+    public int getFragmentIndex(String clazz) {
+        if (clazz == null) {
+            return -1;
+        }
+        for (int i = 0; i < mFragmentList.size(); i++) {
+            if (clazz.equals(mFragmentList.get(i).getClass().getName())) {
+                return i;
+            }
+        }
+        return -1;
+    }
+
+    /**
      * 鏍规嵁 绱㈠紩 鑾峰彇鏌愪釜 Fragment
      */
     public F getFragment(int index) {
diff --git a/app_base/src/main/java/com/android/app_base/base/adapter/databinding/ImageViewAdapter.java b/app_base/src/main/java/com/android/app_base/base/adapter/databinding/ImageViewAdapter.java
index f17fa1a..e204222 100644
--- a/app_base/src/main/java/com/android/app_base/base/adapter/databinding/ImageViewAdapter.java
+++ b/app_base/src/main/java/com/android/app_base/base/adapter/databinding/ImageViewAdapter.java
@@ -28,11 +28,10 @@
         if (TextUtils.isEmpty(url)) {
             return;
         }
-
-        if (url.contains("profile/upload")) {
-            if (!url.contains("http")) {
-                url = BaseConfig.BASE_URL + "/" + url;
-            }
+        if (url.contains("profile/upload")) {//濡傛灉鏄笂浼犲埌鏈嶅姟鍣ㄧ殑鍥剧墖
+            //鍙彇profile/upload浠ュ悗鐨勯儴鍒�
+            url = url.substring(url.indexOf("profile/upload"));
+            url = BaseConfig.BASE_URL_DOMAIN + "/" + url;
         }
         GlideUtil.loadImage(url, imageView);
     }
diff --git a/app_base/src/main/java/com/android/app_base/base/adapter/databinding/TextViewAdapter.java b/app_base/src/main/java/com/android/app_base/base/adapter/databinding/TextViewAdapter.java
index bd6ace8..753d324 100644
--- a/app_base/src/main/java/com/android/app_base/base/adapter/databinding/TextViewAdapter.java
+++ b/app_base/src/main/java/com/android/app_base/base/adapter/databinding/TextViewAdapter.java
@@ -9,6 +9,7 @@
 import androidx.databinding.InverseBindingAdapter;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.Locale;
 
 /**
@@ -68,7 +69,9 @@
 //        if (!TextUtils.equals(view.getText().toString(), formattedValue)) {
 //            view.setText(formattedValue);
 //        }
-        view.setText(BigDecimal.valueOf(value).stripTrailingZeros().toPlainString());
+
+        //鍘绘帀灏忔暟鐐瑰悗闈㈢殑0,淇濈暀涓や綅灏忔暟
+        view.setText(BigDecimal.valueOf(value).setScale(2, RoundingMode.HALF_UP).stripTrailingZeros().toPlainString());
     }
 
     @InverseBindingAdapter(attribute = "android:text")
diff --git a/app_base/src/main/java/com/android/app_base/base/view/BaseActivity.java b/app_base/src/main/java/com/android/app_base/base/view/BaseActivity.java
index 8a06b68..bc15915 100644
--- a/app_base/src/main/java/com/android/app_base/base/view/BaseActivity.java
+++ b/app_base/src/main/java/com/android/app_base/base/view/BaseActivity.java
@@ -187,6 +187,7 @@
      * 鏈夐渶姹傜殑锛屽湪瀛愮被閫夋嫨閲嶅啓
      */
     protected void dialogLoading() {
+
     }
     protected void dialogDismiss() {
     }
diff --git a/app_base/src/main/java/com/android/app_base/base/viewmodel/BaseViewModel.java b/app_base/src/main/java/com/android/app_base/base/viewmodel/BaseViewModel.java
index 9fca0e9..0acb457 100644
--- a/app_base/src/main/java/com/android/app_base/base/viewmodel/BaseViewModel.java
+++ b/app_base/src/main/java/com/android/app_base/base/viewmodel/BaseViewModel.java
@@ -77,7 +77,7 @@
      * 鏇存敼鐘舵�佽鍥剧殑鐘舵��
      */
     public void changeStateView(StateViewEnum state) {
-        stateViewLiveData.setValue(state);
+        stateViewLiveData.postValue(state);
     }
 
     @Override
diff --git a/app_base/src/main/java/com/android/app_base/http/OkHttpHelper.java b/app_base/src/main/java/com/android/app_base/http/OkHttpHelper.java
index 92f62d1..468a0ca 100644
--- a/app_base/src/main/java/com/android/app_base/http/OkHttpHelper.java
+++ b/app_base/src/main/java/com/android/app_base/http/OkHttpHelper.java
@@ -10,6 +10,7 @@
 import com.android.app_base.http.interceptor.CacheInterceptor;
 import com.android.app_base.http.interceptor.LogInterceptor;
 import com.blankj.utilcode.util.LogUtils;
+import com.blankj.utilcode.util.NetworkUtils;
 import com.franmontiel.persistentcookiejar.PersistentCookieJar;
 import com.franmontiel.persistentcookiejar.cache.SetCookieCache;
 import com.franmontiel.persistentcookiejar.persistence.SharedPrefsCookiePersistor;
@@ -73,6 +74,16 @@
         });
         clientBuilder.addInterceptor(new LogInterceptor());//鎷︽埅鍣ㄦ坊鍔犲叕鍏卞弬鏁�
         clientBuilder.addInterceptor(new AuthInterceptor());//鎷︽埅鍣╰oken澶辨晥澶勭悊
+        clientBuilder.addInterceptor(new Interceptor() {
+            @NonNull
+            @Override
+            public Response intercept(@NonNull Chain chain) throws IOException {
+                if (!NetworkUtils.isAvailable()) {
+                    throw new IOException("褰撳墠缃戠粶涓嶅彲鐢紝璇锋鏌ョ綉缁滆缃�");
+                }
+                return chain.proceed(chain.request());
+            }
+        });
         //log鏃ュ織鎷︽埅
         if (BuildConfig.DEBUG) {
             clientBuilder.addInterceptor(new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
diff --git a/app_base/src/main/java/com/android/app_base/http/interceptor/AuthInterceptor.java b/app_base/src/main/java/com/android/app_base/http/interceptor/AuthInterceptor.java
index 3284722..1593003 100644
--- a/app_base/src/main/java/com/android/app_base/http/interceptor/AuthInterceptor.java
+++ b/app_base/src/main/java/com/android/app_base/http/interceptor/AuthInterceptor.java
@@ -25,7 +25,7 @@
 /**
  * @author Ljj
  * @date 2023.04.07. 19:53
- * @desc
+ * @desc 閴存潈鎷︽埅鍣�
  */
 public class AuthInterceptor implements Interceptor {
 
diff --git a/app_base/src/main/java/com/android/app_base/widget/ExtendTitleBar.java b/app_base/src/main/java/com/android/app_base/widget/ExtendTitleBar.java
index b1dd717..7c044c9 100644
--- a/app_base/src/main/java/com/android/app_base/widget/ExtendTitleBar.java
+++ b/app_base/src/main/java/com/android/app_base/widget/ExtendTitleBar.java
@@ -34,7 +34,6 @@
     @Override
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-//        System.out.println("onMeasure");
         reSetTitleGravity(titleGravity);
     }
 

--
Gitblit v1.9.1