首页/ mobileweb/ 小草快递助手/ 代码预览

💻 代码预览 · 小草快递助手

mw_logistics · 上传者 小草网络
← 返回详情
app.js · 约 4801 字符
1// 小草快递助手 · 交互逻辑
2function $(id){return document.getElementById(id)}
3const pkgCard = p => `
4  <a class="pkg-card" href="trace.html?id=${p.id}">
5    <div class="pk-icon">${p.icon}</div>
6    <div class="pk-info">
7      <div class="pk-name">${p.name}<span class="st" style="color:${p.status==='已签收'?'var(--secondary)':p.status==='待取件'?'var(--blue)':'var(--primary)'}">${p.status}</span></div>
8      <div class="pk-no">${p.company} · ${p.no}</div>
9      <div class="pk-last">${p.last}</div>
10      ${p.code?`<span class="pk-code">取件码 ${p.code}</span>`:''}
11    </div>
12  </a>`;
13
14// 首页
15function renderIndex(){
16  $('quick-grid').innerHTML = QUICK.map(q=>`<a href="${q.href}"><span class="qicon">${q.icon}</span>${q.name}</a>`).join('');
17  $('pkg-list').innerHTML = PKGS.filter(p=>p.status!=='已签收').slice(0,3).map(pkgCard).join('');
18  $('coupon-list').innerHTML = COUPONS.slice(0,2).map(c=>`
19    <div class="card" style="display:flex;gap:12px;align-items:center;padding:12px">
20      <div style="font-size:32px">🎟️</div>
21      <div style="flex:1"><div style="font-weight:600;font-size:14px">${c.name}</div><div style="font-size:12px;color:#999;margin-top:2px">${c.desc} · ${c.expire}到期</div></div>
22      <span class="badge badge-hot">¥${c.amount}</span>
23    </div>`).join('');
24}
25function doTrack(){
26  const no = $('track-input').value.trim();
27  if(!no){ alert('请输入快递单号'); return; }
28  alert('🔍 正在查询:' + no + '\n演示环境已展示模拟物流轨迹');
29  location.href = 'trace.html';
30}
31
32// 物流详情
33function renderTrace(){
34  const id = new URLSearchParams(location.search).get('id')||1;
35  const p = PKGS.find(x=>x.id==id) || PKGS[0];
36  $('t-status').textContent = p.status;
37  $('t-name').textContent = p.name;
38  $('t-company').textContent = p.company;
39  $('t-no').textContent = p.no;
40  $('trace-list').innerHTML = TRACES.map((t,i)=>`
41    <div class="trace-item ${i===0?'current':i>0?'done':''}">
42      <span class="tdot"></span>
43      <div class="tt">${t.t}</div>
44      <div class="tm">${t.tm}</div>
45    </div>`).join('');
46}
47
48// 寄件
49let curCmp = 1;
50function renderSend(){
51  $('cmp-row').innerHTML = COMPS.map((c,i)=>`
52    <div class="cmp ${i===curCmp?'active':''}" onclick="pickCmp(${i})">
53      <span class="ci">${c.icon}</span><b>${c.name}</b><span>${c.price}</span>
54    </div>`).join('');
55  const price = 10 + curCmp;   // 首重价
56  const coupon = 5;
57  $('s-price').textContent = '¥' + price;
58  $('s-coupon').textContent = '-¥' + coupon;
59  $('s-total').textContent = '¥' + (price - coupon);
60}
61function pickCmp(i){ curCmp=i; renderSend(); }
62function doSend(){
63  alert('✅ 下单成功!\n快递员将在预约时间上门取件\n请提前打包好物品,保持电话畅通');
64}
65
66// 包裹列表
67let pkgFilter = '';
68function renderPkgs(){
69  const list = $('pkg-list');
70  let pkgs = PKGS;
71  if(pkgFilter) pkgs = pkgs.filter(p=>p.status===pkgFilter);
72  list.innerHTML = pkgs.length ? pkgs.map(pkgCard).join('') :
73    '<div class="empty"><div class="eicon">📦</div><div>暂无该状态的包裹</div></div>';
74}
75function filterPkg(el, f){ pkgFilter=f;
76  document.querySelectorAll('.status-bar a').forEach(a=>a.classList.remove('active'));
77  el.classList.add('active'); renderPkgs();
78}
79
80// 地址簿
81function renderAddr(){
82  $('recv-list').innerHTML = ADDRS.filter(a=>a.type==='收').map(a=>`
83    <div class="addr-item">
84      <div class="ai-type">${a.type}</div>
85      <div class="ai-info"><b>${a.name} <span>${a.phone}</span></b><div>${a.addr}</div></div>
86      <span style="color:#ccc">${a.default?'⭐':''}</span>
87    </div>`).join('');
88  $('send-list').innerHTML = ADDRS.filter(a=>a.type==='寄').map(a=>`
89    <div class="addr-item">
90      <div class="ai-type send">${a.type}</div>
91      <div class="ai-info"><b>${a.name} <span>${a.phone}</span></b><div>${a.addr}</div></div>
92      <span style="color:#ccc">${a.default?'⭐':''}</span>
93    </div>`).join('');
94}
95function addAddr(){ alert('📝 演示环境:新增地址功能已预留接口'); }
96
97// 我的
98function renderMine(){
99  $('m-name').textContent = MEMBER.name;
100  $('m-points').textContent = MEMBER.points;
101  $('m-pkgs').textContent = MEMBER.pkgs;
102  $('m-sent').textContent = MEMBER.sent;
103  $('m-coupon-list').innerHTML = COUPONS.map(c=>`
104    <div class="card" style="display:flex;gap:12px;align-items:center;padding:12px">
105      <div style="font-size:32px">🎟️</div>
106      <div style="flex:1"><div style="font-weight:600;font-size:14px">${c.name}</div><div style="font-size:12px;color:#999;margin-top:2px">${c.desc} · ${c.expire}到期</div></div>
107      <span class="badge badge-hot">¥${c.amount}</span>
108    </div>`).join('');
109}
110