登录接口

main
chenglifeng 8 months ago
parent 7d57e01bfe
commit 6ad88e61ce
  1. 11
      app/build.gradle
  2. 3
      app/src/main/java/com/project/survey/App.java
  3. 15
      app/src/main/java/com/project/survey/constants/Constants.kt
  4. 99
      app/src/main/java/com/project/survey/logic/event/LiveBus.kt
  5. 13
      app/src/main/java/com/project/survey/logic/event/Message.kt
  6. 4
      app/src/main/java/com/project/survey/logic/viewmodel/BaseViewModel.kt
  7. 30
      app/src/main/java/com/project/survey/logic/viewmodel/LoginViewModel.kt
  8. 28
      app/src/main/java/com/project/survey/logic/viewmodel/ProjectViewModel.kt
  9. 33
      app/src/main/java/com/project/survey/model/ProjectBean.kt
  10. 21
      app/src/main/java/com/project/survey/network/Api.kt
  11. 3
      app/src/main/java/com/project/survey/network/HttpResult.kt
  12. 8
      app/src/main/java/com/project/survey/network/IBaseResponse.kt
  13. 22
      app/src/main/java/com/project/survey/network/RetrofitClient.kt
  14. 3
      app/src/main/java/com/project/survey/ui/base/BaseBindingFragment.kt
  15. 43
      app/src/main/java/com/project/survey/ui/home/MeFragment.kt
  16. 45
      app/src/main/java/com/project/survey/ui/login/LoginActivity.kt
  17. 2
      app/src/main/java/com/project/survey/ui/project/ProjectListFragment.kt
  18. 86
      app/src/main/java/com/project/survey/util/SPUtils.kt
  19. 2
      app/src/main/res/drawable/bg_btn_login.xml
  20. 2
      app/src/main/res/drawable/bg_input_code_gray.xml
  21. 4
      app/src/main/res/layout/activity_forget_pwd.xml
  22. 2
      app/src/main/res/layout/activity_forget_pwd_input_code.xml
  23. 40
      app/src/main/res/layout/activity_login.xml
  24. 2
      app/src/main/res/layout/activity_login_input_code.xml
  25. 6
      app/src/main/res/layout/activity_set_new_pwd.xml
  26. 48
      app/src/main/res/layout/fragment_me.xml
  27. 4
      app/src/main/res/layout/view_password.xml
  28. 4
      app/src/main/res/values/color.xml
  29. 2
      app/src/main/res/values/strings.xml

@ -2,6 +2,7 @@ import com.bingce.AndroidSdk
import com.bingce.AndroidX
import com.bingce.Kotlin
import com.bingce.Libs
import com.bingce.SurveyorVersionUtils
apply plugin: 'com.android.application'
apply plugin: 'org.jetbrains.kotlin.android'
@ -18,10 +19,17 @@ android {
minSdkVersion AndroidSdk.minSdkVersion
targetSdkVersion AndroidSdk.targetSdkVersion
def versionUtils = new SurveyorVersionUtils(project)
versionCode = versionUtils.versionCode + 0
versionName = versionUtils.versionName
ndk {}
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled true
buildConfigField "String", "BASE_URL", "\"http://10.190.183.37\""
javaCompileOptions {
annotationProcessorOptions {
arguments = [
@ -184,7 +192,8 @@ dependencies {
implementation 'com.sherlockshi.widget:sherlockspinner:1.0.2'
implementation 'com.zhy:flowlayout-lib:1.0.3'
implementation 'net.sourceforge.jexcelapi:jxl:2.6.12'
// MMKVhttps://github.com/Tencent/MMKV
implementation 'com.tencent:mmkv:1.3.9'
}

@ -22,6 +22,7 @@ import com.bingce.rtk.command.RTK;
import com.bingce.utils.CoordinatorSystemNotifierImpl;
import com.bingce.utils.SdkUtils;
import com.bingce.utils.ThreadPoolUtil;
import com.tencent.mmkv.MMKV;
import org.polaric.colorful.Colorful;
@ -57,7 +58,7 @@ public class App extends BaseApp {
customChannel = AppChannel.CUSTOM_CONTROL_PRO;//AppChannel.CUSTOM_PUBLIC;
super.onCreate();
app = this;
MMKV.initialize(this);
RxJavaPlugins.setErrorHandler(new Consumer<Throwable>() {
@Override

@ -0,0 +1,15 @@
package com.project.survey.constants
object Constants {
}
object SPConstants {
const val TOKEN = "token"
const val ACCOUNT = "account"
const val LOGIN = "login" //登录状态
}
object EventConstants{
const val LOGIN_STATUS = "loginStatus"
}

@ -0,0 +1,99 @@
package com.project.survey.logic.event
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Observer
import com.project.survey.logic.event.LiveBus.ObserverWrapper
import java.util.concurrent.ConcurrentHashMap
/**
* 使用LiveData实现的事件总线
*/
class LiveBus private constructor() {
private val busMap by lazy { ConcurrentHashMap<Class<*>, BusLiveData<*>>() }
private fun <T> bus(clazz: Class<T>) = busMap.getOrPut(clazz) { BusLiveData<T>() }
fun <T> with(clazz: Class<T>) = bus(clazz) as BusLiveData<T>
class BusLiveData<T> : MutableLiveData<T>() {
var mVersion = START_VERSION
var mStickyEvent: T? = null
override fun observe(owner: LifecycleOwner, observer: Observer<in T>) {
observe(owner, observer, false)
}
fun observe(owner: LifecycleOwner, observer: Observer<in T>, sticky: Boolean) {
super.observe(owner, ObserverWrapper(observer, this, sticky))
}
override fun setValue(value: T) {
mVersion++
super.setValue(value)
}
override fun postValue(value: T) {
mVersion++
super.postValue(value)
}
fun setValueSticky(value: T) {
mStickyEvent = value
setValue(value)
}
fun postValueSticky(value: T) {
mStickyEvent = value
postValue(value)
}
fun removeSticky() {
mStickyEvent = null
}
}
private class ObserverWrapper<T>(
val observer: Observer<in T>,
val liveData: BusLiveData<T>,
val sticky: Boolean
) : Observer<T> {
// 通过标志位过滤旧数据
private var mLastVersion = liveData.mVersion
override fun onChanged(t: T) {
if (mLastVersion >= liveData.mVersion) {
// 回调粘性事件
if (sticky && liveData.mStickyEvent != null) {
liveData.mStickyEvent?.let { v ->
observer.onChanged(v)
}
}
return
}
mLastVersion = liveData.mVersion
observer.onChanged(t)
}
}
companion object {
private const val START_VERSION = -1
@Volatile
private var instance: LiveBus? = null
@JvmStatic
fun getInstance() = instance ?: synchronized(this) {
instance ?: LiveBus().also { instance = it }
}
}
}

@ -0,0 +1,13 @@
package com.project.survey.logic.event
import java.text.SimpleDateFormat
import java.util.*
data class Message @JvmOverloads constructor(
var msg: String = "",
var arg1: Int = 0,
var arg2: Int = 0,
var obj: Any? = null
) {
var time: String = SimpleDateFormat.getTimeInstance().format(Date())
}

@ -3,6 +3,8 @@ package com.project.survey.logic.viewmodel
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.project.survey.logic.event.LiveBus
import com.project.survey.logic.event.Message
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@ -10,6 +12,8 @@ import kotlinx.coroutines.withContext
open class BaseViewModel : ViewModel() {
val msgEvent by lazy { LiveBus.getInstance().with(Message::class.java) }
val errorResponse = MutableLiveData<String?>()
fun launch(block: suspend CoroutineScope.() -> Unit) {

@ -1,14 +1,42 @@
package com.project.survey.logic.viewmodel
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.project.survey.constants.EventConstants
import com.project.survey.constants.SPConstants
import com.project.survey.logic.event.Message
import com.project.survey.network.RetrofitClient
import com.project.survey.util.SPUtils
class LoginViewModel : BaseViewModel(){
val api = RetrofitClient.createApiService()
fun test(){
val loginResponse: LiveData<String>
get() = _loginResponse
private val _loginResponse = MutableLiveData<String>()
/**
* 登录
*/
fun login(account: String, password: String){
launch {
// TODO:
// val res = api.login(account, password)
// if (res.success){
// _loginResponse.postValue(res.data)
// SPUtils.put(SPConstants.TOKEN, res.data)
// SPUtils.put(SPConstants.LOGIN, true)
// SPUtils.put(SPConstants.ACCOUNT, account)
// msgEvent.postValue(Message(EventConstants.LOGIN_STATUS))
// }
_loginResponse.postValue("res.data")
SPUtils.put(SPConstants.TOKEN, "res.data")
SPUtils.put(SPConstants.LOGIN, true)
SPUtils.put(SPConstants.ACCOUNT, account)
msgEvent.postValue(Message(EventConstants.LOGIN_STATUS))
}
}
}

@ -0,0 +1,28 @@
package com.project.survey.logic.viewmodel
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.project.survey.model.ProjectBean
import com.project.survey.network.RetrofitClient
class ProjectViewModel : BaseViewModel() {
val api = RetrofitClient.createApiService()
val projectResponse: LiveData<List<ProjectBean>>
get() = _projectResponse
private val _projectResponse = MutableLiveData<List<ProjectBean>>()
/**
* 获取用户在工作的所以项目的信息
*/
fun getAllProjectIDByAccount(account: String) {
launch {
val res = api.getAllProjectIDByAccount(account)
if (res.success) {
_projectResponse.postValue(res.data)
}
}
}
}

@ -1,4 +1,33 @@
package com.project.survey.model
class ProjectBean {
}
//{
// "XMXX_PILENO": "20221111",
// "XMXX_INDUSTRYTYPE": "水电工程",
// "SY_COMPANY_ID": null,
// "$TABLE_CODE$": null,
// "SY_CREATEUSERNAME": null,
// "XMXX_STATUS": "完工",
// "XMXX_LEVEL": "A类",
// "SY_ORDERINDEX": null,
// "SY_GROUP_COMPANY_NAME": null,
// "SY_COMPANY_NAME": null,
// "XMXX_CODE": "202109[101]",
// "BD_XMXX_ID": "f5b09f04f26d4d0e99591c01a5dedeeb",
// "SY_CREATEORGID": null,
// "SY_STATUS": "1",
// "SY_CREATEUSERID": null,
// "SY_GROUP_COMPANY_ID": null,
// "XMXX_CONTACTNAME": "何嘉能",
// "XMXX_LOCATIONXY": "122;39",
// "XMXX_FILE": null,
// "XMXX_CONTACTNAMEID": "",
// "XMXX_DESCRIPTION": "测试项目",
// "SY_CREATEORGNAME": null,
// "SY_CREATETIME": null,
// "SY_ORG_ID": null,
// "XMXX_NAME": "测试项目"
//}
data class ProjectBean(
val XMXX_PILENO: String,
val XMXX_INDUSTRYTYPE: String
)

@ -1,4 +1,25 @@
package com.project.survey.network
import com.project.survey.model.ProjectBean
import retrofit2.http.GET
import retrofit2.http.Query
interface Api {
/**
* 登录
*/
@GET("/je/project/login")
suspend fun login(
@Query("account") account: String,
@Query("password") password: String
): HttpResult<String>
/**
* 获取用户在工作的所以项目的信息
*/
@GET("/je/project/getAllProjectIDByAccount")
suspend fun getAllProjectIDByAccount(
@Query("account") account: String
): HttpResult<List<ProjectBean>>
}

@ -0,0 +1,3 @@
package com.project.survey.network
data class HttpResult<T>(val code: String, val message: String, val data: T, val success: Boolean)

@ -0,0 +1,8 @@
package com.project.survey.network
interface IBaseResponse<T> {
fun code(): Int
fun msg(): String
fun data(): T
fun isSuccess(): Boolean
}

@ -1,7 +1,10 @@
package com.project.survey.network
import blankj.utilcode.util.LogUtils
import com.bingce.http.HttpsTrustUtil
import com.project.survey.BuildConfig
import com.project.survey.constants.SPConstants
import com.project.survey.util.SPUtils
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit
@ -22,7 +25,7 @@ object RetrofitClient {
fun createRetrofit(): Retrofit {
return Retrofit.Builder()
.baseUrl("")
.baseUrl(BuildConfig.BASE_URL)
.client(createOkHttpClient())
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create()) //retrofit默认支持Call返回类型,改为支持Observable返回类型
@ -35,13 +38,18 @@ object RetrofitClient {
.readTimeout(60L, TimeUnit.SECONDS)
.writeTimeout(60L, TimeUnit.SECONDS)
.addInterceptor { chain ->
val token = SPUtils.getString(SPConstants.TOKEN) ?: ""
val originalRequest = chain.request()
val updateRequest = originalRequest.newBuilder()
.header("Content-Type", "application/json;charset=UTF-8")
.header("User-Agent", "ANDROID")
.header("System-Type", "APP_TOKEN")
.build()
return@addInterceptor chain.proceed(updateRequest)
val updateRequest = originalRequest.newBuilder().apply {
addHeader("pd", "jecloud-gcclzhglpt")
removeHeader("Authorization")
if (BuildConfig.DEBUG)
LogUtils.d(token)
if (token.isNotBlank()) {
addHeader("Authorization", token)
}
}
return@addInterceptor chain.proceed(updateRequest.build())
}
.addInterceptor(HttpLoggingInterceptor().apply {
level = if (BuildConfig.DEBUG)

@ -15,6 +15,8 @@ abstract class BaseBindingFragment<VB : ViewBinding> : Fragment() {
protected val binding: VB
get() = _binding
protected lateinit var mContext: Context
abstract fun getBinding(inflater: LayoutInflater, container: ViewGroup?): VB
abstract fun initView()
abstract fun initData()
@ -22,6 +24,7 @@ abstract class BaseBindingFragment<VB : ViewBinding> : Fragment() {
override fun onAttach(context: Context) {
super.onAttach(context)
mContext = context
ParamUtil.initParam(this)
}

@ -2,33 +2,72 @@ package com.project.survey.ui.home
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.activity.viewModels
import androidx.fragment.app.viewModels
import com.afollestad.materialdialogs.MaterialDialog
import com.project.survey.R
import com.project.survey.constants.EventConstants
import com.project.survey.constants.SPConstants
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.base.BaseBindingFragment
import com.project.survey.ui.login.LoginActivity
import com.project.survey.ui.project.ProjectListActivity
import com.project.survey.util.SPUtils
/**
* 我的
*/
class MeFragment : BaseBindingFragment<FragmentMeBinding>() {
private val viewModel: LoginViewModel by viewModels()
private val account by lazy { SPUtils.getString(SPConstants.ACCOUNT) }
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentMeBinding {
return FragmentMeBinding.inflate(inflater, container, false)
}
override fun initView() {
}
override fun initData() {
viewModel.msgEvent.observe(this) {
binding.tvLoginOrOut.text =
if (SPUtils.getBoolean(SPConstants.LOGIN) == true) getString(R.string.login_out) else getString(R.string.login)
binding.tvName.text = if (SPUtils.getBoolean(SPConstants.LOGIN) == true) account else "请登录"
}
}
override fun initListener() {
binding.llLogin.setOnClickNoRepeatListener {
LoginActivity.start()
binding.tvLoginOrOut.setOnClickNoRepeatListener {
if (SPUtils.getBoolean(SPConstants.LOGIN) == true){
// 退出登录
MaterialDialog.Builder(mContext)
.title("确定退出吗?")
.negativeText("取消")
.positiveText("退出")
.onPositive { _, _ ->
SPUtils.removeKey(SPConstants.TOKEN)
SPUtils.put(SPConstants.LOGIN, false)
SPUtils.removeKey(SPConstants.ACCOUNT)
viewModel.msgEvent.postValue(Message(EventConstants.LOGIN_STATUS))
}
.show()
} else {
// 登录
LoginActivity.start()
}
}
binding.llSwitchProject.setOnClickNoRepeatListener {
ProjectListActivity.start()
}
// TODO:
binding.llAbout.setOnClickNoRepeatListener {
SPUtils.put(SPConstants.LOGIN, false)
}
}
}

@ -2,23 +2,33 @@ package com.project.survey.ui.login
import android.content.Intent
import android.view.View
import androidx.activity.viewModels
import com.gyf.immersionbar.ImmersionBar
import com.project.survey.R
import com.project.survey.constants.SPConstants
import com.project.survey.ui.base.BaseBindingActivity
import com.project.survey.databinding.ActivityLoginBinding
import com.project.survey.extend.isVisibleOrGone
import com.project.survey.extend.isVisibleOrInvisible
import com.project.survey.extend.setOnClickNoRepeatListener
import com.project.survey.extend.toast
import com.project.survey.logic.viewmodel.LoginViewModel
import com.project.survey.util.ActivityNavUtil
import com.project.survey.util.SPUtils
import com.project.survey.util.Tools
class LoginActivity : BaseBindingActivity<ActivityLoginBinding>() {
companion object{
fun start(){
ActivityNavUtil.startActivity<LoginActivity> { }
companion object {
fun start() {
ActivityNavUtil.startActivity<LoginActivity> { }
}
}
override fun getBinding(): ActivityLoginBinding = ActivityLoginBinding.inflate(layoutInflater)
private val viewModel: LoginViewModel by viewModels()
private var isOutLogin = false//默认集团登录
override fun initView() {
@ -36,11 +46,18 @@ class LoginActivity : BaseBindingActivity<ActivityLoginBinding>() {
refreshInnerOutUi()
}
mBinding.btnLogin.setOnClickListener {
// 登录
mBinding.btnLogin.setOnClickNoRepeatListener {
if (isOutLogin) {
loginByOut()
} else {
loginByInner()
val account = mBinding.etAccount.text.toString()
val password = mBinding.passwordView.getText()
if (account.isBlank() || password.isNullOrBlank()) {
toast("账号或密码不能为空")
return@setOnClickNoRepeatListener
}
viewModel.login(account, password)
}
}
@ -51,12 +68,22 @@ class LoginActivity : BaseBindingActivity<ActivityLoginBinding>() {
}
override fun initData() {
viewModel.errorResponse.observe(this) {
mBinding.tvError.text = it
mBinding.tvError.isVisibleOrInvisible(true)
}
// 登录成功
viewModel.loginResponse.observe(this) {
finish()
}
}
/**
* 内部登录
*/
private fun loginByInner() {
startActivity(Intent(this, LoginInputCodeActivity::class.java))
}
/**
@ -86,11 +113,5 @@ class LoginActivity : BaseBindingActivity<ActivityLoginBinding>() {
// mBinding.ilPwd.etPwd.text = null
}
override fun initData() {
}
}

@ -50,7 +50,7 @@ class ProjectListFragment : BaseFragmentBinding<FragmentProjectListBinding>() {
val dataList = mutableListOf<ProjectBean>()
for (i in 0 until num) {
dataList.add(ProjectBean())
dataList.add(ProjectBean("",""))
}
adapter.refreshData(dataList)

@ -0,0 +1,86 @@
package com.project.survey.util
import android.os.Parcelable
import com.tencent.mmkv.MMKV
import java.util.*
object SPUtils {
var mmkv: MMKV? = null
init {
mmkv = MMKV.defaultMMKV()
}
fun put(key: String, value: Any?): Boolean {
return when (value) {
is String -> mmkv?.encode(key, value)!!
is Float -> mmkv?.encode(key, value)!!
is Boolean -> mmkv?.encode(key, value)!!
is Int -> mmkv?.encode(key, value)!!
is Long -> mmkv?.encode(key, value)!!
is Double -> mmkv?.encode(key, value)!!
is ByteArray -> mmkv?.encode(key, value)!!
else -> false
}
}
/**
* 这里使用安卓自带的Parcelable序列化它比java支持的Serializer序列化性能好些
*/
fun <T : Parcelable> put(key: String, t: T?): Boolean {
if (t == null) {
return false
}
return mmkv?.encode(key, t)!!
}
fun put(key: String, sets: Set<String>?): Boolean {
if (sets == null) {
return false
}
return mmkv?.encode(key, sets)!!
}
fun getInt(key: String): Int? {
return mmkv?.decodeInt(key, 0)
}
fun getDouble(key: String): Double? {
return mmkv?.decodeDouble(key, 0.00)
}
fun getLong(key: String): Long? {
return mmkv?.decodeLong(key, 0L)
}
fun getBoolean(key: String): Boolean? {
return mmkv?.decodeBool(key, false)
}
fun getFloat(key: String): Float? {
return mmkv?.decodeFloat(key, 0F)
}
fun getByteArray(key: String): ByteArray? {
return mmkv?.decodeBytes(key)
}
fun getString(key: String): String? {
return mmkv?.decodeString(key, "")
}
fun <T : Parcelable> getParcelable(key: String, tClass: Class<T>): T? {
return mmkv?.decodeParcelable(key, tClass)
}
fun getStringSet(key: String): Set<String>? {
return mmkv?.decodeStringSet(key, Collections.emptySet())
}
fun removeKey(key: String) {
mmkv?.removeValueForKey(key)
}
fun clearAll() {
mmkv?.clearAll()
}
}

@ -5,5 +5,5 @@
android:angle="0"
android:endColor="#396BD0"
android:startColor="#3F79F0" />
<corners android:radius="@dimen/sw_4dp" />
<corners android:radius="4dp" />
</shape>

@ -8,7 +8,7 @@
<!-- 边框线 -->
<stroke
android:width="1dp"
android:color="@color/c_727778" />
android:color="@color/text_color_727778" />
<!-- 圆角 -->
<corners android:radius="8dp" />

@ -22,7 +22,7 @@
android:layout_marginHorizontal="@dimen/sw_22dp"
android:layout_marginTop="@dimen/sw_6dp"
android:text="@string/please_input_username"
android:textColor="@color/c_727778"
android:textColor="@color/text_color_727778"
android:textSize="@dimen/sw_14sp" />
<TextView
@ -31,7 +31,7 @@
android:layout_marginHorizontal="@dimen/sw_22dp"
android:layout_marginTop="@dimen/sw_48dp"
android:text="@string/account"
android:textColor="@color/c_727778"
android:textColor="@color/text_color_727778"
android:textSize="@dimen/sw_11sp" />
<EditText

@ -24,7 +24,7 @@
android:layout_marginHorizontal="@dimen/sw_22dp"
android:layout_marginTop="@dimen/sw_6dp"
android:text="@string/the_verification_code_was_sent_for_forget_pwd"
android:textColor="@color/c_727778"
android:textColor="@color/text_color_727778"
android:textSize="@dimen/sw_14sp" />
<com.project.survey.widget.edittext.verificationcode.SerialnumberLayout

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
@ -16,35 +17,35 @@
android:id="@+id/tvAccountDesc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/sw_55dp"
android:layout_marginTop="52dp"
android:text="@string/group_account_login"
android:textColor="@color/text_color_1"
android:textSize="@dimen/sw_22sp"
android:textSize="20sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/sw_15dp"
android:text="@string/account"
android:textColor="@color/c_727778"
android:textSize="@dimen/sw_11sp" />
android:text="@string/sh_account"
android:textColor="@color/text_color_727778"
android:textSize="11sp" />
<EditText
android:id="@+id/etAccount"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text=""
android:textColor="@color/text_color_1"
android:textSize="@dimen/sw_14sp" />
android:textColor="@color/text_color_20"
android:textSize="14sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/sw_15dp"
android:layout_marginTop="20dp"
android:text="@string/password"
android:textColor="@color/c_727778"
android:textSize="@dimen/sw_11sp" />
android:textColor="@color/text_color_727778"
android:textSize="11sp" />
<com.project.survey.widget.edittext.PasswordView
android:id="@+id/passwordView"
@ -58,18 +59,21 @@
android:layout_marginTop="@dimen/sw_6dp"
android:drawablePadding="@dimen/sw_6dp"
android:text=""
android:textColor="@color/text_color_CC5155"
android:visibility="invisible"
app:drawableStartCompat="@drawable/login_error" />
app:drawableStartCompat="@drawable/login_error"
tools:text="ddddd"
tools:visibility="visible" />
<Button
android:id="@+id/btnLogin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/sw_24dp"
android:layout_marginTop="22dp"
android:background="@drawable/bg_btn_login"
android:text="@string/login"
android:textColor="@color/white"
android:textSize="@dimen/sw_16sp" />
android:textSize="16sp" />
<!--显示外部账号登录-->
<LinearLayout
@ -85,8 +89,8 @@
android:layout_height="wrap_content"
android:padding="6dp"
android:text="@string/external_account_login"
android:textColor="@color/c_727778"
android:textSize="@dimen/sw_14sp" />
android:textColor="@color/text_color_727778"
android:textSize="14sp" />
</LinearLayout>
@ -105,13 +109,13 @@
android:layout_height="wrap_content"
android:padding="6dp"
android:text="@string/group_account_login"
android:textColor="@color/c_727778"
android:textColor="@color/text_color_727778"
android:textSize="@dimen/sw_14sp" />
<View
android:layout_width="@dimen/sw_1dp"
android:layout_height="@dimen/sw_12dp"
android:background="@color/c_727778" />
android:background="@color/text_color_727778" />
<TextView
android:id="@+id/tvForgetPwd"
@ -119,7 +123,7 @@
android:layout_height="wrap_content"
android:padding="6dp"
android:text="@string/forget_the_password"
android:textColor="@color/c_727778"
android:textColor="@color/text_color_727778"
android:textSize="@dimen/sw_14sp" />
</LinearLayout>

@ -24,7 +24,7 @@
android:layout_marginHorizontal="@dimen/sw_22dp"
android:layout_marginTop="@dimen/sw_6dp"
android:text="@string/the_verification_code_was_sent_for_login"
android:textColor="@color/c_727778"
android:textColor="@color/text_color_727778"
android:textSize="@dimen/sw_14sp" />
<com.project.survey.widget.edittext.verificationcode.SerialnumberLayout

@ -26,7 +26,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/sw_6dp"
android:text="@string/please_enter_new_password"
android:textColor="@color/c_727778"
android:textColor="@color/text_color_727778"
android:textSize="@dimen/sw_14sp" />
<TextView
@ -34,7 +34,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/sw_40dp"
android:text="@string/password"
android:textColor="@color/c_727778"
android:textColor="@color/text_color_727778"
android:textSize="@dimen/sw_11sp" />
<com.project.survey.widget.edittext.PasswordView
@ -47,7 +47,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/sw_24dp"
android:text="@string/confirm_password"
android:textColor="@color/c_727778"
android:textColor="@color/text_color_727778"
android:textSize="@dimen/sw_11sp" />
<com.project.survey.widget.edittext.PasswordView

@ -3,6 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical">
<LinearLayout
@ -21,7 +22,7 @@
android:layout_height="wrap_content"
android:text="请登录"
android:textColor="@color/white"
android:textSize="@dimen/sw_22sp"
android:textSize="22sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@ -136,47 +137,16 @@
</LinearLayout>
<LinearLayout
android:id="@+id/llLogin"
<TextView
android:id="@+id/tvLoginOrOut"
android:layout_width="match_parent"
android:layout_height="@dimen/sw_48dp"
android:layout_marginTop="@dimen/sw_8dp"
android:background="@color/white"
android:layout_height="48dp"
android:text="@string/login"
android:layout_marginTop="8dp"
android:gravity="center"
android:orientation="horizontal"
android:paddingHorizontal="@dimen/sw_16dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/llTop">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/login"
android:textColor="@color/text_color_1"
android:textSize="@dimen/sw_15sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/llLoginOut"
android:layout_width="match_parent"
android:layout_height="@dimen/sw_48dp"
android:layout_marginTop="@dimen/sw_8dp"
android:background="@color/white"
android:gravity="center"
android:orientation="horizontal"
android:paddingHorizontal="@dimen/sw_16dp"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/llTop">
android:textColor="@color/text_color_20"
android:textSize="15sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/login_out"
android:textColor="@color/text_color_1"
android:textSize="@dimen/sw_15sp" />
</LinearLayout>
</LinearLayout>

@ -7,8 +7,8 @@
android:layout_height="wrap_content"
android:inputType="textPassword"
android:paddingEnd="@dimen/sw_24dp"
android:textColor="@color/text_color_1"
android:textSize="@dimen/sw_14sp" />
android:textColor="@color/text_color_20"
android:textSize="14sp" />
<FrameLayout
android:id="@+id/pwdShowHide"

@ -10,7 +10,7 @@
<color name="black">#000000</color>
<color name="c_2964da">#2964DA</color>
<color name="c_ebebeb">#EBEBEB</color>
<color name="c_727778">#727778</color>
<color name="text_color_727778">#727778</color>
<color name="c_dfdfdf">#DFDFDF</color>
<color name="hor_line">#EBEBEB</color>
<color name="transparent">#00000000</color>
@ -21,6 +21,8 @@
<color name="text_color_tab_unselected">#5B5A5E</color>
<color name="text_color_main">#333333</color>
<color name="text_color_fff">#FFFFFF</color>
<color name="text_color_20">#202020</color>
<color name="text_color_CC5155">#CC5155</color>
<color name="bg_color_home_page">#F9FAFB</color>
<color name="bg_color_main_tab">#FFFFFF</color>

@ -32,7 +32,7 @@
<string name="engineering_surveying_integrated_management_system_en">Integrated Engineering Surveying Management System</string>
<string name="group_account_login">集团账号登录</string>
<string name="external_account_login">外部账号登录</string>
<string name="account">账号</string>
<string name="sh_account">账号</string>
<string name="password">密码</string>
<string name="forget_the_password">忘记密码</string>
<string name="login_account_or_password_error_hint">您的账号或密码输入有误,请重新输入。</string>

Loading…
Cancel
Save