diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f4cfb47..a4e1f81 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -393,6 +393,13 @@
android:exported="false"
android:screenOrientation="userLandscape" />
+
+
+
diff --git a/module_base/src/main/java/com/lukouguoji/module_base/http/net/Api.kt b/module_base/src/main/java/com/lukouguoji/module_base/http/net/Api.kt
index a5289f7..b2e1adc 100644
--- a/module_base/src/main/java/com/lukouguoji/module_base/http/net/Api.kt
+++ b/module_base/src/main/java/com/lukouguoji/module_base/http/net/Api.kt
@@ -1586,4 +1586,16 @@ interface Api {
*/
@POST("IntImpManifest/pageQueryTotal")
suspend fun getIntImpManifestTotal(@Body data: RequestBody): BaseResultBean
+
+ /**
+ * 国际进港舱单-分拣理货(装机单)-分页查询
+ */
+ @POST("IntImpManifest/pageQueryAir")
+ suspend fun getIntImpLoadingList(@Body data: RequestBody): BaseResultBean>
+
+ /**
+ * 国际进港舱单-分拣理货(装机单)-分页合计
+ */
+ @POST("IntImpManifest/pageQueryAirTotal")
+ suspend fun getIntImpLoadingTotal(@Body data: RequestBody): BaseResultBean
}
\ No newline at end of file
diff --git a/module_base/src/main/java/com/lukouguoji/module_base/router/ARouterConstants.kt b/module_base/src/main/java/com/lukouguoji/module_base/router/ARouterConstants.kt
index 2e6ff6b..4a14498 100644
--- a/module_base/src/main/java/com/lukouguoji/module_base/router/ARouterConstants.kt
+++ b/module_base/src/main/java/com/lukouguoji/module_base/router/ARouterConstants.kt
@@ -172,6 +172,7 @@ object ARouterConstants {
const val ACTIVITY_URL_INT_ARR_AIR_MANIFEST_DETAILS = "/gjj/IntArrAirManifestDetailsActivity" //国际进港 原始舱单详情
const val ACTIVITY_URL_INT_ARR_SUPPLEMENT_INFO = "/gjj/IntArrSupplementInfoActivity" //国际进港 补充信息
const val ACTIVITY_URL_INT_IMP_MANIFEST = "/gjj/IntImpManifestActivity" //国际进港 进港舱单
+ const val ACTIVITY_URL_INT_IMP_LOADING_LIST = "/gjj/IntImpLoadingListActivity" //国际进港 装机单(分拣理货)
///////////////// 航班查询模块
/**
diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntImpLoadingListActivity.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntImpLoadingListActivity.kt
new file mode 100644
index 0000000..9c76150
--- /dev/null
+++ b/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntImpLoadingListActivity.kt
@@ -0,0 +1,59 @@
+package com.lukouguoji.gjj.activity
+
+import android.app.Activity
+import android.content.Intent
+import android.os.Bundle
+import com.alibaba.android.arouter.facade.annotation.Route
+import com.lukouguoji.gjj.R
+import com.lukouguoji.gjj.databinding.ActivityIntImpLoadingListBinding
+import com.lukouguoji.gjj.viewModel.IntImpLoadingListViewModel
+import com.lukouguoji.module_base.base.BaseBindingActivity
+import com.lukouguoji.module_base.common.Constant
+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.addOnItemClickListener
+import com.lukouguoji.module_base.router.ARouterConstants
+
+/**
+ * 国际进港-装机单页面(分拣理货)
+ */
+@Route(path = ARouterConstants.ACTIVITY_URL_INT_IMP_LOADING_LIST)
+class IntImpLoadingListActivity :
+ BaseBindingActivity() {
+
+ override fun layoutId() = R.layout.activity_int_imp_loading_list
+ override fun viewModelClass() = IntImpLoadingListViewModel::class.java
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ setBackArrow("国际进港装机单")
+ binding.viewModel = viewModel
+
+ // 观察全选状态,更新图标透明度
+ viewModel.isAllChecked.observe(this) { isAllChecked ->
+ binding.checkIcon.alpha = if (isAllChecked) 1.0f else 0.5f
+ }
+
+ // 绑定分页
+ viewModel.pageModel.bindSmartRefreshLayout(binding.srl, binding.rv, viewModel, this)
+
+ // 设置item点击监听
+ binding.rv.addOnItemClickListener(viewModel)
+
+ // 监听刷新事件
+ FlowBus.with(ConstantEvent.EVENT_REFRESH).observe(this) {
+ viewModel.refresh()
+ }
+
+ // 初始加载数据
+ viewModel.refresh()
+ }
+
+ override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+ super.onActivityResult(requestCode, resultCode, data)
+ if (requestCode == Constant.RequestCode.WAYBILL && resultCode == Activity.RESULT_OK) {
+ viewModel.waybillNo.value = data?.getStringExtra(Constant.Result.CODED_CONTENT)
+ viewModel.searchClick()
+ }
+ }
+}
diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/holder/IntImpLoadingListViewHolder.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/holder/IntImpLoadingListViewHolder.kt
new file mode 100644
index 0000000..42fb679
--- /dev/null
+++ b/module_gjj/src/main/java/com/lukouguoji/gjj/holder/IntImpLoadingListViewHolder.kt
@@ -0,0 +1,26 @@
+package com.lukouguoji.gjj.holder
+
+import android.view.View
+import com.lukouguoji.gjj.databinding.ItemIntImpLoadingListBinding
+import com.lukouguoji.module_base.base.BaseViewHolder
+import com.lukouguoji.module_base.bean.GjjManifest
+
+/**
+ * 国际进港装机单 ViewHolder
+ */
+class IntImpLoadingListViewHolder(view: View) :
+ BaseViewHolder(view) {
+
+ override fun onBind(item: Any?, position: Int) {
+ val bean = getItemBean(item) ?: return
+ binding.bean = bean
+ binding.position = position
+ binding.executePendingBindings()
+
+ // 添加图标点击事件 - 切换选择状态
+ binding.ivIcon.setOnClickListener {
+ bean.checked.set(!bean.checked.get())
+ binding.executePendingBindings()
+ }
+ }
+}
diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpLoadingListViewModel.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpLoadingListViewModel.kt
new file mode 100644
index 0000000..ad59110
--- /dev/null
+++ b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpLoadingListViewModel.kt
@@ -0,0 +1,159 @@
+package com.lukouguoji.gjj.viewModel
+
+import androidx.lifecycle.MutableLiveData
+import com.lukouguoji.gjj.R
+import com.lukouguoji.gjj.holder.IntImpLoadingListViewHolder
+import com.lukouguoji.module_base.base.BasePageViewModel
+import com.lukouguoji.module_base.bean.GjjManifest
+import com.lukouguoji.module_base.common.Constant
+import com.lukouguoji.module_base.http.net.NetApply
+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.showToast
+import com.lukouguoji.module_base.ktx.toRequestBody
+import com.lukouguoji.module_base.model.ScanModel
+
+/**
+ * 国际进港装机单 ViewModel
+ */
+class IntImpLoadingListViewModel : BasePageViewModel() {
+
+ // ========== 搜索条件 ==========
+ val flightDate = MutableLiveData("") // 航班日期
+ val flightNo = MutableLiveData("") // 航班号
+ val fdep = MutableLiveData("") // 始发站
+ val fdest = MutableLiveData("") // 目的站
+ val waybillNo = MutableLiveData("") // 运单号
+
+ // ========== 统计信息 ==========
+ val totalCount = MutableLiveData("0") // 合计票数
+ val totalPc = MutableLiveData("0") // 总件数
+ val totalWeight = MutableLiveData("0") // 总重量
+
+ // ========== 全选状态 ==========
+ val isAllChecked = MutableLiveData(false)
+
+ init {
+ // 监听全选状态,自动更新所有列表项
+ isAllChecked.observeForever { checked ->
+ val list = pageModel.rv?.commonAdapter()?.items as? List ?: return@observeForever
+ list.forEach { it.checked.set(checked) }
+ pageModel.rv?.commonAdapter()?.notifyDataSetChanged()
+ }
+ }
+
+ // ========== 适配器配置 ==========
+ val itemViewHolder = IntImpLoadingListViewHolder::class.java
+ val itemLayoutId = R.layout.item_int_imp_loading_list
+
+ /**
+ * 搜索按钮点击
+ */
+ fun searchClick() {
+ refresh()
+ }
+
+ /**
+ * 全选按钮点击(切换全选状态)
+ */
+ fun checkAllClick() {
+ val list = pageModel.rv?.commonAdapter()?.items as? List ?: return
+
+ // 切换全选状态
+ val shouldCheckAll = !isAllChecked.value!!
+ list.forEach { it.checked.set(shouldCheckAll) }
+ isAllChecked.value = shouldCheckAll
+
+ pageModel.rv?.commonAdapter()?.notifyDataSetChanged()
+ }
+
+ /**
+ * 扫码运单号
+ */
+ fun scanWaybill() {
+ ScanModel.startScan(getTopActivity(), Constant.RequestCode.WAYBILL)
+ }
+
+ /**
+ * 修改库位按钮点击
+ */
+ fun modifyLocationClick() {
+ val list = pageModel.rv?.commonAdapter()?.items as? List ?: return
+ val selectedItems = list.filter { it.isSelected }
+
+ if (selectedItems.isEmpty()) {
+ showToast("请选择要修改库位的记录")
+ return
+ }
+
+ showToast("修改库位功能开发中")
+ }
+
+ /**
+ * 入库按钮点击
+ */
+ fun inboundClick() {
+ val list = pageModel.rv?.commonAdapter()?.items as? List ?: return
+ val selectedItems = list.filter { it.isSelected }
+
+ if (selectedItems.isEmpty()) {
+ showToast("请选择要入库的记录")
+ return
+ }
+
+ showToast("入库功能开发中")
+ }
+
+ /**
+ * 获取数据(重写BasePageViewModel)
+ */
+ override fun getData() {
+ // 构建搜索条件
+ val filterParams = mapOf(
+ "fdate" to flightDate.value?.ifEmpty { null },
+ "fno" to flightNo.value?.ifEmpty { null },
+ "fdep" to fdep.value?.ifEmpty { null },
+ "fdest" to fdest.value?.ifEmpty { null },
+ "wbNo" to waybillNo.value?.ifEmpty { null }
+ )
+
+ // 列表参数(含分页)
+ val listParams = (filterParams + mapOf(
+ "pageNum" to pageModel.page,
+ "pageSize" to pageModel.limit
+ )).toRequestBody()
+
+ // 统计参数(无分页)
+ val totalParams = filterParams.toRequestBody()
+
+ // 获取列表(带Loading)
+ launchLoadingCollect({ NetApply.api.getIntImpLoadingList(listParams) }) {
+ onSuccess = { result ->
+ // 处理PageInfo结构
+ val pageInfo = result.data
+ if (pageInfo != null) {
+ val list = pageInfo.list ?: emptyList()
+ val pages = pageInfo.pages ?: 1
+
+ // 处理分页数据
+ pageModel.handleDataList(list)
+ pageModel.haveMore.postValue(pages > pageModel.page)
+ } else {
+ pageModel.handleDataList(emptyList())
+ pageModel.haveMore.postValue(false)
+ }
+ }
+ }
+
+ // 获取统计信息(后台请求,不阻塞列表)
+ launchCollect({ NetApply.api.getIntImpLoadingTotal(totalParams) }) {
+ onSuccess = { result ->
+ val data = result.data
+ totalCount.value = (data?.wbNumber ?: 0).toString()
+ totalPc.value = (data?.totalPc ?: 0).toString()
+ totalWeight.value = (data?.totalWeight ?: 0.0).toString()
+ }
+ }
+ }
+}
diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpManifestViewModel.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpManifestViewModel.kt
index 85180e0..51776b2 100644
--- a/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpManifestViewModel.kt
+++ b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpManifestViewModel.kt
@@ -109,10 +109,12 @@ class IntImpManifestViewModel : BasePageViewModel() {
}
/**
- * 分拣理货(暂不实现)
+ * 分拣理货(跳转装机单页面)
*/
fun sortingTallyClick() {
- showToast("分拣理货功能开发中")
+ com.alibaba.android.arouter.launcher.ARouter.getInstance()
+ .build(com.lukouguoji.module_base.router.ARouterConstants.ACTIVITY_URL_INT_IMP_LOADING_LIST)
+ .navigation()
}
/**
diff --git a/module_gjj/src/main/res/layout/activity_int_imp_loading_list.xml b/module_gjj/src/main/res/layout/activity_int_imp_loading_list.xml
new file mode 100644
index 0000000..0aff104
--- /dev/null
+++ b/module_gjj/src/main/res/layout/activity_int_imp_loading_list.xml
@@ -0,0 +1,222 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/module_gjj/src/main/res/layout/item_int_imp_loading_list.xml b/module_gjj/src/main/res/layout/item_int_imp_loading_list.xml
new file mode 100644
index 0000000..e616f75
--- /dev/null
+++ b/module_gjj/src/main/res/layout/item_int_imp_loading_list.xml
@@ -0,0 +1,318 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+