feat: dev

This commit is contained in:
2025-11-14 12:15:33 +08:00
parent aa8ac2271a
commit c6330a818f
22 changed files with 2036 additions and 2831 deletions

View File

@@ -0,0 +1,57 @@
package com.lukouguoji.gjc.activity
import android.content.Context
import android.content.Intent
import android.os.Bundle
import com.alibaba.android.arouter.facade.annotation.Route
import com.lukouguoji.gjc.R
import com.lukouguoji.gjc.databinding.ActivityGjcInspectionBinding
import com.lukouguoji.gjc.viewModel.GjcInspectionViewModel
import com.lukouguoji.module_base.base.BaseBindingActivity
import com.lukouguoji.module_base.common.ConstantEvent
import com.lukouguoji.module_base.impl.FlowBus
import com.lukouguoji.module_base.impl.observe
import com.lukouguoji.module_base.ktx.getLifecycleOwner
import com.lukouguoji.module_base.router.ARouterConstants
/**
* 国际出港收运检查列表页
*/
@Route(path = ARouterConstants.ACTIVITY_URL_GJC_INSPECTION)
class GjcInspectionActivity :
BaseBindingActivity<ActivityGjcInspectionBinding, GjcInspectionViewModel>() {
override fun layoutId() = R.layout.activity_gjc_inspection
override fun viewModelClass() = GjcInspectionViewModel::class.java
override fun initOnCreate(savedInstanceState: Bundle?) {
setBackArrow("国际出港收运检查")
binding.viewModel = viewModel
// 绑定分页逻辑
viewModel.pageModel
.bindSmartRefreshLayout(binding.srl, binding.rv, viewModel, getLifecycleOwner())
// 监听刷新事件
FlowBus.with<String>(ConstantEvent.EVENT_REFRESH)
.observe(this) {
viewModel.refresh()
}
// 初始化代理列表
viewModel.initAgentList()
// 初始加载
viewModel.refresh()
}
companion object {
@JvmStatic
fun start(context: Context) {
val starter = Intent(context, GjcInspectionActivity::class.java)
context.startActivity(starter)
}
}
}

View File

@@ -0,0 +1,28 @@
package com.lukouguoji.gjc.holder
import android.graphics.Color
import android.view.View
import com.lukouguoji.gjc.databinding.ItemGjcInspectionBinding
import com.lukouguoji.module_base.base.BaseViewHolder
import com.lukouguoji.module_base.bean.GjcInspectionBean
/**
* 国际出港收运检查列表 ViewHolder
*/
class GjcInspectionViewHolder(view: View) :
BaseViewHolder<GjcInspectionBean, ItemGjcInspectionBinding>(view) {
override fun onBind(item: Any?, position: Int) {
val bean = getItemBean(item)!!
binding.bean = bean
// 点击checkbox切换选中状态
binding.ivIcon.setOnClickListener {
bean.checked.set(!bean.checked.get())
}
// 设置审核状态文本和颜色
binding.tvStatus.text = bean.getReviewStatusName()
binding.tvStatus.setTextColor(Color.parseColor(bean.getReviewStatusColor()))
}
}

View File

@@ -0,0 +1,197 @@
package com.lukouguoji.gjc.viewModel
import android.app.Activity
import android.content.Intent
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope
import com.lukouguoji.gjc.R
import com.lukouguoji.gjc.holder.GjcInspectionViewHolder
import com.lukouguoji.module_base.base.BasePageViewModel
import com.lukouguoji.module_base.bean.GjcInspectionBean
import com.lukouguoji.module_base.bean.StatisticsBean
import com.lukouguoji.module_base.common.Constant
import com.lukouguoji.module_base.common.ConstantEvent
import com.lukouguoji.module_base.http.net.NetApply
import com.lukouguoji.module_base.impl.FlowBus
import com.lukouguoji.module_base.ktx.commonAdapter
import com.lukouguoji.module_base.ktx.launchCollect
import com.lukouguoji.module_base.ktx.launchLoadingCollect
import com.lukouguoji.module_base.ktx.noNull
import com.lukouguoji.module_base.ktx.showConfirmDialog
import com.lukouguoji.module_base.ktx.showToast
import com.lukouguoji.module_base.ktx.toRequestBody
import com.lukouguoji.module_base.model.ScanModel
import com.lukouguoji.module_base.util.CheckUtil
import dev.utils.app.info.KeyValue
import kotlinx.coroutines.launch
/**
* 国际出港收运检查 ViewModel
*/
class GjcInspectionViewModel : BasePageViewModel() {
// 搜索条件
val flightDate = MutableLiveData("") // 航班日期
val flightNo = MutableLiveData("") // 航班号
val agentId = MutableLiveData("") // 代理ID
val auditStatus = MutableLiveData("") // 审核状态
val waybillNo = MutableLiveData("") // 运单号
// 代理下拉列表需要从API获取暂时用空列表
val agentList = MutableLiveData(listOf(KeyValue("全部", "")))
// 审核状态下拉列表
val auditStatusList = MutableLiveData(
listOf(
KeyValue("全部", ""),
KeyValue("已通过", "1"),
KeyValue("退回", "2"),
KeyValue("未审核", "0"),
)
)
// 适配器配置
val itemViewHolder = GjcInspectionViewHolder::class.java
val itemLayoutId = R.layout.item_gjc_inspection
// 统计数据
val totalCount = MutableLiveData("0") // 合计票数
val totalPc = MutableLiveData("0") // 总件数
val totalWeight = MutableLiveData("0") // 总重量
///////////////////////////////////////////////////////////////////////////
// 方法区
///////////////////////////////////////////////////////////////////////////
/**
* 扫码输入运单号
*/
fun waybillScanClick() {
ScanModel.startScan(getTopActivity(), Constant.RequestCode.WAYBILL)
}
/**
* 搜索按钮点击
*/
fun searchClick() {
refresh()
}
/**
* 获取列表数据
*/
override fun getData() {
val body = mapOf(
"pageNum" to pageModel.page,
"pageSize" to pageModel.limit,
"fdate" to flightDate.value!!.ifEmpty { null },
"fno" to flightNo.value!!.ifEmpty { null },
"agentCode" to agentId.value!!.ifEmpty { null },
"reviewStatus" to auditStatus.value!!.ifEmpty { null },
"wbNo" to waybillNo.value!!.ifEmpty { null },
).toRequestBody()
launchLoadingCollect({
NetApply.api.getGjcInspectionList(body)
}) {
onSuccess = {
pageModel.handleListBean(it)
// 更新统计数据(包含在返回结果中)
totalCount.value = (it.total ?: 0).toString()
totalPc.value = (it.totalPc ?: 0).toString()
totalWeight.value = (it.totalWeight ?: 0.0).toString()
}
}
}
/**
* 处理扫码结果
*/
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (resultCode == Activity.RESULT_OK && data != null) {
when (requestCode) {
Constant.RequestCode.WAYBILL -> {
waybillNo.value = data.getStringExtra(Constant.Result.CODED_CONTENT)
refresh()
}
}
}
}
/**
* 批量审核 - 通过
*/
fun auditPassClick() {
val list = pageModel.rv!!.commonAdapter()!!.items as List<GjcInspectionBean>
val filter = list.filter { it.checked.get() }
if (filter.isEmpty()) {
showToast("请选择数据")
return
}
getTopActivity().showConfirmDialog("确定要通过选中的 ${filter.size} 条数据吗?") {
performAudit(filter, "1", "通过")
}
}
/**
* 批量审核 - 退回
*/
fun auditRejectClick() {
val list = pageModel.rv!!.commonAdapter()!!.items as List<GjcInspectionBean>
val filter = list.filter { it.checked.get() }
if (filter.isEmpty()) {
showToast("请选择数据")
return
}
getTopActivity().showConfirmDialog("确定要退回选中的 ${filter.size} 条数据吗?") {
performAudit(filter, "2", "退回")
}
}
/**
* 执行审核操作
* @param items 选中的数据列表
* @param status 审核状态1:通过, 2:退回)
* @param action 操作名称(用于提示)
*/
private fun performAudit(items: List<GjcInspectionBean>, status: String, action: String) {
launchLoadingCollect({
NetApply.api.auditGjcInspection(
mapOf(
"ids" to items.map { it.maWbId },
"reviewStatus" to status,
).toRequestBody()
)
}) {
onSuccess = {
showToast(it.msg.noNull("${action}成功"))
viewModelScope.launch {
FlowBus.with<String>(ConstantEvent.EVENT_REFRESH).emit("refresh")
}
refresh()
}
}
}
/**
* 全选/全不选
*/
fun checkAllClick() {
val list = pageModel.rv!!.commonAdapter()!!.items as List<GjcInspectionBean>
CheckUtil.handleAllCheck(list)
}
/**
* 初始化代理下拉列表从API获取
*/
fun initAgentList() {
// TODO: 调用API获取代理列表
// 暂时使用模拟数据
agentList.value = listOf(
KeyValue("全部", ""),
KeyValue("SF", "SF"),
KeyValue("YTO", "YTO"),
KeyValue("ZTO", "ZTO"),
)
}
}