18034727885
2026-05-13 03c43bb0d1abe7a22ce76bf903cc3c1e04648e44
app/src/main/java/com/xw/yunwei/ui/user/login/LoginVM.kt
@@ -9,17 +9,19 @@
import com.xw.common.utils.KeyPreferences
import com.xw.common.utils.MMKVManager
import com.xw.common.utils.ToastUtilCommon
import com.xw.yunwei.BuildConfig
import com.xw.yunwei.R
import com.xw.yunwei.extension.encryptByPublicKey
import com.xw.yunwei.model.PasswordLoginCodeValidateInfo
import com.xw.yunwei.net.UserRepository
import com.xw.yunwei.net.WorkRepository
import com.xw.yunwei.net.YiHuRepository
import com.xw.yunwei.ui.MainActivity
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import org.koin.core.component.inject
import kotlin.getValue
class LoginVM(application: Application) : BaseViewModel(application) {
    val userRepository: UserRepository by inject()
    val yiHuRepository: YiHuRepository by inject()
    val tabIndex = MutableLiveData(0)
@@ -35,6 +37,8 @@
    val protocolStatus = MutableLiveData(false)
    //账号密码验证码验证信息
    var passwordLoginCodeValidateInfo: PasswordLoginCodeValidateInfo? = null
    val onClick = View.OnClickListener {
        when (it.id) {
            R.id.protocolStatus -> protocolStatus.value = !protocolStatus.value!!
@@ -68,21 +72,39 @@
            ToastUtilCommon.showError("请输入验证码!")
            return
        }
        launchRequest(tips = "登录中...") {
            val map = mapOf("phoneNumber" to phone.value, "verificationCode" to code.value, "deviceType" to 1)
            val data = userRepository.loginByCode(map)
            data?.let {
                Constants.token = it.token?.access_token ?: ""
                MMKVManager.getInstance().saveModel(KeyPreferences.USER, it.info?.xpOperationsUser)
                startActivity(MainActivity::class.java)
                finish()
        launchRequestFlow(
            tips = "登录中...",
            flowBlock = {
                yiHuRepository.login(phone.value!!, code.value!!)
            },
            onCollect = { yiHuData ->
                yiHuData?.let {
                    launchRequest(tips = "登录中...") {
                        val data = userRepository.loginByThirdToken(yiHuData.access_token!!)
                        data?.let {
                            Constants.token = it.token?.access_token ?: ""
                            MMKVManager.getInstance()
                                .saveModel(KeyPreferences.USER, it.info?.xpOperationsUser)
                            startActivity(MainActivity::class.java)
                            finish()
                        }
                    }
                }
            }
        }
        )
    }
    private fun loginByPassword() {
        if (phone.value.isNullOrEmpty()) {
            ToastUtilCommon.showError("请输入手机号!")
            return
        }
        if (code.value.isNullOrEmpty()) {
            ToastUtilCommon.showError("请输入验证码!")
            return
        }
        if (passwordLoginCodeValidateInfo == null) {
            ToastUtilCommon.showError("请重新获取验证码!")
            return
        }
        if (psw.value.isNullOrEmpty()) {
@@ -92,15 +114,25 @@
        launchRequestFlow(
            tips = "登录中...",
            flowBlock = {
                val map = mapOf("phoneNumber" to phone.value, "password" to psw.value, "deviceType" to 1)
                userRepository.loginByPassword(map)
                yiHuRepository.passwordLogin(
                    phone.value!!,
                    code.value!!,
                    psw.value!!.encryptByPublicKey(BuildConfig.YIHU_PUBLIC_KEY),
                    passwordLoginCodeValidateInfo!!.randomKey
                )
            },
            onCollect = { data ->
                data?.let {
                    Constants.token = it.token?.access_token ?: ""
                    MMKVManager.getInstance().saveModel(KeyPreferences.USER, it.info?.xpOperationsUser)
                    startActivity(MainActivity::class.java)
                    finish()
            onCollect = { yiHuData ->
                yiHuData?.let {
                    launchRequest(tips = "登录中...") {
                        val data = userRepository.loginByThirdToken(yiHuData.access_token!!)
                        data?.let {
                            Constants.token = it.token?.access_token ?: ""
                            MMKVManager.getInstance()
                                .saveModel(KeyPreferences.USER, it.info?.xpOperationsUser)
                            startActivity(MainActivity::class.java)
                            finish()
                        }
                    }
                }
            }
        )
@@ -118,16 +150,41 @@
            closeKeyboard()
            timer.start()
            canGetCode.postValue(false)
            launchRequest(tips = "验证码获取中...", error = { code, msg ->
                canGetCode.postValue(true)
                timer.cancel()
                codeTips.postValue("重新发送")
                ToastUtilCommon.showError(msg)
            }) {
                val map = mapOf("phoneNumber" to phone.value!!, "codeType" to codeType)
                userRepository.getVerificationCode(map)
                ToastUtilCommon.showSuc("验证码已发送")
            if (codeType != 1) {
                launchRequest(tips = "验证码获取中...", error = { code, msg ->
                    canGetCode.postValue(true)
                    timer.cancel()
                    codeTips.postValue("重新发送")
                    ToastUtilCommon.showError(msg)
                }) {
                    val map = mapOf("phoneNumber" to phone.value!!, "codeType" to codeType)
                    userRepository.getVerificationCode(map)
                    ToastUtilCommon.showSuc("验证码已发送")
                }
                return
            }
            launchRequestFlow(
                tips = "验证码获取中...",
                flowBlock = {
                    if (tabIndex.value == 0) {
                        yiHuRepository.getPhoneLoginCode(phone.value!!)
                    } else {
                        yiHuRepository.getPasswordLoginCode(phone.value!!)
                    }
                },
                error = { code, msg ->
                    canGetCode.postValue(true)
                    timer.cancel()
                    codeTips.postValue("重新发送")
                    ToastUtilCommon.showError(msg)
                },
                onCollect = { data ->
                    ToastUtilCommon.showSuc("验证码已发送")
                    if (tabIndex.value == 1) {
                        passwordLoginCodeValidateInfo = data as PasswordLoginCodeValidateInfo?
                    }
                }
            )
        }
    }