Browse Source

接入早筛

hurixing 3 months ago
parent
commit
9013423e6d
29 changed files with 838 additions and 13 deletions
  1. 2 2
      baselib/build.gradle
  2. 65 0
      baselib/src/main/java/com/yingyangfly/baselib/adapter/KeyValueSpinnerAdapter.java
  3. 12 0
      baselib/src/main/java/com/yingyangfly/baselib/bean/Hospital.kt
  4. 13 1
      baselib/src/main/java/com/yingyangfly/baselib/dialog/BindingPhoneDialog.kt
  5. 170 0
      baselib/src/main/java/com/yingyangfly/baselib/dialog/EarlyScreeningDialog.kt
  6. 5 0
      baselib/src/main/java/com/yingyangfly/baselib/router/RouterUrlCommon.kt
  7. 6 0
      baselib/src/main/java/com/yingyangfly/baselib/utils/RxBusCodes.kt
  8. 82 0
      baselib/src/main/java/com/yingyangfly/baselib/widget/BottomAlignedSpinner.java
  9. 9 0
      baselib/src/main/res/drawable/bg_go_mai_notarize.xml
  10. 24 0
      baselib/src/main/res/drawable/bg_go_mai_phone_hospital.xml
  11. 9 0
      baselib/src/main/res/drawable/bg_go_mai_user_name.xml
  12. 9 0
      baselib/src/main/res/drawable/bg_tv_cancel_btn.xml
  13. BIN
      baselib/src/main/res/drawable/ic_arrow_drop_down.png
  14. 135 0
      baselib/src/main/res/layout/dialog_early_screening.xml
  15. 12 0
      baselib/src/main/res/layout/spinner_item.xml
  16. 6 0
      baselib/src/main/res/values/colors.xml
  17. 1 0
      baselib/src/main/res/values/dimens.xml
  18. 1 1
      config.gradle
  19. 6 0
      evaluation/src/main/AndroidManifest.xml
  20. 13 8
      evaluation/src/main/java/com/yingyangfly/evaluation/hospital/HospitalActivity.kt
  21. 11 0
      evaluation/src/main/java/com/yingyangfly/evaluation/hospital/HospitalViewModel.kt
  22. 4 0
      evaluation/src/main/java/com/yingyangfly/evaluation/net/EvaluationApiService.kt
  23. 27 0
      evaluation/src/main/java/com/yingyangfly/evaluation/webview/AndroidToJs.kt
  24. 165 0
      evaluation/src/main/java/com/yingyangfly/evaluation/webview/BridgeWebActivity.kt
  25. 7 0
      evaluation/src/main/manifest/AndroidManifest.xml
  26. 30 0
      evaluation/src/main/res/layout/activity_bridge_web.xml
  27. 13 0
      evaluation/src/main/res/layout/dialog_splash_cover.xml
  28. BIN
      evaluation/src/main/res/mipmap-xxhdpi/dialog_bg.png
  29. 1 1
      evaluation/src/main/res/values/strings.xml

+ 2 - 2
baselib/build.gradle

@@ -38,8 +38,8 @@ android {
 
             buildConfigField "Boolean", "SINGLE_MODULE", "${singleModule}"
             buildConfigField "String", "BUGLY_APPID", "\"4463350aea\""
-//            buildConfigField "String", "API_URL", "\"http://192.168.0.118:8112\""
-            buildConfigField "String", "API_URL", "\"http://yaorongtest.yaorongmedical.com/hcp-large-api\""
+            buildConfigField "String", "API_URL", "\"http://192.168.0.118:8112\""
+//            buildConfigField "String", "API_URL", "\"http://yaorongtest.yaorongmedical.com/hcp-large-api\""
 //            buildConfigField "String", "API_URL", "\"https://yaorong.yaorongmedical.com/hcp-large-api\""
             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
         }

+ 65 - 0
baselib/src/main/java/com/yingyangfly/baselib/adapter/KeyValueSpinnerAdapter.java

@@ -0,0 +1,65 @@
+package com.yingyangfly.baselib.adapter;
+
+import android.content.Context;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.TextView;
+
+import androidx.core.content.ContextCompat;
+
+import com.yingyangfly.baselib.R;
+import com.yingyangfly.baselib.bean.Hospital;
+
+import java.util.List;
+
+public class KeyValueSpinnerAdapter extends ArrayAdapter<Hospital> {
+
+    private Context context;
+    private List<Hospital> items;
+
+    public KeyValueSpinnerAdapter(Context context, List<Hospital> items) {
+        super(context, android.R.layout.simple_spinner_item, items);
+        this.context = context;
+        this.items = items;
+        setDropDownViewResource(R.layout.spinner_item);
+    }
+
+    @Override
+    public View getView(int position, View convertView, ViewGroup parent) {
+        TextView label = (TextView) super.getView(position, convertView, parent);
+        Hospital hospital = items.get(position);
+        label.setText(hospital.getOrgName());
+
+        // 设置提示项样式
+        if (hospital.getId().equals("-1")) {
+            label.setTextColor(ContextCompat.getColor(context, R.color.color_999999)); // 灰色
+        } else {
+            label.setTextColor(ContextCompat.getColor(context, R.color.color_333333)); // 正常黑色
+        }
+
+        return label;
+    }
+
+    @Override
+    public View getDropDownView(int position, View convertView, ViewGroup parent) {
+        TextView label = (TextView) super.getDropDownView(position, convertView, parent);
+        Hospital hospital = items.get(position);
+        label.setText(hospital.getOrgName());
+
+        // 设置下拉列表项样式
+        if (hospital.getId().equals("-1")) {
+            label.setTextColor(ContextCompat.getColor(context, R.color.color_999999)); // 灰色
+        } else {
+            label.setTextColor(ContextCompat.getColor(context, R.color.color_333333)); // 正常黑色
+        }
+
+        return label;
+    }
+
+    @Override
+    public boolean isEnabled(int position) {
+        // 提示项不可选择
+        return !items.get(position).getId().equals("-1");
+    }
+}

+ 12 - 0
baselib/src/main/java/com/yingyangfly/baselib/bean/Hospital.kt

@@ -0,0 +1,12 @@
+package com.yingyangfly.baselib.bean
+
+// 数据类定义
+data class Hospital(
+    val id: String,
+    val orgName: String
+
+)
+
+data class HospitalBean(
+    var hospitalList: List<Hospital>,var url:String
+)

+ 13 - 1
baselib/src/main/java/com/yingyangfly/baselib/dialog/BindingPhoneDialog.kt

@@ -11,6 +11,7 @@ import android.text.style.ForegroundColorSpan
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
+import androidx.appcompat.app.AppCompatActivity
 import androidx.appcompat.widget.AppCompatButton
 import androidx.appcompat.widget.AppCompatEditText
 import androidx.appcompat.widget.AppCompatImageView
@@ -27,6 +28,7 @@ import com.yingyangfly.baselib.utils.RxTimer
 import com.yingyangfly.baselib.utils.User
 import com.yingyangfly.baselib.utils.ViewTool
 import io.reactivex.schedulers.Schedulers
+import java.util.UUID
 
 /**
  * 大屏测评绑定手机号弹窗
@@ -91,7 +93,17 @@ class BindingPhoneDialog : DialogFragment() {
             Build.SERIAL
         }
         if (("unknown").equals(snCode)){
-            snCode = Settings.Secure.getString(User.context.getContentResolver(), Settings.Secure.ANDROID_ID);
+//                snCode = "三"+Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
+            val prefs = User.context.getSharedPreferences("app_prefs",
+                AppCompatActivity.MODE_PRIVATE
+            )
+            val uuid = prefs.getString("device_uuid", null)
+            if (uuid == null) {
+                snCode = UUID.randomUUID().toString();
+                prefs.edit().putString("device_uuid", snCode).apply();
+            }else {
+                snCode = uuid
+            }
         }
     }
 

+ 170 - 0
baselib/src/main/java/com/yingyangfly/baselib/dialog/EarlyScreeningDialog.kt

@@ -0,0 +1,170 @@
+package com.yingyangfly.baselib.dialog
+
+import android.content.Context
+import android.os.Bundle
+import android.text.TextUtils
+import android.util.Base64
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.AdapterView
+import android.widget.TextView
+import androidx.appcompat.widget.AppCompatButton
+import androidx.appcompat.widget.AppCompatEditText
+import androidx.core.content.ContextCompat
+import androidx.fragment.app.DialogFragment
+import com.gyf.immersionbar.BarHide
+import com.gyf.immersionbar.ktx.immersionBar
+import com.yingyangfly.baselib.R
+import com.yingyangfly.baselib.adapter.KeyValueSpinnerAdapter
+import com.yingyangfly.baselib.bean.Hospital
+import com.yingyangfly.baselib.ext.click
+import com.yingyangfly.baselib.ext.toast
+import com.yingyangfly.baselib.router.RouterUrlCommon
+import com.yingyangfly.baselib.utils.JumpUtil
+import com.yingyangfly.baselib.utils.ViewTool
+import com.yingyangfly.baselib.widget.BottomAlignedSpinner
+import java.io.UnsupportedEncodingException
+import java.net.URLEncoder
+import java.util.regex.Pattern
+
+
+class EarlyScreeningDialog: DialogFragment() {
+
+    private var tvCancel: AppCompatButton? = null
+    private var tvNotarize: AppCompatButton? = null
+    private var goMaiUsername: AppCompatEditText? = null
+    private var mContent: Context? = null
+    private var url = ""
+    private var hospitalList: List<Hospital>? = null
+    private var selectHospital: Hospital? = null
+
+    fun setUrl(url: String, hospitalList: List<Hospital>) {
+        this.url = url
+        this.hospitalList = hospitalList
+    }
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        isCancelable = false
+        dialog?.setCanceledOnTouchOutside(true)
+    }
+
+    override fun onStart() {
+        super.onStart()
+        dialog?.window?.setLayout(
+            ViewGroup.LayoutParams.MATCH_PARENT,
+            ViewGroup.LayoutParams.MATCH_PARENT
+        )
+        dialog?.window?.setBackgroundDrawableResource(R.color.transparent)
+    }
+
+    override fun onCreateView(
+        inflater: LayoutInflater,
+        container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        immersionBar {
+            hideBar(BarHide.FLAG_HIDE_BAR)
+            navigationBarColor(R.color.transparent)
+        }
+        val rootView = ViewTool.inflateFragmentPixels(
+            activity, R.layout.dialog_early_screening, container, 1194, 834
+        )
+        mContent = activity
+        findId(rootView)
+        initListener()
+        HospitalAdapter(rootView)
+        return rootView
+    }
+
+    private fun findId(rootView: View) {
+        tvCancel = rootView.findViewById(R.id.tvCancel)
+        tvNotarize = rootView.findViewById(R.id.tvNotarize)
+        goMaiUsername = rootView.findViewById(R.id.goMaiUsername)
+    }
+
+    private fun HospitalAdapter(rootView: View) {
+        // 初始化Spinner
+        val spinner = rootView.findViewById<BottomAlignedSpinner>(R.id.spinner)
+
+        // 创建带提示项的列表
+        val listWithHint = mutableListOf<Hospital>().apply {
+            // 添加提示项(特殊ID标识)
+            add(Hospital(
+                id = "-1",
+                orgName = "请选择医院"
+            ))
+            // 添加实际医院数据
+            hospitalList?.let { addAll(it) }
+        }
+
+        val adapter = KeyValueSpinnerAdapter(requireContext(), listWithHint)
+        spinner.adapter = adapter
+
+        // 设置默认选中提示项
+        spinner.setSelection(0, false)
+
+        spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
+            override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
+                val selectedItem: Hospital = parent!!.getItemAtPosition(position) as Hospital
+
+                // 处理提示项选择
+                if (selectedItem.id == "-1") {
+                    selectHospital = null
+                } else {
+                    selectHospital = selectedItem
+                }
+            }
+
+            override fun onNothingSelected(parent: AdapterView<*>?) {}
+        }
+    }
+
+
+
+    private fun initListener() {
+        tvNotarize?.click {
+            if (mContent != null) {
+                if (goMaiUsername?.text.toString().trim().isEmpty()) {
+                    "请输入手机号".toast()
+                } else {
+                    if (Pattern.matches("^\\d{11}$", goMaiUsername?.text.toString().trim()).not()) {
+                        "请输入正确的手机号".toast()
+                    }else {
+                        if (selectHospital == null || selectHospital?.id == "-1") {
+                            "请选择医院".toast()
+                        }else {
+                            var mobile = goMaiUsername?.text.toString().trim()
+                            val base64Encoded = if (mobile.isNotEmpty()) {
+                                // 使用 Android 内置的 Base64 类进行编码
+                                Base64.encodeToString(mobile.toByteArray(Charsets.UTF_8), Base64.NO_WRAP)
+                            } else {
+                                "" // 处理空字符串情况
+                            }
+                            val id: String = (selectHospital as Hospital).id
+                            val orgName: String = (selectHospital as Hospital).orgName
+                            val rawString = "view=android&phone=${base64Encoded}"+"&hospitalId="+id+"&hospitalName="+orgName
+                            val encodedString = try {
+                                URLEncoder.encode(rawString, "UTF-8")
+                            } catch (e: UnsupportedEncodingException) {
+                                e.printStackTrace()
+                                ""
+                            }
+                            if (TextUtils.isEmpty(url).not()) {
+                                var usl1 = url+"?"+ encodedString
+                                JumpUtil.jumpActivityWithUrl(
+                                    RouterUrlCommon.WEB_VIEW_INTERACTION_JS, usl1, requireContext()
+                                )
+                            }
+                            dismiss()
+                        }
+                    }
+                }
+            }
+        }
+        tvCancel?.click {
+            dismiss()
+        }
+    }
+}

+ 5 - 0
baselib/src/main/java/com/yingyangfly/baselib/router/RouterUrlCommon.kt

@@ -5,6 +5,11 @@ package com.yingyangfly.baselib.router
  */
 object RouterUrlCommon {
 
+    /**
+     * Home组件WebView路径, 该WebView适合JS交互的H5页面,
+     */
+    const val WEB_VIEW_INTERACTION_JS = "/web/webViewInteractionJs"
+
     /**
      * 专业测评
      */

+ 6 - 0
baselib/src/main/java/com/yingyangfly/baselib/utils/RxBusCodes.kt

@@ -2,6 +2,12 @@ package com.yingyangfly.baselib.utils
 
 object RxBusCodes {
 
+    //关闭webview页面
+    const val FINISHWEBVIEW = "finishWebview"
+
+    //播放语音
+    const val PLAYVOICE = "playVoice"
+
     //结束答题
     const val EndMMSEQuestion = 9003
 

+ 82 - 0
baselib/src/main/java/com/yingyangfly/baselib/widget/BottomAlignedSpinner.java

@@ -0,0 +1,82 @@
+package com.yingyangfly.baselib.widget;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.View;
+import android.widget.SpinnerAdapter;
+
+import androidx.appcompat.widget.AppCompatSpinner;
+
+public class BottomAlignedSpinner extends AppCompatSpinner {
+
+    private int dropdownHeight = LayoutParams.WRAP_CONTENT;
+
+    public BottomAlignedSpinner(Context context) {
+        super(context);
+    }
+
+    public BottomAlignedSpinner(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public BottomAlignedSpinner(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+    }
+
+    @Override
+    public boolean onTouchEvent(MotionEvent event) {
+        if (event.getAction() == MotionEvent.ACTION_UP) {
+            // 强制下拉菜单向下对齐
+            performClick();
+            return true;
+        }
+        return super.onTouchEvent(event);
+    }
+
+    // 设置下拉菜单高度
+    public void setDropdownHeight(int height) {
+        this.dropdownHeight = height;
+    }
+
+    // 获取下拉菜单高度
+    public int getDropdownHeight() {
+        return dropdownHeight;
+    }
+
+    @Override
+    public void setAdapter(SpinnerAdapter adapter) {
+        super.setAdapter(adapter);
+
+        // 当设置新适配器时自动计算合适的高度
+        post(() -> {
+            if (adapter != null && adapter.getCount() > 0) {
+                calculateOptimalDropdownHeight();
+            }
+        });
+    }
+
+    // 计算最佳下拉高度
+    private void calculateOptimalDropdownHeight() {
+        SpinnerAdapter adapter = getAdapter();
+        if (adapter == null || adapter.getCount() == 0) return;
+
+        // 计算单个项目的高度
+        View itemView = adapter.getView(0, null, this);
+        itemView.measure(
+                MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
+                MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)
+        );
+
+        int itemHeight = itemView.getMeasuredHeight();
+
+        // 计算最大高度(最多显示5个项)
+        int maxHeight = itemHeight * Math.min(adapter.getCount(), 5);
+
+        // 添加10dp的垂直内边距
+        int verticalPadding = (int) (10 * getResources().getDisplayMetrics().density);
+
+        // 设置下拉高度
+        dropdownHeight = maxHeight + verticalPadding;
+    }
+}

+ 9 - 0
baselib/src/main/res/drawable/bg_go_mai_notarize.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <stroke
+        android:width="@dimen/divider_1px"
+        android:color="@color/color_f8cc1a" />
+    <corners android:radius="@dimen/divider_40px" />
+    <solid android:color="@color/color_f8cc1a" />
+</shape>

+ 24 - 0
baselib/src/main/res/drawable/bg_go_mai_phone_hospital.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <!-- 背景形状 -->
+    <item>
+        <shape android:shape="rectangle">
+            <corners android:radius="8dp" />  <!-- 圆角半径 -->
+            <solid android:color="@color/color_eff3f5" />  <!-- 背景色 -->
+            <stroke
+                android:width="1dp"
+                android:color="@color/color_eff3f5" />  <!-- 边框颜色 -->
+        </shape>
+    </item>
+
+    <!-- 右侧下拉箭头图标 -->
+    <item
+        android:gravity="end|center_vertical"
+        android:right="15dp"
+        android:height="18dp"
+        android:width="25dp">
+        <bitmap
+            android:src="@drawable/ic_arrow_drop_down"
+            android:tint="#888888" />  <!-- 图标颜色 -->
+    </item>
+</layer-list>

+ 9 - 0
baselib/src/main/res/drawable/bg_go_mai_user_name.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <stroke
+        android:width="@dimen/divider_1px"
+        android:color="@color/color_eff3f5" />
+    <corners android:radius="@dimen/divider_10px" />
+    <solid android:color="@color/color_eff3f5" />
+</shape>

+ 9 - 0
baselib/src/main/res/drawable/bg_tv_cancel_btn.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <stroke
+        android:width="@dimen/divider_1px"
+        android:color="@color/color_1aa7f8" />
+    <corners android:radius="@dimen/divider_40px" />
+    <solid android:color="@color/color_1aa7f8" />
+</shape>

BIN
baselib/src/main/res/drawable/ic_arrow_drop_down.png


+ 135 - 0
baselib/src/main/res/layout/dialog_early_screening.xml

@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="500dp">
+
+    <com.google.android.material.card.MaterialCardView
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_gravity="center"
+        android:layout_marginStart="@dimen/divider_280px"
+        android:layout_marginTop="@dimen/divider_200px"
+        android:layout_marginEnd="@dimen/divider_280px"
+        android:layout_marginBottom="@dimen/divider_200px"
+        android:theme="@style/Theme.MaterialComponents.NoActionBar"
+        app:cardBackgroundColor="@android:color/white"
+        app:cardCornerRadius="@dimen/divider_50px"
+        app:cardElevation="@dimen/divider_8px"
+        app:strokeWidth="@dimen/divider_20px">
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            >
+
+            <TextView
+                android:id="@+id/headTitle"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="@dimen/divider_40px"
+                android:textColor="@color/color_1B6FEC"
+                android:textSize="@dimen/divider_38px"
+                android:textStyle="bold"
+                android:text="请输入手机号"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent"
+                />
+<!--            <TextView-->
+<!--                android:id="@+id/tsContent"-->
+<!--                android:layout_width="match_parent"-->
+<!--                android:layout_height="@dimen/divider_40px"-->
+<!--                android:layout_marginStart="@dimen/divider_50px"-->
+<!--                android:layout_marginTop="@dimen/divider_40px"-->
+<!--                android:layout_marginEnd="@dimen/divider_50px"-->
+<!--                android:gravity="center"-->
+<!--                android:text="您还未购买套餐或套餐已到期,请及时购买套餐~"-->
+<!--                android:textSize="@dimen/divider_28px"-->
+<!--                android:textColor="@color/color_333333"-->
+<!--                app:layout_constraintEnd_toEndOf="parent"-->
+<!--                app:layout_constraintStart_toStartOf="parent"-->
+<!--                app:layout_constraintTop_toBottomOf="@+id/headTitle"/>-->
+
+            <androidx.appcompat.widget.AppCompatEditText
+                android:id="@+id/goMaiUsername"
+                android:layout_width="match_parent"
+                android:layout_height="@dimen/divider_70px"
+                android:layout_marginStart="@dimen/divider_60px"
+                android:layout_marginTop="@dimen/divider_40px"
+                android:layout_marginEnd="@dimen/divider_50px"
+                android:background="@drawable/bg_go_mai_user_name"
+                android:hint="请输入手机号"
+                android:textColorHint="@color/color_999999"
+                android:inputType="number"
+                android:paddingStart="@dimen/divider_10px"
+                android:selectAllOnFocus="true"
+                android:textColor="@color/color_333333"
+                android:textSize="@dimen/divider_22px"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/headTitle" />
+
+
+
+            <!-- 带下拉箭头的Spinner -->
+            <com.yingyangfly.baselib.widget.BottomAlignedSpinner
+                android:id="@+id/spinner"
+                android:layout_width="match_parent"
+                android:layout_height="@dimen/divider_70px"
+                android:layout_marginStart="@dimen/divider_60px"
+                android:layout_marginTop="@dimen/divider_40px"
+                android:layout_marginEnd="@dimen/divider_50px"
+                android:background="@drawable/bg_go_mai_phone_hospital"
+                android:spinnerMode="dropdown"
+                app:layout_constraintTop_toBottomOf="@+id/goMaiUsername"/>
+
+<!--            <TextView-->
+<!--                android:id="@+id/hint"-->
+<!--                android:layout_width="match_parent"-->
+<!--                android:layout_height="@dimen/divider_40px"-->
+<!--                android:layout_marginStart="@dimen/divider_60px"-->
+<!--                android:layout_marginTop="@dimen/divider_10px"-->
+<!--                android:layout_marginEnd="@dimen/divider_50px"-->
+<!--                android:text="请仔细确认充值手机账号"-->
+<!--                android:textSize="@dimen/divider_20px"-->
+<!--                android:textColor="@color/color_f38b8b"-->
+<!--                app:layout_constraintEnd_toEndOf="parent"-->
+<!--                app:layout_constraintStart_toStartOf="parent"-->
+<!--                app:layout_constraintTop_toBottomOf="@+id/goMaiUsername"/>-->
+
+
+            <androidx.appcompat.widget.AppCompatButton
+                android:id="@+id/tvNotarize"
+                android:layout_width="@dimen/divider_180px"
+                android:layout_height="@dimen/divider_68px"
+                android:layout_marginStart="@dimen/divider_60px"
+                android:background="@drawable/bg_go_mai_notarize"
+                android:gravity="center"
+                android:textColor="@color/white"
+                android:textSize="@dimen/divider_28px"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/spinner"
+                android:text="确认" />
+
+            <androidx.appcompat.widget.AppCompatButton
+                android:id="@+id/tvCancel"
+                android:layout_width="@dimen/divider_180px"
+                android:layout_height="@dimen/divider_68px"
+                android:layout_marginEnd="@dimen/divider_60px"
+                android:background="@drawable/bg_tv_cancel_btn"
+                android:gravity="center"
+                android:textColor="@android:color/white"
+                android:textSize="@dimen/divider_28px"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/spinner"
+                android:text="取消" />
+
+
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+    </com.google.android.material.card.MaterialCardView>
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 12 - 0
baselib/src/main/res/layout/spinner_item.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/text1"
+    android:layout_width="match_parent"
+    android:layout_height="48dp"
+    android:padding="12dp"
+    android:textColor="#999999"
+    android:background="#FFFFFF"
+    android:textSize="16sp"
+    android:gravity="center_vertical"
+    android:ellipsize="end"
+    android:maxLines="1"/>

+ 6 - 0
baselib/src/main/res/values/colors.xml

@@ -43,4 +43,10 @@
     <color name="color_38bafe">#38bafe</color>
     <color name="color_5d7cff">#5d7cff</color>
     <color name="color_3545d2">#3545d2</color>
+    <color name="color_999999">#999999</color>
+    <color name="color_333333">#333333</color>
+    <color name="color_1B6FEC">#1B6FEC</color>
+    <color name="color_eff3f5">#eff3f5</color>
+    <color name="color_f8cc1a">#f8cc1a</color>
+    <color name="color_1aa7f8">#1aa7f8</color>
 </resources>

+ 1 - 0
baselib/src/main/res/values/dimens.xml

@@ -48,6 +48,7 @@
     <dimen name="divider_313px" tools:ignore="ResourceName">313px</dimen>
     <dimen name="divider_290px" tools:ignore="ResourceName">290px</dimen>
     <dimen name="divider_289px" tools:ignore="ResourceName">289px</dimen>
+    <dimen name="divider_280px" tools:ignore="ResourceName">280px</dimen>
     <dimen name="divider_270px" tools:ignore="ResourceName">270px</dimen>
     <dimen name="divider_265px" tools:ignore="ResourceName">265px</dimen>
     <dimen name="divider_264px" tools:ignore="ResourceName">264px</dimen>

+ 1 - 1
config.gradle

@@ -13,7 +13,7 @@ ext {
             applicationId    : "com.yingyangfly",
             minSdkVersion    : 26,
             targetSdkVersion : 28,
-            versionCode      : 5,
+            versionCode      : 8,
             versionName      : "1.0.0.1",
     ]
     //androidx配置

+ 6 - 0
evaluation/src/main/AndroidManifest.xml

@@ -73,6 +73,12 @@
                 android:name="android.support.FILE_PROVIDER_PATHS"
                 android:resource="@xml/app_updater_paths" />
         </provider>
+
+        <activity
+            android:name=".webview.BridgeWebActivity"
+            android:configChanges="keyboardHidden|orientation|screenSize"
+            android:screenOrientation="landscape"
+            android:windowSoftInputMode="adjustResize|adjustPan" />
     </application>
 
 </manifest>

+ 13 - 8
evaluation/src/main/java/com/yingyangfly/evaluation/hospital/HospitalActivity.kt

@@ -12,6 +12,7 @@ import com.yingyangfly.baselib.bean.def.PermissionList
 import com.yingyangfly.baselib.db.QuestionsBean
 import com.yingyangfly.baselib.db.VoicePlayerBean
 import com.yingyangfly.baselib.dialog.BindingPhoneDialog
+import com.yingyangfly.baselib.dialog.EarlyScreeningDialog
 import com.yingyangfly.baselib.ext.check
 import com.yingyangfly.baselib.ext.getEndAnimation
 import com.yingyangfly.baselib.ext.getScaleAnimation
@@ -165,14 +166,7 @@ class HospitalActivity : BaseTvMVVMActivity<ActivityHospitalBinding, HospitalVie
 
                     R.id.otherEvaluationsLayout -> {
                         if (CommonUtils.isFastClick) {
-//                            if (loginJudge()) {
-//                                JumpUtil.jumpActivity(RouterUrlCommon.otherEvaluation)
-//                            }
-                            val builder = AlertDialog.Builder(this)
-                            builder.setTitle("提示")
-                            builder.setMessage("敬请期待")
-                            builder.setPositiveButton("确定") { dialog, _ -> dialog.dismiss() }
-                            builder.create().show()
+                            getHospitalList()
                         }
                     }
 
@@ -230,6 +224,17 @@ class HospitalActivity : BaseTvMVVMActivity<ActivityHospitalBinding, HospitalVie
         }
     }
 
+
+    private fun getHospitalList() {
+        viewModel.getHospitalList(fail = {it.toast()}, success = {
+            if (it != null) {
+                var  earlyScreeningDialog= EarlyScreeningDialog();
+                earlyScreeningDialog.setUrl(it.url,it.hospitalList)
+                earlyScreeningDialog.show(supportFragmentManager,"earlyScreeningDialog")
+            }
+        })
+    }
+
     /**
      * 获取轮播图
      */

+ 11 - 0
evaluation/src/main/java/com/yingyangfly/evaluation/hospital/HospitalViewModel.kt

@@ -1,5 +1,6 @@
 package com.yingyangfly.evaluation.hospital
 
+import com.yingyangfly.baselib.bean.HospitalBean
 import com.yingyangfly.baselib.bean.UserInfoBean
 import com.yingyangfly.baselib.db.QuestionsBean
 import com.yingyangfly.baselib.mvvm.BaseViewModel
@@ -114,4 +115,14 @@ class HospitalViewModel : BaseViewModel() {
         success, fail
     )
 
+    fun getHospitalList(
+        fail: ((msg: String) -> Unit)? = null,
+        success: ((success: HospitalBean?) -> Unit)? = null
+    ) = launchFlow(true) {
+        EVALUATION_API.getHospitalList()
+    }.runUI(
+        success,
+        fail
+    )
+
 }

+ 4 - 0
evaluation/src/main/java/com/yingyangfly/evaluation/net/EvaluationApiService.kt

@@ -1,5 +1,6 @@
 package com.yingyangfly.evaluation.net
 
+import com.yingyangfly.baselib.bean.HospitalBean
 import com.yingyangfly.baselib.bean.QuestionRecordsListBean
 import com.yingyangfly.baselib.bean.UserInfoBean
 import com.yingyangfly.baselib.db.QuestionsBean
@@ -114,4 +115,7 @@ interface EvaluationApiService {
      */
     @POST("version/selectNewVersion")
     suspend fun selectNewVersion(@Query("versionCode") versionCode: Int): BaseResp<UpdateBean>
+
+    @POST("app/sysOrg/getHospitalList")
+    suspend fun getHospitalList(): BaseResp<HospitalBean>
 }

+ 27 - 0
evaluation/src/main/java/com/yingyangfly/evaluation/webview/AndroidToJs.kt

@@ -0,0 +1,27 @@
+package com.yingyangfly.evaluation.webview
+
+import android.app.Activity
+import android.webkit.JavascriptInterface
+import com.yingyangfly.baselib.utils.LiveEventBusUtil
+import com.yingyangfly.baselib.utils.RxBusCodes
+
+/**
+ * @author gold
+ * @date 9/22/22 5:05 PM
+ * @description  定义一个与JS对象映射关系的Android类
+ */
+class AndroidToJs(val context: Activity) : Any() {
+    // 定义JS需要调用的方法
+    // 被JS调用的方法必须加入@JavascriptInterface注解
+    @JavascriptInterface
+    fun performAndroidMethod(msg: String?) {
+        if(msg.isNullOrEmpty().not()) {
+            if (msg?.contains("finishActivity") == true) {
+                LiveEventBusUtil.send(RxBusCodes.FINISHWEBVIEW, "finishWebview")
+            }
+            if (msg?.contains("voice:") == true) {
+                LiveEventBusUtil.send(RxBusCodes.PLAYVOICE, msg)
+            }
+        }
+    }
+}

+ 165 - 0
evaluation/src/main/java/com/yingyangfly/evaluation/webview/BridgeWebActivity.kt

@@ -0,0 +1,165 @@
+package com.yingyangfly.evaluation.webview
+
+import android.annotation.SuppressLint
+import android.app.Dialog
+import android.content.pm.ActivityInfo
+import android.os.Build
+import android.os.Bundle
+import android.os.Handler
+import android.os.Looper
+import android.util.Log
+import android.view.ViewGroup
+import android.webkit.WebResourceRequest
+import android.webkit.WebSettings
+import android.webkit.WebView
+import android.webkit.WebViewClient
+import androidx.appcompat.app.AppCompatActivity
+import androidx.databinding.DataBindingUtil
+import com.alibaba.android.arouter.facade.annotation.Route
+import com.gyf.immersionbar.BarHide
+import com.gyf.immersionbar.ktx.immersionBar
+import com.yingyangfly.baselib.ext.click
+import com.yingyangfly.baselib.router.RouterUrlCommon
+import com.yingyangfly.baselib.utils.ViewTool
+import com.yingyangfly.evaluation.R
+import com.yingyangfly.evaluation.databinding.ActivityBridgeWebBinding
+
+@Route(path = RouterUrlCommon.WEB_VIEW_INTERACTION_JS)
+class BridgeWebActivity : AppCompatActivity() {
+
+    private lateinit var binding: ActivityBridgeWebBinding
+    private lateinit var webSettings: WebSettings
+    private var url: String = ""
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        immersionBar {
+            hideBar(BarHide.FLAG_HIDE_BAR)
+            navigationBarColor(R.color.transparent)
+        }
+        url = intent.getStringExtra("url") ?: ""
+        Log.e("wpp", "url------------------->" + url)
+        binding = DataBindingUtil.setContentView(this, R.layout.activity_bridge_web)
+        ViewTool.inflateLayoutPixels(this, binding.root, 1194, 834)
+        initWebView()
+        initView()
+        showCoverDialog()
+    }
+
+    private fun showCoverDialog() {
+        // 创建全屏对话框
+        val dialog = Dialog(this, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen).apply {
+            // 设置内容视图
+            setContentView(R.layout.dialog_splash_cover)
+
+            // 设置背景
+            window?.setBackgroundDrawableResource(android.R.color.transparent)
+
+            // 设置不可取消
+            setCancelable(false)
+            setCanceledOnTouchOutside(false)
+        }
+
+        // 显示对话框
+        dialog.show()
+
+        // 5秒后自动关闭
+        Handler(Looper.getMainLooper()).postDelayed({
+            if (dialog.isShowing) {
+                dialog.dismiss()
+            }
+        }, 10000)
+    }
+
+    @SuppressLint("JavascriptInterface", "SetJavaScriptEnabled")
+    private fun initWebView() {
+        webSettings = binding.webView.settings
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+            webSettings.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
+        }
+        val ua = webSettings.userAgentString
+        //必须设置
+        webSettings.userAgentString = "$ua; app/lottchina  Android"
+        webSettings.javaScriptCanOpenWindowsAutomatically = true
+        webSettings.javaScriptEnabled = true
+        webSettings.setAppCacheEnabled(true)
+        webSettings.allowUniversalAccessFromFileURLs = true
+        webSettings.cacheMode = WebSettings.LOAD_DEFAULT
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+            webSettings.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
+        }
+        //视频自动播放
+        webSettings.mediaPlaybackRequiresUserGesture = false
+        /**必须的设置, 访问网页版的H5,一定要设置。该方法是设置支持DomStorage,
+         * DOM Storage 分为 sessionStorage 和 localStorage。
+         * localStorage 对象和 sessionStorage 对象使用方法基本相同,它们的区别在于作用的范围不同。
+         * sessionStorage 用来存储与页面相关的数据,它在页面关闭后无法使用。而 localStorage 则持久存在,在页面关闭后也可以使用。
+         */
+        webSettings.domStorageEnabled = true
+        // 通过addJavascriptInterface()将Java对象映射到JS对象 下面一行代码是 JS调用原生方法
+        binding.webView.addJavascriptInterface(AndroidToJs(this), "AndroidInterface")
+        binding.webView.isDrawingCacheEnabled = true
+        binding.webView.buildDrawingCache()
+        binding.webView.buildLayer()
+
+        binding.webView.webViewClient = object : WebViewClient() {
+            override fun shouldOverrideUrlLoading(
+                view: WebView?,
+                request: WebResourceRequest?
+            ): Boolean {
+                if (request != null) {
+                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+                        view?.loadUrl(request.url.toString())
+                    } else {
+                        view?.loadUrl(request.toString()!!)
+                    }
+                } else {
+                    url.let {
+                        view?.loadUrl(it)
+                    }
+                }
+                return true
+            }
+
+            override fun onPageFinished(view: WebView?, url: String?) {
+                super.onPageFinished(view, url)
+            }
+        }
+        binding.webView.loadUrl(url)
+    }
+
+    private fun initView() {
+        binding.layoutHead.click {
+            finish()
+        }
+    }
+
+    override fun onDestroy() {
+        destoryWebView()
+        super.onDestroy()
+    }
+
+    /**
+     * 结束webview清空缓存
+     */
+    private fun destoryWebView() {
+        binding.webView.stopLoading() // 停止加载
+        binding.webView.clearCache(true) // 清除缓存
+        binding.webView.clearHistory() // 清楚历史
+        binding.webView.loadUrl("about:blank");
+        binding.webView.onPause();
+        binding.webView.removeAllViews() // 移除webview上子view
+        binding.webView.destroy() // 销毁WebView自身。
+        (binding.webView.parent as ViewGroup).removeView(binding.webView) // 把webview从视图中移除
+    }
+
+    override fun onResume() {
+        /**
+         * 设置为横屏
+         */
+        if (requestedOrientation != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
+            requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
+        }
+        super.onResume()
+    }
+}

+ 7 - 0
evaluation/src/main/manifest/AndroidManifest.xml

@@ -75,6 +75,13 @@
                 android:resource="@xml/app_updater_paths" />
         </provider>
 
+
+        <activity
+        android:name=".webview.BridgeWebActivity"
+        android:configChanges="keyboardHidden|orientation|screenSize"
+        android:screenOrientation="landscape"
+        android:windowSoftInputMode="adjustResize|adjustPan" />
+
     </application>
 
 </manifest>

+ 30 - 0
evaluation/src/main/res/layout/activity_bridge_web.xml

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="ResourceName">
+
+    <FrameLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <!-- webview 演示web调用Java -->
+        <com.github.lzyzsd.jsbridge.BridgeWebView
+            android:id="@+id/webView"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent" />
+
+        <LinearLayout
+            android:id="@+id/layoutHead"
+            style="@style/back_layout"
+            tools:ignore="MissingConstraints">
+
+            <androidx.appcompat.widget.AppCompatImageView style="@style/back_image" />
+
+            <androidx.appcompat.widget.AppCompatTextView
+                style="@style/back_text"
+                android:textColor="@color/color_FF333333" />
+        </LinearLayout>
+
+    </FrameLayout>
+
+</layout>

+ 13 - 0
evaluation/src/main/res/layout/dialog_splash_cover.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="ResourceName">
+
+    <FrameLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:background="@mipmap/dialog_bg">  <!-- 可选透明度 -->
+
+</FrameLayout>
+
+</layout>

BIN
evaluation/src/main/res/mipmap-xxhdpi/dialog_bg.png


+ 1 - 1
evaluation/src/main/res/values/strings.xml

@@ -72,7 +72,7 @@
     <string name="hospital_name" tools:ignore="ResourceName">首都医科大学宣武医院</string>
     <string name="exit_binding" tools:ignore="ResourceName">退出绑定</string>
     <string name="report_query" tools:ignore="ResourceName">报告查询</string>
-    <string name="other_evaluations" tools:ignore="ResourceName">智能测评</string>
+    <string name="other_evaluations" tools:ignore="ResourceName">早期筛查</string>
     <string name="evaluation" tools:ignore="ResourceName">测评</string>
     <string name="continues" tools:ignore="ResourceName">继续</string>
     <string name="previous_question" tools:ignore="ResourceName">上一题</string>