Compare commits

..

6 Commits

Author SHA1 Message Date
df5fa2ea74 feat: 进港查询筛选弹窗改为内容区嵌入式面板
将筛选条件弹框从 XPopup DrawerPopupView 改为嵌入 Activity 内容区的滑动面板,
使筛选面板从右侧滑入时不遮挡顶部蓝色标题栏,暗色遮罩也只覆盖内容区域。
同时修复首次弹出时因布局测量时序导致的闪烁问题。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 16:54:28 +08:00
3c413833cf feat: opt 进港查询 2026-03-22 16:30:34 +08:00
072df758db feat: opt 进港查询 2026-03-22 16:04:44 +08:00
6c4e97945b feat: fix form 2026-03-20 15:30:12 +08:00
a663609eeb feat: input required check 2026-03-20 15:18:56 +08:00
74e9f5a827 feat: reset status dialog 2026-03-20 15:09:27 +08:00
16 changed files with 392 additions and 328 deletions

View File

@@ -97,7 +97,12 @@
"Read(//usr/local/**)", "Read(//usr/local/**)",
"Read(//opt/homebrew/opt/**)", "Read(//opt/homebrew/opt/**)",
"Bash(/Users/kid/.vfox/sdks/java/bin/java -version 2>&1)", "Bash(/Users/kid/.vfox/sdks/java/bin/java -version 2>&1)",
"Bash(export JAVA_HOME=/Users/kid/.vfox/sdks/java)" "Bash(export JAVA_HOME=/Users/kid/.vfox/sdks/java)",
"mcp__apifox__read_project_oas_kcl8s7",
"mcp__apifox__refresh_project_oas_kcl8s7",
"mcp__apifox__read_project_oas_ref_resources_kcl8s7",
"mcp__apifox__read_project_oas_x3v6fh",
"mcp__apifox__read_project_oas_ref_resources_x3v6fh"
], ],
"deny": [], "deny": [],
"ask": [] "ask": []

View File

@@ -1 +1 @@
/Users/kid/.vfox/cache/java/v-17+35-amzn/java-17+35-amzn /Users/kid/.version-fox/cache/java/v-17+35-amzn/java-17+35-amzn

View File

@@ -11,8 +11,5 @@ class LogQueryViewHolder(view: View) : BaseViewHolder<LogBean, ItemLogQueryBindi
override fun onBind(item: Any?, position: Int) { override fun onBind(item: Any?, position: Int) {
val bean = getItemBean(item) val bean = getItemBean(item)
binding.bean = bean binding.bean = bean
itemView.setOnClickListener {
bean?.let { LogDetailActivity.start(itemView.context, it) }
}
} }
} }

View File

@@ -970,13 +970,6 @@ class HomeFragment : Fragment() {
"ULD管理" "ULD管理"
) )
) )
list.add(
RightMenu(
Constant.AuthName.ComprehensiveColdStorage,
com.lukouguoji.module_base.R.mipmap.gnc_cangku,
"冷库登记"
)
)
} }
else -> { else -> {

View File

@@ -302,6 +302,12 @@ interface Api {
@POST("typeCode/countryType") @POST("typeCode/countryType")
suspend fun getAreaTypeList(): DictListBean suspend fun getAreaTypeList(): DictListBean
/**
* 获取国家代码
*/
@POST("typeCode/countryCode")
suspend fun getCountryCodeList(): DictListBean
/** /**
* 获取通讯方式类型 * 获取通讯方式类型
*/ */

View File

@@ -3,6 +3,9 @@ package com.lukouguoji.gjj.activity
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.Gravity
import android.view.View
import android.widget.FrameLayout
import com.alibaba.android.arouter.facade.annotation.Route import com.alibaba.android.arouter.facade.annotation.Route
import com.lukouguoji.gjj.R import com.lukouguoji.gjj.R
import com.lukouguoji.gjj.databinding.ActivityIntImpQueryBinding import com.lukouguoji.gjj.databinding.ActivityIntImpQueryBinding
@@ -43,10 +46,66 @@ class IntImpQueryActivity :
viewModel.initAgentList() viewModel.initAgentList()
viewModel.initSpecialCodeList() viewModel.initSpecialCodeList()
viewModel.initFilterLists()
// 观察筛选面板显示状态
viewModel.filterVisible.observe(this) { visible ->
if (visible) showFilterPanel() else hideFilterPanel()
}
viewModel.refresh() viewModel.refresh()
} }
private fun showFilterPanel() {
val panel = binding.filterPanel.root
val overlay = binding.filterOverlay
val panelWidth = window.decorView.width / 3
panel.layoutParams = (panel.layoutParams as FrameLayout.LayoutParams).apply {
width = panelWidth
gravity = Gravity.END
}
// 先 INVISIBLE 完成测量,避免第一次显示时闪烁
panel.visibility = View.INVISIBLE
panel.translationX = panelWidth.toFloat()
overlay.visibility = View.VISIBLE
overlay.alpha = 0f
panel.post {
panel.visibility = View.VISIBLE
panel.animate().translationX(0f).setDuration(250).start()
overlay.animate().alpha(1f).setDuration(250).start()
}
}
private fun hideFilterPanel() {
val panel = binding.filterPanel.root
val overlay = binding.filterOverlay
if (panel.visibility != View.VISIBLE) return
panel.animate()
.translationX(panel.width.toFloat())
.setDuration(250)
.withEndAction { panel.visibility = View.GONE }
.start()
overlay.animate()
.alpha(0f)
.setDuration(250)
.withEndAction { overlay.visibility = View.GONE }
.start()
}
override fun onBackPressed() {
if (viewModel.filterVisible.value == true) {
viewModel.closeFilter()
} else {
super.onBackPressed()
}
}
companion object { companion object {
@JvmStatic @JvmStatic
fun start(context: Context) { fun start(context: Context) {

View File

@@ -1,88 +0,0 @@
package com.lukouguoji.gjj.dialog
import android.content.Context
import android.content.res.ColorStateList
import android.graphics.Color
import android.view.View
import android.widget.ImageView
import android.widget.TextView
import androidx.lifecycle.MutableLiveData
import com.lukouguoji.gjj.R
import com.lukouguoji.gjj.databinding.DialogIntImpQueryFilterBinding
import com.lukouguoji.module_base.base.BaseDialogModel
import com.lxj.xpopup.XPopup
import com.lxj.xpopup.enums.PopupPosition
import dev.DevUtils
import dev.utils.app.info.KeyValue
/**
* 国际进港查询筛选抽屉
*/
class IntImpQueryFilterDialogModel(
val spCode: MutableLiveData<String>,
val spCodeList: MutableLiveData<List<KeyValue>>,
val flightNo: MutableLiveData<String>,
val dest: MutableLiveData<String>,
val awbType: MutableLiveData<String>,
val businessType: MutableLiveData<String>,
val goodsCn: MutableLiveData<String>,
private val onConfirm: () -> Unit
) : BaseDialogModel<DialogIntImpQueryFilterBinding>(DIALOG_TYPE_DRAWER) {
val awbTypeList = MutableLiveData(
listOf(
KeyValue("全部", ""),
KeyValue("主单", "1"),
KeyValue("分单", "2")
)
)
val businessTypeList = MutableLiveData(
listOf(
KeyValue("全部", ""),
KeyValue("普货", "1"),
KeyValue("特货", "2")
)
)
override fun layoutId() = R.layout.dialog_int_imp_query_filter
override fun onBuild(builder: XPopup.Builder) {
super.onBuild(builder)
builder.popupPosition(PopupPosition.Right)
val activity = DevUtils.getTopActivity()
val activityWidth = activity.window.decorView.width
builder.maxWidth(activityWidth / 3)
builder.popupWidth(activityWidth / 3)
}
override fun onDialogCreated(context: Context) {
binding.model = this
binding.lifecycleOwner = context as? androidx.lifecycle.LifecycleOwner
val titleColor = Color.parseColor("#666666")
binding.root.findViewById<TextView>(R.id.title_name)?.text = "筛选条件"
binding.root.findViewById<TextView>(R.id.title_name)?.setTextColor(titleColor)
binding.root.findViewById<TextView>(R.id.tool_tv_back)?.setTextColor(titleColor)
binding.root.findViewById<ImageView>(R.id.tool_iv_back)?.imageTintList = ColorStateList.valueOf(titleColor)
binding.root.findViewById<View>(R.id.toolbar)?.setBackgroundColor(Color.WHITE)
binding.root.findViewById<View>(R.id.tool_back)?.setOnClickListener {
dismiss()
}
}
fun onResetClick() {
spCode.value = ""
flightNo.value = ""
dest.value = ""
awbType.value = ""
businessType.value = ""
goodsCn.value = ""
}
fun onConfirmClick() {
dismiss()
onConfirm()
}
}

View File

@@ -12,6 +12,7 @@ import com.lukouguoji.module_base.bean.GjjDeclareParam
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.common.ConstantEvent
import com.lukouguoji.gjj.dialog.IntImpTallyResetDialogModel
import com.lukouguoji.module_base.http.net.NetApply import com.lukouguoji.module_base.http.net.NetApply
import com.lukouguoji.module_base.impl.FlowBus import com.lukouguoji.module_base.impl.FlowBus
import com.lukouguoji.module_base.ktx.commonAdapter import com.lukouguoji.module_base.ktx.commonAdapter
@@ -134,11 +135,11 @@ class IntArrAirManifestViewModel : BasePageViewModel() {
fun resetStatusClick() { fun resetStatusClick() {
val (maWbList, haWbList) = getSelectedItems("请选择要重置的舱单") ?: return val (maWbList, haWbList) = getSelectedItems("请选择要重置的舱单") ?: return
val dialog = IntImpTallyResetDialogModel { dialogModel ->
val param = GjjDeclareParam( val param = GjjDeclareParam(
maWbList = maWbList, maWbList = maWbList,
haWbList = haWbList, haWbList = haWbList,
restStatus = null, restStatus = dialogModel.resetStatusCode
resetReason = "状态重置"
) )
launchLoadingCollect({ NetApply.api.resetIntArrManifestStatus(param.toRequestBody()) }) { launchLoadingCollect({ NetApply.api.resetIntArrManifestStatus(param.toRequestBody()) }) {
@@ -152,6 +153,9 @@ class IntArrAirManifestViewModel : BasePageViewModel() {
} }
} }
dialog.show()
}
/** /**
* 补充信息按钮点击(只针对主单) * 补充信息按钮点击(只针对主单)
*/ */

View File

@@ -13,6 +13,7 @@ import com.lukouguoji.module_base.ktx.launchCollect
import com.lukouguoji.module_base.ktx.launchLoadingCollect 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 com.lukouguoji.module_base.ktx.toRequestBody
import com.lukouguoji.module_base.ktx.verifyNullOrEmpty
import dev.utils.app.info.KeyValue import dev.utils.app.info.KeyValue
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@@ -56,7 +57,7 @@ class IntArrSupplementInfoViewModel : BaseViewModel() {
* 加载国家代码下拉列表 * 加载国家代码下拉列表
*/ */
private fun loadCountryCodeList() { private fun loadCountryCodeList() {
launchCollect({ NetApply.api.getAreaTypeList() }) { launchCollect({ NetApply.api.getCountryCodeList() }) {
onSuccess = { result -> onSuccess = { result ->
val keyValueList = result.data?.mapNotNull { bean -> val keyValueList = result.data?.mapNotNull { bean ->
if (bean.code != null && bean.name != null) { if (bean.code != null && bean.name != null) {
@@ -96,6 +97,17 @@ class IntArrSupplementInfoViewModel : BaseViewModel() {
fun save() { fun save() {
val formBean = dataBean.value ?: return val formBean = dataBean.value ?: return
// 收货人必填校验
if (formBean.consigneeName.verifyNullOrEmpty("收货人名称不能为空")) return
if (formBean.consigneeCountryCode.verifyNullOrEmpty("收货人国家代码不能为空")) return
if (formBean.consigneeComType.verifyNullOrEmpty("收货人通讯方式不能为空")) return
if (formBean.consigneePNum.verifyNullOrEmpty("收货人联系号码不能为空")) return
// 发货人必填校验
if (formBean.consignorName.verifyNullOrEmpty("发货人名称不能为空")) return
if (formBean.consignorCountryCode.verifyNullOrEmpty("发货人国家代码不能为空")) return
if (formBean.consignorComType.verifyNullOrEmpty("发货人通讯方式不能为空")) return
if (formBean.consignorPNum.verifyNullOrEmpty("发货人联系号码不能为空")) return
if (manifestList.isEmpty()) { if (manifestList.isEmpty()) {
showToast("无可保存的数据") showToast("无可保存的数据")
return return

View File

@@ -13,6 +13,7 @@ import com.lukouguoji.module_base.ktx.launchCollect
import com.lukouguoji.module_base.ktx.launchLoadingCollect 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 com.lukouguoji.module_base.ktx.toRequestBody
import com.lukouguoji.module_base.util.DictUtils
import dev.utils.app.info.KeyValue import dev.utils.app.info.KeyValue
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@@ -102,21 +103,14 @@ class IntImpQueryEditViewModel : BaseViewModel() {
} }
/** /**
* 加载包装类型下拉列表(国际进港专用 * 加载包装类型下拉列表(收运包装类型
*/ */
private fun loadPackageTypeList() { private fun loadPackageTypeList() {
launchCollect({ NetApply.api.getGjjPackTypeList() }) { DictUtils.getShouYunPackageTypeList(checkedValue = dataBean.value?.packageType) {
onSuccess = { result -> packageTypeList.postValue(it)
val list = result.data?.mapNotNull { bean ->
if (bean.packageName.isNotEmpty()) {
KeyValue(bean.packageName, bean.packageName)
} else null
} ?: emptyList()
packageTypeList.value = list
matchPackageType() matchPackageType()
} }
} }
}
/** /**
* 加载运单类型下拉列表 * 加载运单类型下拉列表

View File

@@ -5,7 +5,6 @@ import android.content.Intent
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import com.lukouguoji.gjj.R import com.lukouguoji.gjj.R
import com.lukouguoji.gjj.activity.IntImpQueryEditActivity import com.lukouguoji.gjj.activity.IntImpQueryEditActivity
import com.lukouguoji.gjj.dialog.IntImpQueryFilterDialogModel
import com.lukouguoji.gjj.holder.IntImpQueryViewHolder import com.lukouguoji.gjj.holder.IntImpQueryViewHolder
import com.lukouguoji.gjj.activity.IntImpQueryDetailsActivity import com.lukouguoji.gjj.activity.IntImpQueryDetailsActivity
import com.lukouguoji.module_base.base.BasePageViewModel import com.lukouguoji.module_base.base.BasePageViewModel
@@ -59,10 +58,15 @@ class IntImpQueryViewModel : BasePageViewModel(), IOnItemClickListener {
// ==================== 特码下拉 ==================== // ==================== 特码下拉 ====================
val spCodeList = MutableLiveData<List<KeyValue>>(emptyList()) val spCodeList = MutableLiveData<List<KeyValue>>(emptyList())
// ==================== 筛选面板 ====================
val filterVisible = MutableLiveData(false)
val awbTypeList = MutableLiveData<List<KeyValue>>(emptyList())
val businessTypeList = MutableLiveData<List<KeyValue>>(emptyList())
// ==================== 筛选条件 ==================== // ==================== 筛选条件 ====================
val spCode = MutableLiveData("") val spCode = MutableLiveData("")
val flightNo = MutableLiveData("") val flightNo = MutableLiveData("")
val dest = MutableLiveData("") val origin = MutableLiveData("")
val awbType = MutableLiveData("") val awbType = MutableLiveData("")
val businessType = MutableLiveData("") val businessType = MutableLiveData("")
val goodsCn = MutableLiveData("") val goodsCn = MutableLiveData("")
@@ -80,17 +84,34 @@ class IntImpQueryViewModel : BasePageViewModel(), IOnItemClickListener {
} }
fun filterClick() { fun filterClick() {
val filterDialog = IntImpQueryFilterDialogModel( filterVisible.value = true
spCode = spCode, }
spCodeList = spCodeList,
flightNo = flightNo, fun closeFilter() {
dest = dest, filterVisible.value = false
awbType = awbType, }
businessType = businessType,
goodsCn = goodsCn, fun resetFilter() {
onConfirm = { refresh() } spCode.value = ""
) flightNo.value = ""
filterDialog.show() origin.value = ""
awbType.value = ""
businessType.value = ""
goodsCn.value = ""
}
fun confirmFilter() {
filterVisible.value = false
refresh()
}
fun initFilterLists() {
DictUtils.getWaybillTypeList(type = "II", addAll = true, checkedValue = awbType.value) {
awbTypeList.postValue(it)
}
DictUtils.getBusinessTypeList(type = "II", addAll = true, checkedValue = businessType.value) {
businessTypeList.postValue(it)
}
} }
override fun getData() { override fun getData() {
@@ -104,7 +125,7 @@ class IntImpQueryViewModel : BasePageViewModel(), IOnItemClickListener {
"wbNo" to waybillNo.value!!.ifEmpty { null }, "wbNo" to waybillNo.value!!.ifEmpty { null },
"spCode" to spCode.value!!.ifEmpty { null }, "spCode" to spCode.value!!.ifEmpty { null },
"fno" to flightNo.value!!.ifEmpty { null }, "fno" to flightNo.value!!.ifEmpty { null },
"dest" to dest.value!!.ifEmpty { null }, "origin" to origin.value!!.ifEmpty { null },
"awbType" to awbType.value!!.ifEmpty { null }, "awbType" to awbType.value!!.ifEmpty { null },
"businessType" to businessType.value!!.ifEmpty { null }, "businessType" to businessType.value!!.ifEmpty { null },
"goods" to goodsCn.value!!.ifEmpty { null } "goods" to goodsCn.value!!.ifEmpty { null }
@@ -118,7 +139,7 @@ class IntImpQueryViewModel : BasePageViewModel(), IOnItemClickListener {
"wbNo" to waybillNo.value!!.ifEmpty { null }, "wbNo" to waybillNo.value!!.ifEmpty { null },
"spCode" to spCode.value!!.ifEmpty { null }, "spCode" to spCode.value!!.ifEmpty { null },
"fno" to flightNo.value!!.ifEmpty { null }, "fno" to flightNo.value!!.ifEmpty { null },
"dest" to dest.value!!.ifEmpty { null }, "origin" to origin.value!!.ifEmpty { null },
"awbType" to awbType.value!!.ifEmpty { null }, "awbType" to awbType.value!!.ifEmpty { null },
"businessType" to businessType.value!!.ifEmpty { null }, "businessType" to businessType.value!!.ifEmpty { null },
"goods" to goodsCn.value!!.ifEmpty { null } "goods" to goodsCn.value!!.ifEmpty { null }

View File

@@ -59,6 +59,7 @@
android:layout_weight="1" android:layout_weight="1"
enable="@{true}" enable="@{true}"
hint='@{"请输入名称"}' hint='@{"请输入名称"}'
required="@{true}"
title='@{"名称"}' title='@{"名称"}'
titleLength="@{5}" titleLength="@{5}"
type="@{DataLayoutType.INPUT}" type="@{DataLayoutType.INPUT}"
@@ -71,6 +72,7 @@
enable="@{true}" enable="@{true}"
hint='@{"请选择国家代码"}' hint='@{"请选择国家代码"}'
list="@{viewModel.countryCodeList}" list="@{viewModel.countryCodeList}"
required="@{true}"
title='@{"国家代码"}' title='@{"国家代码"}'
titleLength="@{5}" titleLength="@{5}"
type="@{DataLayoutType.SPINNER}" type="@{DataLayoutType.SPINNER}"
@@ -83,6 +85,7 @@
enable="@{true}" enable="@{true}"
hint='@{"请选择通讯方式"}' hint='@{"请选择通讯方式"}'
list="@{viewModel.comTypeList}" list="@{viewModel.comTypeList}"
required="@{true}"
title='@{"通讯方式"}' title='@{"通讯方式"}'
titleLength="@{5}" titleLength="@{5}"
type="@{DataLayoutType.SPINNER}" type="@{DataLayoutType.SPINNER}"
@@ -103,6 +106,7 @@
android:layout_weight="1" android:layout_weight="1"
enable="@{true}" enable="@{true}"
hint='@{"请输入联系号码"}' hint='@{"请输入联系号码"}'
required="@{true}"
title='@{"联系号码"}' title='@{"联系号码"}'
titleLength="@{5}" titleLength="@{5}"
type="@{DataLayoutType.INPUT}" type="@{DataLayoutType.INPUT}"
@@ -154,6 +158,7 @@
android:layout_weight="1" android:layout_weight="1"
enable="@{true}" enable="@{true}"
hint='@{"请输入名称"}' hint='@{"请输入名称"}'
required="@{true}"
title='@{"名称"}' title='@{"名称"}'
titleLength="@{5}" titleLength="@{5}"
type="@{DataLayoutType.INPUT}" type="@{DataLayoutType.INPUT}"
@@ -166,6 +171,7 @@
enable="@{true}" enable="@{true}"
hint='@{"请选择国家代码"}' hint='@{"请选择国家代码"}'
list="@{viewModel.countryCodeList}" list="@{viewModel.countryCodeList}"
required="@{true}"
title='@{"国家代码"}' title='@{"国家代码"}'
titleLength="@{5}" titleLength="@{5}"
type="@{DataLayoutType.SPINNER}" type="@{DataLayoutType.SPINNER}"
@@ -178,6 +184,7 @@
enable="@{true}" enable="@{true}"
hint='@{"请选择通讯方式"}' hint='@{"请选择通讯方式"}'
list="@{viewModel.comTypeList}" list="@{viewModel.comTypeList}"
required="@{true}"
title='@{"通讯方式"}' title='@{"通讯方式"}'
titleLength="@{5}" titleLength="@{5}"
type="@{DataLayoutType.SPINNER}" type="@{DataLayoutType.SPINNER}"
@@ -198,6 +205,7 @@
android:layout_weight="1" android:layout_weight="1"
enable="@{true}" enable="@{true}"
hint='@{"请输入联系号码"}' hint='@{"请输入联系号码"}'
required="@{true}"
title='@{"联系号码"}' title='@{"联系号码"}'
titleLength="@{5}" titleLength="@{5}"
type="@{DataLayoutType.INPUT}" type="@{DataLayoutType.INPUT}"

View File

@@ -17,9 +17,21 @@
android:background="@color/color_f2" android:background="@color/color_f2"
android:orientation="vertical"> android:orientation="vertical">
<!-- 标题栏 --> <!-- 标题栏(始终在最上层,不被遮挡) -->
<include layout="@layout/title_tool_bar" /> <include layout="@layout/title_tool_bar" />
<!-- 内容区域FrameLayout 包裹,筛选面板和遮罩只在此区域内) -->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<!-- 原有内容 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- 搜索区域 --> <!-- 搜索区域 -->
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
@@ -180,4 +192,29 @@
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
<!-- 遮罩层(只覆盖内容区域) -->
<View
android:id="@+id/filter_overlay"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#80000000"
android:clickable="true"
android:focusable="true"
android:onClick="@{()-> viewModel.closeFilter()}"
android:visibility="gone" />
<!-- 筛选面板(从右侧滑入,只在内容区域内) -->
<include
android:id="@+id/filter_panel"
layout="@layout/layout_int_imp_query_filter"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="end"
android:visibility="gone"
app:viewModel="@{viewModel}" />
</FrameLayout>
</LinearLayout>
</layout> </layout>

View File

@@ -88,7 +88,7 @@
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text='@{String.valueOf(bean.awbPc)}' android:text='@{String.valueOf(bean.inPc)}'
tools:text="10" /> tools:text="10" />
</androidx.appcompat.widget.LinearLayoutCompat> </androidx.appcompat.widget.LinearLayoutCompat>
@@ -109,7 +109,7 @@
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text='@{String.valueOf(bean.awbWeight)}' android:text='@{String.valueOf(bean.inWeight)}'
tools:text="200" /> tools:text="200" />
</androidx.appcompat.widget.LinearLayoutCompat> </androidx.appcompat.widget.LinearLayoutCompat>

View File

@@ -78,7 +78,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1.5" android:layout_weight="1.5"
android:gravity="center" android:gravity="center"
android:text="@{bean.outDate != null &amp;&amp; bean.outDate.length() >= 16 ? bean.outDate.substring(0, 16) : (bean.outDate != null &amp;&amp; bean.outDate.length() > 0 ? bean.outDate : `--`)}" android:text="@{bean.outDate != null &amp;&amp; bean.outDate.length() >= 16 ? bean.outDate.substring(0, 16) : (bean.outDate ?? ``)}"
android:textColor="@android:color/black" android:textColor="@android:color/black"
android:textSize="14sp" /> android:textSize="14sp" />

View File

@@ -5,24 +5,40 @@
<import type="com.lukouguoji.module_base.ui.weight.data.layout.DataLayoutType" /> <import type="com.lukouguoji.module_base.ui.weight.data.layout.DataLayoutType" />
<variable <variable
name="model" name="viewModel"
type="com.lukouguoji.gjj.dialog.IntImpQueryFilterDialogModel" /> type="com.lukouguoji.gjj.viewModel.IntImpQueryViewModel" />
</data> </data>
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/white" android:background="@color/white"
android:elevation="8dp"
android:orientation="vertical"> android:orientation="vertical">
<!-- 状态栏占位 --> <!-- 筛选标题栏 -->
<View <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="25dp" android:layout_height="50dp"
android:background="@color/white" /> android:gravity="center_vertical"
android:paddingHorizontal="15dp">
<!-- 标题栏 --> <ImageView
<include layout="@layout/title_tool_bar" /> android:layout_width="15dp"
android:layout_height="15dp"
android:onClick="@{()-> viewModel.closeFilter()}"
android:src="@mipmap/left_icon"
android:tint="#666666" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="筛选条件"
android:textColor="#666666"
android:textSize="16sp" />
</LinearLayout>
<com.google.android.material.divider.MaterialDivider <com.google.android.material.divider.MaterialDivider
android:layout_width="match_parent" android:layout_width="match_parent"
@@ -42,72 +58,72 @@
<!-- 特码 --> <!-- 特码 -->
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew <com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
hint='@{"请选择特码"}' hint='@{"请选择特码"}'
list="@{model.spCodeList}" list="@{viewModel.spCodeList}"
title='@{"特码"}' title='@{"特码"}'
titleLength="@{4}" titleLength="@{4}"
type="@{DataLayoutType.SPINNER}" type="@{DataLayoutType.SPINNER}"
value='@={model.spCode}' value='@={viewModel.spCode}' />
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp" />
<!-- 航班号 --> <!-- 航班号 -->
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew <com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
hint='@{"请输入航班号"}' hint='@{"请输入航班号"}'
title='@{"航班号"}' title='@{"航班号"}'
titleLength="@{4}" titleLength="@{4}"
type="@{DataLayoutType.INPUT}" type="@{DataLayoutType.INPUT}"
value='@={model.flightNo}' value='@={viewModel.flightNo}' />
<!-- 始发港 -->
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="10dp" /> android:layout_marginBottom="10dp"
hint='@{"请输入始发港"}'
<!-- 目的港 --> title='@{"始发港"}'
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
hint='@{"请输入目的港"}'
title='@{"目的港"}'
titleLength="@{4}" titleLength="@{4}"
type="@{DataLayoutType.INPUT}" type="@{DataLayoutType.INPUT}"
value='@={model.dest}' value='@={viewModel.origin}' />
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp" />
<!-- 运单类型 --> <!-- 运单类型 -->
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew <com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
hint='@{"请选择运单类型"}' hint='@{"请选择运单类型"}'
list="@{model.awbTypeList}" list="@{viewModel.awbTypeList}"
title='@{"运单类型"}' title='@{"运单类型"}'
titleLength="@{4}" titleLength="@{4}"
type="@{DataLayoutType.SPINNER}" type="@{DataLayoutType.SPINNER}"
value='@={model.awbType}' value='@={viewModel.awbType}' />
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp" />
<!-- 业务类型 --> <!-- 业务类型 -->
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew <com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
hint='@{"请选择业务类型"}' hint='@{"请选择业务类型"}'
list="@{model.businessTypeList}" list="@{viewModel.businessTypeList}"
title='@{"业务类型"}' title='@{"业务类型"}'
titleLength="@{4}" titleLength="@{4}"
type="@{DataLayoutType.SPINNER}" type="@{DataLayoutType.SPINNER}"
value='@={model.businessType}' value='@={viewModel.businessType}' />
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp" />
<!-- 品名(中) --> <!-- 品名(中) -->
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew <com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
hint='@{"请输入品名"}' hint='@{"请输入品名"}'
title='@{"品名(中)"}' title='@{"品名(中)"}'
titleLength="@{4}" titleLength="@{4}"
type="@{DataLayoutType.INPUT}" type="@{DataLayoutType.INPUT}"
value='@={model.goodsCn}' value='@={viewModel.goodsCn}' />
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp" />
<!-- 底部按钮区域 --> <!-- 底部按钮区域 -->
<LinearLayout <LinearLayout
@@ -127,7 +143,7 @@
android:layout_weight="1" android:layout_weight="1"
android:background="@drawable/bg_primary_radius_4" android:background="@drawable/bg_primary_radius_4"
android:gravity="center" android:gravity="center"
android:onClick="@{()-> model.onResetClick()}" android:onClick="@{()-> viewModel.resetFilter()}"
android:text="重置" android:text="重置"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="16sp" /> android:textSize="16sp" />
@@ -138,7 +154,7 @@
android:layout_weight="1" android:layout_weight="1"
android:background="@drawable/bg_primary_radius_4" android:background="@drawable/bg_primary_radius_4"
android:gravity="center" android:gravity="center"
android:onClick="@{()-> model.onConfirmClick()}" android:onClick="@{()-> viewModel.confirmFilter()}"
android:text="搜索" android:text="搜索"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="16sp" /> android:textSize="16sp" />