fix: 修复图片上传字段语义颠倒及加载缺失鉴权头导致的 403

- 修正 UploadUtil 返回字段到 FileBean 的映射:
  newName 是原图(较大)、zipFileName 是缩略图(较小)
- 保证 bean.pic 存缩略图、bean.originalPic 存原图
- 全局 loadImage BindingAdapter 对 http(s) URL 自动包装
  GlideUrl + Authorization,避免 /file/getImg/ 接口 403
- ImageSelectViewHolder 缩略图带鉴权加载,点击预览传原图
- 覆盖国内/国际事故签证、国内进港移库/移交编辑页面
- CLAUDE.md 同步修正 UploadBean 字段语义文档

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-17 14:57:26 +08:00
parent 6ad7f0d3d4
commit 1157a0c4ed
8 changed files with 128 additions and 91 deletions

View File

@@ -75,23 +75,18 @@ class AccidentVisaDetailsViewModel : BaseViewModel(), IOnItemClickListener {
onSuccess = {
dataBean.value = it.data ?: AccidentVisaBean()
// 渲染图片
val list = dataBean.value!!.pic.split(",")
.filter { url -> url.isNotEmpty() }
.map { url ->
FileBean(MediaUtil.fillUrl(url), url)
}
val zipList = dataBean.value!!.originalPic.split(",")
.filter { url -> url.isNotEmpty() }
.map { url ->
FileBean(MediaUtil.fillUrl(url))
}
for ((index, fileBean) in list.withIndex()) {
val originalPic = zipList.get(index).path
list.get(index).originalPic = originalPic
// 渲染图片pic 存缩略图文件名originalPic 存原图文件名
val picList = dataBean.value!!.pic.split(",").filter { it.isNotEmpty() }
val originalPicList = dataBean.value!!.originalPic.split(",").filter { it.isNotEmpty() }
val list = picList.mapIndexed { index, picFilename ->
val originalFilename = originalPicList.getOrElse(index) { picFilename }
FileBean(
path = MediaUtil.fillUrl(picFilename),
url = picFilename,
originalPic = MediaUtil.fillUrl(originalFilename)
)
}
rv?.commonAdapter()
?.loadMore(list)
rv?.commonAdapter()?.loadMore(list)
}
}
}
@@ -110,8 +105,10 @@ class AccidentVisaDetailsViewModel : BaseViewModel(), IOnItemClickListener {
.filter { it.path.isNotEmpty() && it.url.isEmpty() }
.onEach {
val data = UploadUtil.upload(it.path).data
it.url = data?.newName ?: ""
it.originalPic = data?.zipFileName ?: ""
// UploadUtil 返回newName=原图(较大)zipFileName=缩略图(较小)
// FileBean.url 用作缩略图标识FileBean.originalPic 用作原图标识
it.url = data?.zipFileName ?: ""
it.originalPic = data?.newName ?: ""
}
.flowOn(Dispatchers.IO)
.onStart { showLoading() }
@@ -124,8 +121,8 @@ class AccidentVisaDetailsViewModel : BaseViewModel(), IOnItemClickListener {
val list =
(rv?.commonAdapter()?.items as List<FileBean>).filter { it.path.isNotEmpty() }
bean.picnumber = list.size.toString()
bean.originalPic = list.joinToString(separator = ",") { MediaUtil.removeUrl(it.url) }
bean.pic = list.joinToString(separator = ",") { MediaUtil.removeUrl(it.originalPic) }
bean.pic = list.joinToString(separator = ",") { MediaUtil.removeUrl(it.url) }
bean.originalPic = list.joinToString(separator = ",") { MediaUtil.removeUrl(it.originalPic) }
NetApply.api.anyPost(
url = if (pageType.value == DetailsPageType.Add) "GnAccidentVisa/saveVisa" else "GnAccidentVisa/updateVisa",