Files
aerologic-app/documents/5.5寸手持端设计文件/02_出库交接/出库交接.html
YANG JIANKUAN db062c8ee3 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>
2026-07-29 14:18:29 +08:00

715 lines
31 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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>