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.TitleBar.ClickType_LEFT_IMAGE
|
import com.dayu.baselibrary.view.TitleBar.ClickType_RIGHT_IMAGE
|
import com.dayu.general.BaseApplication
|
import com.dayu.general.adapter.CardListAdapter
|
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.CardRefundDialog
|
import com.dayu.general.view.SearchDialog
|
import com.scwang.smart.refresh.layout.api.RefreshLayout
|
import com.scwang.smart.refresh.layout.listener.OnRefreshLoadMoreListener
|
|
/**
|
* Description:
|
* Author: zuo
|
* Date: 2025/6/11
|
*/
|
class LossCardActivity : BaseActivity() {
|
|
var binding: ActivityCardListBinding? = null
|
private var cardAdapter: CardListAdapter? = 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 = ""
|
|
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() {
|
searchDialog = SearchDialog(this)
|
searchDialog?.show()
|
binding?.titleBar?.setOnItemclickListner(ClickType_LEFT_IMAGE) { this.finish() }
|
// 设置搜索监听器
|
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()
|
}
|
}
|
|
private fun setupRecyclerView() {
|
cardAdapter = CardListAdapter(this)
|
binding?.recyclerView?.apply {
|
layoutManager = LinearLayoutManager(this@LossCardActivity)
|
adapter = cardAdapter
|
}
|
|
// 设置列表项点击事件
|
cardAdapter?.setOnItemClickListener { card ->
|
// 显示退款对话框
|
val refundDialog = CardRefundDialog(this)
|
refundDialog.show() // 先显示对话框
|
refundDialog.setUserInfo(
|
card.clientName.toString(),
|
card.cardNum.toString(),
|
card.money.toString()
|
)
|
refundDialog.setOnConfirmListener { refundAmount, remark ->
|
// TODO: 处理退款逻辑
|
lossPost(card.idCard.toString())
|
}
|
}
|
|
|
}
|
|
private fun setupRefreshLayout() {
|
binding?.refreshLayout?.apply {
|
// 设置Footer跟随功能,确保无更多数据时Footer能正确显示
|
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 cardNumber 卡号
|
* @param clientNumber 客户编号
|
* @param clientName 客户姓名
|
* @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,
|
"sell/clientcard/getcards",
|
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 ?: "未知错误"}")
|
}
|
}
|
)
|
}
|
|
|
private fun lossPost(cardNumber: String) {
|
val map = mutableMapOf<String, Any>()
|
|
map["cardNum"] = cardNumber
|
map["operator"] = BaseApplication.userId
|
ApiManager.getInstance().requestGetLoading(
|
this,
|
"/sell/card/loss",
|
SearchCardResult::class.java,
|
map,
|
object : SubscriberListener<BaseResponse<SearchCardResult>>() {
|
override fun onNext(t: BaseResponse<SearchCardResult>) {
|
|
|
if (t.success) {
|
|
} 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 {
|
// 如果没有更多数据,不在这里调用finishLoadMore,由具体逻辑调用finishLoadMoreWithNoMoreData
|
// 如果有更多数据,则正常调用finishLoadMore
|
if (hasMoreData) {
|
binding?.refreshLayout?.finishLoadMore(true)
|
}
|
// 注意:当hasMoreData为false时,不调用任何finish方法,
|
// 因为已经在具体逻辑中调用了finishLoadMoreWithNoMoreData()
|
}
|
}
|
|
override fun onDestroy() {
|
super.onDestroy()
|
searchDialog?.dismiss()
|
}
|
|
}
|