潜安工具站本地化 · 离线计算

潜水装备清单 + 寿命追踪

出门前最怕"我气瓶水检了没"、"调节器保养了没"。本工具分两部分:① 出发前勾选清单(自定义、可勾选、打印友好);② 装备寿命追踪(BCD/调节器/气瓶水检的本地到期提醒)。

出发前清单

勾选状态自动保存。下次打开还在。

装备寿命追踪

气瓶水检通常每年一次(部分国家 2-3 年),调节器保养每年,BCD 每年。基本建议按"年"为单位追踪。

装备上次下次到期剩余状态

常见装备保养周期

  • 调节器:每年 1 次(强烈建议)。每 2 年大保养(拆洗)。
  • BCD:每年 1 次。检查充气阀、泄压阀、口哨。
  • 气瓶:中国要求 3 年一次水检(国外多为 1-2 年)。
  • 潜水电脑:每年更换电池,3-5 年更换主机(电池老化)。
  • 湿衣:每季清洗内面(淡水+温和清洁剂),拉链上蜡。

出发前最容易忘的

  • 潜水电脑电池:很多人到潜店发现电脑不开机。
  • 面镜防雾:临时涂口水或婴儿洗发水。
  • 二级头备用咬嘴:旧咬嘴破损会漏气。
  • 气瓶 O 圈:高氧瓶必须有专用 O 圈(绿色)。
  • 出海药物:晕船药、止痛药、过敏药。
  • 充电宝与备用电池:水下灯、电脑、手表。
广告
`); w.document.close(); w.print(); }); // 装备追踪 function loadEquip(){ try{return JSON.parse(localStorage.getItem(EQUIP_KEY)||'[]');}catch(e){return[];} } function saveEquip(arr){ localStorage.setItem(EQUIP_KEY, JSON.stringify(arr)); } function renderEquip(){ const items = loadEquip(); const tbody = document.getElementById('equipBody'); if (!items.length){ tbody.innerHTML = '还没有装备追踪记录'; return; } const now = Date.now(); tbody.innerHTML = items.map((it, i)=>{ const next = new Date(it.nextDate).getTime(); const daysLeft = Math.round((next - now) / (1000*3600*24)); let status, color; if (daysLeft < 0) { status = `已过期 ${Math.abs(daysLeft)} 天`; color = 'bg-red-100 text-red-700'; } else if (daysLeft < 30) { status = `还剩 ${daysLeft} 天`; color = 'bg-amber-100 text-amber-700'; } else { status = `还剩 ${daysLeft} 天`; color = 'bg-emerald-100 text-emerald-700'; } return ` ${it.name} ${it.lastDate} ${it.nextDate} ${daysLeft>=0?daysLeft:'已过'} ${status} `; }).join(''); tbody.querySelectorAll('.renew').forEach(b=>b.addEventListener('click', e=>{ const i = parseInt(e.currentTarget.dataset.i); const arr = loadEquip(); const today = new Date(); const cycle = parseInt(arr[i].cycle); const next = new Date(today.getTime() + cycle*86400000); arr[i].lastDate = today.toISOString().slice(0,10); arr[i].nextDate = next.toISOString().slice(0,10); saveEquip(arr); renderEquip(); })); tbody.querySelectorAll('.delEq').forEach(b=>b.addEventListener('click', e=>{ const i = parseInt(e.currentTarget.dataset.i); const arr = loadEquip(); arr.splice(i,1); saveEquip(arr); renderEquip(); })); } document.getElementById('addEquip').addEventListener('submit', e=>{ e.preventDefault(); const name = document.getElementById('eqName').value; const date = document.getElementById('eqDate').value; const cycle = document.getElementById('eqCycle').value; if (!name || !date) return; const arr = loadEquip(); arr.push({name, lastDate: date, nextDate: date, cycle}); saveEquip(arr); renderEquip(); e.target.reset(); }); renderCheck(); renderEquip();