Browse Source

上传版本服务服务集群代码和管理后台

main
liwei1dao 4 months ago
parent
commit
188a0f5c55
  1. 2
      apps/admin/.output/nitro.json
  2. 2
      apps/admin/.output/public/_nuxt/0ubqzWuP.js
  3. 2
      apps/admin/.output/public/_nuxt/6n4fu-B8.js
  4. 4
      apps/admin/.output/public/_nuxt/96IDI_OR.js
  5. 2
      apps/admin/.output/public/_nuxt/B3ns_poC.js
  6. 1
      apps/admin/.output/public/_nuxt/BL6E8nSe.js
  7. 2
      apps/admin/.output/public/_nuxt/BMr4oSI7.js
  8. 2
      apps/admin/.output/public/_nuxt/BbBrUj30.js
  9. 1
      apps/admin/.output/public/_nuxt/BbMitk9t.js
  10. 2
      apps/admin/.output/public/_nuxt/BlypHpHg.js
  11. 2
      apps/admin/.output/public/_nuxt/C5ETpaZb.js
  12. 1
      apps/admin/.output/public/_nuxt/C6_DfsT-.js
  13. 2
      apps/admin/.output/public/_nuxt/CACbmIlS.js
  14. 1
      apps/admin/.output/public/_nuxt/CIcxEwNZ.js
  15. 2
      apps/admin/.output/public/_nuxt/CVUxyiJx.js
  16. 2
      apps/admin/.output/public/_nuxt/D6jD5keW.js
  17. 2
      apps/admin/.output/public/_nuxt/DGXiXcCA.js
  18. 2
      apps/admin/.output/public/_nuxt/DN5T-G_F.js
  19. 2
      apps/admin/.output/public/_nuxt/Do83zqYq.js
  20. 2
      apps/admin/.output/public/_nuxt/Dqy3UYuS.js
  21. 2
      apps/admin/.output/public/_nuxt/DrdHHbY3.js
  22. 2
      apps/admin/.output/public/_nuxt/Dw5yL0ut.js
  23. 2
      apps/admin/.output/public/_nuxt/KP2C5FJ6.js
  24. 2
      apps/admin/.output/public/_nuxt/RqmPeXlN.js
  25. 2
      apps/admin/.output/public/_nuxt/builds/latest.json
  26. 1
      apps/admin/.output/public/_nuxt/builds/meta/045d42c9-2405-4f35-94e4-c42d64239a40.json
  27. 1
      apps/admin/.output/public/_nuxt/builds/meta/ec4737f4-4bc1-4016-bf94-c7164a1b5e0d.json
  28. 1
      apps/admin/.output/public/_nuxt/calltranslate.B6r4Q8-j.css
  29. 1
      apps/admin/.output/public/_nuxt/calltranslate.D9zILOgL.css
  30. 2
      apps/admin/.output/public/_nuxt/dltdoXck.js
  31. 2
      apps/admin/.output/public/_nuxt/p0Tfj-xC.js
  32. 1
      apps/admin/.output/public/_nuxt/serviceconfig.GtXqs6_A.css
  33. 1
      apps/admin/.output/public/_nuxt/serviceconfig.htjoqj-Q.css
  34. 2
      apps/admin/.output/public/_nuxt/v5y5DMRc.js
  35. 77
      apps/admin/.output/server/chunks/build/calltranslate-C6glzS4R.mjs
  36. 1
      apps/admin/.output/server/chunks/build/calltranslate-C6glzS4R.mjs.map
  37. 1
      apps/admin/.output/server/chunks/build/calltranslate-qCADGfI8.mjs.map
  38. 8
      apps/admin/.output/server/chunks/build/calltranslate-styles.DWMho6ro.mjs
  39. 1
      apps/admin/.output/server/chunks/build/calltranslate-styles.DWMho6ro.mjs.map
  40. 8
      apps/admin/.output/server/chunks/build/calltranslate-styles.hpAJUqsK.mjs
  41. 1
      apps/admin/.output/server/chunks/build/calltranslate-styles.hpAJUqsK.mjs.map
  42. 2
      apps/admin/.output/server/chunks/build/client.precomputed.mjs
  43. 4
      apps/admin/.output/server/chunks/build/server.mjs
  44. 205
      apps/admin/.output/server/chunks/build/serviceconfig-BTX37VDF.mjs
  45. 1
      apps/admin/.output/server/chunks/build/serviceconfig-BTX37VDF.mjs.map
  46. 198
      apps/admin/.output/server/chunks/build/serviceconfig-qwLggDKS.mjs
  47. 1
      apps/admin/.output/server/chunks/build/serviceconfig-qwLggDKS.mjs.map
  48. 8
      apps/admin/.output/server/chunks/build/serviceconfig-styles.BE2TPkT0.mjs
  49. 1
      apps/admin/.output/server/chunks/build/serviceconfig-styles.BE2TPkT0.mjs.map
  50. 8
      apps/admin/.output/server/chunks/build/serviceconfig-styles.xUAQG0GO.mjs
  51. 1
      apps/admin/.output/server/chunks/build/serviceconfig-styles.xUAQG0GO.mjs.map
  52. 4
      apps/admin/.output/server/chunks/build/styles.mjs
  53. 306
      apps/admin/.output/server/chunks/nitro/nitro.mjs
  54. 12
      apps/admin/app/pages/calltranslate.vue
  55. 10
      apps/admin/app/pages/serviceconfig.vue
  56. 2
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/0ubqzWuP.js
  57. 2
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/6n4fu-B8.js
  58. 4
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/96IDI_OR.js
  59. 2
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/B3ns_poC.js
  60. 1
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/BL6E8nSe.js
  61. 2
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/BMr4oSI7.js
  62. 2
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/BbBrUj30.js
  63. 1
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/BbMitk9t.js
  64. 2
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/BlypHpHg.js
  65. 2
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/C5ETpaZb.js
  66. 1
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/C6_DfsT-.js
  67. 2
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/CACbmIlS.js
  68. 1
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/CIcxEwNZ.js
  69. 2
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/CVUxyiJx.js
  70. 2
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/D6jD5keW.js
  71. 2
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/DGXiXcCA.js
  72. 2
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/DN5T-G_F.js
  73. 2
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/Do83zqYq.js
  74. 2
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/Dqy3UYuS.js
  75. 2
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/DrdHHbY3.js
  76. 2
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/Dw5yL0ut.js
  77. 2
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/KP2C5FJ6.js
  78. 2
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/RqmPeXlN.js
  79. 1
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/calltranslate.B6r4Q8-j.css
  80. 1
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/calltranslate.D9zILOgL.css
  81. 2
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/dltdoXck.js
  82. 2
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/p0Tfj-xC.js
  83. 1
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/serviceconfig.GtXqs6_A.css
  84. 1
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/serviceconfig.htjoqj-Q.css
  85. 2
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/v5y5DMRc.js
  86. 77
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-C6glzS4R.js
  87. 1
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-C6glzS4R.js.map
  88. 1
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-C6glzS4R.js.map.json
  89. 1
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-qCADGfI8.js.map
  90. 1
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-qCADGfI8.js.map.json
  91. 5
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-styles-1.mjs-DA2j2DKH.js
  92. 1
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-styles-1.mjs-DA2j2DKH.js.map
  93. 1
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-styles-1.mjs-DA2j2DKH.js.map.json
  94. 5
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-styles-1.mjs-Dn-xJ4XY.js
  95. 1
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-styles-1.mjs-Dn-xJ4XY.js.map
  96. 1
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-styles-1.mjs-Dn-xJ4XY.js.map.json
  97. 4
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-styles.DWMho6ro.mjs
  98. 4
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-styles.hpAJUqsK.mjs
  99. 200
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/serviceconfig-BTX37VDF.js
  100. 1
      apps/admin/node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/serviceconfig-BTX37VDF.js.map

2
apps/admin/.output/nitro.json

@ -1,5 +1,5 @@
{ {
"date": "2026-06-25T01:28:36.201Z", "date": "2026-06-25T01:39:28.611Z",
"preset": "node-server", "preset": "node-server",
"framework": { "framework": {
"name": "nuxt", "name": "nuxt",

2
apps/admin/.output/public/_nuxt/DhCGnUi5.js → apps/admin/.output/public/_nuxt/0ubqzWuP.js

File diff suppressed because one or more lines are too long

2
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/yy0tqe-M.js → apps/admin/.output/public/_nuxt/6n4fu-B8.js

File diff suppressed because one or more lines are too long

4
apps/admin/.output/public/_nuxt/ydFS6PsN.js → apps/admin/.output/public/_nuxt/96IDI_OR.js

File diff suppressed because one or more lines are too long

2
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/Bf7wQIBL.js → apps/admin/.output/public/_nuxt/B3ns_poC.js

File diff suppressed because one or more lines are too long

1
apps/admin/.output/public/_nuxt/BL6E8nSe.js

File diff suppressed because one or more lines are too long

2
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/BQLsZkMR.js → apps/admin/.output/public/_nuxt/BMr4oSI7.js

File diff suppressed because one or more lines are too long

2
apps/admin/.output/public/_nuxt/BzpN2JeG.js → apps/admin/.output/public/_nuxt/BbBrUj30.js

@ -1 +1 @@
import{_ as o,o as s,c as a,a as t,t as r}from"./ydFS6PsN.js";import{u as i}from"./8EvkM1NE.js";const u={class:"antialiased bg-white dark:bg-[#020420] dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-[#020420] tracking-wide"},c={class:"max-w-520px text-center"},l=["textContent"],d=["textContent"],p=["textContent"],f={__name:"error-500",props:{appName:{type:String,default:"Nuxt"},status:{type:Number,default:500},statusText:{type:String,default:"Internal server error"},description:{type:String,default:"This page is temporarily unavailable."},refresh:{type:String,default:"Refresh this page"}},setup(e){const n=e;return i({title:`${n.status} - ${n.statusText} | ${n.appName}`,script:[{innerHTML:`!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver(e=>{for(const o of e)if("childList"===o.type)for(const e of o.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)}).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;const r=function(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:'*,:after,:before{box-sizing:border-box;border-width:0;border-style:solid;border-color:var(--un-default-border-color,#e5e7eb)}:after,:before{--un-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}h1,h2{font-size:inherit;font-weight:inherit}h1,h2,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }'}]}),(h,m)=>(s(),a("div",u,[t("div",c,[t("h1",{class:"font-semibold leading-none mb-4 sm:text-[110px] tabular-nums text-[80px]",textContent:r(e.status)},null,8,l),t("h2",{class:"font-semibold mb-2 sm:text-3xl text-2xl",textContent:r(e.statusText)},null,8,d),t("p",{class:"mb-4 px-2 text-[#64748B] text-md",textContent:r(e.description)},null,8,p)])]))}},x=o(f,[["__scopeId","data-v-2c2ce9e3"]]);export{x as default}; import{_ as o,o as s,c as a,a as t,t as r}from"./96IDI_OR.js";import{u as i}from"./C5ETpaZb.js";const u={class:"antialiased bg-white dark:bg-[#020420] dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-[#020420] tracking-wide"},c={class:"max-w-520px text-center"},l=["textContent"],d=["textContent"],p=["textContent"],f={__name:"error-500",props:{appName:{type:String,default:"Nuxt"},status:{type:Number,default:500},statusText:{type:String,default:"Internal server error"},description:{type:String,default:"This page is temporarily unavailable."},refresh:{type:String,default:"Refresh this page"}},setup(e){const n=e;return i({title:`${n.status} - ${n.statusText} | ${n.appName}`,script:[{innerHTML:`!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver(e=>{for(const o of e)if("childList"===o.type)for(const e of o.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)}).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;const r=function(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:'*,:after,:before{box-sizing:border-box;border-width:0;border-style:solid;border-color:var(--un-default-border-color,#e5e7eb)}:after,:before{--un-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}h1,h2{font-size:inherit;font-weight:inherit}h1,h2,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }'}]}),(h,m)=>(s(),a("div",u,[t("div",c,[t("h1",{class:"font-semibold leading-none mb-4 sm:text-[110px] tabular-nums text-[80px]",textContent:r(e.status)},null,8,l),t("h2",{class:"font-semibold mb-2 sm:text-3xl text-2xl",textContent:r(e.statusText)},null,8,d),t("p",{class:"mb-4 px-2 text-[#64748B] text-md",textContent:r(e.description)},null,8,p)])]))}},x=o(f,[["__scopeId","data-v-2c2ce9e3"]]);export{x as default};

1
apps/admin/.output/public/_nuxt/BbMitk9t.js

File diff suppressed because one or more lines are too long

2
apps/admin/.output/public/_nuxt/CvD6yA6H.js → apps/admin/.output/public/_nuxt/BlypHpHg.js

@ -1 +1 @@
import{_ as s}from"./DhCGnUi5.js";import{_ as a,o as i,c as u,a as t,t as n,b as c,w as l,d}from"./ydFS6PsN.js";import{u as f}from"./8EvkM1NE.js";const p={class:"antialiased bg-white dark:bg-[#020420] dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-[#020420] tracking-wide"},m={class:"max-w-520px text-center"},h=["textContent"],b=["textContent"],x=["textContent"],g={class:"flex items-center justify-center w-full"},y={__name:"error-404",props:{appName:{type:String,default:"Nuxt"},status:{type:Number,default:404},statusText:{type:String,default:"Page not found"},description:{type:String,default:"Sorry, the page you are looking for could not be found."},backHome:{type:String,default:"Go back home"}},setup(e){const r=e;return f({title:`${r.status} - ${r.statusText} | ${r.appName}`,script:[{innerHTML:`!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver(e=>{for(const o of e)if("childList"===o.type)for(const e of o.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)}).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;const r=function(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:'*,:after,:before{box-sizing:border-box;border-width:0;border-style:solid;border-color:var(--un-default-border-color,#e5e7eb)}:after,:before{--un-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}h1,h2{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}h1,h2,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }'}]}),(k,_)=>{const o=s;return i(),u("div",p,[t("div",m,[t("h1",{class:"font-semibold leading-none mb-4 sm:text-[110px] tabular-nums text-[80px]",textContent:n(e.status)},null,8,h),t("h2",{class:"font-semibold mb-2 sm:text-3xl text-2xl",textContent:n(e.statusText)},null,8,b),t("p",{class:"mb-4 px-2 text-[#64748B] text-md",textContent:n(e.description)},null,8,x),t("div",g,[c(o,{to:"/",class:"font-medium hover:text-[#00DC82] text-sm underline underline-offset-3"},{default:l(()=>[d(n(e.backHome),1)]),_:1})])])])}}},z=a(y,[["__scopeId","data-v-52418c85"]]);export{z as default}; import{_ as s}from"./0ubqzWuP.js";import{_ as a,o as i,c as u,a as t,t as n,b as c,w as l,d}from"./96IDI_OR.js";import{u as f}from"./C5ETpaZb.js";const p={class:"antialiased bg-white dark:bg-[#020420] dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-[#020420] tracking-wide"},m={class:"max-w-520px text-center"},h=["textContent"],b=["textContent"],x=["textContent"],g={class:"flex items-center justify-center w-full"},y={__name:"error-404",props:{appName:{type:String,default:"Nuxt"},status:{type:Number,default:404},statusText:{type:String,default:"Page not found"},description:{type:String,default:"Sorry, the page you are looking for could not be found."},backHome:{type:String,default:"Go back home"}},setup(e){const r=e;return f({title:`${r.status} - ${r.statusText} | ${r.appName}`,script:[{innerHTML:`!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver(e=>{for(const o of e)if("childList"===o.type)for(const e of o.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)}).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;const r=function(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:'*,:after,:before{box-sizing:border-box;border-width:0;border-style:solid;border-color:var(--un-default-border-color,#e5e7eb)}:after,:before{--un-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}h1,h2{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}h1,h2,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }'}]}),(k,_)=>{const o=s;return i(),u("div",p,[t("div",m,[t("h1",{class:"font-semibold leading-none mb-4 sm:text-[110px] tabular-nums text-[80px]",textContent:n(e.status)},null,8,h),t("h2",{class:"font-semibold mb-2 sm:text-3xl text-2xl",textContent:n(e.statusText)},null,8,b),t("p",{class:"mb-4 px-2 text-[#64748B] text-md",textContent:n(e.description)},null,8,x),t("div",g,[c(o,{to:"/",class:"font-medium hover:text-[#00DC82] text-sm underline underline-offset-3"},{default:l(()=>[d(n(e.backHome),1)]),_:1})])])])}}},z=a(y,[["__scopeId","data-v-52418c85"]]);export{z as default};

2
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/8EvkM1NE.js → apps/admin/.output/public/_nuxt/C5ETpaZb.js

@ -1 +1 @@
import{u as a,e as s,h as u,i as r,f as h}from"./ydFS6PsN.js";function i(t){const e=t||s();return e.ssrContext?.head||e.runWithContext(()=>{if(u()){const n=r(h);if(!n)throw new Error("[nuxt] [unhead] Missing Unhead instance.");return n}})}function d(t,e={}){const n=e.head||i(e.nuxt);return a(t,{head:n,...e})}export{d as u}; import{u as a,e as s,h as u,i as r,f as h}from"./96IDI_OR.js";function i(t){const e=t||s();return e.ssrContext?.head||e.runWithContext(()=>{if(u()){const n=r(h);if(!n)throw new Error("[nuxt] [unhead] Missing Unhead instance.");return n}})}function d(t,e={}){const n=e.head||i(e.nuxt);return a(t,{head:n,...e})}export{d as u};

1
apps/admin/.output/public/_nuxt/C6_DfsT-.js

File diff suppressed because one or more lines are too long

2
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/CGKG3oBs.js → apps/admin/.output/public/_nuxt/CACbmIlS.js

File diff suppressed because one or more lines are too long

1
apps/admin/.output/public/_nuxt/CIcxEwNZ.js

File diff suppressed because one or more lines are too long

2
apps/admin/.output/public/_nuxt/CQ70mTiW.js → apps/admin/.output/public/_nuxt/CVUxyiJx.js

@ -1 +1 @@
import{e as f,a3 as r,a4 as c}from"./ydFS6PsN.js";const p="$s";function l(...o){const n=typeof o[o.length-1]=="string"?o.pop():void 0;typeof o[0]!="string"&&o.unshift(n);const[e,t]=o;if(!e||typeof e!="string")throw new TypeError("[nuxt] [useState] key must be a string: "+e);if(t!==void 0&&typeof t!="function")throw new Error("[nuxt] [useState] init must be a function: "+t);const s=p+e,i=f(),u=r(i.payload.state,s);if(t&&(i._state[s]??={_default:t}),u.value===void 0&&t){const a=t();if(c(a))return i.payload.state[s]=a,a;u.value=a}return u}let y=0;function d(){const o=l("app:toasts",()=>[]);function n(e,t="info",s=3e3){const i=++y;o.value.push({id:i,type:t,msg:e}),s>0&&setTimeout(()=>{o.value=o.value.filter(u=>u.id!==i)},s)}return{toasts:o,toast:n,success:(e,t)=>n(e,"success",t),error:(e,t)=>n(e,"error",t),info:(e,t)=>n(e,"info",t),warn:(e,t)=>n(e,"warning",t)}}export{d as u}; import{e as f,a3 as r,a4 as c}from"./96IDI_OR.js";const p="$s";function l(...o){const n=typeof o[o.length-1]=="string"?o.pop():void 0;typeof o[0]!="string"&&o.unshift(n);const[e,t]=o;if(!e||typeof e!="string")throw new TypeError("[nuxt] [useState] key must be a string: "+e);if(t!==void 0&&typeof t!="function")throw new Error("[nuxt] [useState] init must be a function: "+t);const s=p+e,i=f(),u=r(i.payload.state,s);if(t&&(i._state[s]??={_default:t}),u.value===void 0&&t){const a=t();if(c(a))return i.payload.state[s]=a,a;u.value=a}return u}let y=0;function d(){const o=l("app:toasts",()=>[]);function n(e,t="info",s=3e3){const i=++y;o.value.push({id:i,type:t,msg:e}),s>0&&setTimeout(()=>{o.value=o.value.filter(u=>u.id!==i)},s)}return{toasts:o,toast:n,success:(e,t)=>n(e,"success",t),error:(e,t)=>n(e,"error",t),info:(e,t)=>n(e,"info",t),warn:(e,t)=>n(e,"warning",t)}}export{d as u};

2
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/DD_13xZ1.js → apps/admin/.output/public/_nuxt/D6jD5keW.js

File diff suppressed because one or more lines are too long

2
apps/admin/.output/public/_nuxt/DogYBohj.js → apps/admin/.output/public/_nuxt/DGXiXcCA.js

File diff suppressed because one or more lines are too long

2
apps/admin/.output/public/_nuxt/CAJrjOWz.js → apps/admin/.output/public/_nuxt/DN5T-G_F.js

File diff suppressed because one or more lines are too long

2
apps/admin/.output/public/_nuxt/CWcpm1jv.js → apps/admin/.output/public/_nuxt/Do83zqYq.js

@ -1 +1 @@
import{y as p,z as d}from"./ydFS6PsN.js";async function c(s,a,i){const r=p(),n=d(),t={"Content-Type":"application/json"};r.token&&(t.Authorization=r.token),i&&Object.assign(t,i);const o=await fetch(s,{method:"POST",headers:t,body:JSON.stringify(a)});if(!o.ok)throw new Error(`HTTP error: ${o.status}`);const e=await o.json();if(e.code===18)throw r.logout(),n.push("/"),new Error(e.msg||"Unauthorized");if(e.code!==0)throw new Error(e.msg||"Unknown error");return e.data}function h(){const s=p();async function a(n,t){const o={};return s.currentAppId&&(o["X-App-Id"]=String(s.currentAppId)),c(`/web/api/api_${n}`,t??{},o)}async function i(n,t){return c(`/console/api/${n}`,t??{})}async function r(n,t){const o=await a("getcostoken",{path:t}),e=o.upload_url||o.url||"",u=await fetch(e,{method:"PUT",headers:{"Content-Type":n.type||"application/octet-stream"},body:n});if(!u.ok)throw new Error(`Upload failed: ${u.status}`);return e.split("?")[0]}return{webApi:a,consoleApi:i,uploadFile:r}}export{h as u}; import{y as p,z as d}from"./96IDI_OR.js";async function c(s,a,i){const r=p(),n=d(),t={"Content-Type":"application/json"};r.token&&(t.Authorization=r.token),i&&Object.assign(t,i);const o=await fetch(s,{method:"POST",headers:t,body:JSON.stringify(a)});if(!o.ok)throw new Error(`HTTP error: ${o.status}`);const e=await o.json();if(e.code===18)throw r.logout(),n.push("/"),new Error(e.msg||"Unauthorized");if(e.code!==0)throw new Error(e.msg||"Unknown error");return e.data}function h(){const s=p();async function a(n,t){const o={};return s.currentAppId&&(o["X-App-Id"]=String(s.currentAppId)),c(`/web/api/api_${n}`,t??{},o)}async function i(n,t){return c(`/console/api/${n}`,t??{})}async function r(n,t){const o=await a("getcostoken",{path:t}),e=o.upload_url||o.url||"",u=await fetch(e,{method:"PUT",headers:{"Content-Type":n.type||"application/octet-stream"},body:n});if(!u.ok)throw new Error(`Upload failed: ${u.status}`);return e.split("?")[0]}return{webApi:a,consoleApi:i,uploadFile:r}}export{h as u};

2
apps/admin/.output/public/_nuxt/32YvkCVR.js → apps/admin/.output/public/_nuxt/Dqy3UYuS.js

File diff suppressed because one or more lines are too long

2
apps/admin/.output/public/_nuxt/BkAHROeN.js → apps/admin/.output/public/_nuxt/DrdHHbY3.js

@ -1 +1 @@
import{_ as t,o,c as s,I as c}from"./ydFS6PsN.js";const r={},a={class:"min-h-screen","data-theme":"corporate"};function n(e,_){return o(),s("div",a,[c(e.$slots,"default")])}const l=t(r,[["render",n]]);export{l as default}; import{_ as t,o,c as s,I as c}from"./96IDI_OR.js";const r={},a={class:"min-h-screen","data-theme":"corporate"};function n(e,_){return o(),s("div",a,[c(e.$slots,"default")])}const l=t(r,[["render",n]]);export{l as default};

2
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/qq1ArTA8.js → apps/admin/.output/public/_nuxt/Dw5yL0ut.js

File diff suppressed because one or more lines are too long

2
apps/admin/.output/public/_nuxt/G648dITK.js → apps/admin/.output/public/_nuxt/KP2C5FJ6.js

File diff suppressed because one or more lines are too long

2
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/6DMNcPyq.js → apps/admin/.output/public/_nuxt/RqmPeXlN.js

@ -1 +1 @@
import{g as h,y as x,z as w,j as y,c as r,a as e,t as d,l as b,A as _,k as v,m as g,n as k,x as A,s as u,o as p,_ as M}from"./ydFS6PsN.js";const z={class:"login-bg flex items-center justify-center px-4"},B={class:"login-card"},C={class:"text-center"},S={style:{"font-size":"22px","font-weight":"700",color:"#0F172A",margin:"0 0 4px"}},T={key:0,class:"login-error show"},V={style:{width:"16px",height:"16px","flex-shrink":"0"},fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},j={style:{"margin-bottom":"16px"}},D={style:{"margin-bottom":"24px"}},q=h({__name:"index",setup(L){const a=x(),c=w(),o=A({account:"",password:""}),l=u(!1),n=u(""),m=u("Admin");y(async()=>{if(a.restore(),a.token){c.push("/dashboard");return}try{const t=(await $fetch("/web/api/api_getsiteinfo",{method:"POST",body:{}}))?.data?.sitename;t&&(m.value=t+" Admin",a.setSiteTitle(t))}catch{}});async function f(){l.value=!0,n.value="";try{const s=await $fetch("/web/api/api_login",{method:"POST",body:{account:o.account,password:o.password}});s.code===0&&s.data?(a.setLoginData(s.data),c.push("/dashboard")):n.value=s.msg||"登录失败"}catch{n.value="网络错误,请检查连接"}finally{l.value=!1}}return(s,t)=>(p(),r("div",z,[e("div",B,[e("div",C,[t[2]||(t[2]=e("div",{class:"logo-icon"},[e("svg",{class:"h-7 w-7 text-white",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"})])],-1)),e("h1",S,d(m.value),1),t[3]||(t[3]=e("p",{style:{"font-size":"13px",color:"#94A3B8",margin:"0 0 32px"}},"管理控制台",-1))]),n.value?(p(),r("div",T,[(p(),r("svg",V,[...t[4]||(t[4]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"},null,-1)])])),e("span",null,d(n.value),1)])):b("",!0),e("form",{onSubmit:_(f,["prevent"])},[e("div",j,[t[5]||(t[5]=e("label",{class:"login-label"},"账号",-1)),v(e("input",{"onUpdate:modelValue":t[0]||(t[0]=i=>o.account=i),type:"text",class:"login-input",placeholder:"请输入管理员账号",autocomplete:"username",required:""},null,512),[[g,o.account]])]),e("div",D,[t[6]||(t[6]=e("label",{class:"login-label"},"密码",-1)),v(e("input",{"onUpdate:modelValue":t[1]||(t[1]=i=>o.password=i),type:"password",class:"login-input",placeholder:"请输入密码",autocomplete:"current-password",required:""},null,512),[[g,o.password]])]),e("button",{type:"submit",class:k(["login-btn",{loading:l.value}])},d(l.value?"登录中...":"登 录"),3)],32),t[7]||(t[7]=e("p",{style:{"text-align":"center","font-size":"11px",color:"#94A3B8","margin-top":"24px"}}," © 2025 Admin Console · v1.0.1 ",-1))])]))}}),O=M(q,[["__scopeId","data-v-3a3bca03"]]);export{O as default}; import{g as h,y as x,z as w,j as y,c as r,a as e,t as d,l as b,A as _,k as v,m as g,n as k,x as A,s as u,o as p,_ as M}from"./96IDI_OR.js";const z={class:"login-bg flex items-center justify-center px-4"},B={class:"login-card"},C={class:"text-center"},S={style:{"font-size":"22px","font-weight":"700",color:"#0F172A",margin:"0 0 4px"}},T={key:0,class:"login-error show"},V={style:{width:"16px",height:"16px","flex-shrink":"0"},fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},j={style:{"margin-bottom":"16px"}},D={style:{"margin-bottom":"24px"}},q=h({__name:"index",setup(L){const a=x(),c=w(),o=A({account:"",password:""}),l=u(!1),n=u(""),m=u("Admin");y(async()=>{if(a.restore(),a.token){c.push("/dashboard");return}try{const t=(await $fetch("/web/api/api_getsiteinfo",{method:"POST",body:{}}))?.data?.sitename;t&&(m.value=t+" Admin",a.setSiteTitle(t))}catch{}});async function f(){l.value=!0,n.value="";try{const s=await $fetch("/web/api/api_login",{method:"POST",body:{account:o.account,password:o.password}});s.code===0&&s.data?(a.setLoginData(s.data),c.push("/dashboard")):n.value=s.msg||"登录失败"}catch{n.value="网络错误,请检查连接"}finally{l.value=!1}}return(s,t)=>(p(),r("div",z,[e("div",B,[e("div",C,[t[2]||(t[2]=e("div",{class:"logo-icon"},[e("svg",{class:"h-7 w-7 text-white",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"})])],-1)),e("h1",S,d(m.value),1),t[3]||(t[3]=e("p",{style:{"font-size":"13px",color:"#94A3B8",margin:"0 0 32px"}},"管理控制台",-1))]),n.value?(p(),r("div",T,[(p(),r("svg",V,[...t[4]||(t[4]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"},null,-1)])])),e("span",null,d(n.value),1)])):b("",!0),e("form",{onSubmit:_(f,["prevent"])},[e("div",j,[t[5]||(t[5]=e("label",{class:"login-label"},"账号",-1)),v(e("input",{"onUpdate:modelValue":t[0]||(t[0]=i=>o.account=i),type:"text",class:"login-input",placeholder:"请输入管理员账号",autocomplete:"username",required:""},null,512),[[g,o.account]])]),e("div",D,[t[6]||(t[6]=e("label",{class:"login-label"},"密码",-1)),v(e("input",{"onUpdate:modelValue":t[1]||(t[1]=i=>o.password=i),type:"password",class:"login-input",placeholder:"请输入密码",autocomplete:"current-password",required:""},null,512),[[g,o.password]])]),e("button",{type:"submit",class:k(["login-btn",{loading:l.value}])},d(l.value?"登录中...":"登 录"),3)],32),t[7]||(t[7]=e("p",{style:{"text-align":"center","font-size":"11px",color:"#94A3B8","margin-top":"24px"}}," © 2025 Admin Console · v1.0.1 ",-1))])]))}}),O=M(q,[["__scopeId","data-v-3a3bca03"]]);export{O as default};

2
apps/admin/.output/public/_nuxt/builds/latest.json

@ -1 +1 @@
{"id":"045d42c9-2405-4f35-94e4-c42d64239a40","timestamp":1782350899281} {"id":"ec4737f4-4bc1-4016-bf94-c7164a1b5e0d","timestamp":1782351561646}

1
apps/admin/.output/public/_nuxt/builds/meta/045d42c9-2405-4f35-94e4-c42d64239a40.json

@ -1 +0,0 @@
{"id":"045d42c9-2405-4f35-94e4-c42d64239a40","timestamp":1782350899281,"prerendered":[]}

1
apps/admin/.output/public/_nuxt/builds/meta/ec4737f4-4bc1-4016-bf94-c7164a1b5e0d.json

@ -0,0 +1 @@
{"id":"ec4737f4-4bc1-4016-bf94-c7164a1b5e0d","timestamp":1782351561646,"prerendered":[]}

1
apps/admin/.output/public/_nuxt/calltranslate.B6r4Q8-j.css

@ -0,0 +1 @@
.pair-card[data-v-51f11136]{background:#fff;border:1px solid #eef2f7;border-radius:14px;padding:16px;cursor:pointer;transition:all .15s}.pair-card[data-v-51f11136]:hover{border-color:#c7d2fe;box-shadow:0 4px 14px #6366f114}.lang-badge[data-v-51f11136]{font-size:12px;font-weight:700;padding:3px 10px;border-radius:8px;background:#eef2ff;color:#4338ca}.svc-pill[data-v-51f11136]{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:600;padding:3px 9px;border-radius:8px;color:#fff}.mode-badge[data-v-51f11136]{font-size:10px;font-weight:700;padding:2px 8px;border-radius:6px}.mode-pipeline[data-v-51f11136]{background:#dbeafe;color:#1e40af}.mode-e2e[data-v-51f11136]{background:#fff7ed;color:#c2410c}.editor-panel[data-v-51f11136]{background:#fff;border-radius:16px;border:1px solid #c7d2fe;box-shadow:0 8px 32px #6366f11a;padding:22px;margin-bottom:16px}.mtab[data-v-51f11136]{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:10px;border:2px solid transparent;cursor:pointer;transition:all .15s;flex:1}.mtab.on[data-v-51f11136]{border-color:#6366f1;background:linear-gradient(135deg,#eef2ff,#f5f3ff)}.sync-overlay[data-v-51f11136]{position:fixed;inset:0;background:#0f172a73;z-index:100;display:flex;align-items:center;justify-content:center;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.sync-box[data-v-51f11136]{background:#fff;border-radius:20px;padding:28px;width:520px;max-width:95vw;box-shadow:0 24px 80px #0000002e}.sync-region-grid[data-v-51f11136]{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:14px 0}.sync-region-item[data-v-51f11136]{display:flex;align-items:center;gap:7px;padding:8px 10px;border-radius:9px;border:1.5px solid #e2e8f0;cursor:pointer;transition:all .15s;font-size:13px;font-weight:500;color:#475569}.sync-region-item[data-v-51f11136]:hover{border-color:#c7d2fe;background:#f5f3ff}.sync-region-item.checked[data-v-51f11136]{border-color:#6366f1;background:#eef2ff;color:#4338ca}

1
apps/admin/.output/public/_nuxt/calltranslate.D9zILOgL.css

@ -1 +0,0 @@
.pair-card[data-v-23837fd5]{background:#fff;border:1px solid #eef2f7;border-radius:14px;padding:16px;cursor:pointer;transition:all .15s}.pair-card[data-v-23837fd5]:hover{border-color:#c7d2fe;box-shadow:0 4px 14px #6366f114}.lang-badge[data-v-23837fd5]{font-size:12px;font-weight:700;padding:3px 10px;border-radius:8px;background:#eef2ff;color:#4338ca}.svc-pill[data-v-23837fd5]{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:600;padding:3px 9px;border-radius:8px;color:#fff}.mode-badge[data-v-23837fd5]{font-size:10px;font-weight:700;padding:2px 8px;border-radius:6px}.mode-pipeline[data-v-23837fd5]{background:#dbeafe;color:#1e40af}.mode-e2e[data-v-23837fd5]{background:#fff7ed;color:#c2410c}.editor-panel[data-v-23837fd5]{background:#fff;border-radius:16px;border:1px solid #c7d2fe;box-shadow:0 8px 32px #6366f11a;padding:22px;margin-bottom:16px}.mtab[data-v-23837fd5]{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:10px;border:2px solid transparent;cursor:pointer;transition:all .15s;flex:1}.mtab.on[data-v-23837fd5]{border-color:#6366f1;background:linear-gradient(135deg,#eef2ff,#f5f3ff)}.sync-overlay[data-v-23837fd5]{position:fixed;inset:0;background:#0f172a73;z-index:100;display:flex;align-items:center;justify-content:center;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.sync-box[data-v-23837fd5]{background:#fff;border-radius:20px;padding:28px;width:520px;max-width:95vw;box-shadow:0 24px 80px #0000002e}.sync-region-grid[data-v-23837fd5]{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:14px 0}.sync-region-item[data-v-23837fd5]{display:flex;align-items:center;gap:7px;padding:8px 10px;border-radius:9px;border:1.5px solid #e2e8f0;cursor:pointer;transition:all .15s;font-size:13px;font-weight:500;color:#475569}.sync-region-item[data-v-23837fd5]:hover{border-color:#c7d2fe;background:#f5f3ff}.sync-region-item.checked[data-v-23837fd5]{border-color:#6366f1;background:#eef2ff;color:#4338ca}

2
apps/admin/.output/public/_nuxt/fDZAM7sq.js → apps/admin/.output/public/_nuxt/dltdoXck.js

File diff suppressed because one or more lines are too long

2
apps/admin/.output/public/_nuxt/DrH4uMNH.js → apps/admin/.output/public/_nuxt/p0Tfj-xC.js

File diff suppressed because one or more lines are too long

1
apps/admin/.output/public/_nuxt/serviceconfig.GtXqs6_A.css

@ -1 +0,0 @@
.svc-item[data-v-8f55f9ae]{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:10px;border:1px solid #eef2f7;background:#fff;cursor:pointer;transition:all .15s}.svc-item[data-v-8f55f9ae]:hover{border-color:#c7d2fe;background:#f5f3ff}.svc-item.active[data-v-8f55f9ae]{border-color:#6366f1;background:linear-gradient(135deg,#eef2ff,#f5f3ff);box-shadow:0 4px 12px #6366f11f}.svc-logo[data-v-8f55f9ae]{width:36px;height:36px;border-radius:9px;display:flex;align-items:center;justify-content:center;font-size:16px;flex-shrink:0;color:#fff;font-weight:700}.cat-chip[data-v-8f55f9ae]{font-weight:700;padding:2px 7px}.cat-chip[data-v-8f55f9ae],.lock-badge[data-v-8f55f9ae]{display:inline-flex;font-size:10px;border-radius:6px}.lock-badge[data-v-8f55f9ae]{align-items:center;gap:3px;font-weight:600;padding:1px 7px;background:#fef2f2;color:#dc2626}.inherit-badge[data-v-8f55f9ae]{background:#f1f5f9;color:#94a3b8}.inherit-badge[data-v-8f55f9ae],.override-badge[data-v-8f55f9ae]{font-size:10px;font-weight:600;padding:1px 7px;border-radius:6px}.override-badge[data-v-8f55f9ae]{background:#fef3c7;color:#b45309}.field-input[data-v-8f55f9ae]{border:1px solid #e2e8f0;border-radius:7px;padding:5px 9px;font-size:12.5px;font-family:SF Mono,Menlo,monospace;width:100%}.field-input[data-v-8f55f9ae]:focus{border-color:#6366f1;box-shadow:0 0 0 3px #6366f11a;outline:none}.sync-overlay[data-v-8f55f9ae]{position:fixed;inset:0;background:#0f172a73;z-index:100;display:flex;align-items:center;justify-content:center;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.sync-box[data-v-8f55f9ae]{background:#fff;border-radius:20px;padding:28px;width:520px;max-width:95vw;box-shadow:0 24px 80px #0000002e}.sync-region-grid[data-v-8f55f9ae]{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:14px 0}.sync-region-item[data-v-8f55f9ae]{display:flex;align-items:center;gap:7px;padding:8px 10px;border-radius:9px;border:1.5px solid #e2e8f0;cursor:pointer;transition:all .15s;font-size:13px;font-weight:500;color:#475569}.sync-region-item[data-v-8f55f9ae]:hover{border-color:#c7d2fe;background:#f5f3ff}.sync-region-item.checked[data-v-8f55f9ae]{border-color:#6366f1;background:#eef2ff;color:#4338ca}

1
apps/admin/.output/public/_nuxt/serviceconfig.htjoqj-Q.css

@ -0,0 +1 @@
.svc-item[data-v-97419e3c]{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:10px;border:1px solid #eef2f7;background:#fff;cursor:pointer;transition:all .15s}.svc-item[data-v-97419e3c]:hover{border-color:#c7d2fe;background:#f5f3ff}.svc-item.active[data-v-97419e3c]{border-color:#6366f1;background:linear-gradient(135deg,#eef2ff,#f5f3ff);box-shadow:0 4px 12px #6366f11f}.svc-logo[data-v-97419e3c]{width:36px;height:36px;border-radius:9px;display:flex;align-items:center;justify-content:center;font-size:16px;flex-shrink:0;color:#fff;font-weight:700}.cat-chip[data-v-97419e3c]{font-weight:700;padding:2px 7px}.cat-chip[data-v-97419e3c],.lock-badge[data-v-97419e3c]{display:inline-flex;font-size:10px;border-radius:6px}.lock-badge[data-v-97419e3c]{align-items:center;gap:3px;font-weight:600;padding:1px 7px;background:#fef2f2;color:#dc2626}.inherit-badge[data-v-97419e3c]{background:#f1f5f9;color:#94a3b8}.inherit-badge[data-v-97419e3c],.override-badge[data-v-97419e3c]{font-size:10px;font-weight:600;padding:1px 7px;border-radius:6px}.override-badge[data-v-97419e3c]{background:#fef3c7;color:#b45309}.field-input[data-v-97419e3c]{border:1px solid #e2e8f0;border-radius:7px;padding:5px 9px;font-size:12.5px;font-family:SF Mono,Menlo,monospace;width:100%}.field-input[data-v-97419e3c]:focus{border-color:#6366f1;box-shadow:0 0 0 3px #6366f11a;outline:none}.sync-overlay[data-v-97419e3c]{position:fixed;inset:0;background:#0f172a73;z-index:100;display:flex;align-items:center;justify-content:center;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.sync-box[data-v-97419e3c]{background:#fff;border-radius:20px;padding:28px;width:520px;max-width:95vw;box-shadow:0 24px 80px #0000002e}.sync-region-grid[data-v-97419e3c]{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:14px 0}.sync-region-item[data-v-97419e3c]{display:flex;align-items:center;gap:7px;padding:8px 10px;border-radius:9px;border:1.5px solid #e2e8f0;cursor:pointer;transition:all .15s;font-size:13px;font-weight:500;color:#475569}.sync-region-item[data-v-97419e3c]:hover{border-color:#c7d2fe;background:#f5f3ff}.sync-region-item.checked[data-v-97419e3c]{border-color:#6366f1;background:#eef2ff;color:#4338ca}

2
apps/admin/.output/public/_nuxt/CWxjl6OD.js → apps/admin/.output/public/_nuxt/v5y5DMRc.js

@ -1,4 +1,4 @@
import{g as G,j as K,H as P,c as a,a as e,d as u,k as x,p as U,F as f,r as B,m as Y,q as Z,t as n,s as i,C as E,o,n as F,l as I,_ as J}from"./ydFS6PsN.js";import{u as Q}from"./CWcpm1jv.js";import{u as W}from"./CQ70mTiW.js";const X=globalThis.setInterval,$={class:"flex items-center justify-between mb-4 flex-wrap gap-3"},tt={class:"flex items-center gap-2 flex-wrap"},et=["value"],st={class:"flex items-center gap-1 text-xs text-slate-500 cursor-pointer"},lt={class:"flex items-center gap-4 mb-3 text-xs text-slate-500"},nt={class:"text-slate-700"},at={class:"text-slate-700"},ot={class:"text-slate-700"},rt={class:"muted"},ut={class:"panel overflow-hidden"},it={id:"logBody",style:{"max-height":"calc(100vh - 230px)","overflow-y":"auto"}},ct={key:0,class:"text-center text-slate-400 py-10"},dt={key:1,class:"text-center text-red-400 py-10"},vt={key:2,class:"text-center text-slate-400 py-10"},pt={class:"t"},mt={class:"app-name"},ft={key:0,class:"unreg",title:"该应用名未在 console 注册,快照已收到但不会写入统计库"},gt={key:1,class:"muted"},xt={class:"muted"},_t={class:"muted"},yt={class:"muted"},bt={key:0,class:"muted"},ht={class:"t"},wt={key:0,class:"late"},kt=G({__name:"statlog",setup(Ct){const{webApi:A}=Q(),{success:H,error:O}=W(),R={cn:"中国",us:"美国",ea:"东亚",sea:"东南亚",sa:"南亚",me:"中东",eu:"欧洲",ru:"俄罗斯",af:"非洲",sam:"南美",nam:"北美",oc:"大洋洲",br:"巴西",in:"印度"};function D(l){return l?R[l]||l:"-"}const c=i([]),_=i(!1),g=i(""),L=i("-"),N=i("-"),y=i(""),v=i(0),b=i(""),h=i(""),w=i(!1);let d=null;function p(l=0){const s=new Date(Date.now()+l*864e5),t=new Intl.DateTimeFormat("en-CA",{timeZone:"Asia/Shanghai",year:"numeric",month:"2-digit",day:"2-digit"}).format(s);return parseInt(t.replace(/-/g,""),10)}function k(l){const s=""+l;return s.length===8?s.slice(0,4)+"-"+s.slice(4,6)+"-"+s.slice(6,8):s}function C(l){if(!l)return"--";const s=new Date(l*1e3),t=r=>r<10?"0"+r:""+r;return t(s.getHours())+":"+t(s.getMinutes())+":"+t(s.getSeconds())}function S(l){return l?"0x"+(l>>>0).toString(16).toUpperCase():"全部"}const V=E(()=>[{value:p(0),label:"今天 "+k(p(0))},{value:p(-1),label:"昨天 "+k(p(-1))}]);function M(l){return l==="error"?{cls:"lv-error",txt:"解析失败"}:l==="warn"?{cls:"lv-warn",txt:"未落库"}:{cls:"lv-info",txt:"已落库"}}function j(l){return!!(l.snap_ts&&l.ts&&l.ts-l.snap_ts>120)}const T=E(()=>{const l=b.value,s=h.value.trim().toLowerCase();return c.value.filter(t=>!(l&&t.level!==l||s&&((t.app||"")+" "+(t.region||"")+" "+D(t.region)+" "+(t.product_id||"")+" "+S(t.product_id)+" "+(t.stat_day||"")).toLowerCase().indexOf(s)<0))});async function m(){_.value=!0,g.value="";try{const l=await A("getstatlogs",{day:v.value||0});c.value=l?.entries||[],L.value=l?.total!=null?l.total:c.value.length,N.value=c.value.length?C(c.value[0].ts):"--"}catch(l){g.value=l?.message||"网络异常"}finally{_.value=!1}}async function q(){const l=v.value||0,s=V.value.find(r=>r.value===l),t=s?s.label:""+l;if(window.confirm("确定清空「"+t+`」的接收流水吗? import{g as G,j as K,H as P,c as a,a as e,d as u,k as x,p as U,F as f,r as B,m as Y,q as Z,t as n,s as i,C as E,o,n as F,l as I,_ as J}from"./96IDI_OR.js";import{u as Q}from"./Do83zqYq.js";import{u as W}from"./CVUxyiJx.js";const X=globalThis.setInterval,$={class:"flex items-center justify-between mb-4 flex-wrap gap-3"},tt={class:"flex items-center gap-2 flex-wrap"},et=["value"],st={class:"flex items-center gap-1 text-xs text-slate-500 cursor-pointer"},lt={class:"flex items-center gap-4 mb-3 text-xs text-slate-500"},nt={class:"text-slate-700"},at={class:"text-slate-700"},ot={class:"text-slate-700"},rt={class:"muted"},ut={class:"panel overflow-hidden"},it={id:"logBody",style:{"max-height":"calc(100vh - 230px)","overflow-y":"auto"}},ct={key:0,class:"text-center text-slate-400 py-10"},dt={key:1,class:"text-center text-red-400 py-10"},vt={key:2,class:"text-center text-slate-400 py-10"},pt={class:"t"},mt={class:"app-name"},ft={key:0,class:"unreg",title:"该应用名未在 console 注册,快照已收到但不会写入统计库"},gt={key:1,class:"muted"},xt={class:"muted"},_t={class:"muted"},yt={class:"muted"},bt={key:0,class:"muted"},ht={class:"t"},wt={key:0,class:"late"},kt=G({__name:"statlog",setup(Ct){const{webApi:A}=Q(),{success:H,error:O}=W(),R={cn:"中国",us:"美国",ea:"东亚",sea:"东南亚",sa:"南亚",me:"中东",eu:"欧洲",ru:"俄罗斯",af:"非洲",sam:"南美",nam:"北美",oc:"大洋洲",br:"巴西",in:"印度"};function D(l){return l?R[l]||l:"-"}const c=i([]),_=i(!1),g=i(""),L=i("-"),N=i("-"),y=i(""),v=i(0),b=i(""),h=i(""),w=i(!1);let d=null;function p(l=0){const s=new Date(Date.now()+l*864e5),t=new Intl.DateTimeFormat("en-CA",{timeZone:"Asia/Shanghai",year:"numeric",month:"2-digit",day:"2-digit"}).format(s);return parseInt(t.replace(/-/g,""),10)}function k(l){const s=""+l;return s.length===8?s.slice(0,4)+"-"+s.slice(4,6)+"-"+s.slice(6,8):s}function C(l){if(!l)return"--";const s=new Date(l*1e3),t=r=>r<10?"0"+r:""+r;return t(s.getHours())+":"+t(s.getMinutes())+":"+t(s.getSeconds())}function S(l){return l?"0x"+(l>>>0).toString(16).toUpperCase():"全部"}const V=E(()=>[{value:p(0),label:"今天 "+k(p(0))},{value:p(-1),label:"昨天 "+k(p(-1))}]);function M(l){return l==="error"?{cls:"lv-error",txt:"解析失败"}:l==="warn"?{cls:"lv-warn",txt:"未落库"}:{cls:"lv-info",txt:"已落库"}}function j(l){return!!(l.snap_ts&&l.ts&&l.ts-l.snap_ts>120)}const T=E(()=>{const l=b.value,s=h.value.trim().toLowerCase();return c.value.filter(t=>!(l&&t.level!==l||s&&((t.app||"")+" "+(t.region||"")+" "+D(t.region)+" "+(t.product_id||"")+" "+S(t.product_id)+" "+(t.stat_day||"")).toLowerCase().indexOf(s)<0))});async function m(){_.value=!0,g.value="";try{const l=await A("getstatlogs",{day:v.value||0});c.value=l?.entries||[],L.value=l?.total!=null?l.total:c.value.length,N.value=c.value.length?C(c.value[0].ts):"--"}catch(l){g.value=l?.message||"网络异常"}finally{_.value=!1}}async function q(){const l=v.value||0,s=V.value.find(r=>r.value===l),t=s?s.label:""+l;if(window.confirm("确定清空「"+t+`」的接收流水吗?
只清除本核对面板的记录,不影响已落库的统计数据。 只清除本核对面板的记录,不影响已落库的统计数据。
清空后可重新触发埋点,观察是否正常进来。`))try{const r=await A("clearstatlogs",{day:l});H("已清空 "+(r&&r.cleared!=null?r.cleared:0)+" 条"),m()}catch(r){O("清空失败:"+(r?.message||"网络异常"))}}function z(){w.value?(d=X(m,15e3),y.value="· 每 15 秒自动刷新"):(d&&clearInterval(d),d=null,y.value="")}return K(()=>{v.value=p(0),m()}),P(()=>{d&&clearInterval(d)}),(l,s)=>(o(),a("div",null,[e("div",$,[s[6]||(s[6]=e("div",null,[e("h2",{class:"text-lg font-bold text-slate-700"},"统计日志"),e("p",{class:"text-xs text-slate-400 mt-0.5"},[u("console 从 NATS 收到的「当日统计快照」接收流水(最新在前,按接收时间分天存 Redis)。各业务部署每个同步周期/启动时/0点 推送一次当日绝对快照,console 收到后覆盖落库。用于核对每个部署是否在正常汇报;带 "),e("span",{class:"unreg"},"未注册"),u(" 的应用快照已收到但"),e("b",null,"不会落库"),u("(应用名需与 console 注册表完全一致)。")])],-1)),e("div",tt,[x(e("select",{"onUpdate:modelValue":s[0]||(s[0]=t=>v.value=t),class:"select select-bordered select-sm",onChange:m},[(o(!0),a(f,null,B(V.value,t=>(o(),a("option",{key:t.value,value:t.value},n(t.label),9,et))),128))],544),[[U,v.value,void 0,{number:!0}]]),x(e("select",{"onUpdate:modelValue":s[1]||(s[1]=t=>b.value=t),class:"select select-bordered select-sm"},[...s[4]||(s[4]=[e("option",{value:""},"全部级别",-1),e("option",{value:"info"},"已落库",-1),e("option",{value:"warn"},"未落库",-1),e("option",{value:"error"},"解析失败",-1)])],512),[[U,b.value]]),x(e("input",{"onUpdate:modelValue":s[2]||(s[2]=t=>h.value=t),class:"input input-bordered input-sm w-44",placeholder:"筛选 应用/区域/产品"},null,512),[[Y,h.value]]),e("label",st,[x(e("input",{"onUpdate:modelValue":s[3]||(s[3]=t=>w.value=t),type:"checkbox",class:"checkbox checkbox-xs",onChange:z},null,544),[[Z,w.value]]),s[5]||(s[5]=u(" 自动刷新 ",-1))]),e("button",{class:"btn btn-primary btn-sm text-white",onClick:m},"刷新"),e("button",{class:"btn btn-outline btn-error btn-sm",title:"清空本日核对流水(不影响已落库的统计数据),清空后可重新观察埋点是否正常进来",onClick:q},"清空本日")])]),e("div",lt,[e("span",null,[s[7]||(s[7]=u("该日保留 ",-1)),e("b",nt,n(L.value),1),s[8]||(s[8]=u(" 条",-1))]),e("span",null,[s[9]||(s[9]=u("当前显示 ",-1)),e("b",at,n(T.value.length),1),s[10]||(s[10]=u(" 条",-1))]),e("span",null,[s[11]||(s[11]=u("最近接收 ",-1)),e("b",ot,n(N.value),1)]),e("span",rt,n(y.value),1)]),e("div",ut,[s[12]||(s[12]=e("div",{id:"logHead"},[e("div",null,"接收时间"),e("div",null,"级别"),e("div",null,"应用 · 区域 · 产品"),e("div",null,"统计日"),e("div",null,"指标摘要 / 说明"),e("div",null,"快照时间")],-1)),e("div",it,[_.value?(o(),a("div",ct,"加载中...")):g.value?(o(),a("div",dt,"加载失败:"+n(g.value),1)):T.value.length?(o(!0),a(f,{key:3},B(T.value,(t,r)=>(o(),a("div",{key:r,class:"logrow"},[e("div",pt,n(C(t.ts)),1),e("div",null,[e("span",{class:F(["lv",M(t.level).cls])},n(M(t.level).txt),3)]),e("div",null,[t.app?(o(),a(f,{key:0},[e("span",mt,n(t.app),1),t.registered?I("",!0):(o(),a("span",ft,"未注册"))],64)):(o(),a("span",gt,"(无应用名)")),e("span",xt," · "+n(D(t.region)),1),e("span",_t," · "+n(S(t.product_id)),1)]),e("div",yt,n(t.stat_day?k(t.stat_day):"-"),1),e("div",null,[t.msg?(o(),a(f,{key:0},[e("span",{class:F(t.level==="error"?"text-red-600":"text-amber-600")},n(t.msg),3),t.summary?(o(),a("span",bt," · "+n(t.summary),1)):I("",!0)],64)):(o(),a(f,{key:1},[u(n(t.summary||"无增量"),1)],64))]),e("div",ht,[u(n(C(t.snap_ts)),1),j(t)?(o(),a("span",wt,"迟到"+n(t.ts-t.snap_ts)+"s",1)):I("",!0)])]))),128)):(o(),a("div",vt,n(c.value.length?"无匹配记录":"该日暂无接收记录"),1))])])]))}}),Dt=J(kt,[["__scopeId","data-v-742ee359"]]);export{Dt as default}; 清空后可重新触发埋点,观察是否正常进来。`))try{const r=await A("clearstatlogs",{day:l});H("已清空 "+(r&&r.cleared!=null?r.cleared:0)+" 条"),m()}catch(r){O("清空失败:"+(r?.message||"网络异常"))}}function z(){w.value?(d=X(m,15e3),y.value="· 每 15 秒自动刷新"):(d&&clearInterval(d),d=null,y.value="")}return K(()=>{v.value=p(0),m()}),P(()=>{d&&clearInterval(d)}),(l,s)=>(o(),a("div",null,[e("div",$,[s[6]||(s[6]=e("div",null,[e("h2",{class:"text-lg font-bold text-slate-700"},"统计日志"),e("p",{class:"text-xs text-slate-400 mt-0.5"},[u("console 从 NATS 收到的「当日统计快照」接收流水(最新在前,按接收时间分天存 Redis)。各业务部署每个同步周期/启动时/0点 推送一次当日绝对快照,console 收到后覆盖落库。用于核对每个部署是否在正常汇报;带 "),e("span",{class:"unreg"},"未注册"),u(" 的应用快照已收到但"),e("b",null,"不会落库"),u("(应用名需与 console 注册表完全一致)。")])],-1)),e("div",tt,[x(e("select",{"onUpdate:modelValue":s[0]||(s[0]=t=>v.value=t),class:"select select-bordered select-sm",onChange:m},[(o(!0),a(f,null,B(V.value,t=>(o(),a("option",{key:t.value,value:t.value},n(t.label),9,et))),128))],544),[[U,v.value,void 0,{number:!0}]]),x(e("select",{"onUpdate:modelValue":s[1]||(s[1]=t=>b.value=t),class:"select select-bordered select-sm"},[...s[4]||(s[4]=[e("option",{value:""},"全部级别",-1),e("option",{value:"info"},"已落库",-1),e("option",{value:"warn"},"未落库",-1),e("option",{value:"error"},"解析失败",-1)])],512),[[U,b.value]]),x(e("input",{"onUpdate:modelValue":s[2]||(s[2]=t=>h.value=t),class:"input input-bordered input-sm w-44",placeholder:"筛选 应用/区域/产品"},null,512),[[Y,h.value]]),e("label",st,[x(e("input",{"onUpdate:modelValue":s[3]||(s[3]=t=>w.value=t),type:"checkbox",class:"checkbox checkbox-xs",onChange:z},null,544),[[Z,w.value]]),s[5]||(s[5]=u(" 自动刷新 ",-1))]),e("button",{class:"btn btn-primary btn-sm text-white",onClick:m},"刷新"),e("button",{class:"btn btn-outline btn-error btn-sm",title:"清空本日核对流水(不影响已落库的统计数据),清空后可重新观察埋点是否正常进来",onClick:q},"清空本日")])]),e("div",lt,[e("span",null,[s[7]||(s[7]=u("该日保留 ",-1)),e("b",nt,n(L.value),1),s[8]||(s[8]=u(" 条",-1))]),e("span",null,[s[9]||(s[9]=u("当前显示 ",-1)),e("b",at,n(T.value.length),1),s[10]||(s[10]=u(" 条",-1))]),e("span",null,[s[11]||(s[11]=u("最近接收 ",-1)),e("b",ot,n(N.value),1)]),e("span",rt,n(y.value),1)]),e("div",ut,[s[12]||(s[12]=e("div",{id:"logHead"},[e("div",null,"接收时间"),e("div",null,"级别"),e("div",null,"应用 · 区域 · 产品"),e("div",null,"统计日"),e("div",null,"指标摘要 / 说明"),e("div",null,"快照时间")],-1)),e("div",it,[_.value?(o(),a("div",ct,"加载中...")):g.value?(o(),a("div",dt,"加载失败:"+n(g.value),1)):T.value.length?(o(!0),a(f,{key:3},B(T.value,(t,r)=>(o(),a("div",{key:r,class:"logrow"},[e("div",pt,n(C(t.ts)),1),e("div",null,[e("span",{class:F(["lv",M(t.level).cls])},n(M(t.level).txt),3)]),e("div",null,[t.app?(o(),a(f,{key:0},[e("span",mt,n(t.app),1),t.registered?I("",!0):(o(),a("span",ft,"未注册"))],64)):(o(),a("span",gt,"(无应用名)")),e("span",xt," · "+n(D(t.region)),1),e("span",_t," · "+n(S(t.product_id)),1)]),e("div",yt,n(t.stat_day?k(t.stat_day):"-"),1),e("div",null,[t.msg?(o(),a(f,{key:0},[e("span",{class:F(t.level==="error"?"text-red-600":"text-amber-600")},n(t.msg),3),t.summary?(o(),a("span",bt," · "+n(t.summary),1)):I("",!0)],64)):(o(),a(f,{key:1},[u(n(t.summary||"无增量"),1)],64))]),e("div",ht,[u(n(C(t.snap_ts)),1),j(t)?(o(),a("span",wt,"迟到"+n(t.ts-t.snap_ts)+"s",1)):I("",!0)])]))),128)):(o(),a("div",vt,n(c.value.length?"无匹配记录":"该日暂无接收记录"),1))])])]))}}),Dt=J(kt,[["__scopeId","data-v-742ee359"]]);export{Dt as default};

77
apps/admin/.output/server/chunks/build/calltranslate-qCADGfI8.mjs → apps/admin/.output/server/chunks/build/calltranslate-C6glzS4R.mjs

@ -1,5 +1,5 @@
import { defineComponent, ref, reactive, computed, useSSRContext } from 'vue'; import { defineComponent, ref, reactive, computed, useSSRContext } from 'vue';
import { ssrRenderAttrs, ssrRenderList, ssrRenderAttr, ssrIncludeBooleanAttr, ssrLooseContain, ssrLooseEqual, ssrInterpolate, ssrRenderStyle, ssrRenderClass } from 'vue/server-renderer'; import { ssrRenderAttrs, ssrRenderStyle, ssrRenderList, ssrRenderAttr, ssrIncludeBooleanAttr, ssrLooseContain, ssrLooseEqual, ssrInterpolate, ssrRenderClass } from 'vue/server-renderer';
import { u as useApi } from './useApi-B7CB0Cnn.mjs'; import { u as useApi } from './useApi-B7CB0Cnn.mjs';
import { u as useToast } from './useToast-BwtTR9dH.mjs'; import { u as useToast } from './useToast-BwtTR9dH.mjs';
import { _ as _export_sfc } from './server.mjs'; import { _ as _export_sfc } from './server.mjs';
@ -68,6 +68,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
]; ];
useApi(); useApi();
useToast(); useToast();
const backendReady = ref(true);
const allSvcs = ref([]); const allSvcs = ref([]);
const pairs = ref([]); const pairs = ref([]);
const curRegion = ref(REGIONS.length ? REGIONS[0].value : 1); const curRegion = ref(REGIONS.length ? REGIONS[0].value : 1);
@ -99,96 +100,102 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
const syncTargets = ref([]); const syncTargets = ref([]);
const syncRegions = computed(() => REGIONS.filter((r) => r.value !== curRegion.value)); const syncRegions = computed(() => REGIONS.filter((r) => r.value !== curRegion.value));
return (_ctx, _push, _parent, _attrs) => { return (_ctx, _push, _parent, _attrs) => {
_push(`<div${ssrRenderAttrs(_attrs)} data-v-23837fd5><div class="flex items-center justify-between mb-5" data-v-23837fd5><div data-v-23837fd5><h2 class="text-lg font-semibold text-slate-800" data-v-23837fd5>通话翻译配置</h2><p class="text-xs text-slate-400 mt-1" data-v-23837fd5>按区域和语言对配置翻译服务。支持三段式(ASR→MT→TTS)和端到端 AST 两种模式。</p></div><div class="flex items-center gap-3" data-v-23837fd5><span class="text-sm text-slate-500" data-v-23837fd5>区域</span><select class="select select-bordered select-sm" data-v-23837fd5><!--[-->`); _push(`<div${ssrRenderAttrs(_attrs)} data-v-51f11136>`);
if (!backendReady.value) {
_push(`<div class="mb-4 rounded-lg px-4 py-3 text-sm" style="${ssrRenderStyle({ "background": "#fffbeb", "border": "1px solid #fde68a", "color": "#92400e" })}" data-v-51f11136> ⚠ 「通话翻译配置」的后端接口尚未迁移到当前 console 服务,功能暂不可用。 </div>`);
} else {
_push(`<!---->`);
}
_push(`<div class="flex items-center justify-between mb-5" data-v-51f11136><div data-v-51f11136><h2 class="text-lg font-semibold text-slate-800" data-v-51f11136>通话翻译配置</h2><p class="text-xs text-slate-400 mt-1" data-v-51f11136>按区域和语言对配置翻译服务。支持三段式(ASR→MT→TTS)和端到端 AST 两种模式。</p></div><div class="flex items-center gap-3" data-v-51f11136><span class="text-sm text-slate-500" data-v-51f11136>区域</span><select class="select select-bordered select-sm" data-v-51f11136><!--[-->`);
ssrRenderList(REGIONS, (r) => { ssrRenderList(REGIONS, (r) => {
_push(`<option${ssrRenderAttr("value", r.value)} data-v-23837fd5${ssrIncludeBooleanAttr(Array.isArray(curRegion.value) ? ssrLooseContain(curRegion.value, r.value) : ssrLooseEqual(curRegion.value, r.value)) ? " selected" : ""}>${ssrInterpolate(r.label)}</option>`); _push(`<option${ssrRenderAttr("value", r.value)} data-v-51f11136${ssrIncludeBooleanAttr(Array.isArray(curRegion.value) ? ssrLooseContain(curRegion.value, r.value) : ssrLooseEqual(curRegion.value, r.value)) ? " selected" : ""}>${ssrInterpolate(r.label)}</option>`);
}); });
_push(`<!--]--></select><button class="btn btn-primary btn-sm text-white" data-v-23837fd5>+ 新增语言对</button></div></div><div class="editor-panel" style="${ssrRenderStyle(editorOpen.value ? null : { display: "none" })}" data-v-23837fd5><div class="flex items-center justify-between mb-4" data-v-23837fd5><h3 class="font-semibold text-slate-800 text-sm" data-v-23837fd5>${ssrInterpolate(editingPair.value ? "编辑语言对" : "新增语言对")}</h3><button class="btn btn-ghost btn-xs" data-v-23837fd5>✕ 关闭</button></div><div class="grid grid-cols-3 gap-4 mb-4" data-v-23837fd5><div class="form-control" data-v-23837fd5><label class="label py-1" data-v-23837fd5><span class="label-text text-xs" data-v-23837fd5>源语言 *</span></label><select class="select select-bordered select-sm" data-v-23837fd5><!--[-->`); _push(`<!--]--></select><button class="btn btn-primary btn-sm text-white" data-v-51f11136>+ 新增语言对</button></div></div><div class="editor-panel" style="${ssrRenderStyle(editorOpen.value ? null : { display: "none" })}" data-v-51f11136><div class="flex items-center justify-between mb-4" data-v-51f11136><h3 class="font-semibold text-slate-800 text-sm" data-v-51f11136>${ssrInterpolate(editingPair.value ? "编辑语言对" : "新增语言对")}</h3><button class="btn btn-ghost btn-xs" data-v-51f11136>✕ 关闭</button></div><div class="grid grid-cols-3 gap-4 mb-4" data-v-51f11136><div class="form-control" data-v-51f11136><label class="label py-1" data-v-51f11136><span class="label-text text-xs" data-v-51f11136>源语言 *</span></label><select class="select select-bordered select-sm" data-v-51f11136><!--[-->`);
ssrRenderList(LANGS, (l) => { ssrRenderList(LANGS, (l) => {
_push(`<option${ssrRenderAttr("value", l.c)} data-v-23837fd5${ssrIncludeBooleanAttr(Array.isArray(ed.src) ? ssrLooseContain(ed.src, l.c) : ssrLooseEqual(ed.src, l.c)) ? " selected" : ""}>${ssrInterpolate(l.n)}</option>`); _push(`<option${ssrRenderAttr("value", l.c)} data-v-51f11136${ssrIncludeBooleanAttr(Array.isArray(ed.src) ? ssrLooseContain(ed.src, l.c) : ssrLooseEqual(ed.src, l.c)) ? " selected" : ""}>${ssrInterpolate(l.n)}</option>`);
}); });
_push(`<!--]--></select></div><div class="form-control" data-v-23837fd5><label class="label py-1" data-v-23837fd5><span class="label-text text-xs" data-v-23837fd5>目标语言 *</span></label><select class="select select-bordered select-sm" data-v-23837fd5><!--[-->`); _push(`<!--]--></select></div><div class="form-control" data-v-51f11136><label class="label py-1" data-v-51f11136><span class="label-text text-xs" data-v-51f11136>目标语言 *</span></label><select class="select select-bordered select-sm" data-v-51f11136><!--[-->`);
ssrRenderList(LANGS, (l) => { ssrRenderList(LANGS, (l) => {
_push(`<option${ssrRenderAttr("value", l.c)} data-v-23837fd5${ssrIncludeBooleanAttr(Array.isArray(ed.dst) ? ssrLooseContain(ed.dst, l.c) : ssrLooseEqual(ed.dst, l.c)) ? " selected" : ""}>${ssrInterpolate(l.n)}</option>`); _push(`<option${ssrRenderAttr("value", l.c)} data-v-51f11136${ssrIncludeBooleanAttr(Array.isArray(ed.dst) ? ssrLooseContain(ed.dst, l.c) : ssrLooseEqual(ed.dst, l.c)) ? " selected" : ""}>${ssrInterpolate(l.n)}</option>`);
}); });
_push(`<!--]--></select></div><div class="form-control" data-v-23837fd5><label class="label py-1" data-v-23837fd5><span class="label-text text-xs" data-v-23837fd5>双向</span></label><input${ssrIncludeBooleanAttr(Array.isArray(ed.bidir) ? ssrLooseContain(ed.bidir, null) : ed.bidir) ? " checked" : ""} type="checkbox" class="toggle toggle-primary mt-1" data-v-23837fd5></div></div><div class="flex gap-3 mb-4" data-v-23837fd5><div class="${ssrRenderClass([{ on: ed.mode === 0 }, "mtab"])}" data-v-23837fd5><div data-v-23837fd5><div class="font-bold text-sm" data-v-23837fd5>🧩 三段式拼接</div><div class="text-xs text-slate-400 mt-0.5" data-v-23837fd5>ASR → MT → TTS</div></div></div><div class="${ssrRenderClass([{ on: ed.mode === 1 }, "mtab"])}" data-v-23837fd5><div data-v-23837fd5><div class="font-bold text-sm" data-v-23837fd5>⚡ 端到端 AST</div><div class="text-xs text-slate-400 mt-0.5" data-v-23837fd5>单服务直接完成语音翻译</div></div></div></div><div data-v-23837fd5>`); _push(`<!--]--></select></div><div class="form-control" data-v-51f11136><label class="label py-1" data-v-51f11136><span class="label-text text-xs" data-v-51f11136>双向</span></label><input${ssrIncludeBooleanAttr(Array.isArray(ed.bidir) ? ssrLooseContain(ed.bidir, null) : ed.bidir) ? " checked" : ""} type="checkbox" class="toggle toggle-primary mt-1" data-v-51f11136></div></div><div class="flex gap-3 mb-4" data-v-51f11136><div class="${ssrRenderClass([{ on: ed.mode === 0 }, "mtab"])}" data-v-51f11136><div data-v-51f11136><div class="font-bold text-sm" data-v-51f11136>🧩 三段式拼接</div><div class="text-xs text-slate-400 mt-0.5" data-v-51f11136>ASR → MT → TTS</div></div></div><div class="${ssrRenderClass([{ on: ed.mode === 1 }, "mtab"])}" data-v-51f11136><div data-v-51f11136><div class="font-bold text-sm" data-v-51f11136>⚡ 端到端 AST</div><div class="text-xs text-slate-400 mt-0.5" data-v-51f11136>单服务直接完成语音翻译</div></div></div></div><div data-v-51f11136>`);
if (ed.mode === 0) { if (ed.mode === 0) {
_push(`<div class="grid grid-cols-3 gap-4" data-v-23837fd5><div class="form-control" data-v-23837fd5><label class="label py-1" data-v-23837fd5><span class="label-text text-xs" data-v-23837fd5>语音识别(ASR)</span></label><select class="select select-bordered select-sm" data-v-23837fd5>`); _push(`<div class="grid grid-cols-3 gap-4" data-v-51f11136><div class="form-control" data-v-51f11136><label class="label py-1" data-v-51f11136><span class="label-text text-xs" data-v-51f11136>语音识别(ASR)</span></label><select class="select select-bordered select-sm" data-v-51f11136>`);
if (!svcsByCat(SCAT_STT).length) { if (!svcsByCat(SCAT_STT).length) {
_push(`<option value="" data-v-23837fd5${ssrIncludeBooleanAttr(Array.isArray(ed.asr) ? ssrLooseContain(ed.asr, "") : ssrLooseEqual(ed.asr, "")) ? " selected" : ""}>(无可用服务)</option>`); _push(`<option value="" data-v-51f11136${ssrIncludeBooleanAttr(Array.isArray(ed.asr) ? ssrLooseContain(ed.asr, "") : ssrLooseEqual(ed.asr, "")) ? " selected" : ""}>(无可用服务)</option>`);
} else { } else {
_push(`<!---->`); _push(`<!---->`);
} }
_push(`<!--[-->`); _push(`<!--[-->`);
ssrRenderList(svcsByCat(SCAT_STT), (s) => { ssrRenderList(svcsByCat(SCAT_STT), (s) => {
_push(`<option${ssrRenderAttr("value", s.id)} data-v-23837fd5${ssrIncludeBooleanAttr(Array.isArray(ed.asr) ? ssrLooseContain(ed.asr, s.id) : ssrLooseEqual(ed.asr, s.id)) ? " selected" : ""}>${ssrInterpolate(s.name)}</option>`); _push(`<option${ssrRenderAttr("value", s.id)} data-v-51f11136${ssrIncludeBooleanAttr(Array.isArray(ed.asr) ? ssrLooseContain(ed.asr, s.id) : ssrLooseEqual(ed.asr, s.id)) ? " selected" : ""}>${ssrInterpolate(s.name)}</option>`);
}); });
_push(`<!--]--></select></div><div class="form-control" data-v-23837fd5><label class="label py-1" data-v-23837fd5><span class="label-text text-xs" data-v-23837fd5>机器翻译(MT)</span></label><select class="select select-bordered select-sm" data-v-23837fd5>`); _push(`<!--]--></select></div><div class="form-control" data-v-51f11136><label class="label py-1" data-v-51f11136><span class="label-text text-xs" data-v-51f11136>机器翻译(MT)</span></label><select class="select select-bordered select-sm" data-v-51f11136>`);
if (!svcsByCat(SCAT_MT).length) { if (!svcsByCat(SCAT_MT).length) {
_push(`<option value="" data-v-23837fd5${ssrIncludeBooleanAttr(Array.isArray(ed.mt) ? ssrLooseContain(ed.mt, "") : ssrLooseEqual(ed.mt, "")) ? " selected" : ""}>(无可用服务)</option>`); _push(`<option value="" data-v-51f11136${ssrIncludeBooleanAttr(Array.isArray(ed.mt) ? ssrLooseContain(ed.mt, "") : ssrLooseEqual(ed.mt, "")) ? " selected" : ""}>(无可用服务)</option>`);
} else { } else {
_push(`<!---->`); _push(`<!---->`);
} }
_push(`<!--[-->`); _push(`<!--[-->`);
ssrRenderList(svcsByCat(SCAT_MT), (s) => { ssrRenderList(svcsByCat(SCAT_MT), (s) => {
_push(`<option${ssrRenderAttr("value", s.id)} data-v-23837fd5${ssrIncludeBooleanAttr(Array.isArray(ed.mt) ? ssrLooseContain(ed.mt, s.id) : ssrLooseEqual(ed.mt, s.id)) ? " selected" : ""}>${ssrInterpolate(s.name)}</option>`); _push(`<option${ssrRenderAttr("value", s.id)} data-v-51f11136${ssrIncludeBooleanAttr(Array.isArray(ed.mt) ? ssrLooseContain(ed.mt, s.id) : ssrLooseEqual(ed.mt, s.id)) ? " selected" : ""}>${ssrInterpolate(s.name)}</option>`);
}); });
_push(`<!--]--></select></div><div class="form-control" data-v-23837fd5><label class="label py-1" data-v-23837fd5><span class="label-text text-xs" data-v-23837fd5>语音合成(TTS)</span></label><select class="select select-bordered select-sm" data-v-23837fd5>`); _push(`<!--]--></select></div><div class="form-control" data-v-51f11136><label class="label py-1" data-v-51f11136><span class="label-text text-xs" data-v-51f11136>语音合成(TTS)</span></label><select class="select select-bordered select-sm" data-v-51f11136>`);
if (!svcsByCat(SCAT_TTS).length) { if (!svcsByCat(SCAT_TTS).length) {
_push(`<option value="" data-v-23837fd5${ssrIncludeBooleanAttr(Array.isArray(ed.tts) ? ssrLooseContain(ed.tts, "") : ssrLooseEqual(ed.tts, "")) ? " selected" : ""}>(无可用服务)</option>`); _push(`<option value="" data-v-51f11136${ssrIncludeBooleanAttr(Array.isArray(ed.tts) ? ssrLooseContain(ed.tts, "") : ssrLooseEqual(ed.tts, "")) ? " selected" : ""}>(无可用服务)</option>`);
} else { } else {
_push(`<!---->`); _push(`<!---->`);
} }
_push(`<!--[-->`); _push(`<!--[-->`);
ssrRenderList(svcsByCat(SCAT_TTS), (s) => { ssrRenderList(svcsByCat(SCAT_TTS), (s) => {
_push(`<option${ssrRenderAttr("value", s.id)} data-v-23837fd5${ssrIncludeBooleanAttr(Array.isArray(ed.tts) ? ssrLooseContain(ed.tts, s.id) : ssrLooseEqual(ed.tts, s.id)) ? " selected" : ""}>${ssrInterpolate(s.name)}</option>`); _push(`<option${ssrRenderAttr("value", s.id)} data-v-51f11136${ssrIncludeBooleanAttr(Array.isArray(ed.tts) ? ssrLooseContain(ed.tts, s.id) : ssrLooseEqual(ed.tts, s.id)) ? " selected" : ""}>${ssrInterpolate(s.name)}</option>`);
}); });
_push(`<!--]--></select></div></div>`); _push(`<!--]--></select></div></div>`);
} else { } else {
_push(`<div class="form-control max-w-xs" data-v-23837fd5><label class="label py-1" data-v-23837fd5><span class="label-text text-xs" data-v-23837fd5>端到端语音翻译服务(AST)</span></label><select class="select select-bordered select-sm" data-v-23837fd5>`); _push(`<div class="form-control max-w-xs" data-v-51f11136><label class="label py-1" data-v-51f11136><span class="label-text text-xs" data-v-51f11136>端到端语音翻译服务(AST)</span></label><select class="select select-bordered select-sm" data-v-51f11136>`);
if (!svcsByCat(SCAT_AST).length) { if (!svcsByCat(SCAT_AST).length) {
_push(`<option value="" data-v-23837fd5${ssrIncludeBooleanAttr(Array.isArray(ed.ast) ? ssrLooseContain(ed.ast, "") : ssrLooseEqual(ed.ast, "")) ? " selected" : ""}>(无可用服务)</option>`); _push(`<option value="" data-v-51f11136${ssrIncludeBooleanAttr(Array.isArray(ed.ast) ? ssrLooseContain(ed.ast, "") : ssrLooseEqual(ed.ast, "")) ? " selected" : ""}>(无可用服务)</option>`);
} else { } else {
_push(`<!---->`); _push(`<!---->`);
} }
_push(`<!--[-->`); _push(`<!--[-->`);
ssrRenderList(svcsByCat(SCAT_AST), (s) => { ssrRenderList(svcsByCat(SCAT_AST), (s) => {
_push(`<option${ssrRenderAttr("value", s.id)} data-v-23837fd5${ssrIncludeBooleanAttr(Array.isArray(ed.ast) ? ssrLooseContain(ed.ast, s.id) : ssrLooseEqual(ed.ast, s.id)) ? " selected" : ""}>${ssrInterpolate(s.name)}</option>`); _push(`<option${ssrRenderAttr("value", s.id)} data-v-51f11136${ssrIncludeBooleanAttr(Array.isArray(ed.ast) ? ssrLooseContain(ed.ast, s.id) : ssrLooseEqual(ed.ast, s.id)) ? " selected" : ""}>${ssrInterpolate(s.name)}</option>`);
}); });
_push(`<!--]--></select></div>`); _push(`<!--]--></select></div>`);
} }
_push(`</div><div class="flex items-center justify-between pt-4 border-t border-slate-100 mt-4" data-v-23837fd5><label class="flex items-center gap-2 text-sm" data-v-23837fd5><input${ssrIncludeBooleanAttr(Array.isArray(ed.enable) ? ssrLooseContain(ed.enable, null) : ed.enable) ? " checked" : ""} type="checkbox" class="checkbox checkbox-sm checkbox-primary" data-v-23837fd5> 启用 </label><div class="flex gap-2" data-v-23837fd5><button class="btn btn-ghost btn-sm" data-v-23837fd5>取消</button><button class="btn btn-primary btn-sm text-white" data-v-23837fd5>保存</button></div></div></div><div class="grid grid-cols-1 gap-4" style="${ssrRenderStyle({ "grid-template-columns": "repeat(auto-fill,minmax(360px,1fr))" })}" data-v-23837fd5>`); _push(`</div><div class="flex items-center justify-between pt-4 border-t border-slate-100 mt-4" data-v-51f11136><label class="flex items-center gap-2 text-sm" data-v-51f11136><input${ssrIncludeBooleanAttr(Array.isArray(ed.enable) ? ssrLooseContain(ed.enable, null) : ed.enable) ? " checked" : ""} type="checkbox" class="checkbox checkbox-sm checkbox-primary" data-v-51f11136> 启用 </label><div class="flex gap-2" data-v-51f11136><button class="btn btn-ghost btn-sm" data-v-51f11136>取消</button><button class="btn btn-primary btn-sm text-white" data-v-51f11136>保存</button></div></div></div><div class="grid grid-cols-1 gap-4" style="${ssrRenderStyle({ "grid-template-columns": "repeat(auto-fill,minmax(360px,1fr))" })}" data-v-51f11136>`);
if (!pairs.value.length) { if (!pairs.value.length) {
_push(`<div class="col-span-full text-center py-20 text-slate-300" data-v-23837fd5><div class="text-5xl mb-3" data-v-23837fd5>🌐</div><p class="text-sm" data-v-23837fd5>当前区域暂无语言对配置</p></div>`); _push(`<div class="col-span-full text-center py-20 text-slate-300" data-v-51f11136><div class="text-5xl mb-3" data-v-51f11136>🌐</div><p class="text-sm" data-v-51f11136>当前区域暂无语言对配置</p></div>`);
} else { } else {
_push(`<!---->`); _push(`<!---->`);
} }
_push(`<!--[-->`); _push(`<!--[-->`);
ssrRenderList(pairs.value, (p) => { ssrRenderList(pairs.value, (p) => {
_push(`<div class="pair-card" data-v-23837fd5><div class="flex items-center justify-between" data-v-23837fd5><div class="flex items-center gap-2" data-v-23837fd5><span class="lang-badge" data-v-23837fd5>${ssrInterpolate(langName(p.src_lang))}</span><span class="text-slate-400 font-bold text-lg" data-v-23837fd5>${ssrInterpolate(p.bidir ? "⇄" : "→")}</span><span class="lang-badge" data-v-23837fd5>${ssrInterpolate(langName(p.dst_lang))}</span></div><div class="flex items-center gap-2" data-v-23837fd5>`); _push(`<div class="pair-card" data-v-51f11136><div class="flex items-center justify-between" data-v-51f11136><div class="flex items-center gap-2" data-v-51f11136><span class="lang-badge" data-v-51f11136>${ssrInterpolate(langName(p.src_lang))}</span><span class="text-slate-400 font-bold text-lg" data-v-51f11136>${ssrInterpolate(p.bidir ? "⇄" : "→")}</span><span class="lang-badge" data-v-51f11136>${ssrInterpolate(langName(p.dst_lang))}</span></div><div class="flex items-center gap-2" data-v-51f11136>`);
if (p.mode === 0) { if (p.mode === 0) {
_push(`<span class="mode-badge mode-pipeline" data-v-23837fd5>三段式拼接</span>`); _push(`<span class="mode-badge mode-pipeline" data-v-51f11136>三段式拼接</span>`);
} else { } else {
_push(`<span class="mode-badge mode-e2e" data-v-23837fd5>端到端 AST</span>`); _push(`<span class="mode-badge mode-e2e" data-v-51f11136>端到端 AST</span>`);
} }
if (p.enable) { if (p.enable) {
_push(`<span class="badge badge-success badge-xs" data-v-23837fd5>启用</span>`); _push(`<span class="badge badge-success badge-xs" data-v-51f11136>启用</span>`);
} else { } else {
_push(`<span class="badge badge-ghost badge-xs" data-v-23837fd5>停用</span>`); _push(`<span class="badge badge-ghost badge-xs" data-v-51f11136>停用</span>`);
} }
_push(`<button class="btn btn-ghost btn-xs text-error" data-v-23837fd5>删除</button></div></div>`); _push(`<button class="btn btn-ghost btn-xs text-error" data-v-51f11136>删除</button></div></div>`);
if (p.mode === 0) { if (p.mode === 0) {
_push(`<div class="flex flex-wrap items-center gap-2 mt-3" data-v-23837fd5><span class="svc-pill" style="${ssrRenderStyle({ "background": "#1664ff" })}" data-v-23837fd5>ASR: ${ssrInterpolate(svcName(p.asr_svc_id))}</span><span class="text-slate-300 text-sm" data-v-23837fd5>→</span><span class="svc-pill" style="${ssrRenderStyle({ "background": "#059669" })}" data-v-23837fd5>MT: ${ssrInterpolate(svcName(p.mt_svc_id))}</span><span class="text-slate-300 text-sm" data-v-23837fd5>→</span><span class="svc-pill" style="${ssrRenderStyle({ "background": "#7c3aed" })}" data-v-23837fd5>TTS: ${ssrInterpolate(svcName(p.tts_svc_id))}</span></div>`); _push(`<div class="flex flex-wrap items-center gap-2 mt-3" data-v-51f11136><span class="svc-pill" style="${ssrRenderStyle({ "background": "#1664ff" })}" data-v-51f11136>ASR: ${ssrInterpolate(svcName(p.asr_svc_id))}</span><span class="text-slate-300 text-sm" data-v-51f11136>→</span><span class="svc-pill" style="${ssrRenderStyle({ "background": "#059669" })}" data-v-51f11136>MT: ${ssrInterpolate(svcName(p.mt_svc_id))}</span><span class="text-slate-300 text-sm" data-v-51f11136>→</span><span class="svc-pill" style="${ssrRenderStyle({ "background": "#7c3aed" })}" data-v-51f11136>TTS: ${ssrInterpolate(svcName(p.tts_svc_id))}</span></div>`);
} else { } else {
_push(`<div class="flex items-center gap-2 mt-3" data-v-23837fd5><span class="svc-pill" style="${ssrRenderStyle({ "background": "#f97316" })}" data-v-23837fd5>AST: ${ssrInterpolate(svcName(p.ast_svc_id))}</span></div>`); _push(`<div class="flex items-center gap-2 mt-3" data-v-51f11136><span class="svc-pill" style="${ssrRenderStyle({ "background": "#f97316" })}" data-v-51f11136>AST: ${ssrInterpolate(svcName(p.ast_svc_id))}</span></div>`);
} }
_push(`</div>`); _push(`</div>`);
}); });
_push(`<!--]--></div><div class="sync-overlay" style="${ssrRenderStyle(syncOpen.value ? null : { display: "none" })}" data-v-23837fd5><div class="sync-box" data-v-23837fd5><div class="flex items-start gap-3 mb-4" data-v-23837fd5><div style="${ssrRenderStyle({ "width": "42px", "height": "42px", "background": "linear-gradient(135deg,#4f46e5,#7c3aed)", "border-radius": "13px", "display": "flex", "align-items": "center", "justify-content": "center", "flex-shrink": "0" })}" data-v-23837fd5><svg style="${ssrRenderStyle({ "width": "20px", "height": "20px", "color": "#fff" })}" fill="none" viewBox="0 0 24 24" stroke="currentColor" data-v-23837fd5><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z" data-v-23837fd5></path></svg></div><div data-v-23837fd5><h3 class="text-base font-semibold text-slate-800" data-v-23837fd5>同步到其他区域</h3><p class="text-xs text-slate-400 mt-1" data-v-23837fd5>${ssrInterpolate(syncDesc.value)}</p></div></div><div class="text-xs px-3 py-2 rounded-lg mb-3" style="${ssrRenderStyle({ "background": "#f0fdf4", "border": "1px solid #bbf7d0", "color": "#15803d" })}" data-v-23837fd5> ✦ 同步内容:服务组合(模式 + 各段服务)将被复制到目标区域。 </div><div class="flex items-center justify-between mb-1" data-v-23837fd5><span class="text-xs font-semibold text-slate-500" data-v-23837fd5>选择目标区域</span><div class="flex gap-2" data-v-23837fd5><button class="btn btn-ghost btn-xs" data-v-23837fd5>全选</button><button class="btn btn-ghost btn-xs" data-v-23837fd5>清空</button></div></div><div class="sync-region-grid" data-v-23837fd5><!--[-->`); _push(`<!--]--></div><div class="sync-overlay" style="${ssrRenderStyle(syncOpen.value ? null : { display: "none" })}" data-v-51f11136><div class="sync-box" data-v-51f11136><div class="flex items-start gap-3 mb-4" data-v-51f11136><div style="${ssrRenderStyle({ "width": "42px", "height": "42px", "background": "linear-gradient(135deg,#4f46e5,#7c3aed)", "border-radius": "13px", "display": "flex", "align-items": "center", "justify-content": "center", "flex-shrink": "0" })}" data-v-51f11136><svg style="${ssrRenderStyle({ "width": "20px", "height": "20px", "color": "#fff" })}" fill="none" viewBox="0 0 24 24" stroke="currentColor" data-v-51f11136><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z" data-v-51f11136></path></svg></div><div data-v-51f11136><h3 class="text-base font-semibold text-slate-800" data-v-51f11136>同步到其他区域</h3><p class="text-xs text-slate-400 mt-1" data-v-51f11136>${ssrInterpolate(syncDesc.value)}</p></div></div><div class="text-xs px-3 py-2 rounded-lg mb-3" style="${ssrRenderStyle({ "background": "#f0fdf4", "border": "1px solid #bbf7d0", "color": "#15803d" })}" data-v-51f11136> ✦ 同步内容:服务组合(模式 + 各段服务)将被复制到目标区域。 </div><div class="flex items-center justify-between mb-1" data-v-51f11136><span class="text-xs font-semibold text-slate-500" data-v-51f11136>选择目标区域</span><div class="flex gap-2" data-v-51f11136><button class="btn btn-ghost btn-xs" data-v-51f11136>全选</button><button class="btn btn-ghost btn-xs" data-v-51f11136>清空</button></div></div><div class="sync-region-grid" data-v-51f11136><!--[-->`);
ssrRenderList(syncRegions.value, (r) => { ssrRenderList(syncRegions.value, (r) => {
_push(`<label class="${ssrRenderClass([{ checked: syncTargets.value.includes(r.value) }, "sync-region-item"])}" data-v-23837fd5><input type="checkbox" class="checkbox checkbox-xs checkbox-primary"${ssrIncludeBooleanAttr(syncTargets.value.includes(r.value)) ? " checked" : ""} data-v-23837fd5><span data-v-23837fd5>${ssrInterpolate(r.label)}</span></label>`); _push(`<label class="${ssrRenderClass([{ checked: syncTargets.value.includes(r.value) }, "sync-region-item"])}" data-v-51f11136><input type="checkbox" class="checkbox checkbox-xs checkbox-primary"${ssrIncludeBooleanAttr(syncTargets.value.includes(r.value)) ? " checked" : ""} data-v-51f11136><span data-v-51f11136>${ssrInterpolate(r.label)}</span></label>`);
}); });
_push(`<!--]--></div><p class="text-[11px] text-slate-400 mb-5" data-v-23837fd5>⚠ 目标区域相同语言对已存在则覆盖,否则新建。</p><div class="flex gap-3 justify-end" data-v-23837fd5><button class="btn btn-ghost" data-v-23837fd5>仅保存当前区域</button><button class="btn btn-primary text-white" data-v-23837fd5>保存并同步</button></div></div></div></div>`); _push(`<!--]--></div><p class="text-[11px] text-slate-400 mb-5" data-v-51f11136>⚠ 目标区域相同语言对已存在则覆盖,否则新建。</p><div class="flex gap-3 justify-end" data-v-51f11136><button class="btn btn-ghost" data-v-51f11136>仅保存当前区域</button><button class="btn btn-primary text-white" data-v-51f11136>保存并同步</button></div></div></div></div>`);
}; };
} }
}); });
@ -198,7 +205,7 @@ _sfc_main.setup = (props, ctx) => {
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/calltranslate.vue"); (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/calltranslate.vue");
return _sfc_setup ? _sfc_setup(props, ctx) : void 0; return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
}; };
const calltranslate = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-23837fd5"]]); const calltranslate = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-51f11136"]]);
export { calltranslate as default }; export { calltranslate as default };
//# sourceMappingURL=calltranslate-qCADGfI8.mjs.map //# sourceMappingURL=calltranslate-C6glzS4R.mjs.map

1
apps/admin/.output/server/chunks/build/calltranslate-C6glzS4R.mjs.map

@ -0,0 +1 @@
{"version":3,"file":"calltranslate-C6glzS4R.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-C6glzS4R.js"],"names":[],"mappings":"","x_google_ignoreList":[0]}

1
apps/admin/.output/server/chunks/build/calltranslate-qCADGfI8.mjs.map

@ -1 +0,0 @@
{"version":3,"file":"calltranslate-qCADGfI8.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-qCADGfI8.js"],"names":[],"mappings":"","x_google_ignoreList":[0]}

8
apps/admin/.output/server/chunks/build/calltranslate-styles.DWMho6ro.mjs

@ -1,8 +0,0 @@
const calltranslate_vue_vue_type_style_index_0_scoped_23837fd5_lang = ".pair-card[data-v-23837fd5]{background:#fff;border:1px solid #eef2f7;border-radius:14px;padding:16px;cursor:pointer;transition:all .15s}.pair-card[data-v-23837fd5]:hover{border-color:#c7d2fe;box-shadow:0 4px 14px #6366f114}.lang-badge[data-v-23837fd5]{font-size:12px;font-weight:700;padding:3px 10px;border-radius:8px;background:#eef2ff;color:#4338ca}.svc-pill[data-v-23837fd5]{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:600;padding:3px 9px;border-radius:8px;color:#fff}.mode-badge[data-v-23837fd5]{font-size:10px;font-weight:700;padding:2px 8px;border-radius:6px}.mode-pipeline[data-v-23837fd5]{background:#dbeafe;color:#1e40af}.mode-e2e[data-v-23837fd5]{background:#fff7ed;color:#c2410c}.editor-panel[data-v-23837fd5]{background:#fff;border-radius:16px;border:1px solid #c7d2fe;box-shadow:0 8px 32px #6366f11a;padding:22px;margin-bottom:16px}.mtab[data-v-23837fd5]{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:10px;border:2px solid transparent;cursor:pointer;transition:all .15s;flex:1}.mtab.on[data-v-23837fd5]{border-color:#6366f1;background:linear-gradient(135deg,#eef2ff,#f5f3ff)}.sync-overlay[data-v-23837fd5]{position:fixed;inset:0;background:#0f172a73;z-index:100;display:flex;align-items:center;justify-content:center;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.sync-box[data-v-23837fd5]{background:#fff;border-radius:20px;padding:28px;width:520px;max-width:95vw;box-shadow:0 24px 80px #0000002e}.sync-region-grid[data-v-23837fd5]{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:14px 0}.sync-region-item[data-v-23837fd5]{display:flex;align-items:center;gap:7px;padding:8px 10px;border-radius:9px;border:1.5px solid #e2e8f0;cursor:pointer;transition:all .15s;font-size:13px;font-weight:500;color:#475569}.sync-region-item[data-v-23837fd5]:hover{border-color:#c7d2fe;background:#f5f3ff}.sync-region-item.checked[data-v-23837fd5]{border-color:#6366f1;background:#eef2ff;color:#4338ca}";
const calltranslateStyles_DWMho6ro = [
calltranslate_vue_vue_type_style_index_0_scoped_23837fd5_lang
];
export { calltranslateStyles_DWMho6ro as default };
//# sourceMappingURL=calltranslate-styles.DWMho6ro.mjs.map

1
apps/admin/.output/server/chunks/build/calltranslate-styles.DWMho6ro.mjs.map

@ -1 +0,0 @@
{"version":3,"file":"calltranslate-styles.DWMho6ro.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-styles-1.mjs-Dn-xJ4XY.js","../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-styles.DWMho6ro.mjs"],"names":["style_0"],"mappings":"","x_google_ignoreList":[0,1]}

8
apps/admin/.output/server/chunks/build/calltranslate-styles.hpAJUqsK.mjs

@ -0,0 +1,8 @@
const calltranslate_vue_vue_type_style_index_0_scoped_51f11136_lang = ".pair-card[data-v-51f11136]{background:#fff;border:1px solid #eef2f7;border-radius:14px;padding:16px;cursor:pointer;transition:all .15s}.pair-card[data-v-51f11136]:hover{border-color:#c7d2fe;box-shadow:0 4px 14px #6366f114}.lang-badge[data-v-51f11136]{font-size:12px;font-weight:700;padding:3px 10px;border-radius:8px;background:#eef2ff;color:#4338ca}.svc-pill[data-v-51f11136]{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:600;padding:3px 9px;border-radius:8px;color:#fff}.mode-badge[data-v-51f11136]{font-size:10px;font-weight:700;padding:2px 8px;border-radius:6px}.mode-pipeline[data-v-51f11136]{background:#dbeafe;color:#1e40af}.mode-e2e[data-v-51f11136]{background:#fff7ed;color:#c2410c}.editor-panel[data-v-51f11136]{background:#fff;border-radius:16px;border:1px solid #c7d2fe;box-shadow:0 8px 32px #6366f11a;padding:22px;margin-bottom:16px}.mtab[data-v-51f11136]{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:10px;border:2px solid transparent;cursor:pointer;transition:all .15s;flex:1}.mtab.on[data-v-51f11136]{border-color:#6366f1;background:linear-gradient(135deg,#eef2ff,#f5f3ff)}.sync-overlay[data-v-51f11136]{position:fixed;inset:0;background:#0f172a73;z-index:100;display:flex;align-items:center;justify-content:center;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.sync-box[data-v-51f11136]{background:#fff;border-radius:20px;padding:28px;width:520px;max-width:95vw;box-shadow:0 24px 80px #0000002e}.sync-region-grid[data-v-51f11136]{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:14px 0}.sync-region-item[data-v-51f11136]{display:flex;align-items:center;gap:7px;padding:8px 10px;border-radius:9px;border:1.5px solid #e2e8f0;cursor:pointer;transition:all .15s;font-size:13px;font-weight:500;color:#475569}.sync-region-item[data-v-51f11136]:hover{border-color:#c7d2fe;background:#f5f3ff}.sync-region-item.checked[data-v-51f11136]{border-color:#6366f1;background:#eef2ff;color:#4338ca}";
const calltranslateStyles_hpAJUqsK = [
calltranslate_vue_vue_type_style_index_0_scoped_51f11136_lang
];
export { calltranslateStyles_hpAJUqsK as default };
//# sourceMappingURL=calltranslate-styles.hpAJUqsK.mjs.map

1
apps/admin/.output/server/chunks/build/calltranslate-styles.hpAJUqsK.mjs.map

@ -0,0 +1 @@
{"version":3,"file":"calltranslate-styles.hpAJUqsK.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-styles-1.mjs-DA2j2DKH.js","../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-styles.hpAJUqsK.mjs"],"names":["style_0"],"mappings":"","x_google_ignoreList":[0,1]}

2
apps/admin/.output/server/chunks/build/client.precomputed.mjs

File diff suppressed because one or more lines are too long

4
apps/admin/.output/server/chunks/build/server.mjs

@ -1951,7 +1951,7 @@ const _routes = [
name: "calltranslate", name: "calltranslate",
path: "/calltranslate", path: "/calltranslate",
meta: __nuxt_page_meta$c || {}, meta: __nuxt_page_meta$c || {},
component: () => import('./calltranslate-qCADGfI8.mjs') component: () => import('./calltranslate-C6glzS4R.mjs')
}, },
{ {
name: "code", name: "code",
@ -2005,7 +2005,7 @@ const _routes = [
name: "serviceconfig", name: "serviceconfig",
path: "/serviceconfig", path: "/serviceconfig",
meta: __nuxt_page_meta$3 || {}, meta: __nuxt_page_meta$3 || {},
component: () => import('./serviceconfig-qwLggDKS.mjs') component: () => import('./serviceconfig-BTX37VDF.mjs')
}, },
{ {
name: "statlog", name: "statlog",

205
apps/admin/.output/server/chunks/build/serviceconfig-BTX37VDF.mjs

@ -0,0 +1,205 @@
import { defineComponent, ref, reactive, computed, useSSRContext } from 'vue';
import { ssrRenderAttrs, ssrRenderStyle, ssrRenderAttr, ssrIncludeBooleanAttr, ssrLooseContain, ssrLooseEqual, ssrRenderList, ssrInterpolate, ssrRenderClass, ssrRenderDynamicModel } from 'vue/server-renderer';
import { u as useApi } from './useApi-B7CB0Cnn.mjs';
import { u as useToast } from './useToast-BwtTR9dH.mjs';
import { _ as _export_sfc } from './server.mjs';
import './auth-QFkCoU1C.mjs';
import 'pinia';
import '../nitro/nitro.mjs';
import 'node:http';
import 'node:https';
import 'node:events';
import 'node:buffer';
import 'node:fs';
import 'node:path';
import 'node:crypto';
import 'node:url';
import '../routes/renderer.mjs';
import 'vue-bundle-renderer/runtime';
import 'unhead/server';
import 'devalue';
import 'unhead/utils';
import 'perfect-debounce';
const _sfc_main = /* @__PURE__ */ defineComponent({
__name: "serviceconfig",
__ssrInlineRender: true,
setup(__props) {
const REGIONS = [
{ value: 1, label: "中国" },
{ value: 2, label: "美国" },
{ value: 3, label: "东亚" },
{ value: 4, label: "东南亚" },
{ value: 5, label: "南亚" },
{ value: 6, label: "中东" },
{ value: 7, label: "欧洲" },
{ value: 8, label: "俄罗斯" },
{ value: 9, label: "非洲" },
{ value: 10, label: "南美" },
{ value: 11, label: "北美" },
{ value: 12, label: "大洋洲" },
{ value: 13, label: "巴西" },
{ value: 14, label: "印度" }
];
const SCAT = [
{ v: 1, label: "STT 语音识别", short: "STT", color: "#0369a1", bg: "#dbeafe" },
{ v: 2, label: "TTS 语音合成", short: "TTS", color: "#7c3aed", bg: "#ede9fe" },
{ v: 3, label: "MT 机器翻译", short: "MT", color: "#059669", bg: "#dcfce7" },
{ v: 4, label: "AST 端到端", short: "AST", color: "#c2410c", bg: "#fff7ed" },
{ v: 5, label: "LLM 大语言", short: "LLM", color: "#b45309", bg: "#fef9c3" },
{ v: 6, label: "存储 OSS/COS", short: "存储", color: "#475569", bg: "#f1f5f9" }
];
useApi();
useToast();
function scatInfo(v) {
return SCAT.find((s) => s.v === v) || { short: "?", color: "#999", bg: "#eee", v: 0, label: "" };
}
function parseCats(s) {
return (s || "").split(",").map((x) => parseInt(x) || 0).filter((x) => x > 0);
}
function encCount(s) {
return (s.fields || []).filter((f) => f.encrypted).length;
}
const backendReady = ref(true);
const allSvcs = ref([]);
const curSvc = ref(null);
const curRegion = ref(0);
const detailMode = ref("empty");
const editForm = reactive({ id: "", name: "", description: "", enable: false });
const editCats = ref([]);
const editFields = ref([]);
const overrideFields = ref([]);
const regionLoading = ref(false);
const curRegionLabel = computed(() => {
const r = REGIONS.find((x) => x.value === curRegion.value);
return r ? r.label : "区域" + curRegion.value;
});
const syncVisible = ref(false);
ref(false);
const syncDesc = ref("");
const syncScopeNote = ref("");
const syncTargets = ref([]);
const syncRegionList = computed(() => REGIONS.filter((r) => r.value !== curRegion.value));
return (_ctx, _push, _parent, _attrs) => {
_push(`<div${ssrRenderAttrs(_attrs)} data-v-97419e3c>`);
if (!backendReady.value) {
_push(`<div class="mb-4 rounded-lg px-4 py-3 text-sm" style="${ssrRenderStyle({ "background": "#fffbeb", "border": "1px solid #fde68a", "color": "#92400e" })}" data-v-97419e3c> ⚠ 「依赖服务配置」的后端接口尚未迁移到当前 console 服务,功能暂不可用。 </div>`);
} else {
_push(`<!---->`);
}
_push(`<div class="flex items-center justify-between mb-5" data-v-97419e3c><div data-v-97419e3c><h2 class="text-lg font-semibold text-slate-800" data-v-97419e3c>依赖服务配置</h2><p class="text-xs text-slate-400 mt-1" data-v-97419e3c>配置火山引擎、阿里云等第三方服务;字段支持加密存储。默认配置全区域共用,可按区域覆盖字段值。</p></div><div class="flex items-center gap-3" data-v-97419e3c><select class="select select-bordered select-sm" data-v-97419e3c><option${ssrRenderAttr("value", 0)} data-v-97419e3c${ssrIncludeBooleanAttr(Array.isArray(curRegion.value) ? ssrLooseContain(curRegion.value, 0) : ssrLooseEqual(curRegion.value, 0)) ? " selected" : ""}>默认(全区域)</option><!--[-->`);
ssrRenderList(REGIONS, (r) => {
_push(`<option${ssrRenderAttr("value", r.value)} data-v-97419e3c${ssrIncludeBooleanAttr(Array.isArray(curRegion.value) ? ssrLooseContain(curRegion.value, r.value) : ssrLooseEqual(curRegion.value, r.value)) ? " selected" : ""}>${ssrInterpolate(r.label)}</option>`);
});
_push(`<!--]--></select><button class="btn btn-primary btn-sm text-white" style="${ssrRenderStyle(curRegion.value === 0 ? null : { display: "none" })}" data-v-97419e3c>+ 新增服务</button></div></div><div class="flex gap-4" style="${ssrRenderStyle({ "align-items": "flex-start" })}" data-v-97419e3c><div style="${ssrRenderStyle({ "width": "248px", "flex-shrink": "0" })}" data-v-97419e3c><div class="flex flex-col gap-2" data-v-97419e3c><!--[-->`);
ssrRenderList(allSvcs.value, (s) => {
_push(`<div class="${ssrRenderClass([{ active: curSvc.value && curSvc.value.id === s.id }, "svc-item"])}" data-v-97419e3c><div class="svc-logo" style="${ssrRenderStyle({ background: s.color || "#6366f1" })}" data-v-97419e3c>${ssrInterpolate(s.icon || (s.name || "").charAt(0))}</div><div style="${ssrRenderStyle({ "min-width": "0", "flex": "1" })}" data-v-97419e3c><div class="flex items-center gap-2" data-v-97419e3c><span class="font-semibold text-slate-800 text-sm truncate" data-v-97419e3c>${ssrInterpolate(s.name)}</span><span class="${ssrRenderClass([s.enable ? "badge-success" : "badge-ghost", "badge badge-xs"])}" data-v-97419e3c>${ssrInterpolate(s.enable ? "启用" : "停用")}</span></div><div class="flex flex-wrap gap-1 mt-1" data-v-97419e3c><!--[-->`);
ssrRenderList(parseCats(s.categories), (v) => {
_push(`<span class="cat-chip" style="${ssrRenderStyle({ color: scatInfo(v).color, background: scatInfo(v).bg })}" data-v-97419e3c>${ssrInterpolate(scatInfo(v).short)}</span>`);
});
_push(`<!--]-->`);
if (encCount(s)) {
_push(`<span class="lock-badge" data-v-97419e3c>🔒${ssrInterpolate(encCount(s))}</span>`);
} else {
_push(`<!---->`);
}
_push(`</div></div></div>`);
});
_push(`<!--]-->`);
if (!allSvcs.value.length) {
_push(`<p class="text-xs text-slate-400 text-center py-8" data-v-97419e3c>暂无服务</p>`);
} else {
_push(`<!---->`);
}
_push(`</div></div><div class="flex-1 min-w-0" data-v-97419e3c><div class="bg-white rounded-2xl border border-slate-100 shadow-sm p-6" data-v-97419e3c>`);
if (detailMode.value === "empty") {
_push(`<div class="text-center text-slate-300 py-20" data-v-97419e3c><div class="text-5xl mb-3" data-v-97419e3c>⚙️</div><p class="text-sm" data-v-97419e3c>从左侧选择一个服务开始配置</p></div>`);
} else if (detailMode.value === "default" && curSvc.value) {
_push(`<!--[--><div class="flex items-center justify-between mb-5" data-v-97419e3c><div class="flex items-center gap-3" data-v-97419e3c><div class="svc-logo" style="${ssrRenderStyle({ background: curSvc.value.color || "#6366f1", width: "44px", height: "44px", fontSize: "20px" })}" data-v-97419e3c>${ssrInterpolate(curSvc.value.icon || (curSvc.value.name || "").charAt(0))}</div><div data-v-97419e3c><h3 class="text-base font-semibold text-slate-800" data-v-97419e3c>${ssrInterpolate(curSvc.value.name)}</h3><p class="text-xs text-slate-400 mt-0.5" data-v-97419e3c>${ssrInterpolate(curSvc.value.id)}</p></div></div><div class="flex gap-2" data-v-97419e3c><button class="btn btn-error btn-sm btn-outline" data-v-97419e3c>删除服务</button><button class="btn btn-primary btn-sm text-white" data-v-97419e3c>保存</button></div></div><div class="divider text-xs text-slate-400 my-3" data-v-97419e3c>基本信息</div><div class="grid grid-cols-2 gap-4 mb-4" data-v-97419e3c><div class="form-control" data-v-97419e3c><label class="label" data-v-97419e3c><span class="label-text" data-v-97419e3c>服务名称 *</span></label><input${ssrRenderAttr("value", editForm.name)} class="input input-bordered" data-v-97419e3c></div><div class="form-control" data-v-97419e3c><label class="label" data-v-97419e3c><span class="label-text" data-v-97419e3c>启用</span></label><input${ssrIncludeBooleanAttr(Array.isArray(editForm.enable) ? ssrLooseContain(editForm.enable, null) : editForm.enable) ? " checked" : ""} type="checkbox" class="toggle toggle-primary mt-3" data-v-97419e3c></div></div><div class="form-control mb-4" data-v-97419e3c><label class="label" data-v-97419e3c><span class="label-text" data-v-97419e3c>服务描述</span></label><input${ssrRenderAttr("value", editForm.description)} class="input input-bordered" data-v-97419e3c></div><div class="mb-4" data-v-97419e3c><p class="text-sm font-medium text-slate-700 mb-2" data-v-97419e3c>服务类别 <span class="text-slate-400 text-xs" data-v-97419e3c>(可多选)</span></p><div class="flex flex-wrap gap-3" data-v-97419e3c><!--[-->`);
ssrRenderList(SCAT, (sc) => {
_push(`<label class="flex items-center gap-2 cursor-pointer" data-v-97419e3c><input type="checkbox" class="checkbox checkbox-sm checkbox-primary"${ssrRenderAttr("value", sc.v)}${ssrIncludeBooleanAttr(Array.isArray(editCats.value) ? ssrLooseContain(editCats.value, sc.v) : editCats.value) ? " checked" : ""} data-v-97419e3c><span class="cat-chip" style="${ssrRenderStyle({ color: sc.color, background: sc.bg })}" data-v-97419e3c>${ssrInterpolate(sc.short)}</span><span class="text-xs text-slate-600" data-v-97419e3c>${ssrInterpolate(sc.label)}</span></label>`);
});
_push(`<!--]--></div></div><div class="divider text-xs text-slate-400 my-3" data-v-97419e3c>自定义字段</div><div data-v-97419e3c>`);
if (!editFields.value.length) {
_push(`<p class="text-xs text-slate-400 py-4 text-center" data-v-97419e3c>尚无自定义字段,点击下方添加</p>`);
} else {
_push(`<div class="overflow-x-auto" data-v-97419e3c><table class="table text-xs" data-v-97419e3c><thead data-v-97419e3c><tr data-v-97419e3c><th class="w-32" data-v-97419e3c>字段名</th><th data-v-97419e3c>字段描述</th><th class="w-16 text-center" data-v-97419e3c>加密</th><th data-v-97419e3c>默认值</th><th class="w-12" data-v-97419e3c></th></tr></thead><tbody data-v-97419e3c><!--[-->`);
ssrRenderList(editFields.value, (f, i) => {
_push(`<tr data-v-97419e3c><td data-v-97419e3c><input class="field-input"${ssrRenderAttr("value", f.key)} placeholder="key" data-v-97419e3c></td><td data-v-97419e3c><input class="field-input"${ssrRenderAttr("value", f.description)} placeholder="用途描述" data-v-97419e3c></td><td class="text-center" data-v-97419e3c><input type="checkbox" class="checkbox checkbox-xs checkbox-primary"${ssrIncludeBooleanAttr(Array.isArray(f.encrypted) ? ssrLooseContain(f.encrypted, null) : f.encrypted) ? " checked" : ""} data-v-97419e3c></td><td data-v-97419e3c>`);
if (f.encrypted) {
_push(`<!--[--><div class="relative" data-v-97419e3c><input${ssrRenderAttr("type", f._show ? "text" : "password")} class="field-input pr-14"${ssrRenderDynamicModel(f._show ? "text" : "password", f.def_value, null)} placeholder="留空保留原值" data-v-97419e3c><button type="button" class="absolute right-2 top-1/2 -translate-y-1/2 text-xs text-slate-400 hover:text-slate-700" data-v-97419e3c>${ssrInterpolate(f._show ? "隐藏" : "显示")}</button></div><span class="lock-badge ml-1" data-v-97419e3c>🔒 加密</span><!--]-->`);
} else {
_push(`<input class="field-input"${ssrRenderAttr("value", f.def_value)} data-v-97419e3c>`);
}
_push(`</td><td data-v-97419e3c><button class="btn btn-ghost btn-xs text-error" data-v-97419e3c>×</button></td></tr>`);
});
_push(`<!--]--></tbody></table></div>`);
}
_push(`<button class="btn btn-ghost btn-sm mt-2 text-primary" data-v-97419e3c>+ 添加字段</button></div><!--]-->`);
} else if (detailMode.value === "new") {
_push(`<!--[--><div class="flex items-center justify-between mb-5" data-v-97419e3c><h3 class="text-base font-semibold text-slate-800" data-v-97419e3c>新增依赖服务</h3><div class="flex gap-2" data-v-97419e3c><button class="btn btn-ghost btn-sm" data-v-97419e3c>取消</button><button class="btn btn-primary btn-sm text-white" data-v-97419e3c>创建</button></div></div><div class="divider text-xs text-slate-400 my-3" data-v-97419e3c>基本信息</div><div class="grid grid-cols-2 gap-4 mb-4" data-v-97419e3c><div class="form-control" data-v-97419e3c><label class="label" data-v-97419e3c><span class="label-text" data-v-97419e3c>服务ID * <span class="text-slate-400 text-xs" data-v-97419e3c>(唯一,如 volcengine)</span></span></label><input${ssrRenderAttr("value", editForm.id)} class="input input-bordered font-mono" placeholder="volcengine" data-v-97419e3c></div><div class="form-control" data-v-97419e3c><label class="label" data-v-97419e3c><span class="label-text" data-v-97419e3c>服务名称 *</span></label><input${ssrRenderAttr("value", editForm.name)} class="input input-bordered" placeholder="火山引擎" data-v-97419e3c></div></div><div class="form-control mb-4" data-v-97419e3c><label class="label" data-v-97419e3c><span class="label-text" data-v-97419e3c>服务描述</span></label><input${ssrRenderAttr("value", editForm.description)} class="input input-bordered" placeholder="简述该服务的用途" data-v-97419e3c></div><div class="mb-4" data-v-97419e3c><p class="text-sm font-medium text-slate-700 mb-2" data-v-97419e3c>服务类别</p><div class="flex flex-wrap gap-3" data-v-97419e3c><!--[-->`);
ssrRenderList(SCAT, (sc) => {
_push(`<label class="flex items-center gap-2 cursor-pointer" data-v-97419e3c><input type="checkbox" class="checkbox checkbox-sm checkbox-primary"${ssrRenderAttr("value", sc.v)}${ssrIncludeBooleanAttr(Array.isArray(editCats.value) ? ssrLooseContain(editCats.value, sc.v) : editCats.value) ? " checked" : ""} data-v-97419e3c><span class="cat-chip" style="${ssrRenderStyle({ color: sc.color, background: sc.bg })}" data-v-97419e3c>${ssrInterpolate(sc.short)}</span><span class="text-xs text-slate-600" data-v-97419e3c>${ssrInterpolate(sc.label)}</span></label>`);
});
_push(`<!--]--></div></div><div class="divider text-xs text-slate-400 my-3" data-v-97419e3c>自定义字段</div><div data-v-97419e3c>`);
if (!editFields.value.length) {
_push(`<p class="text-xs text-slate-400 py-4 text-center" data-v-97419e3c>尚无自定义字段,点击下方添加</p>`);
} else {
_push(`<div class="overflow-x-auto" data-v-97419e3c><table class="table text-xs" data-v-97419e3c><thead data-v-97419e3c><tr data-v-97419e3c><th class="w-32" data-v-97419e3c>字段名</th><th data-v-97419e3c>字段描述</th><th class="w-16 text-center" data-v-97419e3c>加密</th><th data-v-97419e3c>默认值</th><th class="w-12" data-v-97419e3c></th></tr></thead><tbody data-v-97419e3c><!--[-->`);
ssrRenderList(editFields.value, (f, i) => {
_push(`<tr data-v-97419e3c><td data-v-97419e3c><input class="field-input"${ssrRenderAttr("value", f.key)} placeholder="key" data-v-97419e3c></td><td data-v-97419e3c><input class="field-input"${ssrRenderAttr("value", f.description)} placeholder="用途描述" data-v-97419e3c></td><td class="text-center" data-v-97419e3c><input type="checkbox" class="checkbox checkbox-xs checkbox-primary"${ssrIncludeBooleanAttr(Array.isArray(f.encrypted) ? ssrLooseContain(f.encrypted, null) : f.encrypted) ? " checked" : ""} data-v-97419e3c></td><td data-v-97419e3c>`);
if (f.encrypted) {
_push(`<!--[--><div class="relative" data-v-97419e3c><input${ssrRenderAttr("type", f._show ? "text" : "password")} class="field-input pr-14"${ssrRenderDynamicModel(f._show ? "text" : "password", f.def_value, null)} placeholder="留空保留原值" data-v-97419e3c><button type="button" class="absolute right-2 top-1/2 -translate-y-1/2 text-xs text-slate-400 hover:text-slate-700" data-v-97419e3c>${ssrInterpolate(f._show ? "隐藏" : "显示")}</button></div><span class="lock-badge ml-1" data-v-97419e3c>🔒 加密</span><!--]-->`);
} else {
_push(`<input class="field-input"${ssrRenderAttr("value", f.def_value)} data-v-97419e3c>`);
}
_push(`</td><td data-v-97419e3c><button class="btn btn-ghost btn-xs text-error" data-v-97419e3c>×</button></td></tr>`);
});
_push(`<!--]--></tbody></table></div>`);
}
_push(`<button class="btn btn-ghost btn-sm mt-2 text-primary" data-v-97419e3c>+ 添加字段</button></div><!--]-->`);
} else if (detailMode.value === "region" && curSvc.value) {
_push(`<!--[-->`);
if (regionLoading.value) {
_push(`<div class="text-center py-10 text-slate-400" data-v-97419e3c>加载中...</div>`);
} else {
_push(`<!--[--><div class="flex items-center justify-between mb-5" data-v-97419e3c><div class="flex items-center gap-3" data-v-97419e3c><div class="svc-logo" style="${ssrRenderStyle({ background: curSvc.value.color || "#6366f1", width: "44px", height: "44px", fontSize: "20px" })}" data-v-97419e3c>${ssrInterpolate(curSvc.value.icon || (curSvc.value.name || "").charAt(0))}</div><div data-v-97419e3c><h3 class="text-base font-semibold text-slate-800" data-v-97419e3c>${ssrInterpolate(curSvc.value.name)}</h3><span class="badge badge-warning badge-sm mt-0.5" data-v-97419e3c>${ssrInterpolate(curRegionLabel.value)} 覆盖模式</span></div></div><button class="btn btn-primary btn-sm text-white" data-v-97419e3c>保存覆盖</button></div><div class="rounded-lg px-3 py-2 mb-4 text-xs" style="${ssrRenderStyle({ "background": "#fefce8", "border": "1px solid #fde047", "color": "#854d0e" })}" data-v-97419e3c> ✦ 当前编辑「${ssrInterpolate(curRegionLabel.value)}」的字段覆盖值。留空的字段将继承默认值。加密字段留空保留已存储密文。 </div><div class="overflow-x-auto" data-v-97419e3c><table class="table text-xs" data-v-97419e3c><thead data-v-97419e3c><tr data-v-97419e3c><th class="w-32" data-v-97419e3c>字段名</th><th data-v-97419e3c>字段描述</th><th class="w-24 text-center" data-v-97419e3c>状态</th><th data-v-97419e3c>有效值</th></tr></thead><tbody data-v-97419e3c><!--[-->`);
ssrRenderList(overrideFields.value, (f, i) => {
_push(`<tr data-v-97419e3c><td class="font-mono text-slate-700" data-v-97419e3c>${ssrInterpolate(f.key)}</td><td class="text-slate-500" data-v-97419e3c>${ssrInterpolate(f.description)}</td><td class="text-center" data-v-97419e3c>`);
if (f.is_overridden) {
_push(`<span class="override-badge" data-v-97419e3c>覆盖</span>`);
} else {
_push(`<span class="inherit-badge" data-v-97419e3c>继承</span>`);
}
_push(`</td><td data-v-97419e3c>`);
if (f.encrypted) {
_push(`<!--[--><div class="relative" data-v-97419e3c><input${ssrRenderAttr("type", f._show ? "text" : "password")} class="field-input pr-14"${ssrRenderDynamicModel(f._show ? "text" : "password", f._input, null)} placeholder="留空继承默认" data-v-97419e3c><button type="button" class="absolute right-2 top-1/2 -translate-y-1/2 text-xs text-slate-400 hover:text-slate-700" data-v-97419e3c>${ssrInterpolate(f._show ? "隐藏" : "显示")}</button></div><span class="lock-badge ml-1" data-v-97419e3c>🔒</span><!--]-->`);
} else {
_push(`<input class="field-input"${ssrRenderAttr("value", f._input)}${ssrRenderAttr("placeholder", "留空继承:" + (f.value || ""))} data-v-97419e3c>`);
}
_push(`</td></tr>`);
});
_push(`<!--]--></tbody></table></div><!--]-->`);
}
_push(`<!--]-->`);
} else {
_push(`<!---->`);
}
_push(`</div></div></div><div class="sync-overlay" style="${ssrRenderStyle(syncVisible.value ? null : { display: "none" })}" data-v-97419e3c><div class="sync-box" data-v-97419e3c><div class="flex items-start gap-3 mb-4" data-v-97419e3c><div style="${ssrRenderStyle({ "width": "42px", "height": "42px", "background": "linear-gradient(135deg,#4f46e5,#7c3aed)", "border-radius": "13px", "display": "flex", "align-items": "center", "justify-content": "center", "flex-shrink": "0" })}" data-v-97419e3c><svg style="${ssrRenderStyle({ "width": "20px", "height": "20px", "color": "#fff" })}" fill="none" viewBox="0 0 24 24" stroke="currentColor" data-v-97419e3c><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z" data-v-97419e3c></path></svg></div><div data-v-97419e3c><h3 class="text-base font-semibold text-slate-800" data-v-97419e3c>同步到其他区域</h3><p class="text-xs text-slate-400 mt-1" data-v-97419e3c>${ssrInterpolate(syncDesc.value)}</p></div></div><div class="text-xs px-3 py-2 rounded-lg mb-3" style="${ssrRenderStyle({ "background": "#f0fdf4", "border": "1px solid #bbf7d0", "color": "#15803d" })}" data-v-97419e3c>${syncScopeNote.value ?? ""}</div><div class="flex items-center justify-between mb-1" data-v-97419e3c><span class="text-xs font-semibold text-slate-500" data-v-97419e3c>选择目标区域</span><div class="flex gap-2" data-v-97419e3c><button class="btn btn-ghost btn-xs" data-v-97419e3c>全选</button><button class="btn btn-ghost btn-xs" data-v-97419e3c>清空</button></div></div><div class="sync-region-grid" data-v-97419e3c><!--[-->`);
ssrRenderList(syncRegionList.value, (r) => {
_push(`<label class="${ssrRenderClass([{ checked: syncTargets.value.includes(r.value) }, "sync-region-item"])}" data-v-97419e3c><input type="checkbox" class="checkbox checkbox-xs checkbox-primary"${ssrIncludeBooleanAttr(syncTargets.value.includes(r.value)) ? " checked" : ""} data-v-97419e3c><span data-v-97419e3c>${ssrInterpolate(r.label)}</span></label>`);
});
_push(`<!--]--></div><p class="text-[11px] text-slate-400 mb-5" data-v-97419e3c>⚠ 已勾选区域中与当前配置相同的字段将被覆盖;加密字段密文一并同步。</p><div class="flex gap-3 justify-end" data-v-97419e3c><button class="btn btn-ghost" data-v-97419e3c>仅保存当前区域</button><button class="btn btn-primary text-white" data-v-97419e3c>保存并同步</button></div></div></div></div>`);
};
}
});
const _sfc_setup = _sfc_main.setup;
_sfc_main.setup = (props, ctx) => {
const ssrContext = useSSRContext();
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/serviceconfig.vue");
return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
};
const serviceconfig = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-97419e3c"]]);
export { serviceconfig as default };
//# sourceMappingURL=serviceconfig-BTX37VDF.mjs.map

1
apps/admin/.output/server/chunks/build/serviceconfig-BTX37VDF.mjs.map

@ -0,0 +1 @@
{"version":3,"file":"serviceconfig-BTX37VDF.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/serviceconfig-BTX37VDF.js"],"names":[],"mappings":"","x_google_ignoreList":[0]}

198
apps/admin/.output/server/chunks/build/serviceconfig-qwLggDKS.mjs

@ -1,198 +0,0 @@
import { defineComponent, ref, reactive, computed, useSSRContext } from 'vue';
import { ssrRenderAttrs, ssrRenderAttr, ssrIncludeBooleanAttr, ssrLooseContain, ssrLooseEqual, ssrRenderList, ssrInterpolate, ssrRenderStyle, ssrRenderClass, ssrRenderDynamicModel } from 'vue/server-renderer';
import { u as useApi } from './useApi-B7CB0Cnn.mjs';
import { u as useToast } from './useToast-BwtTR9dH.mjs';
import { _ as _export_sfc } from './server.mjs';
import './auth-QFkCoU1C.mjs';
import 'pinia';
import '../nitro/nitro.mjs';
import 'node:http';
import 'node:https';
import 'node:events';
import 'node:buffer';
import 'node:fs';
import 'node:path';
import 'node:crypto';
import 'node:url';
import '../routes/renderer.mjs';
import 'vue-bundle-renderer/runtime';
import 'unhead/server';
import 'devalue';
import 'unhead/utils';
import 'perfect-debounce';
const _sfc_main = /* @__PURE__ */ defineComponent({
__name: "serviceconfig",
__ssrInlineRender: true,
setup(__props) {
const REGIONS = [
{ value: 1, label: "中国" },
{ value: 2, label: "美国" },
{ value: 3, label: "东亚" },
{ value: 4, label: "东南亚" },
{ value: 5, label: "南亚" },
{ value: 6, label: "中东" },
{ value: 7, label: "欧洲" },
{ value: 8, label: "俄罗斯" },
{ value: 9, label: "非洲" },
{ value: 10, label: "南美" },
{ value: 11, label: "北美" },
{ value: 12, label: "大洋洲" },
{ value: 13, label: "巴西" },
{ value: 14, label: "印度" }
];
const SCAT = [
{ v: 1, label: "STT 语音识别", short: "STT", color: "#0369a1", bg: "#dbeafe" },
{ v: 2, label: "TTS 语音合成", short: "TTS", color: "#7c3aed", bg: "#ede9fe" },
{ v: 3, label: "MT 机器翻译", short: "MT", color: "#059669", bg: "#dcfce7" },
{ v: 4, label: "AST 端到端", short: "AST", color: "#c2410c", bg: "#fff7ed" },
{ v: 5, label: "LLM 大语言", short: "LLM", color: "#b45309", bg: "#fef9c3" },
{ v: 6, label: "存储 OSS/COS", short: "存储", color: "#475569", bg: "#f1f5f9" }
];
useApi();
useToast();
function scatInfo(v) {
return SCAT.find((s) => s.v === v) || { short: "?", color: "#999", bg: "#eee", v: 0, label: "" };
}
function parseCats(s) {
return (s || "").split(",").map((x) => parseInt(x) || 0).filter((x) => x > 0);
}
function encCount(s) {
return (s.fields || []).filter((f) => f.encrypted).length;
}
const allSvcs = ref([]);
const curSvc = ref(null);
const curRegion = ref(0);
const detailMode = ref("empty");
const editForm = reactive({ id: "", name: "", description: "", enable: false });
const editCats = ref([]);
const editFields = ref([]);
const overrideFields = ref([]);
const regionLoading = ref(false);
const curRegionLabel = computed(() => {
const r = REGIONS.find((x) => x.value === curRegion.value);
return r ? r.label : "区域" + curRegion.value;
});
const syncVisible = ref(false);
ref(false);
const syncDesc = ref("");
const syncScopeNote = ref("");
const syncTargets = ref([]);
const syncRegionList = computed(() => REGIONS.filter((r) => r.value !== curRegion.value));
return (_ctx, _push, _parent, _attrs) => {
_push(`<div${ssrRenderAttrs(_attrs)} data-v-8f55f9ae><div class="flex items-center justify-between mb-5" data-v-8f55f9ae><div data-v-8f55f9ae><h2 class="text-lg font-semibold text-slate-800" data-v-8f55f9ae>依赖服务配置</h2><p class="text-xs text-slate-400 mt-1" data-v-8f55f9ae>配置火山引擎、阿里云等第三方服务;字段支持加密存储。默认配置全区域共用,可按区域覆盖字段值。</p></div><div class="flex items-center gap-3" data-v-8f55f9ae><select class="select select-bordered select-sm" data-v-8f55f9ae><option${ssrRenderAttr("value", 0)} data-v-8f55f9ae${ssrIncludeBooleanAttr(Array.isArray(curRegion.value) ? ssrLooseContain(curRegion.value, 0) : ssrLooseEqual(curRegion.value, 0)) ? " selected" : ""}>默认(全区域)</option><!--[-->`);
ssrRenderList(REGIONS, (r) => {
_push(`<option${ssrRenderAttr("value", r.value)} data-v-8f55f9ae${ssrIncludeBooleanAttr(Array.isArray(curRegion.value) ? ssrLooseContain(curRegion.value, r.value) : ssrLooseEqual(curRegion.value, r.value)) ? " selected" : ""}>${ssrInterpolate(r.label)}</option>`);
});
_push(`<!--]--></select><button class="btn btn-primary btn-sm text-white" style="${ssrRenderStyle(curRegion.value === 0 ? null : { display: "none" })}" data-v-8f55f9ae>+ 新增服务</button></div></div><div class="flex gap-4" style="${ssrRenderStyle({ "align-items": "flex-start" })}" data-v-8f55f9ae><div style="${ssrRenderStyle({ "width": "248px", "flex-shrink": "0" })}" data-v-8f55f9ae><div class="flex flex-col gap-2" data-v-8f55f9ae><!--[-->`);
ssrRenderList(allSvcs.value, (s) => {
_push(`<div class="${ssrRenderClass([{ active: curSvc.value && curSvc.value.id === s.id }, "svc-item"])}" data-v-8f55f9ae><div class="svc-logo" style="${ssrRenderStyle({ background: s.color || "#6366f1" })}" data-v-8f55f9ae>${ssrInterpolate(s.icon || (s.name || "").charAt(0))}</div><div style="${ssrRenderStyle({ "min-width": "0", "flex": "1" })}" data-v-8f55f9ae><div class="flex items-center gap-2" data-v-8f55f9ae><span class="font-semibold text-slate-800 text-sm truncate" data-v-8f55f9ae>${ssrInterpolate(s.name)}</span><span class="${ssrRenderClass([s.enable ? "badge-success" : "badge-ghost", "badge badge-xs"])}" data-v-8f55f9ae>${ssrInterpolate(s.enable ? "启用" : "停用")}</span></div><div class="flex flex-wrap gap-1 mt-1" data-v-8f55f9ae><!--[-->`);
ssrRenderList(parseCats(s.categories), (v) => {
_push(`<span class="cat-chip" style="${ssrRenderStyle({ color: scatInfo(v).color, background: scatInfo(v).bg })}" data-v-8f55f9ae>${ssrInterpolate(scatInfo(v).short)}</span>`);
});
_push(`<!--]-->`);
if (encCount(s)) {
_push(`<span class="lock-badge" data-v-8f55f9ae>🔒${ssrInterpolate(encCount(s))}</span>`);
} else {
_push(`<!---->`);
}
_push(`</div></div></div>`);
});
_push(`<!--]-->`);
if (!allSvcs.value.length) {
_push(`<p class="text-xs text-slate-400 text-center py-8" data-v-8f55f9ae>暂无服务</p>`);
} else {
_push(`<!---->`);
}
_push(`</div></div><div class="flex-1 min-w-0" data-v-8f55f9ae><div class="bg-white rounded-2xl border border-slate-100 shadow-sm p-6" data-v-8f55f9ae>`);
if (detailMode.value === "empty") {
_push(`<div class="text-center text-slate-300 py-20" data-v-8f55f9ae><div class="text-5xl mb-3" data-v-8f55f9ae>⚙️</div><p class="text-sm" data-v-8f55f9ae>从左侧选择一个服务开始配置</p></div>`);
} else if (detailMode.value === "default" && curSvc.value) {
_push(`<!--[--><div class="flex items-center justify-between mb-5" data-v-8f55f9ae><div class="flex items-center gap-3" data-v-8f55f9ae><div class="svc-logo" style="${ssrRenderStyle({ background: curSvc.value.color || "#6366f1", width: "44px", height: "44px", fontSize: "20px" })}" data-v-8f55f9ae>${ssrInterpolate(curSvc.value.icon || (curSvc.value.name || "").charAt(0))}</div><div data-v-8f55f9ae><h3 class="text-base font-semibold text-slate-800" data-v-8f55f9ae>${ssrInterpolate(curSvc.value.name)}</h3><p class="text-xs text-slate-400 mt-0.5" data-v-8f55f9ae>${ssrInterpolate(curSvc.value.id)}</p></div></div><div class="flex gap-2" data-v-8f55f9ae><button class="btn btn-error btn-sm btn-outline" data-v-8f55f9ae>删除服务</button><button class="btn btn-primary btn-sm text-white" data-v-8f55f9ae>保存</button></div></div><div class="divider text-xs text-slate-400 my-3" data-v-8f55f9ae>基本信息</div><div class="grid grid-cols-2 gap-4 mb-4" data-v-8f55f9ae><div class="form-control" data-v-8f55f9ae><label class="label" data-v-8f55f9ae><span class="label-text" data-v-8f55f9ae>服务名称 *</span></label><input${ssrRenderAttr("value", editForm.name)} class="input input-bordered" data-v-8f55f9ae></div><div class="form-control" data-v-8f55f9ae><label class="label" data-v-8f55f9ae><span class="label-text" data-v-8f55f9ae>启用</span></label><input${ssrIncludeBooleanAttr(Array.isArray(editForm.enable) ? ssrLooseContain(editForm.enable, null) : editForm.enable) ? " checked" : ""} type="checkbox" class="toggle toggle-primary mt-3" data-v-8f55f9ae></div></div><div class="form-control mb-4" data-v-8f55f9ae><label class="label" data-v-8f55f9ae><span class="label-text" data-v-8f55f9ae>服务描述</span></label><input${ssrRenderAttr("value", editForm.description)} class="input input-bordered" data-v-8f55f9ae></div><div class="mb-4" data-v-8f55f9ae><p class="text-sm font-medium text-slate-700 mb-2" data-v-8f55f9ae>服务类别 <span class="text-slate-400 text-xs" data-v-8f55f9ae>(可多选)</span></p><div class="flex flex-wrap gap-3" data-v-8f55f9ae><!--[-->`);
ssrRenderList(SCAT, (sc) => {
_push(`<label class="flex items-center gap-2 cursor-pointer" data-v-8f55f9ae><input type="checkbox" class="checkbox checkbox-sm checkbox-primary"${ssrRenderAttr("value", sc.v)}${ssrIncludeBooleanAttr(Array.isArray(editCats.value) ? ssrLooseContain(editCats.value, sc.v) : editCats.value) ? " checked" : ""} data-v-8f55f9ae><span class="cat-chip" style="${ssrRenderStyle({ color: sc.color, background: sc.bg })}" data-v-8f55f9ae>${ssrInterpolate(sc.short)}</span><span class="text-xs text-slate-600" data-v-8f55f9ae>${ssrInterpolate(sc.label)}</span></label>`);
});
_push(`<!--]--></div></div><div class="divider text-xs text-slate-400 my-3" data-v-8f55f9ae>自定义字段</div><div data-v-8f55f9ae>`);
if (!editFields.value.length) {
_push(`<p class="text-xs text-slate-400 py-4 text-center" data-v-8f55f9ae>尚无自定义字段,点击下方添加</p>`);
} else {
_push(`<div class="overflow-x-auto" data-v-8f55f9ae><table class="table text-xs" data-v-8f55f9ae><thead data-v-8f55f9ae><tr data-v-8f55f9ae><th class="w-32" data-v-8f55f9ae>字段名</th><th data-v-8f55f9ae>字段描述</th><th class="w-16 text-center" data-v-8f55f9ae>加密</th><th data-v-8f55f9ae>默认值</th><th class="w-12" data-v-8f55f9ae></th></tr></thead><tbody data-v-8f55f9ae><!--[-->`);
ssrRenderList(editFields.value, (f, i) => {
_push(`<tr data-v-8f55f9ae><td data-v-8f55f9ae><input class="field-input"${ssrRenderAttr("value", f.key)} placeholder="key" data-v-8f55f9ae></td><td data-v-8f55f9ae><input class="field-input"${ssrRenderAttr("value", f.description)} placeholder="用途描述" data-v-8f55f9ae></td><td class="text-center" data-v-8f55f9ae><input type="checkbox" class="checkbox checkbox-xs checkbox-primary"${ssrIncludeBooleanAttr(Array.isArray(f.encrypted) ? ssrLooseContain(f.encrypted, null) : f.encrypted) ? " checked" : ""} data-v-8f55f9ae></td><td data-v-8f55f9ae>`);
if (f.encrypted) {
_push(`<!--[--><div class="relative" data-v-8f55f9ae><input${ssrRenderAttr("type", f._show ? "text" : "password")} class="field-input pr-14"${ssrRenderDynamicModel(f._show ? "text" : "password", f.def_value, null)} placeholder="留空保留原值" data-v-8f55f9ae><button type="button" class="absolute right-2 top-1/2 -translate-y-1/2 text-xs text-slate-400 hover:text-slate-700" data-v-8f55f9ae>${ssrInterpolate(f._show ? "隐藏" : "显示")}</button></div><span class="lock-badge ml-1" data-v-8f55f9ae>🔒 加密</span><!--]-->`);
} else {
_push(`<input class="field-input"${ssrRenderAttr("value", f.def_value)} data-v-8f55f9ae>`);
}
_push(`</td><td data-v-8f55f9ae><button class="btn btn-ghost btn-xs text-error" data-v-8f55f9ae>×</button></td></tr>`);
});
_push(`<!--]--></tbody></table></div>`);
}
_push(`<button class="btn btn-ghost btn-sm mt-2 text-primary" data-v-8f55f9ae>+ 添加字段</button></div><!--]-->`);
} else if (detailMode.value === "new") {
_push(`<!--[--><div class="flex items-center justify-between mb-5" data-v-8f55f9ae><h3 class="text-base font-semibold text-slate-800" data-v-8f55f9ae>新增依赖服务</h3><div class="flex gap-2" data-v-8f55f9ae><button class="btn btn-ghost btn-sm" data-v-8f55f9ae>取消</button><button class="btn btn-primary btn-sm text-white" data-v-8f55f9ae>创建</button></div></div><div class="divider text-xs text-slate-400 my-3" data-v-8f55f9ae>基本信息</div><div class="grid grid-cols-2 gap-4 mb-4" data-v-8f55f9ae><div class="form-control" data-v-8f55f9ae><label class="label" data-v-8f55f9ae><span class="label-text" data-v-8f55f9ae>服务ID * <span class="text-slate-400 text-xs" data-v-8f55f9ae>(唯一,如 volcengine)</span></span></label><input${ssrRenderAttr("value", editForm.id)} class="input input-bordered font-mono" placeholder="volcengine" data-v-8f55f9ae></div><div class="form-control" data-v-8f55f9ae><label class="label" data-v-8f55f9ae><span class="label-text" data-v-8f55f9ae>服务名称 *</span></label><input${ssrRenderAttr("value", editForm.name)} class="input input-bordered" placeholder="火山引擎" data-v-8f55f9ae></div></div><div class="form-control mb-4" data-v-8f55f9ae><label class="label" data-v-8f55f9ae><span class="label-text" data-v-8f55f9ae>服务描述</span></label><input${ssrRenderAttr("value", editForm.description)} class="input input-bordered" placeholder="简述该服务的用途" data-v-8f55f9ae></div><div class="mb-4" data-v-8f55f9ae><p class="text-sm font-medium text-slate-700 mb-2" data-v-8f55f9ae>服务类别</p><div class="flex flex-wrap gap-3" data-v-8f55f9ae><!--[-->`);
ssrRenderList(SCAT, (sc) => {
_push(`<label class="flex items-center gap-2 cursor-pointer" data-v-8f55f9ae><input type="checkbox" class="checkbox checkbox-sm checkbox-primary"${ssrRenderAttr("value", sc.v)}${ssrIncludeBooleanAttr(Array.isArray(editCats.value) ? ssrLooseContain(editCats.value, sc.v) : editCats.value) ? " checked" : ""} data-v-8f55f9ae><span class="cat-chip" style="${ssrRenderStyle({ color: sc.color, background: sc.bg })}" data-v-8f55f9ae>${ssrInterpolate(sc.short)}</span><span class="text-xs text-slate-600" data-v-8f55f9ae>${ssrInterpolate(sc.label)}</span></label>`);
});
_push(`<!--]--></div></div><div class="divider text-xs text-slate-400 my-3" data-v-8f55f9ae>自定义字段</div><div data-v-8f55f9ae>`);
if (!editFields.value.length) {
_push(`<p class="text-xs text-slate-400 py-4 text-center" data-v-8f55f9ae>尚无自定义字段,点击下方添加</p>`);
} else {
_push(`<div class="overflow-x-auto" data-v-8f55f9ae><table class="table text-xs" data-v-8f55f9ae><thead data-v-8f55f9ae><tr data-v-8f55f9ae><th class="w-32" data-v-8f55f9ae>字段名</th><th data-v-8f55f9ae>字段描述</th><th class="w-16 text-center" data-v-8f55f9ae>加密</th><th data-v-8f55f9ae>默认值</th><th class="w-12" data-v-8f55f9ae></th></tr></thead><tbody data-v-8f55f9ae><!--[-->`);
ssrRenderList(editFields.value, (f, i) => {
_push(`<tr data-v-8f55f9ae><td data-v-8f55f9ae><input class="field-input"${ssrRenderAttr("value", f.key)} placeholder="key" data-v-8f55f9ae></td><td data-v-8f55f9ae><input class="field-input"${ssrRenderAttr("value", f.description)} placeholder="用途描述" data-v-8f55f9ae></td><td class="text-center" data-v-8f55f9ae><input type="checkbox" class="checkbox checkbox-xs checkbox-primary"${ssrIncludeBooleanAttr(Array.isArray(f.encrypted) ? ssrLooseContain(f.encrypted, null) : f.encrypted) ? " checked" : ""} data-v-8f55f9ae></td><td data-v-8f55f9ae>`);
if (f.encrypted) {
_push(`<!--[--><div class="relative" data-v-8f55f9ae><input${ssrRenderAttr("type", f._show ? "text" : "password")} class="field-input pr-14"${ssrRenderDynamicModel(f._show ? "text" : "password", f.def_value, null)} placeholder="留空保留原值" data-v-8f55f9ae><button type="button" class="absolute right-2 top-1/2 -translate-y-1/2 text-xs text-slate-400 hover:text-slate-700" data-v-8f55f9ae>${ssrInterpolate(f._show ? "隐藏" : "显示")}</button></div><span class="lock-badge ml-1" data-v-8f55f9ae>🔒 加密</span><!--]-->`);
} else {
_push(`<input class="field-input"${ssrRenderAttr("value", f.def_value)} data-v-8f55f9ae>`);
}
_push(`</td><td data-v-8f55f9ae><button class="btn btn-ghost btn-xs text-error" data-v-8f55f9ae>×</button></td></tr>`);
});
_push(`<!--]--></tbody></table></div>`);
}
_push(`<button class="btn btn-ghost btn-sm mt-2 text-primary" data-v-8f55f9ae>+ 添加字段</button></div><!--]-->`);
} else if (detailMode.value === "region" && curSvc.value) {
_push(`<!--[-->`);
if (regionLoading.value) {
_push(`<div class="text-center py-10 text-slate-400" data-v-8f55f9ae>加载中...</div>`);
} else {
_push(`<!--[--><div class="flex items-center justify-between mb-5" data-v-8f55f9ae><div class="flex items-center gap-3" data-v-8f55f9ae><div class="svc-logo" style="${ssrRenderStyle({ background: curSvc.value.color || "#6366f1", width: "44px", height: "44px", fontSize: "20px" })}" data-v-8f55f9ae>${ssrInterpolate(curSvc.value.icon || (curSvc.value.name || "").charAt(0))}</div><div data-v-8f55f9ae><h3 class="text-base font-semibold text-slate-800" data-v-8f55f9ae>${ssrInterpolate(curSvc.value.name)}</h3><span class="badge badge-warning badge-sm mt-0.5" data-v-8f55f9ae>${ssrInterpolate(curRegionLabel.value)} 覆盖模式</span></div></div><button class="btn btn-primary btn-sm text-white" data-v-8f55f9ae>保存覆盖</button></div><div class="rounded-lg px-3 py-2 mb-4 text-xs" style="${ssrRenderStyle({ "background": "#fefce8", "border": "1px solid #fde047", "color": "#854d0e" })}" data-v-8f55f9ae> ✦ 当前编辑「${ssrInterpolate(curRegionLabel.value)}」的字段覆盖值。留空的字段将继承默认值。加密字段留空保留已存储密文。 </div><div class="overflow-x-auto" data-v-8f55f9ae><table class="table text-xs" data-v-8f55f9ae><thead data-v-8f55f9ae><tr data-v-8f55f9ae><th class="w-32" data-v-8f55f9ae>字段名</th><th data-v-8f55f9ae>字段描述</th><th class="w-24 text-center" data-v-8f55f9ae>状态</th><th data-v-8f55f9ae>有效值</th></tr></thead><tbody data-v-8f55f9ae><!--[-->`);
ssrRenderList(overrideFields.value, (f, i) => {
_push(`<tr data-v-8f55f9ae><td class="font-mono text-slate-700" data-v-8f55f9ae>${ssrInterpolate(f.key)}</td><td class="text-slate-500" data-v-8f55f9ae>${ssrInterpolate(f.description)}</td><td class="text-center" data-v-8f55f9ae>`);
if (f.is_overridden) {
_push(`<span class="override-badge" data-v-8f55f9ae>覆盖</span>`);
} else {
_push(`<span class="inherit-badge" data-v-8f55f9ae>继承</span>`);
}
_push(`</td><td data-v-8f55f9ae>`);
if (f.encrypted) {
_push(`<!--[--><div class="relative" data-v-8f55f9ae><input${ssrRenderAttr("type", f._show ? "text" : "password")} class="field-input pr-14"${ssrRenderDynamicModel(f._show ? "text" : "password", f._input, null)} placeholder="留空继承默认" data-v-8f55f9ae><button type="button" class="absolute right-2 top-1/2 -translate-y-1/2 text-xs text-slate-400 hover:text-slate-700" data-v-8f55f9ae>${ssrInterpolate(f._show ? "隐藏" : "显示")}</button></div><span class="lock-badge ml-1" data-v-8f55f9ae>🔒</span><!--]-->`);
} else {
_push(`<input class="field-input"${ssrRenderAttr("value", f._input)}${ssrRenderAttr("placeholder", "留空继承:" + (f.value || ""))} data-v-8f55f9ae>`);
}
_push(`</td></tr>`);
});
_push(`<!--]--></tbody></table></div><!--]-->`);
}
_push(`<!--]-->`);
} else {
_push(`<!---->`);
}
_push(`</div></div></div><div class="sync-overlay" style="${ssrRenderStyle(syncVisible.value ? null : { display: "none" })}" data-v-8f55f9ae><div class="sync-box" data-v-8f55f9ae><div class="flex items-start gap-3 mb-4" data-v-8f55f9ae><div style="${ssrRenderStyle({ "width": "42px", "height": "42px", "background": "linear-gradient(135deg,#4f46e5,#7c3aed)", "border-radius": "13px", "display": "flex", "align-items": "center", "justify-content": "center", "flex-shrink": "0" })}" data-v-8f55f9ae><svg style="${ssrRenderStyle({ "width": "20px", "height": "20px", "color": "#fff" })}" fill="none" viewBox="0 0 24 24" stroke="currentColor" data-v-8f55f9ae><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z" data-v-8f55f9ae></path></svg></div><div data-v-8f55f9ae><h3 class="text-base font-semibold text-slate-800" data-v-8f55f9ae>同步到其他区域</h3><p class="text-xs text-slate-400 mt-1" data-v-8f55f9ae>${ssrInterpolate(syncDesc.value)}</p></div></div><div class="text-xs px-3 py-2 rounded-lg mb-3" style="${ssrRenderStyle({ "background": "#f0fdf4", "border": "1px solid #bbf7d0", "color": "#15803d" })}" data-v-8f55f9ae>${syncScopeNote.value ?? ""}</div><div class="flex items-center justify-between mb-1" data-v-8f55f9ae><span class="text-xs font-semibold text-slate-500" data-v-8f55f9ae>选择目标区域</span><div class="flex gap-2" data-v-8f55f9ae><button class="btn btn-ghost btn-xs" data-v-8f55f9ae>全选</button><button class="btn btn-ghost btn-xs" data-v-8f55f9ae>清空</button></div></div><div class="sync-region-grid" data-v-8f55f9ae><!--[-->`);
ssrRenderList(syncRegionList.value, (r) => {
_push(`<label class="${ssrRenderClass([{ checked: syncTargets.value.includes(r.value) }, "sync-region-item"])}" data-v-8f55f9ae><input type="checkbox" class="checkbox checkbox-xs checkbox-primary"${ssrIncludeBooleanAttr(syncTargets.value.includes(r.value)) ? " checked" : ""} data-v-8f55f9ae><span data-v-8f55f9ae>${ssrInterpolate(r.label)}</span></label>`);
});
_push(`<!--]--></div><p class="text-[11px] text-slate-400 mb-5" data-v-8f55f9ae>⚠ 已勾选区域中与当前配置相同的字段将被覆盖;加密字段密文一并同步。</p><div class="flex gap-3 justify-end" data-v-8f55f9ae><button class="btn btn-ghost" data-v-8f55f9ae>仅保存当前区域</button><button class="btn btn-primary text-white" data-v-8f55f9ae>保存并同步</button></div></div></div></div>`);
};
}
});
const _sfc_setup = _sfc_main.setup;
_sfc_main.setup = (props, ctx) => {
const ssrContext = useSSRContext();
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/serviceconfig.vue");
return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
};
const serviceconfig = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-8f55f9ae"]]);
export { serviceconfig as default };
//# sourceMappingURL=serviceconfig-qwLggDKS.mjs.map

1
apps/admin/.output/server/chunks/build/serviceconfig-qwLggDKS.mjs.map

@ -1 +0,0 @@
{"version":3,"file":"serviceconfig-qwLggDKS.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/serviceconfig-qwLggDKS.js"],"names":[],"mappings":"","x_google_ignoreList":[0]}

8
apps/admin/.output/server/chunks/build/serviceconfig-styles.BE2TPkT0.mjs

@ -0,0 +1,8 @@
const serviceconfig_vue_vue_type_style_index_0_scoped_97419e3c_lang = ".svc-item[data-v-97419e3c]{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:10px;border:1px solid #eef2f7;background:#fff;cursor:pointer;transition:all .15s}.svc-item[data-v-97419e3c]:hover{border-color:#c7d2fe;background:#f5f3ff}.svc-item.active[data-v-97419e3c]{border-color:#6366f1;background:linear-gradient(135deg,#eef2ff,#f5f3ff);box-shadow:0 4px 12px #6366f11f}.svc-logo[data-v-97419e3c]{width:36px;height:36px;border-radius:9px;display:flex;align-items:center;justify-content:center;font-size:16px;flex-shrink:0;color:#fff;font-weight:700}.cat-chip[data-v-97419e3c]{font-weight:700;padding:2px 7px}.cat-chip[data-v-97419e3c],.lock-badge[data-v-97419e3c]{display:inline-flex;font-size:10px;border-radius:6px}.lock-badge[data-v-97419e3c]{align-items:center;gap:3px;font-weight:600;padding:1px 7px;background:#fef2f2;color:#dc2626}.inherit-badge[data-v-97419e3c]{background:#f1f5f9;color:#94a3b8}.inherit-badge[data-v-97419e3c],.override-badge[data-v-97419e3c]{font-size:10px;font-weight:600;padding:1px 7px;border-radius:6px}.override-badge[data-v-97419e3c]{background:#fef3c7;color:#b45309}.field-input[data-v-97419e3c]{border:1px solid #e2e8f0;border-radius:7px;padding:5px 9px;font-size:12.5px;font-family:SF Mono,Menlo,monospace;width:100%}.field-input[data-v-97419e3c]:focus{border-color:#6366f1;box-shadow:0 0 0 3px #6366f11a;outline:none}.sync-overlay[data-v-97419e3c]{position:fixed;inset:0;background:#0f172a73;z-index:100;display:flex;align-items:center;justify-content:center;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.sync-box[data-v-97419e3c]{background:#fff;border-radius:20px;padding:28px;width:520px;max-width:95vw;box-shadow:0 24px 80px #0000002e}.sync-region-grid[data-v-97419e3c]{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:14px 0}.sync-region-item[data-v-97419e3c]{display:flex;align-items:center;gap:7px;padding:8px 10px;border-radius:9px;border:1.5px solid #e2e8f0;cursor:pointer;transition:all .15s;font-size:13px;font-weight:500;color:#475569}.sync-region-item[data-v-97419e3c]:hover{border-color:#c7d2fe;background:#f5f3ff}.sync-region-item.checked[data-v-97419e3c]{border-color:#6366f1;background:#eef2ff;color:#4338ca}";
const serviceconfigStyles_BE2TPkT0 = [
serviceconfig_vue_vue_type_style_index_0_scoped_97419e3c_lang
];
export { serviceconfigStyles_BE2TPkT0 as default };
//# sourceMappingURL=serviceconfig-styles.BE2TPkT0.mjs.map

1
apps/admin/.output/server/chunks/build/serviceconfig-styles.BE2TPkT0.mjs.map

@ -0,0 +1 @@
{"version":3,"file":"serviceconfig-styles.BE2TPkT0.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/serviceconfig-styles-1.mjs-C3NfMX4J.js","../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/serviceconfig-styles.BE2TPkT0.mjs"],"names":["style_0"],"mappings":"","x_google_ignoreList":[0,1]}

8
apps/admin/.output/server/chunks/build/serviceconfig-styles.xUAQG0GO.mjs

@ -1,8 +0,0 @@
const serviceconfig_vue_vue_type_style_index_0_scoped_8f55f9ae_lang = ".svc-item[data-v-8f55f9ae]{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:10px;border:1px solid #eef2f7;background:#fff;cursor:pointer;transition:all .15s}.svc-item[data-v-8f55f9ae]:hover{border-color:#c7d2fe;background:#f5f3ff}.svc-item.active[data-v-8f55f9ae]{border-color:#6366f1;background:linear-gradient(135deg,#eef2ff,#f5f3ff);box-shadow:0 4px 12px #6366f11f}.svc-logo[data-v-8f55f9ae]{width:36px;height:36px;border-radius:9px;display:flex;align-items:center;justify-content:center;font-size:16px;flex-shrink:0;color:#fff;font-weight:700}.cat-chip[data-v-8f55f9ae]{font-weight:700;padding:2px 7px}.cat-chip[data-v-8f55f9ae],.lock-badge[data-v-8f55f9ae]{display:inline-flex;font-size:10px;border-radius:6px}.lock-badge[data-v-8f55f9ae]{align-items:center;gap:3px;font-weight:600;padding:1px 7px;background:#fef2f2;color:#dc2626}.inherit-badge[data-v-8f55f9ae]{background:#f1f5f9;color:#94a3b8}.inherit-badge[data-v-8f55f9ae],.override-badge[data-v-8f55f9ae]{font-size:10px;font-weight:600;padding:1px 7px;border-radius:6px}.override-badge[data-v-8f55f9ae]{background:#fef3c7;color:#b45309}.field-input[data-v-8f55f9ae]{border:1px solid #e2e8f0;border-radius:7px;padding:5px 9px;font-size:12.5px;font-family:SF Mono,Menlo,monospace;width:100%}.field-input[data-v-8f55f9ae]:focus{border-color:#6366f1;box-shadow:0 0 0 3px #6366f11a;outline:none}.sync-overlay[data-v-8f55f9ae]{position:fixed;inset:0;background:#0f172a73;z-index:100;display:flex;align-items:center;justify-content:center;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.sync-box[data-v-8f55f9ae]{background:#fff;border-radius:20px;padding:28px;width:520px;max-width:95vw;box-shadow:0 24px 80px #0000002e}.sync-region-grid[data-v-8f55f9ae]{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:14px 0}.sync-region-item[data-v-8f55f9ae]{display:flex;align-items:center;gap:7px;padding:8px 10px;border-radius:9px;border:1.5px solid #e2e8f0;cursor:pointer;transition:all .15s;font-size:13px;font-weight:500;color:#475569}.sync-region-item[data-v-8f55f9ae]:hover{border-color:#c7d2fe;background:#f5f3ff}.sync-region-item.checked[data-v-8f55f9ae]{border-color:#6366f1;background:#eef2ff;color:#4338ca}";
const serviceconfigStyles_xUAQG0GO = [
serviceconfig_vue_vue_type_style_index_0_scoped_8f55f9ae_lang
];
export { serviceconfigStyles_xUAQG0GO as default };
//# sourceMappingURL=serviceconfig-styles.xUAQG0GO.mjs.map

1
apps/admin/.output/server/chunks/build/serviceconfig-styles.xUAQG0GO.mjs.map

@ -1 +0,0 @@
{"version":3,"file":"serviceconfig-styles.xUAQG0GO.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/serviceconfig-styles-1.mjs-00PjZ_x3.js","../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/serviceconfig-styles.xUAQG0GO.mjs"],"names":["style_0"],"mappings":"","x_google_ignoreList":[0,1]}

4
apps/admin/.output/server/chunks/build/styles.mjs

@ -4,9 +4,9 @@ const styles = {
"../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/components/error-500.vue": () => import('./error-500-styles.CsxdYB__.mjs').then(interopDefault), "../node_modules/.pnpm/nuxt@4.4.8_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_25b4a4016600149c0331b87503aafc6b/node_modules/nuxt/dist/app/components/error-500.vue": () => import('./error-500-styles.CsxdYB__.mjs').then(interopDefault),
"pages/accounts.vue": () => import('./accounts-styles.DcThijbg.mjs').then(interopDefault), "pages/accounts.vue": () => import('./accounts-styles.DcThijbg.mjs').then(interopDefault),
"pages/dashboard.vue": () => import('./dashboard-styles.YHe4qmhV.mjs').then(interopDefault), "pages/dashboard.vue": () => import('./dashboard-styles.YHe4qmhV.mjs').then(interopDefault),
"pages/calltranslate.vue": () => import('./calltranslate-styles.DWMho6ro.mjs').then(interopDefault), "pages/calltranslate.vue": () => import('./calltranslate-styles.hpAJUqsK.mjs').then(interopDefault),
"pages/serviceconfig.vue": () => import('./serviceconfig-styles.BE2TPkT0.mjs').then(interopDefault),
"pages/statlog.vue": () => import('./statlog-styles.CjrRv6cK.mjs').then(interopDefault), "pages/statlog.vue": () => import('./statlog-styles.CjrRv6cK.mjs').then(interopDefault),
"pages/serviceconfig.vue": () => import('./serviceconfig-styles.xUAQG0GO.mjs').then(interopDefault),
"pages/index.vue": () => import('./index-styles.DNbAzSQY.mjs').then(interopDefault) "pages/index.vue": () => import('./index-styles.DNbAzSQY.mjs').then(interopDefault)
}; };

306
apps/admin/.output/server/chunks/nitro/nitro.mjs

@ -4028,7 +4028,7 @@ function _expandFromEnv(value) {
const _inlineRuntimeConfig = { const _inlineRuntimeConfig = {
"app": { "app": {
"baseURL": "/", "baseURL": "/",
"buildId": "045d42c9-2405-4f35-94e4-c42d64239a40", "buildId": "ec4737f4-4bc1-4016-bf94-c7164a1b5e0d",
"buildAssetsDir": "/_nuxt/", "buildAssetsDir": "/_nuxt/",
"cdnURL": "" "cdnURL": ""
}, },
@ -4507,250 +4507,250 @@ const plugins = [
]; ];
const assets = { const assets = {
"/_nuxt/32YvkCVR.js": { "/_nuxt/0ubqzWuP.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"3234-bXKgqBilmkElMA/MePq2MA2s+so\"", "etag": "\"1611-NJtK+FtGY/OjLuTfKBMbZcXHTuo\"",
"mtime": "2026-06-25T01:28:33.764Z", "mtime": "2026-06-25T01:39:26.597Z",
"size": 12852, "size": 5649,
"path": "../public/_nuxt/32YvkCVR.js" "path": "../public/_nuxt/0ubqzWuP.js"
}, },
"/_nuxt/6DMNcPyq.js": { "/_nuxt/6n4fu-B8.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"b1f-hwxeMUNthrrneav7UOwx55972SU\"", "etag": "\"4d94-Ur2eKyG15WO5tYLpGPXvxHpyMcE\"",
"mtime": "2026-06-25T01:28:33.764Z", "mtime": "2026-06-25T01:39:26.597Z",
"size": 2847, "size": 19860,
"path": "../public/_nuxt/6DMNcPyq.js" "path": "../public/_nuxt/6n4fu-B8.js"
}, },
"/_nuxt/8EvkM1NE.js": { "/_nuxt/B3ns_poC.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"146-QXGGROynha0gEuza2pOEAzpMxbw\"", "etag": "\"2295-PMgh2mADEJR/BevxX/ITAVFodvM\"",
"mtime": "2026-06-25T01:28:33.764Z", "mtime": "2026-06-25T01:39:26.597Z",
"size": 326, "size": 8853,
"path": "../public/_nuxt/8EvkM1NE.js" "path": "../public/_nuxt/B3ns_poC.js"
}, },
"/_nuxt/BQLsZkMR.js": { "/_nuxt/96IDI_OR.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"3564-UblI3lstgyQYJoCoi4JplOLxgd8\"", "etag": "\"305cb-0bPiiBoGoawqkW9Nju3lcN2m+GU\"",
"mtime": "2026-06-25T01:28:33.764Z", "mtime": "2026-06-25T01:39:26.597Z",
"size": 13668, "size": 198091,
"path": "../public/_nuxt/BQLsZkMR.js" "path": "../public/_nuxt/96IDI_OR.js"
}, },
"/_nuxt/BkAHROeN.js": { "/_nuxt/BMr4oSI7.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"df-OiGVDrBdBsls+9F7xy1NYmM4300\"", "etag": "\"3564-jDcFGhHAeu7dtV2giWo+AHDQSrM\"",
"mtime": "2026-06-25T01:28:33.764Z", "mtime": "2026-06-25T01:39:26.597Z",
"size": 223, "size": 13668,
"path": "../public/_nuxt/BkAHROeN.js" "path": "../public/_nuxt/BMr4oSI7.js"
}, },
"/_nuxt/Bf7wQIBL.js": { "/_nuxt/BL6E8nSe.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"2295-kiOE8vEXXRSyhB8OEE+1V4sHHG4\"", "etag": "\"51e6-STqtr1qjErb63aV1Iu41TmLv7qs\"",
"mtime": "2026-06-25T01:28:33.764Z", "mtime": "2026-06-25T01:39:26.597Z",
"size": 8853, "size": 20966,
"path": "../public/_nuxt/Bf7wQIBL.js" "path": "../public/_nuxt/BL6E8nSe.js"
}, },
"/_nuxt/BzpN2JeG.js": { "/_nuxt/BbBrUj30.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"d96-OCKk43odFU6NHVP9Y2fV8SSG++g\"", "etag": "\"d96-6PS0ovNNawnfrEx/31cK8WhCdKA\"",
"mtime": "2026-06-25T01:28:33.764Z", "mtime": "2026-06-25T01:39:26.597Z",
"size": 3478, "size": 3478,
"path": "../public/_nuxt/BzpN2JeG.js" "path": "../public/_nuxt/BbBrUj30.js"
}, },
"/_nuxt/C6_DfsT-.js": { "/_nuxt/BbMitk9t.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"50cf-mfIMwc6124lKgAMVHv1zCWYjWN0\"", "etag": "\"34a9-05UJZhVE1CX+QmlnLRT80QGX28o\"",
"mtime": "2026-06-25T01:28:33.764Z", "mtime": "2026-06-25T01:39:26.597Z",
"size": 20687, "size": 13481,
"path": "../public/_nuxt/C6_DfsT-.js" "path": "../public/_nuxt/BbMitk9t.js"
}, },
"/_nuxt/CAJrjOWz.js": { "/_nuxt/BlypHpHg.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"233e-kZd9wsFNgS+GIAAAk2IJaVL4LzE\"", "etag": "\"ecf-NiGHRzYY0WKA8iOmW3zWQnYXwtU\"",
"mtime": "2026-06-25T01:28:33.764Z", "mtime": "2026-06-25T01:39:26.597Z",
"size": 9022, "size": 3791,
"path": "../public/_nuxt/CAJrjOWz.js" "path": "../public/_nuxt/BlypHpHg.js"
}, },
"/_nuxt/CGKG3oBs.js": { "/_nuxt/C5ETpaZb.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"3ad0-D2tcrBCZU/lLf6EpcYIK/spPwk4\"", "etag": "\"146-+L0rpIYNz9s2TqNscwUZEw89SXA\"",
"mtime": "2026-06-25T01:28:33.765Z", "mtime": "2026-06-25T01:39:26.597Z",
"size": 15056, "size": 326,
"path": "../public/_nuxt/CGKG3oBs.js" "path": "../public/_nuxt/C5ETpaZb.js"
}, },
"/_nuxt/CIcxEwNZ.js": { "/_nuxt/CACbmIlS.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"33c6-bgvckaVzEKRD5wzmzYa9+cOMau0\"", "etag": "\"3ad0-S5P0RI+nOXRBXYrEypVLhE0LslY\"",
"mtime": "2026-06-25T01:28:33.764Z", "mtime": "2026-06-25T01:39:26.597Z",
"size": 13254, "size": 15056,
"path": "../public/_nuxt/CIcxEwNZ.js" "path": "../public/_nuxt/CACbmIlS.js"
}, },
"/_nuxt/CQ70mTiW.js": { "/_nuxt/CVUxyiJx.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"376-OKRRVEdMraYEfhBH+2PqBJUKQ4I\"", "etag": "\"376-jFv2GvQLeolwRTwo7gGgYJ74HMg\"",
"mtime": "2026-06-25T01:28:33.764Z", "mtime": "2026-06-25T01:39:26.597Z",
"size": 886, "size": 886,
"path": "../public/_nuxt/CQ70mTiW.js" "path": "../public/_nuxt/CVUxyiJx.js"
}, },
"/_nuxt/CWxjl6OD.js": { "/_nuxt/D6jD5keW.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"1ba8-75CwdbOqmI0hg0P0H9qkBlXGZQ0\"", "etag": "\"78e9-tAnjdBdd57a76wKXwHjWnBjunVg\"",
"mtime": "2026-06-25T01:28:33.764Z", "mtime": "2026-06-25T01:39:26.597Z",
"size": 7080, "size": 30953,
"path": "../public/_nuxt/CWxjl6OD.js" "path": "../public/_nuxt/D6jD5keW.js"
},
"/_nuxt/DGXiXcCA.js": {
"type": "text/javascript; charset=utf-8",
"etag": "\"2513-TESLiku/FgVjRz8sXxAj4waHLFk\"",
"mtime": "2026-06-25T01:39:26.597Z",
"size": 9491,
"path": "../public/_nuxt/DGXiXcCA.js"
}, },
"/_nuxt/CWcpm1jv.js": { "/_nuxt/DN5T-G_F.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"3eb-AsDnGvWkYRglL+bwUAJJZEl5oAw\"", "etag": "\"233e-9JIJlYLUd1C+LdRHl4WnvE5FdQ8\"",
"mtime": "2026-06-25T01:28:33.765Z", "mtime": "2026-06-25T01:39:26.598Z",
"size": 9022,
"path": "../public/_nuxt/DN5T-G_F.js"
},
"/_nuxt/Do83zqYq.js": {
"type": "text/javascript; charset=utf-8",
"etag": "\"3eb-Rres40ndJvf0bHE1dUhg5C2pR+s\"",
"mtime": "2026-06-25T01:39:26.597Z",
"size": 1003, "size": 1003,
"path": "../public/_nuxt/CWcpm1jv.js" "path": "../public/_nuxt/Do83zqYq.js"
}, },
"/_nuxt/CvD6yA6H.js": { "/_nuxt/Dqy3UYuS.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"ecf-EOuTIewgbb7momWZNHzO/pIlbFs\"", "etag": "\"3234-qlV+5KeHAWqL8OG50mLV3jyZzqo\"",
"mtime": "2026-06-25T01:28:33.765Z", "mtime": "2026-06-25T01:39:26.598Z",
"size": 3791, "size": 12852,
"path": "../public/_nuxt/CvD6yA6H.js" "path": "../public/_nuxt/Dqy3UYuS.js"
}, },
"/_nuxt/DogYBohj.js": { "/_nuxt/DrdHHbY3.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"2513-4jGkpSEavQ9usU8MAgQ1X+KNDVk\"", "etag": "\"df-CuexHiXptYYgOaLuCIRCcFMX2zM\"",
"mtime": "2026-06-25T01:28:33.765Z", "mtime": "2026-06-25T01:39:26.598Z",
"size": 9491, "size": 223,
"path": "../public/_nuxt/DogYBohj.js" "path": "../public/_nuxt/DrdHHbY3.js"
}, },
"/_nuxt/DhCGnUi5.js": { "/_nuxt/Dw5yL0ut.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"1611-hA8GcbQd7gqQF/JFYl649AlUXBk\"", "etag": "\"22d8-hdTtk/u5IsEMku+VuI4mp6ZaRqQ\"",
"mtime": "2026-06-25T01:28:33.765Z", "mtime": "2026-06-25T01:39:26.598Z",
"size": 5649, "size": 8920,
"path": "../public/_nuxt/DhCGnUi5.js" "path": "../public/_nuxt/Dw5yL0ut.js"
}, },
"/_nuxt/DrH4uMNH.js": { "/_nuxt/KP2C5FJ6.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"37d2-rFiYY/5+GIsAcPUbGgTiqcBraf0\"", "etag": "\"1bc9-gBkkjU3++G1LcjMsW2lVnFHcDBg\"",
"mtime": "2026-06-25T01:28:33.765Z", "mtime": "2026-06-25T01:39:26.598Z",
"size": 14290, "size": 7113,
"path": "../public/_nuxt/DrH4uMNH.js" "path": "../public/_nuxt/KP2C5FJ6.js"
}, },
"/_nuxt/DD_13xZ1.js": { "/_nuxt/RqmPeXlN.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"78e9-kd4A6BOJKmyVim73xWl5JTaJfSs\"", "etag": "\"b1f-aUmjQshAzi8AbJFWqTD3I45mzUw\"",
"mtime": "2026-06-25T01:28:33.765Z", "mtime": "2026-06-25T01:39:26.598Z",
"size": 30953, "size": 2847,
"path": "../public/_nuxt/DD_13xZ1.js" "path": "../public/_nuxt/RqmPeXlN.js"
}, },
"/_nuxt/calltranslate.D9zILOgL.css": { "/_nuxt/accounts.B82323Fi.css": {
"type": "text/css; charset=utf-8", "type": "text/css; charset=utf-8",
"etag": "\"7c0-lXxMvZGxvVMovDPIRbJXblgZcm0\"", "etag": "\"13a-mzJS441x0wGTsgz4daDQ79c5Lbo\"",
"mtime": "2026-06-25T01:28:33.765Z", "mtime": "2026-06-25T01:39:26.598Z",
"size": 314,
"path": "../public/_nuxt/accounts.B82323Fi.css"
},
"/_nuxt/calltranslate.B6r4Q8-j.css": {
"type": "text/css; charset=utf-8",
"etag": "\"7c0-LDUB4mw4IKhmqlvV7wB3+fRNPTQ\"",
"mtime": "2026-06-25T01:39:26.598Z",
"size": 1984, "size": 1984,
"path": "../public/_nuxt/calltranslate.D9zILOgL.css" "path": "../public/_nuxt/calltranslate.B6r4Q8-j.css"
}, },
"/_nuxt/dashboard.DGy90zSJ.css": { "/_nuxt/dashboard.DGy90zSJ.css": {
"type": "text/css; charset=utf-8", "type": "text/css; charset=utf-8",
"etag": "\"ec6-TytBX035QiuofO2ksVPlVT4zWOI\"", "etag": "\"ec6-TytBX035QiuofO2ksVPlVT4zWOI\"",
"mtime": "2026-06-25T01:28:33.765Z", "mtime": "2026-06-25T01:39:26.598Z",
"size": 3782, "size": 3782,
"path": "../public/_nuxt/dashboard.DGy90zSJ.css" "path": "../public/_nuxt/dashboard.DGy90zSJ.css"
}, },
"/_nuxt/error-404.Dm-MYrAh.css": { "/_nuxt/dltdoXck.js": {
"type": "text/css; charset=utf-8",
"etag": "\"97e-/v6mv+rmcBtKGiHr88cRdQNod1s\"",
"mtime": "2026-06-25T01:28:33.766Z",
"size": 2430,
"path": "../public/_nuxt/error-404.Dm-MYrAh.css"
},
"/_nuxt/G648dITK.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"1bc9-Q3LXif6eQACOReQvqM2aw7QVXbU\"", "etag": "\"190f-WsXvKS4FhFd2tNwlEhOwarWp1u0\"",
"mtime": "2026-06-25T01:28:33.765Z", "mtime": "2026-06-25T01:39:26.598Z",
"size": 7113, "size": 6415,
"path": "../public/_nuxt/G648dITK.js" "path": "../public/_nuxt/dltdoXck.js"
}, },
"/_nuxt/entry.DS97S_sV.css": { "/_nuxt/entry.DS97S_sV.css": {
"type": "text/css; charset=utf-8", "type": "text/css; charset=utf-8",
"etag": "\"15dfd-BUmwhUuoqXeMkq7bZQ+9+koVfKY\"", "etag": "\"15dfd-BUmwhUuoqXeMkq7bZQ+9+koVfKY\"",
"mtime": "2026-06-25T01:28:33.765Z", "mtime": "2026-06-25T01:39:26.598Z",
"size": 89597, "size": 89597,
"path": "../public/_nuxt/entry.DS97S_sV.css" "path": "../public/_nuxt/entry.DS97S_sV.css"
}, },
"/_nuxt/accounts.B82323Fi.css": { "/_nuxt/error-404.Dm-MYrAh.css": {
"type": "text/css; charset=utf-8", "type": "text/css; charset=utf-8",
"etag": "\"13a-mzJS441x0wGTsgz4daDQ79c5Lbo\"", "etag": "\"97e-/v6mv+rmcBtKGiHr88cRdQNod1s\"",
"mtime": "2026-06-25T01:28:33.765Z", "mtime": "2026-06-25T01:39:26.598Z",
"size": 314, "size": 2430,
"path": "../public/_nuxt/accounts.B82323Fi.css" "path": "../public/_nuxt/error-404.Dm-MYrAh.css"
}, },
"/_nuxt/error-500.DM8oqBl3.css": { "/_nuxt/error-500.DM8oqBl3.css": {
"type": "text/css; charset=utf-8", "type": "text/css; charset=utf-8",
"etag": "\"773-fnDg7l3rvJ5f8Hx4TwZqMlSCEdI\"", "etag": "\"773-fnDg7l3rvJ5f8Hx4TwZqMlSCEdI\"",
"mtime": "2026-06-25T01:28:33.765Z", "mtime": "2026-06-25T01:39:26.598Z",
"size": 1907, "size": 1907,
"path": "../public/_nuxt/error-500.DM8oqBl3.css" "path": "../public/_nuxt/error-500.DM8oqBl3.css"
}, },
"/_nuxt/index.4nAkFRy2.css": { "/_nuxt/index.4nAkFRy2.css": {
"type": "text/css; charset=utf-8", "type": "text/css; charset=utf-8",
"etag": "\"9bb-oLx1eNvSlE3Mf6e/ODXe5npQc6w\"", "etag": "\"9bb-oLx1eNvSlE3Mf6e/ODXe5npQc6w\"",
"mtime": "2026-06-25T01:28:33.765Z", "mtime": "2026-06-25T01:39:26.598Z",
"size": 2491, "size": 2491,
"path": "../public/_nuxt/index.4nAkFRy2.css" "path": "../public/_nuxt/index.4nAkFRy2.css"
}, },
"/_nuxt/fDZAM7sq.js": { "/_nuxt/p0Tfj-xC.js": {
"type": "text/javascript; charset=utf-8",
"etag": "\"190f-M1p/opWywlyfgAkzGEZWNwBmsow\"",
"mtime": "2026-06-25T01:28:33.766Z",
"size": 6415,
"path": "../public/_nuxt/fDZAM7sq.js"
},
"/_nuxt/qq1ArTA8.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"22d8-zxlFm+iFp2bakQ4voH0bd5i2jdI\"", "etag": "\"37d2-BUA1Qi3EKiMfELBYIEQ4MydXa4Y\"",
"mtime": "2026-06-25T01:28:33.766Z", "mtime": "2026-06-25T01:39:26.598Z",
"size": 8920, "size": 14290,
"path": "../public/_nuxt/qq1ArTA8.js" "path": "../public/_nuxt/p0Tfj-xC.js"
}, },
"/_nuxt/serviceconfig.GtXqs6_A.css": { "/_nuxt/serviceconfig.htjoqj-Q.css": {
"type": "text/css; charset=utf-8", "type": "text/css; charset=utf-8",
"etag": "\"8a6-XBG5NN7jciA31kw+nogRu2Zui3A\"", "etag": "\"8a6-TUyHZJ9oBNNUIbGGIlcB8k8oEn4\"",
"mtime": "2026-06-25T01:28:33.766Z", "mtime": "2026-06-25T01:39:26.598Z",
"size": 2214, "size": 2214,
"path": "../public/_nuxt/serviceconfig.GtXqs6_A.css" "path": "../public/_nuxt/serviceconfig.htjoqj-Q.css"
}, },
"/_nuxt/statlog.C1q_3yEh.css": { "/_nuxt/statlog.C1q_3yEh.css": {
"type": "text/css; charset=utf-8", "type": "text/css; charset=utf-8",
"etag": "\"4f1-raISk2zkJ3RyYjmALXSajiW6ngA\"", "etag": "\"4f1-raISk2zkJ3RyYjmALXSajiW6ngA\"",
"mtime": "2026-06-25T01:28:33.766Z", "mtime": "2026-06-25T01:39:26.598Z",
"size": 1265, "size": 1265,
"path": "../public/_nuxt/statlog.C1q_3yEh.css" "path": "../public/_nuxt/statlog.C1q_3yEh.css"
}, },
"/_nuxt/yy0tqe-M.js": { "/_nuxt/v5y5DMRc.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"4d94-+OjIM3+qChYtv6wxIwem2Zs6al8\"", "etag": "\"1ba8-aStS+EiA2yXev0LDRjHdVNQueQA\"",
"mtime": "2026-06-25T01:28:33.766Z", "mtime": "2026-06-25T01:39:26.599Z",
"size": 19860, "size": 7080,
"path": "../public/_nuxt/yy0tqe-M.js" "path": "../public/_nuxt/v5y5DMRc.js"
}, },
"/_nuxt/builds/latest.json": { "/_nuxt/builds/latest.json": {
"type": "application/json", "type": "application/json",
"etag": "\"47-Uq8Kf0sXxh7kuoV4jnOTXZ8fV4E\"", "etag": "\"47-n3EeWDbZl3NMydDTuAIuw1Q4yAA\"",
"mtime": "2026-06-25T01:28:33.758Z", "mtime": "2026-06-25T01:39:26.589Z",
"size": 71, "size": 71,
"path": "../public/_nuxt/builds/latest.json" "path": "../public/_nuxt/builds/latest.json"
}, },
"/_nuxt/builds/meta/045d42c9-2405-4f35-94e4-c42d64239a40.json": { "/_nuxt/builds/meta/ec4737f4-4bc1-4016-bf94-c7164a1b5e0d.json": {
"type": "application/json", "type": "application/json",
"etag": "\"58-scdMzA+0CbhLzwF3Zwuu1NMBs1Y\"", "etag": "\"58-MzelL3GJIiHqWycQNcJjZUNTqlw\"",
"mtime": "2026-06-25T01:28:33.754Z", "mtime": "2026-06-25T01:39:26.586Z",
"size": 88, "size": 88,
"path": "../public/_nuxt/builds/meta/045d42c9-2405-4f35-94e4-c42d64239a40.json" "path": "../public/_nuxt/builds/meta/ec4737f4-4bc1-4016-bf94-c7164a1b5e0d.json"
},
"/_nuxt/ydFS6PsN.js": {
"type": "text/javascript; charset=utf-8",
"etag": "\"305cb-7AEJqmdmuCS5DjKzJstZz9lLxj0\"",
"mtime": "2026-06-25T01:28:33.766Z",
"size": 198091,
"path": "../public/_nuxt/ydFS6PsN.js"
} }
}; };

12
apps/admin/app/pages/calltranslate.vue

@ -1,5 +1,8 @@
<template> <template>
<div> <div>
<div v-if="!backendReady" class="mb-4 rounded-lg px-4 py-3 text-sm" style="background:#fffbeb;border:1px solid #fde68a;color:#92400e">
⚠ 「通话翻译配置」的后端接口尚未迁移到当前 console 服务,功能暂不可用。
</div>
<!-- 顶部 --> <!-- 顶部 -->
<div class="flex items-center justify-between mb-5"> <div class="flex items-center justify-between mb-5">
<div> <div>
@ -241,6 +244,7 @@ const SCAT_AST = 4
const { webApi } = useApi() const { webApi } = useApi()
const { success, error } = useToast() const { success, error } = useToast()
const backendReady = ref(true)
const allSvcs = ref<SvcConfig[]>([]) const allSvcs = ref<SvcConfig[]>([])
const pairs = ref<Pair[]>([]) const pairs = ref<Pair[]>([])
const curRegion = ref<number>(REGIONS.length ? REGIONS[0].value : 1) const curRegion = ref<number>(REGIONS.length ? REGIONS[0].value : 1)
@ -266,8 +270,8 @@ async function loadSvcList() {
try { try {
const data = await webApi<{ items: SvcConfig[] }>('getsvcconfigs', {}) const data = await webApi<{ items: SvcConfig[] }>('getsvcconfigs', {})
allSvcs.value = data?.items ?? [] allSvcs.value = data?.items ?? []
} catch (e: any) { } catch {
error(e?.message ?? '加载服务列表失败') backendReady.value = false
allSvcs.value = [] allSvcs.value = []
} }
} }
@ -276,8 +280,8 @@ async function loadPairs() {
try { try {
const data = await webApi<{ items: Pair[] }>('getcalltranslatepairs', { region: curRegion.value }) const data = await webApi<{ items: Pair[] }>('getcalltranslatepairs', { region: curRegion.value })
pairs.value = data?.items ?? [] pairs.value = data?.items ?? []
} catch (e: any) { } catch {
error(e?.message ?? '加载失败') backendReady.value = false
pairs.value = [] pairs.value = []
} }
} }

10
apps/admin/app/pages/serviceconfig.vue

@ -1,5 +1,8 @@
<template> <template>
<div> <div>
<div v-if="!backendReady" class="mb-4 rounded-lg px-4 py-3 text-sm" style="background:#fffbeb;border:1px solid #fde68a;color:#92400e">
⚠ 「依赖服务配置」的后端接口尚未迁移到当前 console 服务,功能暂不可用。
</div>
<!-- 顶部 --> <!-- 顶部 -->
<div class="flex items-center justify-between mb-5"> <div class="flex items-center justify-between mb-5">
<div> <div>
@ -358,6 +361,7 @@ function encCount(s: ThirdSvcConfig): number {
} }
// ===== 状态 ===== // ===== 状态 =====
const backendReady = ref(true)
const allSvcs = ref<ThirdSvcConfig[]>([]) const allSvcs = ref<ThirdSvcConfig[]>([])
const curSvc = ref<ThirdSvcConfig | null>(null) const curSvc = ref<ThirdSvcConfig | null>(null)
const curRegion = ref(0) const curRegion = ref(0)
@ -382,8 +386,10 @@ async function loadSvcs() {
try { try {
const data = await webApi<{ items: ThirdSvcConfig[] }>('getsvcconfigs', {}) const data = await webApi<{ items: ThirdSvcConfig[] }>('getsvcconfigs', {})
allSvcs.value = data?.items ?? [] allSvcs.value = data?.items ?? []
} catch (e: any) { backendReady.value = true
error(e?.message ?? '加载失败') } catch {
backendReady.value = false
allSvcs.value = []
return return
} }
// 若有选中服务,刷新详情 // 若有选中服务,刷新详情

2
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/DhCGnUi5.js → apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/0ubqzWuP.js

File diff suppressed because one or more lines are too long

2
apps/admin/.output/public/_nuxt/yy0tqe-M.js → apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/6n4fu-B8.js

File diff suppressed because one or more lines are too long

4
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/ydFS6PsN.js → apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/96IDI_OR.js

File diff suppressed because one or more lines are too long

2
apps/admin/.output/public/_nuxt/Bf7wQIBL.js → apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/B3ns_poC.js

File diff suppressed because one or more lines are too long

1
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/BL6E8nSe.js

File diff suppressed because one or more lines are too long

2
apps/admin/.output/public/_nuxt/BQLsZkMR.js → apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/BMr4oSI7.js

File diff suppressed because one or more lines are too long

2
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/BzpN2JeG.js → apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/BbBrUj30.js

@ -1 +1 @@
import{_ as o,o as s,c as a,a as t,t as r}from"./ydFS6PsN.js";import{u as i}from"./8EvkM1NE.js";const u={class:"antialiased bg-white dark:bg-[#020420] dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-[#020420] tracking-wide"},c={class:"max-w-520px text-center"},l=["textContent"],d=["textContent"],p=["textContent"],f={__name:"error-500",props:{appName:{type:String,default:"Nuxt"},status:{type:Number,default:500},statusText:{type:String,default:"Internal server error"},description:{type:String,default:"This page is temporarily unavailable."},refresh:{type:String,default:"Refresh this page"}},setup(e){const n=e;return i({title:`${n.status} - ${n.statusText} | ${n.appName}`,script:[{innerHTML:`!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver(e=>{for(const o of e)if("childList"===o.type)for(const e of o.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)}).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;const r=function(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:'*,:after,:before{box-sizing:border-box;border-width:0;border-style:solid;border-color:var(--un-default-border-color,#e5e7eb)}:after,:before{--un-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}h1,h2{font-size:inherit;font-weight:inherit}h1,h2,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }'}]}),(h,m)=>(s(),a("div",u,[t("div",c,[t("h1",{class:"font-semibold leading-none mb-4 sm:text-[110px] tabular-nums text-[80px]",textContent:r(e.status)},null,8,l),t("h2",{class:"font-semibold mb-2 sm:text-3xl text-2xl",textContent:r(e.statusText)},null,8,d),t("p",{class:"mb-4 px-2 text-[#64748B] text-md",textContent:r(e.description)},null,8,p)])]))}},x=o(f,[["__scopeId","data-v-2c2ce9e3"]]);export{x as default}; import{_ as o,o as s,c as a,a as t,t as r}from"./96IDI_OR.js";import{u as i}from"./C5ETpaZb.js";const u={class:"antialiased bg-white dark:bg-[#020420] dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-[#020420] tracking-wide"},c={class:"max-w-520px text-center"},l=["textContent"],d=["textContent"],p=["textContent"],f={__name:"error-500",props:{appName:{type:String,default:"Nuxt"},status:{type:Number,default:500},statusText:{type:String,default:"Internal server error"},description:{type:String,default:"This page is temporarily unavailable."},refresh:{type:String,default:"Refresh this page"}},setup(e){const n=e;return i({title:`${n.status} - ${n.statusText} | ${n.appName}`,script:[{innerHTML:`!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver(e=>{for(const o of e)if("childList"===o.type)for(const e of o.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)}).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;const r=function(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:'*,:after,:before{box-sizing:border-box;border-width:0;border-style:solid;border-color:var(--un-default-border-color,#e5e7eb)}:after,:before{--un-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}h1,h2{font-size:inherit;font-weight:inherit}h1,h2,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }'}]}),(h,m)=>(s(),a("div",u,[t("div",c,[t("h1",{class:"font-semibold leading-none mb-4 sm:text-[110px] tabular-nums text-[80px]",textContent:r(e.status)},null,8,l),t("h2",{class:"font-semibold mb-2 sm:text-3xl text-2xl",textContent:r(e.statusText)},null,8,d),t("p",{class:"mb-4 px-2 text-[#64748B] text-md",textContent:r(e.description)},null,8,p)])]))}},x=o(f,[["__scopeId","data-v-2c2ce9e3"]]);export{x as default};

1
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/BbMitk9t.js

File diff suppressed because one or more lines are too long

2
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/CvD6yA6H.js → apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/BlypHpHg.js

@ -1 +1 @@
import{_ as s}from"./DhCGnUi5.js";import{_ as a,o as i,c as u,a as t,t as n,b as c,w as l,d}from"./ydFS6PsN.js";import{u as f}from"./8EvkM1NE.js";const p={class:"antialiased bg-white dark:bg-[#020420] dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-[#020420] tracking-wide"},m={class:"max-w-520px text-center"},h=["textContent"],b=["textContent"],x=["textContent"],g={class:"flex items-center justify-center w-full"},y={__name:"error-404",props:{appName:{type:String,default:"Nuxt"},status:{type:Number,default:404},statusText:{type:String,default:"Page not found"},description:{type:String,default:"Sorry, the page you are looking for could not be found."},backHome:{type:String,default:"Go back home"}},setup(e){const r=e;return f({title:`${r.status} - ${r.statusText} | ${r.appName}`,script:[{innerHTML:`!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver(e=>{for(const o of e)if("childList"===o.type)for(const e of o.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)}).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;const r=function(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:'*,:after,:before{box-sizing:border-box;border-width:0;border-style:solid;border-color:var(--un-default-border-color,#e5e7eb)}:after,:before{--un-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}h1,h2{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}h1,h2,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }'}]}),(k,_)=>{const o=s;return i(),u("div",p,[t("div",m,[t("h1",{class:"font-semibold leading-none mb-4 sm:text-[110px] tabular-nums text-[80px]",textContent:n(e.status)},null,8,h),t("h2",{class:"font-semibold mb-2 sm:text-3xl text-2xl",textContent:n(e.statusText)},null,8,b),t("p",{class:"mb-4 px-2 text-[#64748B] text-md",textContent:n(e.description)},null,8,x),t("div",g,[c(o,{to:"/",class:"font-medium hover:text-[#00DC82] text-sm underline underline-offset-3"},{default:l(()=>[d(n(e.backHome),1)]),_:1})])])])}}},z=a(y,[["__scopeId","data-v-52418c85"]]);export{z as default}; import{_ as s}from"./0ubqzWuP.js";import{_ as a,o as i,c as u,a as t,t as n,b as c,w as l,d}from"./96IDI_OR.js";import{u as f}from"./C5ETpaZb.js";const p={class:"antialiased bg-white dark:bg-[#020420] dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-[#020420] tracking-wide"},m={class:"max-w-520px text-center"},h=["textContent"],b=["textContent"],x=["textContent"],g={class:"flex items-center justify-center w-full"},y={__name:"error-404",props:{appName:{type:String,default:"Nuxt"},status:{type:Number,default:404},statusText:{type:String,default:"Page not found"},description:{type:String,default:"Sorry, the page you are looking for could not be found."},backHome:{type:String,default:"Go back home"}},setup(e){const r=e;return f({title:`${r.status} - ${r.statusText} | ${r.appName}`,script:[{innerHTML:`!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver(e=>{for(const o of e)if("childList"===o.type)for(const e of o.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)}).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;const r=function(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:'*,:after,:before{box-sizing:border-box;border-width:0;border-style:solid;border-color:var(--un-default-border-color,#e5e7eb)}:after,:before{--un-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}h1,h2{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}h1,h2,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }'}]}),(k,_)=>{const o=s;return i(),u("div",p,[t("div",m,[t("h1",{class:"font-semibold leading-none mb-4 sm:text-[110px] tabular-nums text-[80px]",textContent:n(e.status)},null,8,h),t("h2",{class:"font-semibold mb-2 sm:text-3xl text-2xl",textContent:n(e.statusText)},null,8,b),t("p",{class:"mb-4 px-2 text-[#64748B] text-md",textContent:n(e.description)},null,8,x),t("div",g,[c(o,{to:"/",class:"font-medium hover:text-[#00DC82] text-sm underline underline-offset-3"},{default:l(()=>[d(n(e.backHome),1)]),_:1})])])])}}},z=a(y,[["__scopeId","data-v-52418c85"]]);export{z as default};

2
apps/admin/.output/public/_nuxt/8EvkM1NE.js → apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/C5ETpaZb.js

@ -1 +1 @@
import{u as a,e as s,h as u,i as r,f as h}from"./ydFS6PsN.js";function i(t){const e=t||s();return e.ssrContext?.head||e.runWithContext(()=>{if(u()){const n=r(h);if(!n)throw new Error("[nuxt] [unhead] Missing Unhead instance.");return n}})}function d(t,e={}){const n=e.head||i(e.nuxt);return a(t,{head:n,...e})}export{d as u}; import{u as a,e as s,h as u,i as r,f as h}from"./96IDI_OR.js";function i(t){const e=t||s();return e.ssrContext?.head||e.runWithContext(()=>{if(u()){const n=r(h);if(!n)throw new Error("[nuxt] [unhead] Missing Unhead instance.");return n}})}function d(t,e={}){const n=e.head||i(e.nuxt);return a(t,{head:n,...e})}export{d as u};

1
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/C6_DfsT-.js

File diff suppressed because one or more lines are too long

2
apps/admin/.output/public/_nuxt/CGKG3oBs.js → apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/CACbmIlS.js

File diff suppressed because one or more lines are too long

1
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/CIcxEwNZ.js

File diff suppressed because one or more lines are too long

2
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/CQ70mTiW.js → apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/CVUxyiJx.js

@ -1 +1 @@
import{e as f,a3 as r,a4 as c}from"./ydFS6PsN.js";const p="$s";function l(...o){const n=typeof o[o.length-1]=="string"?o.pop():void 0;typeof o[0]!="string"&&o.unshift(n);const[e,t]=o;if(!e||typeof e!="string")throw new TypeError("[nuxt] [useState] key must be a string: "+e);if(t!==void 0&&typeof t!="function")throw new Error("[nuxt] [useState] init must be a function: "+t);const s=p+e,i=f(),u=r(i.payload.state,s);if(t&&(i._state[s]??={_default:t}),u.value===void 0&&t){const a=t();if(c(a))return i.payload.state[s]=a,a;u.value=a}return u}let y=0;function d(){const o=l("app:toasts",()=>[]);function n(e,t="info",s=3e3){const i=++y;o.value.push({id:i,type:t,msg:e}),s>0&&setTimeout(()=>{o.value=o.value.filter(u=>u.id!==i)},s)}return{toasts:o,toast:n,success:(e,t)=>n(e,"success",t),error:(e,t)=>n(e,"error",t),info:(e,t)=>n(e,"info",t),warn:(e,t)=>n(e,"warning",t)}}export{d as u}; import{e as f,a3 as r,a4 as c}from"./96IDI_OR.js";const p="$s";function l(...o){const n=typeof o[o.length-1]=="string"?o.pop():void 0;typeof o[0]!="string"&&o.unshift(n);const[e,t]=o;if(!e||typeof e!="string")throw new TypeError("[nuxt] [useState] key must be a string: "+e);if(t!==void 0&&typeof t!="function")throw new Error("[nuxt] [useState] init must be a function: "+t);const s=p+e,i=f(),u=r(i.payload.state,s);if(t&&(i._state[s]??={_default:t}),u.value===void 0&&t){const a=t();if(c(a))return i.payload.state[s]=a,a;u.value=a}return u}let y=0;function d(){const o=l("app:toasts",()=>[]);function n(e,t="info",s=3e3){const i=++y;o.value.push({id:i,type:t,msg:e}),s>0&&setTimeout(()=>{o.value=o.value.filter(u=>u.id!==i)},s)}return{toasts:o,toast:n,success:(e,t)=>n(e,"success",t),error:(e,t)=>n(e,"error",t),info:(e,t)=>n(e,"info",t),warn:(e,t)=>n(e,"warning",t)}}export{d as u};

2
apps/admin/.output/public/_nuxt/DD_13xZ1.js → apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/D6jD5keW.js

File diff suppressed because one or more lines are too long

2
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/DogYBohj.js → apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/DGXiXcCA.js

File diff suppressed because one or more lines are too long

2
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/CAJrjOWz.js → apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/DN5T-G_F.js

File diff suppressed because one or more lines are too long

2
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/CWcpm1jv.js → apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/Do83zqYq.js

@ -1 +1 @@
import{y as p,z as d}from"./ydFS6PsN.js";async function c(s,a,i){const r=p(),n=d(),t={"Content-Type":"application/json"};r.token&&(t.Authorization=r.token),i&&Object.assign(t,i);const o=await fetch(s,{method:"POST",headers:t,body:JSON.stringify(a)});if(!o.ok)throw new Error(`HTTP error: ${o.status}`);const e=await o.json();if(e.code===18)throw r.logout(),n.push("/"),new Error(e.msg||"Unauthorized");if(e.code!==0)throw new Error(e.msg||"Unknown error");return e.data}function h(){const s=p();async function a(n,t){const o={};return s.currentAppId&&(o["X-App-Id"]=String(s.currentAppId)),c(`/web/api/api_${n}`,t??{},o)}async function i(n,t){return c(`/console/api/${n}`,t??{})}async function r(n,t){const o=await a("getcostoken",{path:t}),e=o.upload_url||o.url||"",u=await fetch(e,{method:"PUT",headers:{"Content-Type":n.type||"application/octet-stream"},body:n});if(!u.ok)throw new Error(`Upload failed: ${u.status}`);return e.split("?")[0]}return{webApi:a,consoleApi:i,uploadFile:r}}export{h as u}; import{y as p,z as d}from"./96IDI_OR.js";async function c(s,a,i){const r=p(),n=d(),t={"Content-Type":"application/json"};r.token&&(t.Authorization=r.token),i&&Object.assign(t,i);const o=await fetch(s,{method:"POST",headers:t,body:JSON.stringify(a)});if(!o.ok)throw new Error(`HTTP error: ${o.status}`);const e=await o.json();if(e.code===18)throw r.logout(),n.push("/"),new Error(e.msg||"Unauthorized");if(e.code!==0)throw new Error(e.msg||"Unknown error");return e.data}function h(){const s=p();async function a(n,t){const o={};return s.currentAppId&&(o["X-App-Id"]=String(s.currentAppId)),c(`/web/api/api_${n}`,t??{},o)}async function i(n,t){return c(`/console/api/${n}`,t??{})}async function r(n,t){const o=await a("getcostoken",{path:t}),e=o.upload_url||o.url||"",u=await fetch(e,{method:"PUT",headers:{"Content-Type":n.type||"application/octet-stream"},body:n});if(!u.ok)throw new Error(`Upload failed: ${u.status}`);return e.split("?")[0]}return{webApi:a,consoleApi:i,uploadFile:r}}export{h as u};

2
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/32YvkCVR.js → apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/Dqy3UYuS.js

File diff suppressed because one or more lines are too long

2
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/BkAHROeN.js → apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/DrdHHbY3.js

@ -1 +1 @@
import{_ as t,o,c as s,I as c}from"./ydFS6PsN.js";const r={},a={class:"min-h-screen","data-theme":"corporate"};function n(e,_){return o(),s("div",a,[c(e.$slots,"default")])}const l=t(r,[["render",n]]);export{l as default}; import{_ as t,o,c as s,I as c}from"./96IDI_OR.js";const r={},a={class:"min-h-screen","data-theme":"corporate"};function n(e,_){return o(),s("div",a,[c(e.$slots,"default")])}const l=t(r,[["render",n]]);export{l as default};

2
apps/admin/.output/public/_nuxt/qq1ArTA8.js → apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/Dw5yL0ut.js

File diff suppressed because one or more lines are too long

2
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/G648dITK.js → apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/KP2C5FJ6.js

File diff suppressed because one or more lines are too long

2
apps/admin/.output/public/_nuxt/6DMNcPyq.js → apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/RqmPeXlN.js

@ -1 +1 @@
import{g as h,y as x,z as w,j as y,c as r,a as e,t as d,l as b,A as _,k as v,m as g,n as k,x as A,s as u,o as p,_ as M}from"./ydFS6PsN.js";const z={class:"login-bg flex items-center justify-center px-4"},B={class:"login-card"},C={class:"text-center"},S={style:{"font-size":"22px","font-weight":"700",color:"#0F172A",margin:"0 0 4px"}},T={key:0,class:"login-error show"},V={style:{width:"16px",height:"16px","flex-shrink":"0"},fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},j={style:{"margin-bottom":"16px"}},D={style:{"margin-bottom":"24px"}},q=h({__name:"index",setup(L){const a=x(),c=w(),o=A({account:"",password:""}),l=u(!1),n=u(""),m=u("Admin");y(async()=>{if(a.restore(),a.token){c.push("/dashboard");return}try{const t=(await $fetch("/web/api/api_getsiteinfo",{method:"POST",body:{}}))?.data?.sitename;t&&(m.value=t+" Admin",a.setSiteTitle(t))}catch{}});async function f(){l.value=!0,n.value="";try{const s=await $fetch("/web/api/api_login",{method:"POST",body:{account:o.account,password:o.password}});s.code===0&&s.data?(a.setLoginData(s.data),c.push("/dashboard")):n.value=s.msg||"登录失败"}catch{n.value="网络错误,请检查连接"}finally{l.value=!1}}return(s,t)=>(p(),r("div",z,[e("div",B,[e("div",C,[t[2]||(t[2]=e("div",{class:"logo-icon"},[e("svg",{class:"h-7 w-7 text-white",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"})])],-1)),e("h1",S,d(m.value),1),t[3]||(t[3]=e("p",{style:{"font-size":"13px",color:"#94A3B8",margin:"0 0 32px"}},"管理控制台",-1))]),n.value?(p(),r("div",T,[(p(),r("svg",V,[...t[4]||(t[4]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"},null,-1)])])),e("span",null,d(n.value),1)])):b("",!0),e("form",{onSubmit:_(f,["prevent"])},[e("div",j,[t[5]||(t[5]=e("label",{class:"login-label"},"账号",-1)),v(e("input",{"onUpdate:modelValue":t[0]||(t[0]=i=>o.account=i),type:"text",class:"login-input",placeholder:"请输入管理员账号",autocomplete:"username",required:""},null,512),[[g,o.account]])]),e("div",D,[t[6]||(t[6]=e("label",{class:"login-label"},"密码",-1)),v(e("input",{"onUpdate:modelValue":t[1]||(t[1]=i=>o.password=i),type:"password",class:"login-input",placeholder:"请输入密码",autocomplete:"current-password",required:""},null,512),[[g,o.password]])]),e("button",{type:"submit",class:k(["login-btn",{loading:l.value}])},d(l.value?"登录中...":"登 录"),3)],32),t[7]||(t[7]=e("p",{style:{"text-align":"center","font-size":"11px",color:"#94A3B8","margin-top":"24px"}}," © 2025 Admin Console · v1.0.1 ",-1))])]))}}),O=M(q,[["__scopeId","data-v-3a3bca03"]]);export{O as default}; import{g as h,y as x,z as w,j as y,c as r,a as e,t as d,l as b,A as _,k as v,m as g,n as k,x as A,s as u,o as p,_ as M}from"./96IDI_OR.js";const z={class:"login-bg flex items-center justify-center px-4"},B={class:"login-card"},C={class:"text-center"},S={style:{"font-size":"22px","font-weight":"700",color:"#0F172A",margin:"0 0 4px"}},T={key:0,class:"login-error show"},V={style:{width:"16px",height:"16px","flex-shrink":"0"},fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},j={style:{"margin-bottom":"16px"}},D={style:{"margin-bottom":"24px"}},q=h({__name:"index",setup(L){const a=x(),c=w(),o=A({account:"",password:""}),l=u(!1),n=u(""),m=u("Admin");y(async()=>{if(a.restore(),a.token){c.push("/dashboard");return}try{const t=(await $fetch("/web/api/api_getsiteinfo",{method:"POST",body:{}}))?.data?.sitename;t&&(m.value=t+" Admin",a.setSiteTitle(t))}catch{}});async function f(){l.value=!0,n.value="";try{const s=await $fetch("/web/api/api_login",{method:"POST",body:{account:o.account,password:o.password}});s.code===0&&s.data?(a.setLoginData(s.data),c.push("/dashboard")):n.value=s.msg||"登录失败"}catch{n.value="网络错误,请检查连接"}finally{l.value=!1}}return(s,t)=>(p(),r("div",z,[e("div",B,[e("div",C,[t[2]||(t[2]=e("div",{class:"logo-icon"},[e("svg",{class:"h-7 w-7 text-white",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"})])],-1)),e("h1",S,d(m.value),1),t[3]||(t[3]=e("p",{style:{"font-size":"13px",color:"#94A3B8",margin:"0 0 32px"}},"管理控制台",-1))]),n.value?(p(),r("div",T,[(p(),r("svg",V,[...t[4]||(t[4]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"},null,-1)])])),e("span",null,d(n.value),1)])):b("",!0),e("form",{onSubmit:_(f,["prevent"])},[e("div",j,[t[5]||(t[5]=e("label",{class:"login-label"},"账号",-1)),v(e("input",{"onUpdate:modelValue":t[0]||(t[0]=i=>o.account=i),type:"text",class:"login-input",placeholder:"请输入管理员账号",autocomplete:"username",required:""},null,512),[[g,o.account]])]),e("div",D,[t[6]||(t[6]=e("label",{class:"login-label"},"密码",-1)),v(e("input",{"onUpdate:modelValue":t[1]||(t[1]=i=>o.password=i),type:"password",class:"login-input",placeholder:"请输入密码",autocomplete:"current-password",required:""},null,512),[[g,o.password]])]),e("button",{type:"submit",class:k(["login-btn",{loading:l.value}])},d(l.value?"登录中...":"登 录"),3)],32),t[7]||(t[7]=e("p",{style:{"text-align":"center","font-size":"11px",color:"#94A3B8","margin-top":"24px"}}," © 2025 Admin Console · v1.0.1 ",-1))])]))}}),O=M(q,[["__scopeId","data-v-3a3bca03"]]);export{O as default};

1
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/calltranslate.B6r4Q8-j.css

@ -0,0 +1 @@
.pair-card[data-v-51f11136]{background:#fff;border:1px solid #eef2f7;border-radius:14px;padding:16px;cursor:pointer;transition:all .15s}.pair-card[data-v-51f11136]:hover{border-color:#c7d2fe;box-shadow:0 4px 14px #6366f114}.lang-badge[data-v-51f11136]{font-size:12px;font-weight:700;padding:3px 10px;border-radius:8px;background:#eef2ff;color:#4338ca}.svc-pill[data-v-51f11136]{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:600;padding:3px 9px;border-radius:8px;color:#fff}.mode-badge[data-v-51f11136]{font-size:10px;font-weight:700;padding:2px 8px;border-radius:6px}.mode-pipeline[data-v-51f11136]{background:#dbeafe;color:#1e40af}.mode-e2e[data-v-51f11136]{background:#fff7ed;color:#c2410c}.editor-panel[data-v-51f11136]{background:#fff;border-radius:16px;border:1px solid #c7d2fe;box-shadow:0 8px 32px #6366f11a;padding:22px;margin-bottom:16px}.mtab[data-v-51f11136]{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:10px;border:2px solid transparent;cursor:pointer;transition:all .15s;flex:1}.mtab.on[data-v-51f11136]{border-color:#6366f1;background:linear-gradient(135deg,#eef2ff,#f5f3ff)}.sync-overlay[data-v-51f11136]{position:fixed;inset:0;background:#0f172a73;z-index:100;display:flex;align-items:center;justify-content:center;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.sync-box[data-v-51f11136]{background:#fff;border-radius:20px;padding:28px;width:520px;max-width:95vw;box-shadow:0 24px 80px #0000002e}.sync-region-grid[data-v-51f11136]{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:14px 0}.sync-region-item[data-v-51f11136]{display:flex;align-items:center;gap:7px;padding:8px 10px;border-radius:9px;border:1.5px solid #e2e8f0;cursor:pointer;transition:all .15s;font-size:13px;font-weight:500;color:#475569}.sync-region-item[data-v-51f11136]:hover{border-color:#c7d2fe;background:#f5f3ff}.sync-region-item.checked[data-v-51f11136]{border-color:#6366f1;background:#eef2ff;color:#4338ca}

1
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/calltranslate.D9zILOgL.css

@ -1 +0,0 @@
.pair-card[data-v-23837fd5]{background:#fff;border:1px solid #eef2f7;border-radius:14px;padding:16px;cursor:pointer;transition:all .15s}.pair-card[data-v-23837fd5]:hover{border-color:#c7d2fe;box-shadow:0 4px 14px #6366f114}.lang-badge[data-v-23837fd5]{font-size:12px;font-weight:700;padding:3px 10px;border-radius:8px;background:#eef2ff;color:#4338ca}.svc-pill[data-v-23837fd5]{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:600;padding:3px 9px;border-radius:8px;color:#fff}.mode-badge[data-v-23837fd5]{font-size:10px;font-weight:700;padding:2px 8px;border-radius:6px}.mode-pipeline[data-v-23837fd5]{background:#dbeafe;color:#1e40af}.mode-e2e[data-v-23837fd5]{background:#fff7ed;color:#c2410c}.editor-panel[data-v-23837fd5]{background:#fff;border-radius:16px;border:1px solid #c7d2fe;box-shadow:0 8px 32px #6366f11a;padding:22px;margin-bottom:16px}.mtab[data-v-23837fd5]{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:10px;border:2px solid transparent;cursor:pointer;transition:all .15s;flex:1}.mtab.on[data-v-23837fd5]{border-color:#6366f1;background:linear-gradient(135deg,#eef2ff,#f5f3ff)}.sync-overlay[data-v-23837fd5]{position:fixed;inset:0;background:#0f172a73;z-index:100;display:flex;align-items:center;justify-content:center;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.sync-box[data-v-23837fd5]{background:#fff;border-radius:20px;padding:28px;width:520px;max-width:95vw;box-shadow:0 24px 80px #0000002e}.sync-region-grid[data-v-23837fd5]{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:14px 0}.sync-region-item[data-v-23837fd5]{display:flex;align-items:center;gap:7px;padding:8px 10px;border-radius:9px;border:1.5px solid #e2e8f0;cursor:pointer;transition:all .15s;font-size:13px;font-weight:500;color:#475569}.sync-region-item[data-v-23837fd5]:hover{border-color:#c7d2fe;background:#f5f3ff}.sync-region-item.checked[data-v-23837fd5]{border-color:#6366f1;background:#eef2ff;color:#4338ca}

2
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/fDZAM7sq.js → apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/dltdoXck.js

File diff suppressed because one or more lines are too long

2
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/DrH4uMNH.js → apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/p0Tfj-xC.js

File diff suppressed because one or more lines are too long

1
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/serviceconfig.GtXqs6_A.css

@ -1 +0,0 @@
.svc-item[data-v-8f55f9ae]{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:10px;border:1px solid #eef2f7;background:#fff;cursor:pointer;transition:all .15s}.svc-item[data-v-8f55f9ae]:hover{border-color:#c7d2fe;background:#f5f3ff}.svc-item.active[data-v-8f55f9ae]{border-color:#6366f1;background:linear-gradient(135deg,#eef2ff,#f5f3ff);box-shadow:0 4px 12px #6366f11f}.svc-logo[data-v-8f55f9ae]{width:36px;height:36px;border-radius:9px;display:flex;align-items:center;justify-content:center;font-size:16px;flex-shrink:0;color:#fff;font-weight:700}.cat-chip[data-v-8f55f9ae]{font-weight:700;padding:2px 7px}.cat-chip[data-v-8f55f9ae],.lock-badge[data-v-8f55f9ae]{display:inline-flex;font-size:10px;border-radius:6px}.lock-badge[data-v-8f55f9ae]{align-items:center;gap:3px;font-weight:600;padding:1px 7px;background:#fef2f2;color:#dc2626}.inherit-badge[data-v-8f55f9ae]{background:#f1f5f9;color:#94a3b8}.inherit-badge[data-v-8f55f9ae],.override-badge[data-v-8f55f9ae]{font-size:10px;font-weight:600;padding:1px 7px;border-radius:6px}.override-badge[data-v-8f55f9ae]{background:#fef3c7;color:#b45309}.field-input[data-v-8f55f9ae]{border:1px solid #e2e8f0;border-radius:7px;padding:5px 9px;font-size:12.5px;font-family:SF Mono,Menlo,monospace;width:100%}.field-input[data-v-8f55f9ae]:focus{border-color:#6366f1;box-shadow:0 0 0 3px #6366f11a;outline:none}.sync-overlay[data-v-8f55f9ae]{position:fixed;inset:0;background:#0f172a73;z-index:100;display:flex;align-items:center;justify-content:center;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.sync-box[data-v-8f55f9ae]{background:#fff;border-radius:20px;padding:28px;width:520px;max-width:95vw;box-shadow:0 24px 80px #0000002e}.sync-region-grid[data-v-8f55f9ae]{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:14px 0}.sync-region-item[data-v-8f55f9ae]{display:flex;align-items:center;gap:7px;padding:8px 10px;border-radius:9px;border:1.5px solid #e2e8f0;cursor:pointer;transition:all .15s;font-size:13px;font-weight:500;color:#475569}.sync-region-item[data-v-8f55f9ae]:hover{border-color:#c7d2fe;background:#f5f3ff}.sync-region-item.checked[data-v-8f55f9ae]{border-color:#6366f1;background:#eef2ff;color:#4338ca}

1
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/serviceconfig.htjoqj-Q.css

@ -0,0 +1 @@
.svc-item[data-v-97419e3c]{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:10px;border:1px solid #eef2f7;background:#fff;cursor:pointer;transition:all .15s}.svc-item[data-v-97419e3c]:hover{border-color:#c7d2fe;background:#f5f3ff}.svc-item.active[data-v-97419e3c]{border-color:#6366f1;background:linear-gradient(135deg,#eef2ff,#f5f3ff);box-shadow:0 4px 12px #6366f11f}.svc-logo[data-v-97419e3c]{width:36px;height:36px;border-radius:9px;display:flex;align-items:center;justify-content:center;font-size:16px;flex-shrink:0;color:#fff;font-weight:700}.cat-chip[data-v-97419e3c]{font-weight:700;padding:2px 7px}.cat-chip[data-v-97419e3c],.lock-badge[data-v-97419e3c]{display:inline-flex;font-size:10px;border-radius:6px}.lock-badge[data-v-97419e3c]{align-items:center;gap:3px;font-weight:600;padding:1px 7px;background:#fef2f2;color:#dc2626}.inherit-badge[data-v-97419e3c]{background:#f1f5f9;color:#94a3b8}.inherit-badge[data-v-97419e3c],.override-badge[data-v-97419e3c]{font-size:10px;font-weight:600;padding:1px 7px;border-radius:6px}.override-badge[data-v-97419e3c]{background:#fef3c7;color:#b45309}.field-input[data-v-97419e3c]{border:1px solid #e2e8f0;border-radius:7px;padding:5px 9px;font-size:12.5px;font-family:SF Mono,Menlo,monospace;width:100%}.field-input[data-v-97419e3c]:focus{border-color:#6366f1;box-shadow:0 0 0 3px #6366f11a;outline:none}.sync-overlay[data-v-97419e3c]{position:fixed;inset:0;background:#0f172a73;z-index:100;display:flex;align-items:center;justify-content:center;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.sync-box[data-v-97419e3c]{background:#fff;border-radius:20px;padding:28px;width:520px;max-width:95vw;box-shadow:0 24px 80px #0000002e}.sync-region-grid[data-v-97419e3c]{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:14px 0}.sync-region-item[data-v-97419e3c]{display:flex;align-items:center;gap:7px;padding:8px 10px;border-radius:9px;border:1.5px solid #e2e8f0;cursor:pointer;transition:all .15s;font-size:13px;font-weight:500;color:#475569}.sync-region-item[data-v-97419e3c]:hover{border-color:#c7d2fe;background:#f5f3ff}.sync-region-item.checked[data-v-97419e3c]{border-color:#6366f1;background:#eef2ff;color:#4338ca}

2
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/CWxjl6OD.js → apps/admin/node_modules/.cache/nuxt/.nuxt/dist/client/_nuxt/v5y5DMRc.js

@ -1,4 +1,4 @@
import{g as G,j as K,H as P,c as a,a as e,d as u,k as x,p as U,F as f,r as B,m as Y,q as Z,t as n,s as i,C as E,o,n as F,l as I,_ as J}from"./ydFS6PsN.js";import{u as Q}from"./CWcpm1jv.js";import{u as W}from"./CQ70mTiW.js";const X=globalThis.setInterval,$={class:"flex items-center justify-between mb-4 flex-wrap gap-3"},tt={class:"flex items-center gap-2 flex-wrap"},et=["value"],st={class:"flex items-center gap-1 text-xs text-slate-500 cursor-pointer"},lt={class:"flex items-center gap-4 mb-3 text-xs text-slate-500"},nt={class:"text-slate-700"},at={class:"text-slate-700"},ot={class:"text-slate-700"},rt={class:"muted"},ut={class:"panel overflow-hidden"},it={id:"logBody",style:{"max-height":"calc(100vh - 230px)","overflow-y":"auto"}},ct={key:0,class:"text-center text-slate-400 py-10"},dt={key:1,class:"text-center text-red-400 py-10"},vt={key:2,class:"text-center text-slate-400 py-10"},pt={class:"t"},mt={class:"app-name"},ft={key:0,class:"unreg",title:"该应用名未在 console 注册,快照已收到但不会写入统计库"},gt={key:1,class:"muted"},xt={class:"muted"},_t={class:"muted"},yt={class:"muted"},bt={key:0,class:"muted"},ht={class:"t"},wt={key:0,class:"late"},kt=G({__name:"statlog",setup(Ct){const{webApi:A}=Q(),{success:H,error:O}=W(),R={cn:"中国",us:"美国",ea:"东亚",sea:"东南亚",sa:"南亚",me:"中东",eu:"欧洲",ru:"俄罗斯",af:"非洲",sam:"南美",nam:"北美",oc:"大洋洲",br:"巴西",in:"印度"};function D(l){return l?R[l]||l:"-"}const c=i([]),_=i(!1),g=i(""),L=i("-"),N=i("-"),y=i(""),v=i(0),b=i(""),h=i(""),w=i(!1);let d=null;function p(l=0){const s=new Date(Date.now()+l*864e5),t=new Intl.DateTimeFormat("en-CA",{timeZone:"Asia/Shanghai",year:"numeric",month:"2-digit",day:"2-digit"}).format(s);return parseInt(t.replace(/-/g,""),10)}function k(l){const s=""+l;return s.length===8?s.slice(0,4)+"-"+s.slice(4,6)+"-"+s.slice(6,8):s}function C(l){if(!l)return"--";const s=new Date(l*1e3),t=r=>r<10?"0"+r:""+r;return t(s.getHours())+":"+t(s.getMinutes())+":"+t(s.getSeconds())}function S(l){return l?"0x"+(l>>>0).toString(16).toUpperCase():"全部"}const V=E(()=>[{value:p(0),label:"今天 "+k(p(0))},{value:p(-1),label:"昨天 "+k(p(-1))}]);function M(l){return l==="error"?{cls:"lv-error",txt:"解析失败"}:l==="warn"?{cls:"lv-warn",txt:"未落库"}:{cls:"lv-info",txt:"已落库"}}function j(l){return!!(l.snap_ts&&l.ts&&l.ts-l.snap_ts>120)}const T=E(()=>{const l=b.value,s=h.value.trim().toLowerCase();return c.value.filter(t=>!(l&&t.level!==l||s&&((t.app||"")+" "+(t.region||"")+" "+D(t.region)+" "+(t.product_id||"")+" "+S(t.product_id)+" "+(t.stat_day||"")).toLowerCase().indexOf(s)<0))});async function m(){_.value=!0,g.value="";try{const l=await A("getstatlogs",{day:v.value||0});c.value=l?.entries||[],L.value=l?.total!=null?l.total:c.value.length,N.value=c.value.length?C(c.value[0].ts):"--"}catch(l){g.value=l?.message||"网络异常"}finally{_.value=!1}}async function q(){const l=v.value||0,s=V.value.find(r=>r.value===l),t=s?s.label:""+l;if(window.confirm("确定清空「"+t+`」的接收流水吗? import{g as G,j as K,H as P,c as a,a as e,d as u,k as x,p as U,F as f,r as B,m as Y,q as Z,t as n,s as i,C as E,o,n as F,l as I,_ as J}from"./96IDI_OR.js";import{u as Q}from"./Do83zqYq.js";import{u as W}from"./CVUxyiJx.js";const X=globalThis.setInterval,$={class:"flex items-center justify-between mb-4 flex-wrap gap-3"},tt={class:"flex items-center gap-2 flex-wrap"},et=["value"],st={class:"flex items-center gap-1 text-xs text-slate-500 cursor-pointer"},lt={class:"flex items-center gap-4 mb-3 text-xs text-slate-500"},nt={class:"text-slate-700"},at={class:"text-slate-700"},ot={class:"text-slate-700"},rt={class:"muted"},ut={class:"panel overflow-hidden"},it={id:"logBody",style:{"max-height":"calc(100vh - 230px)","overflow-y":"auto"}},ct={key:0,class:"text-center text-slate-400 py-10"},dt={key:1,class:"text-center text-red-400 py-10"},vt={key:2,class:"text-center text-slate-400 py-10"},pt={class:"t"},mt={class:"app-name"},ft={key:0,class:"unreg",title:"该应用名未在 console 注册,快照已收到但不会写入统计库"},gt={key:1,class:"muted"},xt={class:"muted"},_t={class:"muted"},yt={class:"muted"},bt={key:0,class:"muted"},ht={class:"t"},wt={key:0,class:"late"},kt=G({__name:"statlog",setup(Ct){const{webApi:A}=Q(),{success:H,error:O}=W(),R={cn:"中国",us:"美国",ea:"东亚",sea:"东南亚",sa:"南亚",me:"中东",eu:"欧洲",ru:"俄罗斯",af:"非洲",sam:"南美",nam:"北美",oc:"大洋洲",br:"巴西",in:"印度"};function D(l){return l?R[l]||l:"-"}const c=i([]),_=i(!1),g=i(""),L=i("-"),N=i("-"),y=i(""),v=i(0),b=i(""),h=i(""),w=i(!1);let d=null;function p(l=0){const s=new Date(Date.now()+l*864e5),t=new Intl.DateTimeFormat("en-CA",{timeZone:"Asia/Shanghai",year:"numeric",month:"2-digit",day:"2-digit"}).format(s);return parseInt(t.replace(/-/g,""),10)}function k(l){const s=""+l;return s.length===8?s.slice(0,4)+"-"+s.slice(4,6)+"-"+s.slice(6,8):s}function C(l){if(!l)return"--";const s=new Date(l*1e3),t=r=>r<10?"0"+r:""+r;return t(s.getHours())+":"+t(s.getMinutes())+":"+t(s.getSeconds())}function S(l){return l?"0x"+(l>>>0).toString(16).toUpperCase():"全部"}const V=E(()=>[{value:p(0),label:"今天 "+k(p(0))},{value:p(-1),label:"昨天 "+k(p(-1))}]);function M(l){return l==="error"?{cls:"lv-error",txt:"解析失败"}:l==="warn"?{cls:"lv-warn",txt:"未落库"}:{cls:"lv-info",txt:"已落库"}}function j(l){return!!(l.snap_ts&&l.ts&&l.ts-l.snap_ts>120)}const T=E(()=>{const l=b.value,s=h.value.trim().toLowerCase();return c.value.filter(t=>!(l&&t.level!==l||s&&((t.app||"")+" "+(t.region||"")+" "+D(t.region)+" "+(t.product_id||"")+" "+S(t.product_id)+" "+(t.stat_day||"")).toLowerCase().indexOf(s)<0))});async function m(){_.value=!0,g.value="";try{const l=await A("getstatlogs",{day:v.value||0});c.value=l?.entries||[],L.value=l?.total!=null?l.total:c.value.length,N.value=c.value.length?C(c.value[0].ts):"--"}catch(l){g.value=l?.message||"网络异常"}finally{_.value=!1}}async function q(){const l=v.value||0,s=V.value.find(r=>r.value===l),t=s?s.label:""+l;if(window.confirm("确定清空「"+t+`」的接收流水吗?
只清除本核对面板的记录,不影响已落库的统计数据。 只清除本核对面板的记录,不影响已落库的统计数据。
清空后可重新触发埋点,观察是否正常进来。`))try{const r=await A("clearstatlogs",{day:l});H("已清空 "+(r&&r.cleared!=null?r.cleared:0)+" 条"),m()}catch(r){O("清空失败:"+(r?.message||"网络异常"))}}function z(){w.value?(d=X(m,15e3),y.value="· 每 15 秒自动刷新"):(d&&clearInterval(d),d=null,y.value="")}return K(()=>{v.value=p(0),m()}),P(()=>{d&&clearInterval(d)}),(l,s)=>(o(),a("div",null,[e("div",$,[s[6]||(s[6]=e("div",null,[e("h2",{class:"text-lg font-bold text-slate-700"},"统计日志"),e("p",{class:"text-xs text-slate-400 mt-0.5"},[u("console 从 NATS 收到的「当日统计快照」接收流水(最新在前,按接收时间分天存 Redis)。各业务部署每个同步周期/启动时/0点 推送一次当日绝对快照,console 收到后覆盖落库。用于核对每个部署是否在正常汇报;带 "),e("span",{class:"unreg"},"未注册"),u(" 的应用快照已收到但"),e("b",null,"不会落库"),u("(应用名需与 console 注册表完全一致)。")])],-1)),e("div",tt,[x(e("select",{"onUpdate:modelValue":s[0]||(s[0]=t=>v.value=t),class:"select select-bordered select-sm",onChange:m},[(o(!0),a(f,null,B(V.value,t=>(o(),a("option",{key:t.value,value:t.value},n(t.label),9,et))),128))],544),[[U,v.value,void 0,{number:!0}]]),x(e("select",{"onUpdate:modelValue":s[1]||(s[1]=t=>b.value=t),class:"select select-bordered select-sm"},[...s[4]||(s[4]=[e("option",{value:""},"全部级别",-1),e("option",{value:"info"},"已落库",-1),e("option",{value:"warn"},"未落库",-1),e("option",{value:"error"},"解析失败",-1)])],512),[[U,b.value]]),x(e("input",{"onUpdate:modelValue":s[2]||(s[2]=t=>h.value=t),class:"input input-bordered input-sm w-44",placeholder:"筛选 应用/区域/产品"},null,512),[[Y,h.value]]),e("label",st,[x(e("input",{"onUpdate:modelValue":s[3]||(s[3]=t=>w.value=t),type:"checkbox",class:"checkbox checkbox-xs",onChange:z},null,544),[[Z,w.value]]),s[5]||(s[5]=u(" 自动刷新 ",-1))]),e("button",{class:"btn btn-primary btn-sm text-white",onClick:m},"刷新"),e("button",{class:"btn btn-outline btn-error btn-sm",title:"清空本日核对流水(不影响已落库的统计数据),清空后可重新观察埋点是否正常进来",onClick:q},"清空本日")])]),e("div",lt,[e("span",null,[s[7]||(s[7]=u("该日保留 ",-1)),e("b",nt,n(L.value),1),s[8]||(s[8]=u(" 条",-1))]),e("span",null,[s[9]||(s[9]=u("当前显示 ",-1)),e("b",at,n(T.value.length),1),s[10]||(s[10]=u(" 条",-1))]),e("span",null,[s[11]||(s[11]=u("最近接收 ",-1)),e("b",ot,n(N.value),1)]),e("span",rt,n(y.value),1)]),e("div",ut,[s[12]||(s[12]=e("div",{id:"logHead"},[e("div",null,"接收时间"),e("div",null,"级别"),e("div",null,"应用 · 区域 · 产品"),e("div",null,"统计日"),e("div",null,"指标摘要 / 说明"),e("div",null,"快照时间")],-1)),e("div",it,[_.value?(o(),a("div",ct,"加载中...")):g.value?(o(),a("div",dt,"加载失败:"+n(g.value),1)):T.value.length?(o(!0),a(f,{key:3},B(T.value,(t,r)=>(o(),a("div",{key:r,class:"logrow"},[e("div",pt,n(C(t.ts)),1),e("div",null,[e("span",{class:F(["lv",M(t.level).cls])},n(M(t.level).txt),3)]),e("div",null,[t.app?(o(),a(f,{key:0},[e("span",mt,n(t.app),1),t.registered?I("",!0):(o(),a("span",ft,"未注册"))],64)):(o(),a("span",gt,"(无应用名)")),e("span",xt," · "+n(D(t.region)),1),e("span",_t," · "+n(S(t.product_id)),1)]),e("div",yt,n(t.stat_day?k(t.stat_day):"-"),1),e("div",null,[t.msg?(o(),a(f,{key:0},[e("span",{class:F(t.level==="error"?"text-red-600":"text-amber-600")},n(t.msg),3),t.summary?(o(),a("span",bt," · "+n(t.summary),1)):I("",!0)],64)):(o(),a(f,{key:1},[u(n(t.summary||"无增量"),1)],64))]),e("div",ht,[u(n(C(t.snap_ts)),1),j(t)?(o(),a("span",wt,"迟到"+n(t.ts-t.snap_ts)+"s",1)):I("",!0)])]))),128)):(o(),a("div",vt,n(c.value.length?"无匹配记录":"该日暂无接收记录"),1))])])]))}}),Dt=J(kt,[["__scopeId","data-v-742ee359"]]);export{Dt as default}; 清空后可重新触发埋点,观察是否正常进来。`))try{const r=await A("clearstatlogs",{day:l});H("已清空 "+(r&&r.cleared!=null?r.cleared:0)+" 条"),m()}catch(r){O("清空失败:"+(r?.message||"网络异常"))}}function z(){w.value?(d=X(m,15e3),y.value="· 每 15 秒自动刷新"):(d&&clearInterval(d),d=null,y.value="")}return K(()=>{v.value=p(0),m()}),P(()=>{d&&clearInterval(d)}),(l,s)=>(o(),a("div",null,[e("div",$,[s[6]||(s[6]=e("div",null,[e("h2",{class:"text-lg font-bold text-slate-700"},"统计日志"),e("p",{class:"text-xs text-slate-400 mt-0.5"},[u("console 从 NATS 收到的「当日统计快照」接收流水(最新在前,按接收时间分天存 Redis)。各业务部署每个同步周期/启动时/0点 推送一次当日绝对快照,console 收到后覆盖落库。用于核对每个部署是否在正常汇报;带 "),e("span",{class:"unreg"},"未注册"),u(" 的应用快照已收到但"),e("b",null,"不会落库"),u("(应用名需与 console 注册表完全一致)。")])],-1)),e("div",tt,[x(e("select",{"onUpdate:modelValue":s[0]||(s[0]=t=>v.value=t),class:"select select-bordered select-sm",onChange:m},[(o(!0),a(f,null,B(V.value,t=>(o(),a("option",{key:t.value,value:t.value},n(t.label),9,et))),128))],544),[[U,v.value,void 0,{number:!0}]]),x(e("select",{"onUpdate:modelValue":s[1]||(s[1]=t=>b.value=t),class:"select select-bordered select-sm"},[...s[4]||(s[4]=[e("option",{value:""},"全部级别",-1),e("option",{value:"info"},"已落库",-1),e("option",{value:"warn"},"未落库",-1),e("option",{value:"error"},"解析失败",-1)])],512),[[U,b.value]]),x(e("input",{"onUpdate:modelValue":s[2]||(s[2]=t=>h.value=t),class:"input input-bordered input-sm w-44",placeholder:"筛选 应用/区域/产品"},null,512),[[Y,h.value]]),e("label",st,[x(e("input",{"onUpdate:modelValue":s[3]||(s[3]=t=>w.value=t),type:"checkbox",class:"checkbox checkbox-xs",onChange:z},null,544),[[Z,w.value]]),s[5]||(s[5]=u(" 自动刷新 ",-1))]),e("button",{class:"btn btn-primary btn-sm text-white",onClick:m},"刷新"),e("button",{class:"btn btn-outline btn-error btn-sm",title:"清空本日核对流水(不影响已落库的统计数据),清空后可重新观察埋点是否正常进来",onClick:q},"清空本日")])]),e("div",lt,[e("span",null,[s[7]||(s[7]=u("该日保留 ",-1)),e("b",nt,n(L.value),1),s[8]||(s[8]=u(" 条",-1))]),e("span",null,[s[9]||(s[9]=u("当前显示 ",-1)),e("b",at,n(T.value.length),1),s[10]||(s[10]=u(" 条",-1))]),e("span",null,[s[11]||(s[11]=u("最近接收 ",-1)),e("b",ot,n(N.value),1)]),e("span",rt,n(y.value),1)]),e("div",ut,[s[12]||(s[12]=e("div",{id:"logHead"},[e("div",null,"接收时间"),e("div",null,"级别"),e("div",null,"应用 · 区域 · 产品"),e("div",null,"统计日"),e("div",null,"指标摘要 / 说明"),e("div",null,"快照时间")],-1)),e("div",it,[_.value?(o(),a("div",ct,"加载中...")):g.value?(o(),a("div",dt,"加载失败:"+n(g.value),1)):T.value.length?(o(!0),a(f,{key:3},B(T.value,(t,r)=>(o(),a("div",{key:r,class:"logrow"},[e("div",pt,n(C(t.ts)),1),e("div",null,[e("span",{class:F(["lv",M(t.level).cls])},n(M(t.level).txt),3)]),e("div",null,[t.app?(o(),a(f,{key:0},[e("span",mt,n(t.app),1),t.registered?I("",!0):(o(),a("span",ft,"未注册"))],64)):(o(),a("span",gt,"(无应用名)")),e("span",xt," · "+n(D(t.region)),1),e("span",_t," · "+n(S(t.product_id)),1)]),e("div",yt,n(t.stat_day?k(t.stat_day):"-"),1),e("div",null,[t.msg?(o(),a(f,{key:0},[e("span",{class:F(t.level==="error"?"text-red-600":"text-amber-600")},n(t.msg),3),t.summary?(o(),a("span",bt," · "+n(t.summary),1)):I("",!0)],64)):(o(),a(f,{key:1},[u(n(t.summary||"无增量"),1)],64))]),e("div",ht,[u(n(C(t.snap_ts)),1),j(t)?(o(),a("span",wt,"迟到"+n(t.ts-t.snap_ts)+"s",1)):I("",!0)])]))),128)):(o(),a("div",vt,n(c.value.length?"无匹配记录":"该日暂无接收记录"),1))])])]))}}),Dt=J(kt,[["__scopeId","data-v-742ee359"]]);export{Dt as default};

77
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-qCADGfI8.js → apps/admin/node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-C6glzS4R.js

@ -1,5 +1,5 @@
import { defineComponent, ref, reactive, computed, useSSRContext } from "vue"; import { defineComponent, ref, reactive, computed, useSSRContext } from "vue";
import { ssrRenderAttrs, ssrRenderList, ssrRenderAttr, ssrIncludeBooleanAttr, ssrLooseContain, ssrLooseEqual, ssrInterpolate, ssrRenderStyle, ssrRenderClass } from "vue/server-renderer"; import { ssrRenderAttrs, ssrRenderStyle, ssrRenderList, ssrRenderAttr, ssrIncludeBooleanAttr, ssrLooseContain, ssrLooseEqual, ssrInterpolate, ssrRenderClass } from "vue/server-renderer";
import { u as useApi } from "./useApi-B7CB0Cnn.js"; import { u as useApi } from "./useApi-B7CB0Cnn.js";
import { u as useToast } from "./useToast-BwtTR9dH.js"; import { u as useToast } from "./useToast-BwtTR9dH.js";
import { _ as _export_sfc } from "../server.mjs"; import { _ as _export_sfc } from "../server.mjs";
@ -62,6 +62,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
]; ];
useApi(); useApi();
useToast(); useToast();
const backendReady = ref(true);
const allSvcs = ref([]); const allSvcs = ref([]);
const pairs = ref([]); const pairs = ref([]);
const curRegion = ref(REGIONS.length ? REGIONS[0].value : 1); const curRegion = ref(REGIONS.length ? REGIONS[0].value : 1);
@ -93,96 +94,102 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
const syncTargets = ref([]); const syncTargets = ref([]);
const syncRegions = computed(() => REGIONS.filter((r) => r.value !== curRegion.value)); const syncRegions = computed(() => REGIONS.filter((r) => r.value !== curRegion.value));
return (_ctx, _push, _parent, _attrs) => { return (_ctx, _push, _parent, _attrs) => {
_push(`<div${ssrRenderAttrs(_attrs)} data-v-23837fd5><div class="flex items-center justify-between mb-5" data-v-23837fd5><div data-v-23837fd5><h2 class="text-lg font-semibold text-slate-800" data-v-23837fd5>通话翻译配置</h2><p class="text-xs text-slate-400 mt-1" data-v-23837fd5>按区域和语言对配置翻译服务。支持三段式(ASR→MT→TTS)和端到端 AST 两种模式。</p></div><div class="flex items-center gap-3" data-v-23837fd5><span class="text-sm text-slate-500" data-v-23837fd5>区域</span><select class="select select-bordered select-sm" data-v-23837fd5><!--[-->`); _push(`<div${ssrRenderAttrs(_attrs)} data-v-51f11136>`);
if (!backendReady.value) {
_push(`<div class="mb-4 rounded-lg px-4 py-3 text-sm" style="${ssrRenderStyle({ "background": "#fffbeb", "border": "1px solid #fde68a", "color": "#92400e" })}" data-v-51f11136> ⚠ 「通话翻译配置」的后端接口尚未迁移到当前 console 服务,功能暂不可用。 </div>`);
} else {
_push(`<!---->`);
}
_push(`<div class="flex items-center justify-between mb-5" data-v-51f11136><div data-v-51f11136><h2 class="text-lg font-semibold text-slate-800" data-v-51f11136>通话翻译配置</h2><p class="text-xs text-slate-400 mt-1" data-v-51f11136>按区域和语言对配置翻译服务。支持三段式(ASR→MT→TTS)和端到端 AST 两种模式。</p></div><div class="flex items-center gap-3" data-v-51f11136><span class="text-sm text-slate-500" data-v-51f11136>区域</span><select class="select select-bordered select-sm" data-v-51f11136><!--[-->`);
ssrRenderList(REGIONS, (r) => { ssrRenderList(REGIONS, (r) => {
_push(`<option${ssrRenderAttr("value", r.value)} data-v-23837fd5${ssrIncludeBooleanAttr(Array.isArray(curRegion.value) ? ssrLooseContain(curRegion.value, r.value) : ssrLooseEqual(curRegion.value, r.value)) ? " selected" : ""}>${ssrInterpolate(r.label)}</option>`); _push(`<option${ssrRenderAttr("value", r.value)} data-v-51f11136${ssrIncludeBooleanAttr(Array.isArray(curRegion.value) ? ssrLooseContain(curRegion.value, r.value) : ssrLooseEqual(curRegion.value, r.value)) ? " selected" : ""}>${ssrInterpolate(r.label)}</option>`);
}); });
_push(`<!--]--></select><button class="btn btn-primary btn-sm text-white" data-v-23837fd5>+ 新增语言对</button></div></div><div class="editor-panel" style="${ssrRenderStyle(editorOpen.value ? null : { display: "none" })}" data-v-23837fd5><div class="flex items-center justify-between mb-4" data-v-23837fd5><h3 class="font-semibold text-slate-800 text-sm" data-v-23837fd5>${ssrInterpolate(editingPair.value ? "编辑语言对" : "新增语言对")}</h3><button class="btn btn-ghost btn-xs" data-v-23837fd5>✕ 关闭</button></div><div class="grid grid-cols-3 gap-4 mb-4" data-v-23837fd5><div class="form-control" data-v-23837fd5><label class="label py-1" data-v-23837fd5><span class="label-text text-xs" data-v-23837fd5>源语言 *</span></label><select class="select select-bordered select-sm" data-v-23837fd5><!--[-->`); _push(`<!--]--></select><button class="btn btn-primary btn-sm text-white" data-v-51f11136>+ 新增语言对</button></div></div><div class="editor-panel" style="${ssrRenderStyle(editorOpen.value ? null : { display: "none" })}" data-v-51f11136><div class="flex items-center justify-between mb-4" data-v-51f11136><h3 class="font-semibold text-slate-800 text-sm" data-v-51f11136>${ssrInterpolate(editingPair.value ? "编辑语言对" : "新增语言对")}</h3><button class="btn btn-ghost btn-xs" data-v-51f11136>✕ 关闭</button></div><div class="grid grid-cols-3 gap-4 mb-4" data-v-51f11136><div class="form-control" data-v-51f11136><label class="label py-1" data-v-51f11136><span class="label-text text-xs" data-v-51f11136>源语言 *</span></label><select class="select select-bordered select-sm" data-v-51f11136><!--[-->`);
ssrRenderList(LANGS, (l) => { ssrRenderList(LANGS, (l) => {
_push(`<option${ssrRenderAttr("value", l.c)} data-v-23837fd5${ssrIncludeBooleanAttr(Array.isArray(ed.src) ? ssrLooseContain(ed.src, l.c) : ssrLooseEqual(ed.src, l.c)) ? " selected" : ""}>${ssrInterpolate(l.n)}</option>`); _push(`<option${ssrRenderAttr("value", l.c)} data-v-51f11136${ssrIncludeBooleanAttr(Array.isArray(ed.src) ? ssrLooseContain(ed.src, l.c) : ssrLooseEqual(ed.src, l.c)) ? " selected" : ""}>${ssrInterpolate(l.n)}</option>`);
}); });
_push(`<!--]--></select></div><div class="form-control" data-v-23837fd5><label class="label py-1" data-v-23837fd5><span class="label-text text-xs" data-v-23837fd5>目标语言 *</span></label><select class="select select-bordered select-sm" data-v-23837fd5><!--[-->`); _push(`<!--]--></select></div><div class="form-control" data-v-51f11136><label class="label py-1" data-v-51f11136><span class="label-text text-xs" data-v-51f11136>目标语言 *</span></label><select class="select select-bordered select-sm" data-v-51f11136><!--[-->`);
ssrRenderList(LANGS, (l) => { ssrRenderList(LANGS, (l) => {
_push(`<option${ssrRenderAttr("value", l.c)} data-v-23837fd5${ssrIncludeBooleanAttr(Array.isArray(ed.dst) ? ssrLooseContain(ed.dst, l.c) : ssrLooseEqual(ed.dst, l.c)) ? " selected" : ""}>${ssrInterpolate(l.n)}</option>`); _push(`<option${ssrRenderAttr("value", l.c)} data-v-51f11136${ssrIncludeBooleanAttr(Array.isArray(ed.dst) ? ssrLooseContain(ed.dst, l.c) : ssrLooseEqual(ed.dst, l.c)) ? " selected" : ""}>${ssrInterpolate(l.n)}</option>`);
}); });
_push(`<!--]--></select></div><div class="form-control" data-v-23837fd5><label class="label py-1" data-v-23837fd5><span class="label-text text-xs" data-v-23837fd5>双向</span></label><input${ssrIncludeBooleanAttr(Array.isArray(ed.bidir) ? ssrLooseContain(ed.bidir, null) : ed.bidir) ? " checked" : ""} type="checkbox" class="toggle toggle-primary mt-1" data-v-23837fd5></div></div><div class="flex gap-3 mb-4" data-v-23837fd5><div class="${ssrRenderClass([{ on: ed.mode === 0 }, "mtab"])}" data-v-23837fd5><div data-v-23837fd5><div class="font-bold text-sm" data-v-23837fd5>🧩 三段式拼接</div><div class="text-xs text-slate-400 mt-0.5" data-v-23837fd5>ASR → MT → TTS</div></div></div><div class="${ssrRenderClass([{ on: ed.mode === 1 }, "mtab"])}" data-v-23837fd5><div data-v-23837fd5><div class="font-bold text-sm" data-v-23837fd5>⚡ 端到端 AST</div><div class="text-xs text-slate-400 mt-0.5" data-v-23837fd5>单服务直接完成语音翻译</div></div></div></div><div data-v-23837fd5>`); _push(`<!--]--></select></div><div class="form-control" data-v-51f11136><label class="label py-1" data-v-51f11136><span class="label-text text-xs" data-v-51f11136>双向</span></label><input${ssrIncludeBooleanAttr(Array.isArray(ed.bidir) ? ssrLooseContain(ed.bidir, null) : ed.bidir) ? " checked" : ""} type="checkbox" class="toggle toggle-primary mt-1" data-v-51f11136></div></div><div class="flex gap-3 mb-4" data-v-51f11136><div class="${ssrRenderClass([{ on: ed.mode === 0 }, "mtab"])}" data-v-51f11136><div data-v-51f11136><div class="font-bold text-sm" data-v-51f11136>🧩 三段式拼接</div><div class="text-xs text-slate-400 mt-0.5" data-v-51f11136>ASR → MT → TTS</div></div></div><div class="${ssrRenderClass([{ on: ed.mode === 1 }, "mtab"])}" data-v-51f11136><div data-v-51f11136><div class="font-bold text-sm" data-v-51f11136>⚡ 端到端 AST</div><div class="text-xs text-slate-400 mt-0.5" data-v-51f11136>单服务直接完成语音翻译</div></div></div></div><div data-v-51f11136>`);
if (ed.mode === 0) { if (ed.mode === 0) {
_push(`<div class="grid grid-cols-3 gap-4" data-v-23837fd5><div class="form-control" data-v-23837fd5><label class="label py-1" data-v-23837fd5><span class="label-text text-xs" data-v-23837fd5>语音识别(ASR)</span></label><select class="select select-bordered select-sm" data-v-23837fd5>`); _push(`<div class="grid grid-cols-3 gap-4" data-v-51f11136><div class="form-control" data-v-51f11136><label class="label py-1" data-v-51f11136><span class="label-text text-xs" data-v-51f11136>语音识别(ASR)</span></label><select class="select select-bordered select-sm" data-v-51f11136>`);
if (!svcsByCat(SCAT_STT).length) { if (!svcsByCat(SCAT_STT).length) {
_push(`<option value="" data-v-23837fd5${ssrIncludeBooleanAttr(Array.isArray(ed.asr) ? ssrLooseContain(ed.asr, "") : ssrLooseEqual(ed.asr, "")) ? " selected" : ""}>(无可用服务)</option>`); _push(`<option value="" data-v-51f11136${ssrIncludeBooleanAttr(Array.isArray(ed.asr) ? ssrLooseContain(ed.asr, "") : ssrLooseEqual(ed.asr, "")) ? " selected" : ""}>(无可用服务)</option>`);
} else { } else {
_push(`<!---->`); _push(`<!---->`);
} }
_push(`<!--[-->`); _push(`<!--[-->`);
ssrRenderList(svcsByCat(SCAT_STT), (s) => { ssrRenderList(svcsByCat(SCAT_STT), (s) => {
_push(`<option${ssrRenderAttr("value", s.id)} data-v-23837fd5${ssrIncludeBooleanAttr(Array.isArray(ed.asr) ? ssrLooseContain(ed.asr, s.id) : ssrLooseEqual(ed.asr, s.id)) ? " selected" : ""}>${ssrInterpolate(s.name)}</option>`); _push(`<option${ssrRenderAttr("value", s.id)} data-v-51f11136${ssrIncludeBooleanAttr(Array.isArray(ed.asr) ? ssrLooseContain(ed.asr, s.id) : ssrLooseEqual(ed.asr, s.id)) ? " selected" : ""}>${ssrInterpolate(s.name)}</option>`);
}); });
_push(`<!--]--></select></div><div class="form-control" data-v-23837fd5><label class="label py-1" data-v-23837fd5><span class="label-text text-xs" data-v-23837fd5>机器翻译(MT)</span></label><select class="select select-bordered select-sm" data-v-23837fd5>`); _push(`<!--]--></select></div><div class="form-control" data-v-51f11136><label class="label py-1" data-v-51f11136><span class="label-text text-xs" data-v-51f11136>机器翻译(MT)</span></label><select class="select select-bordered select-sm" data-v-51f11136>`);
if (!svcsByCat(SCAT_MT).length) { if (!svcsByCat(SCAT_MT).length) {
_push(`<option value="" data-v-23837fd5${ssrIncludeBooleanAttr(Array.isArray(ed.mt) ? ssrLooseContain(ed.mt, "") : ssrLooseEqual(ed.mt, "")) ? " selected" : ""}>(无可用服务)</option>`); _push(`<option value="" data-v-51f11136${ssrIncludeBooleanAttr(Array.isArray(ed.mt) ? ssrLooseContain(ed.mt, "") : ssrLooseEqual(ed.mt, "")) ? " selected" : ""}>(无可用服务)</option>`);
} else { } else {
_push(`<!---->`); _push(`<!---->`);
} }
_push(`<!--[-->`); _push(`<!--[-->`);
ssrRenderList(svcsByCat(SCAT_MT), (s) => { ssrRenderList(svcsByCat(SCAT_MT), (s) => {
_push(`<option${ssrRenderAttr("value", s.id)} data-v-23837fd5${ssrIncludeBooleanAttr(Array.isArray(ed.mt) ? ssrLooseContain(ed.mt, s.id) : ssrLooseEqual(ed.mt, s.id)) ? " selected" : ""}>${ssrInterpolate(s.name)}</option>`); _push(`<option${ssrRenderAttr("value", s.id)} data-v-51f11136${ssrIncludeBooleanAttr(Array.isArray(ed.mt) ? ssrLooseContain(ed.mt, s.id) : ssrLooseEqual(ed.mt, s.id)) ? " selected" : ""}>${ssrInterpolate(s.name)}</option>`);
}); });
_push(`<!--]--></select></div><div class="form-control" data-v-23837fd5><label class="label py-1" data-v-23837fd5><span class="label-text text-xs" data-v-23837fd5>语音合成(TTS)</span></label><select class="select select-bordered select-sm" data-v-23837fd5>`); _push(`<!--]--></select></div><div class="form-control" data-v-51f11136><label class="label py-1" data-v-51f11136><span class="label-text text-xs" data-v-51f11136>语音合成(TTS)</span></label><select class="select select-bordered select-sm" data-v-51f11136>`);
if (!svcsByCat(SCAT_TTS).length) { if (!svcsByCat(SCAT_TTS).length) {
_push(`<option value="" data-v-23837fd5${ssrIncludeBooleanAttr(Array.isArray(ed.tts) ? ssrLooseContain(ed.tts, "") : ssrLooseEqual(ed.tts, "")) ? " selected" : ""}>(无可用服务)</option>`); _push(`<option value="" data-v-51f11136${ssrIncludeBooleanAttr(Array.isArray(ed.tts) ? ssrLooseContain(ed.tts, "") : ssrLooseEqual(ed.tts, "")) ? " selected" : ""}>(无可用服务)</option>`);
} else { } else {
_push(`<!---->`); _push(`<!---->`);
} }
_push(`<!--[-->`); _push(`<!--[-->`);
ssrRenderList(svcsByCat(SCAT_TTS), (s) => { ssrRenderList(svcsByCat(SCAT_TTS), (s) => {
_push(`<option${ssrRenderAttr("value", s.id)} data-v-23837fd5${ssrIncludeBooleanAttr(Array.isArray(ed.tts) ? ssrLooseContain(ed.tts, s.id) : ssrLooseEqual(ed.tts, s.id)) ? " selected" : ""}>${ssrInterpolate(s.name)}</option>`); _push(`<option${ssrRenderAttr("value", s.id)} data-v-51f11136${ssrIncludeBooleanAttr(Array.isArray(ed.tts) ? ssrLooseContain(ed.tts, s.id) : ssrLooseEqual(ed.tts, s.id)) ? " selected" : ""}>${ssrInterpolate(s.name)}</option>`);
}); });
_push(`<!--]--></select></div></div>`); _push(`<!--]--></select></div></div>`);
} else { } else {
_push(`<div class="form-control max-w-xs" data-v-23837fd5><label class="label py-1" data-v-23837fd5><span class="label-text text-xs" data-v-23837fd5>端到端语音翻译服务(AST)</span></label><select class="select select-bordered select-sm" data-v-23837fd5>`); _push(`<div class="form-control max-w-xs" data-v-51f11136><label class="label py-1" data-v-51f11136><span class="label-text text-xs" data-v-51f11136>端到端语音翻译服务(AST)</span></label><select class="select select-bordered select-sm" data-v-51f11136>`);
if (!svcsByCat(SCAT_AST).length) { if (!svcsByCat(SCAT_AST).length) {
_push(`<option value="" data-v-23837fd5${ssrIncludeBooleanAttr(Array.isArray(ed.ast) ? ssrLooseContain(ed.ast, "") : ssrLooseEqual(ed.ast, "")) ? " selected" : ""}>(无可用服务)</option>`); _push(`<option value="" data-v-51f11136${ssrIncludeBooleanAttr(Array.isArray(ed.ast) ? ssrLooseContain(ed.ast, "") : ssrLooseEqual(ed.ast, "")) ? " selected" : ""}>(无可用服务)</option>`);
} else { } else {
_push(`<!---->`); _push(`<!---->`);
} }
_push(`<!--[-->`); _push(`<!--[-->`);
ssrRenderList(svcsByCat(SCAT_AST), (s) => { ssrRenderList(svcsByCat(SCAT_AST), (s) => {
_push(`<option${ssrRenderAttr("value", s.id)} data-v-23837fd5${ssrIncludeBooleanAttr(Array.isArray(ed.ast) ? ssrLooseContain(ed.ast, s.id) : ssrLooseEqual(ed.ast, s.id)) ? " selected" : ""}>${ssrInterpolate(s.name)}</option>`); _push(`<option${ssrRenderAttr("value", s.id)} data-v-51f11136${ssrIncludeBooleanAttr(Array.isArray(ed.ast) ? ssrLooseContain(ed.ast, s.id) : ssrLooseEqual(ed.ast, s.id)) ? " selected" : ""}>${ssrInterpolate(s.name)}</option>`);
}); });
_push(`<!--]--></select></div>`); _push(`<!--]--></select></div>`);
} }
_push(`</div><div class="flex items-center justify-between pt-4 border-t border-slate-100 mt-4" data-v-23837fd5><label class="flex items-center gap-2 text-sm" data-v-23837fd5><input${ssrIncludeBooleanAttr(Array.isArray(ed.enable) ? ssrLooseContain(ed.enable, null) : ed.enable) ? " checked" : ""} type="checkbox" class="checkbox checkbox-sm checkbox-primary" data-v-23837fd5> 启用 </label><div class="flex gap-2" data-v-23837fd5><button class="btn btn-ghost btn-sm" data-v-23837fd5>取消</button><button class="btn btn-primary btn-sm text-white" data-v-23837fd5>保存</button></div></div></div><div class="grid grid-cols-1 gap-4" style="${ssrRenderStyle({ "grid-template-columns": "repeat(auto-fill,minmax(360px,1fr))" })}" data-v-23837fd5>`); _push(`</div><div class="flex items-center justify-between pt-4 border-t border-slate-100 mt-4" data-v-51f11136><label class="flex items-center gap-2 text-sm" data-v-51f11136><input${ssrIncludeBooleanAttr(Array.isArray(ed.enable) ? ssrLooseContain(ed.enable, null) : ed.enable) ? " checked" : ""} type="checkbox" class="checkbox checkbox-sm checkbox-primary" data-v-51f11136> 启用 </label><div class="flex gap-2" data-v-51f11136><button class="btn btn-ghost btn-sm" data-v-51f11136>取消</button><button class="btn btn-primary btn-sm text-white" data-v-51f11136>保存</button></div></div></div><div class="grid grid-cols-1 gap-4" style="${ssrRenderStyle({ "grid-template-columns": "repeat(auto-fill,minmax(360px,1fr))" })}" data-v-51f11136>`);
if (!pairs.value.length) { if (!pairs.value.length) {
_push(`<div class="col-span-full text-center py-20 text-slate-300" data-v-23837fd5><div class="text-5xl mb-3" data-v-23837fd5>🌐</div><p class="text-sm" data-v-23837fd5>当前区域暂无语言对配置</p></div>`); _push(`<div class="col-span-full text-center py-20 text-slate-300" data-v-51f11136><div class="text-5xl mb-3" data-v-51f11136>🌐</div><p class="text-sm" data-v-51f11136>当前区域暂无语言对配置</p></div>`);
} else { } else {
_push(`<!---->`); _push(`<!---->`);
} }
_push(`<!--[-->`); _push(`<!--[-->`);
ssrRenderList(pairs.value, (p) => { ssrRenderList(pairs.value, (p) => {
_push(`<div class="pair-card" data-v-23837fd5><div class="flex items-center justify-between" data-v-23837fd5><div class="flex items-center gap-2" data-v-23837fd5><span class="lang-badge" data-v-23837fd5>${ssrInterpolate(langName(p.src_lang))}</span><span class="text-slate-400 font-bold text-lg" data-v-23837fd5>${ssrInterpolate(p.bidir ? "⇄" : "→")}</span><span class="lang-badge" data-v-23837fd5>${ssrInterpolate(langName(p.dst_lang))}</span></div><div class="flex items-center gap-2" data-v-23837fd5>`); _push(`<div class="pair-card" data-v-51f11136><div class="flex items-center justify-between" data-v-51f11136><div class="flex items-center gap-2" data-v-51f11136><span class="lang-badge" data-v-51f11136>${ssrInterpolate(langName(p.src_lang))}</span><span class="text-slate-400 font-bold text-lg" data-v-51f11136>${ssrInterpolate(p.bidir ? "⇄" : "→")}</span><span class="lang-badge" data-v-51f11136>${ssrInterpolate(langName(p.dst_lang))}</span></div><div class="flex items-center gap-2" data-v-51f11136>`);
if (p.mode === 0) { if (p.mode === 0) {
_push(`<span class="mode-badge mode-pipeline" data-v-23837fd5>三段式拼接</span>`); _push(`<span class="mode-badge mode-pipeline" data-v-51f11136>三段式拼接</span>`);
} else { } else {
_push(`<span class="mode-badge mode-e2e" data-v-23837fd5>端到端 AST</span>`); _push(`<span class="mode-badge mode-e2e" data-v-51f11136>端到端 AST</span>`);
} }
if (p.enable) { if (p.enable) {
_push(`<span class="badge badge-success badge-xs" data-v-23837fd5>启用</span>`); _push(`<span class="badge badge-success badge-xs" data-v-51f11136>启用</span>`);
} else { } else {
_push(`<span class="badge badge-ghost badge-xs" data-v-23837fd5>停用</span>`); _push(`<span class="badge badge-ghost badge-xs" data-v-51f11136>停用</span>`);
} }
_push(`<button class="btn btn-ghost btn-xs text-error" data-v-23837fd5>删除</button></div></div>`); _push(`<button class="btn btn-ghost btn-xs text-error" data-v-51f11136>删除</button></div></div>`);
if (p.mode === 0) { if (p.mode === 0) {
_push(`<div class="flex flex-wrap items-center gap-2 mt-3" data-v-23837fd5><span class="svc-pill" style="${ssrRenderStyle({ "background": "#1664ff" })}" data-v-23837fd5>ASR: ${ssrInterpolate(svcName(p.asr_svc_id))}</span><span class="text-slate-300 text-sm" data-v-23837fd5>→</span><span class="svc-pill" style="${ssrRenderStyle({ "background": "#059669" })}" data-v-23837fd5>MT: ${ssrInterpolate(svcName(p.mt_svc_id))}</span><span class="text-slate-300 text-sm" data-v-23837fd5>→</span><span class="svc-pill" style="${ssrRenderStyle({ "background": "#7c3aed" })}" data-v-23837fd5>TTS: ${ssrInterpolate(svcName(p.tts_svc_id))}</span></div>`); _push(`<div class="flex flex-wrap items-center gap-2 mt-3" data-v-51f11136><span class="svc-pill" style="${ssrRenderStyle({ "background": "#1664ff" })}" data-v-51f11136>ASR: ${ssrInterpolate(svcName(p.asr_svc_id))}</span><span class="text-slate-300 text-sm" data-v-51f11136>→</span><span class="svc-pill" style="${ssrRenderStyle({ "background": "#059669" })}" data-v-51f11136>MT: ${ssrInterpolate(svcName(p.mt_svc_id))}</span><span class="text-slate-300 text-sm" data-v-51f11136>→</span><span class="svc-pill" style="${ssrRenderStyle({ "background": "#7c3aed" })}" data-v-51f11136>TTS: ${ssrInterpolate(svcName(p.tts_svc_id))}</span></div>`);
} else { } else {
_push(`<div class="flex items-center gap-2 mt-3" data-v-23837fd5><span class="svc-pill" style="${ssrRenderStyle({ "background": "#f97316" })}" data-v-23837fd5>AST: ${ssrInterpolate(svcName(p.ast_svc_id))}</span></div>`); _push(`<div class="flex items-center gap-2 mt-3" data-v-51f11136><span class="svc-pill" style="${ssrRenderStyle({ "background": "#f97316" })}" data-v-51f11136>AST: ${ssrInterpolate(svcName(p.ast_svc_id))}</span></div>`);
} }
_push(`</div>`); _push(`</div>`);
}); });
_push(`<!--]--></div><div class="sync-overlay" style="${ssrRenderStyle(syncOpen.value ? null : { display: "none" })}" data-v-23837fd5><div class="sync-box" data-v-23837fd5><div class="flex items-start gap-3 mb-4" data-v-23837fd5><div style="${ssrRenderStyle({ "width": "42px", "height": "42px", "background": "linear-gradient(135deg,#4f46e5,#7c3aed)", "border-radius": "13px", "display": "flex", "align-items": "center", "justify-content": "center", "flex-shrink": "0" })}" data-v-23837fd5><svg style="${ssrRenderStyle({ "width": "20px", "height": "20px", "color": "#fff" })}" fill="none" viewBox="0 0 24 24" stroke="currentColor" data-v-23837fd5><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z" data-v-23837fd5></path></svg></div><div data-v-23837fd5><h3 class="text-base font-semibold text-slate-800" data-v-23837fd5>同步到其他区域</h3><p class="text-xs text-slate-400 mt-1" data-v-23837fd5>${ssrInterpolate(syncDesc.value)}</p></div></div><div class="text-xs px-3 py-2 rounded-lg mb-3" style="${ssrRenderStyle({ "background": "#f0fdf4", "border": "1px solid #bbf7d0", "color": "#15803d" })}" data-v-23837fd5> ✦ 同步内容:服务组合(模式 + 各段服务)将被复制到目标区域。 </div><div class="flex items-center justify-between mb-1" data-v-23837fd5><span class="text-xs font-semibold text-slate-500" data-v-23837fd5>选择目标区域</span><div class="flex gap-2" data-v-23837fd5><button class="btn btn-ghost btn-xs" data-v-23837fd5>全选</button><button class="btn btn-ghost btn-xs" data-v-23837fd5>清空</button></div></div><div class="sync-region-grid" data-v-23837fd5><!--[-->`); _push(`<!--]--></div><div class="sync-overlay" style="${ssrRenderStyle(syncOpen.value ? null : { display: "none" })}" data-v-51f11136><div class="sync-box" data-v-51f11136><div class="flex items-start gap-3 mb-4" data-v-51f11136><div style="${ssrRenderStyle({ "width": "42px", "height": "42px", "background": "linear-gradient(135deg,#4f46e5,#7c3aed)", "border-radius": "13px", "display": "flex", "align-items": "center", "justify-content": "center", "flex-shrink": "0" })}" data-v-51f11136><svg style="${ssrRenderStyle({ "width": "20px", "height": "20px", "color": "#fff" })}" fill="none" viewBox="0 0 24 24" stroke="currentColor" data-v-51f11136><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z" data-v-51f11136></path></svg></div><div data-v-51f11136><h3 class="text-base font-semibold text-slate-800" data-v-51f11136>同步到其他区域</h3><p class="text-xs text-slate-400 mt-1" data-v-51f11136>${ssrInterpolate(syncDesc.value)}</p></div></div><div class="text-xs px-3 py-2 rounded-lg mb-3" style="${ssrRenderStyle({ "background": "#f0fdf4", "border": "1px solid #bbf7d0", "color": "#15803d" })}" data-v-51f11136> ✦ 同步内容:服务组合(模式 + 各段服务)将被复制到目标区域。 </div><div class="flex items-center justify-between mb-1" data-v-51f11136><span class="text-xs font-semibold text-slate-500" data-v-51f11136>选择目标区域</span><div class="flex gap-2" data-v-51f11136><button class="btn btn-ghost btn-xs" data-v-51f11136>全选</button><button class="btn btn-ghost btn-xs" data-v-51f11136>清空</button></div></div><div class="sync-region-grid" data-v-51f11136><!--[-->`);
ssrRenderList(syncRegions.value, (r) => { ssrRenderList(syncRegions.value, (r) => {
_push(`<label class="${ssrRenderClass([{ checked: syncTargets.value.includes(r.value) }, "sync-region-item"])}" data-v-23837fd5><input type="checkbox" class="checkbox checkbox-xs checkbox-primary"${ssrIncludeBooleanAttr(syncTargets.value.includes(r.value)) ? " checked" : ""} data-v-23837fd5><span data-v-23837fd5>${ssrInterpolate(r.label)}</span></label>`); _push(`<label class="${ssrRenderClass([{ checked: syncTargets.value.includes(r.value) }, "sync-region-item"])}" data-v-51f11136><input type="checkbox" class="checkbox checkbox-xs checkbox-primary"${ssrIncludeBooleanAttr(syncTargets.value.includes(r.value)) ? " checked" : ""} data-v-51f11136><span data-v-51f11136>${ssrInterpolate(r.label)}</span></label>`);
}); });
_push(`<!--]--></div><p class="text-[11px] text-slate-400 mb-5" data-v-23837fd5>⚠ 目标区域相同语言对已存在则覆盖,否则新建。</p><div class="flex gap-3 justify-end" data-v-23837fd5><button class="btn btn-ghost" data-v-23837fd5>仅保存当前区域</button><button class="btn btn-primary text-white" data-v-23837fd5>保存并同步</button></div></div></div></div>`); _push(`<!--]--></div><p class="text-[11px] text-slate-400 mb-5" data-v-51f11136>⚠ 目标区域相同语言对已存在则覆盖,否则新建。</p><div class="flex gap-3 justify-end" data-v-51f11136><button class="btn btn-ghost" data-v-51f11136>仅保存当前区域</button><button class="btn btn-primary text-white" data-v-51f11136>保存并同步</button></div></div></div></div>`);
}; };
} }
}); });
@ -192,8 +199,8 @@ _sfc_main.setup = (props, ctx) => {
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/calltranslate.vue"); (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/calltranslate.vue");
return _sfc_setup ? _sfc_setup(props, ctx) : void 0; return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
}; };
const calltranslate = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-23837fd5"]]); const calltranslate = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-51f11136"]]);
export { export {
calltranslate as default calltranslate as default
}; };
//# sourceMappingURL=calltranslate-qCADGfI8.js.map //# sourceMappingURL=calltranslate-C6glzS4R.js.map

1
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-C6glzS4R.js.map

File diff suppressed because one or more lines are too long

1
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-C6glzS4R.js.map.json

File diff suppressed because one or more lines are too long

1
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-qCADGfI8.js.map

File diff suppressed because one or more lines are too long

1
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-qCADGfI8.js.map.json

File diff suppressed because one or more lines are too long

5
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-styles-1.mjs-DA2j2DKH.js

@ -0,0 +1,5 @@
const calltranslate_vue_vue_type_style_index_0_scoped_51f11136_lang = ".pair-card[data-v-51f11136]{background:#fff;border:1px solid #eef2f7;border-radius:14px;padding:16px;cursor:pointer;transition:all .15s}.pair-card[data-v-51f11136]:hover{border-color:#c7d2fe;box-shadow:0 4px 14px #6366f114}.lang-badge[data-v-51f11136]{font-size:12px;font-weight:700;padding:3px 10px;border-radius:8px;background:#eef2ff;color:#4338ca}.svc-pill[data-v-51f11136]{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:600;padding:3px 9px;border-radius:8px;color:#fff}.mode-badge[data-v-51f11136]{font-size:10px;font-weight:700;padding:2px 8px;border-radius:6px}.mode-pipeline[data-v-51f11136]{background:#dbeafe;color:#1e40af}.mode-e2e[data-v-51f11136]{background:#fff7ed;color:#c2410c}.editor-panel[data-v-51f11136]{background:#fff;border-radius:16px;border:1px solid #c7d2fe;box-shadow:0 8px 32px #6366f11a;padding:22px;margin-bottom:16px}.mtab[data-v-51f11136]{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:10px;border:2px solid transparent;cursor:pointer;transition:all .15s;flex:1}.mtab.on[data-v-51f11136]{border-color:#6366f1;background:linear-gradient(135deg,#eef2ff,#f5f3ff)}.sync-overlay[data-v-51f11136]{position:fixed;inset:0;background:#0f172a73;z-index:100;display:flex;align-items:center;justify-content:center;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.sync-box[data-v-51f11136]{background:#fff;border-radius:20px;padding:28px;width:520px;max-width:95vw;box-shadow:0 24px 80px #0000002e}.sync-region-grid[data-v-51f11136]{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:14px 0}.sync-region-item[data-v-51f11136]{display:flex;align-items:center;gap:7px;padding:8px 10px;border-radius:9px;border:1.5px solid #e2e8f0;cursor:pointer;transition:all .15s;font-size:13px;font-weight:500;color:#475569}.sync-region-item[data-v-51f11136]:hover{border-color:#c7d2fe;background:#f5f3ff}.sync-region-item.checked[data-v-51f11136]{border-color:#6366f1;background:#eef2ff;color:#4338ca}";
export {
calltranslate_vue_vue_type_style_index_0_scoped_51f11136_lang as default
};
//# sourceMappingURL=calltranslate-styles-1.mjs-DA2j2DKH.js.map

1
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-styles-1.mjs-DA2j2DKH.js.map

@ -0,0 +1 @@
{"version":3,"file":"calltranslate-styles-1.mjs-DA2j2DKH.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}

1
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-styles-1.mjs-DA2j2DKH.js.map.json

@ -0,0 +1 @@
{"file":"calltranslate-styles-1.mjs-DA2j2DKH.js","mappings":";","names":[],"sources":[],"sourcesContent":[],"version":3}

5
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-styles-1.mjs-Dn-xJ4XY.js

@ -1,5 +0,0 @@
const calltranslate_vue_vue_type_style_index_0_scoped_23837fd5_lang = ".pair-card[data-v-23837fd5]{background:#fff;border:1px solid #eef2f7;border-radius:14px;padding:16px;cursor:pointer;transition:all .15s}.pair-card[data-v-23837fd5]:hover{border-color:#c7d2fe;box-shadow:0 4px 14px #6366f114}.lang-badge[data-v-23837fd5]{font-size:12px;font-weight:700;padding:3px 10px;border-radius:8px;background:#eef2ff;color:#4338ca}.svc-pill[data-v-23837fd5]{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:600;padding:3px 9px;border-radius:8px;color:#fff}.mode-badge[data-v-23837fd5]{font-size:10px;font-weight:700;padding:2px 8px;border-radius:6px}.mode-pipeline[data-v-23837fd5]{background:#dbeafe;color:#1e40af}.mode-e2e[data-v-23837fd5]{background:#fff7ed;color:#c2410c}.editor-panel[data-v-23837fd5]{background:#fff;border-radius:16px;border:1px solid #c7d2fe;box-shadow:0 8px 32px #6366f11a;padding:22px;margin-bottom:16px}.mtab[data-v-23837fd5]{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:10px;border:2px solid transparent;cursor:pointer;transition:all .15s;flex:1}.mtab.on[data-v-23837fd5]{border-color:#6366f1;background:linear-gradient(135deg,#eef2ff,#f5f3ff)}.sync-overlay[data-v-23837fd5]{position:fixed;inset:0;background:#0f172a73;z-index:100;display:flex;align-items:center;justify-content:center;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.sync-box[data-v-23837fd5]{background:#fff;border-radius:20px;padding:28px;width:520px;max-width:95vw;box-shadow:0 24px 80px #0000002e}.sync-region-grid[data-v-23837fd5]{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:14px 0}.sync-region-item[data-v-23837fd5]{display:flex;align-items:center;gap:7px;padding:8px 10px;border-radius:9px;border:1.5px solid #e2e8f0;cursor:pointer;transition:all .15s;font-size:13px;font-weight:500;color:#475569}.sync-region-item[data-v-23837fd5]:hover{border-color:#c7d2fe;background:#f5f3ff}.sync-region-item.checked[data-v-23837fd5]{border-color:#6366f1;background:#eef2ff;color:#4338ca}";
export {
calltranslate_vue_vue_type_style_index_0_scoped_23837fd5_lang as default
};
//# sourceMappingURL=calltranslate-styles-1.mjs-Dn-xJ4XY.js.map

1
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-styles-1.mjs-Dn-xJ4XY.js.map

@ -1 +0,0 @@
{"version":3,"file":"calltranslate-styles-1.mjs-Dn-xJ4XY.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}

1
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-styles-1.mjs-Dn-xJ4XY.js.map.json

@ -1 +0,0 @@
{"file":"calltranslate-styles-1.mjs-Dn-xJ4XY.js","mappings":";","names":[],"sources":[],"sourcesContent":[],"version":3}

4
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-styles.DWMho6ro.mjs

@ -1,4 +0,0 @@
import style_0 from "./calltranslate-styles-1.mjs-Dn-xJ4XY.js";
export default [
style_0
]

4
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/calltranslate-styles.hpAJUqsK.mjs

@ -0,0 +1,4 @@
import style_0 from "./calltranslate-styles-1.mjs-DA2j2DKH.js";
export default [
style_0
]

200
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/serviceconfig-BTX37VDF.js

@ -0,0 +1,200 @@
import { defineComponent, ref, reactive, computed, useSSRContext } from "vue";
import { ssrRenderAttrs, ssrRenderStyle, ssrRenderAttr, ssrIncludeBooleanAttr, ssrLooseContain, ssrLooseEqual, ssrRenderList, ssrInterpolate, ssrRenderClass, ssrRenderDynamicModel } from "vue/server-renderer";
import { u as useApi } from "./useApi-B7CB0Cnn.js";
import { u as useToast } from "./useToast-BwtTR9dH.js";
import { _ as _export_sfc } from "../server.mjs";
import "./auth-QFkCoU1C.js";
import "pinia";
import "/Users/liwei/work/go/yunyan/yunyan-sas/apps/admin/node_modules/.pnpm/ofetch@1.5.1/node_modules/ofetch/dist/node.mjs";
import "#internal/nuxt/paths";
import "/Users/liwei/work/go/yunyan/yunyan-sas/apps/admin/node_modules/.pnpm/hookable@6.1.1/node_modules/hookable/dist/index.mjs";
import "/Users/liwei/work/go/yunyan/yunyan-sas/apps/admin/node_modules/.pnpm/unctx@2.5.0/node_modules/unctx/dist/index.mjs";
import "/Users/liwei/work/go/yunyan/yunyan-sas/apps/admin/node_modules/.pnpm/@nuxt+nitro-server@4.4.8_@babel+plugin-syntax-typescript@7.29.7_@babel+core@7.29.7__db0_5045ebd3802f96c9dd021f3300fcdf4c/node_modules/@nuxt/nitro-server/dist/runtime/h3-compat.mjs";
import "/Users/liwei/work/go/yunyan/yunyan-sas/apps/admin/node_modules/.pnpm/defu@6.1.7/node_modules/defu/dist/defu.mjs";
import "/Users/liwei/work/go/yunyan/yunyan-sas/apps/admin/node_modules/.pnpm/ufo@1.6.4/node_modules/ufo/dist/index.mjs";
import "/Users/liwei/work/go/yunyan/yunyan-sas/apps/admin/node_modules/.pnpm/perfect-debounce@2.1.0/node_modules/perfect-debounce/dist/index.mjs";
import "/Users/liwei/work/go/yunyan/yunyan-sas/apps/admin/node_modules/.pnpm/ohash@2.0.11/node_modules/ohash/dist/index.mjs";
import "/Users/liwei/work/go/yunyan/yunyan-sas/apps/admin/node_modules/.pnpm/klona@2.0.6/node_modules/klona/dist/index.mjs";
const _sfc_main = /* @__PURE__ */ defineComponent({
__name: "serviceconfig",
__ssrInlineRender: true,
setup(__props) {
const REGIONS = [
{ value: 1, label: "中国" },
{ value: 2, label: "美国" },
{ value: 3, label: "东亚" },
{ value: 4, label: "东南亚" },
{ value: 5, label: "南亚" },
{ value: 6, label: "中东" },
{ value: 7, label: "欧洲" },
{ value: 8, label: "俄罗斯" },
{ value: 9, label: "非洲" },
{ value: 10, label: "南美" },
{ value: 11, label: "北美" },
{ value: 12, label: "大洋洲" },
{ value: 13, label: "巴西" },
{ value: 14, label: "印度" }
];
const SCAT = [
{ v: 1, label: "STT 语音识别", short: "STT", color: "#0369a1", bg: "#dbeafe" },
{ v: 2, label: "TTS 语音合成", short: "TTS", color: "#7c3aed", bg: "#ede9fe" },
{ v: 3, label: "MT 机器翻译", short: "MT", color: "#059669", bg: "#dcfce7" },
{ v: 4, label: "AST 端到端", short: "AST", color: "#c2410c", bg: "#fff7ed" },
{ v: 5, label: "LLM 大语言", short: "LLM", color: "#b45309", bg: "#fef9c3" },
{ v: 6, label: "存储 OSS/COS", short: "存储", color: "#475569", bg: "#f1f5f9" }
];
useApi();
useToast();
function scatInfo(v) {
return SCAT.find((s) => s.v === v) || { short: "?", color: "#999", bg: "#eee", v: 0, label: "" };
}
function parseCats(s) {
return (s || "").split(",").map((x) => parseInt(x) || 0).filter((x) => x > 0);
}
function encCount(s) {
return (s.fields || []).filter((f) => f.encrypted).length;
}
const backendReady = ref(true);
const allSvcs = ref([]);
const curSvc = ref(null);
const curRegion = ref(0);
const detailMode = ref("empty");
const editForm = reactive({ id: "", name: "", description: "", enable: false });
const editCats = ref([]);
const editFields = ref([]);
const overrideFields = ref([]);
const regionLoading = ref(false);
const curRegionLabel = computed(() => {
const r = REGIONS.find((x) => x.value === curRegion.value);
return r ? r.label : "区域" + curRegion.value;
});
const syncVisible = ref(false);
ref(false);
const syncDesc = ref("");
const syncScopeNote = ref("");
const syncTargets = ref([]);
const syncRegionList = computed(() => REGIONS.filter((r) => r.value !== curRegion.value));
return (_ctx, _push, _parent, _attrs) => {
_push(`<div${ssrRenderAttrs(_attrs)} data-v-97419e3c>`);
if (!backendReady.value) {
_push(`<div class="mb-4 rounded-lg px-4 py-3 text-sm" style="${ssrRenderStyle({ "background": "#fffbeb", "border": "1px solid #fde68a", "color": "#92400e" })}" data-v-97419e3c> ⚠ 「依赖服务配置」的后端接口尚未迁移到当前 console 服务,功能暂不可用。 </div>`);
} else {
_push(`<!---->`);
}
_push(`<div class="flex items-center justify-between mb-5" data-v-97419e3c><div data-v-97419e3c><h2 class="text-lg font-semibold text-slate-800" data-v-97419e3c>依赖服务配置</h2><p class="text-xs text-slate-400 mt-1" data-v-97419e3c>配置火山引擎、阿里云等第三方服务;字段支持加密存储。默认配置全区域共用,可按区域覆盖字段值。</p></div><div class="flex items-center gap-3" data-v-97419e3c><select class="select select-bordered select-sm" data-v-97419e3c><option${ssrRenderAttr("value", 0)} data-v-97419e3c${ssrIncludeBooleanAttr(Array.isArray(curRegion.value) ? ssrLooseContain(curRegion.value, 0) : ssrLooseEqual(curRegion.value, 0)) ? " selected" : ""}>默认(全区域)</option><!--[-->`);
ssrRenderList(REGIONS, (r) => {
_push(`<option${ssrRenderAttr("value", r.value)} data-v-97419e3c${ssrIncludeBooleanAttr(Array.isArray(curRegion.value) ? ssrLooseContain(curRegion.value, r.value) : ssrLooseEqual(curRegion.value, r.value)) ? " selected" : ""}>${ssrInterpolate(r.label)}</option>`);
});
_push(`<!--]--></select><button class="btn btn-primary btn-sm text-white" style="${ssrRenderStyle(curRegion.value === 0 ? null : { display: "none" })}" data-v-97419e3c>+ 新增服务</button></div></div><div class="flex gap-4" style="${ssrRenderStyle({ "align-items": "flex-start" })}" data-v-97419e3c><div style="${ssrRenderStyle({ "width": "248px", "flex-shrink": "0" })}" data-v-97419e3c><div class="flex flex-col gap-2" data-v-97419e3c><!--[-->`);
ssrRenderList(allSvcs.value, (s) => {
_push(`<div class="${ssrRenderClass([{ active: curSvc.value && curSvc.value.id === s.id }, "svc-item"])}" data-v-97419e3c><div class="svc-logo" style="${ssrRenderStyle({ background: s.color || "#6366f1" })}" data-v-97419e3c>${ssrInterpolate(s.icon || (s.name || "").charAt(0))}</div><div style="${ssrRenderStyle({ "min-width": "0", "flex": "1" })}" data-v-97419e3c><div class="flex items-center gap-2" data-v-97419e3c><span class="font-semibold text-slate-800 text-sm truncate" data-v-97419e3c>${ssrInterpolate(s.name)}</span><span class="${ssrRenderClass([s.enable ? "badge-success" : "badge-ghost", "badge badge-xs"])}" data-v-97419e3c>${ssrInterpolate(s.enable ? "启用" : "停用")}</span></div><div class="flex flex-wrap gap-1 mt-1" data-v-97419e3c><!--[-->`);
ssrRenderList(parseCats(s.categories), (v) => {
_push(`<span class="cat-chip" style="${ssrRenderStyle({ color: scatInfo(v).color, background: scatInfo(v).bg })}" data-v-97419e3c>${ssrInterpolate(scatInfo(v).short)}</span>`);
});
_push(`<!--]-->`);
if (encCount(s)) {
_push(`<span class="lock-badge" data-v-97419e3c>🔒${ssrInterpolate(encCount(s))}</span>`);
} else {
_push(`<!---->`);
}
_push(`</div></div></div>`);
});
_push(`<!--]-->`);
if (!allSvcs.value.length) {
_push(`<p class="text-xs text-slate-400 text-center py-8" data-v-97419e3c>暂无服务</p>`);
} else {
_push(`<!---->`);
}
_push(`</div></div><div class="flex-1 min-w-0" data-v-97419e3c><div class="bg-white rounded-2xl border border-slate-100 shadow-sm p-6" data-v-97419e3c>`);
if (detailMode.value === "empty") {
_push(`<div class="text-center text-slate-300 py-20" data-v-97419e3c><div class="text-5xl mb-3" data-v-97419e3c>⚙️</div><p class="text-sm" data-v-97419e3c>从左侧选择一个服务开始配置</p></div>`);
} else if (detailMode.value === "default" && curSvc.value) {
_push(`<!--[--><div class="flex items-center justify-between mb-5" data-v-97419e3c><div class="flex items-center gap-3" data-v-97419e3c><div class="svc-logo" style="${ssrRenderStyle({ background: curSvc.value.color || "#6366f1", width: "44px", height: "44px", fontSize: "20px" })}" data-v-97419e3c>${ssrInterpolate(curSvc.value.icon || (curSvc.value.name || "").charAt(0))}</div><div data-v-97419e3c><h3 class="text-base font-semibold text-slate-800" data-v-97419e3c>${ssrInterpolate(curSvc.value.name)}</h3><p class="text-xs text-slate-400 mt-0.5" data-v-97419e3c>${ssrInterpolate(curSvc.value.id)}</p></div></div><div class="flex gap-2" data-v-97419e3c><button class="btn btn-error btn-sm btn-outline" data-v-97419e3c>删除服务</button><button class="btn btn-primary btn-sm text-white" data-v-97419e3c>保存</button></div></div><div class="divider text-xs text-slate-400 my-3" data-v-97419e3c>基本信息</div><div class="grid grid-cols-2 gap-4 mb-4" data-v-97419e3c><div class="form-control" data-v-97419e3c><label class="label" data-v-97419e3c><span class="label-text" data-v-97419e3c>服务名称 *</span></label><input${ssrRenderAttr("value", editForm.name)} class="input input-bordered" data-v-97419e3c></div><div class="form-control" data-v-97419e3c><label class="label" data-v-97419e3c><span class="label-text" data-v-97419e3c>启用</span></label><input${ssrIncludeBooleanAttr(Array.isArray(editForm.enable) ? ssrLooseContain(editForm.enable, null) : editForm.enable) ? " checked" : ""} type="checkbox" class="toggle toggle-primary mt-3" data-v-97419e3c></div></div><div class="form-control mb-4" data-v-97419e3c><label class="label" data-v-97419e3c><span class="label-text" data-v-97419e3c>服务描述</span></label><input${ssrRenderAttr("value", editForm.description)} class="input input-bordered" data-v-97419e3c></div><div class="mb-4" data-v-97419e3c><p class="text-sm font-medium text-slate-700 mb-2" data-v-97419e3c>服务类别 <span class="text-slate-400 text-xs" data-v-97419e3c>(可多选)</span></p><div class="flex flex-wrap gap-3" data-v-97419e3c><!--[-->`);
ssrRenderList(SCAT, (sc) => {
_push(`<label class="flex items-center gap-2 cursor-pointer" data-v-97419e3c><input type="checkbox" class="checkbox checkbox-sm checkbox-primary"${ssrRenderAttr("value", sc.v)}${ssrIncludeBooleanAttr(Array.isArray(editCats.value) ? ssrLooseContain(editCats.value, sc.v) : editCats.value) ? " checked" : ""} data-v-97419e3c><span class="cat-chip" style="${ssrRenderStyle({ color: sc.color, background: sc.bg })}" data-v-97419e3c>${ssrInterpolate(sc.short)}</span><span class="text-xs text-slate-600" data-v-97419e3c>${ssrInterpolate(sc.label)}</span></label>`);
});
_push(`<!--]--></div></div><div class="divider text-xs text-slate-400 my-3" data-v-97419e3c>自定义字段</div><div data-v-97419e3c>`);
if (!editFields.value.length) {
_push(`<p class="text-xs text-slate-400 py-4 text-center" data-v-97419e3c>尚无自定义字段,点击下方添加</p>`);
} else {
_push(`<div class="overflow-x-auto" data-v-97419e3c><table class="table text-xs" data-v-97419e3c><thead data-v-97419e3c><tr data-v-97419e3c><th class="w-32" data-v-97419e3c>字段名</th><th data-v-97419e3c>字段描述</th><th class="w-16 text-center" data-v-97419e3c>加密</th><th data-v-97419e3c>默认值</th><th class="w-12" data-v-97419e3c></th></tr></thead><tbody data-v-97419e3c><!--[-->`);
ssrRenderList(editFields.value, (f, i) => {
_push(`<tr data-v-97419e3c><td data-v-97419e3c><input class="field-input"${ssrRenderAttr("value", f.key)} placeholder="key" data-v-97419e3c></td><td data-v-97419e3c><input class="field-input"${ssrRenderAttr("value", f.description)} placeholder="用途描述" data-v-97419e3c></td><td class="text-center" data-v-97419e3c><input type="checkbox" class="checkbox checkbox-xs checkbox-primary"${ssrIncludeBooleanAttr(Array.isArray(f.encrypted) ? ssrLooseContain(f.encrypted, null) : f.encrypted) ? " checked" : ""} data-v-97419e3c></td><td data-v-97419e3c>`);
if (f.encrypted) {
_push(`<!--[--><div class="relative" data-v-97419e3c><input${ssrRenderAttr("type", f._show ? "text" : "password")} class="field-input pr-14"${ssrRenderDynamicModel(f._show ? "text" : "password", f.def_value, null)} placeholder="留空保留原值" data-v-97419e3c><button type="button" class="absolute right-2 top-1/2 -translate-y-1/2 text-xs text-slate-400 hover:text-slate-700" data-v-97419e3c>${ssrInterpolate(f._show ? "隐藏" : "显示")}</button></div><span class="lock-badge ml-1" data-v-97419e3c>🔒 加密</span><!--]-->`);
} else {
_push(`<input class="field-input"${ssrRenderAttr("value", f.def_value)} data-v-97419e3c>`);
}
_push(`</td><td data-v-97419e3c><button class="btn btn-ghost btn-xs text-error" data-v-97419e3c>×</button></td></tr>`);
});
_push(`<!--]--></tbody></table></div>`);
}
_push(`<button class="btn btn-ghost btn-sm mt-2 text-primary" data-v-97419e3c>+ 添加字段</button></div><!--]-->`);
} else if (detailMode.value === "new") {
_push(`<!--[--><div class="flex items-center justify-between mb-5" data-v-97419e3c><h3 class="text-base font-semibold text-slate-800" data-v-97419e3c>新增依赖服务</h3><div class="flex gap-2" data-v-97419e3c><button class="btn btn-ghost btn-sm" data-v-97419e3c>取消</button><button class="btn btn-primary btn-sm text-white" data-v-97419e3c>创建</button></div></div><div class="divider text-xs text-slate-400 my-3" data-v-97419e3c>基本信息</div><div class="grid grid-cols-2 gap-4 mb-4" data-v-97419e3c><div class="form-control" data-v-97419e3c><label class="label" data-v-97419e3c><span class="label-text" data-v-97419e3c>服务ID * <span class="text-slate-400 text-xs" data-v-97419e3c>(唯一,如 volcengine)</span></span></label><input${ssrRenderAttr("value", editForm.id)} class="input input-bordered font-mono" placeholder="volcengine" data-v-97419e3c></div><div class="form-control" data-v-97419e3c><label class="label" data-v-97419e3c><span class="label-text" data-v-97419e3c>服务名称 *</span></label><input${ssrRenderAttr("value", editForm.name)} class="input input-bordered" placeholder="火山引擎" data-v-97419e3c></div></div><div class="form-control mb-4" data-v-97419e3c><label class="label" data-v-97419e3c><span class="label-text" data-v-97419e3c>服务描述</span></label><input${ssrRenderAttr("value", editForm.description)} class="input input-bordered" placeholder="简述该服务的用途" data-v-97419e3c></div><div class="mb-4" data-v-97419e3c><p class="text-sm font-medium text-slate-700 mb-2" data-v-97419e3c>服务类别</p><div class="flex flex-wrap gap-3" data-v-97419e3c><!--[-->`);
ssrRenderList(SCAT, (sc) => {
_push(`<label class="flex items-center gap-2 cursor-pointer" data-v-97419e3c><input type="checkbox" class="checkbox checkbox-sm checkbox-primary"${ssrRenderAttr("value", sc.v)}${ssrIncludeBooleanAttr(Array.isArray(editCats.value) ? ssrLooseContain(editCats.value, sc.v) : editCats.value) ? " checked" : ""} data-v-97419e3c><span class="cat-chip" style="${ssrRenderStyle({ color: sc.color, background: sc.bg })}" data-v-97419e3c>${ssrInterpolate(sc.short)}</span><span class="text-xs text-slate-600" data-v-97419e3c>${ssrInterpolate(sc.label)}</span></label>`);
});
_push(`<!--]--></div></div><div class="divider text-xs text-slate-400 my-3" data-v-97419e3c>自定义字段</div><div data-v-97419e3c>`);
if (!editFields.value.length) {
_push(`<p class="text-xs text-slate-400 py-4 text-center" data-v-97419e3c>尚无自定义字段,点击下方添加</p>`);
} else {
_push(`<div class="overflow-x-auto" data-v-97419e3c><table class="table text-xs" data-v-97419e3c><thead data-v-97419e3c><tr data-v-97419e3c><th class="w-32" data-v-97419e3c>字段名</th><th data-v-97419e3c>字段描述</th><th class="w-16 text-center" data-v-97419e3c>加密</th><th data-v-97419e3c>默认值</th><th class="w-12" data-v-97419e3c></th></tr></thead><tbody data-v-97419e3c><!--[-->`);
ssrRenderList(editFields.value, (f, i) => {
_push(`<tr data-v-97419e3c><td data-v-97419e3c><input class="field-input"${ssrRenderAttr("value", f.key)} placeholder="key" data-v-97419e3c></td><td data-v-97419e3c><input class="field-input"${ssrRenderAttr("value", f.description)} placeholder="用途描述" data-v-97419e3c></td><td class="text-center" data-v-97419e3c><input type="checkbox" class="checkbox checkbox-xs checkbox-primary"${ssrIncludeBooleanAttr(Array.isArray(f.encrypted) ? ssrLooseContain(f.encrypted, null) : f.encrypted) ? " checked" : ""} data-v-97419e3c></td><td data-v-97419e3c>`);
if (f.encrypted) {
_push(`<!--[--><div class="relative" data-v-97419e3c><input${ssrRenderAttr("type", f._show ? "text" : "password")} class="field-input pr-14"${ssrRenderDynamicModel(f._show ? "text" : "password", f.def_value, null)} placeholder="留空保留原值" data-v-97419e3c><button type="button" class="absolute right-2 top-1/2 -translate-y-1/2 text-xs text-slate-400 hover:text-slate-700" data-v-97419e3c>${ssrInterpolate(f._show ? "隐藏" : "显示")}</button></div><span class="lock-badge ml-1" data-v-97419e3c>🔒 加密</span><!--]-->`);
} else {
_push(`<input class="field-input"${ssrRenderAttr("value", f.def_value)} data-v-97419e3c>`);
}
_push(`</td><td data-v-97419e3c><button class="btn btn-ghost btn-xs text-error" data-v-97419e3c>×</button></td></tr>`);
});
_push(`<!--]--></tbody></table></div>`);
}
_push(`<button class="btn btn-ghost btn-sm mt-2 text-primary" data-v-97419e3c>+ 添加字段</button></div><!--]-->`);
} else if (detailMode.value === "region" && curSvc.value) {
_push(`<!--[-->`);
if (regionLoading.value) {
_push(`<div class="text-center py-10 text-slate-400" data-v-97419e3c>加载中...</div>`);
} else {
_push(`<!--[--><div class="flex items-center justify-between mb-5" data-v-97419e3c><div class="flex items-center gap-3" data-v-97419e3c><div class="svc-logo" style="${ssrRenderStyle({ background: curSvc.value.color || "#6366f1", width: "44px", height: "44px", fontSize: "20px" })}" data-v-97419e3c>${ssrInterpolate(curSvc.value.icon || (curSvc.value.name || "").charAt(0))}</div><div data-v-97419e3c><h3 class="text-base font-semibold text-slate-800" data-v-97419e3c>${ssrInterpolate(curSvc.value.name)}</h3><span class="badge badge-warning badge-sm mt-0.5" data-v-97419e3c>${ssrInterpolate(curRegionLabel.value)} 覆盖模式</span></div></div><button class="btn btn-primary btn-sm text-white" data-v-97419e3c>保存覆盖</button></div><div class="rounded-lg px-3 py-2 mb-4 text-xs" style="${ssrRenderStyle({ "background": "#fefce8", "border": "1px solid #fde047", "color": "#854d0e" })}" data-v-97419e3c> ✦ 当前编辑「${ssrInterpolate(curRegionLabel.value)}」的字段覆盖值。留空的字段将继承默认值。加密字段留空保留已存储密文。 </div><div class="overflow-x-auto" data-v-97419e3c><table class="table text-xs" data-v-97419e3c><thead data-v-97419e3c><tr data-v-97419e3c><th class="w-32" data-v-97419e3c>字段名</th><th data-v-97419e3c>字段描述</th><th class="w-24 text-center" data-v-97419e3c>状态</th><th data-v-97419e3c>有效值</th></tr></thead><tbody data-v-97419e3c><!--[-->`);
ssrRenderList(overrideFields.value, (f, i) => {
_push(`<tr data-v-97419e3c><td class="font-mono text-slate-700" data-v-97419e3c>${ssrInterpolate(f.key)}</td><td class="text-slate-500" data-v-97419e3c>${ssrInterpolate(f.description)}</td><td class="text-center" data-v-97419e3c>`);
if (f.is_overridden) {
_push(`<span class="override-badge" data-v-97419e3c>覆盖</span>`);
} else {
_push(`<span class="inherit-badge" data-v-97419e3c>继承</span>`);
}
_push(`</td><td data-v-97419e3c>`);
if (f.encrypted) {
_push(`<!--[--><div class="relative" data-v-97419e3c><input${ssrRenderAttr("type", f._show ? "text" : "password")} class="field-input pr-14"${ssrRenderDynamicModel(f._show ? "text" : "password", f._input, null)} placeholder="留空继承默认" data-v-97419e3c><button type="button" class="absolute right-2 top-1/2 -translate-y-1/2 text-xs text-slate-400 hover:text-slate-700" data-v-97419e3c>${ssrInterpolate(f._show ? "隐藏" : "显示")}</button></div><span class="lock-badge ml-1" data-v-97419e3c>🔒</span><!--]-->`);
} else {
_push(`<input class="field-input"${ssrRenderAttr("value", f._input)}${ssrRenderAttr("placeholder", "留空继承:" + (f.value || ""))} data-v-97419e3c>`);
}
_push(`</td></tr>`);
});
_push(`<!--]--></tbody></table></div><!--]-->`);
}
_push(`<!--]-->`);
} else {
_push(`<!---->`);
}
_push(`</div></div></div><div class="sync-overlay" style="${ssrRenderStyle(syncVisible.value ? null : { display: "none" })}" data-v-97419e3c><div class="sync-box" data-v-97419e3c><div class="flex items-start gap-3 mb-4" data-v-97419e3c><div style="${ssrRenderStyle({ "width": "42px", "height": "42px", "background": "linear-gradient(135deg,#4f46e5,#7c3aed)", "border-radius": "13px", "display": "flex", "align-items": "center", "justify-content": "center", "flex-shrink": "0" })}" data-v-97419e3c><svg style="${ssrRenderStyle({ "width": "20px", "height": "20px", "color": "#fff" })}" fill="none" viewBox="0 0 24 24" stroke="currentColor" data-v-97419e3c><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z" data-v-97419e3c></path></svg></div><div data-v-97419e3c><h3 class="text-base font-semibold text-slate-800" data-v-97419e3c>同步到其他区域</h3><p class="text-xs text-slate-400 mt-1" data-v-97419e3c>${ssrInterpolate(syncDesc.value)}</p></div></div><div class="text-xs px-3 py-2 rounded-lg mb-3" style="${ssrRenderStyle({ "background": "#f0fdf4", "border": "1px solid #bbf7d0", "color": "#15803d" })}" data-v-97419e3c>${syncScopeNote.value ?? ""}</div><div class="flex items-center justify-between mb-1" data-v-97419e3c><span class="text-xs font-semibold text-slate-500" data-v-97419e3c>选择目标区域</span><div class="flex gap-2" data-v-97419e3c><button class="btn btn-ghost btn-xs" data-v-97419e3c>全选</button><button class="btn btn-ghost btn-xs" data-v-97419e3c>清空</button></div></div><div class="sync-region-grid" data-v-97419e3c><!--[-->`);
ssrRenderList(syncRegionList.value, (r) => {
_push(`<label class="${ssrRenderClass([{ checked: syncTargets.value.includes(r.value) }, "sync-region-item"])}" data-v-97419e3c><input type="checkbox" class="checkbox checkbox-xs checkbox-primary"${ssrIncludeBooleanAttr(syncTargets.value.includes(r.value)) ? " checked" : ""} data-v-97419e3c><span data-v-97419e3c>${ssrInterpolate(r.label)}</span></label>`);
});
_push(`<!--]--></div><p class="text-[11px] text-slate-400 mb-5" data-v-97419e3c>⚠ 已勾选区域中与当前配置相同的字段将被覆盖;加密字段密文一并同步。</p><div class="flex gap-3 justify-end" data-v-97419e3c><button class="btn btn-ghost" data-v-97419e3c>仅保存当前区域</button><button class="btn btn-primary text-white" data-v-97419e3c>保存并同步</button></div></div></div></div>`);
};
}
});
const _sfc_setup = _sfc_main.setup;
_sfc_main.setup = (props, ctx) => {
const ssrContext = useSSRContext();
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/serviceconfig.vue");
return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
};
const serviceconfig = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-97419e3c"]]);
export {
serviceconfig as default
};
//# sourceMappingURL=serviceconfig-BTX37VDF.js.map

1
apps/admin/node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/serviceconfig-BTX37VDF.js.map

File diff suppressed because one or more lines are too long

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save