Compare commits
2 Commits
fada4b3231
...
af49cf4fb6
| Author | SHA1 | Date | |
|---|---|---|---|
| af49cf4fb6 | |||
| 76f55597db |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -203,3 +203,4 @@ fabric.properties
|
||||
.worktrees/
|
||||
.security-key
|
||||
logs/security/
|
||||
.playwright-mcp/
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 106 KiB |
@@ -1,10 +1,8 @@
|
||||
package com.lukouguoji.gjj.holder
|
||||
|
||||
import android.view.View
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.lukouguoji.gjj.databinding.ItemIntArrAirManifestSubBinding
|
||||
import com.lukouguoji.module_base.base.BaseViewHolder
|
||||
import com.lukouguoji.module_base.bean.GjjAirManifest
|
||||
import com.lukouguoji.module_base.bean.GjjImportManifest
|
||||
|
||||
/**
|
||||
@@ -19,18 +17,10 @@ class IntArrAirManifestSubViewHolder(view: View) :
|
||||
binding.position = position
|
||||
binding.executePendingBindings()
|
||||
|
||||
// 单选框点击切换选择状态
|
||||
// 单选框点击切换选择状态(独立选择,不联动主列表)
|
||||
binding.ivCheckbox.setOnClickListener {
|
||||
val newCheckedState = !bean.checked.get()
|
||||
bean.checked.set(newCheckedState)
|
||||
bean.checked.set(!bean.checked.get())
|
||||
binding.executePendingBindings()
|
||||
|
||||
// 反向联动主列表项(勾选子项时自动勾选父项)
|
||||
if (newCheckedState) {
|
||||
val recyclerView = itemView.parent as? RecyclerView ?: return@setOnClickListener
|
||||
val parentBean = recyclerView.tag as? GjjAirManifest ?: return@setOnClickListener
|
||||
parentBean.checked.set(true)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,14 +26,10 @@ class IntArrAirManifestViewHolder(view: View) :
|
||||
// 整卡点击 - 跳转详情页
|
||||
notifyItemClick(position, binding.ll)
|
||||
|
||||
// 图标点击 - 切换选择状态(联动子列表)
|
||||
// 图标点击 - 切换选择状态(独立选择,不联动子列表)
|
||||
binding.ivIcon.setOnClickListener {
|
||||
val newCheckedState = !bean.checked.get()
|
||||
bean.checked.set(newCheckedState)
|
||||
// 联动子列表选中状态
|
||||
bean.haWbList?.forEach { sub -> sub.checked.set(newCheckedState) }
|
||||
bean.checked.set(!bean.checked.get())
|
||||
binding.executePendingBindings()
|
||||
binding.rvSub.adapter?.notifyDataSetChanged()
|
||||
}
|
||||
|
||||
// 展开按钮点击事件
|
||||
@@ -48,7 +44,6 @@ class IntArrAirManifestViewHolder(view: View) :
|
||||
R.layout.item_int_arr_air_manifest_sub
|
||||
)
|
||||
|
||||
// 设置父Bean引用(用于子列表反向联动)
|
||||
binding.rvSub.tag = bean
|
||||
binding.rvSub.refresh(bean.haWbList ?: emptyList())
|
||||
}
|
||||
|
||||
@@ -113,31 +113,31 @@ class IntArrAirManifestViewModel : BasePageViewModel() {
|
||||
ScanModel.startScan(getTopActivity(), Constant.RequestCode.HNO)
|
||||
}
|
||||
|
||||
/**
|
||||
* 收集选中的主单和分单(独立选择,互不影响)
|
||||
* @return Pair<主单列表, 分单列表>,如果无任何选中返回 null
|
||||
*/
|
||||
private fun getSelectedItems(emptyMsg: String): Pair<List<GjjImportManifest>, List<GjjImportManifest>>? {
|
||||
val list = pageModel.rv?.commonAdapter()?.items as? List<GjjAirManifest> ?: return null
|
||||
val maWbList = list.filter { it.isSelected }.mapNotNull { it.maWb }
|
||||
val haWbList = list.flatMap { it.haWbList ?: emptyList() }.filter { it.isSelected }
|
||||
if (maWbList.isEmpty() && haWbList.isEmpty()) {
|
||||
showToast(emptyMsg)
|
||||
return null
|
||||
}
|
||||
return Pair(maWbList, haWbList)
|
||||
}
|
||||
|
||||
/**
|
||||
* 状态重置按钮点击
|
||||
*/
|
||||
fun resetStatusClick() {
|
||||
val list = pageModel.rv?.commonAdapter()?.items as? List<GjjAirManifest> ?: return
|
||||
val selectedItems = list.filter { it.isSelected }
|
||||
|
||||
if (selectedItems.isEmpty()) {
|
||||
showToast("请选择要重置的舱单")
|
||||
return
|
||||
}
|
||||
|
||||
// 提取主单和分单
|
||||
val maWbList = mutableListOf<GjjImportManifest>()
|
||||
val haWbList = mutableListOf<GjjImportManifest>()
|
||||
|
||||
selectedItems.forEach { airManifest ->
|
||||
airManifest.maWb?.let { maWbList.add(it) }
|
||||
airManifest.haWbList?.let { haWbList.addAll(it) }
|
||||
}
|
||||
val (maWbList, haWbList) = getSelectedItems("请选择要重置的舱单") ?: return
|
||||
|
||||
val param = GjjDeclareParam(
|
||||
maWbList = maWbList,
|
||||
haWbList = haWbList,
|
||||
restStatus = null, // 未申报状态
|
||||
restStatus = null,
|
||||
resetReason = "状态重置"
|
||||
)
|
||||
|
||||
@@ -153,25 +153,20 @@ class IntArrAirManifestViewModel : BasePageViewModel() {
|
||||
}
|
||||
|
||||
/**
|
||||
* 补充信息按钮点击
|
||||
* 补充信息按钮点击(只针对主单)
|
||||
*/
|
||||
fun supplementInfoClick() {
|
||||
val list = pageModel.rv?.commonAdapter()?.items as? List<GjjAirManifest> ?: return
|
||||
val selectedItems = list.filter { it.isSelected }
|
||||
val selectedMainItems = list.filter { it.isSelected }.mapNotNull { it.maWb }
|
||||
|
||||
if (selectedItems.isEmpty()) {
|
||||
showToast("请选择要补充信息的舱单")
|
||||
if (selectedMainItems.isEmpty()) {
|
||||
showToast("请选择要补充信息的主单")
|
||||
return
|
||||
}
|
||||
|
||||
// 收集所有选中项的主单数据
|
||||
val manifestList = ArrayList(selectedItems.mapNotNull { it.maWb })
|
||||
if (manifestList.isEmpty()) return
|
||||
|
||||
// 跳转到补充信息页面(传递完整列表)
|
||||
com.lukouguoji.gjj.activity.IntArrSupplementInfoActivity.start(
|
||||
getTopActivity(),
|
||||
manifestList
|
||||
ArrayList(selectedMainItems)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -179,31 +174,14 @@ class IntArrAirManifestViewModel : BasePageViewModel() {
|
||||
* 删除申报按钮点击
|
||||
*/
|
||||
fun deleteDeclarationClick() {
|
||||
val list = pageModel.rv?.commonAdapter()?.items as? List<GjjAirManifest> ?: return
|
||||
val selectedItems = list.filter { it.isSelected }
|
||||
|
||||
if (selectedItems.isEmpty()) {
|
||||
showToast("请选择要删除申报的舱单")
|
||||
return
|
||||
}
|
||||
val (maWbList, haWbList) = getSelectedItems("请选择要删除申报的舱单") ?: return
|
||||
|
||||
// 从接口获取删除原因列表
|
||||
launchLoadingCollect({ NetApply.api.getDelReasonList() }) {
|
||||
onSuccess = { result ->
|
||||
val deleteReasonList = result.data?.map { it.toKeyValue() } ?: emptyList()
|
||||
|
||||
// 创建并显示弹框
|
||||
val dialog = com.lukouguoji.gjj.dialog.IntArrManifestDeleteDialogModel(deleteReasonList) { dialogModel ->
|
||||
// 弹框确认后的回调
|
||||
// 提取主单和分单
|
||||
val maWbList = mutableListOf<GjjImportManifest>()
|
||||
val haWbList = mutableListOf<GjjImportManifest>()
|
||||
|
||||
selectedItems.forEach { airManifest ->
|
||||
airManifest.maWb?.let { maWbList.add(it) }
|
||||
airManifest.haWbList?.let { haWbList.addAll(it) }
|
||||
}
|
||||
|
||||
val param = GjjDeclareParam(
|
||||
dcode = dialogModel.deleteReason.value ?: "",
|
||||
dcontactsName = dialogModel.contactName.value ?: "",
|
||||
@@ -212,10 +190,7 @@ class IntArrAirManifestViewModel : BasePageViewModel() {
|
||||
haWbList = haWbList
|
||||
)
|
||||
|
||||
val requestData = param.toRequestBody()
|
||||
|
||||
// 调用删除接口
|
||||
launchLoadingCollect({ NetApply.api.deleteIntArrManifestDeclare(requestData) }) {
|
||||
launchLoadingCollect({ NetApply.api.deleteIntArrManifestDeclare(param.toRequestBody()) }) {
|
||||
onSuccess = {
|
||||
showToast("删除申报成功")
|
||||
viewModelScope.launch {
|
||||
@@ -235,27 +210,9 @@ class IntArrAirManifestViewModel : BasePageViewModel() {
|
||||
* 舱单申报按钮点击
|
||||
*/
|
||||
fun declareClick() {
|
||||
val list = pageModel.rv?.commonAdapter()?.items as? List<GjjAirManifest> ?: return
|
||||
val selectedItems = list.filter { it.isSelected }
|
||||
val (maWbList, haWbList) = getSelectedItems("请选择要申报的舱单") ?: return
|
||||
|
||||
if (selectedItems.isEmpty()) {
|
||||
showToast("请选择要申报的舱单")
|
||||
return
|
||||
}
|
||||
|
||||
// 提取主单和分单
|
||||
val maWbList = mutableListOf<GjjImportManifest>()
|
||||
val haWbList = mutableListOf<GjjImportManifest>()
|
||||
|
||||
selectedItems.forEach { airManifest ->
|
||||
airManifest.maWb?.let { maWbList.add(it) }
|
||||
airManifest.haWbList?.let { haWbList.addAll(it) }
|
||||
}
|
||||
|
||||
val param = GjjDeclareParam(
|
||||
maWbList = maWbList,
|
||||
haWbList = haWbList
|
||||
)
|
||||
val param = GjjDeclareParam(maWbList = maWbList, haWbList = haWbList)
|
||||
|
||||
launchLoadingCollect({ NetApply.api.declareIntArrManifest(param.toRequestBody()) }) {
|
||||
onSuccess = {
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
title='@{"品名(中)"}'
|
||||
titleLength="@{5}"
|
||||
type="@{DataLayoutType.INPUT}"
|
||||
value='@{viewModel.dataBean.goodsCn}'
|
||||
value='@{viewModel.dataBean.goodsCn != null && !viewModel.dataBean.goodsCn.isEmpty() ? viewModel.dataBean.goodsCn : viewModel.dataBean.goods}'
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1" />
|
||||
|
||||
Reference in New Issue
Block a user