diff --git a/module_base/src/main/java/com/lukouguoji/module_base/http/net/Api.kt b/module_base/src/main/java/com/lukouguoji/module_base/http/net/Api.kt index 9462ab2..cfdaa6d 100644 --- a/module_base/src/main/java/com/lukouguoji/module_base/http/net/Api.kt +++ b/module_base/src/main/java/com/lukouguoji/module_base/http/net/Api.kt @@ -561,6 +561,13 @@ interface Api { @POST("IntExpAssemble/backfillWeight") suspend fun backfillIntExpAssembleWeight(@Body data: RequestBody): BaseResultBean + /** + * 国际出港组装 - 获取组装人列表 + * 接口路径: /IntExpAssemble/pageQueryAssembler + */ + @GET("IntExpAssemble/pageQueryAssembler") + suspend fun getIntExpAssemblerList(): BaseResultBean> + /** * 国际出港出库交接-分页查询 * 接口路径: /IntExpOutHandover/pageQuery diff --git a/module_base/src/main/res/drawable/bg_circle_gray.xml b/module_base/src/main/res/drawable/bg_circle_gray.xml index bfe12c0..3664088 100644 --- a/module_base/src/main/res/drawable/bg_circle_gray.xml +++ b/module_base/src/main/res/drawable/bg_circle_gray.xml @@ -2,6 +2,6 @@ - + diff --git a/module_base/src/main/res/drawable/bg_circle_green.xml b/module_base/src/main/res/drawable/bg_circle_green.xml new file mode 100644 index 0000000..1ec07b7 --- /dev/null +++ b/module_base/src/main/res/drawable/bg_circle_green.xml @@ -0,0 +1,7 @@ + + + + + + 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 6530ac5..3b8b5cf 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 @@ -32,10 +32,10 @@ class GjcWeighingStartActivity : /** * 启动开始计重页面 * @param context 上下文 - * @param maWbId 运单ID + * @param maWbId 运单ID,默认为0(新增模式) */ @JvmStatic - fun startForAdd(context: Context, maWbId: Long) { + 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/page/assemble/IntExpAssembleActivity.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/page/assemble/IntExpAssembleActivity.kt index 9d90df0..3b4abbc 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/page/assemble/IntExpAssembleActivity.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/page/assemble/IntExpAssembleActivity.kt @@ -26,6 +26,9 @@ class IntExpAssembleActivity : setBackArrow("出港组装") binding.viewModel = viewModel + // 初始化组装人下拉列表 + viewModel.initAssemblerList() + // 绑定分页 viewModel.pageModel.bindSmartRefreshLayout(binding.srl, binding.rv, viewModel, this) @@ -36,5 +39,8 @@ class IntExpAssembleActivity : FlowBus.with(ConstantEvent.EVENT_REFRESH).observe(this) { viewModel.refresh() } + + // 首次加载数据 + viewModel.refresh() } } diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/page/assemble/IntExpAssembleStartActivity.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/page/assemble/IntExpAssembleStartActivity.kt index bf1690c..f374faf 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/page/assemble/IntExpAssembleStartActivity.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/page/assemble/IntExpAssembleStartActivity.kt @@ -10,6 +10,8 @@ import com.lukouguoji.gjc.databinding.ActivityIntExpAssembleStartBinding import com.lukouguoji.gjc.viewModel.IntExpAssembleStartViewModel import com.lukouguoji.module_base.base.BaseBindingActivity import com.lukouguoji.module_base.base.CommonAdapter +import com.lukouguoji.module_base.interfaces.IOnItemClickListener +import com.lukouguoji.module_base.ktx.addOnItemClickListener import com.lukouguoji.module_base.router.ARouterConstants /** @@ -17,7 +19,8 @@ import com.lukouguoji.module_base.router.ARouterConstants */ @Route(path = ARouterConstants.ACTIVITY_URL_INT_EXP_ASSEMBLE_START) class IntExpAssembleStartActivity : - BaseBindingActivity() { + BaseBindingActivity(), + IOnItemClickListener { private var assembleInfoAdapter: CommonAdapter? = null private var assemblePositionAdapter: CommonAdapter? = null @@ -45,6 +48,9 @@ class IntExpAssembleStartActivity : // 加载模拟数据 viewModel.initMockData() + // 加载组装位置数据(从API) + viewModel.loadAssemblePosition() + // 观察数据变化 observeData() } @@ -70,6 +76,8 @@ class IntExpAssembleStartActivity : ) binding.rvAssemblePosition.layoutManager = LinearLayoutManager(this) binding.rvAssemblePosition.adapter = assemblePositionAdapter + // 添加点击监听器 + binding.rvAssemblePosition.addOnItemClickListener(this) // 右侧运单列表 waybillAdapter = CommonAdapter( @@ -97,4 +105,14 @@ class IntExpAssembleStartActivity : waybillAdapter?.refresh(list) } } + + /** + * 列表项点击事件 + */ + override fun onItemClick(position: Int, type: Int) { + when (type) { + 0 -> viewModel.onPositionItemClick(position) // 组装位置点击 + else -> {} + } + } } diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcWeighingViewModel.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcWeighingViewModel.kt index 7d081d7..cdf3e5c 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcWeighingViewModel.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcWeighingViewModel.kt @@ -104,9 +104,7 @@ class GjcWeighingViewModel : BasePageViewModel() { * 添加按钮点击(跳转到开始计重页面) */ fun addClick() { -// showToast("请从列表中选择一条待计重运单") - - GjcWeighingStartActivity.startForAdd(getTopActivity(), 123) + GjcWeighingStartActivity.startForAdd(getTopActivity()) } /** diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpAssembleStartViewModel.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpAssembleStartViewModel.kt index e1a6a22..eaa7eea 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpAssembleStartViewModel.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpAssembleStartViewModel.kt @@ -7,6 +7,8 @@ import com.lukouguoji.gjc.holder.AssemblePositionViewHolder import com.lukouguoji.gjc.holder.AssembleWaybillViewHolder import com.lukouguoji.module_base.base.BaseViewModel import com.lukouguoji.module_base.bean.* +import com.lukouguoji.module_base.http.net.NetApply +import com.lukouguoji.module_base.ktx.launchLoadingCollect import com.lukouguoji.module_base.ktx.showToast /** @@ -27,6 +29,9 @@ class IntExpAssembleStartViewModel : BaseViewModel() { val assemblePositionLayoutId = R.layout.item_assemble_position val assemblePositionViewHolder = AssemblePositionViewHolder::class.java + // ========== 选中的组装位置 ========== + val selectedPosition = MutableLiveData() + // ========== 右侧运单列表 ========== val waybillList = MutableLiveData>() val waybillLayoutId = R.layout.item_assemble_waybill @@ -99,25 +104,25 @@ class IntExpAssembleStartViewModel : BaseViewModel() { } ) - // 组装位置列表(左侧) - assemblePositionList.value = mutableListOf( - AssemblePositionBean().apply { - positionName = "组装区001" - isSelected = true - }, - AssemblePositionBean().apply { - positionName = "组装区002" - isSelected = false - }, - AssemblePositionBean().apply { - positionName = "组装区003" - isSelected = false - }, - AssemblePositionBean().apply { - positionName = "组装区004" - isSelected = false - } - ) + // 组装位置列表(左侧)- 已改为从API加载,不再使用模拟数据 + // assemblePositionList.value = mutableListOf( + // AssemblePositionBean().apply { + // positionName = "组装区001" + // isSelected = true + // }, + // AssemblePositionBean().apply { + // positionName = "组装区002" + // isSelected = false + // }, + // AssemblePositionBean().apply { + // positionName = "组装区003" + // isSelected = false + // }, + // AssemblePositionBean().apply { + // positionName = "组装区004" + // isSelected = false + // } + // ) // 运单列表(右侧) waybillList.value = mutableListOf( @@ -142,6 +147,48 @@ class IntExpAssembleStartViewModel : BaseViewModel() { ) } + /** + * 加载组装位置列表 + */ + fun loadAssemblePosition() { + launchLoadingCollect({ NetApply.api.getDictListByLocation("GJCLOAD") }) { + onSuccess = { result -> + val list = result.data?.mapIndexed { index, dictBean -> + AssemblePositionBean().apply { + positionName = dictBean.name + isSelected = (index == 0) // 默认选中第一项 + } + }?.toMutableList() ?: mutableListOf() + + assemblePositionList.value = list + + // 保存默认选中的第一项 + if (list.isNotEmpty()) { + selectedPosition.value = list[0] + } + } + } + } + + /** + * 组装位置点击(单选切换) + */ + fun onPositionItemClick(position: Int) { + val list = assemblePositionList.value ?: return + + // 取消所有选中状态 + list.forEach { it.isSelected = false } + + // 选中当前项 + if (position in list.indices) { + list[position].isSelected = true + selectedPosition.value = list[position] + } + + // 刷新列表 + assemblePositionList.value = list + } + /** * 扫码运单 */ diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpAssembleViewModel.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpAssembleViewModel.kt index ecae61c..4655fd0 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpAssembleViewModel.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpAssembleViewModel.kt @@ -39,6 +39,7 @@ class IntExpAssembleViewModel : BasePageViewModel() { ) ) val assembler = MutableLiveData("") // 组装人 + val assemblerList = MutableLiveData>(emptyList()) // 组装人列表 // ========== 适配器配置 ========== val itemViewHolder = IntExpAssembleViewHolder::class.java @@ -49,6 +50,21 @@ class IntExpAssembleViewModel : BasePageViewModel() { val totalPieces = MutableLiveData("0") // 总件数 val totalWeight = MutableLiveData("0") // 总重量 + /** + * 初始化组装人下拉列表 + */ + fun initAssemblerList() { + launchCollect({ NetApply.api.getIntExpAssemblerList() }) { + onSuccess = { result -> + val list = mutableListOf() + result.data?.forEach { name -> + list.add(KeyValue(name, name)) + } + assemblerList.value = list + } + } + } + /** * 搜索按钮点击 */ diff --git a/module_gjc/src/main/res/drawable/ic_success_circle.png b/module_gjc/src/main/res/drawable/ic_success_circle.png new file mode 100644 index 0000000..c33bdb3 Binary files /dev/null and b/module_gjc/src/main/res/drawable/ic_success_circle.png differ diff --git a/module_gjc/src/main/res/layout/activity_int_exp_assemble.xml b/module_gjc/src/main/res/layout/activity_int_exp_assemble.xml index 6f56cf1..942c7c9 100644 --- a/module_gjc/src/main/res/layout/activity_int_exp_assemble.xml +++ b/module_gjc/src/main/res/layout/activity_int_exp_assemble.xml @@ -73,11 +73,12 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" - hint='@{"请输入组装人"}' - type="@{SearchLayoutType.INPUT}" + hint='@{"请选择组装人"}' + list="@{viewModel.assemblerList}" + type="@{SearchLayoutType.SPINNER}" value="@={viewModel.assembler}" /> - + + - + + android:padding="4dp" + android:src="@drawable/img_add" /> + android:padding="4dp" + android:src="@drawable/img_delete" /> diff --git a/module_gjc/src/main/res/layout/item_assemble_info.xml b/module_gjc/src/main/res/layout/item_assemble_info.xml index a3eb62d..d9e8072 100644 --- a/module_gjc/src/main/res/layout/item_assemble_info.xml +++ b/module_gjc/src/main/res/layout/item_assemble_info.xml @@ -1,11 +1,15 @@ - + + + + @@ -14,23 +18,25 @@ + android:orientation="horizontal" + android:paddingHorizontal="8dp" + android:paddingVertical="6dp"> + android:textColor="@color/text_normal" + android:textSize="13sp" + android:visibility="@{bean.showIndex ? View.VISIBLE : View.GONE}" + tools:text="1" /> + android:textSize="14sp" /> + android:textSize="14sp" /> diff --git a/module_gjc/src/main/res/layout/item_assemble_position.xml b/module_gjc/src/main/res/layout/item_assemble_position.xml index adef427..a44dbf4 100644 --- a/module_gjc/src/main/res/layout/item_assemble_position.xml +++ b/module_gjc/src/main/res/layout/item_assemble_position.xml @@ -1,11 +1,15 @@ - + + + + @@ -14,26 +18,40 @@ + android:orientation="vertical"> - + android:background="@color/white" + android:gravity="center_vertical" + android:orientation="horizontal" + android:paddingHorizontal="8dp" + android:paddingVertical="12dp"> + + + + + + + + + + - -