SOURCE

console 命令行工具 X clear

                    
>
console
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>镜片厚度估算</title>
<style>
  :root{
    --bg:#f2f4f7; --card:#fff; --text:#1a1a1a; --muted:#6b7280;
    --line:#e3e6ea; --primary:#1f4e78; --inputbg:#fffbe6;
    --ok:#2e7d32; --okbg:#e6f4ea; --bad:#c62828; --badbg:#fdecea;
  }
  *{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
  html,body{margin:0;padding:0}
  body{
    font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;
    background:var(--bg); color:var(--text);
    padding:12px 12px 190px; font-size:16px;
    -webkit-text-size-adjust:100%;
    transition:padding-bottom .1s;
  }
  
  /* 键盘弹出时的暴力撑高,保证能滚上去 */
  body.kb-open { 
    padding-bottom: 400px !important; 
  }

  h1{font-size:17px;font-weight:600;text-align:center;margin:6px 0 14px;color:var(--muted)}
  .group{background:var(--card);border-radius:14px;padding:4px 14px;margin-bottom:12px;
         box-shadow:0 1px 4px rgba(0,0,0,.06)}
  .group-title{font-size:12px;color:var(--muted);padding:10px 0 4px;font-weight:600;letter-spacing:.5px}
  .row{display:flex;align-items:center;min-height:52px;border-bottom:1px solid var(--line)}
  .row:last-child{border-bottom:none}
  .row label{flex:1;font-size:15px;color:var(--text)}
  .row .hint{font-size:12px;color:var(--muted);margin-left:4px}
  .row input,.row select{
    width:118px;padding:10px 12px;font-size:17px;text-align:right;
    border:1px solid var(--line);border-radius:10px;outline:none;
    background:var(--inputbg);color:var(--text);font-weight:600;
    -webkit-appearance:none;appearance:none;
  }
  .row input:focus,.row select:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(31,78,120,.15)}

  .bar{
    position:fixed;left:0;right:0;bottom:0;z-index:10;
    background:var(--card);border-top:1px solid var(--line);
    padding:12px 16px calc(12px + env(safe-area-inset-bottom));
    box-shadow:0 -4px 16px rgba(0,0,0,.08);
    transition:transform .2s, opacity .2s;
  }
  
  /* 键盘弹出,直接让结果栏隐身 */
  body.kb-open .bar{
    display: none; 
  }
  
  .bar-main{display:flex;align-items:flex-end;justify-content:space-between;gap:10px}
  .bar-label{font-size:12px;color:var(--muted);margin-bottom:2px}
  .bar-value{font-size:28px;font-weight:700;line-height:1.1}
  .bar-unit{font-size:14px;font-weight:500;color:var(--muted);margin-left:2px}
  .tag{
    font-size:13px;font-weight:600;padding:6px 12px;border-radius:20px;white-space:nowrap;
  }
  .tag.ok{color:var(--ok);background:var(--okbg)}
  .tag.bad{color:var(--bad);background:var(--badbg)}
  .bar-sub{display:flex;justify-content:space-between;margin-top:8px;
           font-size:13px;color:var(--muted);border-top:1px dashed var(--line);padding-top:8px}
  .bar-sub b{color:var(--text);font-weight:600}
  .warn{color:var(--bad);font-size:12px;margin-top:6px;display:none}
  .warn.show{display:block}
  .note{font-size:12px;color:var(--muted);line-height:1.6;text-align:center;margin:16px 4px 0}
</style>
</head>
<body>

<h1>镜片厚度估算</h1>

<div class="group">
  <div class="group-title">镜架参数</div>
  <div class="row"><label>镜片宽度<span class="hint">mm</span></label><input id="w" type="number" inputmode="decimal" value="52"></div>
  <div class="row"><label>最大斜角宽度<span class="hint">mm</span></label><input id="c" type="number" inputmode="decimal" value="56"></div>
  <div class="row"><label>鼻梁尺寸<span class="hint">mm</span></label><input id="d" type="number" inputmode="decimal" value="18"></div>
  <div class="row"><label>顾客瞳距<span class="hint">mm</span></label><input id="pd" type="number" inputmode="decimal" value="64"></div>
  <div class="row"><label>镜架类型</label>
    <select id="frame">
      <option value="0.8">全框</option><option value="1.2">胶丝半框</option>
      <option value="2.0">金属丝半框</option><option value="1.5">无框</option>
    </select>
  </div>
</div>

<div class="group">
  <div class="group-title">镜片参数</div>
  <div class="row"><label>球镜度数<span class="hint">度</span></label><input id="s" type="number" inputmode="numeric" step="25" value="300"></div>
  <div class="row"><label>散光度数<span class="hint">度</span></label><input id="cyl" type="number" inputmode="numeric" step="25" value="100"></div>
  <div class="row"><label>折射率</label>
    <select id="n">
      <option value="1.56">1.56</option><option value="1.60">1.60</option>
      <option value="1.67">1.67</option><option value="1.71">1.71</option><option value="1.74">1.74</option>
    </select>
  </div>
  <div class="row"><label>前表面基弯<span class="hint">D</span></label><input id="f1" type="number" inputmode="decimal" step="0.25" value="5"></div>
</div>

<div class="group">
  <div class="group-title">加工参数</div>
  <div class="row"><label>中心厚度<span class="hint">mm</span></label><input id="t" type="number" inputmode="decimal" step="0.1" value="1.5"></div>
  <div class="row"><label>倒角深度<span class="hint">mm</span></label><input id="g" type="number" inputmode="decimal" step="0.1" value="0.5"></div>
</div>

<div class="bar">
  <div class="bar-main">
    <div>
      <div class="bar-label">修正后成品边缘厚度</div>
      <div><span class="bar-value" id="final">—</span><span class="bar-unit">mm</span></div>
    </div>
    <div class="tag ok" id="tag">—</div>
  </div>
  <div class="bar-sub">
    <span>最远半径 <b id="rOut">—</b> mm</span>
    <span>安全余量 <b id="margin">—</b> mm</span>
  </div>
  <div class="warn" id="warn"></div>
</div>

<script>
(function(){
  var ids = ['w','c','d','pd','frame','s','cyl','n','f1','t','g'];
  function v(id){ return document.getElementById(id).value; }
  function n(id){ return parseFloat(v(id)) || 0; }

  function calc(){
    var w=n('w'), c=n('c'), d=n('d'), pd=n('pd');
    var S=n('s'), Cyl=n('cyl'), ri=n('n'), F1=n('f1');
    var T=n('t'), g=n('g'), Tmin=parseFloat(v('frame'));

    var warnEl = document.getElementById('warn');
    var tagEl  = document.getElementById('tag');
    warnEl.className = 'warn';
    warnEl.textContent = '';

    if(ri <= 1){ show('异常', '—', '—', false); warnEl.className='warn show'; warnEl.textContent='折射率必须大于 1'; return; }

    var F = w + d;
    var delta = Math.abs((F - pd) / 2);
    var R = Math.max(w, c) / 2 + delta;
    var S_eff = (S + Math.abs(Cyl)) / 100;
    var F2 = -(S_eff + F1);

    var simpleAdd = R*R*S_eff / (2000*(ri-1));
    var simpleEdge = T + simpleAdd - g;
    var finalEdge = simpleEdge;
    var msg = '';

    var r1 = 1000*(ri-1)/F1;
    var r2 = 1000*(ri-1)/Math.abs(F2);

    if(R >= r1 || R >= r2){
      msg = '警告:R 过大,请检查参数';
    } else {
      var s1 = r1 - Math.sqrt(r1*r1 - R*R);
      var s2 = r2 - Math.sqrt(r2*r2 - R*R);
      finalEdge = T + s2 - s1 - g;
    }

    var margin = finalEdge - Tmin;
    var safe = margin >= 0;

    document.getElementById('final').textContent = finalEdge.toFixed(2);
    document.getElementById('rOut').textContent  = R.toFixed(1);
    document.getElementById('margin').textContent = margin.toFixed(2);
    
    tagEl.textContent = safe ? '安全合格' : '厚度不足';
    tagEl.className = safe ? 'tag ok' : 'tag bad';
    if(msg){ warnEl.className='warn show'; warnEl.textContent=msg; }
  }

  ids.forEach(function(id){
    var el = document.getElementById(id);
    el.addEventListener('input', calc);
    el.addEventListener('change', calc);
  });

  var body = document.body;
  var fields = document.querySelectorAll('input,select');

  fields.forEach(function(el){
    // 聚焦时,隐藏底部栏并撑高
    el.addEventListener('focus', function(){
      body.classList.add('kb-open');
      // 强制系统稍微等一下再滚动,应对在线编辑器的小窗口
      setTimeout(function(){
        el.scrollIntoView({block:'center', behavior:'smooth'});
      }, 250);
    });
    
    // 失去焦点时,恢复
    el.addEventListener('blur', function(){
      setTimeout(function(){
        if(!document.activeElement || !document.activeElement.matches('input,select')){
          body.classList.remove('kb-open');
        }
      }, 100);
    });
  });

  calc();
})();
</script>
</body>
</html>