feat: 完成国际出港移库/出库交接页面5.5寸手机端适配

- 落地手机端双形态适配框架:同名布局+资源限定符(layout/手机、
  layout-sw600dp/平板)自动切换,DeviceUtil 设备形态判定,7个
  手机版公共组件(PhoneSearchBar/StatusTab/DataLayout/FilterPanel/
  BottomBar/StatBox/KvItem)
- 完成「国际出港移库」「国际出港出库交接」两页手机端适配,新增
  各自详情页(IntExpMoveDetailActivity/IntExpOutHandoverDetailActivity)
- 手机端首页菜单接入"出港移库""出库交接"入口
- 修复手机端进入页面先横屏后转竖屏的闪屏问题:Manifest 全项目
  192 处改为 screenOrientation="unspecified",由 BaseActivity
  按设备形态运行时锁定方向
- 修复该方案的中间版本在平板端引入的回归(先竖后横 + UI放大1.6倍)
- AutoSize 补充手机竖屏 390×844 设计基准
- 修复 CHANGELOG.md 因脚本异常导致的内容重复损坏(膨胀至12万行),
  恢复正常结构并补充本次变更记录

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-29 14:18:29 +08:00
parent 9c4588e47e
commit db062c8ee3
134 changed files with 19602 additions and 2965 deletions

View File

@@ -0,0 +1,715 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8"/>
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport"/>
<title>出库交接 - 移动端原型</title>
<!-- Tailwind CSS -->
<script src="https://modao.cc/agent-py/static/source/js/tailwindcss.js"></script>
<!-- Iconify -->
<script src="https://modao.cc/agent-py/static/source/js/iconify-icon.min.js"></script>
<style>
@font-face {
font-family: 'PingFang SC';
src: local('PingFang SC');
}
body {
font-family: 'PingFang SC', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
background-color: #e2e8f0;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
margin: 0;
}
/* 模拟手机容器 */
.phone-container {
width: 375px;
height: 812px;
background-color: #f5f6fa;
position: relative;
overflow: hidden;
display: flex;
flex-direction: column;
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
border: 8px solid #1a1a1a;
border-radius: 40px;
}
/* 隐藏滚动条但保留功能 */
.no-scrollbar::-webkit-scrollbar {
display: none;
}
.no-scrollbar {
-ms-overflow-style: none;
scrollbar-width: none;
}
/* 页面切换动画 */
.page {
display: none;
flex-direction: column;
height: 100%;
}
.page.active {
display: flex;
}
/* 按钮点击态 */
.btn-active:active {
opacity: 0.7;
transform: scale(0.98);
}
/* 复选框样式 */
.custom-checkbox {
appearance: none;
width: 20px;
height: 20px;
border: 2px solid #cbd5e1;
border-radius: 4px;
outline: none;
cursor: pointer;
position: relative;
transition: all 0.2s;
flex-shrink: 0;
background-color: white;
}
.custom-checkbox:checked {
background-color: #2563EB;
border-color: #2563EB;
}
.custom-checkbox:checked::after {
content: '';
position: absolute;
left: 6px;
top: 2px;
width: 5px;
height: 10px;
border: solid white;
border-width: 0 2px 2px 0;
transform: rotate(45deg);
}
.custom-checkbox-round {
appearance: none;
width: 20px;
height: 20px;
border: 2px solid #cbd5e1;
border-radius: 50%;
outline: none;
cursor: pointer;
position: relative;
transition: all 0.2s;
flex-shrink: 0;
background-color: white;
}
.custom-checkbox-round:checked {
background-color: #2563EB;
border-color: #2563EB;
}
.custom-checkbox-round:checked::after {
content: '';
position: absolute;
left: 6px;
top: 2px;
width: 5px;
height: 10px;
border: solid white;
border-width: 0 2px 2px 0;
transform: rotate(45deg);
}
/* 卡片选中样式已移除 */
</style>
</head>
<body>
<div class="phone-container">
<!-- 状态栏模拟 -->
<div class="h-10 w-full flex justify-between items-center px-8 flex-none bg-[#2563EB] text-white">
<span class="text-xs font-semibold">09:41</span>
<div class="flex space-x-1 items-center">
<iconify-icon icon="mdi:signal" width="14"></iconify-icon>
<iconify-icon icon="mdi:wifi" width="14"></iconify-icon>
<iconify-icon icon="mdi:battery" width="18"></iconify-icon>
</div>
</div>
<!-- 页面1: 货运列表首页 -->
<div class="page active" id="page-home">
<!-- 顶部导航 -->
<div class="bg-[#2563EB] text-white h-12 flex items-center justify-between px-4 flex-none">
<div class="flex items-center btn-active" onclick="alert('返回首页')">
<iconify-icon icon="mdi:chevron-left" width="28"></iconify-icon>
<span class="text-sm font-bold -ml-1">返回</span>
</div>
<h1 class="text-lg font-medium">出库交接</h1>
<div class="w-16"></div>
</div>
<!-- 内容滚动区 -->
<div class="flex-1 overflow-y-auto no-scrollbar pb-24">
<!-- 搜索栏 -->
<section class="px-4 pt-4 pb-3 bg-white">
<div class="flex items-center gap-2">
<div class="flex items-center bg-white border border-gray-200 shadow-sm rounded-[12px] h-10 px-3 gap-2 flex-1">
<iconify-icon class="text-gray-500 text-[14px] text-lg flex-none" icon="mdi:magnify"></iconify-icon>
<input class="flex-1 bg-transparent text-[14px] text-gray-800 placeholder-gray-400 outline-none border-none rounded-lg px-2" placeholder="搜索ULD编号" type="text"/>
<button class="flex-none text-blue-500">
<iconify-icon class="text-lg" icon="mdi:qrcode-scan"></iconify-icon>
</button>
</div>
<button class="bg-white p-2.5 rounded-full shadow-sm border border-gray-200 text-[#2563EB] flex items-center justify-center flex-none" onclick="toggleFilterDrawer(true)">
<iconify-icon class="text-xl" icon="mdi:filter-variant"></iconify-icon>
</button>
</div>
</section>
<!-- 子Tab切换栏 -->
<div class="flex bg-white border-b sticky top-0 z-20">
<button class="flex-1 py-3 text-sm font-bold text-[#1F2937] border-b-2 border-[#1F2937] transition-all" id="tab-pending" onclick="switchTab('pending')">
待交接 <span class="bg-[#DBEAF6] text-[#2563EB] text-[11px] font-medium px-1.5 py-0.5 rounded-md ml-1.5">3</span>
</button>
<button class="flex-1 py-3 text-sm font-bold text-gray-500 text-[14px] border-b-2 border-transparent transition-all" id="tab-shipped" onclick="switchTab('shipped')">
已交接 <span class="bg-[#DBEAF6] text-[#2563EB] text-[11px] font-medium px-1.5 py-0.5 rounded-md ml-1.5">3</span>
</button>
</div>
<!-- 列表内容 -->
<div class="p-3 pt-4 space-y-3" id="list-pending">
<!-- 卡片 1 -->
<div class="pending-card bg-white rounded-xl shadow-sm p-4 mb-3 overflow-hidden">
<!-- 顶部行 -->
<div class="flex justify-between items-center">
<div class="flex items-center gap-2">
<input class="item-checkbox custom-checkbox-round flex-none" onclick="handleCheckboxClick(this, event)" type="checkbox"/>
<div class="text-[#2563EB] text-[15px] font-bold">PMC90901CZ</div>
</div>
<div class="bg-green-100 text-green-600 text-[11px] px-2 h-5 flex items-center rounded-[6px] font-medium">IMP代码</div>
</div>
<!-- 航班信息行 -->
<div class="mt-3 mb-3 flex items-center gap-1">
<iconify-icon class="text-gray-500 text-[14px]" icon="mdi:airplane"></iconify-icon>
<span class="text-[#6B7280] text-[13px]">航班信息20260706/MU1111</span>
</div>
<!-- 统计框 -->
<div class="bg-[#F3F4F6] rounded-lg p-3 grid grid-cols-3 text-center">
<div class="flex flex-col">
<span class="text-[#9CA3AF] text-[11px]">架子车号</span>
<span class="text-[#1F2937] text-[14px] font-semibold">076</span>
</div>
<div class="flex flex-col border-l border-gray-200">
<span class="text-[#9CA3AF] text-[11px]">目的港</span>
<span class="text-[#1F2937] text-[14px] font-semibold">LAX</span>
</div>
<div class="flex flex-col border-l border-gray-200">
<span class="text-[#9CA3AF] text-[11px]">装机重</span>
<span class="text-[#1F2937] text-[14px] font-semibold">200kg</span>
</div>
</div>
<!-- 库位信息行 -->
<div class="mt-3 flex items-center gap-1.5">
<iconify-icon class="text-gray-500 text-[14px]" icon="mdi:map-marker"></iconify-icon>
<span class="text-[#6B7280] text-[13px]">库位大棚A3</span>
</div>
<!-- 查看详情链接 -->
<div class="mt-4 flex justify-end border-t border-gray-100 pt-3">
<div class="text-[#2563EB] text-[14px] font-medium flex items-center cursor-pointer btn-active" onclick="showDetail({id: 'PMC87678MU', status: '待交接', rackNo: '076', location: 'A区-03货位', counterPerson: '--', counterTime: '--', outboundPerson: '', outboundTime: ''})">
查看详情 <iconify-icon icon="mdi:chevron-right" width="16"></iconify-icon>
</div>
</div>
</div>
<!-- 卡片 2 -->
<div class="pending-card bg-white rounded-xl shadow-sm p-4 mb-3 overflow-hidden">
<!-- 顶部行 -->
<div class="flex justify-between items-center">
<div class="flex items-center gap-2">
<input class="item-checkbox custom-checkbox-round flex-none" onclick="handleCheckboxClick(this, event)" type="checkbox"/>
<div class="text-[#2563EB] text-[15px] font-bold">AKE87865MU</div>
</div>
<div class="bg-red-600 text-white text-[11px] px-2 h-5 flex items-center rounded-[6px] font-medium">IMP代码</div>
</div>
<!-- 航班信息行 -->
<div class="mt-3 mb-3 flex items-center gap-1">
<iconify-icon class="text-gray-500 text-[14px]" icon="mdi:airplane"></iconify-icon>
<span class="text-[#6B7280] text-[13px]">航班信息20260706/CA2222</span>
</div>
<!-- 统计框 -->
<div class="bg-[#F3F4F6] rounded-lg p-3 grid grid-cols-3 text-center">
<div class="flex flex-col">
<span class="text-[#9CA3AF] text-[11px]">架子车号</span>
<span class="text-[#1F2937] text-[14px] font-semibold">066</span>
</div>
<div class="flex flex-col border-l border-gray-200">
<span class="text-[#9CA3AF] text-[11px]">目的港</span>
<span class="text-[#1F2937] text-[14px] font-semibold">LAX</span>
</div>
<div class="flex flex-col border-l border-gray-200">
<span class="text-[#9CA3AF] text-[11px]">装机重</span>
<span class="text-[#1F2937] text-[14px] font-semibold">150kg</span>
</div>
</div>
<!-- 库位信息行 -->
<div class="mt-3 flex items-center gap-1.5">
<iconify-icon class="text-gray-500 text-[14px]" icon="mdi:map-marker"></iconify-icon>
<span class="text-[#6B7280] text-[13px]">库位:空侧-05</span>
</div>
<!-- 查看详情链接 -->
<div class="mt-4 flex justify-end border-t border-gray-100 pt-3">
<div class="text-[#2563EB] text-[14px] font-medium flex items-center cursor-pointer btn-active" onclick="showDetail({id: 'AKE87865MU', status: '待交接', agent: '043', flightDate: '20260706', flightNo: 'CA2222', pieces: '85', weight: '150', rackNo: '055', carrier: 'CA', origin: 'PEK', location: 'B区-05货位', code: '076', counterPerson: '--', counterTime: '--', outboundPerson: '', outboundTime: ''})">
查看详情 <iconify-icon icon="mdi:chevron-right" width="16"></iconify-icon>
</div>
</div>
</div>
<!-- 卡片 3 -->
<div class="pending-card bg-white rounded-xl shadow-sm p-4 mb-3 overflow-hidden">
<!-- 顶部行 -->
<div class="flex justify-between items-center">
<div class="flex items-center gap-2">
<input class="item-checkbox custom-checkbox-round flex-none" onclick="handleCheckboxClick(this, event)" type="checkbox"/>
<div class="text-[#2563EB] text-[15px] font-bold">PMC87678MU</div>
</div>
<div class="bg-red-600 text-white text-[11px] px-2 h-5 flex items-center rounded-[6px] font-medium">IMP代码</div>
</div>
<!-- 航班信息行 -->
<div class="mt-3 mb-3 flex items-center gap-1">
<iconify-icon class="text-gray-500 text-[14px]" icon="mdi:airplane"></iconify-icon>
<span class="text-[#6B7280] text-[13px]">航班信息20260707/3U3333</span>
</div>
<!-- 统计框 -->
<div class="bg-[#F3F4F6] rounded-lg p-3 grid grid-cols-3 text-center">
<div class="flex flex-col">
<span class="text-[#9CA3AF] text-[11px]">架子车号</span>
<span class="text-[#1F2937] text-[14px] font-semibold">055</span>
</div>
<div class="flex flex-col border-l border-gray-200">
<span class="text-[#9CA3AF] text-[11px]">目的港</span>
<span class="text-[#1F2937] text-[14px] font-semibold">LAX</span>
</div>
<div class="flex flex-col border-l border-gray-200">
<span class="text-[#9CA3AF] text-[11px]">装机重</span>
<span class="text-[#1F2937] text-[14px] font-semibold">450kg</span>
</div>
</div>
<!-- 库位信息行 -->
<div class="mt-3 flex items-center gap-1.5">
<iconify-icon class="text-gray-500 text-[14px]" icon="mdi:map-marker"></iconify-icon>
<span class="text-[#6B7280] text-[13px]">库位C区-01货位</span>
</div>
<!-- 查看详情链接 -->
<div class="mt-4 flex justify-end border-t border-gray-100 pt-3">
<div class="text-[#2563EB] text-[14px] font-medium flex items-center cursor-pointer btn-active" onclick="showDetail({id: 'PMC87678MU', status: '待交接', agent: 'DHL', flightDate: '20260707', flightNo: '3U3333', pieces: '200', weight: '450', rackNo: '055', carrier: '3U', origin: 'CTU', location: 'C区-01货位', code: '076', counterPerson: '--', counterTime: '--', outboundPerson: '', outboundTime: ''})">
查看详情 <iconify-icon icon="mdi:chevron-right" width="16"></iconify-icon>
</div>
</div>
</div>
</div>
<!-- 已交接列表内容 -->
<div class="p-3 pt-4 space-y-3 hidden" id="list-shipped">
<!-- 卡片 1 -->
<div class="bg-white rounded-xl shadow-sm p-4 mb-3">
<!-- 顶部行 -->
<div class="flex justify-between items-center">
<div class="text-[#1F2937] text-[15px] font-bold">PMC90901CZ</div>
<div class="flex items-center gap-1 text-[#1F2937] text-[13px] font-medium">
<iconify-icon class="text-[#10B981]" icon="mdi:check-circle" width="16"></iconify-icon>
<span>已交接</span>
</div>
</div>
<!-- 操作信息行 -->
<div class="mt-3 mb-3 flex items-center gap-1">
<iconify-icon class="text-gray-500 text-[14px]" icon="mdi:airplane"></iconify-icon>
<span class="text-[#6B7280] text-[13px]">航班信息20260704/MU1111</span>
</div>
<!-- 统计框 -->
<div class="bg-[#F3F4F6] rounded-lg p-3 grid grid-cols-3 text-center">
<div class="flex flex-col">
<span class="text-[#9CA3AF] text-[11px]">架子车号</span>
<span class="text-[#1F2937] text-[14px] font-semibold">076</span>
</div>
<div class="flex flex-col border-l border-gray-200">
<span class="text-[#9CA3AF] text-[11px]">目的港</span>
<span class="text-[#1F2937] text-[14px] font-semibold">LAX</span>
</div>
<div class="flex flex-col border-l border-gray-200">
<span class="text-[#9CA3AF] text-[11px]">装机重</span>
<span class="text-[#1F2937] text-[14px] font-semibold">80kg</span>
</div>
</div>
<!-- 操作人信息 -->
<div class="mt-3 flex items-center gap-1.5">
<iconify-icon class="text-gray-500 text-[14px]" icon="mdi:account-outline"></iconify-icon>
<span class="text-[#6B7280] text-[13px]">交接人:张三 · 交接时间2026-07-05 11:45</span>
</div>
<!-- 查看详情链接 -->
<div class="mt-2 flex justify-end border-t border-gray-50 pt-2">
<div class="text-[#2563EB] text-[14px] font-medium flex items-center cursor-pointer" onclick="showDetail({id: 'PMC90901CZ', status: '已交接', agent: '076', rackNo: '076', location: 'B区-05货位', code: '076', counterTime: '2026-07-05 10:30', counterPerson: '张三', outboundTime: '2026-07-05 11:45', outboundPerson: '张三'})">
查看详情 <iconify-icon icon="mdi:chevron-right" width="16"></iconify-icon>
</div>
</div>
</div>
<!-- 卡片 2 -->
<div class="bg-white rounded-xl shadow-sm p-4 mb-3">
<!-- 顶部行 -->
<div class="flex justify-between items-center">
<div class="text-[#1F2937] text-[15px] font-bold">AKE87865MU</div>
<div class="flex items-center gap-1 text-[#1F2937] text-[13px] font-medium">
<iconify-icon class="text-[#10B981]" icon="mdi:check-circle" width="16"></iconify-icon>
<span>已交接</span>
</div>
</div>
<!-- 操作信息行 -->
<div class="mt-3 mb-3 flex items-center gap-1">
<iconify-icon class="text-gray-500 text-[14px]" icon="mdi:airplane"></iconify-icon>
<span class="text-[#6B7280] text-[13px]">航班信息20260705/CA2222</span>
</div>
<!-- 统计框 -->
<div class="bg-[#F3F4F6] rounded-lg p-3 grid grid-cols-3 text-center">
<div class="flex flex-col">
<span class="text-[#9CA3AF] text-[11px]">架子车号</span>
<span class="text-[#1F2937] text-[14px] font-semibold">043</span>
</div>
<div class="flex flex-col border-l border-gray-200">
<span class="text-[#9CA3AF] text-[11px]">目的港</span>
<span class="text-[#1F2937] text-[14px] font-semibold">LAX</span>
</div>
<div class="flex flex-col border-l border-gray-200">
<span class="text-[#9CA3AF] text-[11px]">装机重</span>
<span class="text-[#1F2937] text-[14px] font-semibold">300kg</span>
</div>
</div>
<!-- 操作人信息 -->
<div class="mt-3 flex items-center gap-1.5">
<iconify-icon class="text-gray-500 text-[14px]" icon="mdi:account-outline"></iconify-icon>
<span class="text-[#6B7280] text-[13px]">交接人:赵六 · 交接时间2026-07-06 10:30</span>
</div>
<!-- 查看详情链接 -->
<div class="mt-2 flex justify-end border-t border-gray-50 pt-2">
<div class="text-[#2563EB] text-[14px] font-medium flex items-center cursor-pointer" onclick="showDetail({id: 'AKE87865MU', status: '已交接', agent: '043', flightDate: '20260705', flightNo: 'CA2222', pieces: '120', weight: '300', pickupNo: 'TH20260702002', rackNo: '鲜花绿植', carrier: 'CA', origin: 'SFO', location: 'A区-08货位', code: '076', counterTime: '2026-07-06 09:15', counterPerson: '王五', outboundTime: '2026-07-06 10:30', outboundPerson: '赵六'})">
查看详情 <iconify-icon icon="mdi:chevron-right" width="16"></iconify-icon>
</div>
</div>
</div>
<!-- 卡片 3 -->
<div class="bg-white rounded-xl shadow-sm p-4 mb-3">
<!-- 顶部行 -->
<div class="flex justify-between items-center">
<div class="text-[#1F2937] text-[15px] font-bold">PMC87678MU</div>
<div class="flex items-center gap-1 text-[#1F2937] text-[13px] font-medium">
<iconify-icon class="text-[#10B981]" icon="mdi:check-circle" width="16"></iconify-icon>
<span>已交接</span>
</div>
</div>
<!-- 操作信息行 -->
<div class="mt-3 mb-3 flex items-center gap-1">
<iconify-icon class="text-gray-500 text-[14px]" icon="mdi:airplane"></iconify-icon>
<span class="text-[#6B7280] text-[13px]">航班信息20260705/3U3333</span>
</div>
<!-- 统计框 -->
<div class="bg-[#F3F4F6] rounded-lg p-3 grid grid-cols-3 text-center">
<div class="flex flex-col">
<span class="text-[#9CA3AF] text-[11px]">架子车号</span>
<span class="text-[#1F2937] text-[14px] font-semibold">077</span>
</div>
<div class="flex flex-col border-l border-gray-200">
<span class="text-[#9CA3AF] text-[11px]">目的港</span>
<span class="text-[#1F2937] text-[14px] font-semibold">LAX</span>
</div>
<div class="flex flex-col border-l border-gray-200">
<span class="text-[#9CA3AF] text-[11px]">装机重</span>
<span class="text-[#1F2937] text-[14px] font-semibold">160kg</span>
</div>
</div>
<!-- 操作人信息 -->
<div class="mt-3 flex items-center gap-1.5">
<iconify-icon class="text-gray-500 text-[14px]" icon="mdi:account-outline"></iconify-icon>
<span class="text-[#6B7280] text-[13px]">交接人:孙八 · 交接时间2026-07-06 15:20</span>
</div>
<!-- 查看详情链接 -->
<div class="mt-2 flex justify-end border-t border-gray-50 pt-2">
<div class="text-[#2563EB] text-[14px] font-medium flex items-center cursor-pointer" onclick="showDetail({id: 'PMC87678MU', status: '已交接', agent: 'DHL', flightDate: '20260705', flightNo: '3U3333', pieces: '75', weight: '160', pickupNo: 'TH20260703003', rackNo: '生鲜食品', carrier: '3U', origin: 'CDG', location: 'D区-02货位', code: 'NOR', counterTime: '2026-07-06 14:00', counterPerson: '钱七', outboundTime: '2026-07-06 15:20', outboundPerson: '孙八'})">
查看详情 <iconify-icon icon="mdi:chevron-right" width="16"></iconify-icon>
</div>
</div>
</div>
</div>
</div>
<!-- 底部工具栏 -->
<div class="absolute bottom-0 w-full bg-white border-t border-gray-200 z-40 flex flex-col pt-4 pb-4" id="bottom-toolbar">
<!-- 操作区域 -->
<div class="px-4 flex items-center w-full">
<div class="flex items-center gap-2">
<input class="custom-checkbox-round" id="select-all-cb" onclick="toggleSelectAll(this.checked)" type="checkbox"/>
<label class="text-[13px] text-[#1F2937] font-medium cursor-pointer" for="select-all-cb">全选</label>
</div>
<div class="flex-1"></div>
<div class="flex items-center gap-3">
<span class="text-[12px] text-[#9CA3AF]">已选 <span id="selected-count">0</span></span>
<button class="bg-[#2563EB] text-white text-[15px] font-bold px-5 py-2 rounded-[10px] shadow-lg shadow-blue-500/25 btn-active" onclick="alert('交接操作')">
交接
</button>
</div>
</div>
</div>
</div>
<!-- 页面2: 详情页 -->
<div class="page" id="page-detail">
<!-- 顶部导航 -->
<div class="bg-[#2563EB] text-white h-12 flex items-center justify-between px-4 flex-none">
<div class="flex items-center btn-active" onclick="switchPage('home')">
<iconify-icon icon="mdi:chevron-left" width="28"></iconify-icon>
<span class="text-sm font-bold -ml-1">返回</span>
</div>
<h1 class="text-lg font-medium">板箱详情</h1>
<div class="w-16"></div>
</div>
<div class="flex-1 overflow-y-auto no-scrollbar pb-8 p-4">
<!-- 货运单据样式卡片 -->
<div class="bg-white rounded-xl shadow-sm overflow-hidden border border-gray-100">
<!-- 1. 顶部蓝色条带 -->
<div class="bg-[#2563EB] px-4 py-3 flex justify-between items-center text-white">
<span class="font-bold text-[17px] leading-tight" id="detail-awb">781-22222620</span>
</div>
<div class="p-4">
<!-- 3. 货物名称 -->
<div class="text-[22px] font-bold text-[#111827] mb-3" id="detail-rack-no">076</div>
<!-- 4. 两列信息表格 -->
<div class="grid grid-cols-2 gap-x-8 gap-y-3">
<div class="flex flex-col gap-y-[2px]">
<div class="text-[12px] text-[#9CA3AF] font-normal">装机重</div>
<div class="text-[15px] text-[#1F2937] font-medium" id="detail-count">55</div>
</div>
<div class="flex flex-col gap-y-[2px]">
<div class="text-[12px] text-[#9CA3AF] font-normal">航班日期</div>
<div class="text-[15px] text-[#1F2937] font-medium" id="detail-weight">20260706</div>
</div>
<div class="flex flex-col gap-y-[2px]">
<div class="text-[12px] text-[#9CA3AF] font-normal">航班号</div>
<div class="text-[15px] text-[#1F2937] font-medium" id="detail-carrier">MU2231</div>
</div>
<div class="flex flex-col gap-y-[2px]">
<div class="text-[12px] text-[#9CA3AF] font-normal">目的港</div>
<div class="text-[15px] text-[#1F2937] font-medium" id="detail-flight-date">LAX</div>
</div>
<div class="flex flex-col gap-y-[2px]">
<div class="text-[12px] text-[#9CA3AF] font-normal">IMP代码</div>
<div class="text-[15px] text-[#1F2937] font-medium" id="detail-carrier">X</div>
</div>
<div class="flex flex-col gap-y-[2px]">
<div class="text-[12px] text-[#9CA3AF] font-normal">板型</div>
<div class="text-[15px] text-[#1F2937] font-medium" id="detail-flight-date">QP</div>
</div>
<div class="flex flex-col gap-y-[2px]">
<div class="text-[12px] text-[#9CA3AF] font-normal">库位</div>
<div class="flex">
<span class="bg-orange-50 text-orange-600 px-1 rounded text-[15px] font-bold" id="detail-location">1111111</span>
</div>
</div>
<div class="flex flex-col gap-y-[2px]">
<div class="text-[12px] text-[#9CA3AF] font-normal">备注</div>
<div class="text-[15px] text-[#1F2937] font-medium" id="detail-flight-no">危险品</div>
</div>
</div>
</div>
</div>
<!-- 复磅信息卡片 -->
<div class="mt-4 bg-white rounded-xl shadow-sm overflow-hidden border border-gray-200 hidden" id="detail-outbound-card">
<div class="bg-[#10B981] px-4 py-2.5">
<span class="text-white font-semibold text-[15px]">复磅信息</span>
</div>
<div class="bg-white px-4 py-3 grid grid-cols-2 gap-y-3">
<div class="flex flex-col">
<span class="text-[12px] text-[#9CA3AF] font-normal mb-[2px]">复磅人</span>
<span class="text-[14px] text-[#1F2937] font-medium" id="detail-counter-person">-</span>
</div>
<div class="flex flex-col">
<span class="text-[12px] text-[#9CA3AF] font-normal mb-[2px]">复磅时间</span>
<span class="text-[14px] text-[#1F2937] font-medium" id="detail-counter-time">-</span>
</div>
<div class="flex flex-col" id="detail-outbound-person-row">
<span class="text-[12px] text-[#9CA3AF] font-normal mb-[2px]">交接人</span>
<span class="text-[14px] text-[#1F2937] font-medium" id="detail-outbound-person">-</span>
</div>
<div class="flex flex-col" id="detail-outbound-time-row">
<span class="text-[12px] text-[#9CA3AF] font-normal mb-[2px]">交接时间</span>
<span class="text-[14px] text-[#1F2937] font-medium" id="detail-outbound-time">-</span>
</div>
</div>
</div>
</div>
</div>
<!-- 筛选条件弹窗从ULD管理移植 -->
<div class="absolute inset-0 z-[100] bg-black/50 flex items-end justify-center" id="filterOverlay" onclick="toggleFilterDrawer(false)" style="display: none;">
<div class="bg-white rounded-t-[20px] w-full max-w-[375px] px-5 pt-6 pb-8" onclick="event.stopPropagation()">
<!-- 标题 -->
<div class="relative flex items-center justify-center mb-6">
<button class="absolute right-0 top-0 text-gray-400" onclick="toggleFilterDrawer(false)">
<iconify-icon class="text-2xl" icon="mdi:close"></iconify-icon>
</button>
<h2 class="text-[18px] font-bold text-gray-900">筛选条件</h2>
</div>
<div class="space-y-5">
<!-- 航班日期 -->
<div>
<label class="block text-[14px] text-gray-700 mb-1.5">航班日期</label>
<div class="flex items-center bg-white border border-gray-200 rounded-lg h-10 px-3 cursor-pointer">
<input class="flex-1 text-[14px] text-gray-800 placeholder-gray-400 outline-none bg-transparent" placeholder="请选择航班日期" readonly type="text"/>
<iconify-icon class="text-gray-500 text-[14px] flex-none" icon="mdi:calendar" width="18"></iconify-icon>
</div>
</div>
<!-- 进港航班号 -->
<div>
<label class="block text-[14px] text-gray-700 mb-1.5">航班号</label>
<div class="flex items-center bg-white border border-gray-200 rounded-lg h-10 px-3">
<input class="flex-1 text-[14px] text-gray-800 placeholder-gray-400 outline-none bg-transparent" placeholder="请输入航班号" type="text"/>
</div>
</div>
<!-- 交接人 -->
<div>
<label class="block text-[14px] text-gray-700 mb-1.5">交接人</label>
<div class="flex items-center bg-white border border-gray-200 rounded-lg h-10 px-3 cursor-pointer">
<input class="flex-1 text-[14px] text-gray-800 placeholder-gray-400 outline-none bg-transparent" placeholder="请选择交接人" readonly="" type="text"/>
<iconify-icon class="text-gray-500 text-[14px] flex-none" icon="mdi:chevron-down" width="18"></iconify-icon>
</div>
</div>
</div>
<!-- 底部按钮 -->
<div class="flex gap-3 mt-8">
<button class="flex-1 h-11 text-[15px] font-medium text-gray-600 bg-white border border-gray-200 rounded-[10px]" onclick="resetFilter()">重置</button>
<button class="flex-1 h-11 text-[15px] font-medium text-white bg-[#2563EB] rounded-[10px] shadow-sm" onclick="confirmFilter()">确认</button>
</div>
</div>
</div>
<script>
// 页面切换逻辑
function switchPage(pageId) {
document.querySelectorAll('.page').forEach(p => p.classList.remove('active'));
document.getElementById('page-' + pageId).classList.add('active');
if(pageId === 'detail') {
document.querySelector('#page-detail .overflow-y-auto').scrollTop = 0;
}
}
// 子Tab切换逻辑
function switchTab(type) {
const tabPending = document.getElementById('tab-pending');
const tabShipped = document.getElementById('tab-shipped');
const listPending = document.getElementById('list-pending');
const listShipped = document.getElementById('list-shipped');
const bottomToolbar = document.getElementById('bottom-toolbar');
if (type === 'pending') {
// 待交接
tabPending.classList.add('text-[#1F2937]', 'border-[#1F2937]');
tabPending.classList.remove('text-gray-500', 'border-transparent');
tabShipped.classList.add('text-gray-500', 'border-transparent');
tabShipped.classList.remove('text-[#1F2937]', 'border-[#1F2937]');
listPending.classList.remove('hidden');
listShipped.classList.add('hidden');
bottomToolbar.style.display = 'flex';
} else {
// 已交接
tabShipped.classList.add('text-[#1F2937]', 'border-[#1F2937]');
tabShipped.classList.remove('text-gray-500', 'border-transparent');
tabPending.classList.add('text-gray-500', 'border-transparent');
tabPending.classList.remove('text-[#1F2937]', 'border-[#1F2937]');
listShipped.classList.remove('hidden');
listPending.classList.add('hidden');
bottomToolbar.style.display = 'none';
}
}
// 全选/取消全选
function toggleSelectAll(checked) {
const checkboxes = document.querySelectorAll('.item-checkbox');
checkboxes.forEach(cb => {
cb.checked = checked;
});
updateSelectionCount();
}
// 处理卡片复选框点击
function handleCheckboxClick(checkbox, event) {
event.stopPropagation();
updateSelectionCount();
const checkboxes = document.querySelectorAll('.item-checkbox');
const selectAllCb = document.getElementById('select-all-cb');
const allChecked = Array.from(checkboxes).every(cb => cb.checked);
selectAllCb.checked = allChecked;
}
// 更新选中计数
function updateSelectionCount() {
const checkedCount = document.querySelectorAll('.item-checkbox:checked').length;
document.getElementById('selected-count').textContent = checkedCount;
}
// 显示详情页并填充数据
function showDetail(data) {
if (!data) return;
const setText = (id, text) => {
const el = document.getElementById(id);
if (el) el.textContent = text || '-';
};
setText('detail-awb', data.id);
setText('detail-rack-no', data.rackNo);
setText('detail-weight', (data.weight || '') + (data.weight && !data.weight.toString().includes('kg') ? ' kg' : ''));
setText('detail-flight-date', data.flightDate);
setText('detail-flight-no', data.flightNo);
setText('detail-location', data.location);
const outboundCard = document.getElementById('detail-outbound-card');
if (outboundCard) {
outboundCard.classList.remove('hidden');
setText('detail-counter-person', data.counterPerson);
setText('detail-counter-time', data.counterTime);
setText('detail-outbound-person', data.outboundPerson);
setText('detail-outbound-time', data.outboundTime);
const outboundPersonRow = document.getElementById('detail-outbound-person-row');
const outboundTimeRow = document.getElementById('detail-outbound-time-row');
if (data.status === '已交接') {
outboundPersonRow.classList.remove('hidden');
outboundTimeRow.classList.remove('hidden');
} else {
outboundPersonRow.classList.add('hidden');
outboundTimeRow.classList.add('hidden');
}
}
switchPage('detail');
}
// 筛选面板移植自ULD管理
function toggleFilterDrawer(show) {
const overlay = document.getElementById('filterOverlay');
overlay.style.display = show ? 'flex' : 'none';
}
function resetFilter() {
const inputs = document.querySelectorAll('#filterOverlay input');
inputs.forEach(input => input.value = '');
}
function confirmFilter() {
toggleFilterDrawer(false);
}
// 初始化日期
const today = new Date().toISOString().split('T')[0];
console.log("System date initialized:", today);
</script>
</div>
</body>
</html>