From bd4891e2fd6b773cbb0ec387f6db4bc944fdf51a Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期一, 31 三月 2025 18:07:51 +0800
Subject: [PATCH] feat(generallibrary): 添加卡片列表功能并优化登录逻辑

---
 generallibrary/src/main/java/com/dayu/general/activity/CardListActivity.kt |  209 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 208 insertions(+), 1 deletions(-)

diff --git a/generallibrary/src/main/java/com/dayu/general/activity/CardListActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/CardListActivity.kt
index bfd1ded..43874cd 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/CardListActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/CardListActivity.kt
@@ -1,9 +1,216 @@
 package com.dayu.general.activity
 
-class CardListActivity:BaseActivity() {
+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.TitleBar.ClickType_LEFT_IMAGE
+import com.dayu.baselibrary.view.TitleBar.ClickType_RIGHT_IMAGE
+import com.dayu.general.adapter.CardListAdapter
+import com.dayu.general.bean.net.SearchCardResult
+import com.dayu.general.databinding.ActivityCardListBinding
+import com.dayu.general.view.CardSearchDialog
+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
 
+/**
+ * @author: zuo
+ * @date: 2023/3/31
+ * @description: 鍗$墖鍒楄〃鐣岄潰
+ */
+class CardListActivity : BaseActivity() {
 
+    var binding: ActivityCardListBinding? = null
+    private var cardAdapter: CardListAdapter? = null
+    var searchDialog: CardSearchDialog? = null
+    
+    // 鍒嗛〉鐩稿叧鍙橀噺
+    private var currentPage = 1
+    private val pageSize = 20
+    private var hasMoreData = true
+    
+    // 淇濆瓨褰撳墠鎼滅储鏉′欢
+    private var currentCardNumber = ""
+    private var currentClientNumber = ""
+    private var currentClientName = ""
 
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        binding = ActivityCardListBinding.inflate(layoutInflater)
+        setContentView(binding?.root)
+        initView()
+        setupRecyclerView()
+        setupRefreshLayout()
+    }
 
+    fun initView() {
+        searchDialog = CardSearchDialog(this)
+        searchDialog?.show()
+        binding?.titleBar?.setOnItemclickListner(ClickType_LEFT_IMAGE) { this.finish() }
+        // 璁剧疆鎼滅储鐩戝惉鍣�
+        searchDialog?.setOnSearchListener(object : CardSearchDialog.OnSearchListener {
+            override fun onSearch(cardNumber: String, clientNumber: String, clientName: String) {
+                // 淇濆瓨褰撳墠鎼滅储鏉′欢
+                currentCardNumber = cardNumber
+                currentClientNumber = clientNumber
+                currentClientName = clientName
+                
+                // 閲嶇疆鍒嗛〉鐘舵��
+                currentPage = 1
+                hasMoreData = true
+                
+                // 鎵ц鎼滅储
+                searchCards(cardNumber, clientNumber, clientName, true)
+            }
+        })
+        binding?.titleBar?.setOnItemclickListner(ClickType_RIGHT_IMAGE) {
+            // 鏄剧ず鎼滅储瀵硅瘽妗�
+            searchDialog?.show()
+        }
+    }
 
+    private fun setupRecyclerView() {
+        cardAdapter = CardListAdapter()
+        binding?.recyclerView?.apply {
+            layoutManager = LinearLayoutManager(this@CardListActivity)
+            adapter = cardAdapter
+        }
+        
+        // 璁剧疆鍒楄〃椤圭偣鍑讳簨浠�
+        cardAdapter?.setOnItemClickListener { card ->
+            // 澶勭悊鍗$墖鐐瑰嚮浜嬩欢
+            ToastUtil.show("宸查�夋嫨鍗$墖锛�${card.cardNum}")
+            // 杩欓噷鍙互娣诲姞璺宠浆鍒板崱鐗囪鎯呴〉闈㈢殑閫昏緫
+            // val intent = Intent(this, CardDetailActivity::class.java)
+            // intent.putExtra("cardNum", card.cardNum)
+            // startActivity(intent)
+        }
+    }
+    
+    private fun setupRefreshLayout() {
+        binding?.refreshLayout?.apply {
+            // 璁剧疆鍒锋柊鍜屽姞杞芥洿澶氱洃鍚櫒
+            setOnRefreshLoadMoreListener(object : OnRefreshLoadMoreListener {
+                override fun onRefresh(refreshLayout: RefreshLayout) {
+                    // 閲嶇疆椤电爜骞跺埛鏂版暟鎹�
+                    currentPage = 1
+                    hasMoreData = true
+                    searchCards(currentCardNumber, currentClientNumber, currentClientName, true)
+                }
+                
+                override fun onLoadMore(refreshLayout: RefreshLayout) {
+                    // 濡傛灉杩樻湁鏇村鏁版嵁锛屽姞杞戒笅涓�椤�
+                    if (hasMoreData) {
+                        currentPage++
+                        searchCards(currentCardNumber, currentClientNumber, currentClientName, false)
+                    } else {
+                        // 瀹屾垚鍔犺浇骞舵彁绀烘病鏈夋洿澶氭暟鎹�
+                        refreshLayout.finishLoadMore(500, true, false)
+                        ToastUtil.show("娌℃湁鏇村鏁版嵁浜�")
+                    }
+                }
+            })
+        }
+    }
+
+    /**
+     * 鏍规嵁鍗″彿銆佸鎴风紪鍙峰拰瀹㈡埛濮撳悕鎼滅储鍗$墖
+     *
+     * 姝ゅ嚱鏁版瀯寤轰竴涓弬鏁版槧灏勶紝鏍规嵁鎻愪緵鐨勫崱鍙枫�佸鎴风紪鍙峰拰瀹㈡埛濮撳悕鏉ユ悳绱㈠崱鐗�
+     * 瀹冧粎鍖呭惈鏈夋晥鐨勩�侀潪绌虹殑鎼滅储鍙傛暟锛屼互纭繚鎼滅储璇锋眰鐨勫噯纭�у拰鏁堢巼
+     *
+     * @param cardNumber 鍗″彿
+     * @param clientNumber 瀹㈡埛缂栧彿
+     * @param clientName 瀹㈡埛濮撳悕
+     * @param isRefresh 鏄惁涓哄埛鏂版搷浣�
+     */
+    private fun searchCards(cardNumber: String, clientNumber: String, clientName: String, isRefresh: Boolean = true) {
+        val map = mutableMapOf<String, Any>()
+
+        if (cardNumber.isNotEmpty()) {
+            map["cardNum"] = cardNumber
+        }
+
+        if (clientNumber.isNotEmpty()) {
+            map["clientNum"] = clientNumber
+        }
+
+        if (clientName.isNotEmpty()) {
+            map["clientName"] = clientName
+        }
+        
+        // 娣诲姞鍒嗛〉鍙傛暟
+        map["pageCurr"] = currentPage
+        map["pageSize"] = pageSize
+
+        // 浣跨敤姝g‘鐨勭被鍨嬪弬鏁�
+        ApiManager.getInstance().requestGetLoading(
+            this,
+            "sell/clientcard/getcards",
+            SearchCardResult::class.java,
+            map,
+            object : SubscriberListener<BaseResponse<SearchCardResult>>() {
+                override fun onNext(t: BaseResponse<SearchCardResult>) {
+                    // 瀹屾垚鍒锋柊鎴栧姞杞藉姩浣�
+                    finishRefreshOrLoad(isRefresh)
+                    
+                    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
+                            } else {
+                                if (isRefresh) {
+                                    cardAdapter?.setData(emptyList())
+                                    ToastUtil.show("鏈壘鍒板尮閰嶇殑鍗$墖")
+                                } else {
+                                    hasMoreData = false
+                                    ToastUtil.show("娌℃湁鏇村鏁版嵁浜�")
+                                }
+                            }
+                        } else {
+                            if (isRefresh) {
+                                cardAdapter?.setData(emptyList())
+                                ToastUtil.show("鏈壘鍒板尮閰嶇殑鍗$墖")
+                            }
+                        }
+                    } else {
+                        // 澶勭悊鎼滅储澶辫触鐨勬儏鍐�
+                        ToastUtil.show(t.msg)
+                    }
+                }
+
+                override fun onError(e: Throwable?) {
+                    super.onError(e)
+                    // 瀹屾垚鍒锋柊鎴栧姞杞藉姩浣�
+                    finishRefreshOrLoad(isRefresh)
+                    ToastUtil.show("鎼滅储澶辫触: ${e?.message ?: "鏈煡閿欒"}")
+                }
+            }
+        )
+    }
+    
+    /**
+     * 瀹屾垚鍒锋柊鎴栧姞杞芥搷浣�
+     * @param isRefresh 鏄惁涓哄埛鏂版搷浣�
+     */
+    private fun finishRefreshOrLoad(isRefresh: Boolean) {
+        if (isRefresh) {
+            binding?.refreshLayout?.finishRefresh(true)
+        } else {
+            binding?.refreshLayout?.finishLoadMore(true)
+        }
+    }
 }
\ No newline at end of file

--
Gitblit v1.8.0