Compare commits

...

3 Commits

Author SHA1 Message Date
a1c53dd9fe feat: opt claude config 2026-03-06 14:18:11 +08:00
a60d59de83 feat: 国际进港原始舱单添加分单子列表展开/收起功能
- 主列表项下方新增可展开的分单子列表(淡绿色背景)
- 子列表展示10列字段:选项/分单号/件数/重量/申报状态/品名/申报次数/申报费率/删除次数/删除费率
- 搜索区域新增全部展开按钮,支持一键展开/收起所有分单
- 全选/取消全选联动子列表checkbox状态
- 主项选中时同步子列表选中,子项勾选时反向联动主项

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 14:17:20 +08:00
d0c7207b5a fix: 国际进港原始舱单补充信息改为批量保存模式
回滚列表项侧滑菜单,改为多选后点底部按钮进入补充信息页;
表单信息批量复制到所有选中单据后调用 complete 接口提交数组。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 13:35:23 +08:00
12 changed files with 711 additions and 224 deletions

View File

@@ -60,7 +60,10 @@
"Bash(git commit:*)", "Bash(git commit:*)",
"WebFetch(domain:support.claude.com)", "WebFetch(domain:support.claude.com)",
"WebFetch(domain:api.apifox.com)", "WebFetch(domain:api.apifox.com)",
"Bash(curl:*)" "Bash(curl:*)",
"Bash(git:*)",
"WebFetch(domain:app.apifox.com)",
"WebFetch(domain:apifox.com)"
], ],
"deny": [], "deny": [],
"ask": [] "ask": []

View File

@@ -15,6 +15,10 @@ data class GjjAirManifest(
// 选中状态(用于列表多选) // 选中状态(用于列表多选)
val checked: ObservableBoolean = ObservableBoolean(false) val checked: ObservableBoolean = ObservableBoolean(false)
// 展开/收起状态(用于子列表显示控制)
@Transient
val showMore: ObservableBoolean = ObservableBoolean(false)
// 兼容现有API的isSelected属性 // 兼容现有API的isSelected属性
var isSelected: Boolean var isSelected: Boolean
get() = checked.get() get() = checked.get()

View File

@@ -1753,6 +1753,12 @@ interface Api {
@POST("IntImpAirManifest/deleteDeclare") @POST("IntImpAirManifest/deleteDeclare")
suspend fun deleteIntArrManifestDeclare(@Body data: RequestBody): BaseResultBean<Boolean> suspend fun deleteIntArrManifestDeclare(@Body data: RequestBody): BaseResultBean<Boolean>
/**
* 国际进港原始舱单-补充收发货人信息
*/
@POST("IntImpAirManifest/complete")
suspend fun completeIntArrManifest(@Body data: RequestBody): BaseResultBean<Any>
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// 国际进港-进港舱单 // 国际进港-进港舱单
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////

View File

@@ -32,9 +32,9 @@ class IntArrSupplementInfoActivity :
companion object { companion object {
@JvmStatic @JvmStatic
fun start(context: Context, manifest: GjjImportManifest) { fun start(context: Context, manifestList: ArrayList<GjjImportManifest>) {
val starter = Intent(context, IntArrSupplementInfoActivity::class.java) val starter = Intent(context, IntArrSupplementInfoActivity::class.java)
.putExtra(Constant.Key.DATA, manifest) .putExtra(Constant.Key.DATA, manifestList)
context.startActivity(starter) context.startActivity(starter)
} }
} }

View File

@@ -0,0 +1,36 @@
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
/**
* 国际进港原始舱单 - 分单子列表 ViewHolder
*/
class IntArrAirManifestSubViewHolder(view: View) :
BaseViewHolder<GjjImportManifest, ItemIntArrAirManifestSubBinding>(view) {
override fun onBind(item: Any?, position: Int) {
val bean = getItemBean(item) ?: return
binding.bean = bean
binding.position = position
binding.executePendingBindings()
// 单选框点击切换选择状态
binding.ivCheckbox.setOnClickListener {
val newCheckedState = !bean.checked.get()
bean.checked.set(newCheckedState)
binding.executePendingBindings()
// 反向联动主列表项(勾选子项时自动勾选父项)
if (newCheckedState) {
val recyclerView = itemView.parent as? RecyclerView ?: return@setOnClickListener
val parentBean = recyclerView.tag as? GjjAirManifest ?: return@setOnClickListener
parentBean.checked.set(true)
}
}
}
}

View File

@@ -3,8 +3,10 @@ package com.lukouguoji.gjj.holder
import android.view.View import android.view.View
import com.lukouguoji.gjj.R import com.lukouguoji.gjj.R
import com.lukouguoji.gjj.databinding.ItemIntArrAirManifestBinding import com.lukouguoji.gjj.databinding.ItemIntArrAirManifestBinding
import com.lukouguoji.module_base.adapter.setCommonAdapter
import com.lukouguoji.module_base.base.BaseViewHolder import com.lukouguoji.module_base.base.BaseViewHolder
import com.lukouguoji.module_base.bean.GjjAirManifest import com.lukouguoji.module_base.bean.GjjAirManifest
import com.lukouguoji.module_base.ktx.refresh
/** /**
* 国际进港原始舱单 ViewHolder * 国际进港原始舱单 ViewHolder
@@ -24,10 +26,30 @@ class IntArrAirManifestViewHolder(view: View) :
// 整卡点击 - 跳转详情页 // 整卡点击 - 跳转详情页
notifyItemClick(position, binding.ll) notifyItemClick(position, binding.ll)
// 图标点击 - 切换选择状态(拦截,不触发卡片点击 // 图标点击 - 切换选择状态(联动子列表
binding.ivIcon.setOnClickListener { binding.ivIcon.setOnClickListener {
bean.checked.set(!bean.checked.get()) val newCheckedState = !bean.checked.get()
bean.checked.set(newCheckedState)
// 联动子列表选中状态
bean.haWbList?.forEach { sub -> sub.checked.set(newCheckedState) }
binding.executePendingBindings() binding.executePendingBindings()
binding.rvSub.adapter?.notifyDataSetChanged()
} }
// 展开按钮点击事件
binding.ivShow.setOnClickListener {
bean.showMore.set(!bean.showMore.get())
}
// 初始化分单子列表 RecyclerView
setCommonAdapter(
binding.rvSub,
IntArrAirManifestSubViewHolder::class.java,
R.layout.item_int_arr_air_manifest_sub
)
// 设置父Bean引用用于子列表反向联动
binding.rvSub.tag = bean
binding.rvSub.refresh(bean.haWbList ?: emptyList())
} }
} }

View File

@@ -41,11 +41,17 @@ class IntArrAirManifestViewModel : BasePageViewModel() {
// ========== 全选状态 ========== // ========== 全选状态 ==========
val isAllChecked = MutableLiveData(false) val isAllChecked = MutableLiveData(false)
// ========== 全部展开状态 ==========
val isAllExpanded = MutableLiveData(false)
init { init {
// 监听全选状态,自动更新所有列表项 // 监听全选状态,自动更新所有列表项(含子列表)
isAllChecked.observeForever { checked -> isAllChecked.observeForever { checked ->
val list = pageModel.rv?.commonAdapter()?.items as? List<GjjAirManifest> ?: return@observeForever val list = pageModel.rv?.commonAdapter()?.items as? List<GjjAirManifest> ?: return@observeForever
list.forEach { it.checked.set(checked) } list.forEach {
it.checked.set(checked)
it.haWbList?.forEach { sub -> sub.checked.set(checked) }
}
pageModel.rv?.commonAdapter()?.notifyDataSetChanged() pageModel.rv?.commonAdapter()?.notifyDataSetChanged()
} }
} }
@@ -69,12 +75,30 @@ class IntArrAirManifestViewModel : BasePageViewModel() {
// 切换全选状态 // 切换全选状态
val shouldCheckAll = !isAllChecked.value!! val shouldCheckAll = !isAllChecked.value!!
list.forEach { it.checked.set(shouldCheckAll) } list.forEach {
it.checked.set(shouldCheckAll)
it.haWbList?.forEach { sub -> sub.checked.set(shouldCheckAll) }
}
isAllChecked.value = shouldCheckAll isAllChecked.value = shouldCheckAll
pageModel.rv?.commonAdapter()?.notifyDataSetChanged() pageModel.rv?.commonAdapter()?.notifyDataSetChanged()
} }
/**
* 全部展开/收起
*/
fun toggleAllExpand() {
val shouldExpand = !isAllExpanded.value!!
isAllExpanded.value = shouldExpand
val list = pageModel.rv?.commonAdapter()?.items as? List<GjjAirManifest> ?: return
list.forEach { bean ->
if (!bean.haWbList.isNullOrEmpty()) {
bean.showMore.set(shouldExpand)
}
}
pageModel.rv?.commonAdapter()?.notifyDataSetChanged()
}
/** /**
* 扫码运单号 * 扫码运单号
*/ */
@@ -140,13 +164,14 @@ class IntArrAirManifestViewModel : BasePageViewModel() {
return return
} }
// 获取第一个选中项的主单数据 // 收集所有选中项的主单数据
val manifest = selectedItems.firstOrNull()?.maWb ?: return val manifestList = ArrayList(selectedItems.mapNotNull { it.maWb })
if (manifestList.isEmpty()) return
// 跳转到补充信息页面 // 跳转到补充信息页面(传递完整列表)
com.lukouguoji.gjj.activity.IntArrSupplementInfoActivity.start( com.lukouguoji.gjj.activity.IntArrSupplementInfoActivity.start(
getTopActivity(), getTopActivity(),
manifest manifestList
) )
} }
@@ -267,6 +292,7 @@ class IntArrAirManifestViewModel : BasePageViewModel() {
// 获取列表带Loading接口直接返回PageInfo无BaseResultBean包装 // 获取列表带Loading接口直接返回PageInfo无BaseResultBean包装
launchLoadingCollect({ NetApply.api.getIntArrAirManifestList(listParams) }) { launchLoadingCollect({ NetApply.api.getIntArrAirManifestList(listParams) }) {
onSuccess = { result -> onSuccess = { result ->
isAllExpanded.value = false
pageModel.handleListBean(result.toBaseListBean()) pageModel.handleListBean(result.toBaseListBean())
} }
} }

View File

@@ -2,43 +2,133 @@ package com.lukouguoji.gjj.viewModel
import android.content.Intent import android.content.Intent
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope
import com.lukouguoji.module_base.base.BaseViewModel import com.lukouguoji.module_base.base.BaseViewModel
import com.lukouguoji.module_base.bean.GjjImportManifest import com.lukouguoji.module_base.bean.GjjImportManifest
import com.lukouguoji.module_base.common.Constant 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.launchCollect
import com.lukouguoji.module_base.ktx.launchLoadingCollect
import com.lukouguoji.module_base.ktx.showToast import com.lukouguoji.module_base.ktx.showToast
import com.lukouguoji.module_base.ktx.toRequestBody
import dev.utils.app.info.KeyValue
import kotlinx.coroutines.launch
/** /**
* 国际进港补充信息 ViewModel * 国际进港补充信息 ViewModel
*/ */
class IntArrSupplementInfoViewModel : BaseViewModel() { class IntArrSupplementInfoViewModel : BaseViewModel() {
// 数据对象 // 表单编辑用数据对象
val dataBean = MutableLiveData<GjjImportManifest>() val dataBean = MutableLiveData<GjjImportManifest>()
// 所有选中的 manifest 列表(用于批量保存)
private var manifestList: List<GjjImportManifest> = emptyList()
// 国家代码下拉列表
val countryCodeList = MutableLiveData<List<KeyValue>>(emptyList())
// 通讯方式下拉列表
val comTypeList = MutableLiveData<List<KeyValue>>(emptyList())
/** /**
* 初始化数据 * 初始化数据
*/ */
@Suppress("UNCHECKED_CAST")
fun initOnCreated(intent: Intent) { fun initOnCreated(intent: Intent) {
val manifest = intent.getSerializableExtra(Constant.Key.DATA) as? GjjImportManifest val list = intent.getSerializableExtra(Constant.Key.DATA) as? ArrayList<GjjImportManifest>
if (manifest != null) { if (!list.isNullOrEmpty()) {
dataBean.value = manifest manifestList = list
// 取首个填充表单,让用户看到已有数据
dataBean.value = list.first().copy()
} else { } else {
dataBean.value = GjjImportManifest() dataBean.value = GjjImportManifest()
} }
// 加载下拉列表
loadCountryCodeList()
loadComTypeList()
}
/**
* 加载国家代码下拉列表
*/
private fun loadCountryCodeList() {
launchCollect({ NetApply.api.getAreaTypeList() }) {
onSuccess = { result ->
val keyValueList = result.data?.mapNotNull { bean ->
if (bean.code != null && bean.name != null) {
KeyValue(bean.name, bean.code)
} else null
} ?: emptyList()
countryCodeList.value = keyValueList
}
}
} }
/** /**
* 取消按钮点击 - 暂不实现 * 加载通讯方式下拉列表(本地固定值)
*/
private fun loadComTypeList() {
comTypeList.value = listOf(
KeyValue("电话TE", "TE"),
KeyValue("传真FX", "FX")
)
}
/**
* 取消按钮点击
*/ */
fun cancel() { fun cancel() {
showToast("取消功能暂未实现")
getTopActivity().finish() getTopActivity().finish()
} }
/** /**
* 保存按钮点击 - 暂不实现 * 保存按钮点击 - 将表单信息复制到所有选中项,批量提交
*/ */
fun save() { fun save() {
showToast("保存功能暂未实现") val formBean = dataBean.value ?: return
if (manifestList.isEmpty()) {
showToast("无可保存的数据")
return
}
// 将表单中的收发货人+危险品字段复制到每个 manifest
val updatedList = manifestList.map { manifest ->
manifest.copy(
// 收货人信息
consigneeName = formBean.consigneeName,
consigneeCountryCode = formBean.consigneeCountryCode,
consigneeComType = formBean.consigneeComType,
consigneePNum = formBean.consigneePNum,
consigneeAddress = formBean.consigneeAddress,
// 发货人信息
consignorName = formBean.consignorName,
consignorCountryCode = formBean.consignorCountryCode,
consignorComType = formBean.consignorComType,
consignorPNum = formBean.consignorPNum,
consignorAddress = formBean.consignorAddress,
// 危险品信息
dgrContactMame = formBean.dgrContactMame,
dgrContactNumber = formBean.dgrContactNumber,
unNumber = formBean.unNumber
)
}
// 拼装成数组提交
launchLoadingCollect({
NetApply.api.completeIntArrManifest(updatedList.toRequestBody())
}) {
onSuccess = {
showToast("保存成功")
viewModelScope.launch {
FlowBus.with<String>(ConstantEvent.EVENT_REFRESH).emit("refresh")
}
getTopActivity().finish()
}
}
} }
} }

View File

@@ -87,6 +87,14 @@
android:padding="2dp" android:padding="2dp"
android:src="@drawable/img_search" /> android:src="@drawable/img_search" />
<ImageView
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_marginStart="8dp"
android:onClick="@{()-> viewModel.toggleAllExpand()}"
android:padding="4dp"
android:src="@drawable/ic_new_expand" />
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>

View File

@@ -70,9 +70,10 @@
android:layout_weight="1" android:layout_weight="1"
enable="@{true}" enable="@{true}"
hint='@{"请选择国家代码"}' hint='@{"请选择国家代码"}'
list="@{viewModel.countryCodeList}"
title='@{"国家代码"}' title='@{"国家代码"}'
titleLength="@{5}" titleLength="@{5}"
type="@{DataLayoutType.INPUT}" type="@{DataLayoutType.SPINNER}"
value='@={viewModel.dataBean.consigneeCountryCode}' /> value='@={viewModel.dataBean.consigneeCountryCode}' />
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew <com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
@@ -81,9 +82,10 @@
android:layout_weight="1" android:layout_weight="1"
enable="@{true}" enable="@{true}"
hint='@{"请选择通讯方式"}' hint='@{"请选择通讯方式"}'
list="@{viewModel.comTypeList}"
title='@{"通讯方式"}' title='@{"通讯方式"}'
titleLength="@{5}" titleLength="@{5}"
type="@{DataLayoutType.INPUT}" type="@{DataLayoutType.SPINNER}"
value='@={viewModel.dataBean.consigneeComType}' /> value='@={viewModel.dataBean.consigneeComType}' />
</LinearLayout> </LinearLayout>
@@ -163,9 +165,10 @@
android:layout_weight="1" android:layout_weight="1"
enable="@{true}" enable="@{true}"
hint='@{"请选择国家代码"}' hint='@{"请选择国家代码"}'
list="@{viewModel.countryCodeList}"
title='@{"国家代码"}' title='@{"国家代码"}'
titleLength="@{5}" titleLength="@{5}"
type="@{DataLayoutType.INPUT}" type="@{DataLayoutType.SPINNER}"
value='@={viewModel.dataBean.consignorCountryCode}' /> value='@={viewModel.dataBean.consignorCountryCode}' />
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew <com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
@@ -174,9 +177,10 @@
android:layout_weight="1" android:layout_weight="1"
enable="@{true}" enable="@{true}"
hint='@{"请选择通讯方式"}' hint='@{"请选择通讯方式"}'
list="@{viewModel.comTypeList}"
title='@{"通讯方式"}' title='@{"通讯方式"}'
titleLength="@{5}" titleLength="@{5}"
type="@{DataLayoutType.INPUT}" type="@{DataLayoutType.SPINNER}"
value='@={viewModel.dataBean.consignorComType}' /> value='@={viewModel.dataBean.consignorComType}' />
</LinearLayout> </LinearLayout>

View File

@@ -19,12 +19,19 @@
type="Integer" /> type="Integer" />
</data> </data>
<androidx.appcompat.widget.LinearLayoutCompat <!-- 主列表项容器 -->
android:id="@+id/ll" <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginHorizontal="15dp" android:layout_marginHorizontal="15dp"
android:layout_marginVertical="5dp" android:layout_marginVertical="5dp"
android:orientation="vertical">
<!-- 白色卡片主要内容区域 -->
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/ll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_item" android:background="@drawable/bg_item"
android:orientation="horizontal" android:orientation="horizontal"
android:padding="10dp"> android:padding="10dp">
@@ -275,4 +282,151 @@
</androidx.appcompat.widget.LinearLayoutCompat> </androidx.appcompat.widget.LinearLayoutCompat>
<!-- 展开/折叠按钮(仅当有分单时显示) -->
<ImageView
android:id="@+id/iv_show"
android:layout_width="match_parent"
android:layout_height="20dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:padding="5dp"
android:src="@mipmap/img_down"
visible="@{bean.haWbList != null &amp;&amp; !bean.haWbList.empty}" />
<!-- 分单子列表容器(淡绿色背景) -->
<LinearLayout
visible="@{bean.showMore}"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:background="#e3f6e0"
android:orientation="vertical"
android:visibility="gone">
<!-- 表头 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginVertical="10dp"
android:orientation="horizontal"
android:paddingHorizontal="10dp">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:gravity="center"
android:text="选项"
android:textColor="@color/text_normal"
android:textSize="14sp"
android:textStyle="bold" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:gravity="center"
android:text="分单号"
android:textColor="@color/text_normal"
android:textSize="14sp"
android:textStyle="bold" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.8"
android:gravity="center"
android:text="件数"
android:textColor="@color/text_normal"
android:textSize="14sp"
android:textStyle="bold" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.8"
android:gravity="center"
android:text="重量"
android:textColor="@color/text_normal"
android:textSize="14sp"
android:textStyle="bold" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.8"
android:gravity="center"
android:text="申报状态"
android:textColor="@color/text_normal"
android:textSize="14sp"
android:textStyle="bold" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:gravity="center"
android:text="品名(中)"
android:textColor="@color/text_normal"
android:textSize="14sp"
android:textStyle="bold" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.8"
android:gravity="center"
android:text="申报次数"
android:textColor="@color/text_normal"
android:textSize="14sp"
android:textStyle="bold" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.8"
android:gravity="center"
android:text="申报费率"
android:textColor="@color/text_normal"
android:textSize="14sp"
android:textStyle="bold" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.8"
android:gravity="center"
android:text="删除次数"
android:textColor="@color/text_normal"
android:textSize="14sp"
android:textStyle="bold" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.8"
android:gravity="center"
android:text="删除费率"
android:textColor="@color/text_normal"
android:textSize="14sp"
android:textStyle="bold" />
</LinearLayout>
<com.google.android.material.divider.MaterialDivider
android:layout_width="match_parent"
android:layout_height="1px"
android:background="@color/c999999" />
<!-- 子列表 RecyclerView -->
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_sub"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
</LinearLayout>
</LinearLayout>
</layout> </layout>

View File

@@ -0,0 +1,134 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:loadImage="http://schemas.android.com/tools">
<data>
<variable
name="bean"
type="com.lukouguoji.module_base.bean.GjjImportManifest" />
<variable
name="position"
type="Integer" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingHorizontal="10dp"
android:paddingVertical="8dp">
<!-- 选项(单选框) -->
<ImageView
android:id="@+id/iv_checkbox"
android:layout_width="0dp"
android:layout_height="20dp"
android:layout_gravity="center_vertical"
android:layout_weight="0.5"
loadImage="@{bean.checked.get() ? @drawable/radiobtn_checked_gray : @drawable/radiobtn_unchecked_gray}"
android:src="@drawable/radiobtn_unchecked_gray" />
<!-- 分单号 -->
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1.0"
android:gravity="center"
android:text="@{bean.hno ?? ``}"
android:textColor="@color/text_normal"
android:textSize="14sp" />
<!-- 件数 -->
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="0.8"
android:gravity="center"
android:text="@{String.valueOf((int)bean.pc)}"
android:textColor="@color/text_normal"
android:textSize="14sp" />
<!-- 重量 -->
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="0.8"
android:gravity="center"
android:text="@{String.valueOf((int)bean.weight)}"
android:textColor="@color/text_normal"
android:textSize="14sp" />
<!-- 申报状态 -->
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="0.8"
android:gravity="center"
android:text="@{bean.mftStatus ?? ``}"
android:textColor="@color/colorPrimary"
android:textSize="14sp" />
<!-- 品名(中) -->
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1.0"
android:gravity="center"
android:text="@{bean.goodsCn ?? ``}"
android:textColor="@color/text_normal"
android:textSize="14sp" />
<!-- 申报次数 -->
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="0.8"
android:gravity="center"
android:text="@{String.valueOf((int)bean.mftSCount)}"
android:textColor="@color/text_normal"
android:textSize="14sp" />
<!-- 申报费率 -->
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="0.8"
android:gravity="center"
android:text="@{String.valueOf(bean.mftSRate)}"
android:textColor="@color/text_normal"
android:textSize="14sp" />
<!-- 删除次数 -->
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="0.8"
android:gravity="center"
android:text="@{String.valueOf((int)bean.mftDCount)}"
android:textColor="@color/text_normal"
android:textSize="14sp" />
<!-- 删除费率 -->
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="0.8"
android:gravity="center"
android:text="@{String.valueOf(bean.mftDRate)}"
android:textColor="@color/text_normal"
android:textSize="14sp" />
</LinearLayout>
</layout>