From 3918ad64d6193c230ae913617c229da40d89479e Mon Sep 17 00:00:00 2001 From: YANGJIANKUAN Date: Thu, 26 Mar 2026 12:02:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E6=8E=A7=E4=BB=B6=E5=B9=B6=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E4=BA=8B=E6=95=85=E7=AD=BE=E8=AF=81=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 ImageSelectNewViewHolder 和 item_image_select_new 布局,支持正方形缩略图、 加号按钮始终在末尾、详情模式隐藏加号及"暂无图片"占位 - 国际事故签证编辑页和国内进港移交页应用新图片选择控件 - 修正事故签证字段:reweight → reWeight,opName/opDate → opId/opdate Co-Authored-By: Claude Opus 4.6 --- app/src/main/AndroidManifest.xml | 21 + .../stash/list/GnjMoveStashListViewHolder.kt | 52 +- .../res/layout/item_gnj_move_stash_list.xml | 524 ++++++++-------- .../bean/GjAccidentVisaEditBean.kt | 4 +- .../module_base/bean/GnjYiKuBean.kt | 20 +- .../bean/IntImpAccidentVisaBean.kt | 4 +- .../lukouguoji/module_base/http/net/Api.kt | 12 + .../impl/ImageSelectNewViewHolder.kt | 66 ++ .../module_base/router/ARouterConstants.kt | 1 + .../main/res/layout/item_image_select_new.xml | 48 ++ .../IntImpAccidentVisaEditViewModel.kt | 13 +- .../activity_int_imp_accident_visa_edit.xml | 21 +- .../res/layout/item_int_imp_accident_visa.xml | 4 +- .../yiku/handover/GnjYiKuHandoverActivity.kt | 64 ++ .../yiku/handover/GnjYiKuHandoverViewModel.kt | 136 +++++ .../page/yiku/list/GnjYiKuListViewHolder.kt | 58 +- .../res/layout/activity_gnj_yiku_handover.xml | 268 +++++++++ .../main/res/layout/item_gnj_yiku_list.xml | 568 ++++++++++-------- 18 files changed, 1311 insertions(+), 573 deletions(-) create mode 100644 module_base/src/main/java/com/lukouguoji/module_base/impl/ImageSelectNewViewHolder.kt create mode 100644 module_base/src/main/res/layout/item_image_select_new.xml create mode 100644 module_gnj/src/main/java/com/lukouguoji/gnj/page/yiku/handover/GnjYiKuHandoverActivity.kt create mode 100644 module_gnj/src/main/java/com/lukouguoji/gnj/page/yiku/handover/GnjYiKuHandoverViewModel.kt create mode 100644 module_gnj/src/main/res/layout/activity_gnj_yiku_handover.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index cca2a4f..932eace 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -383,6 +383,27 @@ android:configChanges="orientation|keyboardHidden" android:screenOrientation="userLandscape"/> + + + + + (view) { - - override fun onBind(item: Any?, position: Int) { - val bean = getItemBean(item)!! - binding.bean = bean - - binding.ivIcon.setOnClickListener { - bean.checked.set(!bean.checked.get()) - } - } - -} \ No newline at end of file +package com.lukouguoji.aerologic.page.gnj.move.stash.list + +import android.view.View +import com.lukouguoji.aerologic.databinding.ItemGnjMoveStashListBinding +import com.lukouguoji.gnj.page.yiku.handover.GnjYiKuHandoverActivity +import com.lukouguoji.module_base.base.BaseViewHolder +import com.lukouguoji.module_base.bean.MoveStashBean + +class GnjMoveStashListViewHolder(view: View) : + BaseViewHolder(view) { + + override fun onBind(item: Any?, position: Int) { + val bean = getItemBean(item)!! + binding.bean = bean + + binding.ivIcon.setOnClickListener { + bean.checked.set(!bean.checked.get()) + } + + // 点击列表项进入移交详情 + binding.ll.setOnClickListener { + GnjYiKuHandoverActivity.startForDetails(itemView.context, bean.mawbId) + } + + // 侧滑菜单 - 编辑按钮 + binding.btnEdit.setOnClickListener { + binding.swipeMenu.quickClose() + GnjYiKuHandoverActivity.startForEdit(itemView.context, bean.mawbId) + } + } +} diff --git a/app/src/main/res/layout/item_gnj_move_stash_list.xml b/app/src/main/res/layout/item_gnj_move_stash_list.xml index 88824cf..7175955 100644 --- a/app/src/main/res/layout/item_gnj_move_stash_list.xml +++ b/app/src/main/res/layout/item_gnj_move_stash_list.xml @@ -1,245 +1,279 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/module_base/src/main/java/com/lukouguoji/module_base/bean/GjAccidentVisaEditBean.kt b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjAccidentVisaEditBean.kt index bb565fc..bb92e2e 100644 --- a/module_base/src/main/java/com/lukouguoji/module_base/bean/GjAccidentVisaEditBean.kt +++ b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjAccidentVisaEditBean.kt @@ -10,12 +10,12 @@ class GjAccidentVisaEditBean { var dpc: String = "" // 不正常件数 var pc: String = "" // 运单总件数 var weight: String = "" // 运单总重量 - var reweight: String = "" // 复称重量 + var reWeight: String = "" // 复称重量 var goods: String = "" // 品名 var opacking: String = "" // 外包装 var damage: String = "" // 包装破损情况 var condition: String = "" // 内容物情况 - var problem: String = "" // 不正常类型 + var kdamage: String = "" // 不正常类型 var seachDate: String = "" // 发现时间 var photo: String = "" // 图片是否留底 var remarks: String = "" // 备注 diff --git a/module_base/src/main/java/com/lukouguoji/module_base/bean/GnjYiKuBean.kt b/module_base/src/main/java/com/lukouguoji/module_base/bean/GnjYiKuBean.kt index 9d81e23..3edb0a6 100644 --- a/module_base/src/main/java/com/lukouguoji/module_base/bean/GnjYiKuBean.kt +++ b/module_base/src/main/java/com/lukouguoji/module_base/bean/GnjYiKuBean.kt @@ -16,14 +16,19 @@ class GnjYiKuBean : ICheck { var agentCode: String = "" // 代理人 var goods: String = "" // 品名 var flight: String = "" // 进港航班(格式: 20240712/MU2023) - var route: String = "" // 航程(格式: LAX-PEK-HFE) + var route: String = "" // 航程(格式: LAX-PEK-HFE)(旧接口字段) + var range: String = "" // 航程(格式: LAX-PEK-HFE)(GnjMawb 接口字段) var origin: String = "" // 始发港 var dest: String = "" // 目的港 var awbType: String = "" // 运单类型(转国际进港/转国内出港等) - var telegramNo: String = "" // 电报号 + var telegramNo: String = "" // 电报号(旧接口字段) + var telegramId: String = "" // 电报号(GnjMawb 接口字段) var remark: String = "" // 备注 var handoverStatus: String = "" // 移交状态(未移交/已移交) var images: String = "" // 交接图片(逗号分隔的URL列表) + var originalPic: String = "" // 交接图片原图地址 + var pic: String = "" // 交接图片缩略图 + var picNumber: String = "" // 交接图片数量 var fdate: String = "" // 航班日期 var fno: String = "" // 航班号 var businessType: String = "" // 业务类型 @@ -41,10 +46,17 @@ class GnjYiKuBean : ICheck { * 获取图片列表 */ fun getImageList(): List { - return if (images.isNotEmpty()) { - images.split(",").filter { it.isNotEmpty() } + val source = originalPic.ifEmpty { images } + return if (source.isNotEmpty()) { + source.split(",").filter { it.isNotEmpty() } } else { emptyList() } } + + /** 获取航程(兼容新旧接口) */ + fun getRouteDisplay(): String = range.ifEmpty { route } + + /** 获取电报号(兼容新旧接口) */ + fun getTelegramDisplay(): String = telegramId.ifEmpty { telegramNo } } diff --git a/module_base/src/main/java/com/lukouguoji/module_base/bean/IntImpAccidentVisaBean.kt b/module_base/src/main/java/com/lukouguoji/module_base/bean/IntImpAccidentVisaBean.kt index 9689230..c9ce499 100644 --- a/module_base/src/main/java/com/lukouguoji/module_base/bean/IntImpAccidentVisaBean.kt +++ b/module_base/src/main/java/com/lukouguoji/module_base/bean/IntImpAccidentVisaBean.kt @@ -12,8 +12,8 @@ class IntImpAccidentVisaBean { var totalPc: Int = 0 // 运单总件数 var totalWeight: Double = 0.0 // 运单总重量 var abnPc: Int = 0 // 不正常件数 - var opName: String = "" // 经办人 - var opDate: String = "" // 经办时间 + var opId: String = "" // 经办人 + var opdate: String = "" // 经办时间 val checked: ObservableBoolean = ObservableBoolean(false) 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 4f18e5e..3968ae7 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 @@ -1744,6 +1744,18 @@ interface Api { @POST("DomImpMove/save") suspend fun saveGnjYiKu(@Body data: RequestBody): BaseResultBean + /** + * 获取-国内进港移库-详情(新接口) + */ + @GET("DomImpMove/detail") + suspend fun getGnjMoveStashDetail(@Query("mawbId") mawbId: String): BaseResultBean + + /** + * 编辑-国内进港移库(新接口) + */ + @POST("DomImpMove/modify") + suspend fun modifyGnjMoveStash(@Body data: RequestBody): BaseResultBean + /** * 执行-国内进港移库操作 */ diff --git a/module_base/src/main/java/com/lukouguoji/module_base/impl/ImageSelectNewViewHolder.kt b/module_base/src/main/java/com/lukouguoji/module_base/impl/ImageSelectNewViewHolder.kt new file mode 100644 index 0000000..5fbaca1 --- /dev/null +++ b/module_base/src/main/java/com/lukouguoji/module_base/impl/ImageSelectNewViewHolder.kt @@ -0,0 +1,66 @@ +package com.lukouguoji.module_base.impl + +import android.view.View +import android.view.ViewTreeObserver +import com.lukouguoji.module_base.adapter.loadImage +import com.lukouguoji.module_base.base.BaseViewHolder +import com.lukouguoji.module_base.bean.FileBean +import com.lukouguoji.module_base.databinding.ItemImageSelectNewBinding +import com.lukouguoji.module_base.ktx.commonAdapter +import com.lukouguoji.module_base.ktx.logd +import com.lukouguoji.module_base.ktx.loge +import com.lukouguoji.module_base.ui.page.preview.PreviewActivity +import com.lukouguoji.module_base.util.MediaUtil + +class ImageSelectNewViewHolder(view: View) : BaseViewHolder(view) { + + override fun onBind(item: Any?, position: Int) { + val bean = getItemBean(item)!! + binding.bean = bean + + // 让高度等于宽度,实现正方形 + binding.rl.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener { + override fun onGlobalLayout() { + binding.rl.viewTreeObserver.removeOnGlobalLayoutListener(this) + val width = binding.rl.width + if (width > 0 && binding.rl.height != width) { + val lp = binding.rl.layoutParams + lp.height = width + binding.rl.layoutParams = lp + } + } + }) + + binding.rl.setOnClickListener { + if (bean.path.isEmpty()) { + MediaUtil.pickImage(itemView.context, maxNum = 10) { results -> + val adapter = getRecyclerView()?.commonAdapter() ?: return@pickImage + results.forEach { result -> + logd("添加了图片 : ${result.realPath}") + // 在加号按钮(最后一项)之前插入图片 + val insertPos = adapter.items.size - 1 + adapter.items.add(insertPos, FileBean(path = result.realPath)) + adapter.notifyItemInserted(insertPos) + } + } + } else { + PreviewActivity.start(itemView.context, listOf(bean)) + } + } + + // 长按事件 + binding.rl.setOnLongClickListener { + clickListener?.onItemClick(bindingAdapterPosition, binding.rl.id) + true + } + + notifyItemClick(position, binding.ivDelete) + + if (bean.isOnlineResource()) { + loge("开始下载 : ${bean.path}") + bean.download { + loadImage(binding.iv, it) + } + } + } +} diff --git a/module_base/src/main/java/com/lukouguoji/module_base/router/ARouterConstants.kt b/module_base/src/main/java/com/lukouguoji/module_base/router/ARouterConstants.kt index d2c53de..ff0003c 100644 --- a/module_base/src/main/java/com/lukouguoji/module_base/router/ARouterConstants.kt +++ b/module_base/src/main/java/com/lukouguoji/module_base/router/ARouterConstants.kt @@ -106,6 +106,7 @@ object ARouterConstants { const val ACTIVITY_URL_GNJ_YIKU_LIST = "/gnj/GnjYiKuListActivity" //国内进港 移库列表 const val ACTIVITY_URL_GNJ_YIKU_DETAILS = "/gnj/GnjYiKuDetailsActivity" //国内进港 移库详情 const val ACTIVITY_URL_GNJ_YIKU_EDIT = "/gnj/GnjYiKuEditActivity" //国内进港 移库编辑 + const val ACTIVITY_URL_GNJ_YIKU_HANDOVER = "/gnj/GnjYiKuHandoverActivity" //国内进港 移交编辑/详情 ///////////////// 国际出港模块 /** diff --git a/module_base/src/main/res/layout/item_image_select_new.xml b/module_base/src/main/res/layout/item_image_select_new.xml new file mode 100644 index 0000000..3c51301 --- /dev/null +++ b/module_base/src/main/res/layout/item_image_select_new.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpAccidentVisaEditViewModel.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpAccidentVisaEditViewModel.kt index 9fc44a7..035fc9a 100644 --- a/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpAccidentVisaEditViewModel.kt +++ b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpAccidentVisaEditViewModel.kt @@ -14,7 +14,7 @@ import com.lukouguoji.module_base.common.ConstantEvent import com.lukouguoji.module_base.common.DetailsPageType import com.lukouguoji.module_base.http.net.NetApply import com.lukouguoji.module_base.impl.FlowBus -import com.lukouguoji.module_base.impl.ImageSelectViewHolder +import com.lukouguoji.module_base.impl.ImageSelectNewViewHolder import com.lukouguoji.module_base.interfaces.IOnItemClickListener import com.lukouguoji.module_base.ktx.commonAdapter import com.lukouguoji.module_base.ktx.formatDate @@ -51,8 +51,8 @@ class IntImpAccidentVisaEditViewModel : BaseViewModel(), IOnItemClickListener { val dataBean = MutableLiveData(GjAccidentVisaEditBean()) // 图片列表 - val itemLayoutId = R.layout.item_image_select - val itemViewHolder = ImageSelectViewHolder::class.java + val itemLayoutId = R.layout.item_image_select_new + val itemViewHolder = ImageSelectNewViewHolder::class.java var rv: RecyclerView? = null // 下拉列表 @@ -73,6 +73,8 @@ class IntImpAccidentVisaEditViewModel : BaseViewModel(), IOnItemClickListener { // 是否为详情模式(只读) val isDetailMode = MutableLiveData(false) + // 详情模式下无图片时显示占位提示 + val showNoImage = MutableLiveData(false) fun initOnCreate(intent: Intent) { id = intent.getLongExtra(Constant.Key.ID, 0) @@ -156,6 +158,11 @@ class IntImpAccidentVisaEditViewModel : BaseViewModel(), IOnItemClickListener { } } rv?.commonAdapter()?.loadMore(picList) + + // 详情模式下无图片时显示占位提示 + if (isDetailMode.value == true && picList.isEmpty()) { + showNoImage.value = true + } } } } diff --git a/module_gjj/src/main/res/layout/activity_int_imp_accident_visa_edit.xml b/module_gjj/src/main/res/layout/activity_int_imp_accident_visa_edit.xml index 65e7ae4..28b3c44 100644 --- a/module_gjj/src/main/res/layout/activity_int_imp_accident_visa_edit.xml +++ b/module_gjj/src/main/res/layout/activity_int_imp_accident_visa_edit.xml @@ -185,7 +185,7 @@ title='@{"复称重量"}' titleLength="@{6}" type="@{DataLayoutType.INPUT}" - value='@={viewModel.dataBean.reweight}' /> + value='@={viewModel.dataBean.reWeight}' /> + value='@={viewModel.dataBean.kdamage}' /> @@ -339,8 +339,21 @@ android:layout_height="wrap_content" android:layout_marginTop="10dp" app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" - app:spanCount="4" - tools:listitem="@layout/item_image_select" /> + app:spanCount="6" + tools:listitem="@layout/item_image_select_new" /> + + + @@ -284,7 +284,7 @@ diff --git a/module_gnj/src/main/java/com/lukouguoji/gnj/page/yiku/handover/GnjYiKuHandoverActivity.kt b/module_gnj/src/main/java/com/lukouguoji/gnj/page/yiku/handover/GnjYiKuHandoverActivity.kt new file mode 100644 index 0000000..ecd9919 --- /dev/null +++ b/module_gnj/src/main/java/com/lukouguoji/gnj/page/yiku/handover/GnjYiKuHandoverActivity.kt @@ -0,0 +1,64 @@ +package com.lukouguoji.gnj.page.yiku.handover + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import com.alibaba.android.arouter.facade.annotation.Route +import com.lukouguoji.gnj.R +import com.lukouguoji.gnj.databinding.ActivityGnjYikuHandoverBinding +import com.lukouguoji.module_base.base.BaseBindingActivity +import com.lukouguoji.module_base.common.Constant +import com.lukouguoji.module_base.common.DetailsPageType +import com.lukouguoji.module_base.ktx.addOnItemClickListener +import com.lukouguoji.module_base.ktx.commonAdapter +import com.lukouguoji.module_base.router.ARouterConstants + +/** + * 国内进港移交编辑/详情页 + */ +@Route(path = ARouterConstants.ACTIVITY_URL_GNJ_YIKU_HANDOVER) +class GnjYiKuHandoverActivity : + BaseBindingActivity() { + + override fun layoutId() = R.layout.activity_gnj_yiku_handover + + override fun viewModelClass() = GnjYiKuHandoverViewModel::class.java + + override fun initOnCreate(savedInstanceState: Bundle?) { + viewModel.initOnCreated(intent) + + when (viewModel.pageType.value) { + DetailsPageType.Modify -> setBackArrow("国内进港移交编辑") + DetailsPageType.Details -> setBackArrow("国内进港移交详情") + else -> setBackArrow("国内进港移交") + } + + binding.viewModel = viewModel + + // 绑定图片列表点击事件(编辑模式下可删除图片) + binding.rvImages.addOnItemClickListener(viewModel) + + // 监听图片列表变化并更新 adapter + viewModel.imageList.observe(this) { images -> + binding.rvImages.commonAdapter()?.refresh(images) + } + } + + companion object { + @JvmStatic + fun startForEdit(context: Context, id: String) { + val starter = Intent(context, GnjYiKuHandoverActivity::class.java) + .putExtra(Constant.Key.PAGE_TYPE, DetailsPageType.Modify.name) + .putExtra(Constant.Key.ID, id) + context.startActivity(starter) + } + + @JvmStatic + fun startForDetails(context: Context, id: String) { + val starter = Intent(context, GnjYiKuHandoverActivity::class.java) + .putExtra(Constant.Key.PAGE_TYPE, DetailsPageType.Details.name) + .putExtra(Constant.Key.ID, id) + context.startActivity(starter) + } + } +} diff --git a/module_gnj/src/main/java/com/lukouguoji/gnj/page/yiku/handover/GnjYiKuHandoverViewModel.kt b/module_gnj/src/main/java/com/lukouguoji/gnj/page/yiku/handover/GnjYiKuHandoverViewModel.kt new file mode 100644 index 0000000..a96b63d --- /dev/null +++ b/module_gnj/src/main/java/com/lukouguoji/gnj/page/yiku/handover/GnjYiKuHandoverViewModel.kt @@ -0,0 +1,136 @@ +package com.lukouguoji.gnj.page.yiku.handover + +import android.content.Intent +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.viewModelScope +import com.lukouguoji.gnj.R +import com.lukouguoji.module_base.base.BaseViewModel +import com.lukouguoji.module_base.bean.FileBean +import com.lukouguoji.module_base.bean.GnjYiKuBean +import com.lukouguoji.module_base.common.Constant +import com.lukouguoji.module_base.common.ConstantEvent +import com.lukouguoji.module_base.common.DetailsPageType +import com.lukouguoji.module_base.http.net.NetApply +import com.lukouguoji.module_base.impl.FlowBus +import com.lukouguoji.module_base.impl.ImageSelectNewViewHolder +import com.lukouguoji.module_base.interfaces.IOnItemClickListener +import com.lukouguoji.module_base.ktx.launchLoadingCollect +import com.lukouguoji.module_base.ktx.showToast +import com.lukouguoji.module_base.ktx.toRequestBody +import com.lukouguoji.module_base.util.UploadUtil +import kotlinx.coroutines.launch + +/** + * 国内进港移交编辑/详情 ViewModel + */ +class GnjYiKuHandoverViewModel : BaseViewModel(), IOnItemClickListener { + + val pageType = MutableLiveData(DetailsPageType.Modify) + var mawbId = "" + + val dataBean = MutableLiveData(GnjYiKuBean()) + + // 图片列表 + val imageList = MutableLiveData>(mutableListOf()) + + // 图片适配器配置 + val imageItemLayoutId = R.layout.item_image_select_new + val imageItemViewHolder = ImageSelectNewViewHolder::class.java + + // 详情模式下无图片时显示占位提示 + val showNoImage = MutableLiveData(false) + + fun initOnCreated(intent: Intent) { + pageType.value = DetailsPageType.valueOf( + intent.getStringExtra(Constant.Key.PAGE_TYPE) ?: DetailsPageType.Modify.name + ) + mawbId = intent.getStringExtra(Constant.Key.ID) ?: "" + loadData() + } + + private fun loadData() { + launchLoadingCollect({ + NetApply.api.getGnjMoveStashDetail(mawbId) + }) { + onSuccess = { + val bean = it.data ?: GnjYiKuBean() + dataBean.value = bean + + // 处理图片列表 + val images = bean.getImageList().map { url -> + FileBean(path = url) + }.toMutableList() + + // 编辑模式添加空 FileBean 用于显示"添加照片"按钮 + if (pageType.value == DetailsPageType.Modify) { + images.add(FileBean()) + } + + imageList.value = images + + // 详情模式下无图片时显示占位提示 + if (pageType.value == DetailsPageType.Details && bean.getImageList().isEmpty()) { + showNoImage.value = true + } + } + } + } + + /** + * 提交保存(只保存备注和图片) + */ + fun submit() { + val bean = dataBean.value ?: return + + // 获取所有非空图片 + val images = imageList.value!!.filter { it.path.isNotEmpty() } + + if (images.size > 7) { + showToast("最多上传7张图片") + return + } + + launchLoadingCollect({ + // 上传图片 + val uploadedUrls = mutableListOf() + images.forEach { fileBean -> + if (fileBean.path.startsWith("http")) { + uploadedUrls.add(fileBean.path) + } else { + val result = UploadUtil.upload(fileBean.path) + if (result.verifySuccess()) { + uploadedUrls.add(result.data?.newName ?: "") + } + } + } + + // 提交(只更新备注和图片) + val params = mapOf( + "mawbId" to mawbId, + "remark" to bean.remark, + "originalPic" to uploadedUrls.joinToString(","), + ).toRequestBody(removeEmptyOrNull = true) + + NetApply.api.modifyGnjMoveStash(params) + }) { + onSuccess = { + showToast("保存成功") + viewModelScope.launch { + FlowBus.with(ConstantEvent.EVENT_REFRESH_GNJ_YIKU_LIST).emit("refresh") + } + getTopActivity().finish() + } + } + } + + /** + * 处理图片删除点击事件 + */ + override fun onItemClick(position: Int, type: Int) { + val list = imageList.value!! + if (type == R.id.iv_delete && position < list.size) { + list.removeAt(position) + imageList.value = list + } + } +} diff --git a/module_gnj/src/main/java/com/lukouguoji/gnj/page/yiku/list/GnjYiKuListViewHolder.kt b/module_gnj/src/main/java/com/lukouguoji/gnj/page/yiku/list/GnjYiKuListViewHolder.kt index 60c25c2..1d3f9d7 100644 --- a/module_gnj/src/main/java/com/lukouguoji/gnj/page/yiku/list/GnjYiKuListViewHolder.kt +++ b/module_gnj/src/main/java/com/lukouguoji/gnj/page/yiku/list/GnjYiKuListViewHolder.kt @@ -1,23 +1,35 @@ -package com.lukouguoji.gnj.page.yiku.list - -import android.view.View -import com.lukouguoji.gnj.databinding.ItemGnjYikuListBinding -import com.lukouguoji.module_base.base.BaseViewHolder -import com.lukouguoji.module_base.bean.GnjYiKuBean - -/** - * 国内进港移库列表 ViewHolder - */ -class GnjYiKuListViewHolder(view: View) : - BaseViewHolder(view) { - - override fun onBind(item: Any?, position: Int) { - val bean = getItemBean(item)!! - binding.bean = bean - - // 点击checkbox切换选中状态 - binding.ivIcon.setOnClickListener { - bean.checked.set(!bean.checked.get()) - } - } -} +package com.lukouguoji.gnj.page.yiku.list + +import android.view.View +import com.lukouguoji.gnj.databinding.ItemGnjYikuListBinding +import com.lukouguoji.gnj.page.yiku.handover.GnjYiKuHandoverActivity +import com.lukouguoji.module_base.base.BaseViewHolder +import com.lukouguoji.module_base.bean.GnjYiKuBean + +/** + * 国内进港移库列表 ViewHolder + */ +class GnjYiKuListViewHolder(view: View) : + BaseViewHolder(view) { + + override fun onBind(item: Any?, position: Int) { + val bean = getItemBean(item)!! + binding.bean = bean + + // 点击 checkbox 切换选中状态 + binding.ivIcon.setOnClickListener { + bean.checked.set(!bean.checked.get()) + } + + // 点击列表项进入移交详情 + binding.ll.setOnClickListener { + GnjYiKuHandoverActivity.startForDetails(itemView.context, bean.id) + } + + // 侧滑菜单 - 编辑按钮 + binding.btnEdit.setOnClickListener { + binding.swipeMenu.quickClose() + GnjYiKuHandoverActivity.startForEdit(itemView.context, bean.id) + } + } +} diff --git a/module_gnj/src/main/res/layout/activity_gnj_yiku_handover.xml b/module_gnj/src/main/res/layout/activity_gnj_yiku_handover.xml new file mode 100644 index 0000000..8708842 --- /dev/null +++ b/module_gnj/src/main/res/layout/activity_gnj_yiku_handover.xml @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/module_gnj/src/main/res/layout/item_gnj_yiku_list.xml b/module_gnj/src/main/res/layout/item_gnj_yiku_list.xml index f506515..e391445 100644 --- a/module_gnj/src/main/res/layout/item_gnj_yiku_list.xml +++ b/module_gnj/src/main/res/layout/item_gnj_yiku_list.xml @@ -1,267 +1,301 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +