@oxiaom/adoremix 1.0.16 → 1.0.18

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.
Files changed (104) hide show
  1. package/package.json +1 -1
  2. package/src/config/webui.js +38 -18
  3. package/webui/high/assets/AdminLayout-BeGqmJmh.js +1 -0
  4. package/webui/high/assets/AdminLayout-Dg0cblhW.css +1 -0
  5. package/webui/high/assets/Announce-2364DXIw.css +1 -0
  6. package/webui/high/assets/Announce-BxOu3PDa.js +1 -0
  7. package/webui/high/assets/Billing-9pkW40cw.css +1 -0
  8. package/webui/high/assets/Billing-DkKexnBS.js +1 -0
  9. package/webui/high/assets/Gallery-BUO8AayT.js +1 -0
  10. package/webui/high/assets/Gallery-CvDy0BG_.css +1 -0
  11. package/webui/high/assets/Info-BRpM9vrH.css +1 -0
  12. package/webui/high/assets/Info-jgxOyI48.js +1 -0
  13. package/webui/high/assets/LanguageSwitcher-wcRpxcC2.css +1 -0
  14. package/webui/high/assets/LanguageSwitcher.vue_vue_type_style_index_0_lang-7lwszLYh.js +1 -0
  15. package/webui/high/assets/MainLayout-Cg9w3D6H.js +1 -0
  16. package/webui/high/assets/MainLayout-CtxzU51m.css +1 -0
  17. package/webui/high/assets/Upload-BUllX3F9.css +1 -0
  18. package/webui/high/assets/Upload-BhZe08V8.js +1 -0
  19. package/webui/high/assets/Users-BajKphJ2.css +1 -0
  20. package/webui/high/assets/Users-C-uvafHe.js +1 -0
  21. package/webui/high/assets/_plugin-vue_export-helper-BCo6x5W8.js +1 -0
  22. package/webui/high/assets/api-C3Fyph-A.js +1 -0
  23. package/webui/high/assets/index-6wTg37PL.js +1 -0
  24. package/webui/high/assets/index-BU_CDG5n.js +1 -0
  25. package/webui/high/assets/index-B_eXN_Ka.css +1 -0
  26. package/webui/high/assets/index-BeMdB8li.css +1 -0
  27. package/webui/high/assets/index-BeyjdvRw.css +1 -0
  28. package/webui/high/assets/index-Bqlp4X7Z.css +1 -0
  29. package/webui/high/assets/index-BwGOSVLU.css +1 -0
  30. package/webui/high/assets/index-C0plBGGv.js +1 -0
  31. package/webui/high/assets/index-CG0Cxnu7.js +1 -0
  32. package/webui/high/assets/index-CGTbAKLR.css +1 -0
  33. package/webui/high/assets/index-CTbFCtHG.js +1 -0
  34. package/webui/high/assets/index-CTtQ-PJh.css +1 -0
  35. package/webui/high/assets/index-Ci-5piG7.css +1 -0
  36. package/webui/high/assets/index-DPlPWsqM.js +1 -0
  37. package/webui/high/assets/index-DbeENJC3.css +1 -0
  38. package/webui/high/assets/index-DdwHcYZD.js +1 -0
  39. package/webui/high/assets/index-KMJ_Zaix.js +1 -0
  40. package/webui/high/assets/index-LP7k5pkh.js +1 -0
  41. package/webui/high/assets/index-MthettIa.css +1 -0
  42. package/webui/high/assets/index-_3H0q9yh.css +1 -0
  43. package/webui/high/assets/index-npdYRXyk.js +18 -0
  44. package/webui/high/assets/index-ptOpmqku.js +1 -0
  45. package/webui/high/assets/index-r_gAV5lM.css +1 -0
  46. package/webui/high/assets/index-u4IuHZw8.js +1 -0
  47. package/webui/high/assets/test-BQUWlKVf.css +1 -0
  48. package/webui/high/assets/test-Bt3E-Okh.js +1 -0
  49. package/webui/high/assets/useDeviceScan-CM8xsf7h.js +1 -0
  50. package/webui/high/assets/vue-vendor-BaBirIg_.js +38 -0
  51. package/webui/high/index.html +23 -0
  52. package/webui/high/js/lame.min.js +308 -0
  53. package/webui/high/js/worker-realtime.js +81 -0
  54. package/webui/low/assets/AdminLayout-Dg0cblhW.css +1 -0
  55. package/webui/low/assets/AdminLayout-Dio6Q0f_.js +1 -0
  56. package/webui/low/assets/Announce-2364DXIw.css +1 -0
  57. package/webui/low/assets/Announce-DiogX_-D.js +1 -0
  58. package/webui/low/assets/Billing-9pkW40cw.css +1 -0
  59. package/webui/low/assets/Billing-C42F8wIt.js +1 -0
  60. package/webui/low/assets/Gallery-CvDy0BG_.css +1 -0
  61. package/webui/low/assets/Gallery-DGUAhDtI.js +1 -0
  62. package/webui/low/assets/Info-BRpM9vrH.css +1 -0
  63. package/webui/low/assets/Info-BolVapGU.js +1 -0
  64. package/webui/low/assets/LanguageSwitcher-wcRpxcC2.css +1 -0
  65. package/webui/low/assets/LanguageSwitcher.vue_vue_type_style_index_0_lang-BUO99DZc.js +1 -0
  66. package/webui/low/assets/MainLayout-BmBcNVVu.js +1 -0
  67. package/webui/low/assets/MainLayout-CtxzU51m.css +1 -0
  68. package/webui/low/assets/Upload-BUllX3F9.css +1 -0
  69. package/webui/low/assets/Upload-B_Cx6QMR.js +1 -0
  70. package/webui/low/assets/Users-BajKphJ2.css +1 -0
  71. package/webui/low/assets/Users-an7uFkx4.js +1 -0
  72. package/webui/low/assets/_plugin-vue_export-helper-BCo6x5W8.js +1 -0
  73. package/webui/low/assets/api-C3Fyph-A.js +1 -0
  74. package/webui/low/assets/index-2JKvpOh3.js +1 -0
  75. package/webui/low/assets/index-B_eXN_Ka.css +1 -0
  76. package/webui/low/assets/index-BeMdB8li.css +1 -0
  77. package/webui/low/assets/index-BeyjdvRw.css +1 -0
  78. package/webui/low/assets/index-BoV0S81L.js +1 -0
  79. package/webui/low/assets/index-Bqlp4X7Z.css +1 -0
  80. package/webui/low/assets/index-BuEwLgbU.js +18 -0
  81. package/webui/low/assets/index-BwGOSVLU.css +1 -0
  82. package/webui/low/assets/index-CGTbAKLR.css +1 -0
  83. package/webui/low/assets/index-CSahVaR0.js +1 -0
  84. package/webui/low/assets/index-CTtQ-PJh.css +1 -0
  85. package/webui/low/assets/index-CgyUlqk5.js +1 -0
  86. package/webui/low/assets/index-Ci-5piG7.css +1 -0
  87. package/webui/low/assets/index-Cjg2XVty.js +1 -0
  88. package/webui/low/assets/index-D-BJ_vlf.js +1 -0
  89. package/webui/low/assets/index-D0uan-_I.js +1 -0
  90. package/webui/low/assets/index-DWP2gbuh.js +1 -0
  91. package/webui/low/assets/index-DbeENJC3.css +1 -0
  92. package/webui/low/assets/index-DdPisNCE.js +1 -0
  93. package/webui/low/assets/index-F-Qi4toA.js +1 -0
  94. package/webui/low/assets/index-FUUYrqc8.js +1 -0
  95. package/webui/low/assets/index-MthettIa.css +1 -0
  96. package/webui/low/assets/index-_3H0q9yh.css +1 -0
  97. package/webui/low/assets/index-r_gAV5lM.css +1 -0
  98. package/webui/low/assets/test-BQUWlKVf.css +1 -0
  99. package/webui/low/assets/test-DI2hJTQF.js +1 -0
  100. package/webui/low/assets/useDeviceScan-CM8xsf7h.js +1 -0
  101. package/webui/low/assets/vue-vendor-BaBirIg_.js +38 -0
  102. package/webui/low/index.html +23 -0
  103. package/webui/low/js/lame.min.js +308 -0
  104. package/webui/low/js/worker-realtime.js +81 -0
@@ -0,0 +1 @@
1
+ import{f as e,w as l,o as a,n as s,y as i,A as n,u as o,p as c,M as t,E as d,H as r,B as u,C as v,F as m,z as p,N as h,W as g,r as f,c as b,t as y,X as k}from"./vue-vendor-BaBirIg_.js";import{u as x,a as w}from"./index-BuEwLgbU.js";import{g as C,b as M,e as I,r as D,d as V,f as A,h as S,i as L,j as P}from"./api-C3Fyph-A.js";import{u as F}from"./useDeviceScan-CM8xsf7h.js";import{_ as U}from"./_plugin-vue_export-helper-BCo6x5W8.js";const B={class:"device-manage"},R={class:"page-header"},$={class:"page-title"},_={class:"header-actions"},O={key:0,class:"view-mode-toggle"},E=["title"],N=["title"],j=["disabled","title"],H=["title"],z=["title"],T={class:"device-search-bar"},q=["placeholder"],G={class:"device-list"},K={key:0,class:"empty-state"},W={key:1,class:"list-view"},J={class:"device-table-grid"},X={class:"device-row device-header-row"},Q={class:"cell cell-select"},Y={class:"cell cell-header"},Z={class:"cell cell-header"},ee={class:"cell cell-header"},le={class:"cell cell-header"},ae={class:"cell cell-header"},se={class:"cell cell-header"},ie={class:"cell cell-header"},ne={class:"cell cell-header"},oe={class:"cell cell-header"},ce={class:"cell cell-header"},te={class:"cell cell-header"},de={class:"cell cell-header"},re=["onClick"],ue={class:"cell cell-select"},ve=["checked","onChange"],me={class:"cell"},pe={class:"field-value"},he={class:"cell"},ge={class:"field-value"},fe={class:"cell"},be={class:"field-value"},ye={class:"cell"},ke={class:"field-value"},xe={class:"cell"},we={class:"field-value"},Ce={key:0,class:"status-badge status-online"},Me={key:1,class:"status-badge status-playing"},Ie={key:2,class:"status-badge status-offline"},De={key:3,class:"status-badge status-never"},Ve={key:4,class:"status-badge status-expired"},Ae={key:5,class:"status-badge status-unknown"},Se={class:"cell"},Le=["onClick","title"],Pe={class:"cell"},Fe={class:"field-value"},Ue={class:"cell"},Be=["onClick","title"],Re={class:"cell"},$e=["onClick","title"],_e={class:"cell"},Oe=["onClick","title"],Ee={class:"cell"},Ne=["onClick","title"],je={class:"cell"},He=["disabled","onClick","title"],ze=["disabled","onClick","title"],Te={key:2,class:"card-view"},qe={class:"card-grid"},Ge=["onClick"],Ke={class:"card-header"},We={class:"card-select"},Je=["checked","onChange"],Xe={class:"card-actions"},Qe=["disabled","onClick","title"],Ye=["disabled","onClick","title"],Ze={class:"card-body"},el={class:"card-info-row"},ll={class:"info-label"},al={class:"info-value"},sl={class:"card-info-row"},il={class:"info-label"},nl={class:"info-value"},ol={class:"card-info-row"},cl={class:"info-label"},tl={class:"card-info-row"},dl={class:"info-label"},rl={class:"info-value"},ul={class:"card-info-row"},vl={class:"info-label"},ml={class:"info-value"},pl={key:0,class:"status-badge status-online"},hl={key:1,class:"status-badge status-playing"},gl={key:2,class:"status-badge status-offline"},fl={key:3,class:"status-badge status-never"},bl={key:4,class:"status-badge status-expired"},yl={key:5,class:"status-badge status-unknown"},kl={class:"card-footer"},xl=["onClick","title"],wl=["onClick","title"],Cl=["onClick","title"],Ml=["onClick","title"],Il=["onClick","title"],Dl={key:3,class:"loading-mask"},Vl={class:"dialog-header"},Al={class:"dialog-body"},Sl={class:"form-group"},Ll=["placeholder"],Pl={key:0,class:"error-text"},Fl={class:"form-group"},Ul=["placeholder"],Bl={key:0,class:"error-text"},Rl={class:"form-group"},$l=["placeholder"],_l={key:0,class:"error-text"},Ol={class:"form-hint"},El={class:"hint-detail"},Nl={class:"dialog-footer"},jl=["disabled"],Hl={class:"dialog-header"},zl={class:"dialog-body"},Tl={class:"form-group"},ql=["placeholder"],Gl={key:0,class:"error-text"},Kl={class:"dialog-footer"},Wl=["disabled"],Jl={class:"dialog-header"},Xl={class:"dialog-body"},Ql={class:"form-group"},Yl=["placeholder"],Zl={class:"form-group"},ea=["placeholder"],la={key:0,class:"error-text"},aa={class:"form-hint"},sa={class:"dialog-footer"},ia=["disabled"],na={class:"dialog-header"},oa={class:"dialog-body"},ca={class:"form-group"},ta=["placeholder"],da={key:0,class:"error-text"},ra={class:"form-group"},ua=["placeholder"],va={key:0,class:"error-text"},ma={class:"form-group"},pa=["placeholder"],ha={key:0,class:"error-text"},ga={class:"form-group"},fa=["placeholder"],ba={class:"dialog-footer"},ya=["disabled"],ka={class:"dialog-header"},xa={class:"dialog-body"},wa={class:"volume-control"},Ca={class:"volume-display"},Ma={class:"volume-value"},Ia={class:"volume-range"},Da={class:"volume-input"},Va={class:"dialog-footer"},Aa=["disabled"],Sa={class:"dialog-header"},La={class:"dialog-body"},Pa={class:"selected-devices-info"},Fa={class:"info-label"},Ua={class:"info-count"},Ba={class:"volume-control"},Ra={class:"volume-display"},$a={class:"volume-value"},_a={class:"volume-range"},Oa={class:"volume-input"},Ea={class:"dialog-footer"},Na=["disabled"],ja={class:"dialog-header"},Ha={class:"dialog-body"},za={class:"scan-top-bar"},Ta={class:"scan-hint"},qa=["disabled"],Ga={key:0,class:"scan-spinner",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"14",height:"14"},Ka={key:0,class:"scan-error"},Wa={class:"scan-main-layout"},Ja={class:"scan-main-left"},Xa={key:0,class:"scan-results"},Qa={class:"scan-results-header"},Ya={class:"scan-count"},Za={class:"scan-sort-btns"},es={class:"sort-arrow"},ls={class:"sort-arrow"},as={class:"scan-device-table"},ss={class:"scan-table-header"},is={class:"col-media"},ns={class:"col-port"},os={class:"col-flag"},cs={class:"col-flag"},ts={class:"col-dns"},ds={class:"scan-table-body"},rs=["onClick"],us={class:"col-idx"},vs={class:"col-ip"},ms={class:"col-seed mono"},ps={class:"col-media"},hs={class:"col-port"},gs={class:"col-flag"},fs={class:"col-flag"},bs={class:"col-dns"},ys={class:"col-action"},ks=["onClick","title"],xs=["onClick"],ws={key:1,class:"scan-empty"},Cs={class:"scan-console-side"},Ms={class:"console-header"},Is={class:"console-body",ref:"consoleBody"},Ds={key:0,class:"console-empty"},Vs={class:"dialog-header"},As={class:"dialog-body"},Ss={class:"config-seed-display"},Ls={class:"config-seed-label"},Ps={class:"config-seed-value"},Fs={class:"test-comm-section"},Us=["disabled"],Bs={class:"form-group"},Rs={class:"toggle-label"},$s={key:0,class:"config-ip-fields"},_s={class:"form-group"},Os={key:0,class:"field-error"},Es={class:"form-group"},Ns={key:0,class:"field-error"},js={class:"form-group"},Hs={key:0,class:"field-error"},zs={class:"config-row-2col"},Ts={class:"form-group"},qs={key:0,class:"field-error"},Gs={class:"form-group"},Ks={key:0,class:"field-error"},Ws={class:"config-row-2col"},Js={class:"form-group"},Xs=["placeholder"],Qs={key:0,class:"field-error"},Ys={class:"form-group"},Zs={class:"toggle-label"},ei={class:"console-section"},li={class:"console-header"},ai={class:"console-body",ref:"consoleBody"},si={key:0,class:"console-empty"},ii={class:"dialog-footer"},ni={class:"dialog-header"},oi={class:"dialog-body amixer-body"},ci={class:"amixer-toolbar"},ti={class:"amixer-seed-display mono"},di=["disabled"],ri={class:"amixer-groups"},ui={class:"amixer-group"},vi={class:"amixer-group-title"},mi={class:"amixer-controls"},pi={class:"amixer-row slider-row"},hi={class:"amixer-label"},gi={class:"amixer-value"},fi={class:"amixer-row slider-row"},bi={class:"amixer-label"},yi={class:"amixer-value"},ki={class:"amixer-row switch-row"},xi={class:"amixer-label"},wi={value:0},Ci={value:1},Mi={class:"amixer-row switch-row"},Ii={class:"amixer-label"},Di={value:0},Vi={value:1},Ai={class:"amixer-group"},Si={class:"amixer-group-title"},Li={class:"amixer-controls"},Pi={class:"amixer-row slider-row"},Fi={class:"amixer-label"},Ui={class:"amixer-value"},Bi={class:"amixer-row slider-row"},Ri={class:"amixer-label"},$i={class:"amixer-value"},_i={class:"amixer-row slider-row"},Oi={class:"amixer-label"},Ei={class:"amixer-value"},Ni={class:"amixer-row slider-row"},ji={class:"amixer-label"},Hi={class:"amixer-value"},zi={class:"amixer-row slider-row"},Ti={class:"amixer-label"},qi={class:"amixer-value"},Gi={class:"amixer-group"},Ki={class:"amixer-group-title"},Wi={class:"amixer-controls"},Ji={class:"amixer-label"},Xi=["onUpdate:modelValue"],Qi={value:0},Yi={value:1},Zi=["onClick"],en={class:"amixer-group"},ln={class:"amixer-group-title"},an={class:"amixer-controls"},sn={class:"amixer-label"},nn=["onUpdate:modelValue"],on={value:0},cn={value:1},tn=["onClick"],dn={class:"amixer-group"},rn={class:"amixer-group-title"},un={class:"amixer-controls"},vn={class:"amixer-label"},mn=["onUpdate:modelValue"],pn={value:0},hn={value:1},gn=["onClick"],fn={class:"dialog-footer"},bn="device_display_order",yn="device_view_mode",kn=U(e({__name:"index",setup(e){var U,kn;const{t:xn}=x(),wn=w();function Cn(e){var l;const a=`; ${document.cookie}`.split(`; ${e}=`);return 2===a.length&&(null==(l=a.pop())?void 0:l.split(";").shift())||""}function Mn(e,l,a=365){const s=new Date;s.setTime(s.getTime()+24*a*60*60*1e3),document.cookie=`${e}=${l};expires=${s.toUTCString()};path=/`}const In="undefined"!=typeof window&&!!(null==(kn=null==(U=window.Capacitor)?void 0:U.isNativePlatform)?void 0:kn.call(U)),Dn=f(In?"card":"list"),Vn=f("");function An(e){const l=function(){try{const e=Cn(bn);if(e){const l=JSON.parse(e);if(Array.isArray(l))return l}}catch(e){console.error("解析设备排序失败:",e)}return[]}();if(0===l.length)return e;const a=new Map;e.forEach(e=>{e.id&&a.set(e.id,e)});const s=[];return l.forEach(e=>{const l=a.get(e);l&&(s.push(l),a.delete(e))}),a.forEach(e=>{s.push(e)}),s}function Sn(e,l="success"){const a=document.createElement("div");a.className=`custom-message custom-message-${l}`,a.textContent=e,document.body.appendChild(a),setTimeout(()=>{a.classList.add("show")},10),setTimeout(()=>{a.classList.remove("show"),setTimeout(()=>{document.body.removeChild(a)},300)},3e3)}function Ln(e,l=xn("devices.confirmOperation")){return console.log("📋 显示确认对话框:",l,e),new Promise(a=>{const s=document.createElement("div");s.className="confirm-overlay";const i=document.createElement("div");i.className="confirm-dialog",i.innerHTML=`\n <div class="confirm-header">\n <h3>${l}</h3>\n </div>\n <div class="confirm-body">\n <p>${e}</p>\n </div>\n <div class="confirm-footer">\n <button class="confirm-cancel">取消</button>\n <button class="confirm-ok">确定</button>\n </div>\n `,s.appendChild(i),document.body.appendChild(s),console.log("确认对话框已添加到DOM"),console.log("Overlay元素:",s),console.log("Dialog元素:",i);const n=window.getComputedStyle(s),o=window.getComputedStyle(i);console.log("Overlay关键样式:",{display:n.display,position:n.position,zIndex:n.zIndex,opacity:n.opacity,visibility:n.visibility,backgroundColor:n.backgroundColor,top:n.top,left:n.left}),console.log("Dialog关键样式:",{display:o.display,backgroundColor:o.backgroundColor,zIndex:o.zIndex,opacity:o.opacity,visibility:o.visibility,width:o.width,maxWidth:o.maxWidth});const c=i.querySelector(".confirm-cancel"),t=i.querySelector(".confirm-ok"),d=()=>{document.body.removeChild(s)};c.onclick=()=>{d(),a(!1)},t.onclick=()=>{d(),a(!0)},s.onclick=e=>{e.target===s&&(d(),a(!1))}})}l(Dn,e=>{Mn(yn,e),console.log("✓ 视图模式已保存:",e)});const Pn=f([]),Fn=f(!1),Un=b(()=>{const e=Vn.value.trim().toLowerCase();return e?Pn.value.filter(l=>{const a=(l.devname||l.device_name||l.name||"").toLowerCase(),s=(l.device_seed||l.device_code||"").toLowerCase();return a.includes(e)||s.includes(e)}):Pn.value}),Bn=f(!1),Rn=f(!1),$n=f(!1),_n=f(!1),On=f(!1),En=f(!1),Nn=f(!1),jn=f(!1),Hn=f(""),zn=f(!1),{scannedDevices:Tn,isScanning:qn,scanError:Gn,isElectron:Kn,udpLogs:Wn,startScan:Jn,testCommunication:Xn,configureDevice:Qn,sendAmixer:Yn,getAmixerStatus:Zn,clearLogs:eo}=F();l(Wn,()=>{k(()=>{document.querySelectorAll(".console-body").forEach(e=>{e.scrollTop=e.scrollHeight})})});const lo=f(!1),ao=f({seed:"",deviceIP:"",mask:"255.255.255.0",gateway:"",mediaIP:"",mediaPort:12080,autoIP:!0,warmMode:!1,dns:"0.0.0.0"}),so=f("ip"),io=f(!0);function no(e){so.value===e?io.value=!io.value:(so.value=e,io.value=!0)}function oo(e){const l=e.split(".").map(Number);return(l[0]||0)<<24|(l[1]||0)<<16|(l[2]||0)<<8|(l[3]||0)}const co=b(()=>{const e=[...Tn.value],l=io.value?1:-1;return"ip"===so.value?e.sort((e,a)=>(oo(e.ip)-oo(a.ip))*l):e.sort((e,a)=>e.seed.localeCompare(a.seed)*l),e}),to=f([]),ro=f({name:"",serial:"",key:""}),uo=f({id:0,name:"",mac:"",ip:"",port:12080}),vo=f({id:0,name:""}),mo=f({id:0,newsn:""}),po=f(null),ho=f(32),go=f(32),fo=f({}),bo=f({}),yo=f({}),ko=f({}),xo=f(!1);function wo(e,l){const a={};return e.name&&""!==e.name.trim()||(a.name=xn("devices.deviceNameValidationError")),e.serial&&""!==e.serial.trim()||(a.serial=xn("devices.deviceSerialValidationError")),e.key&&""!==e.key.trim()||(a.key=xn("devices.deviceKeyValidationError")),l.value=a,0===Object.keys(a).length}async function Co(){Fn.value=!0,console.log("========================================"),console.log("开始获取设备列表...");try{const e=await C();console.log("设备列表完整响应:",e);let l=[];!0===e.res&&Array.isArray(e.results)?(l=e.results,console.log("✓ 从 results 字段获取到设备:",e.results.length,"个"),Sn(`${xn("devices.successfullyFetched")} ${e.results.length} ${xn("devices.devicesUnit")}`,"success")):!0===e.res&&Array.isArray(e.list)?(l=e.list,console.log("✓ 从 list 字段获取到设备:",e.list.length,"个"),Sn(`${xn("devices.successfullyFetched")} ${e.list.length} ${xn("devices.devicesUnit")}`,"success")):!0===e.res&&Array.isArray(e.filelist)?(l=e.filelist,console.log("✓ 从 filelist 字段获取到设备:",e.filelist.length,"个"),Sn(`${xn("devices.successfullyFetched")} ${e.filelist.length} ${xn("devices.devicesUnit")}`,"success")):Array.isArray(e)?(l=e,console.log("✓ 响应本身是数组,获取到设备:",e.length,"个"),Sn(`${xn("devices.successfullyFetched")} ${e.length} ${xn("devices.devicesUnit")}`,"success")):(Pn.value=[],console.warn("设备列表响应格式异常,无法解析数据"),console.warn("响应的keys:",Object.keys(e)),Sn(xn("devices.deviceListFormatError"),"error")),Pn.value=An(l),console.log("最终设备列表:",Pn.value),console.log("========================================")}catch(e){console.error("获取设备列表失败:",e),Sn(`${xn("devices.fetchDeviceListFailed")}: ${e.message||xn("devices.unknownError")}`,"error")}finally{Fn.value=!1}}async function Mo(){zn.value=!0,await Jn()}async function Io(){const e=ao.value.seed;e&&32===e.length&&/^[0-9a-fA-F]{32}$/.test(e)&&(lo.value=!0,await Xn(e),lo.value=!1)}const Do=f({});function Vo(e){return!!e&&(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.test(e)&&e.split(".").every(e=>{const l=parseInt(e);return l>=0&&l<=255}))}async function Ao(){if(function(){Do.value={};const e=ao.value;return e.autoIP||(Vo(e.deviceIP)||(Do.value.deviceIP=xn("devices.invalidIP")),Vo(e.mask)||(Do.value.mask=xn("devices.invalidMask")),e.gateway&&!Vo(e.gateway)&&(Do.value.gateway=xn("devices.invalidGateway"))),e.mediaIP&&"0.0.0.0"!==e.mediaIP&&!Vo(e.mediaIP)&&(Do.value.mediaIP=xn("devices.invalidMediaIP")),(!e.mediaPort||e.mediaPort<1||e.mediaPort>65535)&&(Do.value.mediaPort=xn("devices.invalidPort")),e.dns&&"0.0.0.0"!==e.dns&&!Vo(e.dns)&&(Do.value.dns=xn("devices.invalidDNS")),0===Object.keys(Do.value).length}())try{await Qn({...ao.value})?(Sn(xn("devices.deviceConfigured"),"success"),jn.value=!1):Sn(xn("devices.deviceConfigureFailed"),"error")}catch(e){Sn(xn("devices.deviceConfigureFailed")+": "+(e.message||""),"error")}else Sn(Object.values(Do.value).join(";"),"error")}const So=f(!1),Lo=f(""),Po=f(!1),Fo=f({dacVolume:63,hpVolume:63,hpSwitch:1,hpRoute:0,lineInVolume:7,fmInVolume:7,micInVolume:7,micBoost:7,adcCapture:4,adcRightOut:0,adcLeftOut:0,adcLineIn:0,adcRightFM:1,adcLeftFM:1,adcMic:0,leftRightDAC:0,leftLeftDAC:0,leftFM:1,leftLineIn:0,leftMicIn:0,rightLeftDAC:0,rightRightDAC:0,rightFM:1,rightLineIn:0,rightMicIn:0}),Uo=b(()=>[{numid:9,key:"adcRightOut",label:xn("devices.amixerADCRightOut")},{numid:10,key:"adcLeftOut",label:xn("devices.amixerADCLeftOut")},{numid:11,key:"adcLineIn",label:xn("devices.amixerADCLineIn")},{numid:12,key:"adcRightFM",label:xn("devices.amixerADCRightFM")},{numid:13,key:"adcLeftFM",label:xn("devices.amixerADCLeftFM")},{numid:14,key:"adcMic",label:xn("devices.amixerADCMic")}]),Bo=b(()=>[{numid:15,key:"leftRightDAC",label:xn("devices.amixerLeftRightDAC")},{numid:16,key:"leftLeftDAC",label:xn("devices.amixerLeftLeftDAC")},{numid:17,key:"leftFM",label:xn("devices.amixerLeftFM")},{numid:18,key:"leftLineIn",label:xn("devices.amixerLeftLineIn")},{numid:19,key:"leftMicIn",label:xn("devices.amixerLeftMicIn")}]),Ro=b(()=>[{numid:20,key:"rightLeftDAC",label:xn("devices.amixerRightLeftDAC")},{numid:21,key:"rightRightDAC",label:xn("devices.amixerRightRightDAC")},{numid:22,key:"rightFM",label:xn("devices.amixerRightFM")},{numid:23,key:"rightLineIn",label:xn("devices.amixerRightLineIn")},{numid:24,key:"rightMicIn",label:xn("devices.amixerRightMicIn")}]),$o=f(!1);function _o(){Lo.value=ao.value.seed,Po.value=!0,$o.value=!0;const e=window.electronAPI;e&&(No.value=e=>function(e){(function(e){const l=e.split("Simple");for(const a of l)a&&(a.includes("Headphone Source")&&(Fo.value.hpRoute=a.includes("Item0: 'Mixer")?1:0),a.includes("'Headphone',0")&&(Fo.value.hpSwitch=a.includes("[on]")?1:0),a.includes("ADC Mixer Left FM In',0")&&(Fo.value.adcLeftFM=a.includes("[on]")?1:0),a.includes("ADC Mixer Right FM In',0")&&(Fo.value.adcRightFM=a.includes("[on]")?1:0),a.includes("ADC Mixer Right Out',0")&&(Fo.value.adcRightOut=a.includes("[on]")?1:0),a.includes("ADC Mixer Left Out',0")&&(Fo.value.adcLeftOut=a.includes("[on]")?1:0),a.includes("ADC Mixer Mic',0")&&(Fo.value.adcMic=a.includes("[on]")?1:0),a.includes("ADC Mixer Line In',0")&&(Fo.value.adcLineIn=a.includes("[on]")?1:0),a.includes("Left Mixer FM In',0")&&(Fo.value.leftFM=a.includes("[on]")?1:0),a.includes("Left Mixer Left DAC',0")&&(Fo.value.leftLeftDAC=a.includes("[on]")?1:0),a.includes("Left Mixer Line In',0")&&(Fo.value.leftLineIn=a.includes("[on]")?1:0),a.includes("Left Mixer Mic In',0")&&(Fo.value.leftMicIn=a.includes("[on]")?1:0),a.includes("Left Mixer Right DAC',0")&&(Fo.value.leftRightDAC=a.includes("[on]")?1:0),a.includes("Right Mixer FM In',0")&&(Fo.value.rightFM=a.includes("[on]")?1:0),a.includes("Right Mixer Left DAC',0")&&(Fo.value.rightLeftDAC=a.includes("[on]")?1:0),a.includes("Right Mixer Line In',0")&&(Fo.value.rightLineIn=a.includes("[on]")?1:0),a.includes("Right Mixer Mic In',0")&&(Fo.value.rightMicIn=a.includes("[on]")?1:0),a.includes("Right Mixer Right DAC',0")&&(Fo.value.rightRightDAC=a.includes("[on]")?1:0));for(const a of l){if(!a)continue;const e=a.match(/(\d+)\s+\[\d+%/);if(!e)continue;const l=parseInt(e[1]);a.includes("mixer control 'DAC',0")?Fo.value.dacVolume=l:a.includes("mixer control 'ADC',0")?Fo.value.adcCapture=l:a.includes("mixer control 'Mic In',0")?Fo.value.micInVolume=l:a.includes("mixer control 'Mic Boost',0")?Fo.value.micBoost=l:a.includes("mixer control 'Line In',0")?Fo.value.lineInVolume=l:a.includes("mixer control 'FM In',0")?Fo.value.fmInVolume=l:a.includes("mixer control 'Headphone',0")&&(Fo.value.hpVolume=l)}Sn(xn("devices.amixerGetSuccess"),"success")})(e.text),Po.value=!1,$o.value&&($o.value=!1,So.value=!0)}(e),e.onDeviceInfo(No.value)),Oo()}async function Oo(){Po.value=!0;await Zn(Lo.value)||(Sn(xn("devices.amixerGetFailed"),"error"),Po.value=!1,$o.value&&($o.value=!1,So.value=!0))}async function Eo(e,l){await Yn(Lo.value,e,l)?Sn(xn("devices.amixerSetSuccess"),"success"):Sn(xn("devices.amixerSetFailed"),"error")}const No=f(null);async function jo(){if(wo(ro.value,fo)){xo.value=!0;try{const e=`${ro.value.serial.trim()}|${ro.value.key.trim()}`,l=await M({name:ro.value.name.trim(),sn:e});console.log("添加设备响应:",l),console.log("拼接后的SN:",e),l.res?(Sn(xn("devices.addDeviceSuccess"),"success"),Bn.value=!1,ro.value={name:"",serial:"",key:""},fo.value={},await Co()):Sn(l.info||xn("devices.addDeviceFailed"),"error")}catch(e){console.error("添加设备失败:",e),Sn(e.message||xn("devices.addDeviceFailed"),"error")}finally{xo.value=!1}}}l(So,e=>{if(!e&&No.value){const e=window.electronAPI;e&&e.removeDeviceInfoListener(),No.value=null}});const Ho=[3614090360,3905402710,606105819,3250441966,4118548399,1200080426,2821735955,4249261313,1770035416,2336552879,4294925233,2304563134,1804603682,4254626195,2792965006,1236535329,4129170786,3225465664,643717713,3921069994,3593408605,38016083,3634488961,3889429448,568446438,3275163606,4107602567,1163531501,2850285829,4243563512,1735328473,2368359562,4277799234,2272393089,1839030562,4259657740,2763975236,1272893353,4139469664,3200236656,681279174,3936430074,3572445317,76029189,3654602809,3873151461,530742520,3299628645,4096336452,1126891415,2878612391,4237533241,1700485571,2399980690,4293915773,2240044497,1873313359,4264355552,2734768916,1309151649,4149444226,3174756917,718787131,3951481745],zo=[7,12,17,22,7,12,17,22,7,12,17,22,7,12,17,22,5,9,14,20,5,9,14,20,5,9,14,20,5,9,14,20,4,11,16,23,4,11,16,23,4,11,16,23,4,11,16,23,6,10,15,21,6,10,15,21,6,10,15,21,6,10,15,21],To=new Uint8Array([33,109,17,22,29,152,127,22,7,112,66,22,99,12,177,22,13,113,43,20,5,9,14,47,115,229,134,210,59,29,134,20,4,101,61,203,171,191,16,23,38,42,16,23,13,121,106,93,59,123,15,21,6,10,53,21,46,109,151,201,96,107,135,231]);function qo(e){return e>>>0}function Go(e,l){return(e<<l|e>>>32-l)>>>0}function Ko(e){const l=e.length;let a=l+1;for(;a%64!=56;)a++;const s=new Uint8Array(a+8);s.set(e),s[l]=128;const i=8*l;s[a]=255&i,s[a+1]=i>>>8&255,s[a+2]=i>>>16&255,s[a+3]=i>>>24&255,s[a+4]=l>>>29&255;let n=1732584193,o=4023233417,c=2562383102,t=271733878;const d=new Uint32Array(16);for(let v=0;v<s.length-7;v+=64){for(let n=0;n<16;n++){const e=v+4*n;d[n]=qo(s[e]|s[e+1]<<8|s[e+2]<<16|s[e+3]<<24)}let e=n,l=o,a=c,i=t;for(let s=0;s<64;s++){let n,o;s<16?(n=qo(l&a|~l&i),o=s):s<32?(n=qo(i&l|~i&a),o=(5*s+1)%16):s<48?(n=qo(l^a^i),o=(3*s+5)%16):(n=qo(a^(l|~i)),o=7*s%16);const c=i;i=a,a=l,l=qo(l+Go(qo(e+n+Ho[s]+d[o]),zo[s])),e=c}n=qo(n+e),o=qo(o+l),c=qo(c+a),t=qo(t+i)}const r=new Uint8Array(16),u=new DataView(r.buffer);return u.setUint32(0,n,!0),u.setUint32(4,o,!0),u.setUint32(8,c,!0),u.setUint32(12,t,!0),r}function Wo(e){const l=function(e){const l=new Uint8Array(e.length/2);for(let a=0;a<e.length;a+=2)l[a/2]=parseInt(e.substring(a,a+2),16);return l}(e),a=new Uint8Array(80);a.set(l,0),a.set(To,16);const s=Ko(a),i=Ko(s),n=Ko(i);return o=n,Array.from(o).map(e=>e.toString(16).padStart(2,"0")).join("");var o}async function Jo(e){mo.value={id:e.id,currentSerial:e.device_seed||e.device_code||"",newsn:""},ko.value={},En.value=!0}async function Xo(){if(mo.value.newsn&&""!==mo.value.newsn.trim())if(32===mo.value.newsn.trim().length){xo.value=!0;try{const e=await I({newsn:mo.value.newsn.trim(),devid:mo.value.id});console.log("========================================"),console.log("改序列号响应:",e),console.log("设备ID:",mo.value.id),console.log("当前序列号:",mo.value.currentSerial),console.log("新序列号:",mo.value.newsn.trim()),console.log("========================================"),e.res?(Sn(xn("devices.deviceSerialEditSuccess"),"success"),En.value=!1,await Co()):Sn(e.info||xn("devices.deviceSerialEditFailed"),"error")}catch(e){console.error("设备序列号修改失败:",e),Sn(e.message||xn("devices.deviceSerialEditFailed"),"error")}finally{xo.value=!1}}else ko.value.newsn=xn("devices.newSerialLengthError");else ko.value.newsn=xn("devices.newSerialLengthError")}function Qo(e){vo.value={id:e.id,name:e.devname||e.device_name||e.name||""},yo.value={},Rn.value=!0}async function Yo(){if(vo.value.name&&""!==vo.value.name.trim()){xo.value=!0;try{const e=await D({newname:vo.value.name.trim(),devid:vo.value.id});console.log("========================================"),console.log("改名响应:",e),console.log("设备ID:",vo.value.id),console.log("新名称:",vo.value.name.trim()),console.log("========================================"),e.res?(Sn(xn("devices.deviceRenameSuccess"),"success"),Rn.value=!1,await Co()):Sn(e.info||xn("devices.deviceRenameFailed"),"error")}catch(e){console.error("设备改名失败:",e),Sn(e.message||xn("devices.deviceRenameFailed"),"error")}finally{xo.value=!1}}else yo.value.name=xn("devices.newDeviceNameValidationError")}async function Zo(e){const l=e.device_seed||e.device_code||"",a=1===e.kind,s=xn(a?"devices.closeDebugSound":"devices.openDebugSound"),i=a?2:1;if(await Ln(`${s}?`,s)){xo.value=!0;try{const e=await L({dsv:i,sn:l});e.res?(Sn(xn("devices.debugSoundSuccess"),"success"),await Co()):Sn(e.info||xn("devices.debugSoundFailed"),"error")}catch(n){Sn(n.message||xn("devices.debugSoundFailed"),"error")}finally{xo.value=!1}}}async function ec(){if(wo(uo.value,bo)){xo.value=!0;try{const e=await V({id:uo.value.id,name:uo.value.name.trim(),mac:uo.value.mac.trim(),ip:uo.value.ip||void 0,port:uo.value.port||void 0});console.log("编辑设备响应:",e),e.res?(Sn(xn("devices.deviceEditSuccess"),"success"),$n.value=!1,await Co()):Sn(e.info||xn("devices.deviceEditFailed"),"error")}catch(e){console.error("编辑设备失败:",e),Sn(e.message||xn("devices.deviceEditFailed"),"error")}finally{xo.value=!1}}}async function lc(e){console.log("🗑️ 点击删除按钮"),console.log("设备信息:",e),console.log("设备ID:",e.id),console.log("设备名称:",e.devname||e.device_name||e.name);try{console.log("准备显示确认对话框...");const l=await Ln(`${xn("devices.confirmDelete")} "${e.devname||e.device_name||e.name||xn("devices.unnamedDevice")}"${xn("devices.deleteCannotUndo")}`,xn("devices.deleteDevice"));if(console.log("用户确认删除:",l),!l)return;const a=await P({snid:e.id});console.log("========================================"),console.log("删除设备响应:",a),console.log("设备ID:",e.id),console.log("设备名称:",e.device_name||e.name),console.log("========================================"),a.res?(Sn(xn("devices.deleteDeviceSuccess"),"success"),await Co()):Sn(a.info||xn("devices.deleteDeviceFailed"),"error")}catch(l){console.error("删除设备失败:",l),Sn(l.message||xn("devices.deleteDeviceFailed"),"error")}}function ac(e){po.value=e,ho.value=void 0!==e.vol&&-1!==e.vol?e.vol:32,_n.value=!0}async function sc(){var e,l;if(po.value)if(ho.value<1||ho.value>63)Sn(xn("devices.volumeValidationError"),"error");else{xo.value=!0;try{const e=po.value.device_seed||po.value.device_code||String(po.value.id),l=await A({vol:ho.value,snlist:e});console.log("========================================"),console.log("调节音量响应:",l),console.log("设备名称:",po.value.devname),console.log("设备编码:",e),console.log("设备序列号:",po.value.device_seed),console.log("设置音量值:",ho.value),console.log("========================================"),l.res?(Sn(`${xn("devices.adjustVolumeSuccess")} ${ho.value}`,"success"),_n.value=!1,await Co()):Sn(l.info||xn("devices.adjustVolumeFailed"),"error")}catch(a){console.error("========================================"),console.error("调节音量失败:",a),console.error("错误详情:",{message:a.message,status:null==(e=a.response)?void 0:e.status,data:null==(l=a.response)?void 0:l.data}),console.error("========================================"),Sn(a.message||xn("devices.adjustVolumeFailed"),"error")}finally{xo.value=!1}}}async function ic(){var e,l;if(0!==to.value.length)if(go.value<1||go.value>63)Sn(xn("devices.volumeValidationError"),"error");else{xo.value=!0;try{const e=Pn.value.filter(e=>to.value.includes(e.id)),l=e.map(e=>e.device_seed||e.device_code||String(e.id)).join("|");console.log("========================================"),console.log("开始批量调节音量"),console.log("选中设备数量:",to.value.length),console.log("设备编码列表:",l),console.log("设置音量值:",go.value),console.log("========================================");const a=await S({vol:go.value,snlist:l});console.log("========================================"),console.log("批量调节响应:",a),console.log("========================================"),a.res?(Sn(`${xn("devices.batchAdjustSuccess")} ${to.value.length} ${xn("devices.devicesUnit")}`,"success"),On.value=!1,to.value=[],await Co()):Sn(a.info||xn("devices.batchAdjustFailed"),"error")}catch(a){console.error("========================================"),console.error("批量调节音量失败:",a),console.error("错误详情:",{message:a.message,status:null==(e=a.response)?void 0:e.status,data:null==(l=a.response)?void 0:l.data}),console.error("========================================"),Sn(a.message||xn("devices.batchAdjustFailed"),"error")}finally{xo.value=!1}}else Sn(xn("devices.selectDevicesFirst"),"error")}function nc(e){return to.value.includes(e)}function oc(e){const l=to.value.indexOf(e);l>-1?to.value.splice(l,1):to.value.push(e)}function cc(){return 0!==Pn.value.length&&to.value.length===Pn.value.length}function tc(){cc()?to.value=[]:to.value=Pn.value.map(e=>e.id)}const dc=f(new Set);function rc(e){return dc.value.has(e.id)}function uc(e){return Pn.value.findIndex(l=>l.id===e.id)<=0}function vc(e){return Pn.value.findIndex(l=>l.id===e.id)>=Pn.value.length-1}async function mc(e,l){const a="list"===Dn.value,s=a?".device-table-grid":".card-grid",i=document.querySelector(s);if(!i)return;const n=a?".device-data-row":".device-card",o=i.querySelectorAll(n),c=o[e],t=o[l];if(!c||!t)return;const d=e=>a?Array.from(e.querySelectorAll(".cell")):[e],r=d(c),u=d(t);if(!r.length||!u.length)return;const v=r[0].getBoundingClientRect(),m=u[0].getBoundingClientRect(),p=v.left,h=v.top,g=m.left,f=m.top,b=Pn.value[e].id,y=Pn.value[l].id;dc.value.add(b),dc.value.add(y);const x=Pn.value[e];Pn.value[e]=Pn.value[l],Pn.value[l]=x,function(e){try{const l=JSON.stringify(e);Mn(bn,l),console.log("✓ 设备排序已保存:",e)}catch(l){console.error("保存设备排序失败:",l)}}(Pn.value.map(e=>e.id)),await k();const w=i.querySelectorAll(n),C=d(w[l]),M=d(w[e]);if(!C.length||!M.length)return;const I=C[0].getBoundingClientRect(),D=M[0].getBoundingClientRect(),V=p-I.left,A=h-I.top,S=g-D.left,L=f-D.top,P=(e,l)=>{e.forEach(e=>{Object.assign(e.style,l)})};P(C,{transform:`translate(${V}px, ${A}px)`,transition:"none"}),P(M,{transform:`translate(${S}px, ${L}px)`,transition:"none"}),i.getBoundingClientRect();const F="transform 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94)";P(C,{transform:"translate(0, 0)",transition:F}),P(M,{transform:"translate(0, 0)",transition:F}),setTimeout(()=>{P(C,{transform:"",transition:""}),P(M,{transform:"",transition:""}),dc.value.delete(b),dc.value.delete(y)},350)}function pc(e){const l=Pn.value.findIndex(l=>l.id===e.id);l>0&&(mc(l,l-1),console.log(`✓ 设备 "${e.devname||e.device_name}" 上移到位置 ${l-1}`))}function hc(e){const l=Pn.value.findIndex(l=>l.id===e.id);l<Pn.value.length-1&&(mc(l,l+1),console.log(`✓ 设备 "${e.devname||e.device_name}" 下移到位置 ${l+1}`))}return a(()=>{Dn.value=function(){if(window.innerWidth<=768||In)return"card";const e=Cn(yn);return"list"===e||"card"===e?(console.log("✓ 加载保存的视图模式:",e),e):"list"}(),Co()}),(e,l)=>{var a,f;return y(),s("div",B,[i("div",{class:c(["content-area",{"list-layout":"list"===Dn.value}])},[i("div",R,[i("h2",$,n(o(xn)("devices.title")),1),i("div",_,[o(In)?d("",!0):(y(),s("div",O,[i("button",{class:c(["view-mode-btn",{active:"list"===Dn.value}]),onClick:l[0]||(l[0]=e=>Dn.value="list"),title:o(xn)("devices.listView")},[...l[88]||(l[88]=[t('<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="18" height="18" data-v-ffaf74a6><line x1="8" y1="6" x2="21" y2="6" data-v-ffaf74a6></line><line x1="8" y1="12" x2="21" y2="12" data-v-ffaf74a6></line><line x1="8" y1="18" x2="21" y2="18" data-v-ffaf74a6></line><line x1="3" y1="6" x2="3.01" y2="6" data-v-ffaf74a6></line><line x1="3" y1="12" x2="3.01" y2="12" data-v-ffaf74a6></line><line x1="3" y1="18" x2="3.01" y2="18" data-v-ffaf74a6></line></svg>',1)])],10,E),i("button",{class:c(["view-mode-btn",{active:"card"===Dn.value}]),onClick:l[1]||(l[1]=e=>Dn.value="card"),title:o(xn)("devices.cardView")},[...l[89]||(l[89]=[t('<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="18" height="18" data-v-ffaf74a6><rect x="3" y="3" width="7" height="7" data-v-ffaf74a6></rect><rect x="14" y="3" width="7" height="7" data-v-ffaf74a6></rect><rect x="14" y="14" width="7" height="7" data-v-ffaf74a6></rect><rect x="3" y="14" width="7" height="7" data-v-ffaf74a6></rect></svg>',1)])],10,N)])),i("button",{class:"refresh-btn",onClick:Co,disabled:Fn.value,title:o(xn)("devices.refreshList")},[...l[90]||(l[90]=[i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"18",height:"18"},[i("path",{d:"M23 4v6h-6M1 20v-6h6"}),i("path",{d:"M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15"})],-1)])],8,j),to.value.length>0?(y(),s("button",{key:1,class:"batch-volume-btn diablo-button",onClick:l[2]||(l[2]=e=>On.value=!0),title:o(xn)("devices.batchVolume")},[l[91]||(l[91]=i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"16",height:"16"},[i("path",{d:"M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02z"})],-1)),r(" "+n(o(xn)("devices.batchVolume"))+" ("+n(to.value.length)+") ",1)],8,H)):d("",!0),o(wn).canManageDevice?(y(),s("button",{key:2,class:"add-btn diablo-button",onClick:l[3]||(l[3]=e=>Bn.value=!0)},[l[92]||(l[92]=i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[i("path",{d:"M12 5v14M5 12h14"})],-1)),r(" "+n(o(In)?"":o(xn)("devices.addDevice")),1)])):d("",!0),o(Kn)&&o(wn).canManageDevice?(y(),s("button",{key:3,class:"scan-btn diablo-button",onClick:l[4]||(l[4]=e=>Nn.value=!0),title:o(xn)("devices.scanDevices")},[l[93]||(l[93]=i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"16",height:"16"},[i("circle",{cx:"12",cy:"12",r:"3"}),i("path",{d:"M12 1v4M12 19v4M4.22 4.22l2.83 2.83M16.95 16.95l2.83 2.83M1 12h4M19 12h4M4.22 19.78l2.83-2.83M16.95 7.05l2.83-2.83"})],-1)),r(" "+n(o(xn)("devices.scanDevices")),1)],8,z)):d("",!0)])]),i("div",T,[l[95]||(l[95]=i("svg",{class:"search-icon",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[i("circle",{cx:"11",cy:"11",r:"8"}),i("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})],-1)),u(i("input",{"onUpdate:modelValue":l[5]||(l[5]=e=>Vn.value=e),class:"search-input",placeholder:o(xn)("devices.searchPlaceholder")||"搜索设备名称或序列号...",type:"text"},null,8,q),[[v,Vn.value]]),Vn.value?(y(),s("button",{key:0,class:"search-clear",onClick:l[6]||(l[6]=e=>Vn.value="")},[...l[94]||(l[94]=[i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"16",height:"16"},[i("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),i("line",{x1:"6",y1:"6",x2:"18",y2:"18"})],-1)])])):d("",!0)]),i("div",G,[0!==Un.value.length||Fn.value?d("",!0):(y(),s("div",K,[l[96]||(l[96]=i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5"},[i("rect",{x:"4",y:"4",width:"16",height:"16",rx:"2"}),i("path",{d:"M9 9h6M9 13h6M9 17h6"})],-1)),i("p",null,n(o(xn)("devices.noDevices")),1)])),"list"===Dn.value&&Un.value.length>0?(y(),s("div",W,[i("div",J,[i("div",X,[i("div",Q,[i("input",{type:"checkbox",checked:cc,onChange:tc},null,32)]),i("div",Y,n(o(xn)("devices.id")),1),i("div",Z,n(o(xn)("devices.deviceName")),1),i("div",ee,n(o(xn)("devices.serialNumber")),1),i("div",le,n(o(xn)("devices.volume")),1),i("div",ae,n(o(xn)("common.status")),1),i("div",se,n(o(xn)("devices.debugSound")),1),i("div",ie,n(o(xn)("devices.lastUpdate")),1),i("div",ne,n(o(xn)("devices.changeVolume")),1),i("div",oe,n(o(xn)("devices.changeName")),1),i("div",ce,n(o(xn)("devices.changeSerial")),1),i("div",te,n(o(xn)("common.delete")),1),i("div",de,n(o(xn)("common.actions")),1)]),(y(!0),s(m,null,p(Un.value,e=>(y(),s("div",{key:e.id,class:c(["device-row device-data-row",{offline:1!==e.status,playing:1===e.status,selected:nc(e.id),moving:rc(e)}]),onClick:l=>oc(e.id)},[i("div",ue,[i("input",{type:"checkbox",checked:nc(e.id),onChange:l=>oc(e.id),onClick:l[7]||(l[7]=h(()=>{},["stop"]))},null,40,ve)]),i("div",me,[i("span",pe,n(e.id),1)]),i("div",he,[i("span",ge,n(e.devname||e.device_name||e.name||o(xn)("devices.unnamedDevice")),1)]),i("div",fe,[i("span",be,n(e.device_seed||e.device_code||"-"),1)]),i("div",ye,[i("span",ke,n(void 0!==e.vol&&-1!==e.vol?e.vol:void 0!==e.volume?e.volume:o(xn)("devices.volumeNotSet")),1)]),i("div",xe,[i("span",we,[1===e.status?(y(),s("span",Ce,[l[97]||(l[97]=i("span",{class:"status-indicator"},null,-1)),r(" "+n(o(xn)("devices.online")),1)])):2===e.status?(y(),s("span",Me,[l[98]||(l[98]=i("span",{class:"status-indicator"},null,-1)),r(" "+n(o(xn)("devices.playing")),1)])):0===e.status?(y(),s("span",Ie,[l[99]||(l[99]=i("span",{class:"status-indicator"},null,-1)),r(" "+n(o(xn)("devices.offline")),1)])):-1===e.status?(y(),s("span",De,[l[100]||(l[100]=i("span",{class:"status-indicator"},null,-1)),r(" "+n(o(xn)("devices.neverOnline")),1)])):-2===e.status?(y(),s("span",Ve,[l[101]||(l[101]=i("span",{class:"status-indicator"},null,-1)),r(" "+n(o(xn)("devices.expiredDisabled")),1)])):(y(),s("span",Ae,[l[102]||(l[102]=i("span",{class:"status-indicator"},null,-1)),r(" "+n(o(xn)("devices.unknown")),1)]))])]),i("div",Se,[i("button",{class:c(["debug-sound-btn",{open:1===e.kind,close:2===e.kind}]),onClick:h(l=>Zo(e),["stop"]),title:1===e.kind?o(xn)("devices.closeDebugSound"):o(xn)("devices.openDebugSound")},n(1===e.kind?o(xn)("devices.closeDebugSound"):2===e.kind?o(xn)("devices.openDebugSound"):o(xn)("devices.unknownStatus")),11,Le)]),i("div",Pe,[i("span",Fe,n(e.updatetime||"-"),1)]),i("div",Ue,[i("button",{class:"action-btn volume-btn",onClick:h(l=>ac(e),["stop"]),title:o(xn)("devices.adjustVolume")},[...l[103]||(l[103]=[i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"20",height:"20"},[i("path",{d:"M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02z"})],-1)])],8,Be)]),i("div",Re,[i("button",{class:"action-btn rename-btn",onClick:h(l=>Qo(e),["stop"]),title:o(xn)("devices.changeName")},[...l[104]||(l[104]=[i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"20",height:"20"},[i("path",{d:"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"}),i("path",{d:"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"})],-1)])],8,$e)]),i("div",_e,[i("button",{class:"action-btn",onClick:h(l=>Jo(e),["stop"]),title:o(xn)("devices.changeSerial")},[...l[105]||(l[105]=[i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"20",height:"20"},[i("path",{d:"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"}),i("path",{d:"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"})],-1)])],8,Oe)]),i("div",Ee,[o(wn).canManageDevice?(y(),s("button",{key:0,class:"action-btn delete-btn",onClick:h(l=>lc(e),["stop"]),title:o(xn)("devices.deleteDevice")},[...l[106]||(l[106]=[i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"20",height:"20"},[i("path",{d:"M3 6h18M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"})],-1)])],8,Ne)):d("",!0)]),i("div",je,[i("button",{class:"sort-btn",disabled:uc(e),onClick:h(l=>pc(e),["stop"]),title:o(xn)("common.moveUp")},[...l[107]||(l[107]=[i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"16",height:"16"},[i("path",{d:"M18 15l-6-6-6 6"})],-1)])],8,He),i("button",{class:"sort-btn",disabled:vc(e),onClick:h(l=>hc(e),["stop"]),title:o(xn)("common.moveDown")},[...l[108]||(l[108]=[i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"16",height:"16"},[i("path",{d:"M6 9l6 6 6-6"})],-1)])],8,ze)])],10,re))),128))])])):d("",!0),"card"===Dn.value&&Un.value.length>0?(y(),s("div",Te,[i("div",qe,[(y(!0),s(m,null,p(Un.value,e=>(y(),s("div",{key:e.id,class:c(["device-card",{offline:1!==e.status,playing:1===e.status,selected:nc(e.id),moving:rc(e)}]),onClick:l=>oc(e.id)},[i("div",Ke,[i("div",We,[i("input",{type:"checkbox",checked:nc(e.id),onChange:l=>oc(e.id),onClick:l[8]||(l[8]=h(()=>{},["stop"]))},null,40,Je)]),i("div",Xe,[i("button",{class:"sort-btn",disabled:uc(e),onClick:h(l=>pc(e),["stop"]),title:o(xn)("common.moveUp")},[...l[109]||(l[109]=[i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"16",height:"16"},[i("path",{d:"M18 15l-6-6-6 6"})],-1)])],8,Qe),i("button",{class:"sort-btn",disabled:vc(e),onClick:h(l=>hc(e),["stop"]),title:o(xn)("common.moveDown")},[...l[110]||(l[110]=[i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"16",height:"16"},[i("path",{d:"M6 9l6 6 6-6"})],-1)])],8,Ye)])]),i("div",Ze,[i("div",el,[i("span",ll,n(o(xn)("devices.id"))+":",1),i("span",al,n(e.id),1)]),i("div",sl,[i("span",il,n(o(xn)("devices.deviceName"))+":",1),i("span",nl,n(e.devname||e.device_name||e.name||o(xn)("devices.unnamedDevice")),1)]),i("div",ol,[i("span",cl,n(o(xn)("devices.serialNumber"))+":",1),i("span",{class:c(["info-value serial-text",{"serial-highlight":o(In)}])},n(e.device_seed||e.device_code||"-"),3)]),i("div",tl,[i("span",dl,n(o(xn)("devices.volume"))+":",1),i("span",rl,n(void 0!==e.vol&&-1!==e.vol?e.vol:void 0!==e.volume?e.volume:o(xn)("devices.volumeNotSet")),1)]),i("div",ul,[i("span",vl,n(o(xn)("common.status"))+":",1),i("span",ml,[1===e.status?(y(),s("span",pl,[l[111]||(l[111]=i("span",{class:"status-indicator"},null,-1)),r(" "+n(o(xn)("devices.online")),1)])):2===e.status?(y(),s("span",hl,[l[112]||(l[112]=i("span",{class:"status-indicator"},null,-1)),r(" "+n(o(xn)("devices.playing")),1)])):0===e.status?(y(),s("span",gl,[l[113]||(l[113]=i("span",{class:"status-indicator"},null,-1)),r(" "+n(o(xn)("devices.offline")),1)])):-1===e.status?(y(),s("span",fl,[l[114]||(l[114]=i("span",{class:"status-indicator"},null,-1)),r(" "+n(o(xn)("devices.neverOnline")),1)])):-2===e.status?(y(),s("span",bl,[l[115]||(l[115]=i("span",{class:"status-indicator"},null,-1)),r(" "+n(o(xn)("devices.expiredDisabled")),1)])):(y(),s("span",yl,[l[116]||(l[116]=i("span",{class:"status-indicator"},null,-1)),r(" "+n(o(xn)("devices.unknown")),1)]))])])]),i("div",kl,[i("button",{class:"card-action-btn",onClick:h(l=>Zo(e),["stop"]),title:1===e.kind?o(xn)("devices.closeDebugSound"):o(xn)("devices.openDebugSound")},[...l[117]||(l[117]=[i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"16",height:"16"},[i("path",{d:"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"})],-1)])],8,xl),i("button",{class:"card-action-btn",onClick:h(l=>ac(e),["stop"]),title:o(xn)("devices.adjustVolume")},[...l[118]||(l[118]=[i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"16",height:"16"},[i("path",{d:"M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02z"})],-1)])],8,wl),i("button",{class:"card-action-btn",onClick:h(l=>Qo(e),["stop"]),title:o(xn)("devices.changeName")},[...l[119]||(l[119]=[i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"16",height:"16"},[i("path",{d:"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"}),i("path",{d:"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"})],-1)])],8,Cl),i("button",{class:"card-action-btn",onClick:h(l=>Jo(e),["stop"]),title:o(xn)("devices.changeSerial")},[...l[120]||(l[120]=[i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"16",height:"16"},[i("path",{d:"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"}),i("path",{d:"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"})],-1)])],8,Ml),o(wn).canManageDevice?(y(),s("button",{key:0,class:"card-action-btn delete-btn",onClick:h(l=>lc(e),["stop"]),title:o(xn)("devices.deleteDevice")},[...l[121]||(l[121]=[i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"16",height:"16"},[i("path",{d:"M3 6h18M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"})],-1)])],8,Il)):d("",!0)])],10,Ge))),128))])])):d("",!0),Fn.value?(y(),s("div",Dl,[...l[122]||(l[122]=[i("div",{class:"loading-spinner"},null,-1)])])):d("",!0)])],2),Bn.value?(y(),s("div",{key:0,class:"dialog-overlay",onClick:l[15]||(l[15]=e=>Bn.value=!1)},[i("div",{class:"dialog",onClick:l[14]||(l[14]=h(()=>{},["stop"]))},[i("div",Vl,[i("h3",null,n(o(xn)("devices.addDeviceTitle")),1),i("button",{class:"close-btn",onClick:l[9]||(l[9]=e=>Bn.value=!1)},[...l[123]||(l[123]=[i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"20",height:"20"},[i("path",{d:"M18 6L6 18M6 6l12 12"})],-1)])])]),i("div",Al,[i("div",Sl,[i("label",null,n(o(xn)("devices.deviceName"))+" *",1),u(i("input",{"onUpdate:modelValue":l[10]||(l[10]=e=>ro.value.name=e),type:"text",placeholder:o(xn)("devices.deviceNamePlaceholder"),class:c({error:fo.value.name})},null,10,Ll),[[v,ro.value.name]]),fo.value.name?(y(),s("span",Pl,n(fo.value.name),1)):d("",!0)]),i("div",Fl,[i("label",null,n(o(xn)("devices.deviceSerialRequired"))+" *",1),u(i("input",{"onUpdate:modelValue":l[11]||(l[11]=e=>ro.value.serial=e),type:"text",placeholder:o(xn)("devices.deviceSerialPlaceholder"),class:c({error:fo.value.serial})},null,10,Ul),[[v,ro.value.serial]]),fo.value.serial?(y(),s("span",Bl,n(fo.value.serial),1)):d("",!0)]),i("div",Rl,[i("label",null,n(o(xn)("devices.deviceKeyRequired"))+" *",1),u(i("input",{"onUpdate:modelValue":l[12]||(l[12]=e=>ro.value.key=e),type:"text",placeholder:o(xn)("devices.deviceKeyPlaceholder"),class:c({error:fo.value.key})},null,10,$l),[[v,ro.value.key]]),fo.value.key?(y(),s("span",_l,n(fo.value.key),1)):d("",!0),i("p",Ol,[i("span",El,n(o(xn)("devices.deviceKeyHint")),1)])])]),i("div",Nl,[i("button",{class:"cancel-btn diablo-button-secondary",onClick:l[13]||(l[13]=e=>Bn.value=!1)},n(o(xn)("common.cancel")),1),i("button",{class:"confirm-btn diablo-button",onClick:jo,disabled:xo.value},n(xo.value?o(xn)("devices.adding"):o(xn)("common.add")),9,jl)])])])):d("",!0),Rn.value?(y(),s("div",{key:1,class:"dialog-overlay",onClick:l[20]||(l[20]=e=>Rn.value=!1)},[i("div",{class:"dialog",onClick:l[19]||(l[19]=h(()=>{},["stop"]))},[i("div",Hl,[i("h3",null,n(o(xn)("devices.renameTitle")),1),i("button",{class:"close-btn",onClick:l[16]||(l[16]=e=>Rn.value=!1)},[...l[124]||(l[124]=[i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"20",height:"20"},[i("path",{d:"M18 6L6 18M6 6l12 12"})],-1)])])]),i("div",zl,[i("div",Tl,[i("label",null,n(o(xn)("devices.deviceName"))+" *",1),u(i("input",{"onUpdate:modelValue":l[17]||(l[17]=e=>vo.value.name=e),type:"text",placeholder:o(xn)("devices.newDeviceNamePlaceholder"),class:c({error:yo.value.name})},null,10,ql),[[v,vo.value.name]]),yo.value.name?(y(),s("span",Gl,n(yo.value.name),1)):d("",!0)])]),i("div",Kl,[i("button",{class:"cancel-btn diablo-button-secondary",onClick:l[18]||(l[18]=e=>Rn.value=!1)},n(o(xn)("common.cancel")),1),i("button",{class:"confirm-btn diablo-button",onClick:Yo,disabled:xo.value},n(xo.value?o(xn)("devices.saving"):o(xn)("common.save")),9,Wl)])])])):d("",!0),En.value?(y(),s("div",{key:2,class:"dialog-overlay",onClick:l[26]||(l[26]=e=>En.value=!1)},[i("div",{class:"dialog",onClick:l[25]||(l[25]=h(()=>{},["stop"]))},[i("div",Jl,[i("h3",null,n(o(xn)("devices.editSerialTitle")),1),i("button",{class:"close-btn",onClick:l[21]||(l[21]=e=>En.value=!1)},[...l[125]||(l[125]=[i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"20",height:"20"},[i("path",{d:"M18 6L6 18M6 6l12 12"})],-1)])])]),i("div",Xl,[i("div",Ql,[i("label",null,n(o(xn)("devices.currentSerial")),1),u(i("input",{"onUpdate:modelValue":l[22]||(l[22]=e=>mo.value.currentSerial=e),type:"text",placeholder:o(xn)("devices.currentSerialPlaceholder"),disabled:""},null,8,Yl),[[v,mo.value.currentSerial]])]),i("div",Zl,[i("label",null,n(o(xn)("devices.newSerial"))+" *",1),u(i("input",{"onUpdate:modelValue":l[23]||(l[23]=e=>mo.value.newsn=e),type:"text",placeholder:o(xn)("devices.newSerialPlaceholder"),class:c({error:ko.value.newsn})},null,10,ea),[[v,mo.value.newsn]]),ko.value.newsn?(y(),s("span",la,n(ko.value.newsn),1)):d("",!0),i("p",aa,n(o(xn)("devices.serialLengthHint")),1)])]),i("div",sa,[i("button",{class:"cancel-btn diablo-button-secondary",onClick:l[24]||(l[24]=e=>En.value=!1)},n(o(xn)("common.cancel")),1),i("button",{class:"confirm-btn diablo-button",onClick:Xo,disabled:xo.value},n(xo.value?o(xn)("devices.adjusting"):o(xn)("common.save")),9,ia)])])])):d("",!0),$n.value?(y(),s("div",{key:3,class:"dialog-overlay",onClick:l[34]||(l[34]=e=>$n.value=!1)},[i("div",{class:"dialog",onClick:l[33]||(l[33]=h(()=>{},["stop"]))},[i("div",na,[i("h3",null,n(o(xn)("devices.editDeviceTitle")),1),i("button",{class:"close-btn",onClick:l[27]||(l[27]=e=>$n.value=!1)},[...l[126]||(l[126]=[i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"20",height:"20"},[i("path",{d:"M18 6L6 18M6 6l12 12"})],-1)])])]),i("div",oa,[i("div",ca,[i("label",null,n(o(xn)("devices.deviceName"))+" *",1),u(i("input",{"onUpdate:modelValue":l[28]||(l[28]=e=>uo.value.name=e),type:"text",placeholder:o(xn)("devices.deviceNamePlaceholder"),class:c({error:bo.value.name})},null,10,ta),[[v,uo.value.name]]),bo.value.name?(y(),s("span",da,n(bo.value.name),1)):d("",!0)]),i("div",ra,[i("label",null,n(o(xn)("devices.macAddress"))+" *",1),u(i("input",{"onUpdate:modelValue":l[29]||(l[29]=e=>uo.value.mac=e),type:"text",placeholder:o(xn)("devices.macAddressPlaceholder"),class:c({error:bo.value.mac})},null,10,ua),[[v,uo.value.mac]]),bo.value.mac?(y(),s("span",va,n(bo.value.mac),1)):d("",!0)]),i("div",ma,[i("label",null,n(o(xn)("devices.ipAddress")),1),u(i("input",{"onUpdate:modelValue":l[30]||(l[30]=e=>uo.value.ip=e),type:"text",placeholder:o(xn)("devices.ipAddressPlaceholder"),class:c({error:bo.value.ip})},null,10,pa),[[v,uo.value.ip]]),bo.value.ip?(y(),s("span",ha,n(bo.value.ip),1)):d("",!0)]),i("div",ga,[i("label",null,n(o(xn)("devices.port")),1),u(i("input",{"onUpdate:modelValue":l[31]||(l[31]=e=>uo.value.port=e),type:"number",placeholder:o(xn)("devices.portPlaceholder"),min:"1",max:"65535"},null,8,fa),[[v,uo.value.port,void 0,{number:!0}]])])]),i("div",ba,[i("button",{class:"cancel-btn diablo-button-secondary",onClick:l[32]||(l[32]=e=>$n.value=!1)},n(o(xn)("common.cancel")),1),i("button",{class:"confirm-btn diablo-button",onClick:ec,disabled:xo.value},n(xo.value?o(xn)("devices.saving"):o(xn)("common.save")),9,ya)])])])):d("",!0),_n.value?(y(),s("div",{key:4,class:"dialog-overlay",onClick:l[40]||(l[40]=e=>_n.value=!1)},[i("div",{class:"dialog volume-dialog",onClick:l[39]||(l[39]=h(()=>{},["stop"]))},[i("div",ka,[i("h3",null,n(o(xn)("devices.adjustVolumeTitle"))+" - "+n((null==(a=po.value)?void 0:a.devname)||(null==(f=po.value)?void 0:f.device_name)),1),i("button",{class:"close-btn",onClick:l[35]||(l[35]=e=>_n.value=!1)},[...l[127]||(l[127]=[i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"20",height:"20"},[i("path",{d:"M18 6L6 18M6 6l12 12"})],-1)])])]),i("div",xa,[i("div",wa,[i("div",Ca,[i("span",Ma,n(ho.value),1),i("span",Ia,n(o(xn)("devices.volumeRange")),1)]),u(i("input",{"onUpdate:modelValue":l[36]||(l[36]=e=>ho.value=e),type:"range",min:"1",max:"63",step:"1",class:"volume-slider"},null,512),[[v,ho.value,void 0,{number:!0}]]),l[128]||(l[128]=i("div",{class:"volume-labels"},[i("span",null,"1"),i("span",null,"32"),i("span",null,"63")],-1)),i("div",Da,[i("label",null,n(o(xn)("devices.preciseSetting")),1),u(i("input",{"onUpdate:modelValue":l[37]||(l[37]=e=>ho.value=e),type:"number",min:"1",max:"63",class:"volume-number-input"},null,512),[[v,ho.value,void 0,{number:!0}]])])])]),i("div",Va,[i("button",{class:"cancel-btn diablo-button-secondary",onClick:l[38]||(l[38]=e=>_n.value=!1)},n(o(xn)("common.cancel")),1),i("button",{class:"confirm-btn diablo-button",onClick:sc,disabled:xo.value},n(xo.value?o(xn)("devices.adjusting"):o(xn)("devices.confirmButton")),9,Aa)])])])):d("",!0),On.value?(y(),s("div",{key:5,class:"dialog-overlay",onClick:l[46]||(l[46]=e=>On.value=!1)},[i("div",{class:"dialog batch-volume-dialog",onClick:l[45]||(l[45]=h(()=>{},["stop"]))},[i("div",Sa,[i("h3",null,n(o(xn)("devices.batchAdjustVolumeTitle")),1),i("button",{class:"close-btn",onClick:l[41]||(l[41]=e=>On.value=!1)},[...l[129]||(l[129]=[i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"20",height:"20"},[i("path",{d:"M18 6L6 18M6 6l12 12"})],-1)])])]),i("div",La,[i("div",Pa,[i("span",Fa,n(o(xn)("devices.selectedDevices")),1),i("span",Ua,n(to.value.length)+" "+n(o(xn)("devices.devicesCount")),1)]),i("div",Ba,[i("div",Ra,[i("span",$a,n(go.value),1),i("span",_a,n(o(xn)("devices.volumeRange")),1)]),u(i("input",{"onUpdate:modelValue":l[42]||(l[42]=e=>go.value=e),type:"range",min:"1",max:"63",step:"1",class:"volume-slider"},null,512),[[v,go.value,void 0,{number:!0}]]),l[130]||(l[130]=i("div",{class:"volume-labels"},[i("span",null,"1"),i("span",null,"32"),i("span",null,"63")],-1)),i("div",Oa,[i("label",null,n(o(xn)("devices.preciseSetting")),1),u(i("input",{"onUpdate:modelValue":l[43]||(l[43]=e=>go.value=e),type:"number",min:"1",max:"63",class:"volume-number-input"},null,512),[[v,go.value,void 0,{number:!0}]])])])]),i("div",Ea,[i("button",{class:"cancel-btn diablo-button-secondary",onClick:l[44]||(l[44]=e=>On.value=!1)},n(o(xn)("common.cancel")),1),i("button",{class:"confirm-btn diablo-button",onClick:ic,disabled:xo.value},n(xo.value?o(xn)("devices.adjusting"):`${o(xn)("devices.confirmAdjust")} ${to.value.length} ${o(xn)("devices.devicesCount")}`),9,Na)])])])):d("",!0),Nn.value?(y(),s("div",{key:6,class:"dialog-overlay",onClick:l[52]||(l[52]=e=>Nn.value=!1)},[i("div",{class:"dialog scan-dialog",onClick:l[51]||(l[51]=h(()=>{},["stop"]))},[i("div",ja,[l[131]||(l[131]=i("div",{class:"scan-header-icon"},[i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"20",height:"20"},[i("circle",{cx:"12",cy:"12",r:"3"}),i("path",{d:"M12 1v4M12 19v4M4.22 4.22l2.83 2.83M16.95 16.95l2.83 2.83M1 12h4M19 12h4M4.22 19.78l2.83-2.83M16.95 7.05l2.83-2.83"})])],-1)),i("h3",null,n(o(xn)("devices.deviceScan")),1),i("button",{class:"close-btn",onClick:l[47]||(l[47]=e=>Nn.value=!1)},"×")]),i("div",Ha,[i("div",za,[i("p",Ta,n(o(xn)("devices.scanHint")),1),i("button",{class:"diablo-button scan-action-btn",onClick:Mo,disabled:o(qn)},[o(qn)?(y(),s("svg",Ga,[...l[132]||(l[132]=[i("path",{d:"M23 4v6h-6M1 20v-6h6"},null,-1),i("path",{d:"M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15"},null,-1)])])):d("",!0),r(" "+n(o(qn)?o(xn)("devices.scanning"):o(xn)("devices.scanButton")),1)],8,qa)]),o(Gn)?(y(),s("div",Ka,[l[133]||(l[133]=i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"14",height:"14"},[i("circle",{cx:"12",cy:"12",r:"10"}),i("line",{x1:"15",y1:"9",x2:"9",y2:"15"}),i("line",{x1:"9",y1:"9",x2:"15",y2:"15"})],-1)),r(" "+n(o(Gn)),1)])):d("",!0),i("div",Wa,[i("div",Ja,[o(Tn).length>0?(y(),s("div",Xa,[i("div",Qa,[i("h4",null,[r(n(o(xn)("devices.scannedDevices"))+" ",1),i("span",Ya,n(o(Tn).length),1)]),i("div",Za,[i("button",{class:c(["scan-sort-btn",{active:"ip"===so.value}]),onClick:l[48]||(l[48]=e=>no("ip"))},[l[134]||(l[134]=r(" IP ",-1)),i("span",es,n("ip"===so.value?io.value?"↑":"↓":""),1)],2),i("button",{class:c(["scan-sort-btn",{active:"seed"===so.value}]),onClick:l[49]||(l[49]=e=>no("seed"))},[l[135]||(l[135]=r(" SEED ",-1)),i("span",ls,n("seed"===so.value?io.value?"↑":"↓":""),1)],2)])]),i("div",as,[i("div",ss,[l[136]||(l[136]=i("span",{class:"col-idx"},"#",-1)),l[137]||(l[137]=i("span",{class:"col-ip"},"IP",-1)),l[138]||(l[138]=i("span",{class:"col-seed"},"SEED",-1)),i("span",is,n(o(xn)("devices.mediaServer")),1),i("span",ns,n(o(xn)("devices.mediaPort")),1),i("span",os,n(o(xn)("devices.autoIP")),1),i("span",cs,n(o(xn)("devices.warmMode")),1),i("span",ts,n(o(xn)("devices.dns")),1),l[139]||(l[139]=i("span",{class:"col-action"},null,-1))]),i("div",ds,[(y(!0),s(m,null,p(co.value,(e,a)=>{return y(),s("div",{key:e.seed,class:c(["scan-table-row",{selected:Hn.value===e.seed}]),onClick:l=>function(e){Hn.value=e.seed}(e)},[i("span",us,n(a+1),1),i("span",vs,n(e.ip),1),i("span",ms,n(e.seed),1),i("span",ps,n(e.mediaIP),1),i("span",hs,n(e.mediaPort),1),i("span",gs,[i("span",{class:c(["tag",e.autoIP?"tag-on":"tag-off"])},n(e.autoIP?"ON":"OFF"),3)]),i("span",fs,[i("span",{class:c(["tag",e.warmMode?"tag-on":"tag-off"])},n(e.warmMode?"ON":"OFF"),3)]),i("span",bs,n(e.dns),1),i("span",ys,[(t=e.seed,Pn.value.some(e=>e.device_seed===t)?d("",!0):(y(),s("button",{key:0,class:"scan-add-btn",onClick:h(l=>async function(e){try{const l=e.seed,a=`${l}|${Wo(l)}`,s=await M({name:e.ip||l.substring(0,8),sn:a});s.res?(Sn(xn("devices.addDeviceSuccess"),"success"),await Co()):Sn(s.info||xn("devices.addDeviceFailed"),"error")}catch(l){Sn(l.message||xn("devices.addDeviceFailed"),"error")}}(e),["stop"]),title:o(xn)("devices.addDevice")},[...l[140]||(l[140]=[i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"12",height:"12"},[i("path",{d:"M12 5v14M5 12h14"})],-1)])],8,ks))),i("button",{class:"config-btn",onClick:h(l=>function(e){ao.value={seed:e.seed,deviceIP:e.ip,mask:e.mask||"255.255.255.0",gateway:e.gateway||"",mediaIP:e.mediaIP||"",mediaPort:e.mediaPort||12080,autoIP:e.autoIP,warmMode:e.warmMode,dns:e.dns||"8.8.8.8"},jn.value=!0}(e),["stop"])},[...l[141]||(l[141]=[i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"12",height:"12"},[i("path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"}),i("circle",{cx:"12",cy:"12",r:"3"})],-1)])],8,xs)])],10,rs);var t}),128))])])])):!o(qn)&&zn.value?(y(),s("div",ws,[l[142]||(l[142]=i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5",width:"32",height:"32"},[i("circle",{cx:"11",cy:"11",r:"8"}),i("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})],-1)),i("p",null,n(o(xn)("devices.noDeviceFound")),1)])):d("",!0)]),i("div",Cs,[i("div",Ms,[i("h4",null,n(o(xn)("devices.console")),1),i("button",{class:"console-clear-btn",onClick:l[50]||(l[50]=(...e)=>o(eo)&&o(eo)(...e))},n(o(xn)("devices.clearConsole")),1)]),i("div",Is,[0===o(Wn).length?(y(),s("div",Ds,n(o(xn)("devices.consoleEmpty")),1)):d("",!0),(y(!0),s(m,null,p(o(Wn),(e,l)=>(y(),s("div",{key:l,class:c(["console-line","log-"+e.type])},n(e.msg),3))),128))],512)])])])])])):d("",!0),jn.value?(y(),s("div",{key:7,class:"dialog-overlay",onClick:l[65]||(l[65]=e=>jn.value=!1)},[i("div",{class:"dialog scan-config-dialog",onClick:l[64]||(l[64]=h(()=>{},["stop"]))},[i("div",Vs,[l[143]||(l[143]=i("div",{class:"scan-header-icon config-icon"},[i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"20",height:"20"},[i("path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"}),i("circle",{cx:"12",cy:"12",r:"3"})])],-1)),i("h3",null,n(o(xn)("devices.scanConfigTitle")),1),i("button",{class:"close-btn",onClick:l[53]||(l[53]=e=>jn.value=!1)},"×")]),i("div",As,[i("div",Ss,[i("span",Ls,n(o(xn)("devices.seed")),1),i("span",Ps,n(ao.value.seed),1)]),i("div",Fs,[i("button",{class:"diablo-button test-comm-btn",onClick:Io,disabled:lo.value},n(lo.value?o(xn)("devices.scanning"):o(xn)("devices.testCommBtn")),9,Us)]),i("div",Bs,[i("label",Rs,[i("span",null,n(o(xn)("devices.autoIP")),1),i("span",{class:c(["toggle-switch",{on:ao.value.autoIP}]),onClick:l[54]||(l[54]=e=>ao.value.autoIP=!ao.value.autoIP)},[...l[144]||(l[144]=[i("span",{class:"toggle-knob"},null,-1)])],2)])]),ao.value.autoIP?d("",!0):(y(),s("div",$s,[i("div",_s,[i("label",null,n(o(xn)("devices.deviceIP")),1),u(i("input",{class:c(["form-input",{"input-error":Do.value.deviceIP}]),"onUpdate:modelValue":l[55]||(l[55]=e=>ao.value.deviceIP=e),placeholder:"192.168.1.100"},null,2),[[v,ao.value.deviceIP]]),Do.value.deviceIP?(y(),s("span",Os,n(Do.value.deviceIP),1)):d("",!0)]),i("div",Es,[i("label",null,n(o(xn)("devices.subnetMask")),1),u(i("input",{class:c(["form-input",{"input-error":Do.value.mask}]),"onUpdate:modelValue":l[56]||(l[56]=e=>ao.value.mask=e),placeholder:"255.255.255.0"},null,2),[[v,ao.value.mask]]),Do.value.mask?(y(),s("span",Ns,n(Do.value.mask),1)):d("",!0)]),i("div",js,[i("label",null,n(o(xn)("devices.gateway")),1),u(i("input",{class:c(["form-input",{"input-error":Do.value.gateway}]),"onUpdate:modelValue":l[57]||(l[57]=e=>ao.value.gateway=e),placeholder:"192.168.1.1"},null,2),[[v,ao.value.gateway]]),Do.value.gateway?(y(),s("span",Hs,n(Do.value.gateway),1)):d("",!0)])])),i("div",zs,[i("div",Ts,[i("label",null,n(o(xn)("devices.mediaServer")),1),u(i("input",{class:c(["form-input",{"input-error":Do.value.mediaIP}]),"onUpdate:modelValue":l[58]||(l[58]=e=>ao.value.mediaIP=e),placeholder:"192.168.1.100"},null,2),[[v,ao.value.mediaIP]]),Do.value.mediaIP?(y(),s("span",qs,n(Do.value.mediaIP),1)):d("",!0)]),i("div",Gs,[i("label",null,n(o(xn)("devices.mediaPort")),1),u(i("input",{class:c(["form-input",{"input-error":Do.value.mediaPort}]),"onUpdate:modelValue":l[59]||(l[59]=e=>ao.value.mediaPort=e),type:"number",min:"1",max:"65535"},null,2),[[v,ao.value.mediaPort,void 0,{number:!0}]]),Do.value.mediaPort?(y(),s("span",Ks,n(Do.value.mediaPort),1)):d("",!0)])]),i("div",Ws,[i("div",Js,[i("label",null,n(o(xn)("devices.dns")),1),u(i("input",{class:c(["form-input",{"input-error":Do.value.dns}]),"onUpdate:modelValue":l[60]||(l[60]=e=>ao.value.dns=e),placeholder:o(xn)("devices.dnsPlaceholder")},null,10,Xs),[[v,ao.value.dns]]),Do.value.dns?(y(),s("span",Qs,n(Do.value.dns),1)):d("",!0)]),i("div",Ys,[i("label",Zs,[i("span",null,n(o(xn)("devices.warmMode")),1),i("span",{class:c(["toggle-switch",{on:ao.value.warmMode}]),onClick:l[61]||(l[61]=e=>ao.value.warmMode=!ao.value.warmMode)},[...l[145]||(l[145]=[i("span",{class:"toggle-knob"},null,-1)])],2)])])]),i("div",ei,[i("div",li,[i("h4",null,n(o(xn)("devices.console")),1),i("button",{class:"console-clear-btn",onClick:l[62]||(l[62]=(...e)=>o(eo)&&o(eo)(...e))},n(o(xn)("devices.clearConsole")),1)]),i("div",ai,[0===o(Wn).length?(y(),s("div",si,n(o(xn)("devices.consoleEmpty")),1)):d("",!0),(y(!0),s(m,null,p(o(Wn),(e,l)=>(y(),s("div",{key:l,class:c(["console-line","log-"+e.type])},n(e.msg),3))),128))],512)])]),i("div",ii,[i("button",{class:"cancel-btn diablo-button-secondary",onClick:l[63]||(l[63]=e=>jn.value=!1)},n(o(xn)("common.cancel")),1),i("button",{class:"advanced-btn diablo-button-secondary",onClick:_o},n(o(xn)("devices.advanced")),1),i("button",{class:"confirm-btn diablo-button",onClick:Ao},n(o(xn)("devices.applyConfig")),1)])])])):d("",!0),So.value?(y(),s("div",{key:8,class:"dialog-overlay",onClick:l[87]||(l[87]=e=>So.value=!1)},[i("div",{class:"dialog amixer-dialog",onClick:l[86]||(l[86]=h(()=>{},["stop"]))},[i("div",ni,[i("h3",null,n(o(xn)("devices.soundCard")),1),i("button",{class:"close-btn",onClick:l[66]||(l[66]=e=>So.value=!1)},"×")]),i("div",oi,[i("div",ci,[i("span",ti,n(Lo.value),1),i("button",{class:"diablo-button amixer-get-btn",onClick:Oo,disabled:Po.value},n(Po.value?o(xn)("devices.amixerGetting"):o(xn)("devices.getAmixerStatus")),9,di)]),i("div",ri,[i("div",ui,[i("h4",vi,n(o(xn)("devices.amixerGroupDecode")),1),i("div",mi,[i("div",pi,[i("span",hi,n(o(xn)("devices.amixerDAC")),1),u(i("input",{type:"range",class:"amixer-slider","onUpdate:modelValue":l[67]||(l[67]=e=>Fo.value.dacVolume=e),min:"0",max:"63"},null,512),[[v,Fo.value.dacVolume,void 0,{number:!0}]]),i("span",gi,n(Fo.value.dacVolume),1),i("button",{class:"amixer-apply-btn",onClick:l[68]||(l[68]=e=>Eo(1,Fo.value.dacVolume))},n(o(xn)("devices.amixerApply")),1)]),i("div",fi,[i("span",bi,n(o(xn)("devices.amixerHeadphoneVol")),1),u(i("input",{type:"range",class:"amixer-slider","onUpdate:modelValue":l[69]||(l[69]=e=>Fo.value.hpVolume=e),min:"0",max:"63"},null,512),[[v,Fo.value.hpVolume,void 0,{number:!0}]]),i("span",yi,n(Fo.value.hpVolume),1),i("button",{class:"amixer-apply-btn",onClick:l[70]||(l[70]=e=>Eo(2,Fo.value.hpVolume))},n(o(xn)("devices.amixerApply")),1)]),i("div",ki,[i("span",xi,n(o(xn)("devices.amixerHeadphoneSwitch")),1),u(i("select",{class:"amixer-select","onUpdate:modelValue":l[71]||(l[71]=e=>Fo.value.hpSwitch=e)},[i("option",wi,n(o(xn)("devices.amixerOff")),1),i("option",Ci,n(o(xn)("devices.amixerOn")),1)],512),[[g,Fo.value.hpSwitch,void 0,{number:!0}]]),i("button",{class:"amixer-apply-btn",onClick:l[72]||(l[72]=e=>Eo(3,Fo.value.hpSwitch))},n(o(xn)("devices.amixerApply")),1)]),i("div",Mi,[i("span",Ii,n(o(xn)("devices.amixerHeadphoneRoute")),1),u(i("select",{class:"amixer-select","onUpdate:modelValue":l[73]||(l[73]=e=>Fo.value.hpRoute=e)},[i("option",Di,n(o(xn)("devices.amixerRouteDAC")),1),i("option",Vi,n(o(xn)("devices.amixerRouteMixer")),1)],512),[[g,Fo.value.hpRoute,void 0,{number:!0}]]),i("button",{class:"amixer-apply-btn",onClick:l[74]||(l[74]=e=>Eo(25,Fo.value.hpRoute))},n(o(xn)("devices.amixerApply")),1)])])]),i("div",Ai,[i("h4",Si,n(o(xn)("devices.amixerGroupGain")),1),i("div",Li,[i("div",Pi,[i("span",Fi,n(o(xn)("devices.amixerLineIn")),1),u(i("input",{type:"range",class:"amixer-slider","onUpdate:modelValue":l[75]||(l[75]=e=>Fo.value.lineInVolume=e),min:"0",max:"7"},null,512),[[v,Fo.value.lineInVolume,void 0,{number:!0}]]),i("span",Ui,n(Fo.value.lineInVolume),1),i("button",{class:"amixer-apply-btn",onClick:l[76]||(l[76]=e=>Eo(4,Fo.value.lineInVolume))},n(o(xn)("devices.amixerApply")),1)]),i("div",Bi,[i("span",Ri,n(o(xn)("devices.amixerFMIn")),1),u(i("input",{type:"range",class:"amixer-slider","onUpdate:modelValue":l[77]||(l[77]=e=>Fo.value.fmInVolume=e),min:"0",max:"7"},null,512),[[v,Fo.value.fmInVolume,void 0,{number:!0}]]),i("span",$i,n(Fo.value.fmInVolume),1),i("button",{class:"amixer-apply-btn",onClick:l[78]||(l[78]=e=>Eo(5,Fo.value.fmInVolume))},n(o(xn)("devices.amixerApply")),1)]),i("div",_i,[i("span",Oi,n(o(xn)("devices.amixerMicIn")),1),u(i("input",{type:"range",class:"amixer-slider","onUpdate:modelValue":l[79]||(l[79]=e=>Fo.value.micInVolume=e),min:"0",max:"7"},null,512),[[v,Fo.value.micInVolume,void 0,{number:!0}]]),i("span",Ei,n(Fo.value.micInVolume),1),i("button",{class:"amixer-apply-btn",onClick:l[80]||(l[80]=e=>Eo(6,Fo.value.micInVolume))},n(o(xn)("devices.amixerApply")),1)]),i("div",Ni,[i("span",ji,n(o(xn)("devices.amixerMicBoost")),1),u(i("input",{type:"range",class:"amixer-slider","onUpdate:modelValue":l[81]||(l[81]=e=>Fo.value.micBoost=e),min:"0",max:"7"},null,512),[[v,Fo.value.micBoost,void 0,{number:!0}]]),i("span",Hi,n(Fo.value.micBoost),1),i("button",{class:"amixer-apply-btn",onClick:l[82]||(l[82]=e=>Eo(7,Fo.value.micBoost))},n(o(xn)("devices.amixerApply")),1)]),i("div",zi,[i("span",Ti,n(o(xn)("devices.amixerADCCapture")),1),u(i("input",{type:"range",class:"amixer-slider","onUpdate:modelValue":l[83]||(l[83]=e=>Fo.value.adcCapture=e),min:"0",max:"7"},null,512),[[v,Fo.value.adcCapture,void 0,{number:!0}]]),i("span",qi,n(Fo.value.adcCapture),1),i("button",{class:"amixer-apply-btn",onClick:l[84]||(l[84]=e=>Eo(8,Fo.value.adcCapture))},n(o(xn)("devices.amixerApply")),1)])])]),i("div",Gi,[i("h4",Ki,n(o(xn)("devices.amixerGroupCapture")),1),i("div",Wi,[(y(!0),s(m,null,p(Uo.value,e=>(y(),s("div",{class:"amixer-row switch-row",key:e.numid},[i("span",Ji,n(e.label),1),u(i("select",{class:"amixer-select","onUpdate:modelValue":l=>Fo.value[e.key]=l},[i("option",Qi,n(o(xn)("devices.amixerOff")),1),i("option",Yi,n(o(xn)("devices.amixerOn")),1)],8,Xi),[[g,Fo.value[e.key],void 0,{number:!0}]]),i("button",{class:"amixer-apply-btn",onClick:l=>Eo(e.numid,Fo.value[e.key])},n(o(xn)("devices.amixerApply")),9,Zi)]))),128))])]),i("div",en,[i("h4",ln,n(o(xn)("devices.amixerGroupLeft")),1),i("div",an,[(y(!0),s(m,null,p(Bo.value,e=>(y(),s("div",{class:"amixer-row switch-row",key:e.numid},[i("span",sn,n(e.label),1),u(i("select",{class:"amixer-select","onUpdate:modelValue":l=>Fo.value[e.key]=l},[i("option",on,n(o(xn)("devices.amixerOff")),1),i("option",cn,n(o(xn)("devices.amixerOn")),1)],8,nn),[[g,Fo.value[e.key],void 0,{number:!0}]]),i("button",{class:"amixer-apply-btn",onClick:l=>Eo(e.numid,Fo.value[e.key])},n(o(xn)("devices.amixerApply")),9,tn)]))),128))])]),i("div",dn,[i("h4",rn,n(o(xn)("devices.amixerGroupRight")),1),i("div",un,[(y(!0),s(m,null,p(Ro.value,e=>(y(),s("div",{class:"amixer-row switch-row",key:e.numid},[i("span",vn,n(e.label),1),u(i("select",{class:"amixer-select","onUpdate:modelValue":l=>Fo.value[e.key]=l},[i("option",pn,n(o(xn)("devices.amixerOff")),1),i("option",hn,n(o(xn)("devices.amixerOn")),1)],8,mn),[[g,Fo.value[e.key],void 0,{number:!0}]]),i("button",{class:"amixer-apply-btn",onClick:l=>Eo(e.numid,Fo.value[e.key])},n(o(xn)("devices.amixerApply")),9,gn)]))),128))])])])]),i("div",fn,[i("button",{class:"confirm-btn diablo-button",onClick:l[85]||(l[85]=e=>So.value=!1)},n(o(xn)("common.close")),1)])])])):d("",!0)])}}}),[["__scopeId","data-v-ffaf74a6"]]);export{kn as default};
@@ -0,0 +1 @@
1
+ import{f as e,o as a,n as l,y as s,A as c,u as n,B as t,C as o,W as i,G as u,F as d,z as r,E as v,R as h,N as p,S as m,r as k,c as b,t as g,H as f}from"./vue-vendor-BaBirIg_.js";import{u as w}from"./index-BuEwLgbU.js";import{a5 as y,a6 as C,a7 as z,a8 as x,a9 as _,aa as S,ab as M}from"./api-C3Fyph-A.js";import{_ as D}from"./_plugin-vue_export-helper-BCo6x5W8.js";const U={class:"account-page"},I={class:"page-header"},A={class:"page-title"},F={class:"glass-section"},V={class:"section-title"},B={class:"config-grid"},T={class:"config-field"},j=["placeholder"],E={class:"config-field"},L=["placeholder"],N={class:"config-field"},P=["placeholder"],H={class:"config-field"},R=["placeholder"],q={class:"config-field"},G={class:"config-field"},O={class:"perm-grid"},W={class:"perm-item"},J={class:"perm-item"},K={class:"perm-item"},Q={class:"register-area"},X=["disabled"],Y={class:"glass-section"},Z={class:"section-header"},$={class:"section-title"},ee={key:0,class:"table-wrap desktop-table"},ae={class:"data-table"},le={class:"td-pass"},se={class:"pass-cell"},ce={class:"pass-text"},ne=["onClick","title"],te={key:0,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"14",height:"14"},oe={key:1,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"14",height:"14"},ie={class:"perm-toggle"},ue=["checked","onChange"],de={class:"perm-toggle"},re=["checked","onChange"],ve={class:"perm-toggle"},he=["checked","onChange"],pe={class:"td-time"},me={class:"action-btns"},ke=["onClick"],be=["onClick"],ge=["onClick"],fe={key:1,class:"mobile-card-list"},we={class:"user-card-header"},ye={class:"user-card-name"},Ce={class:"user-card-id"},ze={class:"user-card-body"},xe={class:"user-card-row"},_e={class:"user-card-label"},Se={class:"user-card-value pass-cell"},Me={class:"pass-text"},De=["onClick"],Ue={key:0,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"14",height:"14"},Ie={key:1,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"14",height:"14"},Ae={key:0,class:"user-card-row"},Fe={class:"user-card-label"},Ve={class:"user-card-value"},Be={key:1,class:"user-card-row"},Te={class:"user-card-label"},je={class:"user-card-value"},Ee={class:"user-card-row"},Le={class:"user-card-label"},Ne={class:"user-card-value user-card-time"},Pe={class:"user-card-perms"},He={class:"perm-item"},Re=["checked","onChange"],qe={class:"perm-item"},Ge=["checked","onChange"],Oe={class:"perm-item"},We=["checked","onChange"],Je={class:"user-card-actions"},Ke=["onClick"],Qe=["onClick"],Xe=["onClick"],Ye={key:2,class:"empty-state"},Ze={class:"modal-box"},$e={class:"modal-body"},ea={class:"modal-actions"},aa={class:"modal-box device-modal-box"},la={class:"modal-title"},sa={key:0,class:"modal-body"},ca={key:1,class:"device-list-modal"},na={class:"device-search-row"},ta=["placeholder"],oa={class:"device-list-scroll"},ia=["checked","onChange"],ua={key:0,class:"empty-state small"},da={class:"modal-actions"},ra=["disabled"],va=D(e({__name:"index",setup(e){const{t:D}=w(),va=k({ziusername:"",zipasswd:"",nickname:"",beizhu:"",level:8}),ha=k(!1),pa=k(!1),ma=k(!1);function ka(){const e=Array(40).fill("0");return ha.value&&(e[0]="1"),pa.value&&(e[1]="1"),ma.value&&(e[2]="1"),e.join("")}const ba=k(!1),ga=k([]),fa=k(new Set);function wa(e){fa.value.has(e)?fa.value.delete(e):fa.value.add(e)}function ya(e){return fa.value.has(e)}function Ca(e){return"•".repeat(Math.min(e.length,12))}const za=k({show:!1,message:""});function xa(e){za.value={show:!0,message:e}}async function _a(){try{const e=await y();!0===e.res&&Array.isArray(e.results)&&(ga.value=e.results)}catch(e){console.error("获取子账户列表失败:",e)}}async function Sa(){if(va.value.ziusername.trim())if(va.value.zipasswd.trim()){ba.value=!0;try{const e=await C({ziusername:va.value.ziusername.trim(),zipasswd:va.value.zipasswd,nickname:va.value.nickname.trim(),beizhu:va.value.beizhu.trim(),level:va.value.level,mask:ka()});!0===e.res?(xa(D("account.addSuccess")),va.value.ziusername="",va.value.zipasswd="",va.value.nickname="",va.value.beizhu="",_a()):xa(e.msg||e.info||D("account.addFailed"))}catch{xa(D("account.addFailed"))}ba.value=!1}else xa(D("account.passwordRequired"));else xa(D("account.usernameRequired"))}function Ma(e,a){return!(!e||a>=e.length)&&"1"===e[a]}async function Da(e,a){const l=!Ma(e.mask,a);try{const s=await x({userid:e.id,zdex:a,zcase:l});if(!0===s.res){const s=e.mask.split("");s[a]=l?"1":"0",e.mask=s.join("")}else xa(s.msg||s.info||D("account.permChangeFailed"))}catch{xa(D("account.permChangeFailed"))}}async function Ua(e){if(confirm(D("account.deleteConfirm",{name:e.user_name})))try{const a=await _(e.id);!0===a.res?(xa(D("account.deleteSuccess")),_a()):xa(a.msg||a.info||D("account.deleteFailed"))}catch{xa(D("account.deleteFailed"))}}const Ia=k({show:!1,loading:!1,saving:!1,ziUserId:0,ziUserToken:"",userName:"",allDevices:[],originalSeeds:[],selectedIds:[],zsIdMap:{}}),Aa=k(""),Fa=b(()=>{if(!Aa.value.trim())return Ia.value.allDevices;const e=Aa.value.toLowerCase();return Ia.value.allDevices.filter(a=>a.label.toLowerCase().includes(e)||String(a.id).includes(e))});async function Va(e){Ia.value={show:!0,loading:!0,saving:!1,ziUserId:e.id,ziUserToken:e.token,userName:e.user_name,allDevices:[],originalSeeds:[],selectedIds:[],zsIdMap:{}},Aa.value="";try{const a=await S({zid:e.id,ztoken:e.token});if(!0===a.res&&Array.isArray(a.dev_info)){Ia.value.allDevices=a.dev_info.map(e=>({id:e.id,label:e.label,key:e.key}));const e=new Set,l={};Array.isArray(a.dev_info_zS)&&a.dev_info_zS.forEach(a=>{e.add(a.device_seed),l[a.device_seed]=a.id}),Ia.value.zsIdMap=l;const s=[];Ia.value.allDevices.forEach(a=>{e.has(a.key)&&s.push(a.id)}),Ia.value.originalSeeds=Array.isArray(a.dev_info_S)?a.dev_info_S:[],Ia.value.selectedIds=s}}catch(a){console.error("获取设备列表失败:",a),xa(D("account.loadDevicesFailed")),Ia.value.show=!1}Ia.value.loading=!1}async function Ba(){Ia.value.saving=!0;const e=new Set;Ia.value.selectedIds.forEach(a=>{const l=Ia.value.allDevices.find(e=>e.id===a);l&&e.add(l.key)});const a=new Set(Ia.value.originalSeeds),l=[];e.forEach(e=>{if(!a.has(e)){const a=Ia.value.allDevices.find(a=>a.key===e);a&&l.push(a.id)}});const s=[],c=Ia.value.zsIdMap;a.forEach(a=>{!e.has(a)&&c[a]&&s.push(c[a])});try{const e=await z({gid:Ia.value.ziUserId,pus_idstr:l.length>0?l.join("|"):"null",dis_idstr:s.length>0?s.join("|"):"null"});!0===e.res?(xa(D("account.editDevicesSuccess")),Ia.value.show=!1):xa(e.msg||e.info||D("account.editDevicesFailed"))}catch{xa(D("account.editDevicesFailed"))}Ia.value.saving=!1}async function Ta(e){if(confirm(D("account.resetTokenConfirm",{name:e.user_name})))try{const a=await M({username:e.user_name,passwd:e.user_pass});!0===a.res?(xa(D("account.resetTokenSuccess")+"\n"+D("account.newToken")+": "+a.token),_a()):xa(a.msg||a.info||D("account.resetTokenFailed"))}catch{xa(D("account.resetTokenFailed"))}}return a(()=>{_a()}),(e,a)=>(g(),l("div",U,[s("div",I,[s("h2",A,c(n(D)("account.title")),1)]),s("div",F,[s("h3",V,c(n(D)("account.addSubUser")),1),s("div",B,[s("div",T,[s("label",null,c(n(D)("account.username")),1),t(s("input",{"onUpdate:modelValue":a[0]||(a[0]=e=>va.value.ziusername=e),class:"form-input",placeholder:n(D)("account.usernamePlaceholder")},null,8,j),[[o,va.value.ziusername]])]),s("div",E,[s("label",null,c(n(D)("account.password")),1),t(s("input",{"onUpdate:modelValue":a[1]||(a[1]=e=>va.value.zipasswd=e),type:"password",class:"form-input",placeholder:n(D)("account.passwordPlaceholder")},null,8,L),[[o,va.value.zipasswd]])]),s("div",N,[s("label",null,c(n(D)("account.nickname")),1),t(s("input",{"onUpdate:modelValue":a[2]||(a[2]=e=>va.value.nickname=e),class:"form-input",placeholder:n(D)("account.nicknamePlaceholder")},null,8,P),[[o,va.value.nickname]])]),s("div",H,[s("label",null,c(n(D)("account.beizhu")),1),t(s("input",{"onUpdate:modelValue":a[3]||(a[3]=e=>va.value.beizhu=e),class:"form-input",placeholder:n(D)("account.beizhuPlaceholder")},null,8,R),[[o,va.value.beizhu]])]),s("div",q,[s("label",null,c(n(D)("account.levelLabel")),1),t(s("select",{"onUpdate:modelValue":a[4]||(a[4]=e=>va.value.level=e),class:"form-input"},[...a[13]||(a[13]=[s("option",{value:8},"8",-1),s("option",{value:6},"6",-1),s("option",{value:4},"4",-1),s("option",{value:2},"2",-1)])],512),[[i,va.value.level]])])]),s("div",G,[s("label",null,c(n(D)("account.permissions")),1),s("div",O,[s("label",W,[t(s("input",{type:"checkbox","onUpdate:modelValue":a[5]||(a[5]=e=>ha.value=e)},null,512),[[u,ha.value]]),s("span",null,c(n(D)("account.permCreateSub")),1)]),s("label",J,[t(s("input",{type:"checkbox","onUpdate:modelValue":a[6]||(a[6]=e=>pa.value=e)},null,512),[[u,pa.value]]),s("span",null,c(n(D)("account.permManageDevice")),1)]),s("label",K,[t(s("input",{type:"checkbox","onUpdate:modelValue":a[7]||(a[7]=e=>ma.value=e)},null,512),[[u,ma.value]]),s("span",null,c(n(D)("account.permUploadFile")),1)])])]),s("div",Q,[s("button",{class:"register-btn",disabled:ba.value,onClick:Sa},c(ba.value?n(D)("account.adding"):n(D)("account.addSubUser")),9,X)])]),s("div",Y,[s("div",Z,[s("h3",$,c(n(D)("account.subAccounts")),1),s("button",{class:"toolbar-btn",onClick:_a},c(n(D)("account.refreshList")),1)]),ga.value.length>0?(g(),l("div",ee,[s("table",ae,[s("thead",null,[s("tr",null,[a[14]||(a[14]=s("th",null,"ID",-1)),s("th",null,c(n(D)("account.username")),1),s("th",null,c(n(D)("account.passwordShow")),1),s("th",null,c(n(D)("account.nickname")),1),s("th",null,c(n(D)("account.beizhu")),1),s("th",null,c(n(D)("account.permCreateSub")),1),s("th",null,c(n(D)("account.permManageDevice")),1),s("th",null,c(n(D)("account.permUploadFile")),1),s("th",null,c(n(D)("account.createTime")),1),s("th",null,c(n(D)("common.actions")),1)])]),s("tbody",null,[(g(!0),l(d,null,r(ga.value,e=>(g(),l("tr",{key:e.id},[s("td",null,c(e.id),1),s("td",null,c(e.user_name),1),s("td",le,[s("span",se,[s("span",ce,c(ya(e.id)?e.user_pass:Ca(e.user_pass)),1),s("button",{class:"eye-btn",onClick:a=>wa(e.id),title:ya(e.id)?"隐藏":"显示"},[ya(e.id)?(g(),l("svg",oe,[...a[16]||(a[16]=[s("path",{d:"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"},null,-1),s("line",{x1:"1",y1:"1",x2:"23",y2:"23"},null,-1)])])):(g(),l("svg",te,[...a[15]||(a[15]=[s("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"},null,-1),s("circle",{cx:"12",cy:"12",r:"3"},null,-1)])]))],8,ne)])]),s("td",null,c(e.nickname),1),s("td",null,c(e.beizhu),1),s("td",null,[s("label",ie,[s("input",{type:"checkbox",checked:Ma(e.mask,0),onChange:a=>Da(e,0)},null,40,ue)])]),s("td",null,[s("label",de,[s("input",{type:"checkbox",checked:Ma(e.mask,1),onChange:a=>Da(e,1)},null,40,re)])]),s("td",null,[s("label",ve,[s("input",{type:"checkbox",checked:Ma(e.mask,2),onChange:a=>Da(e,2)},null,40,he)])]),s("td",pe,c(e.ctime),1),s("td",null,[s("div",me,[s("button",{class:"act-btn act-btn-blue",onClick:a=>Va(e)},[a[17]||(a[17]=s("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"13",height:"13"},[s("rect",{x:"2",y:"3",width:"20",height:"14",rx:"2"}),s("path",{d:"M8 21h8M12 17v4"})],-1)),f(" "+c(n(D)("account.editDevices")),1)],8,ke),s("button",{class:"act-btn act-btn-orange",onClick:a=>Ta(e)},[a[18]||(a[18]=s("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"13",height:"13"},[s("path",{d:"M1 4v6h6"}),s("path",{d:"M3.51 15a9 9 0 1 0 2.13-9.36L1 10"})],-1)),f(" "+c(n(D)("account.resetToken")),1)],8,be),s("button",{class:"act-btn act-btn-red",onClick:a=>Ua(e)},[a[19]||(a[19]=s("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"13",height:"13"},[s("polyline",{points:"3 6 5 6 21 6"}),s("path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"})],-1)),f(" "+c(n(D)("common.delete")),1)],8,ge)])])]))),128))])])])):v("",!0),ga.value.length>0?(g(),l("div",fe,[(g(!0),l(d,null,r(ga.value,e=>(g(),l("div",{key:e.id,class:"user-card"},[s("div",we,[s("div",ye,c(e.user_name),1),s("span",Ce,"ID: "+c(e.id),1)]),s("div",ze,[s("div",xe,[s("span",_e,c(n(D)("account.passwordShow")),1),s("span",Se,[s("span",Me,c(ya(e.id)?e.user_pass:Ca(e.user_pass)),1),s("button",{class:"eye-btn",onClick:a=>wa(e.id)},[ya(e.id)?(g(),l("svg",Ie,[...a[21]||(a[21]=[s("path",{d:"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"},null,-1),s("line",{x1:"1",y1:"1",x2:"23",y2:"23"},null,-1)])])):(g(),l("svg",Ue,[...a[20]||(a[20]=[s("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"},null,-1),s("circle",{cx:"12",cy:"12",r:"3"},null,-1)])]))],8,De)])]),e.nickname?(g(),l("div",Ae,[s("span",Fe,c(n(D)("account.nickname")),1),s("span",Ve,c(e.nickname),1)])):v("",!0),e.beizhu?(g(),l("div",Be,[s("span",Te,c(n(D)("account.beizhu")),1),s("span",je,c(e.beizhu),1)])):v("",!0),s("div",Ee,[s("span",Le,c(n(D)("account.createTime")),1),s("span",Ne,c(e.ctime),1)])]),s("div",Pe,[s("label",He,[s("input",{type:"checkbox",checked:Ma(e.mask,0),onChange:a=>Da(e,0)},null,40,Re),s("span",null,c(n(D)("account.permCreateSub")),1)]),s("label",qe,[s("input",{type:"checkbox",checked:Ma(e.mask,1),onChange:a=>Da(e,1)},null,40,Ge),s("span",null,c(n(D)("account.permManageDevice")),1)]),s("label",Oe,[s("input",{type:"checkbox",checked:Ma(e.mask,2),onChange:a=>Da(e,2)},null,40,We),s("span",null,c(n(D)("account.permUploadFile")),1)])]),s("div",Je,[s("button",{class:"act-btn act-btn-blue",onClick:a=>Va(e)},[a[22]||(a[22]=s("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"13",height:"13"},[s("rect",{x:"2",y:"3",width:"20",height:"14",rx:"2"}),s("path",{d:"M8 21h8M12 17v4"})],-1)),f(" "+c(n(D)("account.editDevices")),1)],8,Ke),s("button",{class:"act-btn act-btn-orange",onClick:a=>Ta(e)},[a[23]||(a[23]=s("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"13",height:"13"},[s("path",{d:"M1 4v6h6"}),s("path",{d:"M3.51 15a9 9 0 1 0 2.13-9.36L1 10"})],-1)),f(" "+c(n(D)("account.resetToken")),1)],8,Qe),s("button",{class:"act-btn act-btn-red",onClick:a=>Ua(e)},[a[24]||(a[24]=s("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"13",height:"13"},[s("polyline",{points:"3 6 5 6 21 6"}),s("path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"})],-1)),f(" "+c(n(D)("common.delete")),1)],8,Xe)])]))),128))])):v("",!0),0===ga.value.length?(g(),l("div",Ye,c(n(D)("account.noSubUsers")),1)):v("",!0)]),(g(),h(m,{to:"body"},[za.value.show?(g(),l("div",{key:0,class:"modal-overlay",onClick:a[9]||(a[9]=p(e=>za.value.show=!1,["self"]))},[s("div",Ze,[s("div",$e,c(za.value.message),1),s("div",ea,[s("button",{class:"modal-btn modal-btn-confirm",onClick:a[8]||(a[8]=e=>za.value.show=!1)},c(n(D)("common.confirm")),1)])])])):v("",!0)])),(g(),h(m,{to:"body"},[Ia.value.show?(g(),l("div",{key:0,class:"modal-overlay",onClick:a[12]||(a[12]=p(e=>Ia.value.show=!1,["self"]))},[s("div",aa,[s("div",la,c(n(D)("account.editDevices"))+" - "+c(Ia.value.userName),1),Ia.value.loading?(g(),l("div",sa,c(n(D)("common.loading")),1)):(g(),l("div",ca,[s("div",na,[t(s("input",{"onUpdate:modelValue":a[10]||(a[10]=e=>Aa.value=e),class:"form-input",placeholder:n(D)("account.searchDevice")},null,8,ta),[[o,Aa.value]])]),s("div",oa,[(g(!0),l(d,null,r(Fa.value,e=>(g(),l("label",{key:e.id,class:"device-check-item"},[s("input",{type:"checkbox",checked:Ia.value.selectedIds.includes(e.id),onChange:a=>function(e){const a=Ia.value.selectedIds.indexOf(e);-1===a?Ia.value.selectedIds.push(e):Ia.value.selectedIds.splice(a,1)}(e.id)},null,40,ia),s("span",null,c(e.label),1)]))),128)),0===Fa.value.length?(g(),l("div",ua,c(n(D)("account.noDevices")),1)):v("",!0)])])),s("div",da,[s("button",{class:"modal-btn",onClick:a[11]||(a[11]=e=>Ia.value.show=!1)},c(n(D)("common.cancel")),1),s("button",{class:"modal-btn modal-btn-confirm",disabled:Ia.value.saving,onClick:Ba},c(Ia.value.saving?n(D)("common.loading"):n(D)("common.save")),9,ra)])])])):v("",!0)]))]))}}),[["__scopeId","data-v-c678c4d8"]]);export{va as default};
@@ -0,0 +1 @@
1
+ .page-title[data-v-6d90ca45]{font-size:28px;margin-bottom:32px}.stats-grid[data-v-6d90ca45]{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:20px;margin-bottom:32px}.stat-card[data-v-6d90ca45]{display:flex;align-items:center;gap:16px;padding:24px;background:var(--glass-bg-card);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));border:1px solid var(--glass-border);border-radius:16px;box-shadow:var(--glass-shadow),var(--glass-inner-glow);transition:all .4s cubic-bezier(.25,.46,.45,.94)}.stat-card[data-v-6d90ca45]:hover{transform:translateY(-4px);background:var(--glass-bg-hover);border-color:var(--glass-border-hover);box-shadow:var(--glass-shadow-hover)}.stat-card.clickable[data-v-6d90ca45]{cursor:pointer}.stat-card.clickable[data-v-6d90ca45]:hover{border-color:var(--glass-border-glow)}.stat-icon[data-v-6d90ca45]{width:40px;height:40px;color:var(--diablo-text);opacity:.85;display:flex;align-items:center;justify-content:center}.stat-icon svg[data-v-6d90ca45]{width:100%;height:100%;stroke:currentColor}.stat-icon.online[data-v-6d90ca45]{color:#4caf50;opacity:1;filter:drop-shadow(0 0 10px rgba(76,175,80,.5))}.stat-content[data-v-6d90ca45]{flex:1}.stat-label[data-v-6d90ca45]{font-size:14px;color:var(--diablo-text-muted);margin-bottom:8px}.stat-value[data-v-6d90ca45]{font-family:var(--diablo-font-family);font-size:32px;font-weight:700;color:var(--diablo-text)}.stat-value.online[data-v-6d90ca45]{color:#4caf50;text-shadow:0 0 10px rgba(76,175,80,.3)}.quick-actions[data-v-6d90ca45]{margin-bottom:32px}.section-title[data-v-6d90ca45]{font-size:20px;color:var(--diablo-text);margin-bottom:20px}.actions-grid[data-v-6d90ca45]{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px}.action-card[data-v-6d90ca45]{display:flex;flex-direction:column;align-items:center;gap:12px;padding:24px;background:var(--glass-bg-card);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));cursor:pointer;border:1px solid var(--glass-border);border-radius:12px;box-shadow:var(--glass-shadow),var(--glass-inner-glow);transition:all .4s cubic-bezier(.25,.46,.45,.94)}.action-card[data-v-6d90ca45]:hover{background:var(--glass-bg-hover);border-color:var(--glass-border-glow);transform:translateY(-4px);box-shadow:var(--glass-shadow-hover)}.action-icon[data-v-6d90ca45]{width:32px;height:32px;color:var(--diablo-text);opacity:.85;display:flex;align-items:center;justify-content:center}.action-icon svg[data-v-6d90ca45]{width:100%;height:100%;stroke:currentColor}.action-card span[data-v-6d90ca45]:last-child{font-size:14px;color:var(--diablo-text-muted)}@media (max-width: 768px){.stats-grid[data-v-6d90ca45],.actions-grid[data-v-6d90ca45]{grid-template-columns:1fr}}@media (max-width: 480px){.page-title[data-v-6d90ca45]{font-size:17px}.stats-grid[data-v-6d90ca45]{gap:12px}.stat-card[data-v-6d90ca45]{padding:14px}.stat-value[data-v-6d90ca45]{font-size:24px}.actions-grid[data-v-6d90ca45]{gap:10px}.action-card[data-v-6d90ca45]{padding:14px}}.mobile-header[data-v-6d90ca45]{margin-bottom:24px;padding:8px 0}.mobile-greeting[data-v-6d90ca45]{font-size:26px;font-weight:700;color:var(--diablo-text);letter-spacing:-.5px}.mobile-subtitle[data-v-6d90ca45]{font-size:14px;color:var(--diablo-text-muted);margin-top:4px}.mobile-stats-scroll[data-v-6d90ca45]{display:flex;gap:12px;overflow-x:auto;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;padding:4px 0 16px;margin-bottom:8px}.mobile-stats-scroll[data-v-6d90ca45]::-webkit-scrollbar{display:none}.mobile-stat-card[data-v-6d90ca45]{flex-shrink:0;width:140px;padding:20px 16px;border-radius:16px;scroll-snap-align:start;cursor:pointer;transition:transform .2s ease,box-shadow .2s ease;box-shadow:0 4px 16px #00000026}.mobile-stat-card[data-v-6d90ca45]:active{transform:scale(.96)}.mobile-stat-num[data-v-6d90ca45]{font-size:28px;font-weight:700;color:#fff;line-height:1.2}.mobile-stat-label[data-v-6d90ca45]{font-size:13px;color:#ffffffbf;margin-top:6px}.mobile-actions[data-v-6d90ca45]{margin-top:8px}.mobile-section-title[data-v-6d90ca45]{font-size:18px;font-weight:600;color:var(--diablo-text);margin-bottom:16px}.mobile-actions-grid[data-v-6d90ca45]{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.mobile-action-item[data-v-6d90ca45]{display:flex;flex-direction:column;align-items:center;gap:8px;padding:16px 8px;background:none;border:none;cursor:pointer;transition:transform .15s ease}.mobile-action-item[data-v-6d90ca45]:active{transform:scale(.92)}.mobile-action-item span[data-v-6d90ca45]{font-size:12px;color:var(--diablo-text-muted);text-align:center}.mobile-action-icon[data-v-6d90ca45]{width:52px;height:52px;border-radius:14px;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 12px #00000026}.mobile-action-icon svg[data-v-6d90ca45]{width:24px;height:24px}.stat-card,.action-card,.theme-light .stat-card,.theme-light .action-card{background:var(--glass-bg-card)!important;border-color:var(--glass-border)!important;-webkit-backdrop-filter:blur(var(--glass-blur))!important;backdrop-filter:blur(var(--glass-blur))!important}
@@ -0,0 +1 @@
1
+ import{f as e,o as l,n as a,y as s,F as o,z as i,A as r,u as n,m as t,B as d,C as c,D as u,E as p,G as m,H as v,I as g,r as b,J as h,K as f,t as y,L as w}from"./vue-vendor-BaBirIg_.js";import{u as x,a as k}from"./index-BuEwLgbU.js";import"./api-C3Fyph-A.js";import{_}from"./LanguageSwitcher.vue_vue_type_style_index_0_lang-BUO99DZc.js";import{_ as I}from"./_plugin-vue_export-helper-BCo6x5W8.js";const S={class:"login-container"},U={class:"particles"},C={class:"login-card diablo-card diablo-corner"},j={class:"login-header"},B={class:"logo-container"},M={class:"diablo-logo"},P={class:"logo-particles"},V={class:"login-title diablo-title"},q={class:"subtitle"},D={class:"language-selector"},K={class:"login-form"},z={class:"form-group"},A={class:"diablo-input-wrapper"},F=["placeholder"],H={class:"form-group"},L={class:"diablo-input-wrapper"},R=["placeholder"],E={key:0,class:"diablo-error"},G={class:"form-footer"},J={class:"remember-me"},N=["disabled"],O={key:0},Q={key:1,class:"loading-text"},T={class:"login-footer"},W={class:"footer-text"},X={class:"footer-version"},Y={class:"fire-effect"},Z=I(e({__name:"index",setup(e){const{t:I}=x(),Z=h(),$=f(),ee=k(),le=g({username:"",passwd:""}),ae=b(!1),se=b(""),oe=b(!1);async function ie(){if(se.value="",le.username)if(le.passwd){ae.value=!0;try{if(await ee.loginUser({username:le.username,passwd:le.passwd})){oe.value?(localStorage.setItem("rememberedUsername",le.username),localStorage.setItem("rememberedPassword",le.passwd)):(localStorage.removeItem("rememberedUsername"),localStorage.removeItem("rememberedPassword"));const e=$.query.redirect||(ee.isAdmin?"/admin":"/");Z.push(e)}else se.value=I("login.invalidCredentials")}catch(e){console.error("登录失败:",e),se.value=I("login.loginFailed")}finally{ae.value=!1}}else se.value=I("login.passwordRequired");else se.value=I("login.usernameRequired")}return l(()=>{const e=localStorage.getItem("rememberedUsername"),l=localStorage.getItem("rememberedPassword");e&&(le.username=e,oe.value=!0),l&&(le.passwd=l)}),(e,l)=>(y(),a("div",S,[l[10]||(l[10]=s("div",{class:"diablo-bg"},null,-1)),s("div",U,[(y(),a(o,null,i(20,e=>s("div",{key:e,class:"particle",style:w({animationDelay:.2*e+"s"})},null,4)),64))]),s("div",C,[s("div",j,[s("div",B,[s("div",M,[l[3]||(l[3]=s("div",{class:"logo-core"},null,-1)),l[4]||(l[4]=s("div",{class:"logo-ring"},null,-1)),s("div",P,[(y(),a(o,null,i(12,e=>s("div",{key:e,class:"logo-particle",style:w({"--delay":.2*e+"s","--angle":30*e+"deg"})},null,4)),64))])])]),s("h1",V,r(n(I)("login.title")),1),s("div",q,r(n(I)("login.subtitle")),1)]),l[9]||(l[9]=s("div",{class:"diablo-gold-line"},null,-1)),s("div",D,[t(_)]),s("div",K,[s("div",z,[s("div",A,[l[5]||(l[5]=s("div",{class:"diablo-input-icon"},[s("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[s("circle",{cx:"12",cy:"8",r:"4"}),s("path",{d:"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"})])],-1)),d(s("input",{"onUpdate:modelValue":l[0]||(l[0]=e=>le.username=e),type:"text",class:"diablo-input",placeholder:n(I)("login.usernamePlaceholder"),autocomplete:"username",onKeyup:u(ie,["enter"])},null,40,F),[[c,le.username]])])]),s("div",H,[s("div",L,[l[6]||(l[6]=s("div",{class:"diablo-input-icon"},[s("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[s("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2",ry:"2"}),s("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"})])],-1)),d(s("input",{"onUpdate:modelValue":l[1]||(l[1]=e=>le.passwd=e),type:"password",class:"diablo-input",placeholder:n(I)("login.passwordPlaceholder"),autocomplete:"current-password",onKeyup:u(ie,["enter"])},null,40,R),[[c,le.passwd]])])]),se.value?(y(),a("div",E,r(se.value),1)):p("",!0),s("div",G,[s("label",J,[d(s("input",{"onUpdate:modelValue":l[2]||(l[2]=e=>oe.value=e),type:"checkbox"},null,512),[[m,oe.value]]),s("span",null,r(n(I)("login.rememberMe")),1)])]),s("button",{class:"diablo-btn login-btn",disabled:ae.value,onClick:ie},[ae.value?(y(),a("span",Q,[l[7]||(l[7]=s("span",{class:"diablo-loading"},null,-1)),v(" "+r(n(I)("login.logging")),1)])):(y(),a("span",O,r(n(I)("login.loginButton")),1))],8,N)]),s("div",T,[s("div",W," © 2024 "+r(n(I)("common.appName")),1),l[8]||(l[8]=s("div",{class:"footer-divider"},[s("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[s("path",{d:"M6 2l-4 4h4l-4 4h4l-4 4h4l-4 4h4l-4 4"}),s("path",{d:"M18 22l4-4h-4l4-4h-4l4-4h-4l4-4h-4l4-4h-4z"})])],-1)),s("div",X,r(n(I)("settings.version"))+" "+r(n("2.0.40")),1)])]),s("div",Y,[(y(),a(o,null,i(10,e=>s("div",{key:e,class:"flame",style:w({animationDelay:.3*e+"s"})},null,4)),64))])]))}}),[["__scopeId","data-v-3b7ca9c3"]]);export{Z as default};
@@ -0,0 +1 @@
1
+ import{f as e,o as a,n as l,y as s,F as o,z as n,A as i,u as t,m as c,M as d,p as r,B as v,C as u,D as m,E as p,G as g,H as h,N as b,r as y,I as f,J as w,K as k,t as x,L as P}from"./vue-vendor-BaBirIg_.js";import{u as I,a as C,b as M}from"./index-BuEwLgbU.js";import{u as S}from"./api-C3Fyph-A.js";import{_ as H}from"./LanguageSwitcher.vue_vue_type_style_index_0_lang-BUO99DZc.js";import{u as B}from"./useDeviceScan-CM8xsf7h.js";import{_ as U}from"./_plugin-vue_export-helper-BCo6x5W8.js";const _={class:"login-container"},V={class:"particles"},D={class:"login-card diablo-card diablo-corner"},F={class:"login-header"},L={class:"logo-container"},E={class:"diablo-logo"},j={class:"logo-particles"},q={class:"login-title diablo-title"},z={class:"subtitle"},A={class:"language-selector"},G=["data-theme","title"],R={class:"login-form"},K={class:"form-group"},N=["placeholder"],O={class:"field-hint"},T={class:"form-group"},J=["placeholder"],$={class:"form-group"},Q=["placeholder"],W={key:0,class:"diablo-error"},X={class:"form-footer"},Y={class:"remember-me"},Z=["disabled"],ee={key:0},ae={key:1,class:"loading-text"},le={class:"login-footer"},se={class:"footer-text"},oe={class:"footer-version"},ne={class:"fire-effect"},ie=["title"],te={class:"dialog-header"},ce={class:"dialog-body"},de={class:"scan-top-bar"},re={class:"scan-hint"},ve=["disabled"],ue={key:0,class:"scan-error"},me={class:"scan-main-layout"},pe={class:"scan-main-left"},ge={key:0,class:"scan-results"},he={class:"scan-results-header"},be={class:"scan-count"},ye={class:"scan-device-table"},fe={class:"scan-table-header"},we={class:"col-media"},ke={class:"col-port"},xe={class:"col-flag"},Pe={class:"col-flag"},Ie={class:"col-dns"},Ce={class:"scan-table-body"},Me={class:"col-idx"},Se={class:"col-ip"},He={class:"col-seed mono"},Be={class:"col-media"},Ue={class:"col-port"},_e={class:"col-flag"},Ve={class:"col-flag"},De={class:"col-dns"},Fe={class:"col-action"},Le=["onClick"],Ee={key:1,class:"scan-empty"},je={class:"scan-console-side"},qe={class:"console-header"},ze={class:"console-body"},Ae={key:0,class:"console-empty"},Ge={class:"dialog-header"},Re={class:"dialog-body"},Ke={class:"config-seed-display"},Ne={class:"config-seed-label"},Oe={class:"config-seed-value mono"},Te={class:"form-group"},Je={class:"toggle-label"},$e={key:0,class:"config-ip-fields"},Qe={class:"form-group"},We={class:"form-group"},Xe={class:"form-group"},Ye={class:"config-row-2col"},Ze={class:"form-group"},ea={class:"form-group"},aa={class:"config-row-2col"},la={class:"form-group"},sa=["placeholder"],oa={class:"form-group"},na={class:"toggle-label"},ia={class:"console-section"},ta={class:"console-header"},ca={class:"console-body"},da={key:0,class:"console-empty"},ra={class:"dialog-footer"},va=U(e({__name:"index",setup(e){const{t:U}=I(),va=w(),ua=k(),ma=C(),pa=M(),{scannedDevices:ga,isScanning:ha,scanError:ba,isElectron:ya,udpLogs:fa,startScan:wa,configureDevice:ka,clearLogs:xa}=B(),Pa=y(!1),Ia=y(!1),Ca=y(!1),Ma=y({seed:"",deviceIP:"",mask:"255.255.255.0",gateway:"",mediaIP:"",mediaPort:12080,autoIP:!0,warmMode:!1,dns:"0.0.0.0"});async function Sa(){Ca.value=!0,await wa()}async function Ha(){await ka({...Ma.value})&&(Ia.value=!1)}const Ba=f({serverHost:"",username:"",passwd:""}),Ua=y(!1),_a=y(""),Va=y(!1),Da=y(""),Fa=y(null),La=y(null);function Ea(e){var a,l;"username"===e?null==(a=Fa.value)||a.focus():"password"===e&&(null==(l=La.value)||l.focus())}function ja(e){let a=e.trim().replace(/\/+$/,"");return a?(/^https?:\/\//i.test(a)||(a="http://"+a),a):""}async function qa(){if(_a.value="",!Ba.serverHost.trim())return void(_a.value=U("clientLogin.hostRequired"));if(!Ba.username)return void(_a.value=U("login.usernameRequired"));if(!Ba.passwd)return void(_a.value=U("login.passwordRequired"));const e=ja(Ba.serverHost),a=window.electronAPI;(null==a?void 0:a.storeSet)?a.storeSet("serverHost",e):localStorage.setItem("serverHost",e),S(e),Ua.value=!0;try{if(await ma.loginUser({username:Ba.username,passwd:Ba.passwd})){Va.value?(null==a?void 0:a.storeSet)?(a.storeSet("rememberedUsername",Ba.username),a.storeSet("rememberedHost",Ba.serverHost),a.storeSet("rememberedPassword",Ba.passwd)):(localStorage.setItem("rememberedUsername",Ba.username),localStorage.setItem("rememberedHost",Ba.serverHost),localStorage.setItem("rememberedPassword",Ba.passwd)):(null==a?void 0:a.storeDelete)?(a.storeDelete("rememberedUsername"),a.storeDelete("rememberedHost"),a.storeDelete("rememberedPassword")):(localStorage.removeItem("rememberedUsername"),localStorage.removeItem("rememberedHost"),localStorage.removeItem("rememberedPassword"));const e=ua.query.redirect||(ma.isAdmin?"/admin":"/");va.push(e)}else _a.value=U("login.invalidCredentials")}catch(l){console.error("登录失败:",l),_a.value=U("login.loginFailed")}finally{Ua.value=!1}}return a(async()=>{const e=window.electronAPI;let a=null,l=null,s=null;(null==e?void 0:e.storeGet)?(a=await e.storeGet("rememberedUsername"),l=await e.storeGet("rememberedHost"),s=await e.storeGet("rememberedPassword")):(a=localStorage.getItem("rememberedUsername"),l=localStorage.getItem("rememberedHost"),s=localStorage.getItem("rememberedPassword")),a&&(Ba.username=a,Va.value=!0),l&&(Ba.serverHost=l,localStorage.setItem("serverHost",ja(l))),s&&(Ba.passwd=s)}),(e,a)=>(x(),l("div",_,[a[51]||(a[51]=s("div",{class:"diablo-bg"},null,-1)),s("div",V,[(x(),l(o,null,n(20,e=>s("div",{key:e,class:"particle",style:P({animationDelay:.2*e+"s"})},null,4)),64))]),s("div",D,[s("div",F,[s("div",L,[s("div",E,[a[31]||(a[31]=s("div",{class:"logo-core"},null,-1)),a[32]||(a[32]=s("div",{class:"logo-ring"},null,-1)),s("div",j,[(x(),l(o,null,n(12,e=>s("div",{key:e,class:"logo-particle",style:P({"--delay":.2*e+"s","--angle":30*e+"deg"})},null,4)),64))])])]),s("h1",q,i(t(U)("login.title")),1),s("div",z,i(t(U)("clientLogin.subtitle")),1)]),a[39]||(a[39]=s("div",{class:"diablo-gold-line"},null,-1)),s("div",A,[c(H),s("div",{class:"theme-toggle","data-theme":t(pa).theme,onClick:a[0]||(a[0]=(...e)=>t(pa).toggleTheme&&t(pa).toggleTheme(...e)),title:"diablo"===t(pa).theme?"切换到白色调":"切换到暗色调"},[...a[33]||(a[33]=[d('<div class="theme-toggle-track" data-v-02aa6d08><svg class="theme-toggle-icon sun" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" data-v-02aa6d08><circle cx="12" cy="12" r="5" data-v-02aa6d08></circle><line x1="12" y1="1" x2="12" y2="3" data-v-02aa6d08></line><line x1="12" y1="21" x2="12" y2="23" data-v-02aa6d08></line><line x1="4.22" y1="4.22" x2="5.64" y2="5.64" data-v-02aa6d08></line><line x1="18.36" y1="18.36" x2="19.78" y2="19.78" data-v-02aa6d08></line><line x1="1" y1="12" x2="3" y2="12" data-v-02aa6d08></line><line x1="21" y1="12" x2="23" y2="12" data-v-02aa6d08></line><line x1="4.22" y1="19.78" x2="5.64" y2="18.36" data-v-02aa6d08></line><line x1="18.36" y1="5.64" x2="19.78" y2="4.22" data-v-02aa6d08></line></svg><svg class="theme-toggle-icon moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" data-v-02aa6d08><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" data-v-02aa6d08></path></svg><div class="theme-toggle-thumb" data-v-02aa6d08></div></div>',1)])],8,G)]),s("div",R,[s("div",K,[s("div",{class:r(["diablo-input-wrapper",{"input-focused":"host"===Da.value}])},[a[34]||(a[34]=d('<div class="diablo-input-icon" data-v-02aa6d08><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" data-v-02aa6d08><rect x="2" y="3" width="20" height="14" rx="2" ry="2" data-v-02aa6d08></rect><line x1="8" y1="21" x2="16" y2="21" data-v-02aa6d08></line><line x1="12" y1="17" x2="12" y2="21" data-v-02aa6d08></line></svg></div>',1)),v(s("input",{"onUpdate:modelValue":a[1]||(a[1]=e=>Ba.serverHost=e),type:"text",class:"diablo-input",placeholder:t(U)("clientLogin.hostPlaceholder"),onFocus:a[2]||(a[2]=e=>Da.value="host"),onBlur:a[3]||(a[3]=e=>Da.value=""),onKeyup:a[4]||(a[4]=m(e=>Ea("username"),["enter"]))},null,40,N),[[u,Ba.serverHost]])],2),s("div",O,i(t(U)("clientLogin.hostHint")),1)]),s("div",T,[s("div",{class:r(["diablo-input-wrapper",{"input-focused":"username"===Da.value}])},[a[35]||(a[35]=s("div",{class:"diablo-input-icon"},[s("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[s("circle",{cx:"12",cy:"8",r:"4"}),s("path",{d:"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"})])],-1)),v(s("input",{ref_key:"usernameRef",ref:Fa,"onUpdate:modelValue":a[5]||(a[5]=e=>Ba.username=e),type:"text",class:"diablo-input",placeholder:t(U)("login.usernamePlaceholder"),autocomplete:"username",onFocus:a[6]||(a[6]=e=>Da.value="username"),onBlur:a[7]||(a[7]=e=>Da.value=""),onKeyup:a[8]||(a[8]=m(e=>Ea("password"),["enter"]))},null,40,J),[[u,Ba.username]])],2)]),s("div",$,[s("div",{class:r(["diablo-input-wrapper",{"input-focused":"password"===Da.value}])},[a[36]||(a[36]=s("div",{class:"diablo-input-icon"},[s("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[s("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2",ry:"2"}),s("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"})])],-1)),v(s("input",{ref_key:"passwordRef",ref:La,"onUpdate:modelValue":a[9]||(a[9]=e=>Ba.passwd=e),type:"password",class:"diablo-input",placeholder:t(U)("login.passwordPlaceholder"),autocomplete:"current-password",onFocus:a[10]||(a[10]=e=>Da.value="password"),onBlur:a[11]||(a[11]=e=>Da.value=""),onKeyup:m(qa,["enter"])},null,40,Q),[[u,Ba.passwd]])],2)]),_a.value?(x(),l("div",W,i(_a.value),1)):p("",!0),s("div",X,[s("label",Y,[v(s("input",{"onUpdate:modelValue":a[12]||(a[12]=e=>Va.value=e),type:"checkbox"},null,512),[[g,Va.value]]),s("span",null,i(t(U)("login.rememberMe")),1)])]),s("button",{class:"diablo-btn login-btn",disabled:Ua.value,onClick:qa},[Ua.value?(x(),l("span",ae,[a[37]||(a[37]=s("span",{class:"diablo-loading"},null,-1)),h(" "+i(t(U)("login.logging")),1)])):(x(),l("span",ee,i(t(U)("login.loginButton")),1))],8,Z)]),s("div",le,[s("div",se," © 2024 "+i(t(U)("common.appName")),1),a[38]||(a[38]=s("div",{class:"footer-divider"},[s("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[s("path",{d:"M6 2l-4 4h4l-4 4h4l-4 4h4l-4 4h4l-4 4"}),s("path",{d:"M18 22l4-4h-4l4-4h-4l4-4h-4l4-4h-4l4-4h-4z"})])],-1)),s("div",oe,i(t(U)("settings.version"))+" "+i(t("2.0.40")),1)])]),s("div",ne,[(x(),l(o,null,n(10,e=>s("div",{key:e,class:"flame",style:P({animationDelay:.3*e+"s"})},null,4)),64))]),t(ya)?(x(),l("button",{key:0,class:"login-scan-btn",onClick:a[13]||(a[13]=e=>Pa.value=!0),title:t(U)("devices.scanDevices")},[...a[40]||(a[40]=[s("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[s("circle",{cx:"11",cy:"11",r:"8"}),s("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})],-1)])],8,ie)):p("",!0),Pa.value?(x(),l("div",{key:1,class:"dialog-overlay",onClick:a[17]||(a[17]=e=>Pa.value=!1)},[s("div",{class:"dialog scan-dialog",onClick:a[16]||(a[16]=b(()=>{},["stop"]))},[s("div",te,[a[41]||(a[41]=s("div",{class:"scan-header-icon"},[s("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"20",height:"20"},[s("circle",{cx:"12",cy:"12",r:"3"}),s("path",{d:"M12 1v4M12 19v4M4.22 4.22l2.83 2.83M16.95 16.95l2.83 2.83M1 12h4M19 12h4M4.22 19.78l2.83-2.83M16.95 7.05l2.83-2.83"})])],-1)),s("h3",null,i(t(U)("devices.deviceScan")),1),s("button",{class:"close-btn",onClick:a[14]||(a[14]=e=>Pa.value=!1)},"×")]),s("div",ce,[s("div",de,[s("p",re,i(t(U)("devices.scanHint")),1),s("button",{class:"diablo-button scan-action-btn",onClick:Sa,disabled:t(ha)},i(t(ha)?t(U)("devices.scanning"):t(U)("devices.scanButton")),9,ve)]),t(ba)?(x(),l("div",ue,i(t(ba)),1)):p("",!0),s("div",me,[s("div",pe,[t(ga).length>0?(x(),l("div",ge,[s("div",he,[s("h4",null,[h(i(t(U)("devices.scannedDevices"))+" ",1),s("span",be,i(t(ga).length),1)])]),s("div",ye,[s("div",fe,[a[42]||(a[42]=s("span",{class:"col-idx"},"#",-1)),a[43]||(a[43]=s("span",{class:"col-ip"},"IP",-1)),a[44]||(a[44]=s("span",{class:"col-seed"},"SEED",-1)),s("span",we,i(t(U)("devices.mediaServer")),1),s("span",ke,i(t(U)("devices.mediaPort")),1),s("span",xe,i(t(U)("devices.autoIP")),1),s("span",Pe,i(t(U)("devices.warmMode")),1),s("span",Ie,i(t(U)("devices.dns")),1),a[45]||(a[45]=s("span",{class:"col-action"},null,-1))]),s("div",Ce,[(x(!0),l(o,null,n(t(ga),(e,o)=>(x(),l("div",{key:e.seed,class:"scan-table-row"},[s("span",Me,i(o+1),1),s("span",Se,i(e.ip),1),s("span",He,i(e.seed),1),s("span",Be,i(e.mediaIP),1),s("span",Ue,i(e.mediaPort),1),s("span",_e,[s("span",{class:r(["tag",e.autoIP?"tag-on":"tag-off"])},i(e.autoIP?"ON":"OFF"),3)]),s("span",Ve,[s("span",{class:r(["tag",e.warmMode?"tag-on":"tag-off"])},i(e.warmMode?"ON":"OFF"),3)]),s("span",De,i(e.dns),1),s("span",Fe,[s("button",{class:"config-btn",onClick:b(a=>function(e){Ma.value={seed:e.seed,deviceIP:e.ip,mask:e.mask||"255.255.255.0",gateway:e.gateway||"",mediaIP:e.mediaIP||"",mediaPort:e.mediaPort||12080,autoIP:e.autoIP,warmMode:e.warmMode,dns:e.dns||"0.0.0.0"},Ia.value=!0}(e),["stop"])},[...a[46]||(a[46]=[s("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"12",height:"12"},[s("path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"}),s("circle",{cx:"12",cy:"12",r:"3"})],-1)])],8,Le)])]))),128))])])])):(x(),l("div",Ee,[a[47]||(a[47]=s("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5",width:"32",height:"32"},[s("circle",{cx:"11",cy:"11",r:"8"}),s("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})],-1)),s("p",null,i(t(U)("devices.noDeviceFound")),1)]))]),s("div",je,[s("div",qe,[s("h4",null,i(t(U)("devices.console")),1),s("button",{class:"console-clear-btn",onClick:a[15]||(a[15]=(...e)=>t(xa)&&t(xa)(...e))},i(t(U)("devices.clearConsole")),1)]),s("div",ze,[0===t(fa).length?(x(),l("div",Ae,i(t(U)("devices.consoleEmpty")),1)):p("",!0),(x(!0),l(o,null,n(t(fa),(e,a)=>(x(),l("div",{key:a,class:r(["console-line","log-"+e.type])},i(e.msg),3))),128))])])])])])])):p("",!0),Ia.value?(x(),l("div",{key:2,class:"dialog-overlay",onClick:a[30]||(a[30]=e=>Ia.value=!1)},[s("div",{class:"dialog scan-config-dialog",onClick:a[29]||(a[29]=b(()=>{},["stop"]))},[s("div",Ge,[a[48]||(a[48]=s("div",{class:"scan-header-icon config-icon"},[s("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"20",height:"20"},[s("path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"}),s("circle",{cx:"12",cy:"12",r:"3"})])],-1)),s("h3",null,i(t(U)("devices.scanConfigTitle")),1),s("button",{class:"close-btn",onClick:a[18]||(a[18]=e=>Ia.value=!1)},"×")]),s("div",Re,[s("div",Ke,[s("span",Ne,i(t(U)("devices.seed")),1),s("span",Oe,i(Ma.value.seed),1)]),s("div",Te,[s("label",Je,[s("span",null,i(t(U)("devices.autoIP")),1),s("span",{class:r(["toggle-switch",{on:Ma.value.autoIP}]),onClick:a[19]||(a[19]=e=>Ma.value.autoIP=!Ma.value.autoIP)},[...a[49]||(a[49]=[s("span",{class:"toggle-knob"},null,-1)])],2)])]),Ma.value.autoIP?p("",!0):(x(),l("div",$e,[s("div",Qe,[s("label",null,i(t(U)("devices.deviceIP")),1),v(s("input",{class:"form-input","onUpdate:modelValue":a[20]||(a[20]=e=>Ma.value.deviceIP=e),placeholder:"192.168.1.100"},null,512),[[u,Ma.value.deviceIP]])]),s("div",We,[s("label",null,i(t(U)("devices.subnetMask")),1),v(s("input",{class:"form-input","onUpdate:modelValue":a[21]||(a[21]=e=>Ma.value.mask=e),placeholder:"255.255.255.0"},null,512),[[u,Ma.value.mask]])]),s("div",Xe,[s("label",null,i(t(U)("devices.gateway")),1),v(s("input",{class:"form-input","onUpdate:modelValue":a[22]||(a[22]=e=>Ma.value.gateway=e),placeholder:"192.168.1.1"},null,512),[[u,Ma.value.gateway]])])])),s("div",Ye,[s("div",Ze,[s("label",null,i(t(U)("devices.mediaServer")),1),v(s("input",{class:"form-input","onUpdate:modelValue":a[23]||(a[23]=e=>Ma.value.mediaIP=e),placeholder:"192.168.1.100"},null,512),[[u,Ma.value.mediaIP]])]),s("div",ea,[s("label",null,i(t(U)("devices.mediaPort")),1),v(s("input",{class:"form-input","onUpdate:modelValue":a[24]||(a[24]=e=>Ma.value.mediaPort=e),type:"number",min:"1",max:"65535"},null,512),[[u,Ma.value.mediaPort,void 0,{number:!0}]])])]),s("div",aa,[s("div",la,[s("label",null,i(t(U)("devices.dns")),1),v(s("input",{class:"form-input","onUpdate:modelValue":a[25]||(a[25]=e=>Ma.value.dns=e),placeholder:t(U)("devices.dnsPlaceholder")},null,8,sa),[[u,Ma.value.dns]])]),s("div",oa,[s("label",na,[s("span",null,i(t(U)("devices.warmMode")),1),s("span",{class:r(["toggle-switch",{on:Ma.value.warmMode}]),onClick:a[26]||(a[26]=e=>Ma.value.warmMode=!Ma.value.warmMode)},[...a[50]||(a[50]=[s("span",{class:"toggle-knob"},null,-1)])],2)])])]),s("div",ia,[s("div",ta,[s("h4",null,i(t(U)("devices.console")),1),s("button",{class:"console-clear-btn",onClick:a[27]||(a[27]=(...e)=>t(xa)&&t(xa)(...e))},i(t(U)("devices.clearConsole")),1)]),s("div",ca,[0===t(fa).length?(x(),l("div",da,i(t(U)("devices.consoleEmpty")),1)):p("",!0),(x(!0),l(o,null,n(t(fa),(e,a)=>(x(),l("div",{key:a,class:r(["console-line","log-"+e.type])},i(e.msg),3))),128))])])]),s("div",ra,[s("button",{class:"cancel-btn diablo-button-secondary",onClick:a[28]||(a[28]=e=>Ia.value=!1)},i(t(U)("common.cancel")),1),s("button",{class:"confirm-btn diablo-button",onClick:Ha},i(t(U)("devices.applyConfig")),1)])])])):p("",!0)]))}}),[["__scopeId","data-v-02aa6d08"]]);export{va as default};
@@ -0,0 +1 @@
1
+ import{u as e,a,_ as t}from"./index-BuEwLgbU.js";import{w as n,r as o,s as l,f as s,o as i,k as r,n as c,y as u,A as d,u as v,B as f,W as g,i as p,F as m,z as h,E as b,M as y,C as w,P as k,p as S,H as C,c as x,t as M,G as A,X as B}from"./vue-vendor-BaBirIg_.js";import{Y as U,g as D,k as I}from"./api-C3Fyph-A.js";import{_ as L}from"./_plugin-vue_export-helper-BCo6x5W8.js";function W(){const e=o(!1),a=o(!1),t=o(!1),s=o(""),i=o(0),r=o(0),c=o([]),u=o(""),d=l(null),v=o(100);let f=null;n(v,e=>{f&&(f.gain.value=e/100)});let g=null,p=null,m=null,h=null,b=null,y=null,w=null,k=null;function S(){!function(){k&&(cancelAnimationFrame(k),k=null);r.value=0}(),h&&(h.disconnect(),h=null),f&&(f.disconnect(),f=null),b&&(b.disconnect(),b=null),m&&(m.getTracks().forEach(e=>e.stop()),m=null),p&&(p.close(),p=null),w=null,d.value=null,t.value=!1,r.value=0}function C(){if(a.value=!1,h&&(h.disconnect(),h=null),y&&(y.terminate(),y=null),g){try{g.send("CLOSE")}catch{}g.close(),g=null}e.value=!1,console.log("[广播] 已停止")}return{isConnected:e,isBroadcasting:a,isPreviewing:t,error:s,bytesSent:i,volumeLevel:r,audioDevices:c,selectedDeviceId:u,analyserNode:d,enumerateAudioDevices:async function(){try{(await navigator.mediaDevices.getUserMedia({audio:!0})).getTracks().forEach(e=>e.stop());const e=await navigator.mediaDevices.enumerateDevices();c.value=e.filter(e=>"audioinput"===e.kind),c.value.length>0&&!u.value&&(u.value=c.value[0].deviceId)}catch{s.value="无法获取音频设备列表"}},startPreview:async function(){S();try{const e={audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0,...u.value?{deviceId:{exact:u.value}}:{}}};m=await navigator.mediaDevices.getUserMedia(e),p=new AudioContext({sampleRate:16e3}),"suspended"===p.state&&await p.resume(),b=p.createMediaStreamSource(m),w=p.createAnalyser(),w.fftSize=256,w.smoothingTimeConstant=.8,f=p.createGain(),f.gain.value=v.value/100,b.connect(f),f.connect(w),d.value=w,t.value=!0,s.value="",function(){const e=new Uint8Array(w.frequencyBinCount),a=()=>{if(!w)return;w.getByteFrequencyData(e);let t=0;for(let a=0;a<e.length;a++)t+=e[a];r.value=Math.round(t/e.length/255*100),k=requestAnimationFrame(a)};a()}()}catch{s.value="无法访问麦克风"}},stopPreview:S,startBroadcast:async function(n){if(!(t.value&&p&&w&&b))return void(s.value="请先选择音源");g&&(g.close(),g=null),console.log("[广播] 尝试连接 WebSocket:",n.serverUrl);try{await new Promise((t,o)=>{g=new WebSocket(n.serverUrl),console.log("[广播] WebSocket 对象已创建, readyState:",g.readyState),g.onopen=()=>{console.log("[广播] WebSocket 已连接"),e.value=!0,s.value="",t()},g.onerror=a=>{console.error("[广播] WebSocket 连接错误:",a,"URL:",n.serverUrl),s.value="WebSocket 连接失败",e.value=!1,o(new Error("connect failed"))},g.onclose=()=>{e.value=!1,a.value=!1}})}catch{return void(s.value="WebSocket 连接失败")}const o={Meport:n.Meport,Umagic:n.Umagic,userid:n.userid,id:n.userid,token:n.token,Umask:n.Umask,plevel:n.plevel,ulevel:n.ulevel,snlist:n.snlist,cmd:"PLAYLIST",Meip:n.Meip},l=JSON.stringify(o);if(g.send(l.length+"\n"+l),console.log("[广播] 握手报文已发送:",l),!(await new Promise(e=>{if(!g)return void e(!1);const a=setTimeout(()=>{console.error("[广播] 握手超时(10秒)"),e(!1)},1e4),t=g;t.onmessage=n=>{const o="string"==typeof n.data?n.data:"";clearTimeout(a),"WELL"===o.trim()?(console.log("[广播] 握手成功,收到 WELL"),t.onmessage=null,e(!0)):(console.error("[广播] 握手失败,服务器返回:",o),t.onmessage=null,e(!1))}})))return g&&(g.close(),g=null),e.value=!1,void(s.value="握手校验失败,服务器未返回 WELL");let r=0,c=!1;const u="file:"===location.protocol?new URL("./js/worker-realtime.js",location.href).href:"/js/worker-realtime.js";y=new Worker(u),y.onmessage=e=>{if("chunk"===e.data.cmd&&e.data.buf&&e.data.buf.length>0){for(const a of e.data.buf)if(a.length>0){const e=P(a);c?(null==g||g.send(e),i.value+=a.length):(r++,null==g||g.send(e),i.value+=a.length,r>=2&&(c=!0,console.log("[广播] 预缓冲 2 包完成,开始实时推流")))}}else"end"===e.data.cmd&&console.log("[广播] Worker 编码结束")},y.postMessage({cmd:"init",config:{inSampleRate:p.sampleRate,bitRate:32}}),h=p.createScriptProcessor(16384,2,2),h.onaudioprocess=e=>{const a=e.inputBuffer.getChannelData(0),t=e.inputBuffer.getChannelData(1);y&&y.postMessage({cmd:"open",left:a,right:t})},f?f.connect(h):b.connect(h),w?h.connect(w):h.connect(p.destination),a.value=!0,i.value=0,console.log("[广播] 开始推流")},stopBroadcast:C,disconnect:function(){a.value&&C(),S()},formatBytes:function(e){return e<1024?e+"B":e<1048576?(e/1024).toFixed(1)+"KB":(e/1024/1024).toFixed(1)+"MB"},inputVolume:v}}const _="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function P(e){const a=Math.ceil(4*e.length/3),t=new Array(a);let n=0,o=0,l=0;return e.forEach(e=>{let a=0;0===n?(a=e>>2,t[o++]=_[l+a],l=(3&e)<<4):1===n?(a=e>>4,t[o++]=_[l+a],l=(15&e)<<2):2===n&&(a=e>>6,t[o++]=_[l+a],t[o++]=_[63&e],l=0),n++,3===n&&(n=0)}),0!==n&&(t[o]=_[l]),t.join("")}const R={class:"broadcast-page"},T={class:"page-header"},E={class:"page-title"},$={class:"top-row"},j={class:"glass-section top-row-left"},F={class:"section-title"},V={class:"source-row"},q=["value"],N={key:0,class:"empty-hint"},O={key:1,class:"connect-mic-area"},G={key:2,class:"volume-row"},z={class:"volume-label"},J={class:"volume-value"},H={class:"waveform-container"},Y={class:"glass-section broadcast-control top-row-right"},K={class:"section-title"},X={class:"broadcast-btn-area"},Q=["disabled"],Z={class:"broadcast-btn-text"},ee={class:"broadcast-btn-text"},ae={class:"status-bar"},te={class:"status-text"},ne={class:"glass-section"},oe={class:"section-title"},le={key:0,class:"group-bar"},se={class:"group-label"},ie=["onClick"],re={class:"device-toolbar"},ce={class:"device-filter"},ue=["placeholder"],de={class:"selected-count"},ve={key:1,class:"device-list"},fe=["value","disabled"],ge={class:"device-name"},pe={key:2,class:"empty-state"},me="broadcast_selected_sn",he=L(s({__name:"index",setup(l){const{t:s}=e(),L=a(),{isConnected:_,isBroadcasting:P,isPreviewing:he,error:be,bytesSent:ye,audioDevices:we,selectedDeviceId:ke,analyserNode:Se,enumerateAudioDevices:Ce,startPreview:xe,startBroadcast:Me,stopBroadcast:Ae,disconnect:Be,formatBytes:Ue,inputVolume:De}=W(),Ie=o(null);let Le=null;const We=o("wss://hwywss.xxx.com/wss23020"),_e=o(6002),Pe=o("127.0.0.1"),Re=o(9),Te=o(600),Ee=o([]),$e=o([]),je=o(""),Fe=o([]),Ve=o(null),qe=x(()=>{if(!je.value.trim())return Ee.value;const e=je.value.trim().toLowerCase();return Ee.value.filter(a=>{const t=Ne(a).toLowerCase(),n=Ge(a).toLowerCase();return t.includes(e)||n.includes(e)})});function Ne(e){return e.devname||e.device_name||e.name||Ge(e)}function Oe(e){return 1===e.status||2===e.status||1===e.online}function Ge(e){return e.device_seed||e.sn||""}function ze(){Ve.value=null,$e.value=Ee.value.filter(e=>Oe(e)).map(Ge)}function Je(){Ve.value=null,$e.value=[]}async function He(){ke.value&&await xe()}async function Ye(){await Ce(),ke.value&&await xe()}async function Ke(){var e;if(0===$e.value.length||!We.value||!he.value)return;const a=L.token||localStorage.getItem("token")||"",t=(null==(e=L.userInfo)?void 0:e.id)||Number(localStorage.getItem("userId"))||0;await Me({serverUrl:We.value,Meport:_e.value,Meip:Pe.value,Umagic:Math.floor(9e4*Math.random())+1e4,userid:t,token:a,Umask:Math.random().toString(36).substring(2,34),plevel:Re.value,ulevel:Te.value,snlist:$e.value})}function Xe(){P.value&&Ae()}function Qe(){Le&&(cancelAnimationFrame(Le),Le=null)}function Ze(){const e=Ie.value,a=Se.value;if(!e||!a)return;const t=e.getContext("2d"),n=window.devicePixelRatio||1,o=e.getBoundingClientRect();e.width=o.width*n,e.height=o.height*n,t.scale(n,n);const l=o.width,s=o.height,i=a.frequencyBinCount,r=new Uint8Array(i);a.getByteFrequencyData(r),t.clearRect(0,0,l,s);const c=Math.max(1,Math.floor(i/48)),u=(l-94)/48,d=Math.min(u/2,4);for(let v=0;v<48;v++){let e=0;for(let t=0;t<c;t++)e+=r[v*c+t]||0;const a=e/c/255,n=v*(u+2),o=s-Math.max(3,a*s*.9),l=.25+.75*a,i=t.createLinearGradient(n,o,n,s);i.addColorStop(0,`rgba(10, 132, 255, ${l})`),i.addColorStop(.5,`rgba(10, 132, 255, ${.7*l})`),i.addColorStop(1,`rgba(10, 132, 255, ${.15*l})`),t.fillStyle=i,t.beginPath(),t.moveTo(n+d,o),t.lineTo(n+u-d,o),t.quadraticCurveTo(n+u,o,n+u,o+d),t.lineTo(n+u,s),t.lineTo(n,s),t.lineTo(n,o+d),t.quadraticCurveTo(n,o,n+d,o),t.closePath(),t.fill(),a>.15&&(t.beginPath(),t.arc(n+u/2,o,u/2+1,0,2*Math.PI),t.fillStyle=`rgba(10, 132, 255, ${.3*a})`,t.fill())}Le=requestAnimationFrame(Ze)}function ea(e,a,t=365){const n=new Date(Date.now()+864e5*t);document.cookie=`${e}=${encodeURIComponent(a)};expires=${n.toUTCString()};path=/`}function aa(){const e=function(e){const a=`; ${document.cookie}`.split(`; ${e}=`);return 2===a.length?decodeURIComponent(a[1].split(";")[0]):null}(me);if(!e)return;const a=new Set(e.split(",").filter(Boolean)),t=new Set(Ee.value.map(Ge));$e.value=[...a].filter(e=>t.has(e))}return n($e,()=>{!function(){const e=$e.value;e.length>0?ea(me,e.join(",")):ea(me,"",-1)}()},{deep:!0}),n(he,e=>{e?B(()=>(Qe(),void Ze())):Qe()}),i(async()=>{!async function(){var e;try{const e=await U();console.log("[广播页] getWbInfo 完整响应:",JSON.stringify(e)),e&&e.wsinfo?(We.value=e.wsinfo,console.log("[广播页] WebSocket URL 设置为:",e.wsinfo)):console.warn("[广播页] getWbInfo 未返回 wsinfo, res:",JSON.stringify(e))}catch(a){console.error("[广播页] getWbInfo 通过拦截器失败,尝试原始请求:",a);try{const a=(await t(async()=>{const{default:e}=await import("./api-C3Fyph-A.js").then(e=>e.ad);return{default:e}},[])).default,n=(null==(e=localStorage.getItem("serverHost"))?void 0:e.replace(/\/+$/,""))||"",o=localStorage.getItem("token")||"",l=localStorage.getItem("userId")||"",s=new FormData;s.append("token",o),s.append("id",l);const i=await a.post(`${n}/user/getwbinfo`,s);console.log("[广播页] getWbInfo 原始响应:",JSON.stringify(i.data));const r=i.data;r&&r.wsinfo?(We.value=r.wsinfo,console.log("[广播页] WebSocket URL 设置为:",r.wsinfo)):r&&!0===r.res&&r.wsinfo&&(We.value=r.wsinfo)}catch(n){console.error("[广播页] 原始请求也失败:",n)}}}(),await async function(){try{const e=await D();!0===e.res&&Array.isArray(e.results)?Ee.value=e.results:!0===e.res&&Array.isArray(e.list)&&(Ee.value=e.list)}catch(e){console.error("获取设备列表失败:",e)}}(),aa(),async function(){try{const e=await I();!0===e.res&&Array.isArray(e.list)?Fe.value=e.list:Array.isArray(e.results)&&(Fe.value=e.results)}catch(e){console.error("获取分组列表失败:",e)}}()}),r(()=>{Qe(),Be()}),(e,a)=>(M(),c("div",R,[u("div",T,[u("h2",E,d(v(s)("broadcast.title")),1)]),u("div",$,[u("div",j,[u("h3",F,d(v(s)("broadcast.audioSource")),1),u("div",V,[f(u("select",{"onUpdate:modelValue":a[0]||(a[0]=e=>p(ke)?ke.value=e:null),onChange:He,class:"form-input source-select"},[(M(!0),c(m,null,h(v(we),(e,a)=>(M(),c("option",{key:e.deviceId,value:e.deviceId},d(e.label||`${v(s)("broadcast.microphone")} ${a+1}`),9,q))),128))],544),[[g,v(ke)]])]),0!==v(we).length||v(he)?b("",!0):(M(),c("div",N,d(v(s)("broadcast.noAudioDevice")),1)),v(he)||v(P)?b("",!0):(M(),c("div",O,[u("button",{class:"connect-mic-btn",onClick:Ye},[a[4]||(a[4]=y('<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="20" height="20" data-v-f653028d><path d="M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z" data-v-f653028d></path><path d="M19 10v2a7 7 0 0 1-14 0v-2" data-v-f653028d></path><line x1="12" y1="19" x2="12" y2="23" data-v-f653028d></line><line x1="8" y1="23" x2="16" y2="23" data-v-f653028d></line></svg>',1)),u("span",null,d(v(we).length>0?v(s)("broadcast.startPreview"):v(s)("broadcast.enableMicrophone")),1)])])),v(he)?(M(),c("div",G,[u("label",z,d(v(s)("broadcast.inputVolume")),1),f(u("input",{type:"range",min:"0",max:"200","onUpdate:modelValue":a[1]||(a[1]=e=>p(De)?De.value=e:null),class:"volume-slider"},null,512),[[w,v(De),void 0,{number:!0}]]),u("span",J,d(v(De))+"%",1)])):b("",!0),f(u("div",H,[u("canvas",{ref_key:"waveformCanvas",ref:Ie,class:"waveform-canvas"},null,512)],512),[[k,v(he)||v(P)]])]),u("div",Y,[u("h3",K,d(v(s)("broadcast.broadcastControl")),1),u("div",X,[v(P)?(M(),c("button",{key:1,class:"broadcast-btn btn-stop",onClick:Xe},[a[6]||(a[6]=u("svg",{viewBox:"0 0 24 24",fill:"currentColor"},[u("rect",{x:"6",y:"6",width:"12",height:"12",rx:"2"})],-1)),u("span",ee,d(v(s)("broadcast.stopBroadcast")),1)])):(M(),c("button",{key:0,class:S(["broadcast-btn btn-start",{"is-disabled":0===$e.value.length||!We.value||!v(he)}]),disabled:0===$e.value.length||!We.value||!v(he),onClick:Ke},[a[5]||(a[5]=y('<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" data-v-f653028d><path d="M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z" data-v-f653028d></path><path d="M19 10v2a7 7 0 0 1-14 0v-2" data-v-f653028d></path><line x1="12" y1="19" x2="12" y2="23" data-v-f653028d></line><line x1="8" y1="23" x2="16" y2="23" data-v-f653028d></line></svg>',1)),u("span",Z,d(v(s)("broadcast.startBroadcast")),1)],10,Q))]),u("div",ae,[u("span",{class:S(["status-dot",v(P)||v(_)?"online":"offline"])},null,2),u("span",te,[v(be)?(M(),c(m,{key:0},[C(d(v(be)),1)],64)):v(P)?(M(),c(m,{key:1},[C(d(v(s)("broadcast.broadcasting"))+" | "+d(v(Ue)(v(ye))),1)],64)):v(he)?(M(),c(m,{key:2},[C(d(v(s)("broadcast.audioReady")),1)],64)):(M(),c(m,{key:3},[C(d(v(s)("broadcast.notConnected")),1)],64))])])])]),u("div",ne,[u("h3",oe,d(v(s)("broadcast.selectDevices")),1),Fe.value.length>0?(M(),c("div",le,[u("span",se,d(v(s)("broadcast.quickSelectGroup"))+":",1),(M(!0),c(m,null,h(Fe.value,e=>(M(),c("button",{key:e.gid||e.pid,class:S(["group-chip",{"group-active":Ve.value===(e.gid||e.pid)}]),onClick:a=>function(e){const a=e.gid||e.pid;if(Ve.value===a)return Ve.value=null,void Je();Ve.value=a;const t=new Set,n=new Set;e.dlist&&Array.isArray(e.dlist)&&e.dlist.forEach(e=>{const a=e.Dsn||e.device_seed||e.sn||"";a&&t.add(String(a));const o=e.Did||e.id;o&&n.add(String(o))}),e.idlist&&Array.isArray(e.idlist)&&e.idlist.forEach(e=>n.add(String(e))),$e.value=Ee.value.filter(e=>{if(!Oe(e))return!1;const a=Ge(e),o=String(e.id||"");return t.has(a)||n.has(o)}).map(Ge)}(e)},d(e.name||e.pname),11,ie))),128))])):b("",!0),u("div",re,[u("button",{class:"toolbar-btn",onClick:ze},d(v(s)("broadcast.selectAllOnline")),1),u("button",{class:"toolbar-btn",onClick:Je},d(v(s)("broadcast.clearSelection")),1),u("div",ce,[a[7]||(a[7]=u("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2",width:"14",height:"14"},[u("circle",{cx:"11",cy:"11",r:"8"}),u("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})],-1)),f(u("input",{"onUpdate:modelValue":a[2]||(a[2]=e=>je.value=e),class:"filter-input",placeholder:v(s)("common.search")+"..."},null,8,ue),[[w,je.value]])]),u("span",de,d(v(s)("broadcast.selectedDevices",{count:$e.value.length})),1)]),qe.value.length>0?(M(),c("div",ve,[(M(!0),c(m,null,h(qe.value,e=>(M(),c("label",{key:Ge(e),class:S(["device-item",{"device-offline":!Oe(e),"device-disabled":!Oe(e)}])},[f(u("input",{type:"checkbox",value:Ge(e),"onUpdate:modelValue":a[3]||(a[3]=e=>$e.value=e),disabled:!Oe(e)},null,8,fe),[[A,$e.value]]),u("span",ge,d(Ne(e)),1),u("span",{class:S(["device-status-dot",Oe(e)?"online":"offline"])},null,2)],2))),128))])):(M(),c("div",pe,d(0===Ee.value.length?v(s)("broadcast.noDevices"):v(s)("broadcast.noMatch")),1))])]))}}),[["__scopeId","data-v-f653028d"]]);export{he as default};
@@ -0,0 +1 @@
1
+ .media-manage[data-v-ff8fe5a0]{padding:20px 20px 80px;min-height:100vh}.page-header[data-v-ff8fe5a0]{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.page-title[data-v-ff8fe5a0]{font-size:20px;font-weight:600;color:var(--diablo-text);margin:0;letter-spacing:-.3px}.header-actions[data-v-ff8fe5a0]{display:flex;gap:8px;align-items:center}.view-mode-toggle[data-v-ff8fe5a0]{display:flex;border:1px solid var(--glass-border);border-radius:8px;overflow:hidden;-webkit-backdrop-filter:blur(var(--glass-blur-light));backdrop-filter:blur(var(--glass-blur-light))}.view-mode-btn[data-v-ff8fe5a0]{display:flex;align-items:center;justify-content:center;padding:6px 10px;background:transparent;border:none;color:var(--diablo-text-muted);cursor:pointer;transition:all .2s ease}.view-mode-btn.active[data-v-ff8fe5a0]{background:var(--glass-bg-hover);color:var(--diablo-primary)}.view-mode-btn[data-v-ff8fe5a0]:hover:not(.active){color:var(--diablo-text);background:var(--glass-bg)}.tts-btn[data-v-ff8fe5a0]{display:flex;align-items:center;gap:6px;padding:8px 16px;background:var(--glass-bg);color:var(--diablo-primary);border:1px solid var(--glass-border);border-radius:10px;font-size:13px;font-weight:500;cursor:pointer;transition:all .2s ease}.tts-btn[data-v-ff8fe5a0]:hover{background:var(--glass-bg-hover);border-color:var(--diablo-primary);box-shadow:0 0 16px #0a84ff33;transform:translateY(-1px)}.tts-btn svg[data-v-ff8fe5a0]{width:16px;height:16px}.radio-btn[data-v-ff8fe5a0]{display:flex;align-items:center;gap:6px;padding:8px 16px;background:var(--glass-bg);color:#ff6b35;border:1px solid var(--glass-border);border-radius:10px;font-size:13px;font-weight:500;cursor:pointer;transition:all .2s ease}.radio-btn[data-v-ff8fe5a0]:hover{background:var(--glass-bg-hover);border-color:#ff6b35;box-shadow:0 0 16px #ff6b3533;transform:translateY(-1px)}.radio-btn svg[data-v-ff8fe5a0]{width:16px;height:16px}.tts-modal[data-v-ff8fe5a0]{max-width:560px}.tts-body[data-v-ff8fe5a0]{padding:20px;display:flex;flex-direction:column;gap:16px}.tts-field[data-v-ff8fe5a0]{display:flex;flex-direction:column;gap:6px}.tts-label[data-v-ff8fe5a0]{font-size:12px;font-weight:600;color:var(--diablo-text-muted);text-transform:uppercase;letter-spacing:.5px}.tts-input[data-v-ff8fe5a0],.tts-select[data-v-ff8fe5a0],.tts-textarea[data-v-ff8fe5a0]{width:100%;box-sizing:border-box}.tts-select[data-v-ff8fe5a0]{cursor:pointer;-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}.tts-textarea[data-v-ff8fe5a0]{resize:vertical;min-height:120px;line-height:1.6;font-family:inherit}.tts-char-count[data-v-ff8fe5a0]{font-size:11px;color:var(--diablo-text-muted);text-align:right}.tts-row[data-v-ff8fe5a0]{display:flex;gap:12px}.tts-field-half[data-v-ff8fe5a0]{flex:1}.radio-modal[data-v-ff8fe5a0]{max-width:480px}.radio-body[data-v-ff8fe5a0]{padding:20px;display:flex;flex-direction:column;gap:16px}.radio-field[data-v-ff8fe5a0]{display:flex;flex-direction:column;gap:6px}.radio-label[data-v-ff8fe5a0]{font-size:12px;font-weight:600;color:var(--diablo-text-muted);text-transform:uppercase;letter-spacing:.5px}.radio-input[data-v-ff8fe5a0]{width:100%;box-sizing:border-box}.radio-presets[data-v-ff8fe5a0]{display:flex;gap:8px;margin-bottom:8px}.preset-btn[data-v-ff8fe5a0]{flex:1;padding:8px 12px;background:var(--glass-bg);border:1px solid var(--glass-border);border-radius:8px;color:var(--diablo-text-muted);font-size:12px;cursor:pointer;transition:all .2s ease}.preset-btn[data-v-ff8fe5a0]:hover{background:var(--glass-bg-hover);border-color:#ff6b35;color:#ff6b35}.btn-primary[data-v-ff8fe5a0]{background:var(--diablo-primary);color:#fff;border-color:var(--diablo-primary)}.btn-primary[data-v-ff8fe5a0]:hover{opacity:.9;background:var(--diablo-primary);color:#fff}.btn-primary[data-v-ff8fe5a0]:disabled{opacity:.5;cursor:not-allowed}.refresh-btn[data-v-ff8fe5a0]{display:flex;align-items:center;justify-content:center;padding:8px;background:transparent;border:1px solid transparent;border-radius:8px;color:var(--diablo-text-muted);cursor:pointer;transition:all .2s ease}.refresh-btn[data-v-ff8fe5a0]:hover:not(:disabled){background:var(--glass-bg-hover);color:var(--diablo-text);border-color:var(--glass-border)}.refresh-btn[data-v-ff8fe5a0]:disabled{opacity:.5;cursor:not-allowed}.add-btn[data-v-ff8fe5a0]{display:flex;align-items:center;gap:6px;padding:8px 16px;background:var(--glass-bg);color:var(--diablo-text);border:1px solid var(--glass-border);border-radius:10px;font-size:13px;font-weight:500;cursor:pointer;transition:all .2s ease}.add-btn[data-v-ff8fe5a0]:hover{background:var(--glass-bg-hover);border-color:var(--glass-border-hover);box-shadow:var(--glass-shadow-hover),0 0 16px var(--glass-border-glow);transform:translateY(-1px)}.add-btn svg[data-v-ff8fe5a0]{width:16px;height:16px}.upload-drop-zone[data-v-ff8fe5a0]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:24px;margin-bottom:20px;border:2px dashed var(--glass-border);border-radius:14px;background:var(--glass-bg);color:var(--diablo-text-muted);font-size:14px;transition:all .3s ease;-webkit-backdrop-filter:blur(var(--glass-blur-light));backdrop-filter:blur(var(--glass-blur-light));box-shadow:var(--glass-shadow),var(--glass-inner-glow);cursor:pointer}.upload-drop-zone[data-v-ff8fe5a0]:hover,.upload-drop-zone.drop-active[data-v-ff8fe5a0]{border-color:var(--diablo-primary);background:#0a84ff0a;color:var(--diablo-primary);box-shadow:0 0 20px #0a84ff1a,var(--glass-inner-glow)}.upload-drop-zone .drop-zone-sub[data-v-ff8fe5a0]{font-size:12px;opacity:.6}.upload-drop-zone .drop-zone-actions[data-v-ff8fe5a0]{display:flex;gap:10px;margin-top:4px}.upload-drop-zone .drop-zone-btn[data-v-ff8fe5a0]{padding:6px 16px;border:1px solid var(--glass-border);border-radius:8px;background:var(--glass-bg);color:var(--diablo-text);font-size:13px;cursor:pointer;transition:all .2s ease}.upload-drop-zone .drop-zone-btn[data-v-ff8fe5a0]:hover{background:var(--glass-bg-hover);border-color:var(--glass-border-hover);transform:translateY(-1px)}.upload-drop-zone .upload-inline-progress[data-v-ff8fe5a0]{display:flex;align-items:center;gap:12px;width:100%;max-width:500px}.upload-drop-zone .upload-inline-progress span[data-v-ff8fe5a0]{font-size:13px;color:var(--diablo-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.upload-drop-zone .upload-inline-progress .upload-progress-track[data-v-ff8fe5a0]{flex:1;height:8px;background:var(--glass-border);border-radius:4px;overflow:hidden;min-width:100px}.upload-drop-zone .upload-inline-progress .upload-progress-track .upload-progress-fill[data-v-ff8fe5a0]{height:100%;background:var(--diablo-primary);border-radius:4px;transition:width .3s ease}.filter-section[data-v-ff8fe5a0]{margin-bottom:20px}.search-bar[data-v-ff8fe5a0]{display:flex;align-items:center;gap:10px;padding:10px 16px;background:var(--glass-bg);border:1px solid var(--glass-border);border-radius:12px;-webkit-backdrop-filter:blur(var(--glass-blur-light));backdrop-filter:blur(var(--glass-blur-light));box-shadow:var(--glass-shadow),var(--glass-inner-glow)}.search-bar svg[data-v-ff8fe5a0]{color:var(--diablo-text-muted);flex-shrink:0}.search-bar .search-input[data-v-ff8fe5a0]{flex:1;border:none;background:transparent;padding:0;box-shadow:none}.search-bar .search-input[data-v-ff8fe5a0]:focus{outline:none;box-shadow:none;border:none}.search-bar .search-stats[data-v-ff8fe5a0]{font-size:12px;color:var(--diablo-text-muted);white-space:nowrap}.batch-toolbar[data-v-ff8fe5a0]{display:flex;gap:12px;margin-bottom:20px;padding:14px 20px;background:var(--glass-bg);border:1px solid var(--glass-border);border-radius:12px;-webkit-backdrop-filter:blur(var(--glass-blur-light));backdrop-filter:blur(var(--glass-blur-light));box-shadow:var(--glass-shadow),var(--glass-inner-glow);align-items:center}.batch-toolbar-label[data-v-ff8fe5a0]{color:var(--diablo-text-muted);font-size:13px;font-weight:500}.batch-actions[data-v-ff8fe5a0]{display:flex;gap:8px;align-items:center}.action-btn[data-v-ff8fe5a0]{display:flex;align-items:center;gap:6px;padding:8px 16px;background:var(--glass-bg);border:1px solid var(--glass-border);border-radius:10px;color:var(--diablo-text-muted);font-size:13px;font-weight:500;cursor:pointer;transition:all .2s ease;white-space:nowrap}.action-btn[data-v-ff8fe5a0]:hover{background:var(--glass-bg-hover);color:var(--diablo-text);border-color:var(--glass-border-hover);transform:translateY(-1px)}.action-btn svg[data-v-ff8fe5a0]{width:16px;height:16px}.action-btn.action-btn-danger[data-v-ff8fe5a0]{color:#e74c3c}.action-btn.action-btn-danger[data-v-ff8fe5a0]:hover{background:#e74c3c26;border-color:#e74c3c;box-shadow:0 0 12px #e74c3c4d}.file-list-container[data-v-ff8fe5a0]{background:var(--glass-bg);border:1px solid var(--glass-border);border-radius:12px;overflow:hidden;-webkit-backdrop-filter:blur(var(--glass-blur-light));backdrop-filter:blur(var(--glass-blur-light));box-shadow:var(--glass-shadow),var(--glass-inner-glow)}.file-table-scroll[data-v-ff8fe5a0]{overflow-x:auto;overflow-y:auto;max-height:calc(100vh - 420px)}.file-table[data-v-ff8fe5a0]{width:100%;border-collapse:collapse;table-layout:fixed}.file-table th[data-v-ff8fe5a0],.file-table td[data-v-ff8fe5a0]{padding:10px 8px;text-align:left;border-bottom:1px solid var(--glass-border);font-size:13px;white-space:nowrap;vertical-align:middle;overflow:hidden;text-overflow:ellipsis;color:var(--diablo-text)}.file-table th[data-v-ff8fe5a0]{background:var(--diablo-bg-dark);color:var(--diablo-text-muted);font-weight:600;font-size:12px;position:sticky;top:0;z-index:10;-webkit-backdrop-filter:blur(var(--glass-blur)) saturate(1.4);backdrop-filter:blur(var(--glass-blur)) saturate(1.4)}.file-table tbody tr[data-v-ff8fe5a0]{transition:background .15s ease}.file-table tbody tr[data-v-ff8fe5a0]:hover{background:var(--glass-bg-hover)}.row-selected td[data-v-ff8fe5a0]{background:var(--glass-bg-active)!important}.row-playing td[data-v-ff8fe5a0]{background:#3498db0d}.col-checkbox[data-v-ff8fe5a0]{width:40px;text-align:center}.col-index[data-v-ff8fe5a0]{width:50px;text-align:center}.col-name[data-v-ff8fe5a0]{min-width:200px}.col-duration[data-v-ff8fe5a0]{width:80px}.col-size[data-v-ff8fe5a0]{width:90px}.col-actions[data-v-ff8fe5a0]{width:120px}.file-name-cell[data-v-ff8fe5a0]{display:flex;align-items:center;gap:8px}.file-name-cell .file-icon[data-v-ff8fe5a0]{color:var(--diablo-primary);flex-shrink:0}.file-name-cell .file-name-text[data-v-ff8fe5a0]{font-weight:500;color:var(--diablo-text)}.action-btn-group[data-v-ff8fe5a0]{display:flex;gap:4px;align-items:center}.row-action-btn[data-v-ff8fe5a0]{display:flex;align-items:center;justify-content:center;padding:4px 6px;background:var(--glass-bg);border:1px solid var(--glass-border);border-radius:6px;color:var(--diablo-text-muted);cursor:pointer;transition:all .2s ease;text-decoration:none}.row-action-btn[data-v-ff8fe5a0]:hover{background:var(--glass-bg-hover);color:var(--diablo-text);border-color:var(--glass-border-hover);transform:translateY(-1px)}.row-action-btn.btn-danger[data-v-ff8fe5a0]{color:#e74c3c}.row-action-btn.btn-danger[data-v-ff8fe5a0]:hover{background:#e74c3c26;border-color:#e74c3c}.card-scroll[data-v-ff8fe5a0]{padding:16px;max-height:calc(100vh - 420px);overflow-y:auto}.file-card-grid[data-v-ff8fe5a0]{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:16px}.file-card[data-v-ff8fe5a0]{background:var(--glass-bg);border:1px solid var(--glass-border);border-radius:14px;padding:16px;cursor:pointer;transition:all .3s ease;-webkit-backdrop-filter:blur(var(--glass-blur-light));backdrop-filter:blur(var(--glass-blur-light));box-shadow:var(--glass-shadow),var(--glass-inner-glow);display:flex;flex-direction:column;gap:12px}.file-card[data-v-ff8fe5a0]:hover{border-color:var(--glass-border-hover);background:var(--glass-bg-hover);box-shadow:var(--glass-shadow-hover),0 0 16px var(--glass-border-glow),var(--glass-inner-glow);transform:translateY(-2px)}.file-card.card-selected[data-v-ff8fe5a0]{border-color:var(--diablo-primary);background:#0a84ff0f}.file-card.card-playing[data-v-ff8fe5a0]{border-color:#3498db66;box-shadow:0 0 16px #3498db26,var(--glass-inner-glow)}.file-card-header[data-v-ff8fe5a0]{display:flex;align-items:center;justify-content:space-between}.file-card-header .file-icon-large[data-v-ff8fe5a0]{color:var(--diablo-primary)}.file-card-header .file-card-actions[data-v-ff8fe5a0]{display:flex;gap:4px}.file-card-name[data-v-ff8fe5a0]{font-size:14px;font-weight:500;color:var(--diablo-text);word-break:break-all;line-height:1.4}.file-card-meta[data-v-ff8fe5a0]{display:flex;gap:12px;font-size:12px;color:var(--diablo-text-muted)}.file-card-meta .meta-duration[data-v-ff8fe5a0]{font-weight:500}.playing-badge[data-v-ff8fe5a0]{display:inline-flex;align-items:center;gap:4px;margin-left:8px;padding:2px 8px;border-radius:10px;background:#3498db26;color:#3498db;font-size:11px;font-weight:600;border:1px solid rgba(52,152,219,.3)}.playing-dot[data-v-ff8fe5a0]{width:6px;height:6px;border-radius:50%;background:#3498db;box-shadow:0 0 8px #3498dbcc;animation:playingPulse-ff8fe5a0 1.2s ease-in-out infinite}@keyframes playingPulse-ff8fe5a0{0%,to{opacity:1;transform:scale(1)}50%{opacity:.6;transform:scale(1.3)}}.audio-player[data-v-ff8fe5a0]{position:fixed;bottom:20px;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:12px;padding:12px 20px;background:var(--glass-bg);border:1px solid var(--glass-border);border-radius:16px;-webkit-backdrop-filter:blur(var(--glass-blur)) saturate(1.4);backdrop-filter:blur(var(--glass-blur)) saturate(1.4);box-shadow:0 8px 32px #0000004d,var(--glass-inner-glow);z-index:1000;min-width:400px;max-width:600px}.audio-player .player-info[data-v-ff8fe5a0]{display:flex;align-items:center;gap:8px;min-width:0;flex-shrink:1}.audio-player .player-info .player-name[data-v-ff8fe5a0]{font-size:13px;font-weight:500;color:var(--diablo-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.audio-player .player-controls[data-v-ff8fe5a0]{height:32px;flex-shrink:0;border-radius:8px}.audio-player .player-close[data-v-ff8fe5a0]{display:flex;align-items:center;justify-content:center;padding:4px;background:transparent;border:none;color:var(--diablo-text-muted);cursor:pointer;border-radius:6px;transition:all .2s ease;flex-shrink:0}.audio-player .player-close[data-v-ff8fe5a0]:hover{color:var(--diablo-text);background:var(--glass-bg-hover)}.spin-icon[data-v-ff8fe5a0]{animation:spin-ff8fe5a0 1s linear infinite;color:var(--diablo-primary)}@keyframes spin-ff8fe5a0{to{transform:rotate(360deg)}}.modal-overlay[data-v-ff8fe5a0]{position:fixed;top:0;left:0;right:0;bottom:0;background:var(--diablo-shadow);display:flex;align-items:center;justify-content:center;z-index:1000;padding:20px;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.modal-content[data-v-ff8fe5a0]{background:var(--glass-bg);border:1px solid var(--glass-border);border-radius:16px;width:100%;max-width:480px;max-height:90vh;overflow-y:auto;-webkit-backdrop-filter:blur(var(--glass-blur)) saturate(1.4);backdrop-filter:blur(var(--glass-blur)) saturate(1.4);box-shadow:var(--glass-shadow),var(--glass-inner-glow)}.dialog-header[data-v-ff8fe5a0]{display:flex;justify-content:space-between;align-items:center;padding:20px;border-bottom:1px solid var(--glass-border)}.dialog-header h3[data-v-ff8fe5a0]{margin:0;font-size:16px;color:var(--diablo-text);font-weight:600}.close-btn[data-v-ff8fe5a0]{background:transparent;border:none;color:var(--diablo-text-muted);cursor:pointer;padding:4px;transition:all .3s ease}.close-btn[data-v-ff8fe5a0]:hover{color:var(--diablo-text);background:var(--glass-bg-hover);border-radius:8px}.modal-body[data-v-ff8fe5a0]{padding:20px;color:var(--diablo-text);font-size:14px}.modal-footer[data-v-ff8fe5a0]{display:flex;justify-content:flex-end;gap:12px;padding:20px;border-top:1px solid var(--glass-border)}.btn[data-v-ff8fe5a0]{padding:8px 16px;border:1px solid var(--glass-border);border-radius:10px;background:var(--glass-bg);color:var(--diablo-text-muted);font-size:13px;font-weight:500;cursor:pointer;transition:all .2s ease;display:inline-flex;align-items:center;gap:6px;-webkit-backdrop-filter:blur(var(--glass-blur-light));backdrop-filter:blur(var(--glass-blur-light))}.btn[data-v-ff8fe5a0]:hover{background:var(--glass-bg-hover);color:var(--diablo-text);border-color:var(--glass-border-hover);transform:translateY(-1px)}.btn-danger[data-v-ff8fe5a0]{color:#e74c3c}.btn-danger[data-v-ff8fe5a0]:hover{background:#e74c3c26;border-color:#e74c3c;color:#e74c3c}.btn-cancel[data-v-ff8fe5a0]:hover{background:var(--glass-bg-hover)}.form-input[data-v-ff8fe5a0]{padding:8px 12px;border:1px solid var(--glass-border);border-radius:8px;background:var(--glass-bg);color:var(--diablo-text);font-size:13px;transition:all .2s ease;cursor:pointer;-webkit-backdrop-filter:blur(var(--glass-blur-light));backdrop-filter:blur(var(--glass-blur-light))}.form-input[data-v-ff8fe5a0]:hover{border-color:var(--glass-border-hover)}.form-input[data-v-ff8fe5a0]:focus{outline:none;border-color:var(--glass-border-glow);box-shadow:0 0 8px var(--glass-border-glow)}.empty-cell[data-v-ff8fe5a0]{padding:0}.empty-state[data-v-ff8fe5a0]{padding:60px 40px;color:var(--diablo-text-muted);text-align:center;font-size:14px}.message-toast[data-v-ff8fe5a0]{position:fixed;top:20px;right:20px;padding:12px 20px;border-radius:10px;color:#fff;font-weight:500;z-index:9999;-webkit-backdrop-filter:blur(var(--glass-blur-light));backdrop-filter:blur(var(--glass-blur-light));box-shadow:var(--glass-shadow),var(--glass-inner-glow)}.message-toast.success[data-v-ff8fe5a0]{background:#27ae60e6}.message-toast.error[data-v-ff8fe5a0]{background:#e74c3ce6}.hidden-input[data-v-ff8fe5a0]{position:absolute;width:0;height:0;opacity:0;pointer-events:none}@media (max-width: 768px){.media-manage[data-v-ff8fe5a0]{padding:12px 12px 120px}.page-header[data-v-ff8fe5a0]{flex-direction:column;align-items:flex-start;gap:12px;margin-bottom:16px}.header-actions[data-v-ff8fe5a0]{flex-wrap:wrap;width:100%;gap:6px}.file-table-scroll[data-v-ff8fe5a0]{display:none}.card-scroll[data-v-ff8fe5a0]{display:block;max-height:calc(100vh - 380px)}.view-mode-toggle[data-v-ff8fe5a0]{display:none}.file-card-grid[data-v-ff8fe5a0]{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:10px}.upload-drop-zone[data-v-ff8fe5a0]{padding:16px}.upload-drop-zone .upload-inline-progress[data-v-ff8fe5a0]{flex-wrap:wrap;gap:8px}.upload-drop-zone .upload-inline-progress span[data-v-ff8fe5a0]{font-size:12px}.batch-toolbar[data-v-ff8fe5a0]{flex-direction:column;gap:8px;align-items:flex-start}.batch-actions[data-v-ff8fe5a0]{width:100%}.batch-actions .action-btn[data-v-ff8fe5a0]{flex:1;justify-content:center}.audio-player[data-v-ff8fe5a0]{min-width:unset;max-width:95vw;width:calc(100% - 24px);left:12px;transform:none;padding:10px 14px;gap:8px}.player-controls[data-v-ff8fe5a0]{height:28px;max-width:140px}.player-info .player-name[data-v-ff8fe5a0]{font-size:12px;max-width:100px}.modal-content[data-v-ff8fe5a0]{max-width:95vw;max-height:90vh}.dialog-header h3[data-v-ff8fe5a0]{font-size:15px}.modal-body[data-v-ff8fe5a0]{padding:16px}.modal-footer[data-v-ff8fe5a0]{padding:14px 16px}}@media (max-width: 480px){.media-manage[data-v-ff8fe5a0]{padding:8px}.page-title[data-v-ff8fe5a0]{font-size:17px}.upload-drop-zone[data-v-ff8fe5a0]{padding:12px;font-size:13px}.upload-drop-zone svg[data-v-ff8fe5a0]{width:24px;height:24px}.search-bar[data-v-ff8fe5a0]{padding:8px 12px}.file-card-grid[data-v-ff8fe5a0]{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px}.file-card[data-v-ff8fe5a0]{padding:12px;gap:8px}.file-card-name[data-v-ff8fe5a0]{font-size:13px}.file-card-header .file-icon-large[data-v-ff8fe5a0]{width:20px;height:20px}}
@@ -0,0 +1 @@
1
+ html,body{height:100%;overflow:hidden}#app{height:100%}:root{--diablo-bg-dark: #000000;--diablo-bg-card: #1c1c1e;--diablo-bg-input: #2c2c2e;--diablo-primary: #0a84ff;--diablo-primary-dark: #0066cc;--diablo-accent: #5856d6;--diablo-accent-glow: rgba(88, 86, 214, .25);--diablo-text: #f5f5f7;--diablo-text-muted: #86868b;--diablo-border: rgba(255, 255, 255, .12);--diablo-border-glow: rgba(10, 132, 255, .35);--diablo-shadow: rgba(0, 0, 0, .5);--diablo-fire: #ff6b2d;--diablo-fire-glow: rgba(255, 107, 45, .3);--diablo-font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", "Helvetica Neue", "PingFang SC", "Microsoft YaHei", sans-serif;--diablo-font-family-ui: -apple-system, BlinkMacSystemFont, "SF Pro Display", "Helvetica Neue", "PingFang SC", "Microsoft YaHei", sans-serif;--glass-bg: rgba(30, 30, 30, .55);--glass-bg-hover: rgba(45, 45, 48, .65);--glass-bg-active: rgba(55, 55, 60, .7);--glass-bg-card: rgba(28, 28, 30, .6);--glass-bg-sidebar: rgba(20, 20, 22, .65);--glass-bg-topbar: rgba(25, 25, 28, .55);--glass-bg-overlay: rgba(0, 0, 0, .55);--glass-blur: 24px;--glass-blur-heavy: 48px;--glass-blur-light: 12px;--glass-border: rgba(255, 255, 255, .1);--glass-border-hover: rgba(255, 255, 255, .2);--glass-border-glow: rgba(10, 132, 255, .2);--glass-border-glow-accent: rgba(88, 86, 214, .15);--glass-shadow: 0 4px 24px rgba(0, 0, 0, .3);--glass-shadow-hover: 0 8px 32px rgba(0, 0, 0, .4);--glass-inner-glow: inset 0 .5px 0 rgba(255, 255, 255, .08);--glass-tint: rgba(10, 132, 255, .02);--glass-tint-hover: rgba(10, 132, 255, .05)}:root,.theme-light{--diablo-bg-dark: #f5f5f7;--diablo-bg-card: #ffffff;--diablo-bg-input: #f0f2f5;--diablo-primary: #007aff;--diablo-primary-dark: #0056cc;--diablo-accent: #ff9500;--diablo-accent-glow: rgba(255, 149, 0, .25);--diablo-text: #1d1d1f;--diablo-text-muted: #86868b;--diablo-border: rgba(0, 0, 0, .08);--diablo-border-glow: rgba(0, 122, 255, .3);--diablo-shadow: rgba(0, 0, 0, .08);--diablo-fire: #ff3b30;--diablo-fire-glow: rgba(255, 59, 48, .25);--diablo-font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", "Helvetica Neue", "PingFang SC", "Microsoft YaHei", sans-serif;--diablo-font-family-ui: -apple-system, BlinkMacSystemFont, "SF Pro Display", "Helvetica Neue", "PingFang SC", "Microsoft YaHei", sans-serif;--glass-bg: rgba(255, 255, 255, .6);--glass-bg-hover: rgba(255, 255, 255, .75);--glass-bg-active: rgba(248, 248, 250, .8);--glass-bg-card: rgba(255, 255, 255, .65);--glass-bg-sidebar: rgba(255, 255, 255, .55);--glass-bg-topbar: rgba(255, 255, 255, .6);--glass-bg-overlay: rgba(240, 242, 245, .55);--glass-blur: 28px;--glass-blur-heavy: 50px;--glass-blur-light: 14px;--glass-border: rgba(0, 0, 0, .06);--glass-border-hover: rgba(0, 0, 0, .12);--glass-border-glow: rgba(0, 122, 255, .15);--glass-border-glow-accent: rgba(255, 149, 0, .12);--glass-shadow: 0 2px 16px rgba(0, 0, 0, .06);--glass-shadow-hover: 0 4px 24px rgba(0, 0, 0, .1);--glass-inner-glow: inset 0 .5px 0 rgba(255, 255, 255, .9);--glass-tint: rgba(0, 122, 255, .02);--glass-tint-hover: rgba(0, 122, 255, .04)}.theme-diablo{--diablo-bg-dark: #000000;--diablo-bg-card: #1c1c1e;--diablo-bg-input: #2c2c2e;--diablo-primary: #0a84ff;--diablo-primary-dark: #0066cc;--diablo-accent: #5856d6;--diablo-accent-glow: rgba(88, 86, 214, .25);--diablo-text: #f5f5f7;--diablo-text-muted: #86868b;--diablo-border: rgba(255, 255, 255, .12);--diablo-border-glow: rgba(10, 132, 255, .35);--diablo-shadow: rgba(0, 0, 0, .5);--diablo-fire: #ff6b2d;--diablo-fire-glow: rgba(255, 107, 45, .3);--diablo-font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", "Helvetica Neue", "PingFang SC", "Microsoft YaHei", sans-serif;--diablo-font-family-ui: -apple-system, BlinkMacSystemFont, "SF Pro Display", "Helvetica Neue", "PingFang SC", "Microsoft YaHei", sans-serif;--glass-bg: rgba(30, 30, 30, .55);--glass-bg-hover: rgba(45, 45, 48, .65);--glass-bg-active: rgba(55, 55, 60, .7);--glass-bg-card: rgba(28, 28, 30, .6);--glass-bg-sidebar: rgba(20, 20, 22, .65);--glass-bg-topbar: rgba(25, 25, 28, .55);--glass-bg-overlay: rgba(0, 0, 0, .55);--glass-blur: 24px;--glass-blur-heavy: 48px;--glass-blur-light: 12px;--glass-border: rgba(255, 255, 255, .1);--glass-border-hover: rgba(255, 255, 255, .2);--glass-border-glow: rgba(10, 132, 255, .2);--glass-border-glow-accent: rgba(88, 86, 214, .15);--glass-shadow: 0 4px 24px rgba(0, 0, 0, .3);--glass-shadow-hover: 0 8px 32px rgba(0, 0, 0, .4);--glass-inner-glow: inset 0 .5px 0 rgba(255, 255, 255, .08);--glass-tint: rgba(10, 132, 255, .02);--glass-tint-hover: rgba(10, 132, 255, .05)}*{margin:0;padding:0;box-sizing:border-box}body{font-family:var(--diablo-font-family-ui);background:var(--diablo-bg-dark);color:var(--diablo-text);overflow-x:hidden;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transition:background .5s ease,color .3s ease}.diablo-bg{position:fixed;top:0;left:0;width:100%;height:100%;background:var(--diablo-bg-dark);z-index:-1;transition:background .5s ease}.diablo-bg:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;background:radial-gradient(600px circle at var(--mouse-x, 30%) var(--mouse-y, 30%),rgba(10,132,255,.06),transparent 60%),radial-gradient(400px circle at 70% 60%,rgba(88,86,214,.04),transparent 60%);z-index:0;pointer-events:none;transition:background .3s ease}.diablo-border{border:1px solid var(--glass-border);border-radius:12px;backdrop-filter:blur(var(--glass-blur-light));-webkit-backdrop-filter:blur(var(--glass-blur-light));box-shadow:var(--glass-shadow),var(--glass-inner-glow)}.diablo-border-glow{border:1px solid var(--glass-border-glow);border-radius:12px;backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));box-shadow:var(--glass-shadow),0 0 16px var(--glass-border-glow)}.diablo-gold-line{height:1px;background:linear-gradient(90deg,transparent,var(--glass-border-glow),transparent)}.diablo-fire{background:linear-gradient(180deg,var(--diablo-fire),transparent);box-shadow:0 0 16px var(--diablo-fire-glow)}.diablo-input{width:100%;padding:10px 14px;background:var(--glass-bg);border:1px solid var(--glass-border);border-radius:10px;color:var(--diablo-text);font-size:14px;backdrop-filter:blur(var(--glass-blur-light));-webkit-backdrop-filter:blur(var(--glass-blur-light));box-shadow:var(--glass-inner-glow);transition:all .3s cubic-bezier(.25,.1,.25,1)}.diablo-input::placeholder{color:var(--diablo-text-muted)}.diablo-input:focus{outline:none;border-color:var(--glass-border-hover);box-shadow:0 0 0 3px var(--glass-border-glow),var(--glass-inner-glow);background:var(--glass-bg-active)}.diablo-input:disabled{opacity:.5;cursor:not-allowed}.diablo-btn{padding:10px 20px;background:var(--diablo-primary);border:none;border-radius:10px;color:#fff;font-size:14px;font-weight:500;cursor:pointer;transition:all .3s cubic-bezier(.25,.1,.25,1);position:relative;overflow:hidden}.diablo-btn:hover{background:var(--diablo-primary-dark);transform:translateY(-1px);box-shadow:0 4px 12px var(--glass-border-glow)}.diablo-btn:active{transform:translateY(0) scale(.98);transition-duration:.1s}.diablo-btn:disabled{opacity:.5;cursor:not-allowed;transform:none}.diablo-btn-secondary{background:transparent;border:1px solid var(--glass-border);color:var(--diablo-text);backdrop-filter:blur(var(--glass-blur-light));-webkit-backdrop-filter:blur(var(--glass-blur-light))}.diablo-btn-secondary:hover{background:var(--glass-bg-hover);box-shadow:var(--glass-shadow),var(--glass-inner-glow)}.diablo-title{font-family:var(--diablo-font-family);font-size:28px;font-weight:700;color:var(--diablo-text);letter-spacing:-.5px}.diablo-card{background:var(--glass-bg-card);border:1px solid var(--glass-border);border-radius:14px;box-shadow:var(--glass-shadow),var(--glass-inner-glow);backdrop-filter:blur(var(--glass-blur)) saturate(1.15);-webkit-backdrop-filter:blur(var(--glass-blur)) saturate(1.15);position:relative;overflow:hidden;transition:all .3s cubic-bezier(.25,.1,.25,1)}.diablo-card:not(.diablo-corner):before{content:"";position:absolute;top:0;left:0;right:0;height:40%;background:linear-gradient(180deg,rgba(255,255,255,.06) 0%,transparent 100%);pointer-events:none;z-index:1;border-radius:14px 14px 0 0}.diablo-card:hover{background:var(--glass-bg-hover);border-color:var(--glass-border-hover);box-shadow:var(--glass-shadow-hover),0 0 12px var(--glass-border-glow);transform:translateY(-1px)}.diablo-corner{position:relative}.diablo-corner:before,.diablo-corner:after{content:"";position:absolute;width:16px;height:16px;border:1.5px solid var(--glass-border-glow)}.diablo-corner:before{top:-1px;left:-1px;border-right:none;border-bottom:none;border-radius:3px 0 0}.diablo-corner:after{bottom:-1px;right:-1px;border-left:none;border-top:none;border-radius:0 0 3px}.glass{background:var(--glass-bg);backdrop-filter:blur(var(--glass-blur)) saturate(1.15);-webkit-backdrop-filter:blur(var(--glass-blur)) saturate(1.15);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow),var(--glass-inner-glow)}.glass-heavy{background:var(--glass-bg-card);backdrop-filter:blur(var(--glass-blur-heavy)) saturate(1.2);-webkit-backdrop-filter:blur(var(--glass-blur-heavy)) saturate(1.2);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow),var(--glass-inner-glow)}.glass-light{background:var(--glass-bg);backdrop-filter:blur(var(--glass-blur-light)) saturate(1.1);-webkit-backdrop-filter:blur(var(--glass-blur-light)) saturate(1.1);border:1px solid var(--glass-border)}.glass-interactive{transition:all .3s cubic-bezier(.25,.1,.25,1);cursor:pointer;border-radius:10px}.glass-interactive:hover{background:var(--glass-bg-hover);border-color:var(--glass-border-hover);box-shadow:var(--glass-shadow-hover),0 0 10px var(--glass-border-glow);transform:translateY(-1px)}.glass-interactive:active{transform:translateY(0) scale(.98);transition-duration:.1s}.glass-enter-stagger>*{animation:glass-enter .5s cubic-bezier(.25,.1,.25,1) both}.glass-enter-stagger>*:nth-child(1){animation-delay:.03s}.glass-enter-stagger>*:nth-child(2){animation-delay:.06s}.glass-enter-stagger>*:nth-child(3){animation-delay:.09s}.glass-enter-stagger>*:nth-child(4){animation-delay:.12s}.glass-enter-stagger>*:nth-child(5){animation-delay:.15s}.glass-enter-stagger>*:nth-child(6){animation-delay:.18s}.glass-enter-stagger>*:nth-child(7){animation-delay:.21s}.glass-enter-stagger>*:nth-child(8){animation-delay:.24s}.glass-enter-stagger>*:nth-child(9){animation-delay:.27s}.glass-enter-stagger>*:nth-child(10){animation-delay:.3s}.modal-overlay,.dialog-overlay,.confirm-dialog-overlay{backdrop-filter:blur(8px) saturate(1.15);-webkit-backdrop-filter:blur(8px) saturate(1.15)}.modal-content,.dialog-content,.confirm-dialog-content{background:var(--glass-bg-card)!important;border:1px solid var(--glass-border)!important;border-radius:14px!important;backdrop-filter:blur(var(--glass-blur-heavy)) saturate(1.2);-webkit-backdrop-filter:blur(var(--glass-blur-heavy)) saturate(1.2);box-shadow:var(--glass-shadow-hover),var(--glass-inner-glow)!important;animation:glass-slide-up .35s cubic-bezier(.25,.1,.25,1)}@keyframes diablo-pulse{0%,to{opacity:.5}50%{opacity:1}}@keyframes diablo-float{0%,to{transform:translateY(0)}50%{transform:translateY(-6px)}}.diablo-pulse{animation:diablo-pulse 2s ease-in-out infinite}.diablo-float{animation:diablo-float 3s ease-in-out infinite}@keyframes glass-enter{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@keyframes glass-slide-up{0%{opacity:0;transform:translateY(16px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes glass-pulse{0%,to{box-shadow:0 0 0 0 var(--glass-border-glow)}50%{box-shadow:0 0 0 6px transparent}}@keyframes diablo-spin{to{transform:rotate(360deg)}}@keyframes diablo-shake{0%,to{transform:translate(0)}20%,60%{transform:translate(-4px)}40%,80%{transform:translate(4px)}}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--glass-border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--glass-border-hover)}.diablo-loading{display:inline-block;width:18px;height:18px;border:2px solid var(--glass-border);border-top-color:var(--diablo-primary);border-radius:50%;animation:diablo-spin .8s linear infinite}.diablo-input-wrapper{position:relative}.diablo-input-wrapper .diablo-input-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--diablo-text-muted);width:18px;height:18px;display:flex;align-items:center;justify-content:center}.diablo-input-wrapper .diablo-input-icon svg{width:100%;height:100%}.diablo-input-wrapper .diablo-input{padding-left:38px}.diablo-error{color:#ff3b30;font-size:13px;margin-top:6px;animation:diablo-shake .4s ease}.page-fade-enter-active{animation:glass-enter .4s cubic-bezier(.25,.1,.25,1)}.page-fade-leave-active{transition:opacity .2s ease}.page-fade-enter-from{opacity:0;transform:translateY(10px)}.page-fade-leave-to{opacity:0}html.native-app,html.native-app body{height:100%;overflow:hidden}html.native-app body>#app{height:100%;overflow:hidden}
@@ -0,0 +1 @@
1
+ .login-container[data-v-3b7ca9c3]{position:relative;min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px;overflow:hidden}.particles[data-v-3b7ca9c3]{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;overflow:hidden}.particle[data-v-3b7ca9c3]{position:absolute;width:4px;height:4px;background:var(--diablo-primary);border-radius:50%;opacity:.6;animation:particle-float-3b7ca9c3 10s infinite ease-in-out}@keyframes particle-float-3b7ca9c3{0%,to{transform:translate(0) scale(1);opacity:.6}50%{transform:translate(100px,-100px) scale(.5);opacity:0}}.login-card[data-v-3b7ca9c3]{width:100%;max-width:440px;padding:48px 40px;background:var(--glass-bg-card);-webkit-backdrop-filter:blur(var(--glass-blur-heavy));backdrop-filter:blur(var(--glass-blur-heavy));border:1px solid var(--glass-border);border-radius:16px;box-shadow:var(--glass-shadow),var(--glass-inner-glow);position:relative;z-index:1;transition:all .4s cubic-bezier(.25,.46,.45,.94)}.login-header[data-v-3b7ca9c3]{text-align:center;margin-bottom:32px}.logo-icon[data-v-3b7ca9c3]{display:inline-block;margin-bottom:20px}.logo-container[data-v-3b7ca9c3]{display:flex;justify-content:center;margin-bottom:20px}.diablo-logo[data-v-3b7ca9c3]{position:relative;width:80px;height:80px;display:flex;align-items:center;justify-content:center}.logo-core[data-v-3b7ca9c3]{position:absolute;width:20px;height:20px;background:var(--diablo-primary);border-radius:50%;box-shadow:0 0 30px var(--diablo-primary),0 0 60px #0a84ff80;animation:core-pulse-3b7ca9c3 2s infinite ease-in-out}.logo-ring[data-v-3b7ca9c3]{position:absolute;width:50px;height:50px;border:2px solid var(--diablo-accent);border-radius:50%;box-shadow:0 0 20px #ff95004d,inset 0 0 20px #ff95001a;animation:ring-rotate-3b7ca9c3 8s infinite linear}.logo-particles[data-v-3b7ca9c3]{position:absolute;width:100%;height:100%}.logo-particle[data-v-3b7ca9c3]{position:absolute;top:50%;left:50%;width:6px;height:6px;background:var(--diablo-primary);border-radius:50%;opacity:.8;transform-origin:center;animation:particle-orbit-3b7ca9c3 4s infinite ease-in-out;animation-delay:var(--delay)}@keyframes core-pulse-3b7ca9c3{0%,to{transform:scale(1);box-shadow:0 0 30px var(--diablo-primary),0 0 60px #0a84ff80}50%{transform:scale(1.2);box-shadow:0 0 40px var(--diablo-primary),0 0 80px #0a84ffcc}}@keyframes ring-rotate-3b7ca9c3{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes particle-orbit-3b7ca9c3{0%,to{transform:translate(-50%,-50%) rotate(var(--angle)) translate(30px);opacity:.8}50%{transform:translate(-50%,-50%) rotate(var(--angle)) translate(40px);opacity:.4}}.login-title[data-v-3b7ca9c3]{margin-bottom:8px;font-size:32px}.subtitle[data-v-3b7ca9c3]{font-family:var(--diablo-font-family-ui);font-size:12px;color:var(--diablo-text-muted);letter-spacing:4px;text-transform:uppercase}.diablo-gold-line[data-v-3b7ca9c3]{margin:24px 0;width:100%;height:1px;background:linear-gradient(90deg,transparent,var(--diablo-accent),transparent);opacity:.5}.language-selector[data-v-3b7ca9c3]{margin-bottom:24px}.login-form[data-v-3b7ca9c3]{margin-top:32px}.form-group[data-v-3b7ca9c3]{margin-bottom:20px}.login-btn[data-v-3b7ca9c3]{width:100%;margin-top:24px;font-size:16px;letter-spacing:3px}.loading-text[data-v-3b7ca9c3]{display:flex;align-items:center;justify-content:center;gap:10px}.form-footer[data-v-3b7ca9c3]{display:flex;justify-content:center;align-items:center;margin-top:20px;font-size:14px}.remember-me[data-v-3b7ca9c3]{display:flex;align-items:center;gap:8px;color:var(--diablo-text-muted);cursor:pointer;-webkit-user-select:none;user-select:none}.remember-me input[data-v-3b7ca9c3]{cursor:pointer}.login-footer[data-v-3b7ca9c3]{display:flex;align-items:center;justify-content:center;gap:16px;margin-top:32px;padding-top:24px;border-top:1px solid rgba(255,255,255,.1);font-size:12px;color:var(--diablo-text-muted)}.footer-divider[data-v-3b7ca9c3]{color:var(--diablo-accent);width:24px;height:24px;display:flex;align-items:center;justify-content:center}.footer-divider svg[data-v-3b7ca9c3]{width:100%;height:100%;stroke:var(--diablo-accent)}.fire-effect[data-v-3b7ca9c3]{position:absolute;bottom:0;left:50%;transform:translate(-50%);display:flex;gap:4px;pointer-events:none}.flame[data-v-3b7ca9c3]{width:3px;height:60px;background:linear-gradient(to top,var(--diablo-fire),transparent);border-radius:50%/60% 60% 40% 40%;animation:flame-dance-3b7ca9c3 2s infinite ease-in-out;opacity:.6}@keyframes flame-dance-3b7ca9c3{0%,to{height:40px;opacity:.4}50%{height:80px;opacity:.8}}@media (max-width: 480px){.login-card[data-v-3b7ca9c3]{padding:32px 24px}.login-title[data-v-3b7ca9c3]{font-size:24px}.diablo-logo[data-v-3b7ca9c3]{width:60px;height:60px}.logo-ring[data-v-3b7ca9c3]{width:40px;height:40px}}.login-card{background:var(--glass-bg-card)!important;border-color:var(--glass-border)!important;-webkit-backdrop-filter:blur(var(--glass-blur-heavy))!important;backdrop-filter:blur(var(--glass-blur-heavy))!important}.language-select{background:var(--diablo-bg-input)!important;color:var(--diablo-text)!important;border-color:var(--diablo-border)!important}.language-select option{background:var(--diablo-bg-card)!important;color:var(--diablo-text)!important}.theme-light .login-card{background:var(--glass-bg-card)!important;border-color:var(--glass-border)!important;-webkit-backdrop-filter:blur(var(--glass-blur-heavy))!important;backdrop-filter:blur(var(--glass-blur-heavy))!important}.theme-light .language-select{background:#f5f7fa!important;color:#333!important;border-color:#e0e0e0!important}.theme-light .language-select option{background:#fff!important;color:#333!important}
@@ -0,0 +1 @@
1
+ .test-page[data-v-f5ea5c29]{padding:40px;background:#0a0a0f;min-height:100vh}h1[data-v-f5ea5c29]{color:#e8e8e8;margin-bottom:20px}p[data-v-f5ea5c29]{color:#889;margin-bottom:20px}button[data-v-f5ea5c29]{padding:12px 24px;background:#0a84ff;color:#fff;border:none;border-radius:4px;cursor:pointer;font-size:16px;margin-right:10px}.links[data-v-f5ea5c29]{margin-top:20px}.link-btn[data-v-f5ea5c29]{background:#ff9500}
@@ -0,0 +1 @@
1
+ import{f as o,n as l,y as s,A as a,u as e,r as n,c as t,J as u,t as p}from"./vue-vendor-BaBirIg_.js";import{u as c}from"./index-BuEwLgbU.js";import{_ as i}from"./_plugin-vue_export-helper-BCo6x5W8.js";import"./api-C3Fyph-A.js";const m={class:"test-page"},r=i(o({__name:"test",setup(o){const i=u(),{t:r,locale:v}=c(),f=n(0),g=t(()=>v.value);function d(){f.value++,console.log("测试点击:",f.value),console.log("i18n 测试:",r("common.appName")),console.log("当前语言:",v.value)}function _(){i.push("/login")}return(o,n)=>(p(),l("div",m,[n[0]||(n[0]=s("h1",null,"测试页面 - Test Page",-1)),n[1]||(n[1]=s("p",null,"如果你能看到这个页面,说明 Vue 基本功能正常",-1)),s("p",null,"当前语言: "+a(g.value),1),s("p",null,"测试翻译: "+a(e(r)("common.appName")),1),s("button",{onClick:d},"点击测试 Click Test"),s("p",null,"点击次数: "+a(f.value),1),s("div",{class:"links"},[s("button",{onClick:_,class:"link-btn"},"前往登录页面 Go to Login")])]))}}),[["__scopeId","data-v-f5ea5c29"]]);export{r as default};
@@ -0,0 +1 @@
1
+ import{k as e,r as n,c as t}from"./vue-vendor-BaBirIg_.js";function r(){const r=n([]),s=n(!1),a=n(""),c=t(()=>{var e;return!!(null==(e=window.electronAPI)?void 0:e.isElectron)}),i=n([]);let u=!1;const o=new Map;function l(e){i.value.push(e),i.value.length>500&&(i.value=i.value.slice(-300))}function v(e){const n=r.value.findIndex(n=>n.seed===e.seed);n>=0?r.value[n]=e:r.value.push(e)}function d(e){if(l(e),"recv"===e.type||"info"===e.type){const n=e.msg.match(/←\s*(\d+\.\d+\.\d+\.\d+)/);n&&o.set(n[1],Date.now())}}async function f(){if(!c.value)return;if(u)return;const e=window.electronAPI;try{await e.udpStartListener(),e.onDeviceFound(v),e.onUdpLog(d),u=!0,l({type:"info",msg:"[系统] UDP 监听已启动"})}catch(n){a.value=n.message||"启动UDP监听失败",l({type:"error",msg:`[错误] ${n.message}`})}}async function w(){if(!c.value||!u)return;const e=window.electronAPI;try{e.removeDeviceFoundListener(),e.removeDeviceInfoListener(),e.removeUdpLogListener(),await e.udpStopListener(),u=!1}catch{}}return e(()=>{w()}),{scannedDevices:r,isScanning:s,scanError:a,isElectron:c,udpLogs:i,startScan:async function(e){if(c.value)if(!e||32===e.length&&/^[0-9a-fA-F]{32}$/.test(e)){a.value="",s.value=!0,r.value=[];try{await f();const n=window.electronAPI,t=await n.udpScan(e||"");t.success||(a.value=t.error||"扫描失败")}catch(n){a.value=n.message||"扫描失败"}finally{setTimeout(()=>{s.value=!1},5e3)}}else a.value="SEED 必须为 32 位十六进制字符";else a.value="设备扫描仅支持 Electron 桌面客户端"},testCommunication:async function(e){if(!c.value)return!1;if(!e||32!==e.length||!/^[0-9a-fA-F]{32}$/.test(e))return l({type:"error",msg:"[错误] SEED 格式不正确,需要 32 位 hex"}),!1;await f();const n=window.electronAPI,t=r.value.find(n=>n.seed===e),s=(null==t?void 0:t.ip)||"",a=Date.now();o.delete(s);const i=await n.udpScan(e);return i.success?new Promise(n=>{let t=!1;const c=setInterval(()=>{if(t)return;const u=o.get(s);if(s&&u&&u>=a)return t=!0,clearInterval(c),clearTimeout(i),l({type:"recv",msg:`[成功] 设备 ${e.substring(0,16)}... 响应正常 → IP=${s}`}),void n(!0);const v=r.value.find(n=>n.seed===e);v&&v.ip!==s&&(t=!0,clearInterval(c),clearTimeout(i),l({type:"recv",msg:`[成功] 设备 ${e.substring(0,16)}... 响应正常 → IP=${v.ip}`}),n(!0))},300),i=setTimeout(()=>{t||(t=!0,clearInterval(c),l({type:"error",msg:`[超时] 设备 ${e.substring(0,16)}... 无响应 (5秒)`}),n(!1))},5e3)}):(l({type:"error",msg:`[错误] 发送失败: ${i.error}`}),!1)},configureDevice:async function(e){if(!c.value)return!1;const n=window.electronAPI;return(await n.udpConfigure(e)).success},clearDevice:async function(){if(!c.value)return!1;const e=window.electronAPI;return(await e.udpClear()).success},setDeviceVolume:async function(e,n,t){if(!c.value)return!1;const r=window.electronAPI;return(await r.udpSetVolume(e,n,t)).success},sendAmixer:async function(e,n,t){if(!c.value)return!1;await f();const r=window.electronAPI;return(await r.udpAmixer(e,n,t)).success},getAmixerStatus:async function(e){if(!c.value)return!1;await f();const n=window.electronAPI;return(await n.udpAmixerGet(e)).success},startListener:f,stopListener:w,clearLogs:function(){i.value=[]}}}export{r as u};