diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntImpQueryActivity.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntImpQueryActivity.kt index 27b6a28..648579a 100644 --- a/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntImpQueryActivity.kt +++ b/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntImpQueryActivity.kt @@ -3,6 +3,9 @@ package com.lukouguoji.gjj.activity import android.content.Context import android.content.Intent 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.lukouguoji.gjj.R import com.lukouguoji.gjj.databinding.ActivityIntImpQueryBinding @@ -43,10 +46,66 @@ class IntImpQueryActivity : viewModel.initAgentList() viewModel.initSpecialCodeList() + viewModel.initFilterLists() + + // 观察筛选面板显示状态 + viewModel.filterVisible.observe(this) { visible -> + if (visible) showFilterPanel() else hideFilterPanel() + } 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 { @JvmStatic fun start(context: Context) { diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/dialog/IntImpQueryFilterDialogModel.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/dialog/IntImpQueryFilterDialogModel.kt deleted file mode 100644 index cbb169f..0000000 --- a/module_gjj/src/main/java/com/lukouguoji/gjj/dialog/IntImpQueryFilterDialogModel.kt +++ /dev/null @@ -1,84 +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 com.lukouguoji.module_base.util.DictUtils -import dev.utils.app.info.KeyValue - -/** - * 国际进港查询筛选抽屉 - */ -class IntImpQueryFilterDialogModel( - val spCode: MutableLiveData, - val spCodeList: MutableLiveData>, - val flightNo: MutableLiveData, - val origin: MutableLiveData, - val awbType: MutableLiveData, - val businessType: MutableLiveData, - val goodsCn: MutableLiveData, - private val onConfirm: () -> Unit -) : BaseDialogModel(DIALOG_TYPE_DRAWER) { - - val awbTypeList = MutableLiveData>(emptyList()) - - val businessTypeList = MutableLiveData>(emptyList()) - - 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(R.id.title_name)?.text = "筛选条件" - binding.root.findViewById(R.id.title_name)?.setTextColor(titleColor) - binding.root.findViewById(R.id.tool_tv_back)?.setTextColor(titleColor) - binding.root.findViewById(R.id.tool_iv_back)?.imageTintList = ColorStateList.valueOf(titleColor) - binding.root.findViewById(R.id.toolbar)?.setBackgroundColor(Color.WHITE) - - binding.root.findViewById(R.id.tool_back)?.setOnClickListener { - dismiss() - } - - DictUtils.getWaybillTypeList(type = "II", addAll = true, checkedValue = awbType.value) { - awbTypeList.postValue(it) - } - DictUtils.getBusinessTypeList(type = "II", addAll = true, checkedValue = businessType.value) { - businessTypeList.postValue(it) - } - } - - fun onResetClick() { - spCode.value = "" - flightNo.value = "" - origin.value = "" - awbType.value = "" - businessType.value = "" - goodsCn.value = "" - } - - fun onConfirmClick() { - dismiss() - onConfirm() - } -} diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpQueryViewModel.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpQueryViewModel.kt index 2b1be8c..0152c30 100644 --- a/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpQueryViewModel.kt +++ b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpQueryViewModel.kt @@ -5,7 +5,6 @@ import android.content.Intent import androidx.lifecycle.MutableLiveData import com.lukouguoji.gjj.R import com.lukouguoji.gjj.activity.IntImpQueryEditActivity -import com.lukouguoji.gjj.dialog.IntImpQueryFilterDialogModel import com.lukouguoji.gjj.holder.IntImpQueryViewHolder import com.lukouguoji.gjj.activity.IntImpQueryDetailsActivity import com.lukouguoji.module_base.base.BasePageViewModel @@ -59,6 +58,11 @@ class IntImpQueryViewModel : BasePageViewModel(), IOnItemClickListener { // ==================== 特码下拉 ==================== val spCodeList = MutableLiveData>(emptyList()) + // ==================== 筛选面板 ==================== + val filterVisible = MutableLiveData(false) + val awbTypeList = MutableLiveData>(emptyList()) + val businessTypeList = MutableLiveData>(emptyList()) + // ==================== 筛选条件 ==================== val spCode = MutableLiveData("") val flightNo = MutableLiveData("") @@ -80,17 +84,34 @@ class IntImpQueryViewModel : BasePageViewModel(), IOnItemClickListener { } fun filterClick() { - val filterDialog = IntImpQueryFilterDialogModel( - spCode = spCode, - spCodeList = spCodeList, - flightNo = flightNo, - origin = origin, - awbType = awbType, - businessType = businessType, - goodsCn = goodsCn, - onConfirm = { refresh() } - ) - filterDialog.show() + filterVisible.value = true + } + + fun closeFilter() { + filterVisible.value = false + } + + fun resetFilter() { + spCode.value = "" + flightNo.value = "" + 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() { diff --git a/module_gjj/src/main/res/layout/activity_int_imp_query.xml b/module_gjj/src/main/res/layout/activity_int_imp_query.xml index 7e9fb59..1a0083d 100644 --- a/module_gjj/src/main/res/layout/activity_int_imp_query.xml +++ b/module_gjj/src/main/res/layout/activity_int_imp_query.xml @@ -17,167 +17,204 @@ android:background="@color/color_f2" android:orientation="vertical"> - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + + android:orientation="vertical"> - - - - - - - - + + android:layout_marginHorizontal="10dp" + android:layout_marginTop="10dp" + android:gravity="center_vertical" + android:orientation="horizontal"> - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + diff --git a/module_gjj/src/main/res/layout/dialog_int_imp_query_filter.xml b/module_gjj/src/main/res/layout/layout_int_imp_query_filter.xml similarity index 73% rename from module_gjj/src/main/res/layout/dialog_int_imp_query_filter.xml rename to module_gjj/src/main/res/layout/layout_int_imp_query_filter.xml index 999280a..bd37a23 100644 --- a/module_gjj/src/main/res/layout/dialog_int_imp_query_filter.xml +++ b/module_gjj/src/main/res/layout/layout_int_imp_query_filter.xml @@ -5,24 +5,40 @@ + name="viewModel" + type="com.lukouguoji.gjj.viewModel.IntImpQueryViewModel" /> - - + + android:layout_height="50dp" + android:gravity="center_vertical" + android:paddingHorizontal="15dp"> - - + + + + + + value='@={viewModel.spCode}' /> + value='@={viewModel.flightNo}' /> + value='@={viewModel.origin}' /> + value='@={viewModel.awbType}' /> + value='@={viewModel.businessType}' /> + value='@={viewModel.goodsCn}' /> @@ -138,7 +154,7 @@ android:layout_weight="1" android:background="@drawable/bg_primary_radius_4" android:gravity="center" - android:onClick="@{()-> model.onConfirmClick()}" + android:onClick="@{()-> viewModel.confirmFilter()}" android:text="搜索" android:textColor="@color/white" android:textSize="16sp" />