Commit d4b4a6f4 authored by yinjiacheng's avatar yinjiacheng

update 企业认证流程

parent f0e967b0
package com.yidian.shenghuoquan.newscontent.bean
/**
* author: yinjiacheng
* date: 6/4/21 5:26 PM
* description: 生活号企业认证数据集
*/
class LifeAccountMerchantAuthData {
var merchantType: Int = 0
var isBusinessLicenseUpload: Boolean = false
var businessLicenseObjectKey: String = ""
var registrationName: String = ""
var registrationCode: String = ""
var type: String? = null
var addr: String? = null
var pers: String? = null
var scope: String? = null
var time: String? = null
var regi: String? = null
var organizer: String? = null
var date: String? = null
var comp: String? = null
var num: String? = null
var form: String? = null
var funding: String? = null
var date_issue: String? = null
}
\ No newline at end of file
...@@ -26,4 +26,5 @@ class LifeAccountPersonalAuthData { ...@@ -26,4 +26,5 @@ class LifeAccountPersonalAuthData {
var isFaceAuthPass: Boolean = false var isFaceAuthPass: Boolean = false
var isIDCardPortraitFaceUpload: Boolean = false var isIDCardPortraitFaceUpload: Boolean = false
var isIDCardNationalEmblemFaceUpload: Boolean = false var isIDCardNationalEmblemFaceUpload: Boolean = false
var phoneNUm: String = ""
} }
...@@ -9,9 +9,17 @@ object Constant { ...@@ -9,9 +9,17 @@ object Constant {
const val LIFE_ACCOUNT_AUTH_TAG = "LifeAccountAuth" const val LIFE_ACCOUNT_AUTH_TAG = "LifeAccountAuth"
// 认证类型
const val TYPE_AUTH = "auth_type"
const val TYPE_AUTH_PERSONAL = 0 // 个人
const val TYPE_AUTH_INDIVIDUAL_BUSINESS = 1 // 个体工商户
const val TYPE_AUTH_COMMON_ENTERPRISE = 2 // 普通企业
// 商户类型 // 商户类型
const val ITEM_INDIVIDUAL_BUSINESSES = "个体工商户" const val ITEM_INDIVIDUAL_BUSINESSES = "个体工商户"
const val ITEM_COMMON_ENTERPRISE = "普通企业" const val ITEM_COMMON_ENTERPRISE = "普通企业"
const val TYPE_INDIVIDUAL_BUSINESS = 1
const val TYPE_COMMON_ENTERPRISE = 2
// 身份证、营业执照上传方式 // 身份证、营业执照上传方式
const val ITEM_TAKE_PHOTO = "拍照" const val ITEM_TAKE_PHOTO = "拍照"
...@@ -44,4 +52,9 @@ object Constant { ...@@ -44,4 +52,9 @@ object Constant {
// 服务端error message // 服务端error message
const val ERROR_MESSAGE_ID_CARD_NUMBER = "身份证号码有误" const val ERROR_MESSAGE_ID_CARD_NUMBER = "身份证号码有误"
const val ERROR_MESSAGE_REAL_NAME = "姓名缺失" const val ERROR_MESSAGE_REAL_NAME = "姓名缺失"
// 数据来源
const val DATA_FROM_C = 1 // C端
const val DATA_FROM_B = 2 // B端
const val DATA_FROM_OP = 3 // OP后台
} }
\ No newline at end of file
...@@ -6,7 +6,7 @@ package com.yidian.shenghuoquan.newscontent.http.httpbean ...@@ -6,7 +6,7 @@ package com.yidian.shenghuoquan.newscontent.http.httpbean
* description: 营业执照OCR * description: 营业执照OCR
*/ */
class BusinessLicenseOCRBean { class BusinessLicenseOCRBean {
data class Request(val business_image_objectid: String?) data class Request(val business_image_objectid: String, val business_image_bucket: String)
data class Response( data class Response(
val addr: String, val addr: String,
......
...@@ -9,8 +9,7 @@ class GetIDCardOCRBean(val request: Request, val response: Response) { ...@@ -9,8 +9,7 @@ class GetIDCardOCRBean(val request: Request, val response: Response) {
data class Request( data class Request(
val posit_image_objectid: String, val posit_image_objectid: String,
val back_image_objectid: String, val back_image_objectid: String,
val posit_bucket: String?, val bucket: String
val back_bucket: String?
) )
data class Response( data class Response(
......
...@@ -115,7 +115,8 @@ class LifeAccountEnterpriseCertificationActivity : ...@@ -115,7 +115,8 @@ class LifeAccountEnterpriseCertificationActivity :
} }
override fun onTaskSuccess(bucket: String?, objectKey: String?) { override fun onTaskSuccess(bucket: String?, objectKey: String?) {
val request = BusinessLicenseOCRBean.Request(objectKey) if (bucket == null || objectKey == null) return
val request = BusinessLicenseOCRBean.Request(objectKey, bucket)
ApiService.businessLicenseOCR(object : IBusinessLicenseOCRCallback { ApiService.businessLicenseOCR(object : IBusinessLicenseOCRCallback {
override fun businessLicenseOCRSuccess(result: BusinessLicenseOCRBean.Response?) { override fun businessLicenseOCRSuccess(result: BusinessLicenseOCRBean.Response?) {
Log.d(TAG, "name: ${result?.name}, code: ${result?.code}") Log.d(TAG, "name: ${result?.name}, code: ${result?.code}")
......
package com.yidian.shenghuoquan.newscontent.ui.auth package com.yidian.shenghuoquan.newscontent.ui.auth
import com.yidian.shenghuoquan.newscontent.bean.LifeAccountMerchantAuthData
import com.yidian.shenghuoquan.newscontent.bean.LifeAccountPersonalAuthData import com.yidian.shenghuoquan.newscontent.bean.LifeAccountPersonalAuthData
import com.yidian.shenghuoquan.newscontent.http.httpbean.AuthPersonalCheckBean import com.yidian.shenghuoquan.newscontent.constant.Constant
import com.yidian.shenghuoquan.newscontent.http.httpbean.GetIDCardOCRBean import com.yidian.shenghuoquan.newscontent.http.httpbean.*
/** /**
* author: yinjiacheng * author: yinjiacheng
...@@ -12,6 +13,7 @@ import com.yidian.shenghuoquan.newscontent.http.httpbean.GetIDCardOCRBean ...@@ -12,6 +13,7 @@ import com.yidian.shenghuoquan.newscontent.http.httpbean.GetIDCardOCRBean
object LifeAccountAuthDataManager { object LifeAccountAuthDataManager {
val personalAuthData by lazy { LifeAccountPersonalAuthData() } val personalAuthData by lazy { LifeAccountPersonalAuthData() }
val merchantAuthData by lazy { LifeAccountMerchantAuthData() }
/** /**
* 将身份证OCR结果填入 * 将身份证OCR结果填入
...@@ -30,7 +32,7 @@ object LifeAccountAuthDataManager { ...@@ -30,7 +32,7 @@ object LifeAccountAuthDataManager {
} }
/** /**
* 使用个人认证数据生成身份信息校验接口请求体 * 生成身份信息校验接口请求体
*/ */
fun generateAuthPersonalCheckRequest(): AuthPersonalCheckBean.Request { fun generateAuthPersonalCheckRequest(): AuthPersonalCheckBean.Request {
return AuthPersonalCheckBean.Request( return AuthPersonalCheckBean.Request(
...@@ -49,4 +51,108 @@ object LifeAccountAuthDataManager { ...@@ -49,4 +51,108 @@ object LifeAccountAuthDataManager {
personalAuthData.issuedBy personalAuthData.issuedBy
) )
} }
/**
* 将营业执照OCR结果填入
*/
fun generateMerchantAuthData(data: BusinessLicenseOCRBean.Response) {
merchantAuthData.registrationName = data.name
merchantAuthData.registrationCode = data.code
merchantAuthData.type = data.type
merchantAuthData.addr = data.addr
merchantAuthData.pers = data.pers
merchantAuthData.scope = data.scope
merchantAuthData.time = data.time
merchantAuthData.regi = data.regi
merchantAuthData.organizer = data.organizer
merchantAuthData.date = data.date
merchantAuthData.comp = data.comp
merchantAuthData.num = data.num
merchantAuthData.form = data.form
merchantAuthData.funding = data.funding
merchantAuthData.date_issue = data.date_issue
}
/**
* 生成营业执照上传接口请求体
*/
fun generateAuthBusinessLicenseCommitRequest(
userId: Long,
dataType: Int,
lifeAccountId: Long?
): AuthBusinessLicenseCommitBean.Request {
return AuthBusinessLicenseCommitBean.Request(
userId,
merchantAuthData.registrationCode,
merchantAuthData.registrationName,
merchantAuthData.type,
merchantAuthData.addr,
merchantAuthData.pers,
merchantAuthData.scope,
merchantAuthData.time,
merchantAuthData.regi,
merchantAuthData.organizer,
merchantAuthData.date,
merchantAuthData.comp,
merchantAuthData.num,
merchantAuthData.form,
merchantAuthData.funding,
merchantAuthData.date_issue,
merchantAuthData.businessLicenseObjectKey,
Constant.DATA_FROM_B, dataType, lifeAccountId, null, null, null
)
}
/**
* 生成个体工商户身份上传接口请求体
*/
fun generateAuthIndividualBusinessIdentityCommitRequest(
dataType: Int
): AuthIndividualBusinessIdentityCommitBean.Request {
return AuthIndividualBusinessIdentityCommitBean.Request(
merchantAuthData.registrationCode,
dataType,
personalAuthData.idCardPortraitFaceObjectKey,
personalAuthData.idCardNationalEmblemFaceObjectKey,
personalAuthData.idCardPortraitFaceCompleteness,
personalAuthData.idCardNationalEmblemFaceCompleteness,
personalAuthData.idCardNum,
personalAuthData.gender,
personalAuthData.realName,
personalAuthData.address,
personalAuthData.nationality,
personalAuthData.validDateStart,
personalAuthData.validDateEnd,
personalAuthData.issuedBy,
null, null, null
)
}
/**
* 生成普通企业法人身份信息上传接口请求体
*/
fun generateAuthEnterpriseLegalIdentityCommitRequest(
authRecordId: Long,
lifeAccountId: Long?
): AuthEnterpriseLegalIdentityCommitBean.Request {
return AuthEnterpriseLegalIdentityCommitBean.Request(
authRecordId,
personalAuthData.idCardPortraitFaceObjectKey,
personalAuthData.idCardNationalEmblemFaceObjectKey,
personalAuthData.idCardPortraitFaceCompleteness,
personalAuthData.idCardNationalEmblemFaceCompleteness,
personalAuthData.idCardNum,
personalAuthData.gender,
personalAuthData.realName,
personalAuthData.address,
personalAuthData.nationality,
personalAuthData.validDateStart,
personalAuthData.validDateEnd,
personalAuthData.issuedBy,
lifeAccountId,
null,
personalAuthData.phoneNUm,
null
)
}
} }
\ No newline at end of file
...@@ -11,6 +11,7 @@ import android.view.LayoutInflater ...@@ -11,6 +11,7 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.content.FileProvider import androidx.core.content.FileProvider
import androidx.core.view.isVisible
import com.yidian.common.base.BaseFragment import com.yidian.common.base.BaseFragment
import com.yidian.shenghuoquan.newscontent.R import com.yidian.shenghuoquan.newscontent.R
import com.yidian.shenghuoquan.newscontent.adapter.BottomSelectAdapter import com.yidian.shenghuoquan.newscontent.adapter.BottomSelectAdapter
...@@ -24,6 +25,7 @@ import com.yidian.shenghuoquan.newscontent.ui.dialog.BottomSelectDialog ...@@ -24,6 +25,7 @@ import com.yidian.shenghuoquan.newscontent.ui.dialog.BottomSelectDialog
import com.yidian.shenghuoquan.newscontent.utils.BitmapUtil import com.yidian.shenghuoquan.newscontent.utils.BitmapUtil
import com.yidian.shenghuoquan.newscontent.utils.FileUtil import com.yidian.shenghuoquan.newscontent.utils.FileUtil
import com.yidian.shenghuoquan.newscontent.utils.KS3Core import com.yidian.shenghuoquan.newscontent.utils.KS3Core
import com.yidian.shenghuoquan.newscontent.widget.LifeAccountAuthBusinessInfoEditView
import java.io.File import java.io.File
/** /**
...@@ -34,7 +36,8 @@ import java.io.File ...@@ -34,7 +36,8 @@ import java.io.File
class LifeAccountBusinessLicenseAuthFragment : class LifeAccountBusinessLicenseAuthFragment :
BaseFragment<FragmentLifeAccountBusinessLicenseAuthBinding>(), View.OnClickListener, BaseFragment<FragmentLifeAccountBusinessLicenseAuthBinding>(), View.OnClickListener,
BottomSelectAdapter.OnItemClickListener<BottomSelectBean>, KS3Core.OnKS3TaskListener, BottomSelectAdapter.OnItemClickListener<BottomSelectBean>, KS3Core.OnKS3TaskListener,
IBusinessLicenseOCRCallback { IBusinessLicenseOCRCallback,
LifeAccountAuthBusinessInfoEditView.OnLifeAccountAuthBusinessInfoEditViewCallback {
/** /**
* sdcard/Android/data/package/cache * sdcard/Android/data/package/cache
...@@ -67,6 +70,8 @@ class LifeAccountBusinessLicenseAuthFragment : ...@@ -67,6 +70,8 @@ class LifeAccountBusinessLicenseAuthFragment :
private fun initListener() { private fun initListener() {
viewBinding.clBusinessLicenseUpload.setOnClickListener(this) viewBinding.clBusinessLicenseUpload.setOnClickListener(this)
viewBinding.ivClear.setOnClickListener(this) viewBinding.ivClear.setOnClickListener(this)
viewBinding.evRegistrationName.setOnLifeAccountAuthBusinessInfoEditViewCallback(this)
viewBinding.evRegistrationCode.setOnLifeAccountAuthBusinessInfoEditViewCallback(this)
} }
override fun onClick(v: View?) { override fun onClick(v: View?) {
...@@ -87,13 +92,18 @@ class LifeAccountBusinessLicenseAuthFragment : ...@@ -87,13 +92,18 @@ class LifeAccountBusinessLicenseAuthFragment :
R.id.iv_clear -> { R.id.iv_clear -> {
// 清除已上传的营业执照 // 清除已上传的营业执照
viewBinding.ivBusinessLicense.setImageDrawable(null) viewBinding.ivBusinessLicense.setImageDrawable(null)
LifeAccountAuthDataManager.merchantAuthData.isBusinessLicenseUpload = false
// 清除OCR或用户输入内容 // 清除OCR或用户输入内容
viewBinding.evRegistrationName.clearEditContent() viewBinding.evRegistrationName.clearEditContent()
viewBinding.evRegistrationCode.clearEditContent() viewBinding.evRegistrationCode.clearEditContent()
LifeAccountAuthDataManager.merchantAuthData.registrationName = ""
LifeAccountAuthDataManager.merchantAuthData.registrationCode = ""
// 设置上传区域可点击 // 设置上传区域可点击
viewBinding.clBusinessLicenseUpload.isEnabled = true viewBinding.clBusinessLicenseUpload.isEnabled = true
// 隐藏清除按钮 // 隐藏清除按钮
viewBinding.ivClear.visibility = View.GONE viewBinding.ivClear.visibility = View.GONE
// 检查下一步条件
(activity as LifeAccountEnterpriseAuthActivity).checkNextCondition()
} }
} }
} }
...@@ -179,11 +189,33 @@ class LifeAccountBusinessLicenseAuthFragment : ...@@ -179,11 +189,33 @@ class LifeAccountBusinessLicenseAuthFragment :
/** /**
* 执行营业执照OCR * 执行营业执照OCR
*/ */
private fun startBusinessLicenseOCR(objectKey: String?) { private fun startBusinessLicenseOCR(objectKey: String?, bucket: String?) {
val request = BusinessLicenseOCRBean.Request(objectKey) if (objectKey == null || bucket == null) {
Log.e(
Constant.LIFE_ACCOUNT_AUTH_TAG,
"business license objectKey or bucket is null, ocr suspend!"
)
return
}
val request = BusinessLicenseOCRBean.Request(objectKey, bucket)
ApiService.businessLicenseOCR(this, request) ApiService.businessLicenseOCR(this, request)
} }
/**
* 清除已输入的营业执照相关信息
* 用户更换商户类型操作
*/
fun clearBusinessLicenseInfo() {
// 清除已上传的营业执照
viewBinding.ivBusinessLicense.setImageDrawable(null)
viewBinding.ivClear.isVisible = false
// 清除OCR或用户输入内容
viewBinding.evRegistrationName.clearEditContent()
viewBinding.evRegistrationCode.clearEditContent()
// 设置上传区域可点击
viewBinding.clBusinessLicenseUpload.isEnabled = true
}
override fun onTaskStart() { override fun onTaskStart() {
} }
...@@ -201,8 +233,10 @@ class LifeAccountBusinessLicenseAuthFragment : ...@@ -201,8 +233,10 @@ class LifeAccountBusinessLicenseAuthFragment :
} }
override fun onTaskSuccess(bucket: String?, objectKey: String?) { override fun onTaskSuccess(bucket: String?, objectKey: String?) {
LifeAccountAuthDataManager.merchantAuthData.isBusinessLicenseUpload = true
objectKey?.let { LifeAccountAuthDataManager.merchantAuthData.businessLicenseObjectKey = it }
// 执行营业执照OCR // 执行营业执照OCR
startBusinessLicenseOCR(objectKey) startBusinessLicenseOCR(objectKey, bucket)
} }
override fun onTaskFailure(statesCode: Int, message: String?) { override fun onTaskFailure(statesCode: Int, message: String?) {
...@@ -210,11 +244,14 @@ class LifeAccountBusinessLicenseAuthFragment : ...@@ -210,11 +244,14 @@ class LifeAccountBusinessLicenseAuthFragment :
} }
override fun businessLicenseOCRSuccess(result: BusinessLicenseOCRBean.Response?) { override fun businessLicenseOCRSuccess(result: BusinessLicenseOCRBean.Response?) {
result?.let { LifeAccountAuthDataManager.generateMerchantAuthData(it) }
// 回显OCR结果 // 回显OCR结果
viewBinding.evRegistrationName.fillEditContent(result?.name) viewBinding.evRegistrationName.fillEditContent(result?.name)
viewBinding.evRegistrationCode.fillEditContent(result?.code) viewBinding.evRegistrationCode.fillEditContent(result?.code)
// 此时营业执照已上传并OCR识别完成 删除本地临时存储文件 // 此时营业执照已上传并OCR识别完成 删除本地临时存储文件
File(commonPath + Constant.FILE_PATH_BUSINESS_LICENSE).delete() File(commonPath + Constant.FILE_PATH_BUSINESS_LICENSE).delete()
// 检查下一步条件
(activity as LifeAccountEnterpriseAuthActivity).checkNextCondition()
} }
override fun businessLicenseOCRFailure(message: String?) { override fun businessLicenseOCRFailure(message: String?) {
...@@ -223,4 +260,22 @@ class LifeAccountBusinessLicenseAuthFragment : ...@@ -223,4 +260,22 @@ class LifeAccountBusinessLicenseAuthFragment :
"request business license ocr failure, message: $message" "request business license ocr failure, message: $message"
) )
} }
override fun onTextClear(from: LifeAccountAuthBusinessInfoEditView) {
if (from == viewBinding.evRegistrationName) {
LifeAccountAuthDataManager.merchantAuthData.registrationName = ""
} else {
LifeAccountAuthDataManager.merchantAuthData.registrationCode = ""
}
// 检查下一步条件
(activity as LifeAccountEnterpriseAuthActivity).checkNextCondition()
}
override fun onTextChange(from: LifeAccountAuthBusinessInfoEditView, text: String) {
if (from == viewBinding.evRegistrationName) {
LifeAccountAuthDataManager.merchantAuthData.registrationName = text
} else {
LifeAccountAuthDataManager.merchantAuthData.registrationCode = text
}
}
} }
\ No newline at end of file
package com.yidian.shenghuoquan.newscontent.ui.auth package com.yidian.shenghuoquan.newscontent.ui.auth
import android.os.Bundle import android.os.Bundle
import android.util.Log
import android.view.View import android.view.View
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import com.orhanobut.hawk.Hawk
import com.yidian.common.HawkConfig
import com.yidian.common.XRouterPathConstants import com.yidian.common.XRouterPathConstants
import com.yidian.common.base.BaseActivity import com.yidian.common.base.BaseActivity
import com.yidian.shenghuoquan.newscontent.R import com.yidian.shenghuoquan.newscontent.R
...@@ -10,6 +13,12 @@ import com.yidian.shenghuoquan.newscontent.adapter.BottomSelectAdapter ...@@ -10,6 +13,12 @@ import com.yidian.shenghuoquan.newscontent.adapter.BottomSelectAdapter
import com.yidian.shenghuoquan.newscontent.bean.BottomSelectBean import com.yidian.shenghuoquan.newscontent.bean.BottomSelectBean
import com.yidian.shenghuoquan.newscontent.constant.Constant import com.yidian.shenghuoquan.newscontent.constant.Constant
import com.yidian.shenghuoquan.newscontent.databinding.ActivityLifeAccountEnterpriseAuthBinding import com.yidian.shenghuoquan.newscontent.databinding.ActivityLifeAccountEnterpriseAuthBinding
import com.yidian.shenghuoquan.newscontent.http.ApiService
import com.yidian.shenghuoquan.newscontent.http.callback.IAuthBusinessLicenseCommitCallback
import com.yidian.shenghuoquan.newscontent.http.callback.IAuthEnterpriseCompleteCallback
import com.yidian.shenghuoquan.newscontent.http.callback.IAuthEnterpriseLegalIdentityCommitCallback
import com.yidian.shenghuoquan.newscontent.http.httpbean.AuthBusinessLicenseCommitBean
import com.yidian.shenghuoquan.newscontent.http.httpbean.AuthEnterpriseCompleteBean
import com.yidian.shenghuoquan.newscontent.ui.dialog.BottomSelectDialog import com.yidian.shenghuoquan.newscontent.ui.dialog.BottomSelectDialog
import com.yidian.shenghuoquan.newscontent.widget.LifeAccountAuthProcessView import com.yidian.shenghuoquan.newscontent.widget.LifeAccountAuthProcessView
import com.yidian.xpage.XPageManager import com.yidian.xpage.XPageManager
...@@ -20,7 +29,9 @@ import com.yidian.xpage.XPageManager ...@@ -20,7 +29,9 @@ import com.yidian.xpage.XPageManager
* description: 生活号企业认证 * description: 生活号企业认证
*/ */
class LifeAccountEnterpriseAuthActivity : BaseActivity<ActivityLifeAccountEnterpriseAuthBinding>(), class LifeAccountEnterpriseAuthActivity : BaseActivity<ActivityLifeAccountEnterpriseAuthBinding>(),
View.OnClickListener, BottomSelectAdapter.OnItemClickListener<BottomSelectBean> { View.OnClickListener, BottomSelectAdapter.OnItemClickListener<BottomSelectBean>,
IAuthBusinessLicenseCommitCallback, IAuthEnterpriseLegalIdentityCommitCallback,
IAuthEnterpriseCompleteCallback {
private val fragmentList: ArrayList<Fragment> by lazy { private val fragmentList: ArrayList<Fragment> by lazy {
arrayListOf<Fragment>( arrayListOf<Fragment>(
...@@ -57,6 +68,40 @@ class LifeAccountEnterpriseAuthActivity : BaseActivity<ActivityLifeAccountEnterp ...@@ -57,6 +68,40 @@ class LifeAccountEnterpriseAuthActivity : BaseActivity<ActivityLifeAccountEnterp
viewBind.btnNext.setOnClickListener(this) viewBind.btnNext.setOnClickListener(this)
} }
/**
* 检查是否可以进行下一步
*/
fun checkNextCondition() {
if (viewBind.pvAuthProcess.curProcess == LifeAccountAuthProcessView.PROCESS_ENTERPRISE_QUALIFICATION
&& LifeAccountAuthDataManager.merchantAuthData.merchantType != 0
&& LifeAccountAuthDataManager.merchantAuthData.isBusinessLicenseUpload
&& LifeAccountAuthDataManager.merchantAuthData.registrationName.isNotEmpty()
&& LifeAccountAuthDataManager.merchantAuthData.registrationCode.isNotEmpty()
) {
viewBind.btnNext.alpha = 1f
viewBind.btnNext.isEnabled = true
} else if (viewBind.pvAuthProcess.curProcess == LifeAccountAuthProcessView.PROCESS_ENTERPRISE_MANAGER
&& LifeAccountAuthDataManager.merchantAuthData.merchantType == Constant.TYPE_INDIVIDUAL_BUSINESS
&& LifeAccountAuthDataManager.personalAuthData.isFaceAuthPass
) {
viewBind.btnNext.alpha = 1f
viewBind.btnNext.isEnabled = true
} else if (viewBind.pvAuthProcess.curProcess == LifeAccountAuthProcessView.PROCESS_ENTERPRISE_MANAGER
&& LifeAccountAuthDataManager.merchantAuthData.merchantType == Constant.TYPE_COMMON_ENTERPRISE
&& LifeAccountAuthDataManager.personalAuthData.isIDCardPortraitFaceUpload
&& LifeAccountAuthDataManager.personalAuthData.isIDCardNationalEmblemFaceUpload
&& LifeAccountAuthDataManager.personalAuthData.realName.isNotEmpty()
&& LifeAccountAuthDataManager.personalAuthData.idCardNum.isNotEmpty()
&& LifeAccountAuthDataManager.personalAuthData.phoneNUm.isNotEmpty()
) {
viewBind.btnNext.alpha = 1f
viewBind.btnNext.isEnabled = true
} else {
viewBind.btnNext.alpha = 0.32f
viewBind.btnNext.isEnabled = false
}
}
override fun onClick(v: View?) { override fun onClick(v: View?) {
when (v?.id) { when (v?.id) {
R.id.iv_back -> { R.id.iv_back -> {
...@@ -87,22 +132,101 @@ class LifeAccountEnterpriseAuthActivity : BaseActivity<ActivityLifeAccountEnterp ...@@ -87,22 +132,101 @@ class LifeAccountEnterpriseAuthActivity : BaseActivity<ActivityLifeAccountEnterp
).show() ).show()
} }
R.id.btn_next -> { R.id.btn_next -> {
// TODO: 5/29/21 请求接口401 402 if (viewBind.pvAuthProcess.curProcess == LifeAccountAuthProcessView.PROCESS_ENTERPRISE_QUALIFICATION) {
viewBind.pvAuthProcess.setProcess(++viewBind.pvAuthProcess.curProcess) // TODO: 6/4/21 判断是否为个人生活号升级
viewBind.svMerchantType.enableSelect(false) ApiService.authBusinessLicenseCommit(
supportFragmentManager.beginTransaction() this,
.replace( LifeAccountAuthDataManager.generateAuthBusinessLicenseCommitRequest(
R.id.fragment_container, Hawk.get<Long>(HawkConfig.UserId),
fragmentList[viewBind.pvAuthProcess.curProcess] LifeAccountAuthDataManager.merchantAuthData.merchantType,
).commit() null
)
)
} else if (viewBind.pvAuthProcess.curProcess == LifeAccountAuthProcessView.PROCESS_ENTERPRISE_MANAGER) {
if (LifeAccountAuthDataManager.merchantAuthData.merchantType == Constant.TYPE_INDIVIDUAL_BUSINESS) {
val params = HashMap<String, String>()
params["code"] =
LifeAccountAuthDataManager.merchantAuthData.registrationCode
ApiService.authEnterpriseComplete(this, params)
} else if (LifeAccountAuthDataManager.merchantAuthData.merchantType == Constant.TYPE_COMMON_ENTERPRISE) {
ApiService.authEnterpriseLegalIdentityCommit(
this,
LifeAccountAuthDataManager.generateAuthEnterpriseLegalIdentityCommitRequest(
123, null
)
)
}
}
} }
} }
} }
override fun onItemClick(view: View, position: Int, data: BottomSelectBean) { override fun onItemClick(view: View, position: Int, data: BottomSelectBean) {
if (viewBind.svMerchantType.getCurSelectItem().isNotEmpty()) {
// 更换商户类型,清空营业执照图片、清空注册名称和注册码
(fragmentList[0] as LifeAccountBusinessLicenseAuthFragment).clearBusinessLicenseInfo()
}
// 回显选择的商户类型 // 回显选择的商户类型
viewBind.svMerchantType.setContentResult(data.item) viewBind.svMerchantType.setContentResult(data.item)
// TODO: 5/29/21 清空营业执照图片、清空注册名称和注册码 // 保存选择的商户类型
LifeAccountAuthDataManager.merchantAuthData.merchantType =
if (data.item == Constant.ITEM_INDIVIDUAL_BUSINESSES) Constant.TYPE_INDIVIDUAL_BUSINESS else Constant.TYPE_COMMON_ENTERPRISE
// 检查下一步条件
checkNextCondition()
}
override fun authBusinessLicenseCommitSuccess(result: AuthBusinessLicenseCommitBean.Response?) {
// 营业执照提交成功
viewBind.pvAuthProcess.setProcess(++viewBind.pvAuthProcess.curProcess)
viewBind.svMerchantType.enableSelect(false)
// 向身份信息fragment传参
val fragment = fragmentList[viewBind.pvAuthProcess.curProcess]
val bundle = Bundle()
bundle.putInt(
Constant.TYPE_AUTH,
LifeAccountAuthDataManager.merchantAuthData.merchantType
)
fragment.arguments = bundle
supportFragmentManager.beginTransaction()
.replace(
R.id.fragment_container, fragment
).commit()
checkNextCondition()
}
override fun authBusinessLicenseCommitFailure(message: String?) {
Log.e(
Constant.LIFE_ACCOUNT_AUTH_TAG,
"request auth business license commit failure, message: $message"
)
}
override fun authEnterpriseLegalIdentityCommitSuccess() {
// 普通企业法人身份信息提交成功 请求企业认证完成接口
// TODO: 6/6/21 跳转提交成功页面
val params = HashMap<String, String>()
params["code"] =
LifeAccountAuthDataManager.merchantAuthData.registrationCode
ApiService.authEnterpriseComplete(this, params)
}
override fun authEnterpriseLegalIdentityCommitFailure(message: String?) {
Log.e(
Constant.LIFE_ACCOUNT_AUTH_TAG,
"request auth enterprise legal identity commit failure, message: $message"
)
}
override fun authEnterpriseCompleteSuccess(result: AuthEnterpriseCompleteBean.Response?) {
// 企业认证完成
// TODO: 6/6/21 跳转提交成功页面
}
override fun authEnterpriseCompleteFailure(message: String?) {
Log.e(
Constant.LIFE_ACCOUNT_AUTH_TAG,
"request auth enterprise complete failure, message: $message"
)
} }
} }
\ No newline at end of file
...@@ -14,6 +14,7 @@ import android.util.Log ...@@ -14,6 +14,7 @@ import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.view.isVisible
import com.megvii.demo.activity.IDCardDetectActivity import com.megvii.demo.activity.IDCardDetectActivity
import com.megvii.demo.utils.Configuration import com.megvii.demo.utils.Configuration
import com.megvii.idcardquality.IDCardQualityLicenseManager import com.megvii.idcardquality.IDCardQualityLicenseManager
...@@ -30,6 +31,8 @@ import com.yidian.shenghuoquan.newscontent.bean.BottomSelectBean ...@@ -30,6 +31,8 @@ import com.yidian.shenghuoquan.newscontent.bean.BottomSelectBean
import com.yidian.shenghuoquan.newscontent.constant.Constant import com.yidian.shenghuoquan.newscontent.constant.Constant
import com.yidian.shenghuoquan.newscontent.databinding.FragmentLifeAccountIdCardAuthBinding import com.yidian.shenghuoquan.newscontent.databinding.FragmentLifeAccountIdCardAuthBinding
import com.yidian.shenghuoquan.newscontent.http.ApiService import com.yidian.shenghuoquan.newscontent.http.ApiService
import com.yidian.shenghuoquan.newscontent.http.callback.IAuthEnterpriseLiveIdentityCallback
import com.yidian.shenghuoquan.newscontent.http.callback.IAuthIndividualBusinessIdentityCommitCallback
import com.yidian.shenghuoquan.newscontent.http.callback.IAuthLiveIdentityCallback import com.yidian.shenghuoquan.newscontent.http.callback.IAuthLiveIdentityCallback
import com.yidian.shenghuoquan.newscontent.http.callback.IAuthPersonalCheckCallback import com.yidian.shenghuoquan.newscontent.http.callback.IAuthPersonalCheckCallback
import com.yidian.shenghuoquan.newscontent.http.httpbean.* import com.yidian.shenghuoquan.newscontent.http.httpbean.*
...@@ -53,7 +56,8 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth ...@@ -53,7 +56,8 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth
IGetIDCardOCRCallback, AuthPersonalGetTokenCallback, IdentifyIdOcrVerifyCallback, PreCallback, IGetIDCardOCRCallback, AuthPersonalGetTokenCallback, IdentifyIdOcrVerifyCallback, PreCallback,
DetectCallback, KS3Core.OnKS3TaskListener, IAuthPersonalCheckCallback, DetectCallback, KS3Core.OnKS3TaskListener, IAuthPersonalCheckCallback,
IAuthLiveIdentityCallback, LifeAccountAuthImageView.OnLifeAccountAuthImageViewCallback, IAuthLiveIdentityCallback, LifeAccountAuthImageView.OnLifeAccountAuthImageViewCallback,
LifeAccountAuthIdentityInfoEditView.OnLifeAccountAuthIdentityInfoEditViewCallback { LifeAccountAuthIdentityInfoEditView.OnLifeAccountAuthIdentityInfoEditViewCallback,
IAuthIndividualBusinessIdentityCommitCallback, IAuthEnterpriseLiveIdentityCallback {
companion object { companion object {
// 身份证采集页面回传数据 // 身份证采集页面回传数据
...@@ -89,6 +93,11 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth ...@@ -89,6 +93,11 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth
*/ */
private val megLiveManager by lazy { MegLiveManager.getInstance() } private val megLiveManager by lazy { MegLiveManager.getInstance() }
/**
* 当前认证类型
*/
private var authType: Int? = 0
override fun createViewBinding( override fun createViewBinding(
inflater: LayoutInflater, inflater: LayoutInflater,
container: ViewGroup? container: ViewGroup?
...@@ -104,7 +113,20 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth ...@@ -104,7 +113,20 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth
} }
private fun initView() { private fun initView() {
authType = arguments?.getInt(Constant.TYPE_AUTH, 0)
when (authType) {
Constant.TYPE_AUTH_PERSONAL -> {
viewBinding.evRealName.setTitleContent(resources.getString(R.string.real_name))
}
Constant.TYPE_AUTH_INDIVIDUAL_BUSINESS -> {
viewBinding.evRealName.setTitleContent(resources.getString(R.string.individual_business_manager_name))
}
Constant.TYPE_AUTH_COMMON_ENTERPRISE -> {
viewBinding.evRealName.setTitleContent(resources.getString(R.string.enterprise_legal_name))
}
}
viewBinding.evMobile.isVisible = authType == Constant.TYPE_AUTH_COMMON_ENTERPRISE
viewBinding.clFaceAuth.isVisible = authType == Constant.TYPE_AUTH_INDIVIDUAL_BUSINESS
} }
private fun initListener() { private fun initListener() {
...@@ -115,6 +137,7 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth ...@@ -115,6 +137,7 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth
viewBinding.ivIdCardNationalEmblemFace.setOnLifeAccountAuthImageViewCallback(this) viewBinding.ivIdCardNationalEmblemFace.setOnLifeAccountAuthImageViewCallback(this)
viewBinding.evRealName.setOnLifeAccountAuthIdentityInfoEditViewCallback(this) viewBinding.evRealName.setOnLifeAccountAuthIdentityInfoEditViewCallback(this)
viewBinding.evIdCardNumber.setOnLifeAccountAuthIdentityInfoEditViewCallback(this) viewBinding.evIdCardNumber.setOnLifeAccountAuthIdentityInfoEditViewCallback(this)
viewBinding.evMobile.setOnLifeAccountAuthIdentityInfoEditViewCallback(this)
} }
/** /**
...@@ -196,10 +219,22 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth ...@@ -196,10 +219,22 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth
R.id.iv_face_auth_start -> { R.id.iv_face_auth_start -> {
// 判断是否满足条件进行活体检测 // 判断是否满足条件进行活体检测
if (!checkFaceAuthCondition()) return if (!checkFaceAuthCondition()) return
ApiService.authPersonalCheck( when (authType) {
this, Constant.TYPE_AUTH_PERSONAL -> {
LifeAccountAuthDataManager.generateAuthPersonalCheckRequest() ApiService.authPersonalCheck(
) this,
LifeAccountAuthDataManager.generateAuthPersonalCheckRequest()
)
}
Constant.TYPE_AUTH_INDIVIDUAL_BUSINESS -> {
ApiService.authIndividualBusinessIdentityCommit(
this,
LifeAccountAuthDataManager.generateAuthIndividualBusinessIdentityCommitRequest(
Constant.TYPE_INDIVIDUAL_BUSINESS
)
)
}
}
} }
} }
} }
...@@ -413,8 +448,7 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth ...@@ -413,8 +448,7 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth
GetIDCardOCRBean.Request( GetIDCardOCRBean.Request(
LifeAccountAuthDataManager.personalAuthData.idCardPortraitFaceObjectKey, LifeAccountAuthDataManager.personalAuthData.idCardPortraitFaceObjectKey,
LifeAccountAuthDataManager.personalAuthData.idCardNationalEmblemFaceObjectKey, LifeAccountAuthDataManager.personalAuthData.idCardNationalEmblemFaceObjectKey,
LifeAccountAuthDataManager.personalAuthData.idCardPortraitFaceBucket, LifeAccountAuthDataManager.personalAuthData.idCardPortraitFaceBucket
LifeAccountAuthDataManager.personalAuthData.idCardNationalEmblemFaceBucket
) )
) )
} }
...@@ -459,15 +493,24 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth ...@@ -459,15 +493,24 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth
changeFaceAuthUI(true) changeFaceAuthUI(true)
// 删除活体检测数据 // 删除活体检测数据
File(cachePath + Constant.FILE_PATH_ALIVE_DETECT_VERIFY_DATA).delete() File(cachePath + Constant.FILE_PATH_ALIVE_DETECT_VERIFY_DATA).delete()
// 回调server 保存活体识别认证状态
ApiService.authLiveIdentity(this)
// 检查下一步条件
(activity as LifeAccountPersonalAuthActivity).checkNextCondition()
// 锁定当前输入状态 即完成人脸验证后无法修改身份证照片、姓名、身份证号 // 锁定当前输入状态 即完成人脸验证后无法修改身份证照片、姓名、身份证号
viewBinding.ivIdCardPortraitFace.disableModify() viewBinding.ivIdCardPortraitFace.disableModify()
viewBinding.ivIdCardNationalEmblemFace.disableModify() viewBinding.ivIdCardNationalEmblemFace.disableModify()
viewBinding.evRealName.disableModify() viewBinding.evRealName.disableModify()
viewBinding.evIdCardNumber.disableModify() viewBinding.evIdCardNumber.disableModify()
// 回调server 保存活体识别认证状态
if (authType == Constant.TYPE_AUTH_PERSONAL) {
ApiService.authLiveIdentity(this)
// 检查下一步条件
(activity as LifeAccountPersonalAuthActivity).checkNextCondition()
} else {
val params = HashMap<String, String>(2)
params["code"] = LifeAccountAuthDataManager.merchantAuthData.registrationCode
params["idcard_number"] = LifeAccountAuthDataManager.personalAuthData.idCardNum
ApiService.authEnterpriseLiveIdentity(this, params)
// 检查下一步条件
(activity as LifeAccountEnterpriseAuthActivity).checkNextCondition()
}
} }
} }
...@@ -614,21 +657,65 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth ...@@ -614,21 +657,65 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth
} }
override fun onTextClear(from: LifeAccountAuthIdentityInfoEditView) { override fun onTextClear(from: LifeAccountAuthIdentityInfoEditView) {
if (from == viewBinding.evRealName) { when (from) {
LifeAccountAuthDataManager.personalAuthData.realName = "" viewBinding.evRealName -> {
} else { LifeAccountAuthDataManager.personalAuthData.realName = ""
LifeAccountAuthDataManager.personalAuthData.idCardNum = "" }
viewBinding.evIdCardNumber -> {
LifeAccountAuthDataManager.personalAuthData.idCardNum = ""
}
viewBinding.evMobile -> {
LifeAccountAuthDataManager.personalAuthData.phoneNUm = ""
}
} }
} }
override fun onTextChange(from: LifeAccountAuthIdentityInfoEditView, text: String) { override fun onTextChange(from: LifeAccountAuthIdentityInfoEditView, text: String) {
if (from == viewBinding.evRealName) { when (from) {
LifeAccountAuthDataManager.personalAuthData.realName = text viewBinding.evRealName -> {
} else { LifeAccountAuthDataManager.personalAuthData.realName = text
LifeAccountAuthDataManager.personalAuthData.idCardNum = text }
viewBinding.evIdCardNumber -> {
LifeAccountAuthDataManager.personalAuthData.idCardNum = text
}
viewBinding.evMobile -> {
LifeAccountAuthDataManager.personalAuthData.phoneNUm = text
}
} }
} }
override fun authIndividualBusinessIdentityCommitSuccess() {
// 身份信息校验成功后才允许进行人脸验证
// 若存在上一次活体检测数据则删除 处理活体检测失败 再次进入
File(cachePath + Constant.FILE_PATH_ALIVE_DETECT_VERIFY_DATA).delete()
// 跳转人脸认证
ApiService.authPersonalGetToken(
this, AuthPersonalGetTokenBean.Request(
LifeAccountAuthDataManager.personalAuthData.idCardNum,
LifeAccountAuthDataManager.personalAuthData.realName,
Constant.TYPE_MEG_LIVE
)
)
}
override fun authIndividualBusinessIdentityCommitFailure(message: String?) {
Log.e(
Constant.LIFE_ACCOUNT_AUTH_TAG,
"request auth individual business identity commit failure, message: $message"
)
}
override fun authEnterpriseLiveIdentitySuccess() {
}
override fun authEnterpriseLiveIdentityFailure(message: String?) {
Log.e(
Constant.LIFE_ACCOUNT_AUTH_TAG,
"request auth enterprise live identity failure: message: $message"
)
}
/** /**
* 人脸验证结果UI * 人脸验证结果UI
* @param result true为验证通过 false为验证未通过 * @param result true为验证通过 false为验证未通过
......
...@@ -130,9 +130,7 @@ class IDCardTestActivity : BaseActivity<ActivityIdcardBinding>() { ...@@ -130,9 +130,7 @@ class IDCardTestActivity : BaseActivity<ActivityIdcardBinding>() {
GetIDCardOCRBean.Request( GetIDCardOCRBean.Request(
idCardFrontObjectKey, idCardFrontObjectKey,
idCardBackObjectKey, idCardBackObjectKey,
idCardFrontBucket, idCardFrontBucket)
idCardBackBucket
)
ApiService.getIDCardOCR(object : IGetIDCardOCRCallback { ApiService.getIDCardOCR(object : IGetIDCardOCRCallback {
override fun getIDCardOCRSuccess(result: GetIDCardOCRBean.Response?) { override fun getIDCardOCRSuccess(result: GetIDCardOCRBean.Response?) {
Log.d(KS3Core.TAG, "name: ${result?.posit?.name}, id num: ${result?.posit?.idcard_number}") Log.d(KS3Core.TAG, "name: ${result?.posit?.name}, id num: ${result?.posit?.idcard_number}")
......
...@@ -19,6 +19,10 @@ object FileUtil { ...@@ -19,6 +19,10 @@ object FileUtil {
*/ */
fun generateFileFromUri(context: Context?, uri: Uri?, path: String) { fun generateFileFromUri(context: Context?, uri: Uri?, path: String) {
if (uri != null) { if (uri != null) {
val file = File(path)
if (file.exists()) file.delete()
file.parentFile?.mkdirs()
file.createNewFile()
context?.contentResolver?.openInputStream(uri)?.copyTo(FileOutputStream(path)) context?.contentResolver?.openInputStream(uri)?.copyTo(FileOutputStream(path))
} }
} }
......
package com.yidian.shenghuoquan.newscontent.widget package com.yidian.shenghuoquan.newscontent.widget
import android.content.Context import android.content.Context
import android.graphics.Color
import android.text.Editable import android.text.Editable
import android.text.TextUtils import android.text.TextUtils
import android.text.TextWatcher import android.text.TextWatcher
...@@ -31,6 +32,13 @@ class LifeAccountAuthBusinessInfoEditView @JvmOverloads constructor( ...@@ -31,6 +32,13 @@ class LifeAccountAuthBusinessInfoEditView @JvmOverloads constructor(
) )
) )
private var callback: OnLifeAccountAuthBusinessInfoEditViewCallback? = null
/**
* 是否输入错误标识位
*/
private var isInputError = false
init { init {
val typedArray = val typedArray =
context.obtainStyledAttributes(attrs, R.styleable.LifeAccountAuthBusinessInfoEditView) context.obtainStyledAttributes(attrs, R.styleable.LifeAccountAuthBusinessInfoEditView)
...@@ -47,18 +55,28 @@ class LifeAccountAuthBusinessInfoEditView @JvmOverloads constructor( ...@@ -47,18 +55,28 @@ class LifeAccountAuthBusinessInfoEditView @JvmOverloads constructor(
* 展示错误提示 * 展示错误提示
*/ */
fun showErrorTips(tips: String) { fun showErrorTips(tips: String) {
viewBinding.tvErrorTips.visibility = View.VISIBLE viewBinding.tvErrorTips.isVisible = true
viewBinding.tvErrorTips.text = tips viewBinding.tvErrorTips.text = tips
} }
/**
* 隐藏错误提示
*/
private fun dismissErrorTips() {
viewBinding.tvErrorTips.isVisible = false
viewBinding.tvErrorTips.text = ""
}
/** /**
* 清除输入的文字 * 清除输入的文字
*/ */
fun clearEditContent() { fun clearEditContent() {
viewBinding.etContent.setText("") viewBinding.etContent.setText("")
if (viewBinding.tvErrorTips.visibility == View.VISIBLE) { if (isInputError) {
viewBinding.tvErrorTips.visibility = View.GONE dismissErrorTips()
cancelHighLightEditContent()
} }
callback?.onTextClear(this)
} }
/** /**
...@@ -79,6 +97,22 @@ class LifeAccountAuthBusinessInfoEditView @JvmOverloads constructor( ...@@ -79,6 +97,22 @@ class LifeAccountAuthBusinessInfoEditView @JvmOverloads constructor(
isEnabled = false isEnabled = false
} }
/**
* 高亮显示输入文本
*/
fun highLightEditContent() {
isInputError = true
viewBinding.etContent.setTextColor(Color.parseColor("#FFFF3A3A"))
}
/**
* 取消高亮显示输入文本
*/
private fun cancelHighLightEditContent() {
isInputError = false
viewBinding.etContent.setTextColor(Color.parseColor("#FF333333"))
}
override fun onClick(v: View?) { override fun onClick(v: View?) {
if (v?.id == R.id.iv_clear) { if (v?.id == R.id.iv_clear) {
// 清除输入框中的内容 // 清除输入框中的内容
...@@ -96,6 +130,27 @@ class LifeAccountAuthBusinessInfoEditView @JvmOverloads constructor( ...@@ -96,6 +130,27 @@ class LifeAccountAuthBusinessInfoEditView @JvmOverloads constructor(
override fun afterTextChanged(s: Editable?) { override fun afterTextChanged(s: Editable?) {
// 处理一键清除按钮 // 处理一键清除按钮
viewBinding.ivClear.visibility = if (TextUtils.isEmpty(s)) View.GONE else View.VISIBLE viewBinding.ivClear.isVisible = !TextUtils.isEmpty(s)
callback?.onTextChange(this, s.toString())
if (isInputError) {
dismissErrorTips()
cancelHighLightEditContent()
}
}
fun setOnLifeAccountAuthBusinessInfoEditViewCallback(callback: OnLifeAccountAuthBusinessInfoEditViewCallback) {
this.callback = callback
}
interface OnLifeAccountAuthBusinessInfoEditViewCallback {
/**
* 清除内容
*/
fun onTextClear(from: LifeAccountAuthBusinessInfoEditView)
/**
* 内容修改
*/
fun onTextChange(from: LifeAccountAuthBusinessInfoEditView, text: String)
} }
} }
\ No newline at end of file
...@@ -7,7 +7,6 @@ import android.text.TextUtils ...@@ -7,7 +7,6 @@ import android.text.TextUtils
import android.text.TextWatcher import android.text.TextWatcher
import android.util.AttributeSet import android.util.AttributeSet
import android.view.View import android.view.View
import androidx.core.view.isVisible
import com.yidian.nightmode.widget.YdConstraintLayout import com.yidian.nightmode.widget.YdConstraintLayout
import com.yidian.shenghuoquan.newscontent.R import com.yidian.shenghuoquan.newscontent.R
import com.yidian.shenghuoquan.newscontent.databinding.ViewLifeAccountAuthIdentityInfoEditBinding import com.yidian.shenghuoquan.newscontent.databinding.ViewLifeAccountAuthIdentityInfoEditBinding
...@@ -51,6 +50,13 @@ class LifeAccountAuthIdentityInfoEditView @JvmOverloads constructor( ...@@ -51,6 +50,13 @@ class LifeAccountAuthIdentityInfoEditView @JvmOverloads constructor(
viewBinding.etContent.addTextChangedListener(this) viewBinding.etContent.addTextChangedListener(this)
} }
/**
* 设置标题
*/
fun setTitleContent(content: String) {
viewBinding.tvContent.text = content
}
/** /**
* 展示错误提示 * 展示错误提示
*/ */
...@@ -62,7 +68,7 @@ class LifeAccountAuthIdentityInfoEditView @JvmOverloads constructor( ...@@ -62,7 +68,7 @@ class LifeAccountAuthIdentityInfoEditView @JvmOverloads constructor(
/** /**
* 隐藏错误提示 * 隐藏错误提示
*/ */
fun dismissErrorTips() { private fun dismissErrorTips() {
viewBinding.tvErrorTips.visibility = View.GONE viewBinding.tvErrorTips.visibility = View.GONE
viewBinding.tvErrorTips.text = "" viewBinding.tvErrorTips.text = ""
} }
...@@ -93,7 +99,7 @@ class LifeAccountAuthIdentityInfoEditView @JvmOverloads constructor( ...@@ -93,7 +99,7 @@ class LifeAccountAuthIdentityInfoEditView @JvmOverloads constructor(
* 禁止修改 * 禁止修改
*/ */
fun disableModify() { fun disableModify() {
viewBinding.ivClear.isVisible = false viewBinding.ivClear.visibility = View.GONE
isEnabled = false isEnabled = false
} }
......
...@@ -79,6 +79,15 @@ ...@@ -79,6 +79,15 @@
app:LifeAccountAuthIdentityInfoEditView_hint_text="@string/input_id_card_number" app:LifeAccountAuthIdentityInfoEditView_hint_text="@string/input_id_card_number"
app:layout_constraintTop_toBottomOf="@id/ev_real_name" /> app:layout_constraintTop_toBottomOf="@id/ev_real_name" />
<com.yidian.shenghuoquan.newscontent.widget.LifeAccountAuthIdentityInfoEditView
android:id="@+id/ev_mobile"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
app:LifeAccountAuthIdentityInfoEditView_content_text="@string/enterprise_legal_mobile"
app:LifeAccountAuthIdentityInfoEditView_hint_text="@string/input_id_card_number"
app:layout_constraintTop_toBottomOf="@id/ev_id_card_number" />
<com.yidian.nightmode.widget.YdConstraintLayout <com.yidian.nightmode.widget.YdConstraintLayout
android:id="@+id/cl_face_auth" android:id="@+id/cl_face_auth"
android:layout_width="match_parent" android:layout_width="match_parent"
...@@ -87,6 +96,7 @@ ...@@ -87,6 +96,7 @@
android:paddingTop="17dp" android:paddingTop="17dp"
android:paddingEnd="12dp" android:paddingEnd="12dp"
android:paddingBottom="6dp" android:paddingBottom="6dp"
android:visibility="gone"
app:layout_constraintTop_toBottomOf="@id/ev_id_card_number"> app:layout_constraintTop_toBottomOf="@id/ev_id_card_number">
<com.yidian.nightmode.widget.YdTextView <com.yidian.nightmode.widget.YdTextView
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools ="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_name">Yac</string> <string name="app_name">Yac</string>
<string name="action_settings">Settings</string> <string name="action_settings">Settings</string>
<!-- Strings used for fragments for navigation --> <!-- Strings used for fragments for navigation -->
...@@ -121,5 +121,8 @@ ...@@ -121,5 +121,8 @@
<string name="registration_code_description">统一社会信用代码(注册号)将作为生活号唯一企业身份标识,请仔细核对,确认无误。</string> <string name="registration_code_description">统一社会信用代码(注册号)将作为生活号唯一企业身份标识,请仔细核对,确认无误。</string>
<string name="next_step">下一步</string> <string name="next_step">下一步</string>
<string name="cancel">取消</string> <string name="cancel">取消</string>
<string name="enterprise_legal_name">法人姓名</string>
<string name="enterprise_legal_mobile">法人手机号</string>
<string name="individual_business_manager_name">经营者姓名</string>
</resources> </resources>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment