diff --git a/CHANGELOG.md b/CHANGELOG.md index a358d34..9ea617b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,6 +33,14 @@ 表头)、`bg_phone_photo_add`(虚线加号槽位)、色值 `phone_amber` ### 修复 (Fixed) +- 【11 模块全量设计稿走查】修正 4 类差异(2026-07-31,3 个并行审计 + 逐态渲染比对): + ① 运单追踪手机竖排时间线补齐已发生节点的状态 pill(绿底标签展示该环节日志 content, + 如「放行状态:01」,超长省略,设计稿 06/08 运单追踪均有此元素); + ② 11 个页面手机端标题对齐设计稿短标题(出库交接/出港待计重/计重记录/计重明细/开始计重/ + 出港运抵/出港移库/出港查询/出港货物/进港查询/进港货物),平板保持原长标题零变化; + ③ ULD 编辑表单「来源」字段移至「所在港」之后(设计稿顺序); + ④ 出港计重列表卡片(日期/航程/代理/特码)与计重记录卡片(代理)补齐字段小图标 + (复用 ic_phone_airplane/location/person/tag,与其余模块卡片风格统一) - 出港查询/进港查询卡片「代理人」空值兜底失效:转换器把 JSON null 归一成空串,DataBinding `??` 只判 null 不判空串导致 agentCode 回退永不生效;改用 Bean 计算属性 `agentDisplay` (isNullOrEmpty 双兜底),已同步修正 06 出港查询(`item_gjc_query.xml`) diff --git a/app/src/main/java/com/lukouguoji/aerologic/page/log/detail/LogDetailActivity.kt b/app/src/main/java/com/lukouguoji/aerologic/page/log/detail/LogDetailActivity.kt index 9214019..0a80fc9 100644 --- a/app/src/main/java/com/lukouguoji/aerologic/page/log/detail/LogDetailActivity.kt +++ b/app/src/main/java/com/lukouguoji/aerologic/page/log/detail/LogDetailActivity.kt @@ -91,7 +91,9 @@ class LogDetailActivity : BaseBindingActivity - - - + + + () { - - override fun layoutId() = R.layout.activity_gjc_query_details - override fun viewModelClass() = GjcQueryDetailsViewModel::class.java - - override fun initOnCreate(savedInstanceState: Bundle?) { - setBackArrow("国际出港查询详情") - binding.viewModel = viewModel - - // 初始化ViewModel(传入maWbId) - viewModel.initOnCreated(intent) - - // 配置ViewPager2 - binding.vp.adapter = CustomVP2Adapter( - viewModel.fragmentList, - supportFragmentManager, - lifecycle - ) - binding.vp.isUserInputEnabled = false // 禁用滑动 - binding.vp.offscreenPageLimit = 3 // 预加载3个Fragment - - // 监听Tab索引变化,切换Fragment - viewModel.currentTab.observe(this) { - binding.vp.setCurrentItem(it, false) // false:无动画 - } - - // 标题栏右侧添加日志查询图标 - val toolbar = findViewById(com.lukouguoji.module_base.R.id.toolbar) - val logIcon = ImageView(this).apply { - setImageResource(com.lukouguoji.module_base.R.drawable.img_log) - layoutParams = Toolbar.LayoutParams( - LinearLayout.LayoutParams.WRAP_CONTENT, - LinearLayout.LayoutParams.WRAP_CONTENT - ).apply { - gravity = Gravity.END or Gravity.CENTER_VERTICAL - marginEnd = 15 - width = 30.dp - height = 30.dp - } - setOnClickListener { - val wbNo = viewModel.maWbData.value?.get("wbNo") as? String ?: "" - ARouter.getInstance() - .build(ARouterConstants.ACTIVITY_URL_LOG_DETAIL) - .withString(Constant.Key.KEY, wbNo) - .withString(Constant.Key.AWB_TYPE, "IO") - .navigation() - } - } - toolbar.addView(logIcon) - - // 加载详情数据 - viewModel.loadDetails() - } - - private val Int.dp: Int - get() = (this * resources!!.displayMetrics.density).toInt() - - companion object { - @JvmStatic - fun start(context: Context, maWbId: Long?) { - val starter = Intent(context, GjcQueryDetailsActivity::class.java) - .putExtra(Constant.Key.ID, maWbId?.toString() ?: "") - context.startActivity(starter) - } - } -} +package com.lukouguoji.gjc.activity + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import android.view.Gravity +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.appcompat.widget.Toolbar +import com.alibaba.android.arouter.facade.annotation.Route +import com.alibaba.android.arouter.launcher.ARouter +import com.lukouguoji.gjc.R +import com.lukouguoji.gjc.databinding.ActivityGjcQueryDetailsBinding +import com.lukouguoji.gjc.viewModel.GjcQueryDetailsViewModel +import com.lukouguoji.module_base.base.BaseBindingActivity +import com.lukouguoji.module_base.base.CustomVP2Adapter +import com.lukouguoji.module_base.common.Constant +import com.lukouguoji.module_base.router.ARouterConstants +import com.lukouguoji.module_base.util.DeviceUtil + +/** + * 国际出港查询详情页面 + */ +@Route(path = ARouterConstants.ACTIVITY_URL_GJC_QUERY_DETAILS) +class GjcQueryDetailsActivity : + BaseBindingActivity() { + + override fun layoutId() = R.layout.activity_gjc_query_details + override fun viewModelClass() = GjcQueryDetailsViewModel::class.java + + override fun initOnCreate(savedInstanceState: Bundle?) { + setBackArrow(if (DeviceUtil.isPhone()) "出港货物" else "国际出港查询详情") + binding.viewModel = viewModel + + // 初始化ViewModel(传入maWbId) + viewModel.initOnCreated(intent) + + // 配置ViewPager2 + binding.vp.adapter = CustomVP2Adapter( + viewModel.fragmentList, + supportFragmentManager, + lifecycle + ) + binding.vp.isUserInputEnabled = false // 禁用滑动 + binding.vp.offscreenPageLimit = 3 // 预加载3个Fragment + + // 监听Tab索引变化,切换Fragment + viewModel.currentTab.observe(this) { + binding.vp.setCurrentItem(it, false) // false:无动画 + } + + // 标题栏右侧添加日志查询图标 + val toolbar = findViewById(com.lukouguoji.module_base.R.id.toolbar) + val logIcon = ImageView(this).apply { + setImageResource(com.lukouguoji.module_base.R.drawable.img_log) + layoutParams = Toolbar.LayoutParams( + LinearLayout.LayoutParams.WRAP_CONTENT, + LinearLayout.LayoutParams.WRAP_CONTENT + ).apply { + gravity = Gravity.END or Gravity.CENTER_VERTICAL + marginEnd = 15 + width = 30.dp + height = 30.dp + } + setOnClickListener { + val wbNo = viewModel.maWbData.value?.get("wbNo") as? String ?: "" + ARouter.getInstance() + .build(ARouterConstants.ACTIVITY_URL_LOG_DETAIL) + .withString(Constant.Key.KEY, wbNo) + .withString(Constant.Key.AWB_TYPE, "IO") + .navigation() + } + } + toolbar.addView(logIcon) + + // 加载详情数据 + viewModel.loadDetails() + } + + private val Int.dp: Int + get() = (this * resources!!.displayMetrics.density).toInt() + + companion object { + @JvmStatic + fun start(context: Context, maWbId: Long?) { + val starter = Intent(context, GjcQueryDetailsActivity::class.java) + .putExtra(Constant.Key.ID, maWbId?.toString() ?: "") + context.startActivity(starter) + } + } +} diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingListActivity.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingListActivity.kt index f657b23..b10a91e 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingListActivity.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingListActivity.kt @@ -1,105 +1,105 @@ -package com.lukouguoji.gjc.activity - -import android.content.Context -import android.content.Intent -import android.os.Bundle -import androidx.databinding.ObservableBoolean -import com.alibaba.android.arouter.facade.annotation.Route -import com.lukouguoji.gjc.R -import com.lukouguoji.gjc.databinding.ActivityGjcWeighingListBinding -import com.lukouguoji.gjc.viewModel.GjcWeighingViewModel -import com.lukouguoji.module_base.base.BaseBindingActivity -import com.lukouguoji.module_base.bean.GjcWeighingBean -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.getLifecycleOwner -import com.lukouguoji.module_base.router.ARouterConstants -import com.lukouguoji.module_base.util.DeviceUtil - -/** - * 国际出港计重列表页 - * - * 布局 id 不区分设备,平板/手机由资源限定符自动选择: - * layout-sw600dp/activity_gjc_weighing_list.xml(平板) - * layout/activity_gjc_weighing_list.xml(手机) - */ -@Route(path = ARouterConstants.ACTIVITY_URL_GJC_WEIGHING_LIST) -class GjcWeighingListActivity : - BaseBindingActivity() { - - override fun layoutId() = R.layout.activity_gjc_weighing_list - - override fun viewModelClass() = GjcWeighingViewModel::class.java - - /** 手机版筛选弹层显隐(仅 UI 状态,不涉及业务逻辑) */ - val filterPanelVisible = ObservableBoolean(false) - - override fun initOnCreate(savedInstanceState: Bundle?) { - setBackArrow("国际出港待计重") - - binding.viewModel = viewModel - binding.activity = this - - // 手机版专属数据:放开默认日期、加载筛选弹层字典、启用三格统计 - // 平板端不调用,查询链路与请求次数与改造前完全一致 - if (DeviceUtil.isPhone()) { - viewModel.initPhoneExtras() - } - - // 初始化代理人列表(从API获取) - viewModel.initAgentList() - - // 初始化特码列表(从API获取) - viewModel.initSpecialCodeList() - - // 绑定分页逻辑 - viewModel.pageModel - .bindSmartRefreshLayout(binding.srl, binding.rv, viewModel, getLifecycleOwner()) - - // 监听刷新事件 - FlowBus.with(ConstantEvent.EVENT_CHECK_CHANGED).observe(this) { viewModel.onItemCheckChanged() } - - FlowBus.with(ConstantEvent.EVENT_REFRESH) - .observe(this) { - viewModel.refresh() - } - - // 初始加载 - viewModel.refresh() - } - - // ==================== 手机版专用交互(纯 UI,复用既有 ViewModel 字段) ==================== - - /** 手机版筛选弹层显隐切换 */ - fun toggleFilterPanel() { - filterPanelVisible.set(!filterPanelVisible.get()) - } - - /** 手机版筛选:重置(只清弹层内条件,不影响顶部搜索框) */ - fun resetFilter() { - viewModel.channelFilter.value = "" - viewModel.carrierFilter.value = "" - viewModel.awbTypeFilter.value = "" - viewModel.agentCode.value = "" - } - - /** 手机版筛选:确认 */ - fun confirmFilter() { - filterPanelVisible.set(false) - viewModel.searchClick() - } - - /** 手机版卡片内「提前运抵」(单票,由 ViewHolder 调用) */ - fun preArriveClick(bean: GjcWeighingBean) { - viewModel.arrivedAheadSingle(bean) - } - - companion object { - @JvmStatic - fun start(context: Context) { - val starter = Intent(context, GjcWeighingListActivity::class.java) - context.startActivity(starter) - } - } -} +package com.lukouguoji.gjc.activity + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import androidx.databinding.ObservableBoolean +import com.alibaba.android.arouter.facade.annotation.Route +import com.lukouguoji.gjc.R +import com.lukouguoji.gjc.databinding.ActivityGjcWeighingListBinding +import com.lukouguoji.gjc.viewModel.GjcWeighingViewModel +import com.lukouguoji.module_base.base.BaseBindingActivity +import com.lukouguoji.module_base.bean.GjcWeighingBean +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.getLifecycleOwner +import com.lukouguoji.module_base.router.ARouterConstants +import com.lukouguoji.module_base.util.DeviceUtil + +/** + * 国际出港计重列表页 + * + * 布局 id 不区分设备,平板/手机由资源限定符自动选择: + * layout-sw600dp/activity_gjc_weighing_list.xml(平板) + * layout/activity_gjc_weighing_list.xml(手机) + */ +@Route(path = ARouterConstants.ACTIVITY_URL_GJC_WEIGHING_LIST) +class GjcWeighingListActivity : + BaseBindingActivity() { + + override fun layoutId() = R.layout.activity_gjc_weighing_list + + override fun viewModelClass() = GjcWeighingViewModel::class.java + + /** 手机版筛选弹层显隐(仅 UI 状态,不涉及业务逻辑) */ + val filterPanelVisible = ObservableBoolean(false) + + override fun initOnCreate(savedInstanceState: Bundle?) { + setBackArrow(if (DeviceUtil.isPhone()) "出港待计重" else "国际出港待计重") + + binding.viewModel = viewModel + binding.activity = this + + // 手机版专属数据:放开默认日期、加载筛选弹层字典、启用三格统计 + // 平板端不调用,查询链路与请求次数与改造前完全一致 + if (DeviceUtil.isPhone()) { + viewModel.initPhoneExtras() + } + + // 初始化代理人列表(从API获取) + viewModel.initAgentList() + + // 初始化特码列表(从API获取) + viewModel.initSpecialCodeList() + + // 绑定分页逻辑 + viewModel.pageModel + .bindSmartRefreshLayout(binding.srl, binding.rv, viewModel, getLifecycleOwner()) + + // 监听刷新事件 + FlowBus.with(ConstantEvent.EVENT_CHECK_CHANGED).observe(this) { viewModel.onItemCheckChanged() } + + FlowBus.with(ConstantEvent.EVENT_REFRESH) + .observe(this) { + viewModel.refresh() + } + + // 初始加载 + viewModel.refresh() + } + + // ==================== 手机版专用交互(纯 UI,复用既有 ViewModel 字段) ==================== + + /** 手机版筛选弹层显隐切换 */ + fun toggleFilterPanel() { + filterPanelVisible.set(!filterPanelVisible.get()) + } + + /** 手机版筛选:重置(只清弹层内条件,不影响顶部搜索框) */ + fun resetFilter() { + viewModel.channelFilter.value = "" + viewModel.carrierFilter.value = "" + viewModel.awbTypeFilter.value = "" + viewModel.agentCode.value = "" + } + + /** 手机版筛选:确认 */ + fun confirmFilter() { + filterPanelVisible.set(false) + viewModel.searchClick() + } + + /** 手机版卡片内「提前运抵」(单票,由 ViewHolder 调用) */ + fun preArriveClick(bean: GjcWeighingBean) { + viewModel.arrivedAheadSingle(bean) + } + + companion object { + @JvmStatic + fun start(context: Context) { + val starter = Intent(context, GjcWeighingListActivity::class.java) + context.startActivity(starter) + } + } +} diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingRecordDetailsActivity.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingRecordDetailsActivity.kt index f2c6887..ca1e9fe 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingRecordDetailsActivity.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingRecordDetailsActivity.kt @@ -1,103 +1,104 @@ -package com.lukouguoji.gjc.activity - -import android.content.Context -import android.content.Intent -import android.os.Bundle -import androidx.recyclerview.widget.DividerItemDecoration -import androidx.recyclerview.widget.LinearLayoutManager -import com.alibaba.android.arouter.facade.annotation.Route -import com.lukouguoji.gjc.R -import com.lukouguoji.gjc.databinding.ActivityGjcWeighingRecordDetailsBinding -import com.lukouguoji.gjc.holder.GjcCheckInRecordViewHolder -import com.lukouguoji.gjc.viewModel.GjcWeighingRecordDetailsViewModel -import com.lukouguoji.module_base.base.BaseBindingActivity -import com.lukouguoji.module_base.base.CommonAdapter -import com.lukouguoji.module_base.bean.GjcCheckInRecord -import com.lukouguoji.module_base.bean.GjcWeighingRecordBean -import com.lukouguoji.module_base.common.Constant -import com.lukouguoji.module_base.router.ARouterConstants - -/** - * 国际出港计重明细页 - * - * 布局 id 不区分设备,平板/手机由资源限定符自动选择: - * layout-sw600dp/activity_gjc_weighing_record_details.xml(平板,列表内联编辑) - * layout/activity_gjc_weighing_record_details.xml(手机,单条记录经全屏「修改记录」覆层编辑) - */ -@Route(path = ARouterConstants.ACTIVITY_URL_GJC_WEIGHING_RECORD_DETAILS) -class GjcWeighingRecordDetailsActivity : - BaseBindingActivity() { - - private lateinit var adapter: CommonAdapter - - // 当前编辑模式(供ViewHolder获取) - var currentEditMode = false - - override fun layoutId() = R.layout.activity_gjc_weighing_record_details - - override fun viewModelClass() = GjcWeighingRecordDetailsViewModel::class.java - - override fun initOnCreate(savedInstanceState: Bundle?) { - setBackArrow("国际出港计重明细") - - binding.viewModel = viewModel - - // 初始化RecyclerView - val layoutManager = LinearLayoutManager(this) - binding.recyclerView.layoutManager = layoutManager - - // 添加分割线 - val divider = DividerItemDecoration(this, DividerItemDecoration.VERTICAL) - binding.recyclerView.addItemDecoration(divider) - - adapter = CommonAdapter( - this, - R.layout.item_gjc_check_in_record, - GjcCheckInRecordViewHolder::class.java - ) - binding.recyclerView.adapter = adapter - - // 监听数据变化更新RecyclerView - viewModel.recordList.observe(this) { records -> - adapter.refresh(records) - } - - // 监听编辑模式变化,更新当前编辑模式并刷新列表 - viewModel.isEditMode.observe(this) { isEditMode -> - // 更新当前编辑模式状态 - currentEditMode = isEditMode - - // 刷新所有可见的 ViewHolder - adapter.notifyDataSetChanged() - } - - // 初始化数据 - viewModel.initOnCreated(intent) - } - - // ==================== 手机版专用交互(纯 UI,复用既有 ViewModel 编辑链路) ==================== - - /** - * 手机版:打开「修改记录」覆层编辑指定记录。 - * 复用 [GjcWeighingRecordDetailsViewModel.onModifyClick] 的备份/编辑态逻辑, - * 覆层显隐由 isEditMode 驱动(平板端该状态驱动列表内联编辑,互不影响)。 - */ - fun openPhoneEdit(record: GjcCheckInRecord) { - viewModel.onModifyClick() - binding.editRecord = record - } - - /** 手机版:取消编辑(恢复备份并收起覆层) */ - fun closePhoneEdit() { - viewModel.onCancelClick() - } - - companion object { - @JvmStatic - fun start(context: Context, bean: GjcWeighingRecordBean) { - val starter = Intent(context, GjcWeighingRecordDetailsActivity::class.java) - .putExtra(Constant.Key.BEAN, bean) - context.startActivity(starter) - } - } -} +package com.lukouguoji.gjc.activity + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import androidx.recyclerview.widget.DividerItemDecoration +import androidx.recyclerview.widget.LinearLayoutManager +import com.alibaba.android.arouter.facade.annotation.Route +import com.lukouguoji.gjc.R +import com.lukouguoji.gjc.databinding.ActivityGjcWeighingRecordDetailsBinding +import com.lukouguoji.gjc.holder.GjcCheckInRecordViewHolder +import com.lukouguoji.gjc.viewModel.GjcWeighingRecordDetailsViewModel +import com.lukouguoji.module_base.base.BaseBindingActivity +import com.lukouguoji.module_base.base.CommonAdapter +import com.lukouguoji.module_base.bean.GjcCheckInRecord +import com.lukouguoji.module_base.bean.GjcWeighingRecordBean +import com.lukouguoji.module_base.common.Constant +import com.lukouguoji.module_base.router.ARouterConstants +import com.lukouguoji.module_base.util.DeviceUtil + +/** + * 国际出港计重明细页 + * + * 布局 id 不区分设备,平板/手机由资源限定符自动选择: + * layout-sw600dp/activity_gjc_weighing_record_details.xml(平板,列表内联编辑) + * layout/activity_gjc_weighing_record_details.xml(手机,单条记录经全屏「修改记录」覆层编辑) + */ +@Route(path = ARouterConstants.ACTIVITY_URL_GJC_WEIGHING_RECORD_DETAILS) +class GjcWeighingRecordDetailsActivity : + BaseBindingActivity() { + + private lateinit var adapter: CommonAdapter + + // 当前编辑模式(供ViewHolder获取) + var currentEditMode = false + + override fun layoutId() = R.layout.activity_gjc_weighing_record_details + + override fun viewModelClass() = GjcWeighingRecordDetailsViewModel::class.java + + override fun initOnCreate(savedInstanceState: Bundle?) { + setBackArrow(if (DeviceUtil.isPhone()) "计重明细" else "国际出港计重明细") + + binding.viewModel = viewModel + + // 初始化RecyclerView + val layoutManager = LinearLayoutManager(this) + binding.recyclerView.layoutManager = layoutManager + + // 添加分割线 + val divider = DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + binding.recyclerView.addItemDecoration(divider) + + adapter = CommonAdapter( + this, + R.layout.item_gjc_check_in_record, + GjcCheckInRecordViewHolder::class.java + ) + binding.recyclerView.adapter = adapter + + // 监听数据变化更新RecyclerView + viewModel.recordList.observe(this) { records -> + adapter.refresh(records) + } + + // 监听编辑模式变化,更新当前编辑模式并刷新列表 + viewModel.isEditMode.observe(this) { isEditMode -> + // 更新当前编辑模式状态 + currentEditMode = isEditMode + + // 刷新所有可见的 ViewHolder + adapter.notifyDataSetChanged() + } + + // 初始化数据 + viewModel.initOnCreated(intent) + } + + // ==================== 手机版专用交互(纯 UI,复用既有 ViewModel 编辑链路) ==================== + + /** + * 手机版:打开「修改记录」覆层编辑指定记录。 + * 复用 [GjcWeighingRecordDetailsViewModel.onModifyClick] 的备份/编辑态逻辑, + * 覆层显隐由 isEditMode 驱动(平板端该状态驱动列表内联编辑,互不影响)。 + */ + fun openPhoneEdit(record: GjcCheckInRecord) { + viewModel.onModifyClick() + binding.editRecord = record + } + + /** 手机版:取消编辑(恢复备份并收起覆层) */ + fun closePhoneEdit() { + viewModel.onCancelClick() + } + + companion object { + @JvmStatic + fun start(context: Context, bean: GjcWeighingRecordBean) { + val starter = Intent(context, GjcWeighingRecordDetailsActivity::class.java) + .putExtra(Constant.Key.BEAN, bean) + context.startActivity(starter) + } + } +} diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingRecordListActivity.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingRecordListActivity.kt index bb83248..836ed9c 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingRecordListActivity.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingRecordListActivity.kt @@ -1,99 +1,99 @@ -package com.lukouguoji.gjc.activity - -import android.content.Context -import android.content.Intent -import android.os.Bundle -import androidx.databinding.ObservableBoolean -import com.alibaba.android.arouter.facade.annotation.Route -import com.lukouguoji.gjc.R -import com.lukouguoji.gjc.databinding.ActivityGjcWeighingRecordListBinding -import com.lukouguoji.gjc.viewModel.GjcWeighingRecordViewModel -import com.lukouguoji.module_base.base.BaseBindingActivity -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.getLifecycleOwner -import com.lukouguoji.module_base.router.ARouterConstants -import com.lukouguoji.module_base.util.DeviceUtil - -/** - * 国际出港计重记录列表页 - * - * 布局 id 不区分设备,平板/手机由资源限定符自动选择: - * layout-sw600dp/activity_gjc_weighing_record_list.xml(平板) - * layout/activity_gjc_weighing_record_list.xml(手机) - */ -@Route(path = ARouterConstants.ACTIVITY_URL_GJC_WEIGHING_RECORD_LIST) -class GjcWeighingRecordListActivity : - BaseBindingActivity() { - - override fun layoutId() = R.layout.activity_gjc_weighing_record_list - - override fun viewModelClass() = GjcWeighingRecordViewModel::class.java - - /** 手机版筛选弹层显隐(仅 UI 状态,不涉及业务逻辑) */ - val filterPanelVisible = ObservableBoolean(false) - - override fun initOnCreate(savedInstanceState: Bundle?) { - setBackArrow("国际出港计重记录") - - binding.viewModel = viewModel - binding.activity = this - - // 手机版专属数据:放开默认日期、加载计重人下拉 - // 平板端不调用,查询链路与请求次数与改造前完全一致 - if (DeviceUtil.isPhone()) { - viewModel.initPhoneExtras() - } - - // 初始化代理人列表 - viewModel.initAgentList() - - // 初始化特码列表 - viewModel.initSpecialCodeList() - - // 绑定分页逻辑 - viewModel.pageModel - .bindSmartRefreshLayout(binding.srl, binding.rv, viewModel, getLifecycleOwner()) - - // 监听刷新事件 - FlowBus.with(ConstantEvent.EVENT_REFRESH) - .observe(this) { - viewModel.refresh() - } - - // 初始加载 - viewModel.refresh() - } - - // ==================== 手机版专用交互(纯 UI,复用既有 ViewModel 字段) ==================== - - /** 手机版筛选弹层显隐切换 */ - fun toggleFilterPanel() { - filterPanelVisible.set(!filterPanelVisible.get()) - } - - /** 手机版筛选:重置(只清弹层内条件,不影响顶部搜索框) */ - fun resetFilter() { - viewModel.checkInDateStart.value = "" - viewModel.checkInDateEnd.value = "" - viewModel.agentCode.value = "" - viewModel.spCode.value = "" - viewModel.destFilter.value = "" - viewModel.opUserFilter.value = "" - } - - /** 手机版筛选:确认 */ - fun confirmFilter() { - filterPanelVisible.set(false) - viewModel.searchClick() - } - - companion object { - @JvmStatic - fun start(context: Context) { - val starter = Intent(context, GjcWeighingRecordListActivity::class.java) - context.startActivity(starter) - } - } -} +package com.lukouguoji.gjc.activity + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import androidx.databinding.ObservableBoolean +import com.alibaba.android.arouter.facade.annotation.Route +import com.lukouguoji.gjc.R +import com.lukouguoji.gjc.databinding.ActivityGjcWeighingRecordListBinding +import com.lukouguoji.gjc.viewModel.GjcWeighingRecordViewModel +import com.lukouguoji.module_base.base.BaseBindingActivity +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.getLifecycleOwner +import com.lukouguoji.module_base.router.ARouterConstants +import com.lukouguoji.module_base.util.DeviceUtil + +/** + * 国际出港计重记录列表页 + * + * 布局 id 不区分设备,平板/手机由资源限定符自动选择: + * layout-sw600dp/activity_gjc_weighing_record_list.xml(平板) + * layout/activity_gjc_weighing_record_list.xml(手机) + */ +@Route(path = ARouterConstants.ACTIVITY_URL_GJC_WEIGHING_RECORD_LIST) +class GjcWeighingRecordListActivity : + BaseBindingActivity() { + + override fun layoutId() = R.layout.activity_gjc_weighing_record_list + + override fun viewModelClass() = GjcWeighingRecordViewModel::class.java + + /** 手机版筛选弹层显隐(仅 UI 状态,不涉及业务逻辑) */ + val filterPanelVisible = ObservableBoolean(false) + + override fun initOnCreate(savedInstanceState: Bundle?) { + setBackArrow(if (DeviceUtil.isPhone()) "计重记录" else "国际出港计重记录") + + binding.viewModel = viewModel + binding.activity = this + + // 手机版专属数据:放开默认日期、加载计重人下拉 + // 平板端不调用,查询链路与请求次数与改造前完全一致 + if (DeviceUtil.isPhone()) { + viewModel.initPhoneExtras() + } + + // 初始化代理人列表 + viewModel.initAgentList() + + // 初始化特码列表 + viewModel.initSpecialCodeList() + + // 绑定分页逻辑 + viewModel.pageModel + .bindSmartRefreshLayout(binding.srl, binding.rv, viewModel, getLifecycleOwner()) + + // 监听刷新事件 + FlowBus.with(ConstantEvent.EVENT_REFRESH) + .observe(this) { + viewModel.refresh() + } + + // 初始加载 + viewModel.refresh() + } + + // ==================== 手机版专用交互(纯 UI,复用既有 ViewModel 字段) ==================== + + /** 手机版筛选弹层显隐切换 */ + fun toggleFilterPanel() { + filterPanelVisible.set(!filterPanelVisible.get()) + } + + /** 手机版筛选:重置(只清弹层内条件,不影响顶部搜索框) */ + fun resetFilter() { + viewModel.checkInDateStart.value = "" + viewModel.checkInDateEnd.value = "" + viewModel.agentCode.value = "" + viewModel.spCode.value = "" + viewModel.destFilter.value = "" + viewModel.opUserFilter.value = "" + } + + /** 手机版筛选:确认 */ + fun confirmFilter() { + filterPanelVisible.set(false) + viewModel.searchClick() + } + + companion object { + @JvmStatic + fun start(context: Context) { + val starter = Intent(context, GjcWeighingRecordListActivity::class.java) + context.startActivity(starter) + } + } +} diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingStartActivity.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingStartActivity.kt index 937534d..252b63f 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingStartActivity.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingStartActivity.kt @@ -1,221 +1,221 @@ -package com.lukouguoji.gjc.activity - -import android.animation.Animator -import android.animation.AnimatorListenerAdapter -import android.animation.AnimatorSet -import android.animation.ObjectAnimator -import android.content.Context -import android.content.Intent -import android.os.Bundle -import android.view.View -import com.alibaba.android.arouter.facade.annotation.Route -import com.lukouguoji.gjc.R -import com.lukouguoji.gjc.databinding.ActivityGjcWeighingStartBinding -import com.lukouguoji.gjc.viewModel.GjcWeighingStartViewModel -import com.lukouguoji.module_base.base.BaseBindingActivity -import com.lukouguoji.module_base.common.Constant -import com.lukouguoji.module_base.router.ARouterConstants -import com.lukouguoji.module_base.util.DeviceUtil - -/** - * 国际出港计重-开始计重页面 - */ -@Route(path = ARouterConstants.ACTIVITY_URL_GJC_WEIGHING_START) -class GjcWeighingStartActivity : - BaseBindingActivity() { - - private var isExpanded = false - - override fun layoutId() = R.layout.activity_gjc_weighing_start - - override fun viewModelClass() = GjcWeighingStartViewModel::class.java - - override fun initOnCreate(savedInstanceState: Bundle?) { - setBackArrow("国际出港开始计重") - binding.viewModel = viewModel - - // 手机版专属:提交体携带托盘数量/托盘自重(平板不调用,请求体与改造前完全一致) - if (DeviceUtil.isPhone()) { - viewModel.initPhoneExtras() - } - - viewModel.initOnCreated(this, intent) - - setupFloatButtons() - } - - private fun setupFloatButtons() { - // 浮动按钮组仅平板布局存在(layout-sw600dp),手机布局无这些 id,直接跳过 - val mainFloatButton = binding.mainFloatButton ?: return - val maskView = binding.maskView ?: return - val subButton1 = binding.subButton1 ?: return - val subButton2 = binding.subButton2 ?: return - - // 主按钮点击事件 - mainFloatButton.setOnClickListener { - if (!isExpanded) { - expandButtons() - } - } - - // 遮罩层点击事件 - maskView.setOnClickListener { - collapseButtons() - } - - // 子按钮1点击事件 - 跳转到出港运抵页面 - subButton1.setOnClickListener { - com.alibaba.android.arouter.launcher.ARouter.getInstance() - .build(ARouterConstants.ACTIVITY_URL_INT_EXP_ARRIVE) - .navigation() - collapseButtons() - } - - // 子按钮2点击事件 - 跳转到计重记录 - subButton2.setOnClickListener { - com.alibaba.android.arouter.launcher.ARouter.getInstance() - .build(ARouterConstants.ACTIVITY_URL_GJC_WEIGHING_RECORD_LIST) - .navigation() - collapseButtons() - } - } - - /** - * 展开子按钮(仅平板,手机布局无浮动按钮组) - */ - private fun expandButtons() { - val mainFloatButton = binding.mainFloatButton ?: return - val maskView = binding.maskView ?: return - val subButton1 = binding.subButton1 ?: return - val subButton2 = binding.subButton2 ?: return - - isExpanded = true - - // 显示遮罩层 - maskView.visibility = View.VISIBLE - maskView.alpha = 0f - maskView.animate().alpha(0.3f).setDuration(200).start() - - // 显示子按钮 - subButton1.visibility = View.VISIBLE - subButton2.visibility = View.VISIBLE - - // 子按钮1动画(向左上方移动: 左移15dp, 上移55dp) - val sub1TransX = ObjectAnimator.ofFloat(subButton1, "translationX", 0f, -5f) - val sub1TransY = ObjectAnimator.ofFloat(subButton1, "translationY", 0f, -25f) - val sub1Alpha = ObjectAnimator.ofFloat(subButton1, "alpha", 0f, 1f) - val sub1Scale = ObjectAnimator.ofFloat(subButton1, "scaleX", 0f, 1f) - val sub1ScaleY = ObjectAnimator.ofFloat(subButton1, "scaleY", 0f, 1f) - - val animSet1 = AnimatorSet() - animSet1.playTogether(sub1TransX, sub1TransY, sub1Alpha, sub1Scale, sub1ScaleY) - animSet1.duration = 200 - - // 子按钮2动画(向左下方移动: 左移55dp, 下移15dp) - val sub2TransX = ObjectAnimator.ofFloat(subButton2, "translationX", 0f, -25f) - val sub2TransY = ObjectAnimator.ofFloat(subButton2, "translationY", 0f, -5f) - val sub2Alpha = ObjectAnimator.ofFloat(subButton2, "alpha", 0f, 1f) - val sub2Scale = ObjectAnimator.ofFloat(subButton2, "scaleX", 0f, 1f) - val sub2ScaleY = ObjectAnimator.ofFloat(subButton2, "scaleY", 0f, 1f) - - val animSet2 = AnimatorSet() - animSet2.playTogether(sub2TransX, sub2TransY, sub2Alpha, sub2Scale, sub2ScaleY) - animSet2.duration = 200 - animSet2.startDelay = 50 - - // 主按钮隐藏动画 - mainFloatButton.animate() - .scaleX(0f) - .scaleY(0f) - .alpha(0f) - .setDuration(150) - .setListener(object : AnimatorListenerAdapter() { - override fun onAnimationEnd(animation: Animator) { - mainFloatButton.visibility = View.GONE - } - }) - .start() - - animSet1.start() - animSet2.start() - } - - /** - * 收起子按钮(仅平板,手机布局无浮动按钮组) - */ - private fun collapseButtons() { - val mainFloatButton = binding.mainFloatButton ?: return - val maskView = binding.maskView ?: return - val subButton1 = binding.subButton1 ?: return - val subButton2 = binding.subButton2 ?: return - - isExpanded = false - - // 隐藏遮罩层 - maskView.animate().alpha(0f).setDuration(200).withEndAction { - maskView.visibility = View.GONE - }.start() - - // 子按钮1动画(回到原位) - val sub1TransX = ObjectAnimator.ofFloat(subButton1, "translationX", subButton1.translationX, 0f) - val sub1TransY = ObjectAnimator.ofFloat(subButton1, "translationY", subButton1.translationY, 0f) - val sub1Alpha = ObjectAnimator.ofFloat(subButton1, "alpha", 1f, 0f) - val sub1Scale = ObjectAnimator.ofFloat(subButton1, "scaleX", 1f, 0f) - val sub1ScaleY = ObjectAnimator.ofFloat(subButton1, "scaleY", 1f, 0f) - - val animSet1 = AnimatorSet() - animSet1.playTogether(sub1TransX, sub1TransY, sub1Alpha, sub1Scale, sub1ScaleY) - animSet1.duration = 200 - - // 子按钮2动画(回到原位) - val sub2TransX = ObjectAnimator.ofFloat(subButton2, "translationX", subButton2.translationX, 0f) - val sub2TransY = ObjectAnimator.ofFloat(subButton2, "translationY", subButton2.translationY, 0f) - val sub2Alpha = ObjectAnimator.ofFloat(subButton2, "alpha", 1f, 0f) - val sub2Scale = ObjectAnimator.ofFloat(subButton2, "scaleX", 1f, 0f) - val sub2ScaleY = ObjectAnimator.ofFloat(subButton2, "scaleY", 1f, 0f) - - val animSet2 = AnimatorSet() - animSet2.playTogether(sub2TransX, sub2TransY, sub2Alpha, sub2Scale, sub2ScaleY) - animSet2.duration = 200 - - animSet1.addListener(object : AnimatorListenerAdapter() { - override fun onAnimationEnd(animation: Animator) { - subButton1.visibility = View.GONE - } - }) - - animSet2.addListener(object : AnimatorListenerAdapter() { - override fun onAnimationEnd(animation: Animator) { - subButton2.visibility = View.GONE - } - }) - - // 主按钮显示动画 - mainFloatButton.visibility = View.VISIBLE - mainFloatButton.animate() - .scaleX(1f) - .scaleY(1f) - .alpha(1f) - .setDuration(200) - .setStartDelay(100) - .setListener(null) - .start() - - animSet1.start() - animSet2.start() - } - - companion object { - /** - * 启动开始计重页面 - * @param context 上下文 - * @param maWbId 运单ID,默认为0(新增模式) - */ - @JvmStatic - fun startForAdd(context: Context, maWbId: Long = 0) { - val starter = Intent(context, GjcWeighingStartActivity::class.java) - .putExtra(Constant.Key.MAWB_ID, maWbId) - context.startActivity(starter) - } - } -} +package com.lukouguoji.gjc.activity + +import android.animation.Animator +import android.animation.AnimatorListenerAdapter +import android.animation.AnimatorSet +import android.animation.ObjectAnimator +import android.content.Context +import android.content.Intent +import android.os.Bundle +import android.view.View +import com.alibaba.android.arouter.facade.annotation.Route +import com.lukouguoji.gjc.R +import com.lukouguoji.gjc.databinding.ActivityGjcWeighingStartBinding +import com.lukouguoji.gjc.viewModel.GjcWeighingStartViewModel +import com.lukouguoji.module_base.base.BaseBindingActivity +import com.lukouguoji.module_base.common.Constant +import com.lukouguoji.module_base.router.ARouterConstants +import com.lukouguoji.module_base.util.DeviceUtil + +/** + * 国际出港计重-开始计重页面 + */ +@Route(path = ARouterConstants.ACTIVITY_URL_GJC_WEIGHING_START) +class GjcWeighingStartActivity : + BaseBindingActivity() { + + private var isExpanded = false + + override fun layoutId() = R.layout.activity_gjc_weighing_start + + override fun viewModelClass() = GjcWeighingStartViewModel::class.java + + override fun initOnCreate(savedInstanceState: Bundle?) { + setBackArrow(if (DeviceUtil.isPhone()) "开始计重" else "国际出港开始计重") + binding.viewModel = viewModel + + // 手机版专属:提交体携带托盘数量/托盘自重(平板不调用,请求体与改造前完全一致) + if (DeviceUtil.isPhone()) { + viewModel.initPhoneExtras() + } + + viewModel.initOnCreated(this, intent) + + setupFloatButtons() + } + + private fun setupFloatButtons() { + // 浮动按钮组仅平板布局存在(layout-sw600dp),手机布局无这些 id,直接跳过 + val mainFloatButton = binding.mainFloatButton ?: return + val maskView = binding.maskView ?: return + val subButton1 = binding.subButton1 ?: return + val subButton2 = binding.subButton2 ?: return + + // 主按钮点击事件 + mainFloatButton.setOnClickListener { + if (!isExpanded) { + expandButtons() + } + } + + // 遮罩层点击事件 + maskView.setOnClickListener { + collapseButtons() + } + + // 子按钮1点击事件 - 跳转到出港运抵页面 + subButton1.setOnClickListener { + com.alibaba.android.arouter.launcher.ARouter.getInstance() + .build(ARouterConstants.ACTIVITY_URL_INT_EXP_ARRIVE) + .navigation() + collapseButtons() + } + + // 子按钮2点击事件 - 跳转到计重记录 + subButton2.setOnClickListener { + com.alibaba.android.arouter.launcher.ARouter.getInstance() + .build(ARouterConstants.ACTIVITY_URL_GJC_WEIGHING_RECORD_LIST) + .navigation() + collapseButtons() + } + } + + /** + * 展开子按钮(仅平板,手机布局无浮动按钮组) + */ + private fun expandButtons() { + val mainFloatButton = binding.mainFloatButton ?: return + val maskView = binding.maskView ?: return + val subButton1 = binding.subButton1 ?: return + val subButton2 = binding.subButton2 ?: return + + isExpanded = true + + // 显示遮罩层 + maskView.visibility = View.VISIBLE + maskView.alpha = 0f + maskView.animate().alpha(0.3f).setDuration(200).start() + + // 显示子按钮 + subButton1.visibility = View.VISIBLE + subButton2.visibility = View.VISIBLE + + // 子按钮1动画(向左上方移动: 左移15dp, 上移55dp) + val sub1TransX = ObjectAnimator.ofFloat(subButton1, "translationX", 0f, -5f) + val sub1TransY = ObjectAnimator.ofFloat(subButton1, "translationY", 0f, -25f) + val sub1Alpha = ObjectAnimator.ofFloat(subButton1, "alpha", 0f, 1f) + val sub1Scale = ObjectAnimator.ofFloat(subButton1, "scaleX", 0f, 1f) + val sub1ScaleY = ObjectAnimator.ofFloat(subButton1, "scaleY", 0f, 1f) + + val animSet1 = AnimatorSet() + animSet1.playTogether(sub1TransX, sub1TransY, sub1Alpha, sub1Scale, sub1ScaleY) + animSet1.duration = 200 + + // 子按钮2动画(向左下方移动: 左移55dp, 下移15dp) + val sub2TransX = ObjectAnimator.ofFloat(subButton2, "translationX", 0f, -25f) + val sub2TransY = ObjectAnimator.ofFloat(subButton2, "translationY", 0f, -5f) + val sub2Alpha = ObjectAnimator.ofFloat(subButton2, "alpha", 0f, 1f) + val sub2Scale = ObjectAnimator.ofFloat(subButton2, "scaleX", 0f, 1f) + val sub2ScaleY = ObjectAnimator.ofFloat(subButton2, "scaleY", 0f, 1f) + + val animSet2 = AnimatorSet() + animSet2.playTogether(sub2TransX, sub2TransY, sub2Alpha, sub2Scale, sub2ScaleY) + animSet2.duration = 200 + animSet2.startDelay = 50 + + // 主按钮隐藏动画 + mainFloatButton.animate() + .scaleX(0f) + .scaleY(0f) + .alpha(0f) + .setDuration(150) + .setListener(object : AnimatorListenerAdapter() { + override fun onAnimationEnd(animation: Animator) { + mainFloatButton.visibility = View.GONE + } + }) + .start() + + animSet1.start() + animSet2.start() + } + + /** + * 收起子按钮(仅平板,手机布局无浮动按钮组) + */ + private fun collapseButtons() { + val mainFloatButton = binding.mainFloatButton ?: return + val maskView = binding.maskView ?: return + val subButton1 = binding.subButton1 ?: return + val subButton2 = binding.subButton2 ?: return + + isExpanded = false + + // 隐藏遮罩层 + maskView.animate().alpha(0f).setDuration(200).withEndAction { + maskView.visibility = View.GONE + }.start() + + // 子按钮1动画(回到原位) + val sub1TransX = ObjectAnimator.ofFloat(subButton1, "translationX", subButton1.translationX, 0f) + val sub1TransY = ObjectAnimator.ofFloat(subButton1, "translationY", subButton1.translationY, 0f) + val sub1Alpha = ObjectAnimator.ofFloat(subButton1, "alpha", 1f, 0f) + val sub1Scale = ObjectAnimator.ofFloat(subButton1, "scaleX", 1f, 0f) + val sub1ScaleY = ObjectAnimator.ofFloat(subButton1, "scaleY", 1f, 0f) + + val animSet1 = AnimatorSet() + animSet1.playTogether(sub1TransX, sub1TransY, sub1Alpha, sub1Scale, sub1ScaleY) + animSet1.duration = 200 + + // 子按钮2动画(回到原位) + val sub2TransX = ObjectAnimator.ofFloat(subButton2, "translationX", subButton2.translationX, 0f) + val sub2TransY = ObjectAnimator.ofFloat(subButton2, "translationY", subButton2.translationY, 0f) + val sub2Alpha = ObjectAnimator.ofFloat(subButton2, "alpha", 1f, 0f) + val sub2Scale = ObjectAnimator.ofFloat(subButton2, "scaleX", 1f, 0f) + val sub2ScaleY = ObjectAnimator.ofFloat(subButton2, "scaleY", 1f, 0f) + + val animSet2 = AnimatorSet() + animSet2.playTogether(sub2TransX, sub2TransY, sub2Alpha, sub2Scale, sub2ScaleY) + animSet2.duration = 200 + + animSet1.addListener(object : AnimatorListenerAdapter() { + override fun onAnimationEnd(animation: Animator) { + subButton1.visibility = View.GONE + } + }) + + animSet2.addListener(object : AnimatorListenerAdapter() { + override fun onAnimationEnd(animation: Animator) { + subButton2.visibility = View.GONE + } + }) + + // 主按钮显示动画 + mainFloatButton.visibility = View.VISIBLE + mainFloatButton.animate() + .scaleX(1f) + .scaleY(1f) + .alpha(1f) + .setDuration(200) + .setStartDelay(100) + .setListener(null) + .start() + + animSet1.start() + animSet2.start() + } + + companion object { + /** + * 启动开始计重页面 + * @param context 上下文 + * @param maWbId 运单ID,默认为0(新增模式) + */ + @JvmStatic + fun startForAdd(context: Context, maWbId: Long = 0) { + val starter = Intent(context, GjcWeighingStartActivity::class.java) + .putExtra(Constant.Key.MAWB_ID, maWbId) + context.startActivity(starter) + } + } +} diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/activity/IntExpArriveActivity.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/IntExpArriveActivity.kt index ce5498f..41d7c1f 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/activity/IntExpArriveActivity.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/IntExpArriveActivity.kt @@ -1,177 +1,177 @@ -package com.lukouguoji.gjc.activity - -import android.app.Activity -import android.content.Intent -import android.os.Bundle -import androidx.databinding.ObservableBoolean -import com.alibaba.android.arouter.facade.annotation.Autowired -import com.alibaba.android.arouter.facade.annotation.Route -import com.alibaba.android.arouter.launcher.ARouter -import com.lukouguoji.gjc.R -import com.lukouguoji.gjc.databinding.ActivityIntExpArriveBinding -import com.lukouguoji.gjc.viewModel.IntExpArriveViewModel -import com.lukouguoji.module_base.base.BaseBindingActivity -import com.lukouguoji.module_base.bean.GjcHaWb -import com.lukouguoji.module_base.bean.GjcMaWb -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.ktx.commonAdapter -import com.lukouguoji.module_base.router.ARouterConstants -import com.lukouguoji.module_base.util.DeviceUtil -import java.util.ArrayList - -/** - * 国际出港-出港运抵页面 - * - * 布局 id 不区分设备,平板/手机由资源限定符自动选择: - * layout-sw600dp/activity_int_exp_arrive.xml(平板) - * layout/activity_int_exp_arrive.xml(手机) - */ -@Route(path = ARouterConstants.ACTIVITY_URL_INT_EXP_ARRIVE) -class IntExpArriveActivity : - BaseBindingActivity() { - - @JvmField - @Autowired - var wbNoParam: String? = null - - override fun layoutId() = R.layout.activity_int_exp_arrive - override fun viewModelClass() = IntExpArriveViewModel::class.java - - /** 手机版筛选弹层显隐(仅 UI 状态,不涉及业务逻辑) */ - val filterPanelVisible = ObservableBoolean(false) - - /** 供 [com.lukouguoji.gjc.holder.IntExpArriveViewHolder] 绑定 item 布局的 viewModel 变量(父类 viewModel 为 protected) */ - val itemViewModel: IntExpArriveViewModel get() = viewModel - - override fun initOnCreate(savedInstanceState: Bundle?) { - // 注入 ARouter 参数 - ARouter.getInstance().inject(this) - - setBackArrow("国际出港运抵") - binding.viewModel = viewModel - binding.activity = this - - // 手机版专属数据:加载「代理」筛选下拉 - // 平板端不调用,查询链路与请求次数与改造前完全一致 - if (DeviceUtil.isPhone()) { - viewModel.initPhoneExtras() - } - - // 如果有传入运单号,自动填充并触发搜索 - if (!wbNoParam.isNullOrEmpty()) { - viewModel.waybillNo.value = wbNoParam - viewModel.searchClick() - } - - // 绑定分页 - viewModel.pageModel.bindSmartRefreshLayout(binding.srl, binding.rv, viewModel, this) - - // 设置item点击监听 - binding.rv.addOnItemClickListener(viewModel) - - // 监听刷新事件 - FlowBus.with(ConstantEvent.EVENT_CHECK_CHANGED).observe(this) { viewModel.onItemCheckChanged() } - - FlowBus.with(ConstantEvent.EVENT_REFRESH).observe(this) { - viewModel.refresh() - } - - // 初始加载数据(如果没有传入运单号,才执行初始加载) - if (wbNoParam.isNullOrEmpty()) { - viewModel.refresh() - } - } - - // ==================== 手机版专用交互(纯 UI,复用既有 ViewModel 字段与数据) ==================== - - /** - * 手机版 Tab 切换回调:PhoneStatusTab 已通过双向绑定写入 viewModel.currentTab, - * 这里触发 ViewModel 把适配器数据集替换为过滤后的子集(不发起新请求)。 - */ - fun onArriveTabChanged() { - viewModel.onTabChangedPhone() - } - - /** 卡片长按:展开操作浮层(View.OnLongClickListener 要求返回 Boolean) */ - fun showCardActionPhone(bean: GjcMaWb): Boolean { - bean.actionMenuVisible.set(true) - return true - } - - /** 点击浮层遮罩/空白处:收起操作浮层 */ - fun hideCardActionPhone(bean: GjcMaWb) { - bean.actionMenuVisible.set(false) - } - - /** 选择圈勾选状态变化后回调(由 ViewHolder 调用) */ - fun onItemCheckChanged() { - viewModel.onItemCheckChanged() - } - - /** 手机版筛选弹层显隐切换 */ - fun toggleFilterPanel() { - filterPanelVisible.set(!filterPanelVisible.get()) - } - - /** 手机版筛选:重置 */ - fun resetFilter() { - viewModel.flightDate.value = "" - viewModel.flightNo.value = "" - viewModel.agentCodePhone.value = "" - } - - /** 手机版筛选:确认 */ - fun confirmFilter() { - filterPanelVisible.set(false) - viewModel.searchClick() - } - - /** - * 进入「分单明细」页:直接传递该运单已加载的 haWbList,零新增请求。 - */ - fun openSubOrder(bean: GjcMaWb) { - val list = ArrayList(bean.haWbList.orEmpty()) - IntExpArriveSubOrderActivity.start(this, bean.wbNo.orEmpty(), list) - } - - /** - * 进入「回执」页(手机专属只读页):复用 haWbList[].response + arrivalOpDate,零新增请求。 - */ - fun openReceipt(bean: GjcMaWb) { - bean.actionMenuVisible.set(false) - val list = ArrayList(bean.haWbList.orEmpty()) - IntExpArriveReceiptActivity.start(this, bean.wbNo.orEmpty(), list) - } - - /** - * 进入「补充信息」页(手机专属新页):对该运单整个 haWbList 批量应用(参照 Pad 端国际进港 - * IntArrSupplementInfoViewModel 的批量复制模式)。后端暂无保存接口,见接口问题清单。 - */ - fun openSupplement(bean: GjcMaWb) { - bean.actionMenuVisible.set(false) - val list = ArrayList(bean.haWbList.orEmpty()) - IntExpArriveSupplementActivity.start(this, bean.wbNo.orEmpty(), list) - } - - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - when (requestCode) { - Constant.RequestCode.WAYBILL -> { - if (resultCode == Activity.RESULT_OK) { - viewModel.waybillNo.value = data?.getStringExtra(Constant.Result.CODED_CONTENT) - viewModel.searchClick() - } - } - Constant.RequestCode.CODE -> { - if (resultCode == Activity.RESULT_OK) { - viewModel.hno.value = data?.getStringExtra(Constant.Result.CODED_CONTENT) - viewModel.searchClick() - } - } - } - } -} +package com.lukouguoji.gjc.activity + +import android.app.Activity +import android.content.Intent +import android.os.Bundle +import androidx.databinding.ObservableBoolean +import com.alibaba.android.arouter.facade.annotation.Autowired +import com.alibaba.android.arouter.facade.annotation.Route +import com.alibaba.android.arouter.launcher.ARouter +import com.lukouguoji.gjc.R +import com.lukouguoji.gjc.databinding.ActivityIntExpArriveBinding +import com.lukouguoji.gjc.viewModel.IntExpArriveViewModel +import com.lukouguoji.module_base.base.BaseBindingActivity +import com.lukouguoji.module_base.bean.GjcHaWb +import com.lukouguoji.module_base.bean.GjcMaWb +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.ktx.commonAdapter +import com.lukouguoji.module_base.router.ARouterConstants +import com.lukouguoji.module_base.util.DeviceUtil +import java.util.ArrayList + +/** + * 国际出港-出港运抵页面 + * + * 布局 id 不区分设备,平板/手机由资源限定符自动选择: + * layout-sw600dp/activity_int_exp_arrive.xml(平板) + * layout/activity_int_exp_arrive.xml(手机) + */ +@Route(path = ARouterConstants.ACTIVITY_URL_INT_EXP_ARRIVE) +class IntExpArriveActivity : + BaseBindingActivity() { + + @JvmField + @Autowired + var wbNoParam: String? = null + + override fun layoutId() = R.layout.activity_int_exp_arrive + override fun viewModelClass() = IntExpArriveViewModel::class.java + + /** 手机版筛选弹层显隐(仅 UI 状态,不涉及业务逻辑) */ + val filterPanelVisible = ObservableBoolean(false) + + /** 供 [com.lukouguoji.gjc.holder.IntExpArriveViewHolder] 绑定 item 布局的 viewModel 变量(父类 viewModel 为 protected) */ + val itemViewModel: IntExpArriveViewModel get() = viewModel + + override fun initOnCreate(savedInstanceState: Bundle?) { + // 注入 ARouter 参数 + ARouter.getInstance().inject(this) + + setBackArrow(if (DeviceUtil.isPhone()) "出港运抵" else "国际出港运抵") + binding.viewModel = viewModel + binding.activity = this + + // 手机版专属数据:加载「代理」筛选下拉 + // 平板端不调用,查询链路与请求次数与改造前完全一致 + if (DeviceUtil.isPhone()) { + viewModel.initPhoneExtras() + } + + // 如果有传入运单号,自动填充并触发搜索 + if (!wbNoParam.isNullOrEmpty()) { + viewModel.waybillNo.value = wbNoParam + viewModel.searchClick() + } + + // 绑定分页 + viewModel.pageModel.bindSmartRefreshLayout(binding.srl, binding.rv, viewModel, this) + + // 设置item点击监听 + binding.rv.addOnItemClickListener(viewModel) + + // 监听刷新事件 + FlowBus.with(ConstantEvent.EVENT_CHECK_CHANGED).observe(this) { viewModel.onItemCheckChanged() } + + FlowBus.with(ConstantEvent.EVENT_REFRESH).observe(this) { + viewModel.refresh() + } + + // 初始加载数据(如果没有传入运单号,才执行初始加载) + if (wbNoParam.isNullOrEmpty()) { + viewModel.refresh() + } + } + + // ==================== 手机版专用交互(纯 UI,复用既有 ViewModel 字段与数据) ==================== + + /** + * 手机版 Tab 切换回调:PhoneStatusTab 已通过双向绑定写入 viewModel.currentTab, + * 这里触发 ViewModel 把适配器数据集替换为过滤后的子集(不发起新请求)。 + */ + fun onArriveTabChanged() { + viewModel.onTabChangedPhone() + } + + /** 卡片长按:展开操作浮层(View.OnLongClickListener 要求返回 Boolean) */ + fun showCardActionPhone(bean: GjcMaWb): Boolean { + bean.actionMenuVisible.set(true) + return true + } + + /** 点击浮层遮罩/空白处:收起操作浮层 */ + fun hideCardActionPhone(bean: GjcMaWb) { + bean.actionMenuVisible.set(false) + } + + /** 选择圈勾选状态变化后回调(由 ViewHolder 调用) */ + fun onItemCheckChanged() { + viewModel.onItemCheckChanged() + } + + /** 手机版筛选弹层显隐切换 */ + fun toggleFilterPanel() { + filterPanelVisible.set(!filterPanelVisible.get()) + } + + /** 手机版筛选:重置 */ + fun resetFilter() { + viewModel.flightDate.value = "" + viewModel.flightNo.value = "" + viewModel.agentCodePhone.value = "" + } + + /** 手机版筛选:确认 */ + fun confirmFilter() { + filterPanelVisible.set(false) + viewModel.searchClick() + } + + /** + * 进入「分单明细」页:直接传递该运单已加载的 haWbList,零新增请求。 + */ + fun openSubOrder(bean: GjcMaWb) { + val list = ArrayList(bean.haWbList.orEmpty()) + IntExpArriveSubOrderActivity.start(this, bean.wbNo.orEmpty(), list) + } + + /** + * 进入「回执」页(手机专属只读页):复用 haWbList[].response + arrivalOpDate,零新增请求。 + */ + fun openReceipt(bean: GjcMaWb) { + bean.actionMenuVisible.set(false) + val list = ArrayList(bean.haWbList.orEmpty()) + IntExpArriveReceiptActivity.start(this, bean.wbNo.orEmpty(), list) + } + + /** + * 进入「补充信息」页(手机专属新页):对该运单整个 haWbList 批量应用(参照 Pad 端国际进港 + * IntArrSupplementInfoViewModel 的批量复制模式)。后端暂无保存接口,见接口问题清单。 + */ + fun openSupplement(bean: GjcMaWb) { + bean.actionMenuVisible.set(false) + val list = ArrayList(bean.haWbList.orEmpty()) + IntExpArriveSupplementActivity.start(this, bean.wbNo.orEmpty(), list) + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + when (requestCode) { + Constant.RequestCode.WAYBILL -> { + if (resultCode == Activity.RESULT_OK) { + viewModel.waybillNo.value = data?.getStringExtra(Constant.Result.CODED_CONTENT) + viewModel.searchClick() + } + } + Constant.RequestCode.CODE -> { + if (resultCode == Activity.RESULT_OK) { + viewModel.hno.value = data?.getStringExtra(Constant.Result.CODED_CONTENT) + viewModel.searchClick() + } + } + } + } +} diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/activity/IntExpOutHandoverActivity.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/IntExpOutHandoverActivity.kt index 25e1f83..243ff95 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/activity/IntExpOutHandoverActivity.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/IntExpOutHandoverActivity.kt @@ -35,7 +35,7 @@ class IntExpOutHandoverActivity : val filterPanelVisible = ObservableBoolean(false) override fun initOnCreate(savedInstanceState: Bundle?) { - setBackArrow("国际出港出库交接") + setBackArrow(if (DeviceUtil.isPhone()) "出库交接" else "国际出港出库交接") binding.viewModel = viewModel binding.activity = this diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/page/move/IntExpMoveActivity.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/page/move/IntExpMoveActivity.kt index 26dc0a1..e78fcff 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/page/move/IntExpMoveActivity.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/page/move/IntExpMoveActivity.kt @@ -1,171 +1,171 @@ -package com.lukouguoji.gjc.page.move - -import android.app.Activity -import android.content.Context -import android.content.Intent -import android.os.Bundle -import androidx.databinding.ObservableBoolean -import com.alibaba.android.arouter.facade.annotation.Route -import com.lukouguoji.gjc.R -import com.lukouguoji.gjc.databinding.ActivityIntExpMoveBinding -import com.lukouguoji.gjc.viewModel.IntExpMoveViewModel -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.ktx.showToast -import com.lukouguoji.module_base.model.ConfirmDialogModel -import com.lukouguoji.module_base.model.ScanModel -import com.lukouguoji.module_base.router.ARouterConstants -import com.lukouguoji.module_base.util.DeviceUtil - -/** - * 国际出港-出港移库 - */ -@Route(path = ARouterConstants.ACTIVITY_URL_INT_EXP_MOVE) -class IntExpMoveActivity : BaseBindingActivity() { - - // 布局 id 不区分设备,平板/手机由资源限定符自动选择: - // layout-sw600dp/activity_int_exp_move.xml(平板) / layout/activity_int_exp_move.xml(手机) - override fun layoutId() = R.layout.activity_int_exp_move - - override fun viewModelClass() = IntExpMoveViewModel::class.java - - /** 手机版筛选弹层显隐(仅 UI 状态,不涉及业务逻辑) */ - val filterPanelVisible = ObservableBoolean(false) - - override fun initOnCreate(savedInstanceState: Bundle?) { - setBackArrow("国际出港移库") - binding.viewModel = viewModel - binding.activity = this - - // 手机版专属数据:默认「待移库」Tab、Tab 角标计数、特码下拉 - // 平板端不调用,查询链路与请求次数与改造前完全一致 - if (DeviceUtil.isPhone()) { - viewModel.initPhoneExtras() - } - - initRecyclerView() - initListeners() - observeData() - } - - /** - * 初始化RecyclerView - */ - private fun initRecyclerView() { - viewModel.pageModel.bindSmartRefreshLayout( - binding.srl, - binding.rv, - viewModel, - this - ) - binding.rv.addOnItemClickListener(viewModel) - } - - /** - * 初始化监听器 - */ - private fun initListeners() { - // 移库按钮:btnMove 只存在于平板变体(手机版底部条走 setOnActionClick),故判空 - binding.btnMove?.setOnClickListener { - showMoveConfirmDialog() - } - } - - /** - * 观察数据变化 - */ - private fun observeData() { - // 监听item选择变化事件,更新全选状态 - FlowBus.with(ConstantEvent.EVENT_CHECK_CHANGED).observe(this) { - viewModel.onItemCheckChanged() - } - - // 监听刷新事件 - FlowBus.with(ConstantEvent.EVENT_REFRESH).observe(this) { - viewModel.refresh() - } - - // 初始加载数据 - viewModel.refresh() - } - - /** - * 扫码运单号 - */ - fun scanWaybill() { - ScanModel.startScan(this, Constant.RequestCode.WAYBILL) - } - - // ==================== 手机版专用交互(复用既有 ViewModel 字段,无新增业务逻辑) ==================== - - /** - * 手机版筛选弹层显隐切换 - */ - fun toggleFilterPanel() { - filterPanelVisible.set(!filterPanelVisible.get()) - } - - /** - * 手机版筛选:重置 - * - * 只清空弹层内的三个条件(承运人 / 运单类型 / 特码),不影响 Tab 与顶部搜索框。 - */ - fun resetFilter() { - viewModel.by1.value = "" - viewModel.awbType.value = "" - viewModel.spCode.value = "" - } - - /** - * 手机版筛选:确定 - */ - fun confirmFilter() { - filterPanelVisible.set(false) - viewModel.searchClick() - } - - /** - * 显示移库确认对话框 - * - * 手机版底部操作条通过 XML 的 setOnActionClick 调用,故为 public。 - */ - fun showMoveConfirmDialog() { - val selectedItems = viewModel.getSelectedItems() - - if (selectedItems.isEmpty()) { - showToast("请至少选择一条运单") - return - } - - ConfirmDialogModel( - message = "确定要移库选中的 ${selectedItems.size} 条运单吗?", - title = "移库确认" - ) { - viewModel.submitMove() - }.show() - } - - /** - * 扫码回调 - */ - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - if (requestCode == Constant.RequestCode.WAYBILL && resultCode == Activity.RESULT_OK) { - val code = data?.getStringExtra(Constant.Result.CODED_CONTENT) - viewModel.waybillNo.value = code - viewModel.searchClick() - } - } - - companion object { - @JvmStatic - fun start(context: Context) { - val starter = Intent(context, IntExpMoveActivity::class.java) - context.startActivity(starter) - } - } -} +package com.lukouguoji.gjc.page.move + +import android.app.Activity +import android.content.Context +import android.content.Intent +import android.os.Bundle +import androidx.databinding.ObservableBoolean +import com.alibaba.android.arouter.facade.annotation.Route +import com.lukouguoji.gjc.R +import com.lukouguoji.gjc.databinding.ActivityIntExpMoveBinding +import com.lukouguoji.gjc.viewModel.IntExpMoveViewModel +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.ktx.showToast +import com.lukouguoji.module_base.model.ConfirmDialogModel +import com.lukouguoji.module_base.model.ScanModel +import com.lukouguoji.module_base.router.ARouterConstants +import com.lukouguoji.module_base.util.DeviceUtil + +/** + * 国际出港-出港移库 + */ +@Route(path = ARouterConstants.ACTIVITY_URL_INT_EXP_MOVE) +class IntExpMoveActivity : BaseBindingActivity() { + + // 布局 id 不区分设备,平板/手机由资源限定符自动选择: + // layout-sw600dp/activity_int_exp_move.xml(平板) / layout/activity_int_exp_move.xml(手机) + override fun layoutId() = R.layout.activity_int_exp_move + + override fun viewModelClass() = IntExpMoveViewModel::class.java + + /** 手机版筛选弹层显隐(仅 UI 状态,不涉及业务逻辑) */ + val filterPanelVisible = ObservableBoolean(false) + + override fun initOnCreate(savedInstanceState: Bundle?) { + setBackArrow(if (DeviceUtil.isPhone()) "出港移库" else "国际出港移库") + binding.viewModel = viewModel + binding.activity = this + + // 手机版专属数据:默认「待移库」Tab、Tab 角标计数、特码下拉 + // 平板端不调用,查询链路与请求次数与改造前完全一致 + if (DeviceUtil.isPhone()) { + viewModel.initPhoneExtras() + } + + initRecyclerView() + initListeners() + observeData() + } + + /** + * 初始化RecyclerView + */ + private fun initRecyclerView() { + viewModel.pageModel.bindSmartRefreshLayout( + binding.srl, + binding.rv, + viewModel, + this + ) + binding.rv.addOnItemClickListener(viewModel) + } + + /** + * 初始化监听器 + */ + private fun initListeners() { + // 移库按钮:btnMove 只存在于平板变体(手机版底部条走 setOnActionClick),故判空 + binding.btnMove?.setOnClickListener { + showMoveConfirmDialog() + } + } + + /** + * 观察数据变化 + */ + private fun observeData() { + // 监听item选择变化事件,更新全选状态 + FlowBus.with(ConstantEvent.EVENT_CHECK_CHANGED).observe(this) { + viewModel.onItemCheckChanged() + } + + // 监听刷新事件 + FlowBus.with(ConstantEvent.EVENT_REFRESH).observe(this) { + viewModel.refresh() + } + + // 初始加载数据 + viewModel.refresh() + } + + /** + * 扫码运单号 + */ + fun scanWaybill() { + ScanModel.startScan(this, Constant.RequestCode.WAYBILL) + } + + // ==================== 手机版专用交互(复用既有 ViewModel 字段,无新增业务逻辑) ==================== + + /** + * 手机版筛选弹层显隐切换 + */ + fun toggleFilterPanel() { + filterPanelVisible.set(!filterPanelVisible.get()) + } + + /** + * 手机版筛选:重置 + * + * 只清空弹层内的三个条件(承运人 / 运单类型 / 特码),不影响 Tab 与顶部搜索框。 + */ + fun resetFilter() { + viewModel.by1.value = "" + viewModel.awbType.value = "" + viewModel.spCode.value = "" + } + + /** + * 手机版筛选:确定 + */ + fun confirmFilter() { + filterPanelVisible.set(false) + viewModel.searchClick() + } + + /** + * 显示移库确认对话框 + * + * 手机版底部操作条通过 XML 的 setOnActionClick 调用,故为 public。 + */ + fun showMoveConfirmDialog() { + val selectedItems = viewModel.getSelectedItems() + + if (selectedItems.isEmpty()) { + showToast("请至少选择一条运单") + return + } + + ConfirmDialogModel( + message = "确定要移库选中的 ${selectedItems.size} 条运单吗?", + title = "移库确认" + ) { + viewModel.submitMove() + }.show() + } + + /** + * 扫码回调 + */ + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + if (requestCode == Constant.RequestCode.WAYBILL && resultCode == Activity.RESULT_OK) { + val code = data?.getStringExtra(Constant.Result.CODED_CONTENT) + viewModel.waybillNo.value = code + viewModel.searchClick() + } + } + + companion object { + @JvmStatic + fun start(context: Context) { + val starter = Intent(context, IntExpMoveActivity::class.java) + context.startActivity(starter) + } + } +} diff --git a/module_gjc/src/main/res/layout/item_gjc_weighing.xml b/module_gjc/src/main/res/layout/item_gjc_weighing.xml index 12b55aa..643b6dd 100644 --- a/module_gjc/src/main/res/layout/item_gjc_weighing.xml +++ b/module_gjc/src/main/res/layout/item_gjc_weighing.xml @@ -75,23 +75,51 @@ android:layout_marginTop="12dp" android:orientation="horizontal"> - + android:gravity="center_vertical" + android:orientation="horizontal"> - + + + + + + + android:gravity="center_vertical" + android:orientation="horizontal"> + + + + + + @@ -102,23 +130,54 @@ android:layout_marginTop="8dp" android:orientation="horizontal"> - + android:gravity="center_vertical" + android:orientation="horizontal"> - + + + + + + + android:gravity="center_vertical" + android:orientation="horizontal"> + + + + + + diff --git a/module_gjc/src/main/res/layout/item_gjc_weighing_record.xml b/module_gjc/src/main/res/layout/item_gjc_weighing_record.xml index 8f23284..07fe776 100644 --- a/module_gjc/src/main/res/layout/item_gjc_weighing_record.xml +++ b/module_gjc/src/main/res/layout/item_gjc_weighing_record.xml @@ -56,14 +56,28 @@ - + android:gravity="center_vertical" + android:orientation="horizontal"> + + + + + +