Commit c2a7eda4 authored by shiyl's avatar shiyl

Merge branch 'dev' into dev_7.2

# Conflicts:
#	Components/newscontent/src/main/java/com/yidian/shenghuoquan/newscontent/ui/center/MerchantCenterActivity.kt
parents 66222f61 3efd3177
......@@ -82,4 +82,10 @@ dependencies {
//https://github.com/CymChad/BaseRecyclerViewAdapterHelper
api "com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.4"
implementation ('com.yidian.android:CommonComponent:0.0.88'){
exclude(group: 'com.yidian.android', module: 'NetworkImageLib')
}
implementation 'com.github.bumptech.glide:glide:4.11.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
}
\ No newline at end of file
......@@ -2,11 +2,40 @@ package com.yidian.common
import android.app.Activity
import android.app.Application
import com.scwang.smart.refresh.footer.ClassicsFooter
import com.scwang.smart.refresh.header.ClassicsHeader
import com.scwang.smart.refresh.layout.SmartRefreshLayout
import com.scwang.smart.refresh.layout.constant.SpinnerStyle
open class YdBaseApplication: Application(){
companion object{
lateinit var context: Application
var activityList = ArrayList<Activity>()
open class YdBaseApplication : Application() {
companion object {
lateinit var context: Application
var activityList = ArrayList<Activity>()
}
override fun onCreate() {
super.onCreate()
initSmartRefreshLayout()
}
/**
* 设置刷新 默认的header和footer
*/
private fun initSmartRefreshLayout() {
//设置全局的Header构建器
SmartRefreshLayout.setDefaultRefreshHeaderCreator { context, layout ->
layout.setPrimaryColorsId(android.R.color.transparent)//全局设置主题颜色
ClassicsHeader(context) //指定为经典Header,默认是 贝塞尔雷达Header
}
//设置全局的Footer构建器
SmartRefreshLayout.setDefaultRefreshFooterCreator { context, layout ->
layout.setEnableLoadMoreWhenContentNotFull(true) //内容不满一页时候启用加载更多
val footer = ClassicsFooter(context)
footer.setBackgroundResource(android.R.color.transparent)
footer.setDrawableSize(20f)
footer.spinnerStyle = SpinnerStyle.FixedBehind //设置为固定在背后模式
footer //指定为经典Footer,默认是 BallPulseFooter
}
}
}
\ No newline at end of file
}
......@@ -101,4 +101,4 @@ class HttpParamsUtils{
return SecretUtil.sign(sb.toString())
}
}
}
\ No newline at end of file
}
......@@ -79,4 +79,9 @@ dependencies {
implementation(name: 'meglive_still', ext: 'aar')
implementation project(':idcard_quality')
implementation files('libs/ks3-androidsdk-1.4.9.jar')
implementation ('com.yidian.android:CommonComponent:0.0.88'){
exclude(group: 'com.yidian.android', module: 'NetworkImageLib')
}
implementation 'com.github.bumptech.glide:glide:4.11.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
}
\ No newline at end of file
......@@ -20,7 +20,7 @@
{
"category": "农林畜牧",
"list": [
"养殖/繁",
"养殖/繁",
"农民",
"农业种植",
"花匠"
......@@ -42,7 +42,7 @@
"list": [
"出租车",
"专职司机",
"物运输",
"物运输",
"汽车租赁",
"代驾"
]
......@@ -82,7 +82,7 @@
]
},
{
"category": "房销售",
"category": "房销售",
"list": [
"房屋中介",
"房产顾问",
......@@ -105,7 +105,7 @@
]
},
{
"category": "生制造",
"category": "生制造",
"list": [
"汽车制造",
"数控车床",
......@@ -113,7 +113,7 @@
"电焊工",
"纺织制造",
"农业生产",
"视频加工",
"食品加工",
"手工制造"
]
},
......
......@@ -41,7 +41,7 @@ class LifeAccountIdentityAdapter(val context: Context) :
holder.itemView.tv_life_identity.setBackgroundResource(R.drawable.bg_item_manager_selected_on)
holder.itemView.tv_life_identity.setTextColor(ContextCompat.getColor(context, R.color.color_FFFFFFFF))
} else {
holder.itemView.tv_life_identity.text = "普通管理员"
holder.itemView.tv_life_identity.text = "普通员工"
holder.itemView.tv_life_identity.setBackgroundResource(R.drawable.bg_item_manager_selected_off)
holder.itemView.tv_life_identity.setTextColor(ContextCompat.getColor(context, R.color.color_FFEAAF35))
}
......
......@@ -15,85 +15,84 @@ import com.yidian.shenghuoquan.newscontent.http.httpbean.GetConfigListBean
* description: 商户服务adapter
*/
class MerchantServiceFunctionAdapter @JvmOverloads constructor(
val context: Context,
data: List<GetConfigListBean.Function>? = null,
val listener: OnItemClickListener? = null
val context: Context,
data: List<GetConfigListBean.Function>? = null,
val listener: OnItemClickListener? = null
) :
RecyclerView.Adapter<MerchantServiceFunctionAdapter.MerchantServiceViewHolder>() {
RecyclerView.Adapter<MerchantServiceFunctionAdapter.MerchantServiceViewHolder>() {
companion object {
// 是否显示标识
private const val FUNCTION_SHOW = 1
}
companion object {
// 是否显示标识
private const val FUNCTION_SHOW = 1
}
/**
* 数据源
*/
private val serviceData by lazy { ArrayList<GetConfigListBean.Function>() }
/**
* 数据源
*/
private val serviceData by lazy { ArrayList<GetConfigListBean.Function>() }
private lateinit var viewBinding: ItemMerchantServiceFunctionBinding
private lateinit var viewBinding: ItemMerchantServiceFunctionBinding
init {
// 将不显示的数据去除
data?.let {
(it as ArrayList<GetConfigListBean.Function>).iterator().apply {
while (hasNext()) {
if (next().show != FUNCTION_SHOW) remove()
}
}
serviceData.addAll(it)
init {
// 将不显示的数据去除
data?.let {
(it as ArrayList<GetConfigListBean.Function>).iterator().apply {
while (hasNext()) {
if (next().show != FUNCTION_SHOW) remove()
}
}
serviceData.addAll(it)
}
}
/**
* 更新数据 将不显示的数据去除
*/
fun updateData(data: List<GetConfigListBean.Function>?) {
data?.let {
serviceData.clear()
(it as ArrayList<GetConfigListBean.Function>).iterator().apply {
while (hasNext()) {
if (next().show != FUNCTION_SHOW) remove()
}
}
serviceData.addAll(it)
notifyDataSetChanged()
/**
* 更新数据 将不显示的数据去除
*/
fun updateData(data: List<GetConfigListBean.Function>?) {
data?.let {
serviceData.clear()
(it as ArrayList<GetConfigListBean.Function>).iterator().apply {
while (hasNext()) {
if (next().show != FUNCTION_SHOW) remove()
}
}
serviceData.addAll(it)
notifyDataSetChanged()
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MerchantServiceViewHolder {
viewBinding = ItemMerchantServiceFunctionBinding.inflate(
LayoutInflater.from(
parent.context
), parent, false
)
return MerchantServiceViewHolder(viewBinding.root, viewBinding)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MerchantServiceViewHolder {
viewBinding = ItemMerchantServiceFunctionBinding.inflate(
LayoutInflater.from(
parent.context
), parent, false
)
return MerchantServiceViewHolder(viewBinding.root, viewBinding)
}
override fun onBindViewHolder(holder: MerchantServiceViewHolder, position: Int) {
val data = serviceData[position]
if (data.show != FUNCTION_SHOW) return
if (data.icon_url.isNotEmpty()) {
Glide.with(context).load(data.icon_url).into(viewBinding.ivService)
} else {
// TODO: 6/11/21 显示本地icon
}
holder.viewBinding.tvService.text = data.function_name
holder.viewBinding.root.setOnClickListener { listener?.onItemClick(it, position, data) }
override fun onBindViewHolder(holder: MerchantServiceViewHolder, position: Int) {
val data = serviceData[position]
if (data.icon_url.isNotEmpty()) {
Glide.with(context).load(data.icon_url).into(viewBinding.ivService)
} else {
// TODO: 6/11/21 显示本地icon
}
holder.viewBinding.tvService.text = data.function_name
holder.viewBinding.root.setOnClickListener { listener?.onItemClick(it, position, data) }
}
override fun getItemCount(): Int {
return serviceData.size
}
override fun getItemCount(): Int {
return serviceData.size
}
class MerchantServiceViewHolder(
itemView: View,
val viewBinding: ItemMerchantServiceFunctionBinding
) :
RecyclerView.ViewHolder(itemView)
class MerchantServiceViewHolder(
itemView: View,
val viewBinding: ItemMerchantServiceFunctionBinding
) :
RecyclerView.ViewHolder(itemView)
interface OnItemClickListener {
fun onItemClick(view: View, position: Int, data: GetConfigListBean.Function)
}
interface OnItemClickListener {
fun onItemClick(view: View, position: Int, data: GetConfigListBean.Function)
}
}
\ No newline at end of file
}
......@@ -40,14 +40,29 @@ class MerchantServiceGroupAdapter @JvmOverloads constructor(
init {
// 将不显示的数据去除
data?.let {
it.forEach { menuItem ->
if (menuItem.show == GROUP_SHOW) {
groupData.add(menuItem)
it.forEach { item ->
if (item.show == GROUP_SHOW) {
groupData.add(item)
}
}
}
}
/**
* 刷新数据
*/
fun updateData(data: List<GetConfigListBean.Item>?) {
groupData.clear()
data?.let {
it.forEach { item ->
if (item.show == GROUP_SHOW) {
groupData.add(item)
}
}
}
notifyDataSetChanged()
}
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
......@@ -58,15 +73,16 @@ class MerchantServiceGroupAdapter @JvmOverloads constructor(
parent,
false
)
return MerchantServiceGroupViewHolder(viewBinding.root, viewBinding)
val holder = MerchantServiceGroupViewHolder(viewBinding.root, viewBinding)
// ViewHolder禁止复用
holder.setIsRecyclable(false)
return holder
}
override fun onBindViewHolder(holder: MerchantServiceGroupViewHolder, position: Int) {
val data = groupData[position]
if (data.show != GROUP_SHOW) return
holder.viewBinding.tvTitle.text = data.group_name
viewBinding.rvService.layoutManager =
GridLayoutManager(context, 4)
viewBinding.rvService.layoutManager = GridLayoutManager(context, 4)
viewBinding.rvService.adapter = MerchantServiceFunctionAdapter(context, data.functions, listener)
}
......
......@@ -17,79 +17,80 @@ import com.yidian.shenghuoquan.newscontent.http.httpbean.LifeAccountItemBean
* description: 商户切换主体
*/
class MerchantSwitchAdapter(
private val curLifeAccountId: String,
data: List<LifeAccountItemBean.Response>? = null,
val listener: OnItemClickListener? = null
private val curLifeAccountId: String,
data: List<LifeAccountItemBean.Response>? = null,
val listener: OnItemClickListener? = null
) :
RecyclerView.Adapter<MerchantSwitchAdapter.MerchantSwitchViewHolder>() {
RecyclerView.Adapter<MerchantSwitchAdapter.MerchantSwitchViewHolder>() {
private val data by lazy {
data?.let {
ArrayList<LifeAccountItemBean.Response>(it)
} ?: ArrayList()
}
private val data by lazy {
data?.let {
ArrayList<LifeAccountItemBean.Response>(it)
} ?: ArrayList()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MerchantSwitchViewHolder {
val viewBinding = ItemMerchantSwitchBinding.bind(
LayoutInflater.from(parent.context)
.inflate(R.layout.item_merchant_switch, parent, false)
)
return MerchantSwitchViewHolder(viewBinding.root, viewBinding)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MerchantSwitchViewHolder {
val viewBinding = ItemMerchantSwitchBinding.bind(
LayoutInflater.from(parent.context)
.inflate(R.layout.item_merchant_switch, parent, false)
)
return MerchantSwitchViewHolder(viewBinding.root, viewBinding)
}
override fun onBindViewHolder(holder: MerchantSwitchViewHolder, position: Int) {
val data = data[position] as LifeAccountItemBean.Response
holder.viewBinding.tvLifeAccountName.text = data.life_account_name
holder.viewBinding.tvLifeAccountStatus.apply {
when (data.life_account_auth_status) {
Constant.STATUS_AUTH_NOT -> {
// 未认证
setBackgroundResource(R.drawable.shape_life_account_status_unauth)
setTextColor(ContextCompat.getColor(context, R.color.color_333333))
text = resources.getString(R.string.not_auth)
}
Constant.STATUS_AUTH_FINISH -> {
// 已认证
setBackgroundResource(R.drawable.shape_life_account_status_auth)
setTextColor(ContextCompat.getColor(context, R.color.color_FF1852F1))
text = when (data.life_account_type) {
Constant.TYPE_LIFE_ACCOUNT_PERSONAL -> resources.getString(R.string.personal_auth)
Constant.TYPE_LIFE_ACCOUNT_ENTERPRISE -> resources.getString(R.string.enterprise_auth)
else -> ""
}
}
}
when (data.enterprise_audit_status) {
Constant.STATUS_AUDIT_UNDER -> {
// 审核中
setBackgroundResource(R.drawable.shape_life_account_status_audit)
setTextColor(ContextCompat.getColor(context, R.color.color_FFF26E3D))
text = resources.getString(R.string.under_audit)
}
Constant.STATUS_AUDIT_REJECT -> {
// 审核驳回
setBackgroundResource(R.drawable.shape_life_account_status_reject)
setTextColor(ContextCompat.getColor(context, R.color.color_FFFF3A3A))
text = resources.getString(R.string.auth_reject)
}
}
override fun onBindViewHolder(holder: MerchantSwitchViewHolder, position: Int) {
val data = data[position] as LifeAccountItemBean.Response
holder.viewBinding.tvLifeAccountName.text = data.life_account_name
holder.viewBinding.tvLifeAccountStatus.apply {
when (data.life_account_auth_status) {
Constant.STATUS_AUTH_NOT -> {
// 未认证
setBackgroundResource(R.drawable.shape_life_account_status_unauth)
setTextColor(ContextCompat.getColor(context, R.color.color_333333))
text = resources.getString(R.string.not_auth)
}
Constant.STATUS_AUTH_FINISH -> {
// 已认证
setBackgroundResource(R.drawable.shape_life_account_status_auth)
setTextColor(ContextCompat.getColor(context, R.color.color_FF1852F1))
text = when (data.tag.tag_key) {
Constant.LIFE_ACCOUNT_TAG_COMMON_ENTERPRISE_AUTH -> resources.getString(R.string.common_enterprise)
Constant.LIFE_ACCOUNT_TAG_INDIVIDUAL_BUSINESS_AUTH -> resources.getString(R.string.individual_business)
Constant.LIFE_ACCOUNT_TAG_PERSONAL_AUTH -> resources.getString(R.string.personal_auth)
else -> ""
}
}
}
when (data.enterprise_audit_status) {
Constant.STATUS_AUDIT_UNDER -> {
// 审核中
setBackgroundResource(R.drawable.shape_life_account_status_audit)
setTextColor(ContextCompat.getColor(context, R.color.color_FFF26E3D))
text = resources.getString(R.string.under_audit)
}
// 当前选中的生活号
holder.viewBinding.ivLifeAccountSelect.isVisible = data.life_account_id == curLifeAccountId
holder.viewBinding.root.setOnClickListener {
listener?.onItemClick(it, position, data)
Constant.STATUS_AUDIT_REJECT -> {
// 审核驳回
setBackgroundResource(R.drawable.shape_life_account_status_reject)
setTextColor(ContextCompat.getColor(context, R.color.color_FFFF3A3A))
text = resources.getString(R.string.auth_reject)
}
}
}
override fun getItemCount(): Int {
return data.size
// 当前选中的生活号
holder.viewBinding.ivLifeAccountSelect.isVisible = data.life_account_id == curLifeAccountId
holder.viewBinding.root.setOnClickListener {
listener?.onItemClick(it, position, data)
}
}
interface OnItemClickListener {
fun onItemClick(view: View, position: Int, data: LifeAccountItemBean.Response)
}
override fun getItemCount(): Int {
return data.size
}
interface OnItemClickListener {
fun onItemClick(view: View, position: Int, data: LifeAccountItemBean.Response)
}
class MerchantSwitchViewHolder(itemView: View, val viewBinding: ItemMerchantSwitchBinding) :
RecyclerView.ViewHolder(itemView)
class MerchantSwitchViewHolder(itemView: View, val viewBinding: ItemMerchantSwitchBinding) :
RecyclerView.ViewHolder(itemView)
}
\ No newline at end of file
}
......@@ -38,7 +38,6 @@ import com.yidian.common.XRouterPathConstants.Companion.TRANSACTION_LIST
import com.yidian.common.XRouterPathConstants.Companion.VERIFY_IDENTITY
import com.yidian.common.XRouterPathConstants.Companion.WITHDRAW
import com.yidian.common.YdBaseApplication
import com.yidian.news.YdImageLoader
import com.yidian.news.util.ProcessUtil
import com.yidian.nightmode.util.NightModeUtil
import com.yidian.shenghuoquan.newscontent.personnel.ui.*
......@@ -69,7 +68,6 @@ class NewsContentApplication : YdBaseApplication() {
initService()
NightModeUtil.setContext(this)
DensityUtil.init(this)
YdImageLoader.init(this)
}
}
......@@ -106,8 +104,7 @@ class NewsContentApplication : YdBaseApplication() {
intent.putExtra(XRouterPathConstants.ParamsKey, params as HashMap)
}
intent.setClass(context, LoginLifeCircleActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
// intent.flags = (Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK
context.startActivity(intent)
}
}),
......@@ -385,7 +382,7 @@ class NewsContentApplication : YdBaseApplication() {
intent.putExtra(XRouterPathConstants.ParamsKey, params as HashMap)
}
intent.setClass(context, MerchantCenterActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK
context.startActivity(intent)
}
}),
......
......@@ -42,6 +42,10 @@ object Constant {
const val LIFE_ACCOUNT_TAG_AUDIT_UNDER = 5 // 审核中
const val LIFE_ACCOUNT_TAG_AUTH_REJECT = 6 // 认证驳回
// 生活号角色
const val TYPE_ROLE_ADMIN = 1 // 超级管理员
const val TYPE_ROLE_ORDINARY = 2 // 非管理员
// 身份证、营业执照上传方式
const val ITEM_TAKE_PHOTO = "拍照"
const val ITEM_OPEN_ALBUM = "相册"
......@@ -82,4 +86,12 @@ object Constant {
// 服务端标识
const val ALIVE_DETECT_SUCCESS = 1 // 活体检测成功
const val ALIVE_DETECT_FAIL = 2 // 活体检测未检测或失败
// 商户管理中心服务组id
const val MERCHANT_SERVICE_GROUP_PUBLISH = 1 // 我要发布
const val MERCHANT_SERVICE_GROUP_MANAGEMENT = 2 // 管理服务
const val MERCHANT_SERVICE_GROUP_OTHER = 3 // 其他服务
// 各输入场景最大长度显示
const val MAX_LENGTH_LIFE_ACCOUNT_NAME = 24 // 生活号名称
}
......@@ -7,24 +7,24 @@ package com.yidian.shenghuoquan.newscontent.http.httpbean
*/
class AuthEnterpriseLegalIdentityCommitBean {
data class Request(
val record_id: Long,
val front_img: String,
val bak_img: String,
val front_completeness: Int,
val bak_completeness: Int,
val idcard_number: String,
val gender: String?,
val name: String,
val address: String?,
val nationality: String?,
val valid_date_start: String?,
val valid_date_end: String?,
val issued_by: String?,
val life_account_id: Long?,
val mobile: String,
)
data class Request(
val record_id: Long,
val front_img: String,
val bak_img: String,
val front_completeness: Int,
val bak_completeness: Int,
val idcard_number: String,
val gender: String?,
val name: String,
val address: String?,
val nationality: String?,
val valid_date_start: String?,
val valid_date_end: String?,
val issued_by: String?,
val life_account_id: Long?,
val mobile: String,
)
data class Response(val life_account_id: String)
data class Response(val life_account_id: String, val name: String, val code: String, val legal_person: String, val legal_id_card: String)
}
\ No newline at end of file
}
......@@ -7,8 +7,8 @@ package com.yidian.shenghuoquan.newscontent.http.httpbean
*/
class AuthIndividualBusinessCompleteBean {
data class Request(val record_id: Long)
data class Request(val record_id: Long)
data class Response(val life_account_id: String)
data class Response(val life_account_id: String, val name: String, val code: String, val legal_person: String, val legal_id_card: String)
}
\ No newline at end of file
}
......@@ -6,6 +6,15 @@ package com.yidian.shenghuoquan.newscontent.http.httpbean
* description: API /merchant/auth/complete
*/
class AuthPersonalCompleteBean(val request: Request) {
data class Request(val mobile: String, val life_account_id: Long?)
data class Response(val life_account_id: String)
}
\ No newline at end of file
data class Request(val mobile: String, val life_account_id: Long?)
data class Response(
val life_account_id: String,
val occupation: String,
val full_name: String,
val id_card: String,
val life_account_name: String
)
}
......@@ -9,27 +9,34 @@ import java.io.Serializable
*/
class GetLifeAccountInfoByIdBean {
data class Request(val life_account_id: Long)
data class Request(val life_account_id: Long)
data class Response(
val audit_status: Int,
val create_time: String,
val enterprise_auth_record_id: Int,
val id_card: String,
val id_type: Int,
val legal_person: String,
val life_account_admin_id: Long,
val life_account_auth_status: Int,
val life_account_id: String,
val life_account_name: String,
val life_account_status: Int,
val life_account_type: Int,
val merchant_id: Int,
val occupation: String,
val update_time: String,
val code: String,
val name: String,
val mobile: String,
) : Serializable
data class Response(
val audit_status: Int,
val code: String,
val create_time: String,
val enterprise_auth_record_id: Int,
val id_card: String,
val id_type: Int,
val legal_person: String,
val life_account_admin_id: Long,
val life_account_auth_status: Int,
val life_account_id: String,
val life_account_name: String,
val life_account_status: Int,
val life_account_type: Int,
val merchant_id: Int,
val mobile: String,
val name: String,
val role_type: Int,
val tag: Tag,
val update_time: String,
val occupation: String
) : Serializable
}
\ No newline at end of file
data class Tag(
val tag_key: Int,
val tag_text: String
) : Serializable
}
package com.yidian.shenghuoquan.newscontent.ui
import android.content.Intent
import android.os.Bundle
import com.orhanobut.hawk.Hawk
import com.yidian.common.HawkConfig
......@@ -39,8 +40,8 @@ class FlashActivity : BaseActivity<ActivityFlashBinding>(), IGetLifeAccountListC
ApiService.getLifeAccountList(this)
} else {
// 未登录 跳转登录
XPageManager.push(XRouterPathConstants.LOGIN_LIFE_CIRCLE, null)
XPageManager.pop(null)
// 此处没有使用XPage打开页面 原因:不能设置flag
startActivity(Intent(this, LoginLifeCircleActivity::class.java))
finish()
}
}
......
......@@ -53,7 +53,7 @@ class LoginLifeCircleActivity : BaseActivity<ActivityLoginBinding>(), IGetLifeAc
}
private fun initView() {
Hawk.put(HawkConfig.LoginStatus, false)
cleanLocalStorage()
setLoginButtonStatus(false)
mCountDownTimerUtils = CountDownTimerUtils(viewBind.tvGetCode, 60000, 1000)
}
......@@ -151,6 +151,16 @@ class LoginLifeCircleActivity : BaseActivity<ActivityLoginBinding>(), IGetLifeAc
}
}
/**
* 清理本地保存的数据
*/
private fun cleanLocalStorage() {
// 登录状态
Hawk.put(HawkConfig.LoginStatus, false)
// 生活号id
Hawk.delete(HawkConfig.LifeAccountId)
}
override fun onDestroy() {
super.onDestroy()
mCountDownTimerUtils.cancel()
......@@ -202,7 +212,10 @@ class LoginLifeCircleActivity : BaseActivity<ActivityLoginBinding>(), IGetLifeAc
Hawk.put(HawkConfig.Mobile, loginResponse?.mobile)
Hawk.put(HawkConfig.Nickname, loginResponse?.nick_name)
Hawk.put(HawkConfig.Avatar, loginResponse?.avatar)
ApiService.getLifeAccountList(this)
if (t?.code == 0) {
// 登录成功后请求生活号列表接口
ApiService.getLifeAccountList(this)
}
}
}
......@@ -19,39 +19,26 @@ object LifeAccountAuthDataManager {
val merchantAuthData by lazy { LifeAccountMerchantAuthData() }
/**
* 将身份证OCR结果填入
* 将身份证人像面OCR结果填入
*/
fun generatePersonalAuthData(data: GetIDCardOCRBean.Response) {
if (data.posit.completeness != -1) {
personalAuthData.idCardPortraitFaceCompleteness = data.posit.completeness
}
if (data.back.completeness != -1) {
personalAuthData.idCardNationalEmblemFaceCompleteness = data.back.completeness
}
if (data.posit.idcard_number.isNotEmpty()) {
personalAuthData.idCardNum = data.posit.idcard_number
}
if (data.posit.gender.isNotEmpty()) {
personalAuthData.gender = data.posit.gender
}
if (data.posit.name.isNotEmpty()) {
personalAuthData.realName = data.posit.name
}
if (data.posit.address.isNotEmpty()) {
personalAuthData.address = data.posit.address
}
if (data.posit.nationality.isNotEmpty()) {
personalAuthData.nationality = data.posit.nationality
}
if (data.back.valid_date_start.isNotEmpty()) {
personalAuthData.validDateStart = data.back.valid_date_start
}
if (data.back.valid_date_end.isNotEmpty()) {
personalAuthData.validDateEnd = data.back.valid_date_end
}
if (data.back.issued_by.isNotEmpty()) {
personalAuthData.issuedBy = data.back.issued_by
}
fun generateIDCardPortraitFaceData(data: GetIDCardOCRBean.Response) {
personalAuthData.idCardPortraitFaceCompleteness = data.posit.completeness
personalAuthData.idCardNum = data.posit.idcard_number
personalAuthData.gender = data.posit.gender
personalAuthData.realName = data.posit.name
personalAuthData.address = data.posit.address
personalAuthData.nationality = data.posit.nationality
}
/**
* 将身份证国徽面OCR结果填入
*/
fun generateIDCardNationEmblemFaceData(data: GetIDCardOCRBean.Response) {
personalAuthData.idCardNationalEmblemFaceCompleteness = data.back.completeness
personalAuthData.validDateStart = data.back.valid_date_start
personalAuthData.validDateEnd = data.back.valid_date_end
personalAuthData.issuedBy = data.back.issued_by
}
/**
......
......@@ -78,8 +78,14 @@ class LifeAccountBusinessLicenseAuthFragment :
private fun initView() {
// 输入过滤
// 企业名称限制40汉字
viewBinding.evRegistrationName.setInputFilters(InputFilterUtil.getRegistrationNameFilter(), InputFilter.LengthFilter(40))
viewBinding.evRegistrationCode.setInputFilters(InputFilterUtil.getRegistrationCodeFilter(), InputFilter.LengthFilter(18))
// 统一信用代码限制18位数字+大小写英文字母 小写字母自动转换大写字母
viewBinding.evRegistrationCode.setInputFilters(
InputFilterUtil.getRegistrationCodeFilter(),
InputFilter.LengthFilter(18),
InputFilter.AllCaps()
)
}
......
......@@ -3,7 +3,7 @@ package com.yidian.shenghuoquan.newscontent.ui.auth
import android.annotation.SuppressLint
import android.os.Bundle
import android.text.Editable
import android.text.InputFilter
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
import com.orhanobut.hawk.Hawk
import com.yidian.common.HawkConfig
......@@ -12,6 +12,7 @@ import com.yidian.common.XRouterPathConstants.Companion.LIFE_ACCOUNT_CREATE
import com.yidian.common.base.BaseActivity
import com.yidian.shenghuoquan.newscontent.R
import com.yidian.shenghuoquan.newscontent.bean.ICreateLifeAccountCallback
import com.yidian.shenghuoquan.newscontent.constant.Constant
import com.yidian.shenghuoquan.newscontent.databinding.ActivityLifeAccountCreateBinding
import com.yidian.shenghuoquan.newscontent.http.ApiService
import com.yidian.shenghuoquan.newscontent.utils.InputFilterUtil
......@@ -21,7 +22,7 @@ import com.yidian.utils.ToastUtil
import com.yidian.xpage.XPageManager
class LifeAccountCreateActivity : BaseActivity<ActivityLifeAccountCreateBinding>(),
ICreateLifeAccountCallback {
ICreateLifeAccountCallback, InputFilterUtil.OnLengthFilterCallback {
companion object {
private const val TAG = "LifeAccountCreate"
const val LIFE_ACCOUNT_ID = "life_account_id"
......@@ -36,10 +37,6 @@ class LifeAccountCreateActivity : BaseActivity<ActivityLifeAccountCreateBinding>
return LIFE_ACCOUNT_CREATE
}
/**
* 生活号名称长度限制
*/
private val lifeAccountNameMaxLength = 40
private var lifeAccountId: String? = null
private var lifeAccountName: String? = null
......@@ -74,7 +71,7 @@ class LifeAccountCreateActivity : BaseActivity<ActivityLifeAccountCreateBinding>
}
})
// 设置输入过滤规则
viewBind.etAccount.filters = arrayOf(InputFilterUtil.getLifeAccountNameFilter(), InputFilter.LengthFilter(lifeAccountNameMaxLength + 1))
viewBind.etAccount.filters = arrayOf(InputFilterUtil.getLengthFilter(Constant.MAX_LENGTH_LIFE_ACCOUNT_NAME, this))
viewBind.btnCreateAccount.setOnClickListener {
createLifeAccount()
}
......@@ -110,14 +107,6 @@ class LifeAccountCreateActivity : BaseActivity<ActivityLifeAccountCreateBinding>
viewBind.btnCreateAccount.isEnabled = false
viewBind.tvErrorTips.isVisible = false
viewBind.vDivider.setBackgroundResource(R.color.divider_white)
return
}
if (s.length > lifeAccountNameMaxLength) {
viewBind.btnCreateAccount.alpha = 0.32f
viewBind.btnCreateAccount.isEnabled = false
viewBind.tvErrorTips.isVisible = true
viewBind.etAccount.setTextColor(resources.getColor(R.color.red_account_tips))
viewBind.vDivider.setBackgroundResource(R.color.red_account_tips)
} else {
viewBind.btnCreateAccount.alpha = 1f
viewBind.btnCreateAccount.isEnabled = true
......@@ -137,9 +126,17 @@ class LifeAccountCreateActivity : BaseActivity<ActivityLifeAccountCreateBinding>
Pair(LifeAccountCreateCompleteActivity.EXTRA_LIFE_ACCOUNT_ID, lifeAccountId)
)
)
XPageManager.pop(null)
} else {
ToastUtil.showToast(this, "生活号创建失败")
}
}
override fun onLengthOverrun(maxLength: Int) {
// 输入长度超限 展示错误提示
viewBind.tvErrorTips.isVisible = true
viewBind.etAccount.setTextColor(ContextCompat.getColor(this, R.color.red_account_tips))
viewBind.vDivider.setBackgroundResource(R.color.red_account_tips)
}
}
......@@ -96,4 +96,8 @@ class LifeAccountCreateCompleteActivity : BaseActivity<ActivityLifeAccountCreate
}
}
override fun onBackPressed() {
// 禁止back event
}
}
package com.yidian.shenghuoquan.newscontent.ui.auth
import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.fragment.app.Fragment
import com.orhanobut.hawk.Hawk
......@@ -44,6 +43,9 @@ class LifeAccountEnterpriseAuthActivity : BaseActivity<ActivityLifeAccountEnterp
// 认证数据
const val EXTRA_AUTH_DATA = "authData"
// 是否审核驳回后修改认证
const val EXTRA_IS_AUTH_MODIFY = "isAuthModify"
}
private val fragmentList: ArrayList<Fragment> by lazy {
......@@ -80,6 +82,22 @@ class LifeAccountEnterpriseAuthActivity : BaseActivity<ActivityLifeAccountEnterp
}
}
/**
* 是否为认证驳回修改情况
*/
private val isAuthModify by lazy {
intent.getSerializableExtra(XRouterPathConstants.ParamsKey)?.let {
(it as HashMap<*, *>)[EXTRA_IS_AUTH_MODIFY]?.let { bool ->
bool as Boolean
} ?: false
} ?: false
}
/**
* 上一次选择的商户类型
*/
private var lastSelectedMerchantType: String? = null
override fun createViewBinding(): ActivityLifeAccountEnterpriseAuthBinding {
return ActivityLifeAccountEnterpriseAuthBinding.inflate(layoutInflater)
}
......@@ -150,13 +168,14 @@ class LifeAccountEnterpriseAuthActivity : BaseActivity<ActivityLifeAccountEnterp
// 如果有已存在的认证流程则还原进度
authData?.let { LifeAccountAuthDataManager.generateMerchantAuthData(it) }
authData?.data_type?.let {
viewBind.svMerchantType.setContentResult(
if (it == Constant.TYPE_INDIVIDUAL_BUSINESS) {
Constant.ITEM_INDIVIDUAL_BUSINESSES
} else {
Constant.ITEM_COMMON_ENTERPRISE
}
)
// 商户类型
val type = if (it == Constant.TYPE_INDIVIDUAL_BUSINESS) {
Constant.ITEM_INDIVIDUAL_BUSINESSES
} else {
Constant.ITEM_COMMON_ENTERPRISE
}
viewBind.svMerchantType.setContentResult(type)
lastSelectedMerchantType = type
}
val bundle = Bundle()
bundle.putSerializable(LifeAccountBusinessLicenseAuthFragment.EXTRA_AUTH_DATA, authData)
......@@ -238,17 +257,24 @@ class LifeAccountEnterpriseAuthActivity : BaseActivity<ActivityLifeAccountEnterp
}
override fun onItemClick(view: View, position: Int, data: BottomSelectBean) {
if (viewBind.svMerchantType.getCurSelectItem().isNotEmpty()) {
// 更换商户类型,清空营业执照图片、清空注册名称和注册码
(fragmentList[0] as LifeAccountBusinessLicenseAuthFragment).clearBusinessLicenseInfo()
// 未修改商户类型不清空营业执照信息
if (lastSelectedMerchantType == data.item) {
return
} else {
// 回显选择的商户类型
viewBind.svMerchantType.setContentResult(data.item)
// 保存选择的商户类型
LifeAccountAuthDataManager.merchantAuthData.merchantType =
if (data.item == Constant.ITEM_INDIVIDUAL_BUSINESSES) Constant.TYPE_INDIVIDUAL_BUSINESS else Constant.TYPE_COMMON_ENTERPRISE
// 第一次选择商户类型不清空营业执照信息
if (lastSelectedMerchantType != null) {
// 更换商户类型,清空营业执照图片、清空注册名称和注册码
(fragmentList[0] as LifeAccountBusinessLicenseAuthFragment).clearBusinessLicenseInfo()
}
// 检查下一步条件
checkNextCondition()
lastSelectedMerchantType = data.item
}
// 回显选择的商户类型
viewBind.svMerchantType.setContentResult(data.item)
// 保存选择的商户类型
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?) {
......@@ -279,28 +305,15 @@ class LifeAccountEnterpriseAuthActivity : BaseActivity<ActivityLifeAccountEnterp
XPageManager.push(
XRouterPathConstants.LIFE_ACCOUNT_ENTERPRISE_AUTH_COMPLETE,
hashMapOf(
Pair(
LifeAccountEnterpriseAuthCompleteActivity.REGISTRATION_NAME,
LifeAccountAuthDataManager.merchantAuthData.registrationName
),
Pair(
LifeAccountEnterpriseAuthCompleteActivity.REGISTRATION_CODE,
LifeAccountAuthDataManager.merchantAuthData.registrationCode
),
Pair(
LifeAccountEnterpriseAuthCompleteActivity.ID_CARD_NAME,
LifeAccountAuthDataManager.personalAuthData.realName
),
Pair(
LifeAccountEnterpriseAuthCompleteActivity.ID_CARD_NUM,
LifeAccountAuthDataManager.personalAuthData.idCardNum
),
Pair(
LifeAccountEnterpriseAuthCompleteActivity.EXTRA_LIFE_ACCOUNT_ID,
result?.life_account_id
)
Pair(LifeAccountEnterpriseAuthCompleteActivity.REGISTRATION_NAME, result?.name),
Pair(LifeAccountEnterpriseAuthCompleteActivity.REGISTRATION_CODE, result?.code),
Pair(LifeAccountEnterpriseAuthCompleteActivity.ID_CARD_NAME, result?.legal_person),
Pair(LifeAccountEnterpriseAuthCompleteActivity.ID_CARD_NUM, result?.legal_id_card),
Pair(LifeAccountEnterpriseAuthCompleteActivity.EXTRA_LIFE_ACCOUNT_ID, result?.life_account_id),
Pair(LifeAccountEnterpriseAuthCompleteActivity.EXTRA_IS_AUTH_MODIFY, isAuthModify)
)
)
XPageManager.pop(null)
}
override fun authEnterpriseLegalIdentityCommitFailure(message: String?) {
......@@ -314,28 +327,15 @@ class LifeAccountEnterpriseAuthActivity : BaseActivity<ActivityLifeAccountEnterp
XPageManager.push(
XRouterPathConstants.LIFE_ACCOUNT_ENTERPRISE_AUTH_COMPLETE,
hashMapOf(
Pair(
LifeAccountEnterpriseAuthCompleteActivity.REGISTRATION_NAME,
LifeAccountAuthDataManager.merchantAuthData.registrationName
),
Pair(
LifeAccountEnterpriseAuthCompleteActivity.REGISTRATION_CODE,
LifeAccountAuthDataManager.merchantAuthData.registrationCode
),
Pair(
LifeAccountEnterpriseAuthCompleteActivity.ID_CARD_NAME,
LifeAccountAuthDataManager.personalAuthData.realName
),
Pair(
LifeAccountEnterpriseAuthCompleteActivity.ID_CARD_NUM,
LifeAccountAuthDataManager.personalAuthData.idCardNum
),
Pair(
LifeAccountEnterpriseAuthCompleteActivity.EXTRA_LIFE_ACCOUNT_ID,
result?.life_account_id
)
Pair(LifeAccountEnterpriseAuthCompleteActivity.REGISTRATION_NAME, result?.name),
Pair(LifeAccountEnterpriseAuthCompleteActivity.REGISTRATION_CODE, result?.code),
Pair(LifeAccountEnterpriseAuthCompleteActivity.ID_CARD_NAME, result?.legal_person),
Pair(LifeAccountEnterpriseAuthCompleteActivity.ID_CARD_NUM, result?.legal_id_card),
Pair(LifeAccountEnterpriseAuthCompleteActivity.EXTRA_LIFE_ACCOUNT_ID, result?.life_account_id),
Pair(LifeAccountEnterpriseAuthCompleteActivity.EXTRA_IS_AUTH_MODIFY, isAuthModify)
)
)
XPageManager.pop(null)
}
override fun authIndividualBusinessCompleteFailure(message: String?) {
......@@ -358,4 +358,20 @@ class LifeAccountEnterpriseAuthActivity : BaseActivity<ActivityLifeAccountEnterp
}
}
override fun onBackPressed() {
// 返回上一步/上一页
if (viewBind.pvAuthProcess.curProcess == 0) {
// 当前是第一个fragment 则退出当前activity
XPageManager.pop(null)
} else {
viewBind.pvAuthProcess.setProcess(--viewBind.pvAuthProcess.curProcess)
if (viewBind.pvAuthProcess.curProcess == 0) {
viewBind.svMerchantType.enableSelect(true)
}
// 回退fragment
switchFragment(fragmentList[viewBind.pvAuthProcess.curProcess])
checkNextCondition()
}
}
}
......@@ -5,7 +5,6 @@ import android.view.View
import com.yidian.common.XRouterPathConstants
import com.yidian.common.base.BaseActivity
import com.yidian.shenghuoquan.newscontent.R
import com.yidian.shenghuoquan.newscontent.constant.Constant
import com.yidian.shenghuoquan.newscontent.databinding.ActivityLifeAccountEnterpriseAuthCompleteBinding
import com.yidian.shenghuoquan.newscontent.utils.SensitiveInfoUtil
import com.yidian.xpage.XPageManager
......@@ -24,6 +23,9 @@ class LifeAccountEnterpriseAuthCompleteActivity :
const val ID_CARD_NAME = "idCardName"
const val ID_CARD_NUM = "idCardNum"
const val EXTRA_LIFE_ACCOUNT_ID = "life_account_id"
// 是否审核驳回后修改认证
const val EXTRA_IS_AUTH_MODIFY = "isAuthModify"
}
/**
......@@ -64,10 +66,9 @@ class LifeAccountEnterpriseAuthCompleteActivity :
-1,
-1,
params?.get(REGISTRATION_NAME)?.let { it as String },
params?.get(REGISTRATION_CODE)
?.let { it as String },
params?.get(REGISTRATION_CODE)?.let { it as String },
params?.get(ID_CARD_NAME)?.let { it as String },
SensitiveInfoUtil.idCardNumEncrypt(params?.get(ID_CARD_NUM)?.let { it as String } ?: "")
params?.get(ID_CARD_NUM)?.let { it as String }
)
}
......@@ -85,4 +86,8 @@ class LifeAccountEnterpriseAuthCompleteActivity :
)
}
}
override fun onBackPressed() {
// 禁止back event
}
}
......@@ -50,9 +50,8 @@ import java.io.File
* description: 生活号身份证认证
*/
class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuthBinding>(),
View.OnClickListener, BottomSelectAdapter.OnItemClickListener<BottomSelectBean>,
IGetIDCardOCRCallback, AuthPersonalGetTokenCallback, IdentifyIdOcrVerifyCallback, PreCallback,
DetectCallback, KS3Core.OnKS3TaskListener, IAuthPersonalCheckCallback,
View.OnClickListener, BottomSelectAdapter.OnItemClickListener<BottomSelectBean>, AuthPersonalGetTokenCallback,
IdentifyIdOcrVerifyCallback, PreCallback, DetectCallback, KS3Core.OnKS3TaskListener, IAuthPersonalCheckCallback,
IAuthLiveIdentityCallback, LifeAccountAuthImageView.OnLifeAccountAuthImageViewCallback,
LifeAccountAuthIdentityInfoEditView.OnLifeAccountAuthIdentityInfoEditViewCallback,
IAuthIndividualBusinessIdentityCommitCallback, IAuthEnterpriseLiveIdentityCallback,
......@@ -142,7 +141,8 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth
(authType == Constant.TYPE_AUTH_PERSONAL) or (authType == Constant.TYPE_AUTH_INDIVIDUAL_BUSINESS)
// 输入过滤
viewBinding.evRealName.setInputFilters(InputFilterUtil.getRealNameFilter(), InputFilter.LengthFilter(40))
viewBinding.evIdCardNumber.setInputFilters(InputFilterUtil.getIDCardNumberFilter(), InputFilter.LengthFilter(18))
// 身份证号码输入限制18位字符,数字+大小写x 小写x自动转大写X
viewBinding.evIdCardNumber.setInputFilters(InputFilterUtil.getIDCardNumberFilter(), InputFilter.LengthFilter(18), InputFilter.AllCaps())
viewBinding.evMobile.setInputFilters(InputFilterUtil.getPhoneNumberFilter(), InputFilter.LengthFilter(11))
}
......@@ -480,14 +480,55 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth
private fun startIDCardOCR(face: Int, objectKey: String?, bucket: String?) {
if (face == Constant.ID_CARD_PORTRAIT_FACE) {
ApiService.getIDCardOCR(
this, hashMapOf(
object : IGetIDCardOCRCallback {
override fun getIDCardOCRSuccess(result: GetIDCardOCRBean.Response?) {
result?.let { LifeAccountAuthDataManager.generateIDCardPortraitFaceData(it) }
// 回显OCR结果
viewBinding.evRealName.fillEditContent(result?.posit?.name)
viewBinding.evIdCardNumber.fillEditContent(result?.posit?.idcard_number)
// 此时身份证人像面已上传并OCR识别完成 删除本地临时存储文件
File(cachePath + Constant.FILE_PATH_ID_CARD_PORTRAIT_FACE).apply {
if (exists()) delete()
}
// 检查下一步条件
if (authType == Constant.TYPE_AUTH_PERSONAL) {
(activity as LifeAccountPersonalAuthActivity).checkNextCondition()
} else {
(activity as LifeAccountEnterpriseAuthActivity).checkNextCondition()
}
}
override fun getIDCardOCRFailure(message: String?) {
}
}, hashMapOf(
Pair("posit_image_objectid", objectKey),
Pair("posit_bucket", bucket)
)
)
} else {
ApiService.getIDCardOCR(
this, hashMapOf(
object : IGetIDCardOCRCallback {
override fun getIDCardOCRSuccess(result: GetIDCardOCRBean.Response?) {
result?.let { LifeAccountAuthDataManager.generateIDCardNationEmblemFaceData(it) }
// 此时身份证国徽面已上传并OCR识别完成 删除本地临时存储文件
File(cachePath + Constant.FILE_PATH_ID_CARD_NATIONAL_EMBLEM_FACE).apply {
if (exists()) delete()
}
// 检查下一步条件
if (authType == Constant.TYPE_AUTH_PERSONAL) {
(activity as LifeAccountPersonalAuthActivity).checkNextCondition()
} else {
(activity as LifeAccountEnterpriseAuthActivity).checkNextCondition()
}
}
override fun getIDCardOCRFailure(message: String?) {
}
}, hashMapOf(
Pair("back_image_objectid", objectKey),
Pair("back_bucket", bucket)
)
......@@ -495,24 +536,6 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth
}
}
override fun getIDCardOCRSuccess(result: GetIDCardOCRBean.Response?) {
result?.let { LifeAccountAuthDataManager.generatePersonalAuthData(it) }
// 回显OCR结果
viewBinding.evRealName.fillEditContent(result?.posit?.name)
viewBinding.evIdCardNumber.fillEditContent(result?.posit?.idcard_number)
// 此时身份证已上传并OCR识别完成 删除本地临时存储文件
File(cachePath + Constant.FILE_PATH_ID_CARD_PORTRAIT_FACE).apply {
if (exists()) delete()
}
File(cachePath + Constant.FILE_PATH_ID_CARD_NATIONAL_EMBLEM_FACE).apply {
if (exists()) delete()
}
}
override fun getIDCardOCRFailure(message: String?) {
}
override fun getTokenSuccess(t: HttpResult<AuthPersonalGetTokenBean.Response?>?) {
LifeAccountAuthDataManager.personalAuthData.liveDetectBizToken = t?.result?.biz_token
megLiveManager.preDetect(
......
package com.yidian.shenghuoquan.newscontent.ui.auth
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.CompoundButton
import com.orhanobut.hawk.Hawk
......@@ -11,7 +10,6 @@ import com.yidian.common.XEventConfig
import com.yidian.common.XRouterPathConstants
import com.yidian.common.base.BaseActivity
import com.yidian.shenghuoquan.newscontent.R
import com.yidian.shenghuoquan.newscontent.constant.Constant
import com.yidian.shenghuoquan.newscontent.databinding.ActivityLifeAccountPersonalAuthBinding
import com.yidian.shenghuoquan.newscontent.http.ApiService
import com.yidian.shenghuoquan.newscontent.http.callback.IAuthPersonalCompleteCallback
......@@ -37,6 +35,7 @@ class LifeAccountPersonalAuthActivity :
companion object {
// 认证数据
const val EXTRA_AUTH_DATA = "authData"
const val EXTRA_LIFE_ACCOUNT_ID = "life_account_id"
}
/**
......@@ -55,6 +54,17 @@ class LifeAccountPersonalAuthActivity :
}
}
/**
* 个人未认证的生活号升级传入
*/
private val lifeAccountId by lazy {
intent.getSerializableExtra(XRouterPathConstants.ParamsKey)?.let { params ->
(params as HashMap<*, *>)[EXTRA_LIFE_ACCOUNT_ID]?.let {
it as String
}
}
}
override fun createViewBinding(): ActivityLifeAccountPersonalAuthBinding {
return ActivityLifeAccountPersonalAuthBinding.inflate(layoutInflater)
}
......@@ -123,9 +133,8 @@ class LifeAccountPersonalAuthActivity :
XPageManager.push(XRouterPathConstants.CHOOSE_CAREER, null)
}
R.id.btn_next -> {
// TODO: 6/21/21 未认证生活号进行个人认证 传参life_account_id
// 个人认证 完成认证
ApiService.authComplete(this, hashMapOf())
ApiService.authComplete(this, lifeAccountId?.let { hashMapOf(Pair(EXTRA_LIFE_ACCOUNT_ID, it)) } ?: hashMapOf())
}
R.id.tv_privacy_certification -> {
......@@ -155,26 +164,12 @@ class LifeAccountPersonalAuthActivity :
XPageManager.push(
XRouterPathConstants.LIFE_ACCOUNT_PERSONAL_AUTH_COMPLETE,
hashMapOf(
Pair(
LifeAccountPersonalAuthCompleteActivity.OCCUPATION,
LifeAccountAuthDataManager.personalAuthData.occupation
),
Pair(
LifeAccountPersonalAuthCompleteActivity.PHONE_NUM,
Hawk.get(HawkConfig.Mobile, "")
),
Pair(
LifeAccountPersonalAuthCompleteActivity.REAL_NAME,
LifeAccountAuthDataManager.personalAuthData.realName
),
Pair(
LifeAccountPersonalAuthCompleteActivity.ID_CARD_NUM,
LifeAccountAuthDataManager.personalAuthData.idCardNum
),
Pair(
LifeAccountPersonalAuthCompleteActivity.EXTRA_LIFE_ACCOUNT_ID,
result?.life_account_id
)
Pair(LifeAccountPersonalAuthCompleteActivity.OCCUPATION, result?.occupation),
Pair(LifeAccountPersonalAuthCompleteActivity.PHONE_NUM, Hawk.get(HawkConfig.Mobile, "")),
Pair(LifeAccountPersonalAuthCompleteActivity.REAL_NAME, result?.full_name),
Pair(LifeAccountPersonalAuthCompleteActivity.ID_CARD_NUM, result?.id_card),
Pair(LifeAccountPersonalAuthCompleteActivity.EXTRA_LIFE_ACCOUNT_ID, result?.life_account_id),
Pair(LifeAccountPersonalAuthCompleteActivity.LIFE_ACCOUNT_NAME, result?.life_account_name)
)
)
XPageManager.pop(null)
......
......@@ -21,6 +21,7 @@ class LifeAccountPersonalAuthCompleteActivity :
BaseActivity<ActivityLifeAccountPersonalAuthCompleteBinding>(), IGetLifeAccountListCallback, View.OnClickListener {
companion object {
const val LIFE_ACCOUNT_NAME = "lifeAccountName"
const val OCCUPATION = "occupation"
const val REAL_NAME = "realName"
const val ID_CARD_NUM = "idCardNum"
......@@ -58,6 +59,7 @@ class LifeAccountPersonalAuthCompleteActivity :
private fun initData() {
viewBind.ivPersonAuthInfo.fillAuthInfo(
params?.get(LIFE_ACCOUNT_NAME)?.let { it as String },
params?.get(OCCUPATION)?.let { it as String },
params?.get(REAL_NAME)?.let { it as String },
params?.get(ID_CARD_NUM)?.let { it as String },
......@@ -107,4 +109,8 @@ class LifeAccountPersonalAuthCompleteActivity :
)
}
}
override fun onBackPressed() {
// 禁止back event
}
}
package com.yidian.shenghuoquan.newscontent.ui.center
import android.os.Bundle
import android.text.InputFilter
import com.yidian.common.XEventConfig
import com.yidian.common.XRouterPathConstants
import com.yidian.common.base.BaseActivity
import com.yidian.shenghuoquan.newscontent.R
import com.yidian.shenghuoquan.newscontent.bean.ICreateLifeAccountCallback
import com.yidian.shenghuoquan.newscontent.constant.Constant
import com.yidian.shenghuoquan.newscontent.databinding.ActivityLifeAccountModifyNameBinding
import com.yidian.shenghuoquan.newscontent.http.ApiService
import com.yidian.shenghuoquan.newscontent.utils.InputFilterUtil
......@@ -24,7 +24,7 @@ import com.yidian.xpage.XPageManager
class LifeAccountModifyNameActivity : BaseActivity<ActivityLifeAccountModifyNameBinding>(),
CommonTopBarView.OnCommonTopBarActionCallback,
LifeAccountAuthIdentityInfoEditView.OnLifeAccountAuthIdentityInfoEditViewCallback,
ICreateLifeAccountCallback {
ICreateLifeAccountCallback, InputFilterUtil.OnLengthFilterCallback {
companion object {
const val EXTRA_LIFE_ACCOUNT_ID = "life_account_id"
......@@ -50,8 +50,10 @@ class LifeAccountModifyNameActivity : BaseActivity<ActivityLifeAccountModifyName
}
private fun initView() {
// 只允许输入中文并且最长20汉字
viewBind.evLifeAccountName.setInputFilters(InputFilterUtil.getLifeAccountNameFilter(), InputFilter.LengthFilter(40))
// 默认保存按钮不可用
viewBind.bvTopBar.setActionEnable(false)
// 生活号名称长度限制24个字符
viewBind.evLifeAccountName.setInputFilters(InputFilterUtil.getLengthFilter(Constant.MAX_LENGTH_LIFE_ACCOUNT_NAME, this))
}
private fun initListener() {
......@@ -83,11 +85,11 @@ class LifeAccountModifyNameActivity : BaseActivity<ActivityLifeAccountModifyName
}
override fun onTextClear(from: LifeAccountAuthIdentityInfoEditView) {
viewBind.bvTopBar.setActionEnable(false)
}
override fun onTextChange(from: LifeAccountAuthIdentityInfoEditView, text: String) {
viewBind.bvTopBar.setActionEnable(true)
}
override fun createLifeAccountCallback(result: Boolean) {
......@@ -100,4 +102,9 @@ class LifeAccountModifyNameActivity : BaseActivity<ActivityLifeAccountModifyName
viewBind.evLifeAccountName.showErrorTips(resources.getString(R.string.life_account_name_already_exist))
}
}
override fun onLengthOverrun(maxLength: Int) {
// 输入长度超限 展示错误提示
viewBind.evLifeAccountName.showErrorTips(resources.getString(R.string.life_account_name_overrun_error_tips))
}
}
......@@ -17,70 +17,71 @@ import com.yidian.shenghuoquan.newscontent.http.httpbean.GetLifeAccountInfoByIdB
*/
class MerchantAuthInfoActivity : BaseActivity<ActivityMerchantAuthInfoBinding>() {
companion object {
const val EXTRA_LIFE_ACCOUNT_INFO = "life_account_info"
}
companion object {
const val EXTRA_LIFE_ACCOUNT_INFO = "life_account_info"
}
/**
* 生活号详情
*/
private val lifeAccountInfo by lazy {
intent.getSerializableExtra(XRouterPathConstants.ParamsKey)?.let { params ->
(params as HashMap<*, *>)[EXTRA_LIFE_ACCOUNT_INFO]?.let {
it as GetLifeAccountInfoByIdBean.Response
}
}
/**
* 生活号详情
*/
private val lifeAccountInfo by lazy {
intent.getSerializableExtra(XRouterPathConstants.ParamsKey)?.let { params ->
(params as HashMap<*, *>)[EXTRA_LIFE_ACCOUNT_INFO]?.let {
it as GetLifeAccountInfoByIdBean.Response
}
}
}
override fun createViewBinding(): ActivityMerchantAuthInfoBinding {
return ActivityMerchantAuthInfoBinding.inflate(layoutInflater)
}
override fun createViewBinding(): ActivityMerchantAuthInfoBinding {
return ActivityMerchantAuthInfoBinding.inflate(layoutInflater)
}
override fun getXPageName(): String {
return XRouterPathConstants.MERCHANT_AUTH_INFO
}
override fun getXPageName(): String {
return XRouterPathConstants.MERCHANT_AUTH_INFO
}
override fun init(savedInstanceState: Bundle?) {
super.init(savedInstanceState)
initData()
}
override fun init(savedInstanceState: Bundle?) {
super.init(savedInstanceState)
initData()
}
private fun initData() {
when (lifeAccountInfo?.id_type) {
Constant.TYPE_AUTH_PERSONAL -> {
// 个人认证
viewBind.ivPersonAuthInfo.isVisible = true
viewBind.ivPersonAuthInfo.fillAuthInfo(
lifeAccountInfo?.occupation,
lifeAccountInfo?.legal_person,
lifeAccountInfo?.id_card,
Hawk.get(HawkConfig.Mobile)
)
}
Constant.TYPE_AUTH_INDIVIDUAL_BUSINESS -> {
// 个人工商户认证
viewBind.ivEnterpriseAuthInfo.isVisible = true
viewBind.ivEnterpriseAuthInfo.fillAuthInfo(
lifeAccountInfo?.id_type,
lifeAccountInfo?.audit_status,
lifeAccountInfo?.name,
lifeAccountInfo?.code,
lifeAccountInfo?.legal_person,
lifeAccountInfo?.id_card
)
}
Constant.TYPE_AUTH_COMMON_ENTERPRISE -> {
// 普通企业认证
viewBind.ivEnterpriseAuthInfo.isVisible = true
viewBind.ivEnterpriseAuthInfo.fillAuthInfo(
lifeAccountInfo?.id_type,
lifeAccountInfo?.audit_status,
lifeAccountInfo?.name,
lifeAccountInfo?.code,
lifeAccountInfo?.legal_person,
lifeAccountInfo?.id_card
)
}
}
private fun initData() {
when (lifeAccountInfo?.id_type) {
Constant.TYPE_AUTH_PERSONAL -> {
// 个人认证
viewBind.ivPersonAuthInfo.isVisible = true
viewBind.ivPersonAuthInfo.fillAuthInfo(
lifeAccountInfo?.life_account_name,
lifeAccountInfo?.occupation,
lifeAccountInfo?.legal_person,
lifeAccountInfo?.id_card,
Hawk.get(HawkConfig.Mobile)
)
}
Constant.TYPE_AUTH_INDIVIDUAL_BUSINESS -> {
// 个人工商户认证
viewBind.ivEnterpriseAuthInfo.isVisible = true
viewBind.ivEnterpriseAuthInfo.fillAuthInfo(
lifeAccountInfo?.id_type,
lifeAccountInfo?.audit_status,
lifeAccountInfo?.name,
lifeAccountInfo?.code,
lifeAccountInfo?.legal_person,
lifeAccountInfo?.id_card
)
}
Constant.TYPE_AUTH_COMMON_ENTERPRISE -> {
// 普通企业认证
viewBind.ivEnterpriseAuthInfo.isVisible = true
viewBind.ivEnterpriseAuthInfo.fillAuthInfo(
lifeAccountInfo?.id_type,
lifeAccountInfo?.audit_status,
lifeAccountInfo?.name,
lifeAccountInfo?.code,
lifeAccountInfo?.legal_person,
lifeAccountInfo?.id_card
)
}
}
}
\ No newline at end of file
}
}
......@@ -12,7 +12,7 @@ import com.yidian.shenghuoquan.newscontent.http.ApiService
import com.yidian.shenghuoquan.newscontent.http.callback.IAuthMerchantCheckCallback
import com.yidian.shenghuoquan.newscontent.http.httpbean.AuthMerchantCheckBean
import com.yidian.shenghuoquan.newscontent.http.httpbean.GetLifeAccountInfoByIdBean
import com.yidian.shenghuoquan.newscontent.ui.auth.LifeAccountAuthDataManager
import com.yidian.shenghuoquan.newscontent.ui.auth.LifeAccountAuthActivity
import com.yidian.shenghuoquan.newscontent.ui.auth.LifeAccountEnterpriseAuthActivity
import com.yidian.shenghuoquan.newscontent.widget.MerchantInfoView
import com.yidian.xarc.xevent.XBaseEvent
......@@ -84,7 +84,10 @@ class MerchantInfoActivity : BaseActivity<ActivityMerchantInfoBinding>(), Mercha
private fun initData() {
// 生活号名称
viewBind.ivLifeAccountName.fillContent(lifeAccountInfo?.life_account_name)
viewBind.ivLifeAccountName.showDetailEntry()
if (lifeAccountInfo?.audit_status != Constant.STATUS_AUDIT_UNDER && lifeAccountInfo?.role_type != Constant.TYPE_ROLE_ORDINARY) {
// 审核中和企业员工不允许修改生活号名称
viewBind.ivLifeAccountName.showDetailEntry()
}
// 生活号认证信息
// 审核状态
if (lifeAccountInfo?.audit_status == Constant.STATUS_AUDIT_REJECT) {
......@@ -100,24 +103,25 @@ class MerchantInfoActivity : BaseActivity<ActivityMerchantInfoBinding>(), Mercha
viewBind.ivLifeAccountAuth.showAuthEntry(MerchantInfoView.LifeAccountAuthStatus.NOT_AUTH)
return
}
if (lifeAccountInfo?.role_type != Constant.TYPE_ROLE_ORDINARY) {
// 企业员工不允许查看认证信息
viewBind.ivLifeAccountAuth.showDetailEntry()
}
// 认证类型
when (lifeAccountInfo?.id_type) {
Constant.TYPE_AUTH_PERSONAL -> {
// 个人认证
viewBind.ivLifeAccountAuth.fillContent(resources.getString(R.string.personal_auth))
viewBind.ivLifeAccountAuth.showDetailEntry()
viewBind.ivLifeAccountAuthUpgrade.isVisible = true
viewBind.ivLifeAccountAuthUpgrade.showAuthEntry(MerchantInfoView.LifeAccountAuthStatus.UPGRADE_AUTH)
}
Constant.TYPE_AUTH_INDIVIDUAL_BUSINESS -> {
// 个体工商户认证
viewBind.ivLifeAccountAuth.fillContent(resources.getString(R.string.individual_business))
viewBind.ivLifeAccountAuth.showDetailEntry()
}
Constant.TYPE_AUTH_COMMON_ENTERPRISE -> {
// 普通企业认证
viewBind.ivLifeAccountAuth.fillContent(resources.getString(R.string.common_enterprise))
viewBind.ivLifeAccountAuth.showDetailEntry()
}
}
}
......@@ -151,11 +155,14 @@ class MerchantInfoActivity : BaseActivity<ActivityMerchantInfoBinding>(), Mercha
override fun onEnterAuth(from: MerchantInfoView) {
// 认证或认证升级或修改认证
if (from == viewBind.ivLifeAccountAuth) {
if (lifeAccountInfo?.life_account_auth_status == Constant.STATUS_AUTH_NOT) {
if (lifeAccountInfo?.life_account_type == Constant.TYPE_LIFE_ACCOUNT_PERSONAL
&& lifeAccountInfo?.life_account_auth_status == Constant.STATUS_AUTH_NOT
&& lifeAccountInfo?.audit_status == 0
) {
// 未认证 进入认证流程首页 此处需要传参from控制认证流程首页返回按钮显示
XPageManager.push(
XRouterPathConstants.LIFE_ACCOUNT_AUTH,
hashMapOf(Pair("from", "auth"))
hashMapOf(Pair(LifeAccountAuthActivity.EXTRA_PAGE_FROM, LifeAccountAuthActivity.FROM_AUTH))
)
} else if (lifeAccountInfo?.audit_status == Constant.STATUS_AUDIT_REJECT) {
// 认证驳回 请求企业认证信息 此处为升级认证情况 需要传入生活号id
......@@ -191,7 +198,9 @@ class MerchantInfoActivity : BaseActivity<ActivityMerchantInfoBinding>(), Mercha
Pair(
LifeAccountEnterpriseAuthActivity.EXTRA_LIFE_ACCOUNT_ID,
lifeAccountInfo?.life_account_id
), Pair(LifeAccountEnterpriseAuthActivity.EXTRA_AUTH_DATA, result)
),
Pair(LifeAccountEnterpriseAuthActivity.EXTRA_AUTH_DATA, result),
Pair(LifeAccountEnterpriseAuthActivity.EXTRA_IS_AUTH_MODIFY, lifeAccountInfo?.audit_status == Constant.STATUS_AUDIT_REJECT)
)
)
}
......
......@@ -15,90 +15,90 @@ import com.yidian.utils.DensityUtil
* description: 商户管理中心底部提示弹窗
*/
class MerchantCenterBottomHintDialog(
context: Context,
val type: Int,
val callback: OnMerchantCenterBottomHintCallback? = null
context: Context,
val type: Int,
val callback: OnMerchantCenterBottomHintCallback? = null
) :
BaseDialog<DialogMerchantCenterBottomHintBinding>(
context,
R.style.merchant_center_bottom_hint_dialog
),
View.OnClickListener {
BaseDialog<DialogMerchantCenterBottomHintBinding>(
context,
R.style.merchant_center_bottom_hint_dialog
),
View.OnClickListener {
companion object {
// 认证升级
const val TYPE_AUTH_UPGRADE = 1
companion object {
// 认证升级
const val TYPE_AUTH_UPGRADE = 1
// 认证驳回
const val TYPE_AUTH_REJECT = 2
}
// 认证驳回
const val TYPE_AUTH_REJECT = 2
}
override fun createViewBinding(): DialogMerchantCenterBottomHintBinding {
return DialogMerchantCenterBottomHintBinding.inflate(layoutInflater)
}
override fun createViewBinding(): DialogMerchantCenterBottomHintBinding {
return DialogMerchantCenterBottomHintBinding.inflate(layoutInflater)
}
override fun initView() {
when (type) {
TYPE_AUTH_UPGRADE -> {
viewBinding.root.setBackgroundResource(R.drawable.shape_bg_bottom_hint)
viewBinding.tvContent.text =
context.resources.getString(R.string.upgrade_auth)
viewBinding.tvSubContent.text =
context.resources.getString(R.string.auth_merchant_description)
viewBinding.tvNext.setBackgroundResource(R.drawable.shape_bg_common_btn)
viewBinding.tvNext.setTextColor(context.resources.getColor(R.color.color_FFFFFFFF))
viewBinding.tvNext.text = context.resources.getString(R.string.immediate_upgrade)
}
TYPE_AUTH_REJECT -> {
viewBinding.root.setBackgroundResource(R.drawable.shape_bg_bottom_warn)
viewBinding.tvContent.text =
context.resources.getString(R.string.auth_apply_reject)
viewBinding.tvSubContent.text =
context.resources.getString(R.string.apply_auth_merchant_description)
viewBinding.tvNext.setBackgroundResource(R.drawable.shape_bg_modify_auth_btn)
viewBinding.tvNext.setTextColor(context.resources.getColor(R.color.color_FFFF3A3A))
viewBinding.tvNext.text = context.resources.getString(R.string.modify_auth)
}
}
override fun initView() {
when (type) {
TYPE_AUTH_UPGRADE -> {
viewBinding.root.setBackgroundResource(R.drawable.shape_bg_bottom_hint)
viewBinding.tvContent.text =
context.resources.getString(R.string.upgrade_auth)
viewBinding.tvSubContent.text =
context.resources.getString(R.string.auth_merchant_description)
viewBinding.tvNext.setBackgroundResource(R.drawable.shape_bg_common_btn)
viewBinding.tvNext.setTextColor(context.resources.getColor(R.color.color_FFFFFFFF))
viewBinding.tvNext.text = context.resources.getString(R.string.immediate_upgrade)
}
TYPE_AUTH_REJECT -> {
viewBinding.root.setBackgroundResource(R.drawable.shape_bg_bottom_warn)
viewBinding.tvContent.text =
context.resources.getString(R.string.auth_apply_reject)
viewBinding.tvSubContent.text =
context.resources.getString(R.string.apply_auth_merchant_description)
viewBinding.tvNext.setBackgroundResource(R.drawable.shape_bg_modify_auth_btn)
viewBinding.tvNext.setTextColor(context.resources.getColor(R.color.color_FFFF3A3A))
viewBinding.tvNext.text = context.resources.getString(R.string.modify_auth)
}
}
}
override fun initListener() {
viewBinding.tvNext.setOnClickListener(this)
}
override fun initListener() {
viewBinding.tvNext.setOnClickListener(this)
}
override fun show() {
super.show()
window?.setGravity(Gravity.BOTTOM)
val params = window?.attributes
params?.width = WindowManager.LayoutParams.MATCH_PARENT
params?.height = DensityUtil.dp2px(84f)
window?.attributes = params
}
override fun show() {
super.show()
window?.setGravity(Gravity.BOTTOM)
val params = window?.attributes
params?.width = WindowManager.LayoutParams.MATCH_PARENT
params?.height = DensityUtil.dp2px(84f)
window?.attributes = params
}
override fun onClick(v: View?) {
if (v?.id == R.id.tv_next) {
when (type) {
TYPE_AUTH_UPGRADE -> {
// 升级企业认证
callback?.onUpgradeEnterpriseAuth()
}
TYPE_AUTH_REJECT -> {
// 修改企业认证
callback?.onModifyEnterpriseAuth()
}
}
override fun onClick(v: View?) {
if (v?.id == R.id.tv_next) {
when (type) {
TYPE_AUTH_UPGRADE -> {
// 升级认证
callback?.onUpgradeAuth()
}
TYPE_AUTH_REJECT -> {
// 修改企业认证
callback?.onModifyEnterpriseAuth()
}
}
}
}
interface OnMerchantCenterBottomHintCallback {
/**
* 升级企业认证
*/
fun onUpgradeEnterpriseAuth()
interface OnMerchantCenterBottomHintCallback {
/**
* 由未认证升级认证
*/
fun onUpgradeAuth()
/**
* 修改企业认证
*/
fun onModifyEnterpriseAuth()
}
}
\ No newline at end of file
/**
* 修改企业认证
*/
fun onModifyEnterpriseAuth()
}
}
......@@ -9,82 +9,93 @@ import java.util.regex.Pattern
* date: 6/15/21 1:59 AM
* description: 输入过滤
*/
object InputFilterUtil {
class InputFilterUtil {
/**
* 真实姓名过滤
* 汉字 + ·
*/
fun getRealNameFilter(): InputFilter {
return InputFilter { source, _, _, _, _, _ ->
val pattern = Pattern.compile("[\\u4E00-\\u9FFF|·]+")
val matcher = pattern.matcher(source.toString())
if (!matcher.matches()) return@InputFilter ""
return@InputFilter null
companion object {
/**
* 真实姓名过滤
* 汉字 + ·
*/
fun getRealNameFilter(): InputFilter {
return InputFilter { source, _, _, _, _, _ ->
val pattern = Pattern.compile("[\\u4E00-\\u9FFF|·]+")
val matcher = pattern.matcher(source.toString())
if (!matcher.matches()) return@InputFilter ""
return@InputFilter null
}
}
}
/**
* 身份证号过滤
* 数字 + X
*/
fun getIDCardNumberFilter(): InputFilter {
return InputFilter { source, _, _, _, _, _ ->
val pattern = Pattern.compile("[0-9|X]+")
val matcher = pattern.matcher(source.toString())
if (!matcher.matches()) return@InputFilter ""
return@InputFilter null
/**
* 身份证号过滤
* 数字 + 大小写x
*/
fun getIDCardNumberFilter(): InputFilter {
return InputFilter { source, _, _, _, _, _ ->
val pattern = Pattern.compile("[0-9Xx]+")
val matcher = pattern.matcher(source.toString())
if (!matcher.matches()) return@InputFilter ""
return@InputFilter null
}
}
}
/**
* 手机号过滤
* 数字
*/
fun getPhoneNumberFilter(): InputFilter {
return InputFilter { source, _, _, _, _, _ ->
val pattern = Pattern.compile("[0-9]+")
val matcher = pattern.matcher(source.toString())
if (!matcher.matches()) return@InputFilter ""
return@InputFilter null
/**
* 手机号过滤
* 数字
*/
fun getPhoneNumberFilter(): InputFilter {
return InputFilter { source, _, _, _, _, _ ->
val pattern = Pattern.compile("[0-9]+")
val matcher = pattern.matcher(source.toString())
if (!matcher.matches()) return@InputFilter ""
return@InputFilter null
}
}
}
/**
* 公司注册名过滤
* 汉字
*/
fun getRegistrationNameFilter(): InputFilter {
return InputFilter { source, _, _, _, _, _ ->
val pattern = Pattern.compile("[\\u4E00-\\u9FFF]+")
val matcher = pattern.matcher(source.toString())
if (!matcher.matches()) return@InputFilter ""
return@InputFilter null
/**
* 公司注册名过滤
* 汉字
*/
fun getRegistrationNameFilter(): InputFilter {
return InputFilter { source, _, _, _, _, _ ->
val pattern = Pattern.compile("[\\u4E00-\\u9FFF]+")
val matcher = pattern.matcher(source.toString())
if (!matcher.matches()) return@InputFilter ""
return@InputFilter null
}
}
}
/**
* 统一社会信用代码过滤
* 数字 + 大写字母
*/
fun getRegistrationCodeFilter(): InputFilter {
return InputFilter { source, _, _, _, _, _ ->
val pattern = Pattern.compile("[0-9A-Z]+")
val matcher = pattern.matcher(source.toString())
if (!matcher.matches()) return@InputFilter ""
return@InputFilter null
/**
* 统一社会信用代码过滤
* 数字 + 大小写字母
*/
fun getRegistrationCodeFilter(): InputFilter {
return InputFilter { source, _, _, _, _, _ ->
val pattern = Pattern.compile("[0-9A-Za-z]+")
val matcher = pattern.matcher(source.toString())
if (!matcher.matches()) return@InputFilter ""
return@InputFilter null
}
}
}
/**
* 生活号名称过滤
*/
fun getLifeAccountNameFilter(): InputFilter {
return InputFilter { source, _, _, _, _, _ ->
val pattern = Pattern.compile("[\\u4E00-\\u9FFF]+")
val matcher = pattern.matcher(source.toString())
if (!matcher.matches()) return@InputFilter ""
return@InputFilter null
/**
* 带回调的输入长度过滤
*/
fun getLengthFilter(maxLength: Int, callback: OnLengthFilterCallback?): InputFilter {
return InputFilter { _, _, end, _, dstart, _ ->
if (dstart + end >= maxLength + 1) {
callback?.onLengthOverrun(maxLength)
return@InputFilter ""
}
return@InputFilter null
}
}
}
interface OnLengthFilterCallback {
/**
* 长度超限
* @param maxLength 最大长度
*/
fun onLengthOverrun(maxLength: Int)
}
}
......@@ -12,18 +12,8 @@ object SensitiveInfoUtil {
* 身份证号码出生日期脱敏
*/
fun idCardNumEncrypt(content: String): String {
val rule = "(\\d{6})\\d{8}(\\d{4})"
return content.replace(rule.toRegex(), "$1********$2")
}
/**
* 身份证号前三后四脱敏
*/
fun idCardPartEncrypt(content: String): String {
if (content.isBlank() || content.length < 18) {
return content
}
return content.replace(("(?<=\\w{3})\\w(?=\\w{4})").toRegex(), "*");
if (content.isBlank()) return content
return content.replace(("(\\d{6})\\d{8}(\\d{4})").toRegex(), "$1********$2")
}
/**
......
......@@ -68,6 +68,14 @@ class CommonTopBarView @JvmOverloads constructor(
viewBinding.tvAction.isVisible = isVisible
}
/**
* 设置操作按钮是否可用
*/
fun setActionEnable(isEnable: Boolean) {
viewBinding.tvAction.isEnabled = isEnable
viewBinding.tvAction.alpha = if (isEnable) 1f else 0.4f
}
override fun onClick(v: View?) {
if (v?.id == R.id.iv_back) {
// 若没有设置返回点击回调则默认pop
......
......@@ -58,6 +58,7 @@ class LifeAccountAuthBusinessInfoEditView @JvmOverloads constructor(
fun showErrorTips(tips: String) {
viewBinding.tvErrorTips.isVisible = true
viewBinding.tvErrorTips.text = tips
highLightEditContent()
}
/**
......@@ -66,6 +67,7 @@ class LifeAccountAuthBusinessInfoEditView @JvmOverloads constructor(
private fun dismissErrorTips() {
viewBinding.tvErrorTips.isVisible = false
viewBinding.tvErrorTips.text = ""
cancelHighLightEditContent()
}
/**
......
......@@ -37,7 +37,7 @@ class LifeAccountLabelView @JvmOverloads constructor(
private var callback: OnLifeAccountLabelCallback? = null
init {
viewBinding.ivLifeAccountDetail.setOnClickListener(this)
setOnClickListener(this)
}
/**
......@@ -60,9 +60,10 @@ class LifeAccountLabelView @JvmOverloads constructor(
// 已认证
setBackgroundResource(R.drawable.shape_life_account_status_auth)
setTextColor(ContextCompat.getColor(context, R.color.color_FF1852F1))
text = when (data.life_account_type) {
Constant.TYPE_LIFE_ACCOUNT_PERSONAL -> resources.getString(R.string.personal_auth)
Constant.TYPE_LIFE_ACCOUNT_ENTERPRISE -> resources.getString(R.string.enterprise_auth)
text = when (data.tag.tag_key) {
Constant.LIFE_ACCOUNT_TAG_COMMON_ENTERPRISE_AUTH -> resources.getString(R.string.common_enterprise)
Constant.LIFE_ACCOUNT_TAG_INDIVIDUAL_BUSINESS_AUTH -> resources.getString(R.string.individual_business)
Constant.LIFE_ACCOUNT_TAG_PERSONAL_AUTH -> resources.getString(R.string.personal_auth)
else -> ""
}
}
......@@ -93,10 +94,8 @@ class LifeAccountLabelView @JvmOverloads constructor(
}
override fun onClick(v: View?) {
if (v?.id == R.id.iv_life_account_detail) {
// 跳转生活号基本信息
callback?.onEnterLifeAccountInfo(curLifeAccount.life_account_id)
}
// 跳转生活号基本信息
callback?.onEnterLifeAccountInfo(curLifeAccount.life_account_id)
}
fun setOnLifeAccountLabelCallback(callback: OnLifeAccountLabelCallback) {
......
......@@ -6,6 +6,7 @@ import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
import com.yidian.shenghuoquan.newscontent.R
import com.yidian.shenghuoquan.newscontent.databinding.ViewLifeAccountPersonalAuthInfoBinding
import com.yidian.shenghuoquan.newscontent.utils.SensitiveInfoUtil
/**
* author: yinjiacheng
......@@ -13,32 +14,34 @@ import com.yidian.shenghuoquan.newscontent.databinding.ViewLifeAccountPersonalAu
* description: 商户管理中心-基本信息-生活号个人认证信息
*/
class LifeAccountPersonalAuthInfoView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyle: Int = 0
context: Context,
attrs: AttributeSet? = null,
defStyle: Int = 0
) : ConstraintLayout(context, attrs, defStyle) {
private val viewBinding by lazy {
ViewLifeAccountPersonalAuthInfoBinding.bind(
View.inflate(
getContext(),
R.layout.view_life_account_personal_auth_info,
this
)
)
}
private val viewBinding by lazy {
ViewLifeAccountPersonalAuthInfoBinding.bind(
View.inflate(
getContext(),
R.layout.view_life_account_personal_auth_info,
this
)
)
}
/**
* 填充认证信息
* @param occupation 职业
* @param realName 真实姓名
* @param idCardNo 身份证号
* @param phoneNo 手机号
*/
fun fillAuthInfo(occupation: String?, realName: String?, idCardNo: String?, phoneNo: String?) {
viewBinding.tvContentOccupationLabel.text = occupation
viewBinding.tvContentRealName.text = realName
viewBinding.tvContentIdCardNo.text = idCardNo
viewBinding.tvContentPhoneNo.text = phoneNo
}
}
\ No newline at end of file
/**
* 填充认证信息
* @param lifeAccountName 生活号名称
* @param occupation 职业
* @param realName 真实姓名
* @param idCardNo 身份证号
* @param phoneNo 手机号
*/
fun fillAuthInfo(lifeAccountName: String?, occupation: String?, realName: String?, idCardNo: String?, phoneNo: String?) {
viewBinding.tvLifeAccountName.text = lifeAccountName
viewBinding.tvContentOccupationLabel.text = occupation
viewBinding.tvContentRealName.text = realName
viewBinding.tvContentIdCardNo.text = idCardNo?.let { SensitiveInfoUtil.idCardNumEncrypt(it) }
viewBinding.tvContentPhoneNo.text = phoneNo?.let { SensitiveInfoUtil.mobileEncrypt(it) }
}
}
......@@ -16,7 +16,7 @@
android:id="@+id/tv_upgrade_life_account"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="29dp"
android:layout_marginStart="25dp"
android:layout_marginTop="29dp"
android:includeFontPadding="false"
android:text="@string/join_life_circle_and_upgrade_to_life_account"
......@@ -27,21 +27,25 @@
<com.yidian.nightmode.widget.YdTextView
android:id="@+id/tv_provide_services"
android:layout_width="wrap_content"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:includeFontPadding="false"
android:text="@string/provide_more_and_better_services"
android:textColor="#FF333333"
android:textSize="27sp"
android:textSize="24sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toStartOf="@id/tv_upgrade_life_account"
app:layout_constraintTop_toBottomOf="@id/tv_upgrade_life_account" />
<com.yidian.shenghuoquan.newscontent.widget.LifeAccountAuthCardView
android:id="@+id/view_personal_auth"
android:layout_width="322dp"
android:layout_height="144dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="19dp"
android:layout_marginTop="24dp"
android:layout_marginEnd="19dp"
app:cardCornerRadius="12dp"
app:cardElevation="6dp"
app:layout_constraintEnd_toEndOf="parent"
......@@ -50,9 +54,11 @@
<com.yidian.shenghuoquan.newscontent.widget.LifeAccountAuthCardView
android:id="@+id/view_enterprise_auth"
android:layout_width="322dp"
android:layout_height="144dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="19dp"
android:layout_marginTop="19dp"
android:layout_marginEnd="19dp"
app:cardCornerRadius="12dp"
app:cardElevation="6dp"
app:layout_constraintEnd_toEndOf="parent"
......
......@@ -28,7 +28,6 @@
android:paddingBottom="5dp"
android:scaleType="centerCrop"
android:src="@drawable/big_back"
android:visibility="gone"
tools:ignore="ContentDescription" />
<TextView
......@@ -82,7 +81,7 @@
android:layout_marginStart="20dp"
android:paddingTop="6dp"
android:paddingBottom="6dp"
android:text="@string/account_error_tips"
android:text="@string/life_account_name_overrun_error_tips"
android:textColor="@color/red_account_tips"
android:textSize="12sp"
android:visibility="gone"
......
......@@ -14,30 +14,45 @@
app:CommonTopBarView_title_text="@string/management_center"
app:layout_constraintTop_toTopOf="parent" />
<com.yidian.shenghuoquan.newscontent.widget.LifeAccountLabelView
android:id="@+id/lv_life_account_label"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/bv_top_bar" />
<com.yidian.shenghuoquan.newscontent.widget.MerchantAssetView
android:id="@+id/av_merchant_asset"
android:layout_width="match_parent"
android:layout_height="125dp"
android:layout_marginStart="15dp"
android:layout_marginEnd="15dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/lv_life_account_label" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_service_group"
<com.scwang.smart.refresh.layout.SmartRefreshLayout
android:id="@+id/rl_refresh"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="10dp"
android:paddingStart="15dp"
android:paddingEnd="15dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/av_merchant_asset" />
app:layout_constraintTop_toBottomOf="@id/bv_top_bar">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.yidian.shenghuoquan.newscontent.widget.LifeAccountLabelView
android:id="@+id/lv_life_account_label"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.yidian.shenghuoquan.newscontent.widget.MerchantAssetView
android:id="@+id/av_merchant_asset"
android:layout_width="match_parent"
android:layout_height="125dp"
android:layout_marginStart="15dp"
android:layout_marginEnd="15dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/lv_life_account_label" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_service_group"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="10dp"
android:paddingStart="15dp"
android:paddingEnd="15dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/av_merchant_asset" />
</androidx.constraintlayout.widget.ConstraintLayout>
</com.scwang.smart.refresh.layout.SmartRefreshLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<com.yidian.nightmode.widget.YdRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="44dp"
android:background="@drawable/selector_card"
android:gravity="center_vertical"
android:orientation="horizontal">
<com.yidian.nightmode.widget.YdFrameLayout
android:id="@+id/image_bg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="15dp">
<com.yidian.news.image.YdRoundedImageView
android:id="@+id/image"
android:layout_width="28dp"
android:layout_height="28dp"
android:layout_marginBottom="2dp"
android:layout_marginRight="8dp"
android:scaleType="centerCrop"
android:src="@android:color/transparent"
app:placeholder="@android:color/transparent"
app:placeholderBg ="@android:color/transparent"
app:riv_corner_radius="5dp" />
<com.yidian.news.image.YdNetworkImageView
android:id="@+id/img_v_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|right"
app:placeholder="@drawable/transparent_drawable"
app:placeholderBg="@android:color/transparent"
app:riv_corner_radius="0dp"
app:riv_border_width="0dp"/>
</com.yidian.nightmode.widget.YdFrameLayout>
<com.yidian.nightmode.widget.YdLinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="4dp"
android:layout_toLeftOf="@id/txtCount"
android:layout_toRightOf="@id/image_bg"
android:orientation="horizontal">
<com.yidian.nightmode.widget.YdTextView
android:id="@+id/txtTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@null"
android:ellipsize="end"
android:maxEms="10"
android:maxLines="1"
android:text="channel name"
android:textColor="?attr/title_text"
android:textSize="15sp" />
<com.yidian.nightmode.widget.YdTextView
android:id="@+id/search_hint_annotation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@null"
android:paddingLeft="3dp"
android:text="annotation"
android:textColor="@color/content_other_text"
android:textSize="13sp" />
<ImageView
android:id="@+id/rssFlag"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="8dp"
android:background="@null"
android:src="@mipmap/right_rss_icon" />
</com.yidian.nightmode.widget.YdLinearLayout>
<com.yidian.nightmode.widget.YdView
android:id="@+id/ydView"
style="@style/divider_style_dark"
android:layout_alignParentBottom="true"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp" />
<com.yidian.nightmode.widget.YdTextView
android:id="@+id/txtCount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignEnd="@+id/ydView"
android:layout_alignRight="@+id/ydView"
android:layout_centerVertical="true"
android:background="@null"
android:text="book number"
android:textColor="@color/book_number"
android:textSize="11sp" />
</com.yidian.nightmode.widget.YdRelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<com.yidian.nightmode.widget.YdRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="44dp"
android:background="@drawable/selector_card"
android:gravity="center_vertical"
android:orientation="horizontal">
<com.yidian.nightmode.widget.YdFrameLayout
android:id="@+id/image_bg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="15dp">
<com.yidian.news.image.YdRoundedImageView
android:id="@+id/image"
android:layout_width="28dp"
android:layout_height="28dp"
android:layout_marginBottom="2dp"
android:layout_marginRight="8dp"
android:scaleType="centerCrop"
android:src="@android:color/transparent"
app:placeholder="@android:color/transparent"
app:placeholderBg ="@android:color/transparent"
app:riv_corner_radius="5dp" />
<com.yidian.news.image.YdNetworkImageView
android:id="@+id/img_v_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|right"
app:placeholder="@drawable/transparent_drawable"
app:placeholderBg="@android:color/transparent"
app:riv_corner_radius="0dp"
app:riv_border_width="0dp"/>
</com.yidian.nightmode.widget.YdFrameLayout>
<com.yidian.nightmode.widget.YdLinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="4dp"
android:layout_toLeftOf="@id/txtCount"
android:layout_toRightOf="@id/image_bg"
android:orientation="horizontal">
<com.yidian.nightmode.widget.YdTextView
android:id="@+id/txtTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@null"
android:ellipsize="end"
android:maxEms="10"
android:maxLines="1"
android:text="channel name"
android:textColor="?attr/title_text"
android:textSize="15sp" />
<com.yidian.nightmode.widget.YdTextView
android:id="@+id/search_hint_annotation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@null"
android:paddingLeft="3dp"
android:text="annotation"
android:textColor="@color/content_other_text"
android:textSize="13sp" />
<ImageView
android:id="@+id/rssFlag"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="8dp"
android:background="@null"
android:src="@mipmap/right_rss_icon" />
</com.yidian.nightmode.widget.YdLinearLayout>
<com.yidian.nightmode.widget.YdView
android:id="@+id/ydView"
style="@style/divider_style_dark"
android:layout_alignParentBottom="true"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp" />
<com.yidian.nightmode.widget.YdTextView
android:id="@+id/txtCount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignEnd="@+id/ydView"
android:layout_alignRight="@+id/ydView"
android:layout_centerVertical="true"
android:background="@null"
android:text="book number"
android:textColor="@color/book_number"
android:textSize="11sp" />
</com.yidian.nightmode.widget.YdRelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="322dp"
android:layout_height="144dp">
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/selector_life_account_auth_card">
<com.yidian.nightmode.widget.YdTextView
<TextView
android:id="@+id/tv_name"
android:layout_width="match_parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="23dp"
android:includeFontPadding="false"
android:paddingStart="23dp"
android:paddingEnd="23dp"
android:textColor="#FF333333"
android:textSize="23sp"
android:textSize="22sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.yidian.nightmode.widget.YdTextView
<TextView
android:id="@+id/tv_condition"
android:layout_width="match_parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:includeFontPadding="false"
......@@ -36,20 +36,22 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_name" />
<com.yidian.nightmode.widget.YdTextView
<TextView
android:id="@+id/tv_description"
android:layout_width="match_parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:layout_marginBottom="23dp"
android:includeFontPadding="false"
android:paddingStart="23dp"
android:paddingEnd="23dp"
android:textColor="#FF999999"
android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_condition" />
<com.yidian.nightmode.widget.YdImageView
<ImageView
android:id="@+id/iv_authenticated"
android:layout_width="49dp"
android:layout_height="58dp"
......
......@@ -6,7 +6,7 @@
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="@dimen/dp283"
android:layout_height="@dimen/dp174"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp32"
android:background="@drawable/shape_bg_merchant_info"
app:layout_constraintEnd_toEndOf="parent"
......@@ -15,13 +15,15 @@
<TextView
android:id="@+id/tv_life_account_name"
android:layout_width="wrap_content"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp19"
android:layout_marginTop="@dimen/dp38"
android:layout_marginEnd="@dimen/dp19"
android:includeFontPadding="false"
android:textColor="@color/color_333333"
android:textSize="@dimen/sp23"
app:layout_constraintEnd_toStartOf="@id/view_auth_complete"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
......@@ -54,10 +56,12 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp19"
android:layout_marginBottom="@dimen/dp19"
android:includeFontPadding="false"
android:text="@string/phone_number"
android:textColor="@color/color_999999"
android:textSize="@dimen/sp15"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="@id/tv_life_account_name"
app:layout_constraintTop_toBottomOf="@id/tv_title_manager" />
......@@ -74,6 +78,7 @@
app:layout_constraintTop_toBottomOf="@id/tv_title_manager" />
<View
android:id="@+id/view_auth_complete"
android:layout_width="@dimen/dp49"
android:layout_height="@dimen/dp58"
android:layout_marginTop="@dimen/dp36"
......
......@@ -6,7 +6,7 @@
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="@dimen/dp283"
android:layout_height="@dimen/dp259"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:background="@drawable/shape_bg_merchant_info"
app:layout_constraintEnd_toEndOf="parent"
......@@ -14,15 +14,16 @@
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:id="@+id/tv_life_account_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp19"
android:layout_marginTop="@dimen/dp47"
android:layout_marginEnd="@dimen/dp19"
android:includeFontPadding="false"
android:text="@string/personal_shop"
android:textColor="@color/color_333333"
android:textSize="@dimen/sp15"
app:layout_constraintEnd_toStartOf="@id/view_auth_complete"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
......@@ -35,8 +36,8 @@
android:text="@string/occupation_label"
android:textColor="@color/color_999999"
android:textSize="@dimen/sp15"
app:layout_constraintStart_toStartOf="@id/tv_title"
app:layout_constraintTop_toBottomOf="@id/tv_title" />
app:layout_constraintStart_toStartOf="@id/tv_life_account_name"
app:layout_constraintTop_toBottomOf="@id/tv_life_account_name" />
<TextView
android:id="@+id/tv_content_occupation_label"
......@@ -48,7 +49,7 @@
android:textColor="@color/color_333333"
android:textSize="@dimen/sp15"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_title" />
app:layout_constraintTop_toBottomOf="@id/tv_life_account_name" />
<TextView
android:id="@+id/tv_title_real_name"
......@@ -59,7 +60,7 @@
android:text="@string/real_name"
android:textColor="@color/color_999999"
android:textSize="@dimen/sp15"
app:layout_constraintStart_toStartOf="@id/tv_title"
app:layout_constraintStart_toStartOf="@id/tv_life_account_name"
app:layout_constraintTop_toBottomOf="@id/tv_title_occupation_label" />
<TextView
......@@ -83,7 +84,7 @@
android:text="@string/id_card_number"
android:textColor="@color/color_999999"
android:textSize="@dimen/sp15"
app:layout_constraintStart_toStartOf="@id/tv_title"
app:layout_constraintStart_toStartOf="@id/tv_life_account_name"
app:layout_constraintTop_toBottomOf="@id/tv_content_real_name" />
<TextView
......@@ -103,11 +104,13 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp19"
android:layout_marginBottom="@dimen/dp19"
android:includeFontPadding="false"
android:text="@string/phone_number"
android:textColor="@color/color_999999"
android:textSize="@dimen/sp15"
app:layout_constraintStart_toStartOf="@id/tv_title"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="@id/tv_life_account_name"
app:layout_constraintTop_toBottomOf="@id/tv_title_id_card_no" />
<TextView
......@@ -123,11 +126,12 @@
app:layout_constraintTop_toBottomOf="@id/tv_title_id_card_no" />
<View
android:id="@+id/view_auth_complete"
android:layout_width="@dimen/dp49"
android:layout_height="@dimen/dp59"
android:layout_marginTop="@dimen/dp36"
android:background="@mipmap/icon_seal"
android:layout_marginEnd="@dimen/dp1"
android:background="@mipmap/icon_seal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
......
......@@ -20,13 +20,17 @@
<TextView
android:id="@+id/tv_content"
android:layout_width="wrap_content"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp85"
android:layout_marginEnd="@dimen/dp35"
android:ellipsize="end"
android:includeFontPadding="false"
android:maxLines="1"
android:textColor="@color/color_333333"
android:textSize="@dimen/sp15"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
......
......@@ -51,7 +51,7 @@
<string name="create_account">确认创建</string>
<string name="account_create_tips">同企业下生活号名称不可复用</string>
<string name="account_create_desc">生活号作为企业服务管理载体,请正确使用生活号权益,新申请生活号默认当前申请人作为默认管理员,申请成功 后可在销售APP内进行更改</string>
<string name="account_error_tips">名称超限,最多40个字符</string>
<string name="life_account_name_overrun_error_tips">名称超限,最多24个字符</string>
<string name="account_manager">管理员</string>
<string name="account_name">生活号名称</string>
<string name="account_title">创建生活号</string>
......
package com.yidian.subway.userinfo.ui
import android.os.Bundle
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.core.os.bundleOf
import com.yidian.common.base.BaseFragment
import com.yidian.subway.userinfo.databinding.FragmentUserInfoBinding
import com.yidian.xpage.XPageManager
class UserInfoFragment:BaseFragment<FragmentUserInfoBinding>() {
companion object{
fun newInstance(): UserInfoFragment {
val fragment = UserInfoFragment()
val args = bundleOf()
fragment.arguments = args
return fragment
}
}
override fun createViewBinding(
inflater: LayoutInflater,
container: ViewGroup?
): FragmentUserInfoBinding {
return FragmentUserInfoBinding.inflate(inflater,container,false)
}
override fun init(savedInstanceState: Bundle?) {
super.init(savedInstanceState)
viewBinding.tvContent.text = "我的页面"
setClickListener()
}
private fun setClickListener(){
viewBinding.circleImage.setOnClickListener{
imagePopupShow()
}
viewBinding.btnJump.setOnClickListener{
XPageManager.push("/home", null)
}
}
private fun imagePopupShow(){
// val imagePopupWindow = activity?.let { ImagePopupWindow(it) }
// val imageList = ArrayList<ImageItemBean>()
// for (i in 1..5){
// imageList.add(ImageItemBean(R.mipmap.head_icon))
// }
// imagePopupWindow?.updateImageList(imageList)
// imagePopupWindow?.show(lly_root)
}
}
\ No newline at end of file
......@@ -29,13 +29,19 @@ ext.dependencies = [
'androidx.constraintlayout:constraintlayout:2.0.4',
'jp.co.cyberagent.android:gpuimage:2.1.0',
'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9',
// 刷新
'com.scwang.smart:refresh-layout-kernel:2.0.1',
'com.scwang.smart:refresh-header-classics:2.0.1',
'com.scwang.smart:refresh-footer-classics:2.0.1',
"androidx.recyclerview:recyclerview:1.1.0",
'de.hdodenhof:circleimageview:3.1.0',
'com.github.chrisbanes:PhotoView:2.3.0',
'com.yidian.android:CommonComponent:0.0.88',
// 'com.yidian.android:CommonComponent:0.0.88',
'com.yidian.android:CommonUtil:0.0.88',
'com.yidian.android:log-util:0.0.88',
'com.yidian.android:nightmode:0.0.88',
'com.yidian.xarc:xevent:0.0.3',
'com.google.zxing:core:3.4.0',
'id.zelory:compressor:3.0.0',
......
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