From c7131b3992cada0727c6f84efeda628abdd53e61 Mon Sep 17 00:00:00 2001 From: chenglifeng Date: Tue, 24 Sep 2024 16:45:24 +0800 Subject: [PATCH] =?UTF-8?q?=E7=99=BB=E5=BD=95=E9=80=BB=E8=BE=91=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../survey/logic/viewmodel/LoginViewModel.kt | 42 ++++++++++++++ .../java/com/project/survey/network/Api.kt | 19 +++++++ .../com/project/survey/ui/SplashActivity.kt | 12 +++- .../survey/ui/base/BaseBindingActivity.kt | 20 +++++-- .../com/project/survey/ui/home/MeFragment.kt | 57 ++++++++++--------- .../project/survey/ui/login/LoginActivity.kt | 36 ++++++------ .../survey/ui/login/LoginInputCodeActivity.kt | 48 +++++++++++++--- .../survey/ui/project/ProjectListActivity.kt | 19 +++---- .../project/survey/util/ActivityNavUtil.kt | 3 + .../verificationcode/SerialnumberLayout.java | 2 + .../layout/activity_forget_pwd_input_code.xml | 2 +- app/src/main/res/layout/activity_login.xml | 3 +- .../res/layout/activity_login_input_code.xml | 25 ++++---- app/src/main/res/layout/fragment_me.xml | 4 +- app/src/main/res/layout/view_password.xml | 2 + app/src/main/res/values/color.xml | 3 +- app/src/main/res/values/strings.xml | 1 + 17 files changed, 211 insertions(+), 87 deletions(-) diff --git a/app/src/main/java/com/project/survey/logic/viewmodel/LoginViewModel.kt b/app/src/main/java/com/project/survey/logic/viewmodel/LoginViewModel.kt index 34852c9..953c252 100644 --- a/app/src/main/java/com/project/survey/logic/viewmodel/LoginViewModel.kt +++ b/app/src/main/java/com/project/survey/logic/viewmodel/LoginViewModel.kt @@ -2,22 +2,64 @@ package com.project.survey.logic.viewmodel import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData +import blankj.utilcode.util.ActivityUtils import com.project.survey.constants.EventConstants import com.project.survey.constants.SPConstants import com.project.survey.logic.bean.LoginBean import com.project.survey.logic.event.Message import com.project.survey.network.RetrofitClient +import com.project.survey.ui.MainActivity +import com.project.survey.ui.login.LoginActivity +import com.project.survey.ui.login.LoginInputCodeActivity import com.project.survey.util.SPUtils +import kotlinx.coroutines.delay class LoginViewModel : BaseViewModel() { val api = RetrofitClient.createApiService() +// val externalPersonSMSCodeResponse: LiveData +// get() = _externalPersonSMSCodeResponse +// private val _externalPersonSMSCodeResponse = MutableLiveData() + + /** + * 外部用户获取验证码 + */ + fun fetchExternalPersonSMSCode(account: String, password: String) { + launch { + val res = api.fetchExternalPersonSMSCode(account, password) + if (res.success) { +// _externalPersonSMSCodeResponse.postValue(res.data) + LoginInputCodeActivity.start(account, password, res.data?:"") + } + } + } val loginResponse: LiveData get() = _loginResponse private val _loginResponse = MutableLiveData() + /** + * 外部用户登录 + */ + fun externalPersonLogin(account: String, password: String, code: String){ + launch { + val res = api.externalPersonLogin(account, password, code) + if (res.success) { +// _externalPersonSMSCodeResponse.postValue(res.data) + + SPUtils.put(SPConstants.TOKEN, res.data.token) + SPUtils.put(SPConstants.ACCOUNT, account) + SPUtils.put(SPConstants.MOBILE_PHONE, res.data.mobilePhone) + msgEvent.postValue(Message(EventConstants.LOGIN_STATUS)) + + MainActivity.start() + ActivityUtils.finishActivity(LoginActivity::class.java) + ActivityUtils.finishActivity(LoginInputCodeActivity::class.java) + } + } + } + /** * 登录 */ diff --git a/app/src/main/java/com/project/survey/network/Api.kt b/app/src/main/java/com/project/survey/network/Api.kt index 8349154..f04c124 100644 --- a/app/src/main/java/com/project/survey/network/Api.kt +++ b/app/src/main/java/com/project/survey/network/Api.kt @@ -16,6 +16,25 @@ interface Api { @Query("password") password: String ): HttpResult + /** + * 外部用户获取验证码 + */ + @GET("/je/personInfo/sendSms") + suspend fun fetchExternalPersonSMSCode( + @Query("account") account: String, + @Query("password") password: String + ): HttpResult + + /** + * 外部用户登录 + */ + @GET("/je/personInfo/externalEntry") + suspend fun externalPersonLogin( + @Query("account") account: String, + @Query("password") password: String, + @Query("code") code: String + ): HttpResult + /** * 获取用户可访问的所有项目的信息 */ diff --git a/app/src/main/java/com/project/survey/ui/SplashActivity.kt b/app/src/main/java/com/project/survey/ui/SplashActivity.kt index e74b5e0..314cc0c 100644 --- a/app/src/main/java/com/project/survey/ui/SplashActivity.kt +++ b/app/src/main/java/com/project/survey/ui/SplashActivity.kt @@ -1,7 +1,10 @@ package com.project.survey.ui +import com.project.survey.constants.SPConstants import com.project.survey.databinding.ActivitySplashBinding import com.project.survey.ui.base.BaseBindingActivity +import com.project.survey.ui.login.LoginActivity +import com.project.survey.util.SPUtils /** * 启动页 @@ -11,11 +14,16 @@ class SplashActivity : BaseBindingActivity() { override fun getBinding(): ActivitySplashBinding = ActivitySplashBinding.inflate(layoutInflater) override fun initView() { - MainActivity.start() - finish() + } override fun initData() { + if (SPUtils.getString(SPConstants.TOKEN).isNullOrBlank()) { + LoginActivity.start() + } else { + MainActivity.start() + } + finish() } override fun initListener() { diff --git a/app/src/main/java/com/project/survey/ui/base/BaseBindingActivity.kt b/app/src/main/java/com/project/survey/ui/base/BaseBindingActivity.kt index d490a62..0d89073 100644 --- a/app/src/main/java/com/project/survey/ui/base/BaseBindingActivity.kt +++ b/app/src/main/java/com/project/survey/ui/base/BaseBindingActivity.kt @@ -2,20 +2,17 @@ package com.project.survey.ui.base import android.os.Bundle import android.view.MenuItem -import android.view.View import android.view.WindowManager import androidx.annotation.StringRes import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatDelegate import androidx.appcompat.widget.Toolbar -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData +import androidx.core.content.ContextCompat import androidx.viewbinding.ViewBinding import blankj.utilcode.util.Utils +import com.gyf.immersionbar.ImmersionBar import com.project.survey.App import com.project.survey.R -import com.project.survey.ui.interfacee.ImmersionAction -import com.project.survey.util.Tools import com.project.survey.util.param.ParamUtil import org.polaric.colorful.Colorful @@ -40,7 +37,7 @@ abstract class BaseBindingActivity : AppCompatActivity() { // //设置背景色 // mBinding.root.setBackgroundColor(Tools.getColor(R.color.bg_content)) - initToolBar() +// initToolBar() initView() initListener() initData() @@ -86,4 +83,15 @@ abstract class BaseBindingActivity : AppCompatActivity() { return true } + protected fun immersionToolbar(toolbar: Toolbar, title: String? = null) { + ImmersionBar.with(this) + .statusBarDarkFont(true) + .titleBarMarginTop(toolbar) + .init() + setSupportActionBar(toolbar) + toolbar.setBackgroundColor(0) + toolbar.setTitleTextColor(ContextCompat.getColor(this, R.color.text_color_main)) + toolbar.setTitle(title) + } + } \ No newline at end of file diff --git a/app/src/main/java/com/project/survey/ui/home/MeFragment.kt b/app/src/main/java/com/project/survey/ui/home/MeFragment.kt index ae022f4..96ad11f 100644 --- a/app/src/main/java/com/project/survey/ui/home/MeFragment.kt +++ b/app/src/main/java/com/project/survey/ui/home/MeFragment.kt @@ -3,6 +3,7 @@ package com.project.survey.ui.home import android.view.LayoutInflater import android.view.ViewGroup import androidx.fragment.app.viewModels +import blankj.utilcode.util.ActivityUtils import com.afollestad.materialdialogs.MaterialDialog import com.project.survey.BuildConfig import com.project.survey.R @@ -12,9 +13,11 @@ import com.project.survey.databinding.FragmentMeBinding import com.project.survey.extend.setOnClickNoRepeatListener import com.project.survey.logic.event.Message import com.project.survey.logic.viewmodel.LoginViewModel +import com.project.survey.ui.MainActivity import com.project.survey.ui.base.BaseBindingFragment import com.project.survey.ui.login.LoginActivity import com.project.survey.ui.project.ProjectListActivity +import com.project.survey.util.ActivityNavUtil import com.project.survey.util.SPUtils /** @@ -31,44 +34,44 @@ class MeFragment : BaseBindingFragment() { } override fun initData() { - viewModel.msgEvent.observe(this) { - updateUIByData() - } - updateUIByData() + mBinding.tvName.text = SPUtils.getString(SPConstants.ACCOUNT) +// viewModel.msgEvent.observe(this) { +// updateUIByData() +// } if (BuildConfig.DEBUG) { mBinding.tvVersion.text = BuildConfig.VERSION_NAME } } - private fun updateUIByData(){ + private fun updateUIByData() { val token = SPUtils.getString(SPConstants.TOKEN) ?: "" - mBinding.tvLoginOrOut.text = - if (token.isBlank()) - getString(R.string.login) - else - getString(R.string.login_out) + mBinding.tvName.text = if (token.isBlank()) "请登录" else SPUtils.getString(SPConstants.ACCOUNT) ?: "" } override fun initListener() { - mBinding.tvLoginOrOut.setOnClickNoRepeatListener { - if (SPUtils.getString(SPConstants.TOKEN).isNullOrBlank()) { - // 登录 - LoginActivity.start() - } else { - // 退出登录 - MaterialDialog.Builder(mContext) - .title("确定退出吗?") - .negativeText("取消") - .positiveText("退出") - .onPositive { _, _ -> - SPUtils.removeKey(SPConstants.TOKEN) - SPUtils.removeKey(SPConstants.ACCOUNT) - viewModel.msgEvent.postValue(Message(EventConstants.LOGIN_STATUS)) - } - .show() - } + mBinding.tvLoginOut.setOnClickNoRepeatListener { + // 退出登录 + MaterialDialog.Builder(mContext) + .title("确定退出吗?") + .negativeText("取消") + .positiveText("退出") + .onPositive { _, _ -> + SPUtils.removeKey(SPConstants.TOKEN) + SPUtils.removeKey(SPConstants.ACCOUNT) + SPUtils.removeKey(SPConstants.MOBILE_PHONE) + ActivityNavUtil.finishActivity() + ActivityNavUtil.startActivity { } +// viewModel.msgEvent.postValue(Message(EventConstants.LOGIN_STATUS)) + } + .show() +// if (SPUtils.getString(SPConstants.TOKEN).isNullOrBlank()) { +// // 登录 +// LoginActivity.start() +// } else { +// +// } } mBinding.llSwitchProject.setOnClickNoRepeatListener { ProjectListActivity.start() diff --git a/app/src/main/java/com/project/survey/ui/login/LoginActivity.kt b/app/src/main/java/com/project/survey/ui/login/LoginActivity.kt index 86cd498..0c28c56 100644 --- a/app/src/main/java/com/project/survey/ui/login/LoginActivity.kt +++ b/app/src/main/java/com/project/survey/ui/login/LoginActivity.kt @@ -40,10 +40,14 @@ class LoginActivity : BaseBindingActivity() { mBinding.tvError.text = it mBinding.tvError.isVisibleOrInvisible(true) } + // 外部账号获取验证码 +// viewModel.externalPersonSMSCodeResponse.observe(this) { +// LoginInputCodeActivity.start() +// } // 登录成功 - viewModel.loginResponse.observe(this) { - finish() - } +// viewModel.loginResponse.observe(this) { +// finish() +// } } override fun initListener() { @@ -61,16 +65,18 @@ class LoginActivity : BaseBindingActivity() { // 登录 mBinding.btnLogin.setOnClickNoRepeatListener { + val account = mBinding.etAccount.text.toString() + val password = mBinding.passwordView.getText() + if (account.isBlank() || password.isNullOrBlank()) { + toast("账号或密码不能为空") + return@setOnClickNoRepeatListener + } if (isOutLogin) { - loginByOut() + // 外部账号登录 + + viewModel.fetchExternalPersonSMSCode(account, password) } else { - val account = mBinding.etAccount.text.toString() - val password = mBinding.passwordView.getText() - if (account.isBlank() || password.isNullOrBlank()) { - toast("账号或密码不能为空") - return@setOnClickNoRepeatListener - } - viewModel.login(account, password) + toast("开发中……") } } @@ -87,14 +93,6 @@ class LoginActivity : BaseBindingActivity() { startActivity(Intent(this, LoginInputCodeActivity::class.java)) } - /** - * 外部登录 - */ - private fun loginByOut() { - - - } - private fun refreshInnerOutUi() { if (isOutLogin) { //当前外部登录 diff --git a/app/src/main/java/com/project/survey/ui/login/LoginInputCodeActivity.kt b/app/src/main/java/com/project/survey/ui/login/LoginInputCodeActivity.kt index 1061824..b41d4d2 100644 --- a/app/src/main/java/com/project/survey/ui/login/LoginInputCodeActivity.kt +++ b/app/src/main/java/com/project/survey/ui/login/LoginInputCodeActivity.kt @@ -1,17 +1,49 @@ package com.project.survey.ui.login -import android.util.Log -import com.project.survey.ui.base.BaseBindingActivity +import androidx.activity.viewModels +import com.project.survey.R import com.project.survey.databinding.ActivityLoginInputCodeBinding +import com.project.survey.logic.viewmodel.LoginViewModel +import com.project.survey.ui.base.BaseBindingActivity +import com.project.survey.util.ActivityNavUtil +import com.project.survey.util.KeyboardUtils +import com.project.survey.util.param.Param class LoginInputCodeActivity : BaseBindingActivity() { - override fun getBinding(): ActivityLoginInputCodeBinding { - return ActivityLoginInputCodeBinding.inflate(layoutInflater) + + companion object { + fun start(account: String, password: String, mobile:String) { + ActivityNavUtil.startActivity { + putString("account", account) + putString("password", password) + putString("mobile", mobile) + } + } } + override fun getBinding(): ActivityLoginInputCodeBinding = + ActivityLoginInputCodeBinding.inflate(layoutInflater) + + private val viewModel: LoginViewModel by viewModels() + + @Param + private lateinit var account: String + + @Param + private lateinit var password: String + + @Param + private lateinit var mobile: String + override fun initView() { - mBinding.etInputCode.setOnInputListener { - Log.d("hwhw", "sss" + it) + immersionToolbar(mBinding.ilToolBar.toolbar) + + if (mobile.length == 11) { + mBinding.tvTips.text = + String.format( + getString(R.string.the_verification_code_was_sent_for_login), + mobile.replace("(\\d{3})\\d{4}(\\d{4})","$1****$2") + ) } } @@ -20,7 +52,9 @@ class LoginInputCodeActivity : BaseBindingActivity() { private val adapter by lazy { ProjectListAdapter() } override fun initView() { - ImmersionBar.with(this) - .statusBarDarkFont(true) - .titleBarMarginTop(mBinding.ilToolBar.toolbar) - .init() - setSupportActionBar(mBinding.ilToolBar.toolbar) + immersionToolbar(mBinding.ilToolBar.toolbar, "项目列表") +// ImmersionBar.with(this) +// .statusBarDarkFont(true) +// .titleBarMarginTop(mBinding.ilToolBar.toolbar) +// .init() +// setSupportActionBar(mBinding.ilToolBar.toolbar) - mBinding.ilToolBar.toolbar.setBackgroundColor(0) - mBinding.ilToolBar.toolbar.setTitle("项目列表") - mBinding.ilToolBar.toolbar.setTitleTextColor(ContextCompat.getColor(this, R.color.text_color_main)) +// mBinding.ilToolBar.toolbar.setBackgroundColor(0) +// mBinding.ilToolBar.toolbar.setTitle("项目列表") +// mBinding.ilToolBar.toolbar.setTitleTextColor(ContextCompat.getColor(this, R.color.text_color_main)) // initTabLayout() mBinding.recyclerView.addItemDecoration(HorDividerDecoration(this)) diff --git a/app/src/main/java/com/project/survey/util/ActivityNavUtil.kt b/app/src/main/java/com/project/survey/util/ActivityNavUtil.kt index 2dc5d63..bfa98a9 100644 --- a/app/src/main/java/com/project/survey/util/ActivityNavUtil.kt +++ b/app/src/main/java/com/project/survey/util/ActivityNavUtil.kt @@ -10,4 +10,7 @@ object ActivityNavUtil { ActivityUtils.startActivity(Bundle().apply(block), T::class.java) } + inline fun finishActivity(){ + ActivityUtils.finishActivity(T::class.java) + } } \ No newline at end of file diff --git a/app/src/main/java/com/project/survey/widget/edittext/verificationcode/SerialnumberLayout.java b/app/src/main/java/com/project/survey/widget/edittext/verificationcode/SerialnumberLayout.java index 92d76fc..0a93120 100644 --- a/app/src/main/java/com/project/survey/widget/edittext/verificationcode/SerialnumberLayout.java +++ b/app/src/main/java/com/project/survey/widget/edittext/verificationcode/SerialnumberLayout.java @@ -18,6 +18,7 @@ import android.widget.RelativeLayout; import android.widget.Toast; import com.project.survey.R; +import com.project.survey.util.KeyboardUtils; import com.project.survey.util.Tools; import java.util.ArrayList; @@ -167,6 +168,7 @@ public class SerialnumberLayout extends RelativeLayout { editViews.get(0).setFocusable(true); editViews.get(0).setFocusableInTouchMode(true); editViews.get(0).requestFocus(); + KeyboardUtils.showSoftInput(editViews.get(0)); } private void showCode(int location, String code) { diff --git a/app/src/main/res/layout/activity_forget_pwd_input_code.xml b/app/src/main/res/layout/activity_forget_pwd_input_code.xml index 7c3c2df..02ad7a9 100644 --- a/app/src/main/res/layout/activity_forget_pwd_input_code.xml +++ b/app/src/main/res/layout/activity_forget_pwd_input_code.xml @@ -34,7 +34,7 @@ android:layout_marginHorizontal="@dimen/sw_22dp" android:layout_marginTop="@dimen/sw_24dp" app:code_number="6" - app:line_color_default="@color/c_dfdfdf" + app:line_color_default="@color/text_color_df" app:line_color_focus="@color/colorPrimary" /> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index 8275164..5799abb 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -35,7 +35,8 @@ android:id="@+id/etAccount" android:layout_width="match_parent" android:layout_height="wrap_content" - android:text="" + android:singleLine="true" + android:imeOptions="actionNext" android:textColor="@color/text_color_20" android:textSize="14sp" /> diff --git a/app/src/main/res/layout/activity_login_input_code.xml b/app/src/main/res/layout/activity_login_input_code.xml index 5d91f6e..a004e7d 100644 --- a/app/src/main/res/layout/activity_login_input_code.xml +++ b/app/src/main/res/layout/activity_login_input_code.xml @@ -5,24 +5,27 @@ android:layout_height="match_parent" android:orientation="vertical"> - + @@ -31,11 +34,11 @@ android:id="@+id/etInputCode" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginHorizontal="@dimen/sw_22dp" - android:layout_marginTop="@dimen/sw_24dp" + android:layout_marginHorizontal="@dimen/margin_side" + android:layout_marginTop="24dp" app:code_number="6" - app:line_color_default="@color/c_dfdfdf" - app:line_color_focus="@color/colorPrimary" /> + app:line_color_default="@color/text_color_df" + app:line_color_focus="@color/text_color_396bd0" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_me.xml b/app/src/main/res/layout/fragment_me.xml index d03c73d..f5d8dde 100644 --- a/app/src/main/res/layout/fragment_me.xml +++ b/app/src/main/res/layout/fragment_me.xml @@ -138,10 +138,10 @@ diff --git a/app/src/main/res/values/color.xml b/app/src/main/res/values/color.xml index ce8888c..8484934 100644 --- a/app/src/main/res/values/color.xml +++ b/app/src/main/res/values/color.xml @@ -11,7 +11,7 @@ #2964DA #EBEBEB #727778 - #DFDFDF + #DFDFDF #EBEBEB #00000000 #10000000 @@ -23,6 +23,7 @@ #FFFFFF #202020 #CC5155 + #396BD0 #F9FAFB #FFFFFF diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 71132d1..cd5c055 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -40,6 +40,7 @@ 输入不能为空! 请输入验证码 验证码已发送至%1$s的手机,如您已更换手机,请联系管理员。 + 验证码已发送至%1$s的手机,请输入6位数验证码。 身份验证 请输入账号。