app/build.gradle
@@ -25,8 +25,8 @@ applicationId "com.fangxinxing.xxfxx" minSdkVersion 24 targetSdkVersion 29 versionCode 1 versionName "1.0.0" versionCode 2 versionName "1.0.1" multiDexEnabled true testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" ndk { app/src/main/AndroidManifest.xml
@@ -69,6 +69,21 @@ tools:remove="android:dataExtractionRules" tools:replace="android:allowBackup,android:theme"> <activity android:name=".ui.mine.money_bag.SelectWithdrawBankActivity" android:exported="false" /> <activity android:name=".ui.mine.money_bag.WithdrawResultActivity" android:exported="false" /> <activity android:name=".ui.mine.money_bag.SetWithdrawAccountActivity" android:exported="false" /> <activity android:name=".ui.mine.money_bag.ApplyWithdrawActivity" android:exported="false" /> <activity android:name=".ui.mine.money_bag.MineWalletActivity" android:exported="false" /> <activity android:name=".ui.main.SearchAddressActivity" android:exported="false" /> <activity app/src/main/assets/banks.json
New file Diff too large app/src/main/java/com/fangxinxing/xxfxx/base/MyApplication.kt
@@ -468,7 +468,6 @@ protected var mTtsManager: TTSController? = null public var isLogin: Boolean = true public var isPlayVoice: Boolean = true var isCould: Boolean = false public var appContext: MyApplication? = null fun getInstance(): MyApplication { app/src/main/java/com/fangxinxing/xxfxx/bean/BankName.kt
@@ -1,12 +1,18 @@ package com.fangxinxing.xxfxx.bean import android.os.Parcelable import com.github.promeg.pinyinhelper.Pinyin import kotlinx.android.parcel.Parcelize @Parcelize data class BankName( val bankCode: String, val bankName: String, val drecCode: String, val id: Int ){ fun getInitial():String = if (bankName.startsWith("(")) "#" else if (bankName.startsWith("重庆")) "C" else Pinyin.toPinyin(bankName[0])[0].toString() val bankCode: String? = null, val bankName: String? = null, val drecCode: String? = null, val id: Int? = null ) : Parcelable { fun getInitial(): String = if (bankName?.startsWith("(") == true) "#" else if (bankName?.startsWith("重庆") == true) "C" else Pinyin.toPinyin( bankName?.get(0) ?: 'A' )[0].toString() } app/src/main/java/com/fangxinxing/xxfxx/bean/CloseRecordBean.java
@@ -53,7 +53,7 @@ private double money; private String name; private String remark; private int state; private int state;//提现状态(1=待处理,2=成功,3=失败) public int getId() { return id; @@ -102,5 +102,32 @@ public void setState(int state) { this.state = state; } //是否在提现审核中 public boolean hadInWithdrawAudit() { return state == 1; } //是否提现审核成功 public boolean hadWithdrawSuccess() { return state == 2; } //是否提现审核失败 public boolean hadWithdrawFail() { return state == 3; } //获取显示提现审核状态 public String getShowWithdrawAuditStatus() { switch (state) { case 1: return "待审核"; case 3: return "未通过"; default: return ""; } } } } app/src/main/java/com/fangxinxing/xxfxx/bean/UserBankInfo.kt
@@ -4,34 +4,68 @@ import kotlinx.android.parcel.Parcelize @Parcelize data class LastWithdrawInfo( val bankName: String? = null,//银行名称 val code: String? = null,//银行卡号 var money: String? = null,//提现金额 val name: String? = null,//银行卡持有人姓名 val smsCode: String? = null,//验证码 val type: String? = null,//提现类型(1=活动收入提现,2=业务收入提现) val state: String? = null,//提现状态(1=待处理,2=成功,3=失败) val remark: String? = null,//备注 var userWithdrawal: UserBankInfo? = null, ) : Parcelable { //是否请求提现过 fun hadRequestWithdrawHistory(): Boolean { return userWithdrawal != null } //是否在提现审核中 fun hadInWithdrawAudit(): Boolean { return state == "1" } //是否提现审核成功 fun hadWithdrawSuccess(): Boolean { return state == "2" } //是否提现审核失败 fun hadWithdrawFail(): Boolean { return state == "3" } } @Parcelize data class UserBankInfo( val applicationStatus: String? = "", val balanceAcctId: String?, val bankBranchCode: String?, val bankCardCode: String?, val bankCode: String?, val bankName: String?, val bindAcctName: String?, val certificateCode: String?, val certificateExpireTime: String?, val certificateName: String?, val createTime: String?, val cusApplicationId: String?, val cusId: String?, val failureMsgsReason: String?, val id: String?, val idCardFrontPicture: String?, val idCardReversePicture: String?, val imgUrl: String?, val imgUrlOne: String?, val licenceIssuingAuthority: String?, val openAccountName: String?, val outRequestNo: String?, val phone: String?, val relAcctNo: String?, val settleAcctId: String?, val status: Boolean, val succeededAt: String?, val transactionAuthorizationCode: String?, val userId: String? ):Parcelable val applicationStatus: String? = "",//进件状态 val balanceAcctId: String? = null,//电子账簿 ID val bankBranchCode: String? = null,//开户银行联行号 val bankCardCode: String? = null,//银行卡号 val bankCardUrl: String? = null,//银行卡图片 val bankCode: String? = null,//开户银行编码 val bankName: String? = null,//银行名称(选择银行) val bindAcctName: String? = null,//银行生成的户名 val certificateCode: String? = null,//证件号码 val certificateExpireTime: String? = null,//证件有效期 val certificateName: String? = null,//证件姓名 val createTime: String? = null,//创建时间 val cusApplicationId: String? = null,//系统订单号 val cusId: String? = null,//个人用户id val failureMsgsReason: String? = null,//申请失败原因 val id: String? = null, val idCardFrontPicture: String? = null,//法人身份证照片正面 val idCardReversePicture: String? = null,//法人身份证照片反面 val imgUrl: String? = null,//正面身份证url val imgUrlOne: String? = null,//反面身份证url val licenceIssuingAuthority: String? = null,//发证机关 val openAccountName: String? = null,//开户名称 val outRequestNo: String? = null,//平台订单号 val phone: String? = null,//手机号 val relAcctNo: String? = null,//电子账簿账簿号 val settleAcctId: String? = null,//绑定账户 ID val status: Boolean? = null,//状态 val succeededAt: String? = null,//申请通过时间 val transactionAuthorizationCode: String? = null,//交易授权码 val userId: String? = null//用户-司机-ID ) : Parcelable app/src/main/java/com/fangxinxing/xxfxx/bean/UserBankInfoBean.java
@@ -3,7 +3,7 @@ public class UserBankInfoBean { private int code; private String msg; private UserBankInfo data; private LastWithdrawInfo data; public int getCode() { return code; @@ -21,11 +21,12 @@ this.msg = msg; } public UserBankInfo getData() { public LastWithdrawInfo getData() { return data; } public void setData(UserBankInfo data) { public void setData(LastWithdrawInfo data) { this.data = data; } } app/src/main/java/com/fangxinxing/xxfxx/extension/ContextExtension.kt
New file @@ -0,0 +1,59 @@ package com.fangxinxing.xxfxx.extension import android.content.Context import java.io.BufferedReader import java.io.File import java.io.IOException import java.io.InputStreamReader //扩展函数 读取Assets文件 耗时操作 fun Context.extReadAssetsFile(fileName: String): String? { try { resources.assets.open(fileName).use { inputStream -> InputStreamReader(inputStream).use { inputReader -> BufferedReader(inputReader).use { bufReader -> var line: String? = null return StringBuilder().apply { while ((bufReader.readLine().also { line = it }) != null) { append(line) } }.toString() } } } } catch (e: IOException) { e.printStackTrace() } return null } //扩展函数 获取沙盒保存文件夹 fun Context.extGetSaveFileDir(subDir: String? = null): File { return getExternalFilesDir("")?.takeIf { it.exists() && it.canRead() && it.canWrite() }?.let { if (!subDir.isNullOrEmpty()) { val file = File(it, subDir) try { file.mkdirs() } catch (e: Exception) { e.printStackTrace() } file } else { it } } ?: filesDir.let { if (!subDir.isNullOrEmpty()) { val file = File(it, subDir) try { file.mkdirs() } catch (e: Exception) { e.printStackTrace() } file } else { it } } } app/src/main/java/com/fangxinxing/xxfxx/netUtls/Api.java
@@ -10,8 +10,8 @@ public class Api { private static final boolean IS_TEST = false; //内网可外部访问 public static final String BASE_URL = IS_TEST ? "http://221.182.45.100:7894/driver/" : "https://ride.cbyzx.com/driver/"; public static final String SOCKET_SERVER = IS_TEST ? "221.182.45.100" : "115.159.101.223"; public static final String BASE_URL = IS_TEST ? "http://192.168.110.111:5000/driver/" : "https://ride.cbyzx.com/driver/"; public static final String SOCKET_SERVER = IS_TEST ? "192.168.110.111" : "115.159.101.223"; public static final int SOCKET_PORT = 9999; public static final String strShare = IS_TEST ? "http://221.182.45.100:8443/share/shareIndex.html" : "https://ride.cbyzx.com/share/shareIndex.html"; @@ -106,6 +106,7 @@ public static String queryNewData = "api/version/queryNewData"; //api/version/queryNewData 获取最新版本数据 public static String updatePhone = "api/driver/updatePhone"; //api/driver/updatePhone 修改手机号码 public static String updatePassword = "api/driver/updatePassword"; //api/driver/updatePassword 修改密码 public static String queryLastWithdrawal = "api/withdrawal/queryLastWithdrawal"; //api/withdrawal/queryLastWithdrawal 查询上一次提现参数 public static String withdrawal = "api/withdrawal/withdrawal"; //api/withdrawal/withdrawal 账户余额提现 public static String queryActivityIncome = "api/driver/queryActivityIncome"; //api/driver/queryActivityIncome 获取收益明细 (我的奖励) public static String queryWithdrawal = "api/withdrawal/queryWithdrawal"; //api/withdrawal/queryWithdrawal 获取历史提现数据 app/src/main/java/com/fangxinxing/xxfxx/ui/MainTabActivity.kt
@@ -55,12 +55,6 @@ // callModule() } override fun onResume() { super.onResume() callCould() } private fun callMine() { var map = getMapByAny() callNet(false, Api.queryInfo, map) { @@ -79,18 +73,6 @@ } } } private fun callCould() { var map = getMapByAny() callNet( false, Api.isElectronicLede, map ) { MyApplication.isCould = gson.fromJson(it, StringBean::class.java).data != "yes" } } override fun setOnclick() { tv_main.clickDelay { app/src/main/java/com/fangxinxing/xxfxx/ui/adapter/CloseRecordAdapter.kt
@@ -1,13 +1,17 @@ package com.fangxinxing.xxfxx.ui.adapter import android.view.View import androidx.core.view.isVisible import com.fangxinxing.xxfxx.R import com.fangxinxing.xxfxx.base.BaseRvAdapter import com.fangxinxing.xxfxx.base.BaseViewHolder import com.fangxinxing.xxfxx.bean.CloseRecordBean import kotlinx.android.synthetic.main.item_close_record.view.* import com.fangxinxing.xxfxx.extension.extColorIdToValue import kotlinx.android.synthetic.main.item_close_record.view.tv_money import kotlinx.android.synthetic.main.item_close_record.view.tv_status import kotlinx.android.synthetic.main.item_close_record.view.tv_time class CloseRecordAdapter: BaseRvAdapter<CloseRecordBean.DataBean>() { class CloseRecordAdapter : BaseRvAdapter<CloseRecordBean.DataBean>() { override fun getLayoutResId(viewType: Int): Int { return R.layout.item_close_record @@ -16,9 +20,14 @@ override fun onBindItem(holder: BaseViewHolder?, view: View?, item: CloseRecordBean.DataBean?) { holder?.let { it.itemView.tv_time.text = item!!.insertTime it.itemView.tv_money.text = "¥"+item!!.money.toString() it.itemView.tv_money.text = "¥" + item!!.money.toString() it.itemView.tv_status.isVisible = !item!!.hadWithdrawSuccess() it.itemView.tv_status.text = item!!.showWithdrawAuditStatus it.itemView.tv_status.setTextColor( (if (item.hadInWithdrawAudit()) R.color.color_fd943a else R.color.main_yellow_shen).extColorIdToValue( it.itemView.context ) ) } } } app/src/main/java/com/fangxinxing/xxfxx/ui/main/MainPubFragment.kt
@@ -585,17 +585,14 @@ } } else { if (requireActivity().checkPermissions("出车")) { if (!MyApplication.isCould) toast("请先填写个人进件") else callNet(Api.queryMyBusiness, getMapByAny()) { var bean = gson.fromJson(it, SelectServerModeBean::class.java).data if (bean.isEmpty()) { toast("请前往个人中心--接单设置进行设置") return@callNet } requireActivity().startActivity<SelectServerModeActivity>() callNet(Api.queryMyBusiness, getMapByAny()) { var bean = gson.fromJson(it, SelectServerModeBean::class.java).data if (bean.isEmpty()) { toast("请前往个人中心--接单设置进行设置") return@callNet } requireActivity().startActivity<SelectServerModeActivity>() } } } } app/src/main/java/com/fangxinxing/xxfxx/ui/mine/AddCarActivity.kt
@@ -24,7 +24,7 @@ import kotlin.collections.ArrayList class AddCarActivity : BasePhotoActivity() { var arrayColor = arrayListOf("黑色", "银色", "白色", "红色", "黄色", "橙色", "蓝色") var arrayColor = arrayListOf("黑色", "银色", "白色", "红色", "黄色", "橙色", "蓝色", "紫色", "紫银色") var arrayNumStart = arrayListOf("冀","蒙","吉","沪","皖","鲁","鄂","桂","渝","藏","甘","新","晋" ,"辽","黑", "苏", "浙", "闽", "赣", "豫", "湘", "粤", "琼", "川", "黔", "滇", "陕", "青", "宁") var letter = arrayListOf("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T" app/src/main/java/com/fangxinxing/xxfxx/ui/mine/MineActivity.kt
@@ -19,7 +19,6 @@ import com.fangxinxing.xxfxx.bean.MerchantInfo import com.fangxinxing.xxfxx.bean.ModuleBean import com.fangxinxing.xxfxx.bean.ShareBean import com.fangxinxing.xxfxx.bean.StringBean import com.fangxinxing.xxfxx.bean.UserBean import com.fangxinxing.xxfxx.bean.UserInfoBean import com.fangxinxing.xxfxx.netUtls.Api @@ -29,6 +28,8 @@ import com.fangxinxing.xxfxx.netUtls.getMapByAny import com.fangxinxing.xxfxx.ui.DialogUtil import com.fangxinxing.xxfxx.ui.main.HistoryOrderActivity import com.fangxinxing.xxfxx.ui.mine.money_bag.MineIncomeActivity import com.fangxinxing.xxfxx.ui.mine.money_bag.MineWalletActivity import com.fangxinxing.xxfxx.ui.mine.setting.SettingActivity import com.fangxinxing.xxfxx.ui.pub.BecomeDriverActivity import com.fangxinxing.xxfxx.utils.Cache.CacheKey @@ -44,7 +45,6 @@ import com.umeng.socialize.bean.SHARE_MEDIA import com.umeng.socialize.media.UMImage import com.umeng.socialize.media.UMWeb import com.zlzf.zl_payaccount.ZlSdkInto import kotlinx.android.synthetic.main.activity_mine.iv_head import kotlinx.android.synthetic.main.activity_mine.ll_income_order import kotlinx.android.synthetic.main.activity_mine.ll_mine_money @@ -228,19 +228,7 @@ } //账户安全 rl_acount_safe.setOnClickListener { var map = getMapByAny() map["ip"] = getDeviceIPAddress() map["mac"] = getAndroidID() map["type"] = "04" callNet(Api.getZLToken, map) { val bean = gson.fromJson<StringBean>(it, StringBean::class.java) ZlSdkInto.getInstance().goTActivity(requireContext(), bean.data) ZlSdkInto.getInstance().setCallback { it.entries.forEach { _it -> Log.e("ZlNoty", "$_it:=======>${it[_it]}") } } } requireActivity().startActivity<MineWalletActivity>() } //意见反馈 rl_remark.setOnClickListener { app/src/main/java/com/fangxinxing/xxfxx/ui/mine/SelectBankActivity.kt
@@ -51,7 +51,7 @@ if (s.isNullOrEmpty()){ showList.addAll(allList) }else{ showList.addAll(allList.filter { it.bankName.contains(s.toString()) }) showList.addAll(allList.filter { it.bankName?.contains(s.toString())==true }) } adapter.notifyDataSetChanged() } @@ -80,7 +80,7 @@ showList.clear() if (it.isNotEmpty()) { index.forEach { index-> it.filter { it.bankName.isNotEmpty() }.forEach { it.filter { !it.bankName.isNullOrEmpty() }.forEach { if (index == it.getInitial()){ allList.add(it) } app/src/main/java/com/fangxinxing/xxfxx/ui/mine/money_bag/AllIncomeDetailActivity.kt
@@ -1,20 +1,21 @@ package com.fangxinxing.xxfxx.ui.mine.money_bag import com.fangxinxing.xxfxx.R import com.fangxinxing.xxfxx.base.MyApplication import com.fangxinxing.xxfxx.utils.clickDelay import com.fangxinxing.xxfxx.utils.getFormatTwo import com.fangxinxing.xxfxx.utils.toast import com.fangxinxing.xxfxx.base.MyBaseActivity import com.fangxinxing.xxfxx.bean.UserBean import com.fangxinxing.xxfxx.netUtls.Api import com.fangxinxing.xxfxx.netUtls.callNet import com.fangxinxing.xxfxx.netUtls.getMapByAny import com.fangxinxing.xxfxx.utils.Cache.CacheKey import kotlinx.android.synthetic.main.activity_all_detail_income.* import com.fangxinxing.xxfxx.utils.clickDelay import com.fangxinxing.xxfxx.utils.getFormatTwo import kotlinx.android.synthetic.main.activity_all_detail_income.tv_left_title_income import kotlinx.android.synthetic.main.activity_all_detail_income.tv_money import kotlinx.android.synthetic.main.activity_all_detail_income.tv_right_commit import kotlinx.android.synthetic.main.activity_all_detail_income.tv_tixian import org.jetbrains.anko.startActivity class AllIncomeDetailActivity: MyBaseActivity() { class AllIncomeDetailActivity : MyBaseActivity() { override fun setContentView() { setContentView(R.layout.activity_all_detail_income) } @@ -22,7 +23,7 @@ override fun initView() { showTitle(false) showHeader(false) addFragment(AllIncomeDetailFragment(),R.id.fl_container) addFragment(AllIncomeDetailFragment(), R.id.fl_container) } override fun onResume() { @@ -31,17 +32,16 @@ } private fun callMine() { var map = getMapByAny() callNet(Api.queryInfo,map){ var user = gson.fromJson<UserBean>(it, UserBean::class.java) val map = getMapByAny() callNet(Api.queryInfo, map) { val user = gson.fromJson<UserBean>(it, UserBean::class.java) CacheKey.saveUserInfo(user.data) showUI() } } private fun showUI() { tv_money.text = "¥"+ getFormatTwo(CacheKey.getUserInfo().laveBusinessMoney) tv_all_money.text = "历史总收益:¥"+ getFormatTwo(CacheKey.getUserInfo().businessMoney) tv_money.text = "¥" + getFormatTwo(CacheKey.getUserInfo().businessMoney) } override fun setOnclick() { @@ -50,15 +50,11 @@ } tv_tixian.clickDelay { if (!MyApplication.isCould) toast("请先填写个人进件") else startActivity<ApplyMoneyActivity>("type" to "2") startActivity<ApplyWithdrawActivity>() } tv_right_commit.clickDelay { startActivity<IncomeCommitDetailActivity>() } } } app/src/main/java/com/fangxinxing/xxfxx/ui/mine/money_bag/ApplyWithdrawActivity.kt
New file @@ -0,0 +1,90 @@ package com.fangxinxing.xxfxx.ui.mine.money_bag import android.text.InputFilter import android.text.Spanned import com.fangxinxing.xxfxx.R import com.fangxinxing.xxfxx.base.MyBaseActivity import com.fangxinxing.xxfxx.bean.LastWithdrawInfo import com.fangxinxing.xxfxx.bean.UserBankInfoBean import com.fangxinxing.xxfxx.bean.UserBean import com.fangxinxing.xxfxx.netUtls.Api import com.fangxinxing.xxfxx.netUtls.callNet import com.fangxinxing.xxfxx.netUtls.getMapByAny import com.fangxinxing.xxfxx.utils.Cache.CacheKey import com.fangxinxing.xxfxx.utils.clickDelay import com.fangxinxing.xxfxx.utils.getContent import com.fangxinxing.xxfxx.utils.getFormatTwo import kotlinx.android.synthetic.main.activity_apply_withdraw.et_money import kotlinx.android.synthetic.main.activity_apply_withdraw.tv_withdraw import org.jetbrains.anko.toast //申请提现页面 class ApplyWithdrawActivity : MyBaseActivity() { override fun setContentView() { setContentView(R.layout.activity_apply_withdraw) } override fun initView() { setTitleText("申请提现") et_money.hint = "${getFormatTwo(CacheKey.getUserInfo().laveBusinessMoney)}元可提现" et_money.filters = arrayOf<InputFilter>(object : InputFilter { override fun filter( source: CharSequence, start: Int, end: Int, dest: Spanned, dstart: Int, dend: Int ): CharSequence? { if (source == "." && dest.toString().isEmpty()) { return "0." } if (dest.toString().contains(".")) { val index: Int = dest.toString().indexOf(".") val length: Int = dest.toString().substring(index).length if (length == 3) { return "" } } return null } }) callMine() } private fun callMine() { val map = getMapByAny() callNet(Api.queryInfo, map) { val user = gson.fromJson<UserBean>(it, UserBean::class.java) CacheKey.saveUserInfo(user.data) et_money.hint = "${getFormatTwo(CacheKey.getUserInfo().laveBusinessMoney)}元可提现" } } override fun setOnclick() { tv_withdraw.clickDelay { if (et_money.getContent().isEmpty()) { toast("请输入提现金额") return@clickDelay } val money = et_money.getContent().toDoubleOrNull() ?: 0.0 if (money <= 0) { toast("提现金额必须大于0") return@clickDelay } val map = getMapByAny() callNet(Api.queryLastWithdrawal, map) { val userBankInfoBean = gson.fromJson<UserBankInfoBean>(it, UserBankInfoBean::class.java) userBankInfoBean.apply { data = (data ?: LastWithdrawInfo()).apply { this.money = money.toString() } } startActivity(SetWithdrawAccountActivity.getIntent(this, userBankInfoBean.data)) finish() } } } } app/src/main/java/com/fangxinxing/xxfxx/ui/mine/money_bag/MineAwardActivity.kt
@@ -1,16 +1,18 @@ package com.fangxinxing.xxfxx.ui.mine.money_bag import com.fangxinxing.xxfxx.utils.getFormatTwo import com.fangxinxing.xxfxx.utils.toast import com.fangxinxing.xxfxx.R import com.fangxinxing.xxfxx.base.MyApplication import com.fangxinxing.xxfxx.base.MyBaseActivity import com.fangxinxing.xxfxx.utils.Cache.CacheKey import kotlinx.android.synthetic.main.activity_mine_award.* import com.fangxinxing.xxfxx.utils.getFormatTwo import kotlinx.android.synthetic.main.activity_mine_award.tv_detail import kotlinx.android.synthetic.main.activity_mine_award.tv_left_title_award import kotlinx.android.synthetic.main.activity_mine_award.tv_money import kotlinx.android.synthetic.main.activity_mine_award.tv_record import kotlinx.android.synthetic.main.activity_mine_award.tv_tixian import org.jetbrains.anko.startActivity //我的奖励 class MineAwardActivity : MyBaseActivity(){ class MineAwardActivity : MyBaseActivity() { override fun setContentView() { setContentView(R.layout.activity_mine_award) } @@ -23,7 +25,7 @@ override fun onResume() { super.onResume() tv_money.text = "¥"+ getFormatTwo(CacheKey.getUserInfo().balance) tv_money.text = "¥" + getFormatTwo(CacheKey.getUserInfo().balance) } override fun setOnclick() { @@ -38,10 +40,7 @@ startActivity<CloseRecordActivity>() } tv_tixian.setOnClickListener { if (!MyApplication.isCould) toast("请先填写个人进件") else startActivity<ApplyMoneyActivity>("type" to "1") startActivity<ApplyMoneyActivity>("type" to "1") } } app/src/main/java/com/fangxinxing/xxfxx/ui/mine/money_bag/MineWalletActivity.kt
New file @@ -0,0 +1,81 @@ package com.fangxinxing.xxfxx.ui.mine.money_bag import androidx.core.view.isVisible import com.fangxinxing.xxfxx.R import com.fangxinxing.xxfxx.base.MyBaseActivity import com.fangxinxing.xxfxx.bean.UserBankInfoBean import com.fangxinxing.xxfxx.bean.UserBean import com.fangxinxing.xxfxx.netUtls.Api import com.fangxinxing.xxfxx.netUtls.callNet import com.fangxinxing.xxfxx.netUtls.getMapByAny import com.fangxinxing.xxfxx.utils.Cache.CacheKey import com.fangxinxing.xxfxx.utils.clickDelay import com.fangxinxing.xxfxx.utils.getFormatTwo import kotlinx.android.synthetic.main.activity_mine_wallet.tv_all_income_detail import kotlinx.android.synthetic.main.activity_mine_wallet.tv_back import kotlinx.android.synthetic.main.activity_mine_wallet.tv_del_money_detail import kotlinx.android.synthetic.main.activity_mine_wallet.tv_money import kotlinx.android.synthetic.main.activity_mine_wallet.tv_record import kotlinx.android.synthetic.main.activity_mine_wallet.tv_withdraw import org.jetbrains.anko.startActivity //我的钱包页面 class MineWalletActivity : MyBaseActivity() { override fun setContentView() { setContentView(R.layout.activity_mine_wallet) } override fun initView() { showTitle(false) showHeader(false) } override fun onResume() { super.onResume() callMine() } private fun callMine() { val map = getMapByAny() callNet(Api.queryInfo, map) { val user = gson.fromJson<UserBean>(it, UserBean::class.java) CacheKey.saveUserInfo(user.data) showUI() } } private fun showUI() { tv_money.text = "¥" + getFormatTwo(CacheKey.getUserInfo().laveBusinessMoney) tv_withdraw.isVisible = CacheKey.getUserInfo().laveBusinessMoney > 0 } override fun setOnclick() { tv_back.clickDelay { finish() } //收入明细 tv_all_income_detail.clickDelay { startActivity<AllIncomeDetailActivity>() } //提现记录 tv_record.clickDelay { startActivity<IncomeCommitDetailActivity>() } //扣款明细 tv_del_money_detail.clickDelay { startActivity<DelMoneyDetailActivity>() } //提现 tv_withdraw.clickDelay { val map = getMapByAny() callNet(Api.queryLastWithdrawal, map) { val userBankInfoBean = gson.fromJson<UserBankInfoBean>(it, UserBankInfoBean::class.java) if (userBankInfoBean.data?.hadInWithdrawAudit() == true) { startActivity(WithdrawResultActivity::class.java) } else { startActivity<ApplyWithdrawActivity>() } } } } } app/src/main/java/com/fangxinxing/xxfxx/ui/mine/money_bag/SelectWithdrawBankActivity.kt
New file @@ -0,0 +1,107 @@ package com.fangxinxing.xxfxx.ui.mine.money_bag import android.app.Activity import android.content.Intent import android.text.Editable import android.text.TextWatcher import androidx.recyclerview.widget.LinearLayoutManager import cn.sinata.xldutils.view.SwipeRefreshRecyclerLayoutKt import com.fangxinxing.xxfxx.R import com.fangxinxing.xxfxx.base.MyBaseActivity import com.fangxinxing.xxfxx.bean.BankName import com.fangxinxing.xxfxx.extension.extReadAssetsFile import com.fangxinxing.xxfxx.ui.adapter.BankNameAdapter import com.google.gson.reflect.TypeToken import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers import kotlinx.android.synthetic.main.activity_select_bank.et_search import kotlinx.android.synthetic.main.activity_select_bank.lv_bank import kotlinx.android.synthetic.main.activity_select_bank.side_bar import kotlinx.android.synthetic.main.activity_select_bank.tv_cancel //选择提现银行页 class SelectWithdrawBankActivity : MyBaseActivity() { override fun setContentView() { setContentView(R.layout.activity_select_withdraw_bank) } private val index = arrayListOf( "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "#" ) private val allList = arrayListOf<BankName>() //所有数据 private val showList = arrayListOf<BankName>() //显示数据 private val adapter = BankNameAdapter(showList) override fun initView() { setTitleText("选择银行") lv_bank.setLayoutManager(LinearLayoutManager(this)) lv_bank.setMode(SwipeRefreshRecyclerLayoutKt.Mode.None) lv_bank.setAdapter(adapter) getBankList() } override fun setOnclick() { et_search.addTextChangedListener(object : TextWatcher { override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { } override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { } override fun afterTextChanged(s: Editable?) { showList.clear() if (s.isNullOrEmpty()) { showList.addAll(allList) } else { showList.addAll(allList.filter { it.bankName?.contains(s.toString())==true }) } adapter.notifyDataSetChanged() } }) side_bar.setOnSelectIndexItemListener { index -> (0 until showList.size).forEach { if (index == showList[it].getInitial()) { val manager = lv_bank.mRecyclerView.layoutManager as LinearLayoutManager manager.scrollToPositionWithOffset(it, 0) return@setOnSelectIndexItemListener } } } tv_cancel.setOnClickListener { et_search.setText("") } adapter.setOnItemClickListener { _, position -> setResult(Activity.RESULT_OK, Intent().apply { putExtra("bank", showList[position]) }) finish() } } private fun getBankList() { val subscribe = io.reactivex.Observable.just("banks.json") .map { json -> extReadAssetsFile(json) } .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe({ banks -> val list: List<BankName> = gson.fromJson(banks, object : TypeToken<List<BankName>>() {}.type) showList.clear() if (list.isNotEmpty()) { index.forEach { index -> list.filter { !it.bankName.isNullOrEmpty() }.forEach { if (index == it.getInitial()) { allList.add(it) } } } } else { lv_bank.setLoadMoreText("暂无数据") } showList.addAll(allList) adapter.notifyDataSetChanged() }, { t -> t?.printStackTrace() }) compositeSubscription.add(subscribe) } } app/src/main/java/com/fangxinxing/xxfxx/ui/mine/money_bag/SetWithdrawAccountActivity.kt
New file @@ -0,0 +1,329 @@ package com.fangxinxing.xxfxx.ui.mine.money_bag import android.app.Activity import android.content.Context import android.content.Intent import android.os.CountDownTimer import android.util.Log import androidx.core.view.isVisible import com.fangxinxing.xxfxx.R import com.fangxinxing.xxfxx.SelectPhotoDialogKt import com.fangxinxing.xxfxx.base.MyBaseActivity import com.fangxinxing.xxfxx.bean.BankName import com.fangxinxing.xxfxx.bean.LastWithdrawInfo import com.fangxinxing.xxfxx.extension.extGetSaveFileDir import com.fangxinxing.xxfxx.extension.ifEmptyOrNull import com.fangxinxing.xxfxx.netUtls.Api import com.fangxinxing.xxfxx.netUtls.HttpManager import com.fangxinxing.xxfxx.netUtls.MyUploadObserver import com.fangxinxing.xxfxx.netUtls.callNet import com.fangxinxing.xxfxx.netUtls.getMapByAny import com.fangxinxing.xxfxx.utils.Cache.CacheKey import com.fangxinxing.xxfxx.utils.clickDelay import com.fangxinxing.xxfxx.utils.glide.GlideUtil import com.fangxinxing.xxfxx.utils.isValidIdCard import com.fangxinxing.xxfxx.utils.isValidPhone import kotlinx.android.synthetic.main.activity_set_withdraw_account.et_bank_name import kotlinx.android.synthetic.main.activity_set_withdraw_account.et_bank_num import kotlinx.android.synthetic.main.activity_set_withdraw_account.et_code import kotlinx.android.synthetic.main.activity_set_withdraw_account.et_id_card import kotlinx.android.synthetic.main.activity_set_withdraw_account.et_name import kotlinx.android.synthetic.main.activity_set_withdraw_account.et_phone import kotlinx.android.synthetic.main.activity_set_withdraw_account.iv_back import kotlinx.android.synthetic.main.activity_set_withdraw_account.iv_bank import kotlinx.android.synthetic.main.activity_set_withdraw_account.iv_front import kotlinx.android.synthetic.main.activity_set_withdraw_account.tv_action import kotlinx.android.synthetic.main.activity_set_withdraw_account.tv_audit import kotlinx.android.synthetic.main.activity_set_withdraw_account.tv_bank import kotlinx.android.synthetic.main.activity_set_withdraw_account.tv_get_code import org.jetbrains.anko.startActivity import org.jetbrains.anko.startActivityForResult import org.jetbrains.anko.toast import org.json.JSONObject import top.zibin.luban.Luban import top.zibin.luban.OnCompressListener import java.io.File import java.util.Locale //设置提现账户页面 class SetWithdrawAccountActivity : MyBaseActivity() { private var frontImg = "" //正面身份证图片链接 private var backImg = "" //背面图片链接 private var bankImg = "" //银行卡图片链接 private var bankCode = "" //银行编号 private val timer by lazy { object : CountDownTimer(60000, 1000) { override fun onFinish() { tv_get_code.text = "获取验证码" tv_get_code.isEnabled = true } override fun onTick(millisUntilFinished: Long) { tv_get_code.text = "已发送${millisUntilFinished / 1000}s" } } } private val data: LastWithdrawInfo? by lazy { intent.getParcelableExtra("data") } companion object { fun getIntent(context: Context, info: LastWithdrawInfo? = null): Intent { return Intent(context, SetWithdrawAccountActivity::class.java).apply { putExtra("data", info) } } } override fun setContentView() { setContentView(R.layout.activity_set_withdraw_account) } override fun initView() { setTitleText("提现账户") data?.userWithdrawal?.also { et_name.setText(it.certificateName) et_name.isEnabled = false et_id_card.setText(it.certificateCode) et_id_card.isEnabled = false tv_bank.text = it.bankName bankCode = it.bankCode ?: "" et_bank_num.setText(it.bankCardCode) et_bank_name.setText(it.openAccountName) et_bank_name.isEnabled = false et_phone.setText(it.phone.ifEmptyOrNull { CacheKey.getUserInfo().phone }) frontImg = it.idCardFrontPicture ?: "" GlideUtil.load(this, frontImg, iv_front, 0) backImg = it.idCardReversePicture ?: "" GlideUtil.load(this, backImg, iv_back, 0) bankImg = it.bankCardUrl ?: "" GlideUtil.load(this, bankImg, iv_bank, 0) tv_action.text = "重新提交" } tv_audit.isVisible = data?.hadWithdrawFail() == true && !data?.remark.isNullOrEmpty() tv_audit.text = "审核失败:${data?.remark}" } override fun setOnclick() { tv_bank.clickDelay { startActivityForResult<SelectWithdrawBankActivity>(1) } tv_get_code.clickDelay { val phone = et_phone.text.toString() if (!phone.isValidPhone()) { toast("请输入正确手机号") return@clickDelay } tv_get_code.isEnabled = false val map = getMapByAny() map["phone"] = phone map["type"] = 5 callNet(Api.queryCaptcha, map, { timer.start() toast("发送成功") }) { tv_get_code.isEnabled = true } } iv_front.clickDelay { startActivityForResult<SelectPhotoDialogKt>(2) } iv_back.clickDelay { startActivityForResult<SelectPhotoDialogKt>(3) } iv_bank.clickDelay { startActivityForResult<SelectPhotoDialogKt>(4) } tv_action.clickDelay { commitInfo() } } private fun commitInfo() { val name = et_name.text.toString() if (name.isEmpty()) { toast("请输入证件人姓名") return } val idCard = et_id_card.text.toString() if (!idCard.isValidIdCard()) { toast("请输入正确的身份证号码") return } val bankName = tv_bank.text.toString() if (bankName.isEmpty()) { toast("请选择银行") return } val bankNum = et_bank_num.text.toString() if (bankNum.isEmpty()) { toast("请输入银行卡号") return } val bankCardName = et_bank_name.text.toString() if (bankCardName.isEmpty()) { toast("请输入开户行") return } val phone = et_phone.text.toString() if (phone.isEmpty()) { toast("请输入手机号码") return } if (!phone.isValidPhone()) { toast("手机号格式有误") return } val code = et_code.text.toString() if (code.isEmpty()) { toast("请输入验证码") return } if (frontImg.isEmpty()) { toast("请上传身份证正面照") return } if (bankImg.isEmpty()) { toast("请上传身份证反面照") return } if (bankImg.isEmpty()) { toast("请上传银行卡照片") return } tv_action.isEnabled = false val param = getMapByAny() param["bankName"] = bankName param["code"] = bankCode param["money"] = data?.money param["name"] = name param["smsCode"] = code param["type"] = 2 val map = JSONObject() map.put("bankCardCode", bankNum) map.put("bankCode", bankCode) map.put("bankName", bankName) map.put("certificateCode", idCard) map.put("certificateName", name) map.put("certificateType", 1) map.put("code", code) map.put("idCardFrontPicture", frontImg) map.put("idCardReversePicture", backImg) map.put("depositBank", bankCardName) map.put("phone", phone) map.put("userType", 2) map.put("bankCardUrl", bankImg) param["userWithdrawalStr"] = map.toString() callNet(Api.withdrawal, param, { startActivity<WithdrawResultActivity>() finish() }) { tv_action.isEnabled = true } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (resultCode == Activity.RESULT_OK && data != null) { if (requestCode == 1) { data.getParcelableExtra<BankName>("bank")?.also { tv_bank.text = it.bankName bankCode = it.bankCode ?: "" } } else { data.getStringExtra("path")?.also { compressImageAndUpload(requestCode, it) } } } } //压缩图片然后上传 private fun compressImageAndUpload(requestCode: Int, filePath: String) { Luban.with(this) .load(File(filePath)) .ignoreBy(100) .setTargetDir(extGetSaveFileDir("img").absolutePath) .filter { path -> !(path.isEmpty() || path.lowercase(Locale.ROOT).endsWith(".gif")) } .setCompressListener(object : OnCompressListener { override fun onStart() { showDialog() } override fun onSuccess(file: File) { Log.e("mmp", "压缩完成" + file.name) when (requestCode) { 2 -> { frontImg = "" } 3 -> { backImg = "" } 4 -> { bankImg = "" } } uploadImage(file) { responseString: String -> when (requestCode) { 2 -> { frontImg = responseString GlideUtil.load( this@SetWithdrawAccountActivity, frontImg, iv_front, 0 ) } 3 -> { backImg = responseString GlideUtil.load( this@SetWithdrawAccountActivity, backImg, iv_back, 0 ) } 4 -> { bankImg = responseString GlideUtil.load( this@SetWithdrawAccountActivity, bankImg, iv_bank, 0 ) } } } } override fun onError(e: Throwable) { e.printStackTrace() dismissDialog() } }).launch() } //上传图片 private fun uploadImage(file: File, block: (responseString: String) -> Unit) { HttpManager.getInstance().post(Api.upImage, file, object : MyUploadObserver(this@SetWithdrawAccountActivity) { override fun success(responseString: String) { block.invoke(responseString) } }) } } app/src/main/java/com/fangxinxing/xxfxx/ui/mine/money_bag/WithdrawResultActivity.kt
New file @@ -0,0 +1,22 @@ package com.fangxinxing.xxfxx.ui.mine.money_bag import com.fangxinxing.xxfxx.R import com.fangxinxing.xxfxx.base.MyBaseActivity import com.fangxinxing.xxfxx.utils.clickDelay import kotlinx.android.synthetic.main.activity_withdraw_result.tv_action //提现结果页 class WithdrawResultActivity : MyBaseActivity() { override fun setContentView() { setContentView(R.layout.activity_withdraw_result) } override fun initView() { setTitleText("提现账户") } override fun setOnclick() { tv_action.clickDelay { finish() } } } app/src/main/res/drawable/shape_fd943a_bg_4.xml
New file @@ -0,0 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="@color/color_fd943a" /> <corners android:radius="4dp" /> </shape> app/src/main/res/layout/activity_all_detail_income.xml
@@ -1,14 +1,14 @@ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <RelativeLayout android:layout_width="match_parent" android:background="#4680EB" android:layout_height="180dp"> android:layout_height="180dp" android:background="@color/color_fd943a"> <RelativeLayout android:id="@+id/rl_title" @@ -47,18 +47,18 @@ android:id="@+id/tv_right_commit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_alignParentEnd="true" android:layout_centerVertical="true" android:layout_marginEnd="14dp" android:drawablePadding="3dp" android:maxWidth="280dp" android:maxLines="1" android:singleLine="true" android:visibility="gone" android:text="提现记录" android:textColor="@color/white" android:textSize="16sp" android:textStyle="bold" /> android:textStyle="bold" android:visibility="gone" /> </RelativeLayout> @@ -67,63 +67,44 @@ android:id="@+id/tv_view_hint" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:text="当前可提现收益" android:layout_marginTop="20dp" android:layout_below="@+id/rl_title" android:layout_centerHorizontal="true" android:layout_marginTop="20dp" android:text="历史总收益" android:textColor="#ffffffff" android:textSize="14sp" /> android:textSize="14sp" /> <TextView android:id="@+id/tv_money" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/tv_view_hint" android:layout_centerHorizontal="true" android:layout_height="wrap_content" android:text="¥325.00" android:text="¥0" android:textColor="#ffffffff" android:textSize="30sp" /> <TextView android:id="@+id/tv_all_money" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="历史总收益:¥" android:layout_alignParentEnd="true" android:layout_alignParentBottom="true" android:layout_marginBottom="10dp" android:layout_marginEnd="10dp" android:textColor="@color/white" android:textSize="16sp" android:textStyle="bold" /> android:textSize="30sp" /> </RelativeLayout> <FrameLayout android:id="@+id/fl_container" android:layout_width="match_parent" android:layout_weight="1" android:layout_height="0dp"/> android:layout_height="0dp" android:layout_weight="1" /> <TextView android:id="@+id/tv_tixian" android:layout_width="match_parent" android:layout_height="40dp" android:layout_marginStart="14dp" android:layout_marginTop="44dp" android:layout_marginEnd="14dp" android:layout_marginBottom="14dp" android:background="@drawable/bg_login" android:gravity="center" android:text="提现" android:textColor="#ffffffff" android:gravity="center" android:layout_marginTop="44dp" android:layout_marginStart="14dp" android:visibility="gone" android:layout_marginBottom="14dp" android:layout_marginEnd="14dp" android:background="@drawable/bg_login" android:textSize="14sp" android:layout_height="40dp"/> android:visibility="gone" /> </LinearLayout> app/src/main/res/layout/activity_apply_withdraw.xml
New file @@ -0,0 +1,52 @@ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".ui.mine.money_bag.ApplyWithdrawActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="50dp" android:background="@color/white" android:gravity="center_vertical" android:orientation="horizontal"> <TextView android:layout_width="110dp" android:layout_height="wrap_content" android:paddingStart="14dp" android:text="提现金额" android:textColor="#ff333333" android:textSize="14sp" /> <EditText android:id="@+id/et_money" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@null" android:hint="100元可提现" android:inputType="numberDecimal" android:maxLength="10" android:maxLines="1" android:textColor="#ff000000" android:textSize="14sp" /> </LinearLayout> <include layout="@layout/include_weight_height" /> <TextView android:id="@+id/tv_withdraw" android:layout_width="match_parent" android:layout_height="40dp" android:layout_marginStart="14dp" android:layout_marginTop="44dp" android:layout_marginEnd="14dp" android:layout_marginBottom="14dp" android:background="@drawable/car_get_start" android:gravity="center" android:text="确认提现" android:textColor="#ffffffff" android:textSize="14sp" /> </LinearLayout> app/src/main/res/layout/activity_mine.xml
@@ -247,8 +247,7 @@ <RelativeLayout android:id="@+id/rl_acount_safe" android:layout_width="match_parent" android:layout_height="43dp" android:visibility="gone"> android:layout_height="43dp"> <TextView android:layout_width="match_parent" app/src/main/res/layout/activity_mine_wallet.xml
New file @@ -0,0 +1,130 @@ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/bg_main" android:orientation="vertical"> <RelativeLayout android:layout_width="match_parent" android:layout_height="180dp" android:background="@color/color_fd943a"> <RelativeLayout android:id="@+id/rl_title" android:layout_width="match_parent" android:layout_height="42dp" android:layout_marginTop="22dp"> <TextView android:id="@+id/tv_back" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_centerVertical="true" android:background="@drawable/bg_clicker" android:drawableStart="@mipmap/back_white" android:gravity="center" android:paddingStart="@dimen/dp_10" android:paddingEnd="@dimen/dp_15" android:textColor="#333333" android:textSize="16sp" /> <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:drawablePadding="3dp" android:maxWidth="280dp" android:maxLines="1" android:singleLine="true" android:text="我的钱包" android:textColor="@color/white" android:textSize="16sp" android:textStyle="bold" /> </RelativeLayout> <TextView android:id="@+id/tv_money_label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/rl_title" android:layout_centerHorizontal="true" android:layout_marginTop="20dp" android:text="当前可提现金额" android:textColor="#ffffffff" android:textSize="14sp" /> <TextView android:id="@+id/tv_money" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/tv_money_label" android:layout_centerHorizontal="true" android:text="¥0" android:textColor="#ffffffff" android:textSize="30sp" /> </RelativeLayout> <TextView android:id="@+id/tv_all_income_detail" android:layout_width="match_parent" android:layout_height="50dp" android:background="@color/white" android:drawableEnd="@mipmap/more_black" android:gravity="center_vertical" android:paddingStart="14dp" android:paddingEnd="14dp" android:text="收入明细" android:textColor="#ff333333" android:textSize="14sp" /> <TextView android:id="@+id/tv_record" android:layout_width="match_parent" android:layout_height="50dp" android:layout_marginTop="1dp" android:background="@color/white" android:drawableEnd="@mipmap/more_black" android:gravity="center_vertical" android:paddingStart="14dp" android:paddingEnd="14dp" android:text="提现记录" android:textColor="#ff333333" android:textSize="14sp" /> <TextView android:id="@+id/tv_del_money_detail" android:layout_width="match_parent" android:layout_height="50dp" android:layout_marginTop="1dp" android:background="@color/white" android:drawableEnd="@mipmap/more_black" android:gravity="center_vertical" android:paddingStart="14dp" android:paddingEnd="14dp" android:text="扣款明细" android:textColor="#ff333333" android:textSize="14sp" /> <include layout="@layout/include_weight_height" /> <TextView android:id="@+id/tv_withdraw" android:layout_width="match_parent" android:layout_height="40dp" android:layout_marginStart="14dp" android:layout_marginTop="44dp" android:layout_marginEnd="14dp" android:layout_marginBottom="14dp" android:background="@drawable/car_get_start" android:gravity="center" android:text="提现" android:textColor="#ffffffff" android:textSize="14sp" android:visibility="gone" tools:visibility="visible" /> </LinearLayout> app/src/main/res/layout/activity_select_withdraw_bank.xml
New file @@ -0,0 +1,68 @@ <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout 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="match_parent" android:background="@color/page_bg"> <LinearLayout android:id="@+id/ll_search" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="1px" android:focusable="true" android:focusableInTouchMode="true" app:layout_constraintTop_toTopOf="parent"> <EditText android:id="@+id/et_search" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginTop="8dp" android:layout_marginBottom="8dp" android:layout_weight="1" android:background="@drawable/bg_white_4dp" android:drawableStart="@mipmap/mer_search" android:drawablePadding="7dp" android:hint="搜索" android:imeOptions="actionSearch" android:inputType="text" android:paddingVertical="9dp" android:paddingStart="16dp" android:paddingEnd="9dp" android:singleLine="true" android:textColor="@color/textColor" android:textSize="13sp" /> <TextView android:id="@+id/tv_cancel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:paddingStart="16dp" android:paddingTop="5dp" android:paddingEnd="16dp" android:paddingBottom="5dp" android:text="取消" android:textColor="@color/main_yellow_shen" android:textSize="14sp" /> </LinearLayout> <cn.sinata.xldutils.view.SwipeRefreshRecyclerLayoutKt android:id="@+id/lv_bank" android:layout_width="match_parent" android:layout_height="0dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toBottomOf="@id/ll_search" /> <com.fangxinxing.xxfxx.utils.view.WaveSideBar android:id="@+id/side_bar" android:layout_width="match_parent" android:layout_height="0dp" android:paddingLeft="8dp" android:paddingRight="8dp" app:layout_constraintBottom_toBottomOf="@id/lv_bank" app:layout_constraintTop_toTopOf="@id/lv_bank" app:sidebar_text_color="@color/textColor" /> </androidx.constraintlayout.widget.ConstraintLayout> app/src/main/res/layout/activity_set_withdraw_account.xml
New file @@ -0,0 +1,375 @@ <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/tv_action" android:layout_width="match_parent" android:layout_height="40dp" android:layout_marginStart="14dp" android:layout_marginEnd="14dp" android:layout_marginBottom="14dp" android:background="@drawable/car_get_start" android:gravity="center" android:text="提交" android:textColor="#ffffffff" android:textSize="14sp" app:layout_constraintBottom_toBottomOf="parent" /> <TextView android:id="@+id/tv_audit" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginHorizontal="10dp" android:background="@drawable/shape_fd943a_bg_4" android:paddingHorizontal="15dp" android:paddingVertical="10dp" android:text="审核结果:审核成功" android:textColor="@color/white" android:textSize="14sp" android:textStyle="bold" android:visibility="gone" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" tools:visibility="visible" /> <ScrollView android:layout_width="match_parent" android:layout_height="0dp" android:scrollbars="none" app:layout_constraintBottom_toTopOf="@id/tv_action" app:layout_constraintTop_toBottomOf="@id/tv_audit"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingVertical="15dp"> <EditText android:id="@+id/et_name" style="@style/style_form_text_mine" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="90dp" android:layout_marginEnd="10dp" android:background="@null" android:gravity="end" android:hint="请输入姓名" android:maxLength="10" android:singleLine="true" app:layout_constraintTop_toTopOf="parent" /> <TextView style="@style/style_common_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="10dp" android:text="证件人姓名" android:textStyle="bold" app:layout_constraintBaseline_toBaselineOf="@id/et_name" app:layout_constraintStart_toStartOf="parent" /> <View android:layout_width="match_parent" android:layout_height="1px" android:layout_marginHorizontal="10dp" android:background="@color/dividing_line_color" app:layout_constraintTop_toBottomOf="@id/et_name" /> <TextView android:id="@+id/tv_1" style="@style/style_form_text_mine" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginEnd="10dp" android:background="@null" android:gravity="end" android:singleLine="true" android:text="身份证" app:layout_constraintTop_toBottomOf="@id/et_name" /> <TextView style="@style/style_common_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="10dp" android:text="证件类型" android:textStyle="bold" app:layout_constraintBaseline_toBaselineOf="@id/tv_1" app:layout_constraintStart_toStartOf="parent" /> <View android:layout_width="match_parent" android:layout_height="1px" android:layout_marginHorizontal="10dp" android:background="@color/dividing_line_color" app:layout_constraintTop_toBottomOf="@id/tv_1" /> <EditText android:id="@+id/et_id_card" style="@style/style_form_text_mine" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="90dp" android:layout_marginEnd="10dp" android:background="@null" android:digits="@string/idCard" android:gravity="end" android:hint="请输入身份证号码" android:inputType="textEmailAddress" android:maxLength="18" android:singleLine="true" app:layout_constraintTop_toBottomOf="@id/tv_1" /> <TextView style="@style/style_common_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="10dp" android:text="证件号" android:textStyle="bold" app:layout_constraintBaseline_toBaselineOf="@id/et_id_card" app:layout_constraintStart_toStartOf="parent" /> <View android:layout_width="match_parent" android:layout_height="1px" android:layout_marginHorizontal="10dp" android:background="@color/dividing_line_color" app:layout_constraintTop_toBottomOf="@id/et_id_card" /> <TextView android:id="@+id/tv_bank" style="@style/style_form_text_mine" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="90dp" android:layout_marginEnd="10dp" android:background="@null" android:drawableEnd="@mipmap/more_gray" android:gravity="end" android:hint="请选择银行" android:singleLine="true" app:layout_constraintTop_toBottomOf="@id/et_id_card" /> <TextView style="@style/style_common_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="10dp" android:text="选择银行" android:textStyle="bold" app:layout_constraintBaseline_toBaselineOf="@id/tv_bank" app:layout_constraintStart_toStartOf="parent" /> <View android:layout_width="match_parent" android:layout_height="1px" android:layout_marginHorizontal="10dp" android:background="@color/dividing_line_color" app:layout_constraintTop_toBottomOf="@id/tv_bank" /> <EditText android:id="@+id/et_bank_num" style="@style/style_form_text_mine" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="90dp" android:layout_marginEnd="10dp" android:background="@null" android:gravity="end" android:hint="请输入银行卡号" android:inputType="number" android:singleLine="true" app:layout_constraintTop_toBottomOf="@id/tv_bank" /> <TextView style="@style/style_common_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="10dp" android:text="银行卡号" android:textStyle="bold" app:layout_constraintBaseline_toBaselineOf="@id/et_bank_num" app:layout_constraintStart_toStartOf="parent" /> <View android:layout_width="match_parent" android:layout_height="1px" android:layout_marginHorizontal="10dp" android:background="@color/dividing_line_color" app:layout_constraintTop_toBottomOf="@id/et_bank_num" /> <EditText android:id="@+id/et_bank_name" style="@style/style_form_text_mine" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="90dp" android:layout_marginEnd="10dp" android:background="@null" android:gravity="end" android:hint="请输入开户行" android:inputType="text" android:singleLine="true" app:layout_constraintTop_toBottomOf="@id/et_bank_num" /> <TextView style="@style/style_common_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="10dp" android:text="开户行" android:textStyle="bold" app:layout_constraintBaseline_toBaselineOf="@id/et_bank_name" app:layout_constraintStart_toStartOf="parent" /> <View android:layout_width="match_parent" android:layout_height="1px" android:layout_marginHorizontal="10dp" android:background="@color/dividing_line_color" app:layout_constraintTop_toBottomOf="@id/et_bank_name" /> <EditText android:id="@+id/et_phone" style="@style/style_form_text_mine" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="90dp" android:layout_marginEnd="10dp" android:background="@null" android:gravity="end" android:hint="请填写手机号码" android:inputType="number" android:maxLength="11" android:singleLine="true" app:layout_constraintTop_toBottomOf="@id/et_bank_name" /> <TextView style="@style/style_common_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="10dp" android:text="手机号码" android:textStyle="bold" app:layout_constraintBaseline_toBaselineOf="@id/et_phone" app:layout_constraintStart_toStartOf="parent" /> <View android:layout_width="match_parent" android:layout_height="1px" android:layout_marginHorizontal="10dp" android:background="@color/dividing_line_color" app:layout_constraintTop_toBottomOf="@id/et_phone" /> <EditText android:id="@+id/et_code" style="@style/style_form_text_mine" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="140dp" android:layout_marginEnd="10dp" android:background="@null" android:hint="请输入验证码" android:inputType="number" android:maxLength="6" android:singleLine="true" app:layout_constraintTop_toBottomOf="@id/et_phone" /> <TextView style="@style/style_common_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="10dp" android:text="验证码" android:textStyle="bold" app:layout_constraintBaseline_toBaselineOf="@id/et_code" app:layout_constraintStart_toStartOf="parent" /> <TextView android:id="@+id/tv_get_code" style="@style/style_common_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingVertical="12dp" android:text="获取验证码" android:textColor="@color/main_yellow_shen" android:textStyle="bold" app:layout_constraintBaseline_toBaselineOf="@id/et_code" app:layout_constraintEnd_toEndOf="@id/et_code" /> <View android:layout_width="match_parent" android:layout_height="1px" android:layout_marginHorizontal="10dp" android:background="@color/dividing_line_color" app:layout_constraintTop_toBottomOf="@id/et_code" /> <TextView android:id="@+id/tv_2" style="@style/style_common_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:paddingVertical="12dp" android:text="上传身份证" android:textStyle="bold" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/et_code" /> <ImageView android:id="@+id/iv_front" android:layout_width="0dp" android:layout_height="0dp" android:layout_marginStart="16dp" android:layout_marginTop="13dp" android:src="@mipmap/iv_front" app:layout_constraintDimensionRatio="165:110" app:layout_constraintEnd_toStartOf="@id/iv_back" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tv_2" /> <ImageView android:id="@+id/iv_back" android:layout_width="0dp" android:layout_height="0dp" android:layout_marginStart="13dp" android:layout_marginEnd="16dp" android:src="@mipmap/iv_back" app:layout_constraintDimensionRatio="165:110" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@id/iv_front" app:layout_constraintTop_toTopOf="@id/iv_front" /> <TextView android:id="@+id/tv_3" style="@style/style_common_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginTop="12dp" android:paddingVertical="12dp" android:text="上传银行卡" android:textStyle="bold" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/iv_front" /> <ImageView android:id="@+id/iv_bank" android:layout_width="0dp" android:layout_height="0dp" android:layout_marginStart="16dp" android:layout_marginTop="12dp" android:src="@mipmap/icon_upload_bank_photo" app:layout_constraintDimensionRatio="165:110" app:layout_constraintEnd_toStartOf="@id/iv_back" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tv_3" /> </androidx.constraintlayout.widget.ConstraintLayout> </ScrollView> </androidx.constraintlayout.widget.ConstraintLayout> app/src/main/res/layout/activity_withdraw_result.xml
New file @@ -0,0 +1,36 @@ <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout 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="match_parent"> <TextView android:id="@+id/tv_audit" style="@style/style_common_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="120dp" android:drawableTop="@mipmap/cheking" android:drawablePadding="27dp" android:text="提现审核中" android:textStyle="bold" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/tv_action" android:layout_width="match_parent" android:layout_height="40dp" android:layout_marginStart="14dp" android:layout_marginTop="88dp" android:layout_marginEnd="14dp" android:layout_marginBottom="14dp" android:background="@drawable/car_get_start" android:gravity="center" android:text="确定" android:textColor="#ffffffff" android:textSize="14sp" app:layout_constraintTop_toBottomOf="@id/tv_audit" /> </androidx.constraintlayout.widget.ConstraintLayout> app/src/main/res/layout/item_close_record.xml
@@ -1,34 +1,48 @@ <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:background="@color/white" android:layout_height="50dp"> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="50dp" android:background="@color/white"> <include layout="@layout/include_line_14"/> <include layout="@layout/include_line_14" /> <TextView android:id="@+id/tv_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="14dp" android:layout_centerVertical="true" android:layout_marginStart="14dp" android:text="2019-09-21" android:textColor="#ff333333" android:textSize="14sp" /> android:textSize="14sp" /> <TextView android:id="@+id/tv_money" <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="¥100" android:layout_alignParentEnd="true" android:layout_centerVertical="true" android:layout_marginEnd="14dp" android:textStyle="bold" android:textColor="#ff333333" android:textSize="14sp" /> android:gravity="end" android:orientation="vertical"> <TextView android:id="@+id/tv_money" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="¥100" android:textColor="#ff333333" android:textSize="14sp" android:textStyle="bold" /> <TextView android:id="@+id/tv_status" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="审核中" android:textColor="#ff333333" android:textSize="12sp" android:visibility="gone" tools:visibility="visible" /> </LinearLayout> </RelativeLayout> app/src/main/res/mipmap-xxhdpi/icon_upload_bank_photo.png
app/src/main/res/values/colors.xml
@@ -130,4 +130,5 @@ <color name="color_f4f5f9">#f4f5f9</color> <color name="color_00ffffff">#00ffffff</color> <color name="color_ff9f18">#ff9f18</color> <color name="color_fd943a">#fd943a</color> </resources>