| | |
| | | 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) |
| | | |
| | |
| | | |
| | | val protocolStatus = MutableLiveData(false) |
| | | |
| | | //账号密码验证码验证信息 |
| | | var passwordLoginCodeValidateInfo: PasswordLoginCodeValidateInfo? = null |
| | | val onClick = View.OnClickListener { |
| | | when (it.id) { |
| | | R.id.protocolStatus -> protocolStatus.value = !protocolStatus.value!! |
| | |
| | | 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()) { |
| | |
| | | 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() |
| | | } |
| | | } |
| | | } |
| | | } |
| | | ) |
| | |
| | | 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? |
| | | } |
| | | } |
| | | ) |
| | | } |
| | | } |
| | | |