From 8ad22c47f5d44635618f75e7085743893cdace4c Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期五, 20 六月 2025 14:22:01 +0800
Subject: [PATCH] refactor(generallibrary):重构制卡首页并添加解除挂失功能
---
generallibrary/src/main/java/com/dayu/general/net/NetConstans.kt | 3
/dev/null | 173 ----------
generallibrary/src/main/java/com/dayu/general/activity/LossCardActivity.kt | 4
generallibrary/src/main/res/layout/item_unloss_card_list.xml | 145 +++++++++
generallibrary/src/main/java/com/dayu/general/activity/BSCardFragment.kt | 69 +++
generallibrary/src/main/AndroidManifest.xml | 12
generallibrary/src/main/res/values/colors.xml | 2
generallibrary/src/main/java/com/dayu/general/activity/UnlossCardActivity.kt | 380 +++++++++++++++++++++++
generallibrary/src/main/java/com/dayu/general/adapter/UnlossCardListAdapter.kt | 138 ++++++++
9 files changed, 736 insertions(+), 190 deletions(-)
diff --git a/generallibrary/src/main/AndroidManifest.xml b/generallibrary/src/main/AndroidManifest.xml
index e873d53..3d88ae9 100644
--- a/generallibrary/src/main/AndroidManifest.xml
+++ b/generallibrary/src/main/AndroidManifest.xml
@@ -86,8 +86,6 @@
</intent-filter>
</activity>
- <!-- 鏂板琛ュ崱Activity -->
- <activity android:name=".activity.CardReplaceActivity" />
<!-- 鍐欏崱鎴愬姛椤甸潰 -->
<activity android:name=".activity.CardWriteSuccessActivity" />
@@ -117,7 +115,8 @@
</intent-filter>
</activity>
- <activity android:name=".activity.CardReturnActivity"
+ <activity
+ android:name=".activity.CardReturnActivity"
android:exported="false"
android:launchMode="singleTop">
<intent-filter>
@@ -126,7 +125,8 @@
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
- <activity android:name=".activity.CardDeductActivity"
+ <activity
+ android:name=".activity.CardDeductActivity"
android:exported="false"
android:launchMode="singleTop">
<intent-filter>
@@ -135,6 +135,10 @@
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
+ <activity
+ android:name=".activity.UnlossCardActivity"
+ android:exported="false"
+ android:launchMode="singleTop"/>
<meta-data
android:name="BUGLY_APP_VERSION"
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/BSCardFragment.kt b/generallibrary/src/main/java/com/dayu/general/activity/BSCardFragment.kt
index db849ff..8a14a09 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/BSCardFragment.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/BSCardFragment.kt
@@ -10,59 +10,108 @@
/**
* @author: zuo
- * @desc: 鍒跺崱棣栭〉
- * @since:2025/3/6
+ * @desc: 鍒跺崱棣栭〉 - 鍏呭�肩郴缁熺殑鍒跺崱鍔熻兘涓荤晫闈ragment
+ * @since: 2025/3/6
+ *
+ * 璇ragment鎻愪緵鍒跺崱鐩稿叧鐨勫悇绉嶅姛鑳藉叆鍙o紝鍖呮嫭锛�
+ * - 鏂扮敤鎴峰埗鍗�
+ * - 鍗$墖绠$悊
+ * - 鎸傚け鍗�
+ * - 琛ュ崱
+ * - 璇诲崱
+ * - 閫�鍗�
+ * - 閿�鍗�
+ * - 鎵h垂
*/
-class BSCardFragment :Fragment() {
+class BSCardFragment : Fragment() {
+ // 瑙嗗浘缁戝畾瀵硅薄锛岀敤浜庡畨鍏ㄨ闂瓼ragment甯冨眬涓殑鎺т欢
private lateinit var binding: FragmentCardBinding
+
+ /**
+ * Fragment鍒涘缓鏃剁殑鍒濆鍖栨柟娉�
+ * @param savedInstanceState 淇濆瓨鐨勫疄渚嬬姸鎬�
+ */
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
+ /**
+ * 鍒涘缓Fragment鐨勮鍥�
+ * @param inflater 甯冨眬鍔犺浇鍣�
+ * @param container 鐖跺鍣�
+ * @param savedInstanceState 淇濆瓨鐨勫疄渚嬬姸鎬�
+ * @return 杩斿洖Fragment鐨勬牴瑙嗗浘
+ */
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
+ // 浣跨敤ViewBinding鍔犺浇Fragment甯冨眬
binding = FragmentCardBinding.inflate(LayoutInflater.from(context), container, false)
+ // 鍒濆鍖栬鍥炬帶浠跺拰浜嬩欢鐩戝惉
initView()
return binding?.root
}
+ /**
+ * 鍒濆鍖栬鍥炬帶浠跺拰璁剧疆鐐瑰嚮浜嬩欢鐩戝惉鍣�
+ * 涓哄埗鍗¢椤电殑鍚勪釜鍔熻兘鎸夐挳璁剧疆瀵瑰簲鐨勭偣鍑讳簨浠�
+ */
private fun initView() {
+ // 鏂扮敤鎴峰埗鍗℃寜閽偣鍑讳簨浠�
binding.homeNewCard.setOnClickListener {
+ // 璺宠浆鍒扮敤鎴锋悳绱㈠垪琛ㄩ〉闈紝浼犻�掑埗鍗$被鍨嬪弬鏁�
val intent = Intent(context, SearchUserListActivity::class.java).apply {
- putExtra("type", "newUser")
+ putExtra("type", "newUser") // 鏍囪瘑涓烘柊鐢ㄦ埛鍒跺崱绫诲瀷
}
startActivity(intent)
}
+
+ // 鍗$墖绠$悊鎸夐挳鐐瑰嚮浜嬩欢
binding.homeManage.setOnClickListener {
+ // 璺宠浆鍒扮鐞嗗垪琛ㄩ〉闈�
val intent = Intent(context, ManageListActivity::class.java)
startActivity(intent)
}
+
+ // 鎸傚け鍗℃寜閽偣鍑讳簨浠�
binding.homeLossLL.setOnClickListener {
+ // 璺宠浆鍒版寕澶卞崱椤甸潰
val intent = Intent(context, LossCardActivity::class.java)
startActivity(intent)
}
- binding.homeReplaceLL.setOnClickListener{
- val intent = Intent(context, SearchCardListActivity::class.java).apply{
- putExtra("type", "replace")
- }
- startActivity(intent)
- }
+
+ // 璇诲崱鎸夐挳鐐瑰嚮浜嬩欢
binding.homeRedCard.setOnClickListener {
+ // 浣跨敤CardReadActivity鐨勯潤鎬佹柟娉曞惎鍔ㄨ鍗¢〉闈�
context?.let { CardReadActivity.start(it) }
}
+
+ // 閫�鍗℃寜閽偣鍑讳簨浠�
binding.homeReverse.setOnClickListener {
+ // 浣跨敤CardReturnActivity鐨勯潤鎬佹柟娉曞惎鍔ㄩ��鍗¢〉闈�
context?.let { CardReturnActivity.start(it) }
}
+
+ // 閿�鍗℃寜閽偣鍑讳簨浠�
binding.homeCancelCard.setOnClickListener {
+ // 浣跨敤CardCancelActivity鐨勯潤鎬佹柟娉曞惎鍔ㄩ攢鍗¢〉闈�
context?.let { CardCancelActivity.start(it) }
}
+
+ // 鎵h垂鎸夐挳鐐瑰嚮浜嬩欢
binding.homeDeduction.setOnClickListener {
+ // 浣跨敤CardDeductActivity鐨勯潤鎬佹柟娉曞惎鍔ㄦ墸璐归〉闈�
context?.let { CardDeductActivity.start(it) }
}
+ binding.homeReplacement.setOnClickListener {
+ context?.let {
+ val intent = Intent(context, UnlossCardActivity::class.java)
+ startActivity(intent)
+ }
+ }
}
}
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt
deleted file mode 100644
index fae0023..0000000
--- a/generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt
+++ /dev/null
@@ -1,173 +0,0 @@
-package com.dayu.general.activity
-
-import android.os.Bundle
-import android.view.LayoutInflater
-import android.view.View
-import android.view.inputmethod.EditorInfo
-import androidx.recyclerview.widget.LinearLayoutManager
-import com.dayu.baselibrary.net.subscribers.SubscriberListener
-import com.dayu.baselibrary.utils.ToastUtil
-import com.dayu.general.adapter.CardReplaceAdapter
-import com.dayu.general.bean.net.CardReplaceInfo
-import com.dayu.general.bean.net.CardReplaceResponse
-import com.dayu.general.databinding.ActivityCardReplaceBinding
-import com.dayu.general.net.ApiManager
-import com.dayu.general.net.BaseResponse
-import com.scwang.smart.refresh.layout.api.RefreshLayout
-import com.scwang.smart.refresh.layout.listener.OnRefreshLoadMoreListener
-
-/**
- * 鍗$墖琛ュ姙Activity
- */
-class CardReplaceActivity : BaseActivity() {
-
- private lateinit var binding: ActivityCardReplaceBinding
- private var currentCardInfo: CardReplaceInfo? = null
- private lateinit var adapter: CardReplaceAdapter
-
- // 鍒嗛〉鍙傛暟
- private var pageCurr: Int = 1
- private val pageSize: Int = 20
- private var hasMoreData: Boolean = true
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- binding = ActivityCardReplaceBinding.inflate(LayoutInflater.from(this))
- setContentView(binding.root)
-
- initView()
- initRecyclerView()
- setupRefreshLayout()
- loadCardReplaceList(true)
- }
-
- /**
- * 鍒濆鍖栬鍥�
- */
- private fun initView() {
- // 鍒濆鍖栨爣棰樻爮
- binding.titleBar.setOnItemclickListner(com.dayu.baselibrary.view.TitleBar.ClickType_LEFT_IMAGE) {
- finish()
- }
- }
-
- /**
- * 鍒濆鍖朢ecyclerView
- */
- private fun initRecyclerView() {
- // 鍒涘缓閫傞厤鍣�
- adapter = CardReplaceAdapter(this)
-
- // 璁剧疆甯冨眬绠$悊鍣ㄥ拰閫傞厤鍣�
- binding.recyclerView.apply {
- layoutManager = LinearLayoutManager(this@CardReplaceActivity)
- adapter = this@CardReplaceActivity.adapter
- }
-
- // 璁剧疆鍗$墖鐐瑰嚮鐩戝惉鍣� - 鐐瑰嚮鍒楄〃椤规椂鎵ц琛ュ姙鎿嶄綔
- adapter.setOnItemClickListener { cardInfo ->
- currentCardInfo = cardInfo
- // 鐩存帴鎵ц琛ュ姙鎿嶄綔
- performCardReplace(cardInfo)
- }
- }
-
- /**
- * 璁剧疆鍒锋柊甯冨眬
- */
- private fun setupRefreshLayout() {
- binding.refreshLayout.setOnRefreshLoadMoreListener(object : OnRefreshLoadMoreListener {
- override fun onRefresh(refreshLayout: RefreshLayout) {
- // 涓嬫媺鍒锋柊锛岄噸缃〉鐮佸苟閲嶆柊鍔犺浇鏁版嵁
- pageCurr = 1
- hasMoreData = true
- loadCardReplaceList(true)
- }
-
- override fun onLoadMore(refreshLayout: RefreshLayout) {
- // 涓婃媺鍔犺浇鏇村
- if (hasMoreData) {
- pageCurr++
- loadCardReplaceList(false)
- } else {
- // 娌℃湁鏇村鏁版嵁鏃讹紝缁撴潫鍔犺浇鏇村
- refreshLayout.finishLoadMoreWithNoMoreData()
- }
- }
- })
- }
-
- /**
- * 鍔犺浇鍙ˉ鍔炲崱鐗囧垪琛�
- *
- * @param isRefresh 鏄惁涓哄埛鏂版搷浣滐紙true: 鍒锋柊锛宖alse: 鍔犺浇鏇村锛�
- */
- private fun loadCardReplaceList(isRefresh: Boolean = true) {
- // 鏋勫缓鏌ヨ鍙傛暟
- val params = HashMap<String, Any>().apply {
- put("pageCurr", pageCurr)
- put("pageSize", pageSize)
- }
-
- // 璋冪敤API鏌ヨ鎸傚け鍗$墖淇℃伅
- ApiManager.getInstance().requestGetLoading(
- this,
- "sell/clientcard/getUnreplaced",
- CardReplaceResponse::class.java,
- params,
- object : SubscriberListener<BaseResponse<CardReplaceResponse>>() {
- override fun onNext(response: BaseResponse<CardReplaceResponse>) {
- // 缁撴潫鍒锋柊鎴栧姞杞芥洿澶氱姸鎬�
- finishRefreshOrLoadMore(isRefresh)
-
- if (response.success) {
- val cardResponse = response.content
- val cardList = cardResponse?.obj ?: emptyList()
-
- // 鏇存柊鏁版嵁鍒楄〃
- if (isRefresh) {
- adapter.setData(cardList)
- } else {
- adapter.addData(cardList)
- }
-
- // 鍒ゆ柇鏄惁杩樻湁鏇村鏁版嵁
- hasMoreData = cardList.size >= pageSize
- if (!hasMoreData && !isRefresh) {
- binding.refreshLayout.finishLoadMoreWithNoMoreData()
- }
- } else {
- ToastUtil.show(response.msg)
- }
- }
-
- override fun onError(e: Throwable?) {
- // 缁撴潫鍒锋柊鎴栧姞杞芥洿澶氱姸鎬�
- finishRefreshOrLoadMore(isRefresh)
- ToastUtil.show("鏌ヨ澶辫触: ${e?.message ?: "鏈煡閿欒"}")
- }
- }
- )
- }
-
- /**
- * 缁撴潫鍒锋柊鎴栧姞杞芥洿澶氱姸鎬�
- */
- private fun finishRefreshOrLoadMore(isRefresh: Boolean) {
- if (isRefresh) {
- binding.refreshLayout.finishRefresh()
- } else {
- binding.refreshLayout.finishLoadMore()
- }
- }
-
- /**
- * 鎵ц鍗$墖琛ュ姙鎿嶄綔
- */
- private fun performCardReplace(cardInfo: CardReplaceInfo) {
- // 杩欓噷瀹炵幇鍗$墖琛ュ姙鐨勪笟鍔¢�昏緫
- ToastUtil.show("閫夋嫨浜嗗崱鐗囪繘琛岃ˉ鍔烇細${cardInfo.cardNum}")
-
- // TODO: 璋冪敤琛ュ姙鍗$墖API
- }
-}
\ No newline at end of file
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/LossCardActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/LossCardActivity.kt
index 424d5f0..a2696e3 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/LossCardActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/LossCardActivity.kt
@@ -18,7 +18,7 @@
import com.scwang.smart.refresh.layout.listener.OnRefreshLoadMoreListener
/**
- * Description:
+ * Description: 鎸傚け
* Author: zuo
* Date: 2025/6/11
*/
@@ -177,7 +177,7 @@
// 浣跨敤姝g‘鐨勭被鍨嬪弬鏁�
ApiManager.getInstance().requestGetLoading(
this,
- "sell/clientcard/getcards",
+ "terminal/card/getcards",
SearchCardResult::class.java,
map,
object : SubscriberListener<BaseResponse<SearchCardResult>>() {
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/UnlossCardActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/UnlossCardActivity.kt
new file mode 100644
index 0000000..fee60df
--- /dev/null
+++ b/generallibrary/src/main/java/com/dayu/general/activity/UnlossCardActivity.kt
@@ -0,0 +1,380 @@
+package com.dayu.general.activity
+
+import android.os.Bundle
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.dayu.baselibrary.net.subscribers.SubscriberListener
+import com.dayu.baselibrary.utils.ToastUtil
+import com.dayu.baselibrary.view.ConfirmDialog
+import com.dayu.baselibrary.view.TitleBar.ClickType_LEFT_IMAGE
+import com.dayu.baselibrary.view.TitleBar.ClickType_RIGHT_IMAGE
+import com.dayu.general.BaseApplication
+import com.dayu.general.adapter.UnlossCardListAdapter
+import com.dayu.general.bean.net.SearchCardResult
+import com.dayu.general.databinding.ActivityCardListBinding
+import com.dayu.general.net.ApiManager
+import com.dayu.general.net.BaseResponse
+import com.dayu.general.view.SearchDialog
+import com.scwang.smart.refresh.layout.api.RefreshLayout
+import com.scwang.smart.refresh.layout.listener.OnRefreshLoadMoreListener
+
+/**
+ * Description: 瑙i櫎鎸傚け鍜岃ˉ鍗�
+ * Author: zuo
+ * Date: 2025/6/11
+ */
+class UnlossCardActivity : BaseActivity() {
+
+ var binding: ActivityCardListBinding? = null
+ private var cardAdapter: UnlossCardListAdapter? = null
+ var searchDialog: SearchDialog? = null
+
+ // 鍒嗛〉鐩稿叧鍙橀噺
+ private var currentPage = 1
+ private val pageSize = 20
+ private var hasMoreData = true
+
+ // 淇濆瓨褰撳墠鎼滅储鏉′欢
+ private var currentFarmerId = ""
+ private var currentFarmerName = ""
+ private var currentCardNumber = ""
+
+ lateinit var confirmDialog: ConfirmDialog
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ binding = ActivityCardListBinding.inflate(layoutInflater)
+ setContentView(binding?.root)
+ initView()
+ setupRecyclerView()
+ setupRefreshLayout()
+
+ // 纭繚Footer鍒濆鐘舵�佹纭�
+ binding?.refreshLayout?.setEnableLoadMore(true)
+ }
+
+ fun initView() {
+
+ binding?.titleBar?.setOnItemclickListner(ClickType_LEFT_IMAGE) { this.finish() }
+
+ // 璁剧疆鏍囬
+ binding?.titleBar?.setCenterText("瑙i櫎鎸傚け/琛ュ崱")
+ searchDialog = SearchDialog(this)
+ // 璁剧疆鎼滅储鐩戝惉鍣�
+ searchDialog?.setOnSearchListener(object : SearchDialog.OnSearchListener {
+ override fun onSearch(farmerId: String, farmerName: String, cardNumber: String) {
+ // 淇濆瓨褰撳墠鎼滅储鏉′欢
+ currentCardNumber = cardNumber
+ currentFarmerId = farmerId
+ currentFarmerName = farmerName
+
+ // 閲嶇疆鍒嗛〉鐘舵��
+ currentPage = 1
+ hasMoreData = true
+
+ // 閲嶇疆鏃犳洿澶氭暟鎹姸鎬�
+ binding?.refreshLayout?.resetNoMoreData()
+
+ // 鎵ц鎼滅储
+ searchCards(currentFarmerId, currentFarmerName, currentCardNumber, true)
+ }
+ })
+ binding?.titleBar?.setOnItemclickListner(ClickType_RIGHT_IMAGE) {
+ // 鏄剧ず鎼滅储瀵硅瘽妗�
+ searchDialog?.show()
+ }
+ searchCards(currentFarmerId, currentFarmerName, currentCardNumber, true)
+ }
+
+ private fun setupRecyclerView() {
+ cardAdapter = UnlossCardListAdapter(this)
+ binding?.recyclerView?.apply {
+ layoutManager = LinearLayoutManager(this@UnlossCardActivity)
+ adapter = cardAdapter
+ }
+
+ // 璁剧疆瑙i櫎鎸傚け鎸夐挳鐐瑰嚮浜嬩欢
+ cardAdapter?.setOnUnlossClickListener { card ->
+ showUnlossConfirmDialog(card)
+ }
+
+ // 璁剧疆琛ュ崱鎸夐挳鐐瑰嚮浜嬩欢
+ cardAdapter?.setOnReplaceClickListener { card ->
+ showReplaceConfirmDialog(card)
+ }
+ }
+
+ private fun setupRefreshLayout() {
+ binding?.refreshLayout?.apply {
+ // 璁剧疆Footer璺熼殢鍔熻兘锛岀‘淇濇棤鏇村鏁版嵁鏃禙ooter鑳芥纭樉绀�
+ setEnableFooterFollowWhenNoMoreData(true)
+ // 璁剧疆鍔犺浇鏇村瀹屾垚鍚庢粴鍔ㄥ唴瀹规樉绀烘柊鏁版嵁
+ setEnableScrollContentWhenLoaded(true)
+ // 绂佺敤绾粴鍔ㄦā寮忥紝纭繚Footer鑳芥甯稿伐浣�
+ setEnableOverScrollDrag(false)
+
+ // 璁剧疆鍒锋柊鍜屽姞杞芥洿澶氱洃鍚櫒
+ setOnRefreshLoadMoreListener(object : OnRefreshLoadMoreListener {
+ override fun onRefresh(refreshLayout: RefreshLayout) {
+ // 閲嶇疆椤电爜骞跺埛鏂版暟鎹�
+ currentPage = 1
+ hasMoreData = true
+ // 閲嶇疆鏃犳洿澶氭暟鎹姸鎬�
+ refreshLayout.resetNoMoreData()
+ searchCards(currentFarmerId, currentFarmerName, currentCardNumber, true)
+ }
+
+ override fun onLoadMore(refreshLayout: RefreshLayout) {
+ // 濡傛灉杩樻湁鏇村鏁版嵁锛屽姞杞戒笅涓�椤�
+ if (hasMoreData) {
+ currentPage++
+ searchCards(currentFarmerId, currentFarmerName, currentCardNumber, false)
+ } else {
+ // 瀹屾垚鍔犺浇骞舵樉绀哄凡鍒板簳鐘舵��
+ refreshLayout.finishLoadMoreWithNoMoreData()
+ }
+ }
+ })
+ }
+ }
+
+ /**
+ * 鏍规嵁鍗″彿銆佸鎴风紪鍙峰拰瀹㈡埛濮撳悕鎼滅储宸叉寕澶辩殑鍗$墖
+ *
+ * @param farmerId 瀹㈡埛缂栧彿
+ * @param farmerName 瀹㈡埛濮撳悕
+ * @param cardNumber 鍗″彿
+ * @param isRefresh 鏄惁涓哄埛鏂版搷浣�
+ */
+ private fun searchCards(
+ farmerId: String,
+ farmerName: String,
+ cardNumber: String,
+ isRefresh: Boolean = true
+ ) {
+ val map = mutableMapOf<String, Any>()
+
+ if (cardNumber.isNotEmpty()) {
+ map["cardNum"] = cardNumber
+ }
+
+ if (farmerId.isNotEmpty()) {
+ map["clientNum"] = farmerId
+ }
+
+ if (farmerName.isNotEmpty()) {
+ map["clientName"] = farmerName
+ }
+
+ // 娣诲姞鍒嗛〉鍙傛暟
+ map["pageCurr"] = currentPage
+ map["pageSize"] = pageSize
+
+ // 浣跨敤涓撻棬鐨勬寕澶卞崱鐗囨帴鍙�
+ ApiManager.getInstance().requestGetLoading(
+ this,
+ "terminal/card/getlostcards",
+ SearchCardResult::class.java,
+ map,
+ object : SubscriberListener<BaseResponse<SearchCardResult>>() {
+ override fun onNext(t: BaseResponse<SearchCardResult>) {
+ if (t.success) {
+ // 澶勭悊鎼滅储鎴愬姛鐨勬儏鍐�
+ val result = t.content
+ if (result != null) {
+ // 澶勭悊鎼滅储缁撴灉
+ if (result.obj.isNotEmpty()) {
+ // 鏍规嵁鏄惁涓哄埛鏂版搷浣滃喅瀹氬浣曟洿鏂版暟鎹�
+ if (isRefresh) {
+ cardAdapter?.setData(result.obj)
+ } else {
+ cardAdapter?.addData(result.obj)
+ }
+
+ // 鍒ゆ柇鏄惁杩樻湁鏇村鏁版嵁锛氭牴鎹綋鍓嶉〉鐮佸拰鎬婚〉鏁板垽鏂�
+ hasMoreData = currentPage < result.pageTotal
+
+ // 瀹屾垚鍒锋柊鎴栧姞杞藉姩浣�
+ if (isRefresh) {
+ binding?.refreshLayout?.finishRefresh(true)
+ } else {
+ // 濡傛灉娌℃湁鏇村鏁版嵁浜嗭紝璁剧疆宸插埌搴曠姸鎬�
+ if (!hasMoreData) {
+ binding?.refreshLayout?.finishLoadMoreWithNoMoreData()
+ } else {
+ binding?.refreshLayout?.finishLoadMore(true)
+ }
+ }
+ } else {
+ if (isRefresh) {
+ cardAdapter?.setData(emptyList())
+ binding?.refreshLayout?.finishRefresh(true)
+ ToastUtil.show("鏈壘鍒板尮閰嶇殑鍗$墖")
+ } else {
+ hasMoreData = false
+ // 浣跨敤finishLoadMoreWithNoMoreData鏄剧ず宸插埌搴曠姸鎬�
+ binding?.refreshLayout?.finishLoadMoreWithNoMoreData()
+ }
+ }
+ } else {
+ if (isRefresh) {
+ cardAdapter?.setData(emptyList())
+ binding?.refreshLayout?.finishRefresh(true)
+ ToastUtil.show("鏈壘鍒板尮閰嶇殑鍗$墖")
+ } else {
+ hasMoreData = false
+ binding?.refreshLayout?.finishLoadMoreWithNoMoreData()
+ }
+ }
+ } else {
+ // 澶勭悊鎼滅储澶辫触鐨勬儏鍐�
+ finishRefreshOrLoad(isRefresh)
+ ToastUtil.show(t.msg)
+ }
+ }
+
+ override fun onError(e: Throwable?) {
+ super.onError(e)
+ // 瀹屾垚鍒锋柊鎴栧姞杞藉姩浣�
+ finishRefreshOrLoad(isRefresh)
+ ToastUtil.show("鎼滅储澶辫触: ${e?.message ?: "鏈煡閿欒"}")
+ }
+ }
+ )
+ }
+
+ /**
+ * 鏄剧ず瑙i櫎鎸傚け纭瀵硅瘽妗�
+ */
+ private fun showUnlossConfirmDialog(card: SearchCardResult.CardInfo) {
+ val confirmMessage =
+ "鍗″彿锛�${card.cardNum ?: "鏃�"}\n\n" +
+ "鎸佸崱浜猴細${card.clientName ?: "鏈煡"}\n\n" +
+ "浣欓锛�${card.money ?: "0.00"}鍏�"
+
+ confirmDialog = ConfirmDialog(
+ this,
+ "瑙i櫎鎸傚け纭",
+ confirmMessage
+ ) {
+ // 鐢ㄦ埛鐐瑰嚮纭鍚庢墽琛岃В闄ゆ寕澶辨搷浣�
+ unlossCard(card)
+ confirmDialog.dismiss()
+ }
+ confirmDialog.show()
+ }
+
+ /**
+ * 鏄剧ず琛ュ崱纭瀵硅瘽妗�
+ */
+ private fun showReplaceConfirmDialog(card: SearchCardResult.CardInfo) {
+ val confirmMessage = "纭瑕佽ˉ鍔炴柊鍗″悧锛焅n\n" +
+ "鍗″彿锛�${card.cardNum ?: "鏃�"}\n" +
+ "鎸佸崱浜猴細${card.clientName ?: "鏈煡"}\n" +
+ "浣欓锛�${card.money ?: "0.00"}鍏僜n\n" +
+ "琛ュ崱鍚庡皢鐢熸垚鏂扮殑鍗$墖锛屽師鍗′綔搴燂紒"
+
+ val confirmDialog = ConfirmDialog(
+ this,
+ "琛ュ崱纭",
+ confirmMessage
+ ) {
+ // 鐢ㄦ埛鐐瑰嚮纭鍚庢墽琛岃ˉ鍗℃搷浣�
+ replaceCard(card)
+ }
+ confirmDialog.show()
+ }
+
+ /**
+ * 瑙i櫎鎸傚け
+ */
+ private fun unlossCard(cardInfo: SearchCardResult.CardInfo) {
+ val map = mutableMapOf<String, Any>()
+ map["cardNum"] = cardInfo.cardNum.toString()
+ map["operator"] = BaseApplication.userId
+ map["money"] = cardInfo.money?.replace(",", "") ?: "0"
+
+ ApiManager.getInstance().requestPostLoading(
+ this,
+ "terminal/card/termUnlock",
+ SearchCardResult::class.java,
+ map,
+ object : SubscriberListener<BaseResponse<SearchCardResult>>() {
+ override fun onNext(t: BaseResponse<SearchCardResult>) {
+ if (t.success) {
+ ToastUtil.show("瑙i櫎鎸傚け鎴愬姛")
+ // 鍒锋柊鍒楄〃
+ currentPage = 1
+ hasMoreData = true
+ binding?.refreshLayout?.resetNoMoreData()
+ searchCards(currentFarmerId, currentFarmerName, currentCardNumber, true)
+ } else {
+ ToastUtil.show(t.msg)
+ }
+ }
+
+ override fun onError(e: Throwable?) {
+ super.onError(e)
+ ToastUtil.show("瑙i櫎鎸傚け澶辫触: ${e?.message ?: "鏈煡閿欒"}")
+ }
+ }
+ )
+ }
+
+ /**
+ * 琛ュ崱
+ */
+ private fun replaceCard(card: SearchCardResult.CardInfo) {
+ val map = mutableMapOf<String, Any>()
+ map["cardNum"] = card.cardNum.toString()
+ map["operator"] = BaseApplication.userId
+
+ ApiManager.getInstance().requestGetLoading(
+ this,
+ "/sell/card/replace",
+ SearchCardResult::class.java,
+ map,
+ object : SubscriberListener<BaseResponse<SearchCardResult>>() {
+ override fun onNext(t: BaseResponse<SearchCardResult>) {
+ if (t.success) {
+ ToastUtil.show("琛ュ崱鎴愬姛")
+ // 鍒锋柊鍒楄〃
+ currentPage = 1
+ hasMoreData = true
+ binding?.refreshLayout?.resetNoMoreData()
+ searchCards(currentFarmerId, currentFarmerName, currentCardNumber, true)
+ } else {
+ ToastUtil.show(t.msg)
+ }
+ }
+
+ override fun onError(e: Throwable?) {
+ super.onError(e)
+ ToastUtil.show("琛ュ崱澶辫触: ${e?.message ?: "鏈煡閿欒"}")
+ }
+ }
+ )
+ }
+
+ /**
+ * 瀹屾垚鍒锋柊鎴栧姞杞芥搷浣�
+ * @param isRefresh 鏄惁涓哄埛鏂版搷浣�
+ */
+ private fun finishRefreshOrLoad(isRefresh: Boolean) {
+ if (isRefresh) {
+ binding?.refreshLayout?.finishRefresh(true)
+ } else {
+ // 濡傛灉娌℃湁鏇村鏁版嵁锛屼笉鍦ㄨ繖閲岃皟鐢╢inishLoadMore锛岀敱鍏蜂綋閫昏緫璋冪敤finishLoadMoreWithNoMoreData
+ // 濡傛灉鏈夋洿澶氭暟鎹紝鍒欐甯歌皟鐢╢inishLoadMore
+ if (hasMoreData) {
+ binding?.refreshLayout?.finishLoadMore(true)
+ }
+ // 娉ㄦ剰锛氬綋hasMoreData涓篺alse鏃讹紝涓嶈皟鐢ㄤ换浣昮inish鏂规硶锛�
+ // 鍥犱负宸茬粡鍦ㄥ叿浣撻�昏緫涓皟鐢ㄤ簡finishLoadMoreWithNoMoreData()
+ }
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ searchDialog?.dismiss()
+ }
+}
\ No newline at end of file
diff --git a/generallibrary/src/main/java/com/dayu/general/adapter/UnlossCardListAdapter.kt b/generallibrary/src/main/java/com/dayu/general/adapter/UnlossCardListAdapter.kt
new file mode 100644
index 0000000..7ec78b3
--- /dev/null
+++ b/generallibrary/src/main/java/com/dayu/general/adapter/UnlossCardListAdapter.kt
@@ -0,0 +1,138 @@
+package com.dayu.general.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import androidx.databinding.DataBindingUtil
+import androidx.recyclerview.widget.RecyclerView
+import com.dayu.baselibrary.databinding.ItemNoMoreBinding
+import com.dayu.general.R
+import com.dayu.general.bean.net.SearchCardResult
+import com.dayu.general.databinding.ItemUnlossCardListBinding
+
+/**
+ * Description: 瑙i櫎鎸傚け鍜岃ˉ鍗″垪琛ㄩ�傞厤鍣�
+ * Author: zuo
+ * Date: 2025/6/11
+ */
+class UnlossCardListAdapter(context: Context) : BaseRecycleAdapter<RecyclerView.ViewHolder>() {
+
+ private var cardList: List<SearchCardResult.CardInfo> = emptyList()
+ private var onUnlossClickListener: ((SearchCardResult.CardInfo) -> Unit)? = null
+ private var onReplaceClickListener: ((SearchCardResult.CardInfo) -> Unit)? = null
+ var mContext: Context = context
+
+ fun setData(data: List<SearchCardResult.CardInfo>) {
+ cardList = data
+ notifyDataSetChanged()
+ }
+
+ fun addData(data: List<SearchCardResult.CardInfo>) {
+ val oldSize = cardList.size
+ cardList = cardList + data
+ notifyItemRangeInserted(oldSize, data.size)
+ }
+
+ fun setOnUnlossClickListener(listener: (SearchCardResult.CardInfo) -> Unit) {
+ onUnlossClickListener = listener
+ }
+
+ fun setOnReplaceClickListener(listener: (SearchCardResult.CardInfo) -> Unit) {
+ onReplaceClickListener = listener
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
+ if (viewType == VIEW_TYPE_EMPTY) {
+ val emptyView: ItemNoMoreBinding = DataBindingUtil.inflate(
+ (mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater)!!,
+ com.dayu.baselibrary.R.layout.item_no_more,
+ parent,
+ false
+ )
+ return ViewHolderEmpty(emptyView)
+ } else {
+ val binding = ItemUnlossCardListBinding.inflate(
+ mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater,
+ parent,
+ false
+ )
+ return CardViewHolder(binding)
+ }
+ }
+
+ override fun getItemViewType(position: Int): Int {
+ if (cardList.size == 0) {
+ return VIEW_TYPE_EMPTY
+ } else {
+ return VIEW_TYPE_ITEM
+ }
+ }
+
+ override fun getItemCount(): Int {
+ //鍚屾椂杩欓噷涔熼渶瑕佹坊鍔犲垽鏂紝濡傛灉mData.size()涓�0鐨勮瘽锛屽彧寮曞叆涓�涓竷灞�锛屽氨鏄痚mptyView
+ // 閭d箞锛岃繖涓猺ecyclerView鐨刬temCount涓�1
+ if (cardList.size == 0) {
+ return 1
+ }
+ return cardList.size
+ }
+
+ override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
+ if (holder is ViewHolderEmpty) {
+ // 绌鸿鍥句笉闇�瑕佺粦瀹氭暟鎹�
+ return
+ }
+
+ if (holder is CardViewHolder) {
+ val card = cardList[position]
+ holder.bind(card)
+ }
+ }
+
+ inner class CardViewHolder(private val binding: ItemUnlossCardListBinding) : RecyclerView.ViewHolder(binding.root) {
+
+ fun bind(card: SearchCardResult.CardInfo) {
+ // 璁剧疆鏁版嵁鏄剧ず锛屾坊鍔犲垽绌哄鐞�
+ binding.tvCardNumber.text = "鍗″彿锛�${card.cardNum ?: "鏃�"}"
+ binding.tvCardType.text = "鍗$被鍨嬶細${card.cardType ?: "鏈煡"}"
+ binding.tvCardStatus.text = "鐘舵�侊細${card.stateName ?: "鏈煡"}"
+ binding.tvClientName.text = "濮撳悕锛�${card.clientName ?: "鏈煡"}"
+ binding.tvClientNum.text = "瀹㈡埛缂栧彿锛�${card.clientNum ?: "鏃�"}"
+ binding.tvCardBalance.text = "浣欓锛�${card.money ?: "0.00"} 鍏�"
+ binding.tvPhone.text = "鐢佃瘽锛�${formatPhone(card.phone)}"
+ binding.tvIdCard.text = "韬唤璇侊細${formatIdCard(card.idCard)}"
+
+ // 璁剧疆瑙i櫎鎸傚け鎸夐挳鐐瑰嚮浜嬩欢
+ binding.btnUnloss.setOnClickListener {
+ onUnlossClickListener?.invoke(card)
+ }
+
+ // 璁剧疆琛ュ崱鎸夐挳鐐瑰嚮浜嬩欢
+ binding.btnReplace.setOnClickListener {
+ onReplaceClickListener?.invoke(card)
+ }
+ }
+
+ // 鏍煎紡鍖栬韩浠借瘉鍙凤紝淇濇姢闅愮
+ private fun formatIdCard(idCard: String?): String {
+ return if (!idCard.isNullOrEmpty() && idCard.length >= 18) {
+ val start = idCard.substring(0, 6)
+ val end = idCard.substring(idCard.length - 4)
+ "$start****$end"
+ } else {
+ idCard ?: "鏃�"
+ }
+ }
+
+ // 鏍煎紡鍖栨墜鏈哄彿锛屼繚鎶ら殣绉�
+ private fun formatPhone(phone: String?): String {
+ return if (!phone.isNullOrEmpty() && phone.length >= 11) {
+ val start = phone.substring(0, 3)
+ val end = phone.substring(phone.length - 4)
+ "$start****$end"
+ } else {
+ phone ?: "鏃�"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/generallibrary/src/main/java/com/dayu/general/net/NetConstans.kt b/generallibrary/src/main/java/com/dayu/general/net/NetConstans.kt
index 42a877f..177a96d 100644
--- a/generallibrary/src/main/java/com/dayu/general/net/NetConstans.kt
+++ b/generallibrary/src/main/java/com/dayu/general/net/NetConstans.kt
@@ -7,8 +7,9 @@
*/
class NetConstans {
companion object {
- const val BASE_URL: String = "https://no253541tf71.vicp.fun/"
+// const val BASE_URL: String = "https://no253541tf71.vicp.fun/"
// const val BASE_URL: String = "http://192.168.40.166:54321/"
+ const val BASE_URL: String = "http://192.168.10.87:54321/"
const val TOKEN_INVALID: String = "0000"
}
diff --git a/generallibrary/src/main/res/layout/item_unloss_card_list.xml b/generallibrary/src/main/res/layout/item_unloss_card_list.xml
new file mode 100644
index 0000000..ba7c9aa
--- /dev/null
+++ b/generallibrary/src/main/res/layout/item_unloss_card_list.xml
@@ -0,0 +1,145 @@
+<?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="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginHorizontal="12dp"
+ android:layout_marginVertical="6dp"
+ app:cardCornerRadius="8dp"
+ app:cardElevation="2dp">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:padding="12dp">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
+
+ <TextView
+ android:id="@+id/tv_card_number"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:text="鍗″彿锛�"
+ android:textColor="@color/black"
+ android:textSize="16sp"
+ android:textStyle="bold" />
+
+ <TextView
+ android:id="@+id/tv_card_status"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="鐘舵�侊細"
+ android:textColor="@color/red"
+ android:textSize="14sp" />
+ </LinearLayout>
+
+ <TextView
+ android:id="@+id/tv_client_name"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="4dp"
+ android:text="濮撳悕锛�"
+ android:textColor="@color/black"
+ android:textSize="14sp" />
+
+ <TextView
+ android:id="@+id/tv_card_type"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="4dp"
+ android:text="鍗$被鍨嬶細"
+ android:textColor="@color/black"
+ android:textSize="14sp" />
+
+ <TextView
+ android:id="@+id/tv_client_num"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="4dp"
+ android:text="瀹㈡埛缂栧彿锛�"
+ android:textColor="@color/black"
+ android:textSize="14sp" />
+
+
+ <TextView
+ android:id="@+id/tv_id_card"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="4dp"
+ android:text="韬唤璇侊細"
+ android:textColor="@color/black"
+ android:textSize="14sp"
+ android:visibility="visible" />
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="4dp"
+ android:orientation="horizontal">
+
+ <TextView
+ android:id="@+id/tv_phone"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+
+ android:text="鐢佃瘽锛�"
+ android:layout_weight="1"
+ android:textColor="@color/black"
+ android:textSize="14sp" />
+
+ <TextView
+ android:id="@+id/tv_card_balance"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="浣欓锛氬厓"
+ android:textColor="@color/black"
+ android:textSize="14sp"
+ android:textStyle="bold" />
+ </LinearLayout>
+
+ <!-- 鍒嗗壊绾� -->
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:layout_marginTop="12dp"
+ android:layout_marginBottom="8dp"
+ android:background="@color/line_color" />
+
+ <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:gravity="end">
+
+ <Button
+ android:id="@+id/btn_unloss"
+ android:layout_width="wrap_content"
+ android:layout_height="36dp"
+ android:layout_marginEnd="8dp"
+ android:background="@drawable/button_green_bg"
+ android:minWidth="80dp"
+ android:text="瑙i櫎鎸傚け"
+ android:textColor="@color/white"
+ android:textSize="12sp"
+ style="?android:attr/borderlessButtonStyle" />
+
+ <Button
+ android:id="@+id/btn_replace"
+ android:layout_width="wrap_content"
+ android:layout_height="36dp"
+ android:background="@drawable/button_blue_bg"
+ android:minWidth="80dp"
+ android:text="琛ュ崱"
+ android:textColor="@color/white"
+ android:textSize="12sp"
+ style="?android:attr/borderlessButtonStyle" />
+
+ </LinearLayout>
+
+ </LinearLayout>
+</androidx.cardview.widget.CardView>
\ No newline at end of file
diff --git a/generallibrary/src/main/res/values/colors.xml b/generallibrary/src/main/res/values/colors.xml
index 4b52ad5..3ce05b6 100644
--- a/generallibrary/src/main/res/values/colors.xml
+++ b/generallibrary/src/main/res/values/colors.xml
@@ -9,4 +9,6 @@
<color name="blue">#007BFF</color>
<color name="grey">#808080</color>
<color name="light_grey">#E0E0E0</color>
+ <color name="line_color">#E0E0E0</color>
+ <color name="red">#FF0000</color>
</resources>
\ No newline at end of file
--
Gitblit v1.8.0