@wendongfly/myhi 1.3.193 → 1.3.195

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/dist/admin.html CHANGED
@@ -156,6 +156,23 @@
156
156
  <div id="mode-foot" style="font-size:0.72rem;color:var(--muted);margin-top:0.5rem;line-height:1.5"></div>
157
157
  </div>
158
158
 
159
+ <!-- 全局设置:对这台 myhi 的所有人、所有设备生效(首页 ⚙ 里成员只能看不能改) -->
160
+ <div class="card" id="global">
161
+ <h3>全局设置</h3>
162
+ <div style="font-size:0.78rem;margin-bottom:0.3rem">本机显示名 <small style="color:var(--muted)">首页 / 分屏的浏览器标签显示它,用来区分多台电脑;不改电脑主机名,留空用主机名</small></div>
163
+ <div class="inp-row">
164
+ <input class="inp" id="g-name" maxlength="32" placeholder="主机名" autocomplete="off">
165
+ <button class="btn-sm" onclick="saveMachineName()">保存</button>
166
+ </div>
167
+ <div class="msg" id="g-name-msg"></div>
168
+ <div style="font-size:0.78rem;margin:0.5rem 0 0.3rem">语音识别地址 <small style="color:var(--muted)">留空 = 不用语音输入;改后重启 myhi 生效</small></div>
169
+ <div class="inp-row">
170
+ <input class="inp" id="g-asr" placeholder="http://…:8765" autocomplete="off">
171
+ <button class="btn-sm" onclick="saveAsr()">保存</button>
172
+ </div>
173
+ <div class="msg" id="g-asr-msg"></div>
174
+ </div>
175
+
159
176
  <!-- 修改管理密码 -->
160
177
  <div class="card">
161
178
  <h3>修改管理密码</h3>
@@ -240,6 +257,7 @@ async function showAdmin() {
240
257
  await refresh();
241
258
  setInterval(refresh, 10000);
242
259
  loadGateway();
260
+ loadGlobal();
243
261
  loadSecrets();
244
262
  }
245
263
 
@@ -310,6 +328,39 @@ async function delSecret(name, scope, cwd) {
310
328
  } catch {}
311
329
  }
312
330
 
331
+ async function loadGlobal() {
332
+ try {
333
+ const m = await (await fetch('/api/machine-name', { headers: H() })).json();
334
+ const inp = document.getElementById('g-name');
335
+ inp.placeholder = m.hostname || '主机名';
336
+ inp.value = m.name === m.hostname ? '' : (m.name || '');
337
+ inp.disabled = !!m.fromEnv;
338
+ if (m.fromEnv) setMsg('g-name-msg', '已由环境变量 MYHI_NAME 指定,此处不可改', false);
339
+ } catch {}
340
+ try {
341
+ const c = await (await fetch('/api/server-config', { headers: H() })).json();
342
+ document.getElementById('g-asr').value = c.asrUrl || '';
343
+ } catch {}
344
+ }
345
+ function setMsg(id, text, ok) { const el = document.getElementById(id); el.className = 'msg ' + (ok ? 'msg-ok' : 'msg-err'); el.textContent = text; }
346
+ async function saveMachineName() {
347
+ try {
348
+ const r = await fetch('/api/machine-name', { method: 'POST', headers: H(), body: JSON.stringify({ name: document.getElementById('g-name').value.trim() }) });
349
+ const d = await r.json();
350
+ if (!d.ok) throw new Error(d.error || '失败');
351
+ setMsg('g-name-msg', `已保存为「${d.name}」,已打开的页面刷新后生效`, true);
352
+ } catch (e) { setMsg('g-name-msg', '保存失败:' + e.message, false); }
353
+ }
354
+ async function saveAsr() {
355
+ const url = document.getElementById('g-asr').value.trim();
356
+ try {
357
+ const r = await fetch('/api/server-config', { method: 'POST', headers: H(), body: JSON.stringify({ asrUrl: url }) });
358
+ const d = await r.json();
359
+ if (!d.ok) throw new Error(d.error || '失败');
360
+ setMsg('g-asr-msg', url ? '已保存,重启 myhi 后生效(设了 ASR_URL 环境变量时以环境变量为准)' : '已清空,语音输入关闭', true);
361
+ } catch (e) { setMsg('g-asr-msg', '保存失败:' + e.message, false); }
362
+ }
363
+
313
364
  async function loadGateway() {
314
365
  try {
315
366
  const r = await fetch('/api/gateway', { headers: H() });