dsh-mesh-access 1.4.2 → 1.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -168,3 +168,13 @@
168
168
  ## 1.4.2 — 面板支持滚动
169
169
 
170
170
  - 面板根容器加 `height:100%; overflowY:auto`:内容超出可视区时可用滚轮上下滑。
171
+
172
+ ## 1.4.3 — 修复「手机首次打开」地址不显示
173
+
174
+ - 1.4.0 面板读的是 tn.urlPlain(不存在),实际接口返回的是 tn.url,
175
+ 导致密钥模式下「手机首次打开」链接整块不渲染。改为读 tn.url(公网地址)。
176
+
177
+ ## 1.4.4 — 模式切换改分段滑块开关
178
+
179
+ - 「入口登录」三个模式按钮改为分段滑块(segmented toggle):胶囊容器内
180
+ 密钥 / 账号密码 / 关闭 三段,当前模式高亮滑块样式,点其它段即切换。
package/lib/client.js CHANGED
@@ -386,16 +386,31 @@ window.__ModuleLoader__.load({
386
386
  mode === 'key' ? '已切到密钥模式:手机打开下面带 meshkey 的地址一次,30 天内免登录、无弹窗'
387
387
  : mode === 'basic' ? '已切到账号密码模式:弹窗登录一次,24 小时内该设备免登录'
388
388
  : '已关闭入口登录:任何知道地址的人都能打开,请确认你接受')
389
- const firstUrl = tn.urlPlain && a.key ? tn.urlPlain + '?meshkey=' + encodeURIComponent(a.key) : null
390
- const modeBtn = (m, label) => h('button', {
391
- style: (a.mode === m ? S.btnPrimary : S.btn),
392
- disabled: authBusy || a.mode === m, onClick: () => setMode(m),
389
+ const firstUrl = (tn.url || tn.urlPlain) && a.key ? (tn.url || tn.urlPlain) + '?meshkey=' + encodeURIComponent(a.key) : null
390
+ const modes = [
391
+ { m: 'key', label: '密钥' },
392
+ { m: 'basic', label: '账号密码' },
393
+ { m: 'off', label: '关闭' },
394
+ ]
395
+ const segItem = (m, label, active) => h('div', {
396
+ style: {
397
+ padding: '6px 16px', borderRadius: 999, cursor: 'pointer', fontSize: 13,
398
+ background: active ? 'rgba(88,166,255,.9)' : 'transparent',
399
+ color: active ? '#fff' : 'inherit',
400
+ fontWeight: active ? 600 : 400,
401
+ transition: 'all .15s ease', userSelect: 'none',
402
+ },
403
+ onClick: () => { if (!authBusy && !active) setMode(m) },
393
404
  }, label)
394
405
  return h('div', null,
395
- h('div', { style: S.row },
396
- modeBtn('key', '密钥(无弹窗)'),
397
- modeBtn('basic', '账号密码'),
398
- modeBtn('off', '关闭(危险)'),
406
+ h('div', {
407
+ style: {
408
+ display: 'inline-flex', gap: 4, padding: 4, borderRadius: 999,
409
+ border: '1px solid rgba(127,127,127,.4)', background: 'rgba(127,127,127,.12)',
410
+ marginBottom: 4,
411
+ },
412
+ },
413
+ modes.map(x => segItem(x.m, x.label, a.mode === x.m)),
399
414
  ),
400
415
  authMsg ? h('div', { style: { ...S.hint, color: '#7ee787', marginTop: 8 } }, authMsg) : null,
401
416
  a.mode === 'key'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-mesh-access",
3
- "version": "1.4.2",
3
+ "version": "1.4.4",
4
4
  "description": "Control your DSH from your phone: opens a port on the mesh/VPN interface from inside the running server process, so a phone browser gets the same instance and the same session list — no SSH, no second dsh. Also reachable from another PC, a GUI NAS, or a TV box.",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",