181 changed files with 3642 additions and 542 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +1 @@ |
|||
import{_ as o,o as s,c as a,a as t,t as r}from"./Ccu6Xgpt.js";import{u as i}from"./oiJG5Pzc.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"./mElhLwm2.js";import{u as i}from"./OLpUuA7c.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}; |
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +1 @@ |
|||
import{g as h,j as x,k as w,B as y,c as r,a as e,t as d,l as b,m as _,p as v,v as g,n as k,y as B,x as u,o as p,_ as M}from"./Ccu6Xgpt.js";const A={class:"login-bg flex items-center justify-center px-4"},z={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=B({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",A,[e("div",z,[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,j as x,k as w,B as y,c as r,a as e,t as d,l as b,m as _,p as v,v as g,n as k,y as B,x as u,o as p,_ as M}from"./mElhLwm2.js";const A={class:"login-bg flex items-center justify-center px-4"},z={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=B({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",A,[e("div",z,[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 +1 @@ |
|||
import{g as t,B as n,P as a,c as o,a as s,o as c}from"./Ccu6Xgpt.js";const i={class:"py-16 text-center text-slate-400"},m=t({__name:"mcpconfig",setup(l){return n(()=>{a("/serviceconfig")}),(r,e)=>(c(),o("div",i,[...e[0]||(e[0]=[s("span",{class:"loading loading-spinner loading-sm"},null,-1),s("p",{class:"text-sm mt-3"},"MCP 配置已并入「第三方服务配置」,正在跳转…",-1)])]))}});export{m as default}; |
|||
import{g as t,B as n,P as a,c as o,a as s,o as c}from"./mElhLwm2.js";const i={class:"py-16 text-center text-slate-400"},m=t({__name:"mcpconfig",setup(l){return n(()=>{a("/serviceconfig")}),(r,e)=>(c(),o("div",i,[...e[0]||(e[0]=[s("span",{class:"loading loading-spinner loading-sm"},null,-1),s("p",{class:"text-sm mt-3"},"MCP 配置已并入「第三方服务配置」,正在跳转…",-1)])]))}});export{m as default}; |
|||
@ -1 +1 @@ |
|||
import{j as w,k as d}from"./Ccu6Xgpt.js";import{u as h}from"./CH2ZVAK2.js";async function f(o,i,a){const e=w(),u=d(),s={"Content-Type":"application/json"};e.token&&(s.Authorization=e.token),a&&Object.assign(s,a);const t=await fetch(o,{method:"POST",headers:s,body:JSON.stringify(i)});if(!t.ok)throw new Error(`HTTP error: ${t.status}`);const n=await t.json();if(n.code===18)throw e.logout(),u.push("/"),new Error(n.msg||"Unauthorized");if(n.code!==0)throw new Error(n.msg||"Unknown error");return n.data}const y=/^(get|list|load|query|fetch|search|count|stat|export|check)/i;function g(o){return!y.test(o)}function A(){const o=w(),{begin:i,end:a}=h();async function e(t,n){const r={};if(o.currentAppId&&(r["X-App-Id"]=String(o.currentAppId)),!g(t))return f(`/web/api/api_${t}`,n??{},r);i();try{return await f(`/web/api/api_${t}`,n??{},r)}finally{a()}}async function u(t,n){return f(`/console/api/${t}`,n??{})}async function s(t,n){const r=t.type||"application/octet-stream",c=await e("getcostoken",{path:n,filename:t.name,content_type:r}),p=c.upload_url||c.url||"";if(!p)throw new Error("未获取到上传地址:请确认已在【第三方服务配置→存储】配置并启用「阿里云 OSS」");const l=await fetch(p,{method:"PUT",headers:{"Content-Type":r},body:t});if(!l.ok)throw new Error(`Upload failed: ${l.status}`);return c.url||p.split("?")[0]}return{webApi:e,consoleApi:u,uploadFile:s}}export{A as u}; |
|||
import{j as w,k as d}from"./mElhLwm2.js";import{u as h}from"./qig5Qp6S.js";async function f(o,i,a){const e=w(),u=d(),s={"Content-Type":"application/json"};e.token&&(s.Authorization=e.token),a&&Object.assign(s,a);const t=await fetch(o,{method:"POST",headers:s,body:JSON.stringify(i)});if(!t.ok)throw new Error(`HTTP error: ${t.status}`);const n=await t.json();if(n.code===18)throw e.logout(),u.push("/"),new Error(n.msg||"Unauthorized");if(n.code!==0)throw new Error(n.msg||"Unknown error");return n.data}const y=/^(get|list|load|query|fetch|search|count|stat|export|check)/i;function g(o){return!y.test(o)}function A(){const o=w(),{begin:i,end:a}=h();async function e(t,n){const r={};if(o.currentAppId&&(r["X-App-Id"]=String(o.currentAppId)),!g(t))return f(`/web/api/api_${t}`,n??{},r);i();try{return await f(`/web/api/api_${t}`,n??{},r)}finally{a()}}async function u(t,n){return f(`/console/api/${t}`,n??{})}async function s(t,n){const r=t.type||"application/octet-stream",c=await e("getcostoken",{path:n,filename:t.name,content_type:r}),p=c.upload_url||c.url||"";if(!p)throw new Error("未获取到上传地址:请确认已在【第三方服务配置→存储】配置并启用「阿里云 OSS」");const l=await fetch(p,{method:"PUT",headers:{"Content-Type":r},body:t});if(!l.ok)throw new Error(`Upload failed: ${l.status}`);return c.url||p.split("?")[0]}return{webApi:e,consoleApi:u,uploadFile:s}}export{A as u}; |
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +1 @@ |
|||
import{L as y,l as x}from"./ChQPCk92.js";import{g as V,c as t,F as u,a as l,n as C,r,l as g,t as o,z as h,o as s,d as B,_ as N}from"./Ccu6Xgpt.js";const L={class:"lang-select"},O={class:"lang-chip-name"},S=["onClick"],j={key:0,class:"lang-empty"},z={key:0,class:"lang-dd"},F={class:"lang-dd-sum"},I={class:"lang-dd-panel"},T=["checked","onChange"],$={class:"lang-opt-code"},w={class:"lang-opt-name"},A=["value","disabled"],D=["value"],E=V({__name:"LangSelect",props:{modelValue:{},multiple:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},options:{default:void 0}},emits:["update:modelValue"],setup(c,{emit:f}){const d=c,m=f,p=h(()=>d.options&&d.options.length?d.options:y),i=h(()=>(d.modelValue||"").split(",").map(a=>a.trim()).filter(Boolean));function v(a){return x(a)}function _(a){if(d.disabled)return;const n=i.value.slice(),e=n.indexOf(a);e>=0?n.splice(e,1):n.push(a),m("update:modelValue",n.join(","))}function b(a){m("update:modelValue",a.target.value)}return(a,n)=>(s(),t("div",L,[c.multiple?(s(),t(u,{key:0},[l("div",{class:C(["lang-chips",{"lang-disabled":c.disabled}])},[(s(!0),t(u,null,r(i.value,e=>(s(),t("span",{key:e,class:"lang-chip"},[B(o(e),1),l("span",O,o(v(e)),1),l("button",{type:"button",class:"lang-x",onClick:k=>_(e)},"×",8,S)]))),128)),i.value.length?g("",!0):(s(),t("span",j,"未选择语言"))],2),c.disabled?g("",!0):(s(),t("details",z,[l("summary",F,"+ 选择语言(已选 "+o(i.value.length)+")",1),l("div",I,[(s(!0),t(u,null,r(p.value,e=>(s(),t("label",{key:e.code,class:"lang-opt"},[l("input",{type:"checkbox",class:"checkbox checkbox-xs checkbox-primary",checked:i.value.includes(e.code),onChange:k=>_(e.code)},null,40,T),l("span",$,o(e.code),1),l("span",w,o(e.name),1)]))),128))])]))],64)):(s(),t("select",{key:1,class:"select select-bordered select-sm w-full text-xs",value:c.modelValue,disabled:c.disabled,onChange:b},[n[0]||(n[0]=l("option",{value:""},"(未设置)",-1)),(s(!0),t(u,null,r(p.value,e=>(s(),t("option",{key:e.code,value:e.code},o(e.code)+" · "+o(e.name),9,D))),128))],40,A))]))}}),q=Object.assign(N(E,[["__scopeId","data-v-4903af59"]]),{__name:"LangSelect"});export{q as _}; |
|||
import{L as y,l as x}from"./ChQPCk92.js";import{g as V,c as t,F as u,a as l,n as C,r,l as g,t as o,z as h,o as s,d as B,_ as N}from"./mElhLwm2.js";const L={class:"lang-select"},O={class:"lang-chip-name"},S=["onClick"],j={key:0,class:"lang-empty"},z={key:0,class:"lang-dd"},F={class:"lang-dd-sum"},I={class:"lang-dd-panel"},T=["checked","onChange"],$={class:"lang-opt-code"},w={class:"lang-opt-name"},A=["value","disabled"],D=["value"],E=V({__name:"LangSelect",props:{modelValue:{},multiple:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},options:{default:void 0}},emits:["update:modelValue"],setup(c,{emit:f}){const d=c,m=f,p=h(()=>d.options&&d.options.length?d.options:y),i=h(()=>(d.modelValue||"").split(",").map(a=>a.trim()).filter(Boolean));function v(a){return x(a)}function _(a){if(d.disabled)return;const n=i.value.slice(),e=n.indexOf(a);e>=0?n.splice(e,1):n.push(a),m("update:modelValue",n.join(","))}function b(a){m("update:modelValue",a.target.value)}return(a,n)=>(s(),t("div",L,[c.multiple?(s(),t(u,{key:0},[l("div",{class:C(["lang-chips",{"lang-disabled":c.disabled}])},[(s(!0),t(u,null,r(i.value,e=>(s(),t("span",{key:e,class:"lang-chip"},[B(o(e),1),l("span",O,o(v(e)),1),l("button",{type:"button",class:"lang-x",onClick:k=>_(e)},"×",8,S)]))),128)),i.value.length?g("",!0):(s(),t("span",j,"未选择语言"))],2),c.disabled?g("",!0):(s(),t("details",z,[l("summary",F,"+ 选择语言(已选 "+o(i.value.length)+")",1),l("div",I,[(s(!0),t(u,null,r(p.value,e=>(s(),t("label",{key:e.code,class:"lang-opt"},[l("input",{type:"checkbox",class:"checkbox checkbox-xs checkbox-primary",checked:i.value.includes(e.code),onChange:k=>_(e.code)},null,40,T),l("span",$,o(e.code),1),l("span",w,o(e.name),1)]))),128))])]))],64)):(s(),t("select",{key:1,class:"select select-bordered select-sm w-full text-xs",value:c.modelValue,disabled:c.disabled,onChange:b},[n[0]||(n[0]=l("option",{value:""},"(未设置)",-1)),(s(!0),t(u,null,r(p.value,e=>(s(),t("option",{key:e.code,value:e.code},o(e.code)+" · "+o(e.name),9,D))),128))],40,A))]))}}),q=Object.assign(N(E,[["__scopeId","data-v-4903af59"]]),{__name:"LangSelect"});export{q as _}; |
|||
File diff suppressed because one or more lines are too long
@ -1 +1 @@ |
|||
import{_ as t,o,c as s,R as c}from"./Ccu6Xgpt.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,R as c}from"./mElhLwm2.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}; |
|||
@ -1,4 +1,4 @@ |
|||
import{g as G,B as K,Q as P,c as a,a as e,d as u,p as x,q as M,F as f,r as U,v as Q,s as Y,t as n,x as i,z as E,o,n as F,l as I,_ as Z}from"./Ccu6Xgpt.js";import{u as J}from"./Um-KoueI.js";import{u as W}from"./DvwKXRUn.js";import"./CH2ZVAK2.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}=J(),{success:O,error:R}=W(),z={cn:"中国",us:"美国",ea:"东亚",sea:"东南亚",sa:"南亚",me:"中东",eu:"欧洲",ru:"俄罗斯",af:"非洲",sam:"南美",nam:"北美",oc:"大洋洲",br:"巴西",in:"印度"};function D(l){return l?z[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 B(l){return l==="error"?{cls:"lv-error",txt:"解析失败"}:l==="warn"?{cls:"lv-warn",txt:"未落库"}:{cls:"lv-info",txt:"已落库"}}function H(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 j(){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,B as K,Q as P,c as a,a as e,d as u,p as x,q as M,F as f,r as U,v as Q,s as Y,t as n,x as i,z as E,o,n as F,l as I,_ as Z}from"./mElhLwm2.js";import{u as J}from"./C6twYRfy.js";import{u as W}from"./FVTAbpot.js";import"./qig5Qp6S.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}=J(),{success:O,error:R}=W(),z={cn:"中国",us:"美国",ea:"东亚",sea:"东南亚",sa:"南亚",me:"中东",eu:"欧洲",ru:"俄罗斯",af:"非洲",sam:"南美",nam:"北美",oc:"大洋洲",br:"巴西",in:"印度"};function D(l){return l?z[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 B(l){return l==="error"?{cls:"lv-error",txt:"解析失败"}:l==="warn"?{cls:"lv-warn",txt:"未落库"}:{cls:"lv-info",txt:"已落库"}}function H(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 j(){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});O("已清空 "+(r&&r.cleared!=null?r.cleared:0)+" 条"),m()}catch(r){R("清空失败:"+(r?.message||"网络异常"))}}function q(){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,U(V.value,t=>(o(),a("option",{key:t.value,value:t.value},n(t.label),9,et))),128))],544),[[M,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),[[M,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),[[Q,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:q},null,544),[[Y,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:j},"清空本日")])]),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},U(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",B(t.level).cls])},n(B(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),H(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))])])]))}}),Lt=Z(kt,[["__scopeId","data-v-742ee359"]]);export{Lt as default};
|
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +1 @@ |
|||
import{_ as s}from"./DiXjRAbV.js";import{_ as a,o as i,c as u,a as t,t as n,b as c,w as l,d}from"./Ccu6Xgpt.js";import{u as f}from"./oiJG5Pzc.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"./DuRQSWLc.js";import{_ as a,o as i,c as u,a as t,t as n,b as c,w as l,d}from"./mElhLwm2.js";import{u as f}from"./OLpUuA7c.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}; |
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +1 @@ |
|||
import{a as u}from"./CH2ZVAK2.js";let i=0;function f(){const o=u("app:toasts",()=>[]);function e(s,t="info",r=3e3){const a=++i;o.value.push({id:a,type:t,msg:s}),r>0&&setTimeout(()=>{o.value=o.value.filter(n=>n.id!==a)},r)}return{toasts:o,toast:e,success:(s,t)=>e(s,"success",t),error:(s,t)=>e(s,"error",t),info:(s,t)=>e(s,"info",t),warn:(s,t)=>e(s,"warning",t)}}export{f as u}; |
|||
import{a as u}from"./qig5Qp6S.js";let i=0;function f(){const o=u("app:toasts",()=>[]);function e(s,t="info",r=3e3){const a=++i;o.value.push({id:a,type:t,msg:s}),r>0&&setTimeout(()=>{o.value=o.value.filter(n=>n.id!==a)},r)}return{toasts:o,toast:e,success:(s,t)=>e(s,"success",t),error:(s,t)=>e(s,"error",t),info:(s,t)=>e(s,"info",t),warn:(s,t)=>e(s,"warning",t)}}export{f as u}; |
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +1 @@ |
|||
import{u as a,e as s,h as u,i as r,f as h}from"./Ccu6Xgpt.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"./mElhLwm2.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}; |
|||
@ -0,0 +1 @@ |
|||
const a={1:"中国",2:"美国",3:"东亚",4:"东南亚",5:"南亚",6:"中东",7:"欧洲",8:"俄罗斯",9:"非洲",10:"南美",11:"北美",12:"大洋洲",13:"巴西",14:"印度"},o={1:"STT",2:"TTS",3:"MT",4:"AST",5:"文本LLM",6:"存储",7:"STS",8:"录音识别",9:"多媒体LLM",10:"MCP"},l={error:{label:"不可用",color:"#be123c",bg:"#ffe4e6"},warn:{label:"有隐患",color:"#b45309",bg:"#fef3c7"},ok:{label:"正常",color:"#047857",bg:"#d1fae5"},skip:{label:"已停用",color:"#64748b",bg:"#f1f5f9"}},s={credential:{label:"凭据已验证",hint:"已用真实凭据调通服务商接口"},reachable:{label:"仅连通性",hint:"地址可达,但未验证凭据是否有效"},none:{label:"未探测",hint:"暂无该服务商的探针,可用性未经验证"}};function i(r){const e=r.config_issues||[],n=e.filter(t=>t.startsWith("[致命] "));return n.length?n.map(t=>t.replace("[致命] ","")).join(";"):r.status==="error"?r.probe_msg||"巡检失败":e.length?e.join(";"):r.probe_kind==="none"?r.probe_msg||"未验证可用性":r.probe_msg||""}function f(r){if(!r)return"尚未执行";const e=Date.now()-r;return e<6e4?"刚刚":e<36e5?`${Math.floor(e/6e4)} 分钟前`:e<864e5?`${Math.floor(e/36e5)} 小时前`:new Date(r).toLocaleString("zh-CN",{hour12:!1})}function b(r){return(r||"").split(",").map(e=>Number(e.trim())).filter(e=>!Number.isNaN(e)&&e>0)}export{o as C,s as P,a as R,l as S,i as a,f as h,b as p}; |
|||
File diff suppressed because one or more lines are too long
@ -1 +1 @@ |
|||
{"id":"1c187759-8384-4449-899e-e6f5237cf6d9","timestamp":1785495714123} |
|||
{"id":"1ce432df-603d-4010-810b-770972167d80","timestamp":1785747952724} |
|||
@ -1 +0,0 @@ |
|||
{"id":"1c187759-8384-4449-899e-e6f5237cf6d9","timestamp":1785495714123,"prerendered":[]} |
|||
@ -0,0 +1 @@ |
|||
{"id":"1ce432df-603d-4010-810b-770972167d80","timestamp":1785747952724,"prerendered":[]} |
|||
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@ |
|||
.panel[data-v-7dbe8712]{background:#fff;border:1px solid #f1f5f9;border-radius:16px;box-shadow:0 1px 2px #0000000a;overflow:hidden}.panel-head[data-v-7dbe8712]{padding:12px 18px;gap:10px;border-bottom:1px solid #f8fafc;flex-wrap:wrap}.panel-dot[data-v-7dbe8712],.panel-head[data-v-7dbe8712]{display:flex;align-items:center}.panel-dot[data-v-7dbe8712]{width:30px;height:30px;border-radius:9px;justify-content:center;flex-shrink:0}.stat-box[data-v-7dbe8712]{padding:10px 12px;border-radius:10px;background:#fafbfc}.stat-label[data-v-7dbe8712]{font-size:11px;color:#94a3b8;margin-bottom:3px}.stat-val[data-v-7dbe8712]{font-size:20px;font-weight:700;color:#1e293b;line-height:1.1;letter-spacing:-.02em}.sec-title[data-v-7dbe8712]{display:flex;align-items:center;gap:10px;margin:0 0 14px}.sec-title .bar[data-v-7dbe8712]{width:4px;height:18px;border-radius:3px}.sec-title h2[data-v-7dbe8712]{font-size:15px;font-weight:700;color:#0f172a;letter-spacing:-.01em}.sec-title .sub[data-v-7dbe8712]{font-size:12px;color:#94a3b8}.sec-title .tag[data-v-7dbe8712]{font-size:11px;font-weight:600;padding:2px 9px;border-radius:999px}.sec-title.muted .bar[data-v-7dbe8712]{height:14px;opacity:.6}.sec-title.muted h2[data-v-7dbe8712]{font-size:13px;font-weight:600;color:#94a3b8}.sec-title.hero .bar[data-v-7dbe8712]{width:5px;height:22px}.sec-title.hero h2[data-v-7dbe8712]{font-size:18px;font-weight:800;color:#0f172a}.cum-card[data-v-7dbe8712]{gap:11px;background:#f8fafc;border:1px solid #eef2f7;border-radius:12px;padding:10px 13px}.cum-card[data-v-7dbe8712],.cum-card .ico[data-v-7dbe8712]{display:flex;align-items:center}.cum-card .ico[data-v-7dbe8712]{width:30px;height:30px;border-radius:9px;justify-content:center;flex-shrink:0;font-size:14px;filter:saturate(.65);opacity:.85}.cum-card .body[data-v-7dbe8712]{min-width:0}.cum-card .lbl[data-v-7dbe8712]{font-size:11.5px;color:#94a3b8;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cum-card .val[data-v-7dbe8712]{font-size:17px;font-weight:700;color:#64748b;line-height:1.3;letter-spacing:-.01em;margin-top:1px}.today-wrap[data-v-7dbe8712]{background:linear-gradient(180deg,#e8f1ff,#f5f9ff);border:1px solid #d6e4ff;border-radius:22px;padding:20px;box-shadow:0 1px 3px #0d6efd0d}.today-card[data-v-7dbe8712]{position:relative;background:#fff;border:1px solid #e6eefb;border-radius:18px;padding:17px 19px;box-shadow:0 6px 18px #0d6efd14;transition:transform .18s ease,box-shadow .18s ease;overflow:hidden}.today-card[data-v-7dbe8712]:hover{transform:translateY(-3px);box-shadow:0 14px 32px #0d6efd26}.today-card .accent[data-v-7dbe8712]{position:absolute;left:0;top:0;bottom:0;width:5px}.today-card-top[data-v-7dbe8712]{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.today-card .lbl[data-v-7dbe8712]{font-size:13px;color:#475569;font-weight:600}.today-card .ico[data-v-7dbe8712]{width:42px;height:42px;border-radius:13px;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:20px}.today-card .val[data-v-7dbe8712]{font-size:31px;font-weight:800;color:#0f172a;line-height:1.05;letter-spacing:-.02em}.today-card .foot[data-v-7dbe8712]{margin-top:9px;font-size:12px;color:#94a3b8;display:flex;align-items:center;gap:6px}.delta[data-v-7dbe8712]{display:inline-flex;align-items:center;gap:2px;font-weight:700;padding:2px 7px;border-radius:7px;font-size:11.5px}.delta.up[data-v-7dbe8712]{color:#059669;background:#ecfdf5}.delta.down[data-v-7dbe8712]{color:#dc2626;background:#fef2f2}.delta.flat[data-v-7dbe8712],.tbtn[data-v-7dbe8712]{color:#64748b;background:#f1f5f9}.tbtn[data-v-7dbe8712]{font-size:11px;padding:3px 9px;border-radius:7px;line-height:1.4}.tbtn[data-v-7dbe8712]:hover{background:#e2e8f0}.tbtn-on[data-v-7dbe8712]{background:#1e293b;color:#fff} |
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +1 @@ |
|||
import{e as f,a9 as p,aa as c,z as r}from"./Ccu6Xgpt.js";const l="$s";function y(...t){const a=typeof t[t.length-1]=="string"?t.pop():void 0;typeof t[0]!="string"&&t.unshift(a);const[n,e]=t;if(!n||typeof n!="string")throw new TypeError("[nuxt] [useState] key must be a string: "+n);if(e!==void 0&&typeof e!="function")throw new Error("[nuxt] [useState] init must be a function: "+e);const i=l+n,u=f(),s=p(u.payload.state,i);if(e&&(u._state[i]??={_default:e}),s.value===void 0&&e){const o=e();if(c(o))return u.payload.state[i]=o,o;s.value=o}return s}function v(){const t=y("app:loading",()=>0),a=r(()=>t.value>0);function n(){t.value++}function e(){t.value=Math.max(0,t.value-1)}return{count:t,loading:a,begin:n,end:e}}export{y as a,v as u}; |
|||
import{e as f,a9 as p,aa as c,z as r}from"./mElhLwm2.js";const l="$s";function y(...t){const a=typeof t[t.length-1]=="string"?t.pop():void 0;typeof t[0]!="string"&&t.unshift(a);const[n,e]=t;if(!n||typeof n!="string")throw new TypeError("[nuxt] [useState] key must be a string: "+n);if(e!==void 0&&typeof e!="function")throw new Error("[nuxt] [useState] init must be a function: "+e);const i=l+n,u=f(),s=p(u.payload.state,i);if(e&&(u._state[i]??={_default:e}),s.value===void 0&&e){const o=e();if(c(o))return u.payload.state[i]=o,o;s.value=o}return s}function v(){const t=y("app:loading",()=>0),a=r(()=>t.value>0);function n(){t.value++}function e(){t.value=Math.max(0,t.value-1)}return{count:t,loading:a,begin:n,end:e}}export{y as a,v as u}; |
|||
@ -0,0 +1 @@ |
|||
.panel[data-v-a9764f3a]{background:#fff;border:1px solid #f1f5f9;border-radius:16px;box-shadow:0 1px 2px #0000000a;overflow:hidden}.panel-head[data-v-a9764f3a]{padding:12px 18px;gap:10px;border-bottom:1px solid #f8fafc;flex-wrap:wrap}.panel-head[data-v-a9764f3a],.sum-card[data-v-a9764f3a]{display:flex;align-items:center}.sum-card[data-v-a9764f3a]{gap:11px;background:#f8fafc;border:1px solid #eef2f7;border-radius:12px;padding:10px 13px;cursor:pointer;transition:all .15s}.sum-card[data-v-a9764f3a]:hover{border-color:#cbd5e1}.sum-card.on[data-v-a9764f3a]{border-color:#0f172a;background:#fff;box-shadow:inset 0 0 0 1px #0f172a}.sum-ico[data-v-a9764f3a]{width:30px;height:30px;border-radius:9px;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:14px}.sum-lbl[data-v-a9764f3a]{font-size:11.5px;color:#94a3b8;line-height:1.2}.sum-val[data-v-a9764f3a]{font-size:19px;font-weight:700;line-height:1.3;letter-spacing:-.01em}.st-badge[data-v-a9764f3a]{font-size:11px;font-weight:700;padding:2px 9px;border-radius:999px;white-space:nowrap}.streak[data-v-a9764f3a]{font-size:10.5px;color:#be123c;margin-top:3px;font-weight:600}.chip[data-v-a9764f3a]{display:inline-block;font-size:11px;padding:1px 7px;border-radius:999px;background:#f1f5f9;color:#64748b;margin-right:4px;white-space:nowrap}.chip-scope[data-v-a9764f3a]{background:#e0e7ff;color:#4338ca}.chip-region[data-v-a9764f3a]{background:#cffafe;color:#0e7490}.pk-credential[data-v-a9764f3a]{background:#d1fae5;color:#047857}.pk-reachable[data-v-a9764f3a]{background:#fef3c7;color:#b45309}.pk-none[data-v-a9764f3a]{background:#f1f5f9;color:#94a3b8}.reason-cell[data-v-a9764f3a]{max-width:420px;font-size:12px;line-height:1.5}.issue-list[data-v-a9764f3a]{margin-top:3px}.issue[data-v-a9764f3a]{font-size:11px;color:#94a3b8} |
|||
@ -0,0 +1,8 @@ |
|||
import { S as SvcAlertBanner_vue_vue_type_style_index_0_scoped_3dd2fb7c_lang } from './dashboard-styles-1.mjs-CFxtv9Pt.mjs'; |
|||
|
|||
const SvcAlertBannerStyles_C9CJuYwV = [ |
|||
SvcAlertBanner_vue_vue_type_style_index_0_scoped_3dd2fb7c_lang |
|||
]; |
|||
|
|||
export { SvcAlertBannerStyles_C9CJuYwV as default }; |
|||
//# sourceMappingURL=SvcAlertBanner-styles.C9CJuYwV.mjs.map
|
|||
@ -0,0 +1 @@ |
|||
{"version":3,"file":"SvcAlertBanner-styles.C9CJuYwV.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/SvcAlertBanner-styles.C9CJuYwV.mjs"],"names":["style_0"],"mappings":"","x_google_ignoreList":[0]} |
|||
File diff suppressed because one or more lines are too long
@ -0,0 +1 @@ |
|||
{"version":3,"file":"dashboard-CXdhxG8p.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/dashboard-CXdhxG8p.js"],"names":[],"mappings":"","x_google_ignoreList":[0]} |
|||
@ -1 +0,0 @@ |
|||
{"version":3,"file":"dashboard-CeM8vxnU.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/dashboard-CeM8vxnU.js"],"names":[],"mappings":"","x_google_ignoreList":[0]} |
|||
@ -0,0 +1,4 @@ |
|||
const SvcAlertBanner_vue_vue_type_style_index_0_scoped_3dd2fb7c_lang = ".alert-banner[data-v-3dd2fb7c]{border-radius:14px;padding:12px 16px;margin-bottom:18px;border:1px solid}.lv-error[data-v-3dd2fb7c]{background:linear-gradient(180deg,#fff1f2,#fff7f7);border-color:#fecdd3}.lv-warn[data-v-3dd2fb7c]{background:linear-gradient(180deg,#fffbeb,#fffdf5);border-color:#fde68a}.ab-head[data-v-3dd2fb7c]{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.ab-ico[data-v-3dd2fb7c]{font-size:17px;line-height:1}.ab-title[data-v-3dd2fb7c]{font-size:13px;color:#334155;flex:1;min-width:200px}.lv-error .ab-title strong[data-v-3dd2fb7c]{color:#be123c}.lv-warn .ab-title strong[data-v-3dd2fb7c]{color:#b45309}.ab-sub[data-v-3dd2fb7c]{color:#94a3b8;font-size:12px}.ab-btn[data-v-3dd2fb7c]{font-size:12px;padding:4px 11px;border-radius:8px;border:1px solid #e2e8f0;background:#fff;color:#475569;white-space:nowrap}.ab-btn[data-v-3dd2fb7c]:hover{background:#f8fafc}.ab-btn-primary[data-v-3dd2fb7c]{background:#0f172a;border-color:#0f172a;color:#fff}.ab-btn-primary[data-v-3dd2fb7c]:hover{background:#1e293b}.ab-list[data-v-3dd2fb7c]{margin-top:10px;padding-top:10px;border-top:1px dashed rgba(148,163,184,.4);display:flex;flex-direction:column;gap:6px}.ab-item[data-v-3dd2fb7c]{display:flex;align-items:center;gap:8px;font-size:12.5px;color:#475569;flex-wrap:wrap}.ab-dot[data-v-3dd2fb7c]{width:7px;height:7px;border-radius:50%;flex-shrink:0}.d-error[data-v-3dd2fb7c]{background:#f43f5e}.d-warn[data-v-3dd2fb7c]{background:#f59e0b}.ab-name[data-v-3dd2fb7c]{font-weight:600;color:#1e293b}.ab-chip[data-v-3dd2fb7c]{font-size:11px;padding:1px 7px;border-radius:999px;background:#f1f5f9;color:#64748b}.ab-chip-scope[data-v-3dd2fb7c]{background:#e0e7ff;color:#4338ca}.ab-msg[data-v-3dd2fb7c]{color:#64748b;flex:1;min-width:160px}.ab-streak[data-v-3dd2fb7c]{font-size:11px;color:#be123c;font-weight:600}.ab-more[data-v-3dd2fb7c]{font-size:12px;color:#94a3b8;padding-top:2px}.ab-link[data-v-3dd2fb7c]{color:#4338ca;text-decoration:underline;margin:0 2px}"; |
|||
|
|||
export { SvcAlertBanner_vue_vue_type_style_index_0_scoped_3dd2fb7c_lang as S }; |
|||
//# sourceMappingURL=dashboard-styles-1.mjs-CFxtv9Pt.mjs.map
|
|||
@ -0,0 +1 @@ |
|||
{"version":3,"file":"dashboard-styles-1.mjs-CFxtv9Pt.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/dashboard-styles-1.mjs-CFxtv9Pt.js"],"names":[],"mappings":"","x_google_ignoreList":[0]} |
|||
@ -0,0 +1,11 @@ |
|||
import { S as SvcAlertBanner_vue_vue_type_style_index_0_scoped_3dd2fb7c_lang } from './dashboard-styles-1.mjs-CFxtv9Pt.mjs'; |
|||
|
|||
const dashboard_vue_vue_type_style_index_0_scoped_0c034b8c_lang = ".panel[data-v-0c034b8c]{background:#fff;border:1px solid #f1f5f9;border-radius:16px;box-shadow:0 1px 2px #0000000a;overflow:hidden}.panel-head[data-v-0c034b8c]{padding:12px 18px;gap:10px;border-bottom:1px solid #f8fafc;flex-wrap:wrap}.panel-dot[data-v-0c034b8c],.panel-head[data-v-0c034b8c]{display:flex;align-items:center}.panel-dot[data-v-0c034b8c]{width:30px;height:30px;border-radius:9px;justify-content:center;flex-shrink:0}.stat-box[data-v-0c034b8c]{padding:10px 12px;border-radius:10px;background:#fafbfc}.stat-label[data-v-0c034b8c]{font-size:11px;color:#94a3b8;margin-bottom:3px}.stat-val[data-v-0c034b8c]{font-size:20px;font-weight:700;color:#1e293b;line-height:1.1;letter-spacing:-.02em}.sec-title[data-v-0c034b8c]{display:flex;align-items:center;gap:10px;margin:0 0 14px}.sec-title .bar[data-v-0c034b8c]{width:4px;height:18px;border-radius:3px}.sec-title h2[data-v-0c034b8c]{font-size:15px;font-weight:700;color:#0f172a;letter-spacing:-.01em}.sec-title .sub[data-v-0c034b8c]{font-size:12px;color:#94a3b8}.sec-title .tag[data-v-0c034b8c]{font-size:11px;font-weight:600;padding:2px 9px;border-radius:999px}.sec-title.muted .bar[data-v-0c034b8c]{height:14px;opacity:.6}.sec-title.muted h2[data-v-0c034b8c]{font-size:13px;font-weight:600;color:#94a3b8}.sec-title.hero .bar[data-v-0c034b8c]{width:5px;height:22px}.sec-title.hero h2[data-v-0c034b8c]{font-size:18px;font-weight:800;color:#0f172a}.cum-card[data-v-0c034b8c]{gap:11px;background:#f8fafc;border:1px solid #eef2f7;border-radius:12px;padding:10px 13px}.cum-card[data-v-0c034b8c],.cum-card .ico[data-v-0c034b8c]{display:flex;align-items:center}.cum-card .ico[data-v-0c034b8c]{width:30px;height:30px;border-radius:9px;justify-content:center;flex-shrink:0;font-size:14px;filter:saturate(.65);opacity:.85}.cum-card .body[data-v-0c034b8c]{min-width:0}.cum-card .lbl[data-v-0c034b8c]{font-size:11.5px;color:#94a3b8;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cum-card .val[data-v-0c034b8c]{font-size:17px;font-weight:700;color:#64748b;line-height:1.3;letter-spacing:-.01em;margin-top:1px}.today-wrap[data-v-0c034b8c]{background:linear-gradient(180deg,#e8f1ff,#f5f9ff);border:1px solid #d6e4ff;border-radius:22px;padding:20px;box-shadow:0 1px 3px #0d6efd0d}.today-card[data-v-0c034b8c]{position:relative;background:#fff;border:1px solid #e6eefb;border-radius:18px;padding:17px 19px;box-shadow:0 6px 18px #0d6efd14;transition:transform .18s ease,box-shadow .18s ease;overflow:hidden}.today-card[data-v-0c034b8c]:hover{transform:translateY(-3px);box-shadow:0 14px 32px #0d6efd26}.today-card .accent[data-v-0c034b8c]{position:absolute;left:0;top:0;bottom:0;width:5px}.today-card-top[data-v-0c034b8c]{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.today-card .lbl[data-v-0c034b8c]{font-size:13px;color:#475569;font-weight:600}.today-card .ico[data-v-0c034b8c]{width:42px;height:42px;border-radius:13px;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:20px}.today-card .val[data-v-0c034b8c]{font-size:31px;font-weight:800;color:#0f172a;line-height:1.05;letter-spacing:-.02em}.today-card .foot[data-v-0c034b8c]{margin-top:9px;font-size:12px;color:#94a3b8;display:flex;align-items:center;gap:6px}.delta[data-v-0c034b8c]{display:inline-flex;align-items:center;gap:2px;font-weight:700;padding:2px 7px;border-radius:7px;font-size:11.5px}.delta.up[data-v-0c034b8c]{color:#059669;background:#ecfdf5}.delta.down[data-v-0c034b8c]{color:#dc2626;background:#fef2f2}.delta.flat[data-v-0c034b8c],.tbtn[data-v-0c034b8c]{color:#64748b;background:#f1f5f9}.tbtn[data-v-0c034b8c]{font-size:11px;padding:3px 9px;border-radius:7px;line-height:1.4}.tbtn[data-v-0c034b8c]:hover{background:#e2e8f0}.tbtn-on[data-v-0c034b8c]{background:#1e293b;color:#fff}"; |
|||
|
|||
const dashboardStyles_8BsG9zJ = [ |
|||
SvcAlertBanner_vue_vue_type_style_index_0_scoped_3dd2fb7c_lang, |
|||
dashboard_vue_vue_type_style_index_0_scoped_0c034b8c_lang |
|||
]; |
|||
|
|||
export { dashboardStyles_8BsG9zJ as default }; |
|||
//# sourceMappingURL=dashboard-styles.8Bs-G9zJ.mjs.map
|
|||
@ -0,0 +1 @@ |
|||
{"version":3,"file":"dashboard-styles.8Bs-G9zJ.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/dashboard-styles-2.mjs-CRINJjkO.js","../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/dashboard-styles.8Bs-G9zJ.mjs"],"names":["style_0","style_1"],"mappings":"","x_google_ignoreList":[0,1]} |
|||
@ -1,8 +0,0 @@ |
|||
const dashboard_vue_vue_type_style_index_0_scoped_7dbe8712_lang = ".panel[data-v-7dbe8712]{background:#fff;border:1px solid #f1f5f9;border-radius:16px;box-shadow:0 1px 2px #0000000a;overflow:hidden}.panel-head[data-v-7dbe8712]{padding:12px 18px;gap:10px;border-bottom:1px solid #f8fafc;flex-wrap:wrap}.panel-dot[data-v-7dbe8712],.panel-head[data-v-7dbe8712]{display:flex;align-items:center}.panel-dot[data-v-7dbe8712]{width:30px;height:30px;border-radius:9px;justify-content:center;flex-shrink:0}.stat-box[data-v-7dbe8712]{padding:10px 12px;border-radius:10px;background:#fafbfc}.stat-label[data-v-7dbe8712]{font-size:11px;color:#94a3b8;margin-bottom:3px}.stat-val[data-v-7dbe8712]{font-size:20px;font-weight:700;color:#1e293b;line-height:1.1;letter-spacing:-.02em}.sec-title[data-v-7dbe8712]{display:flex;align-items:center;gap:10px;margin:0 0 14px}.sec-title .bar[data-v-7dbe8712]{width:4px;height:18px;border-radius:3px}.sec-title h2[data-v-7dbe8712]{font-size:15px;font-weight:700;color:#0f172a;letter-spacing:-.01em}.sec-title .sub[data-v-7dbe8712]{font-size:12px;color:#94a3b8}.sec-title .tag[data-v-7dbe8712]{font-size:11px;font-weight:600;padding:2px 9px;border-radius:999px}.sec-title.muted .bar[data-v-7dbe8712]{height:14px;opacity:.6}.sec-title.muted h2[data-v-7dbe8712]{font-size:13px;font-weight:600;color:#94a3b8}.sec-title.hero .bar[data-v-7dbe8712]{width:5px;height:22px}.sec-title.hero h2[data-v-7dbe8712]{font-size:18px;font-weight:800;color:#0f172a}.cum-card[data-v-7dbe8712]{gap:11px;background:#f8fafc;border:1px solid #eef2f7;border-radius:12px;padding:10px 13px}.cum-card[data-v-7dbe8712],.cum-card .ico[data-v-7dbe8712]{display:flex;align-items:center}.cum-card .ico[data-v-7dbe8712]{width:30px;height:30px;border-radius:9px;justify-content:center;flex-shrink:0;font-size:14px;filter:saturate(.65);opacity:.85}.cum-card .body[data-v-7dbe8712]{min-width:0}.cum-card .lbl[data-v-7dbe8712]{font-size:11.5px;color:#94a3b8;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cum-card .val[data-v-7dbe8712]{font-size:17px;font-weight:700;color:#64748b;line-height:1.3;letter-spacing:-.01em;margin-top:1px}.today-wrap[data-v-7dbe8712]{background:linear-gradient(180deg,#e8f1ff,#f5f9ff);border:1px solid #d6e4ff;border-radius:22px;padding:20px;box-shadow:0 1px 3px #0d6efd0d}.today-card[data-v-7dbe8712]{position:relative;background:#fff;border:1px solid #e6eefb;border-radius:18px;padding:17px 19px;box-shadow:0 6px 18px #0d6efd14;transition:transform .18s ease,box-shadow .18s ease;overflow:hidden}.today-card[data-v-7dbe8712]:hover{transform:translateY(-3px);box-shadow:0 14px 32px #0d6efd26}.today-card .accent[data-v-7dbe8712]{position:absolute;left:0;top:0;bottom:0;width:5px}.today-card-top[data-v-7dbe8712]{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.today-card .lbl[data-v-7dbe8712]{font-size:13px;color:#475569;font-weight:600}.today-card .ico[data-v-7dbe8712]{width:42px;height:42px;border-radius:13px;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:20px}.today-card .val[data-v-7dbe8712]{font-size:31px;font-weight:800;color:#0f172a;line-height:1.05;letter-spacing:-.02em}.today-card .foot[data-v-7dbe8712]{margin-top:9px;font-size:12px;color:#94a3b8;display:flex;align-items:center;gap:6px}.delta[data-v-7dbe8712]{display:inline-flex;align-items:center;gap:2px;font-weight:700;padding:2px 7px;border-radius:7px;font-size:11.5px}.delta.up[data-v-7dbe8712]{color:#059669;background:#ecfdf5}.delta.down[data-v-7dbe8712]{color:#dc2626;background:#fef2f2}.delta.flat[data-v-7dbe8712],.tbtn[data-v-7dbe8712]{color:#64748b;background:#f1f5f9}.tbtn[data-v-7dbe8712]{font-size:11px;padding:3px 9px;border-radius:7px;line-height:1.4}.tbtn[data-v-7dbe8712]:hover{background:#e2e8f0}.tbtn-on[data-v-7dbe8712]{background:#1e293b;color:#fff}"; |
|||
|
|||
const dashboardStyles_CGuiyPm5 = [ |
|||
dashboard_vue_vue_type_style_index_0_scoped_7dbe8712_lang |
|||
]; |
|||
|
|||
export { dashboardStyles_CGuiyPm5 as default }; |
|||
//# sourceMappingURL=dashboard-styles.CGuiyPm5.mjs.map
|
|||
@ -1 +0,0 @@ |
|||
{"version":3,"file":"dashboard-styles.CGuiyPm5.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/dashboard-styles-1.mjs-Cr2VlWVR.js","../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/dashboard-styles.CGuiyPm5.mjs"],"names":["style_0"],"mappings":"","x_google_ignoreList":[0,1]} |
|||
@ -0,0 +1,62 @@ |
|||
const REGION_LABEL = { |
|||
1: "中国", |
|||
2: "美国", |
|||
3: "东亚", |
|||
4: "东南亚", |
|||
5: "南亚", |
|||
6: "中东", |
|||
7: "欧洲", |
|||
8: "俄罗斯", |
|||
9: "非洲", |
|||
10: "南美", |
|||
11: "北美", |
|||
12: "大洋洲", |
|||
13: "巴西", |
|||
14: "印度" |
|||
}; |
|||
const CAT_LABEL = { |
|||
1: "STT", |
|||
2: "TTS", |
|||
3: "MT", |
|||
4: "AST", |
|||
5: "文本LLM", |
|||
6: "存储", |
|||
7: "STS", |
|||
8: "录音识别", |
|||
9: "多媒体LLM", |
|||
10: "MCP" |
|||
}; |
|||
const STATUS_META = { |
|||
error: { label: "不可用", color: "#be123c", bg: "#ffe4e6" }, |
|||
warn: { label: "有隐患", color: "#b45309", bg: "#fef3c7" }, |
|||
ok: { label: "正常", color: "#047857", bg: "#d1fae5" }, |
|||
skip: { label: "已停用", color: "#64748b", bg: "#f1f5f9" } |
|||
}; |
|||
const PROBE_META = { |
|||
credential: { label: "凭据已验证", hint: "已用真实凭据调通服务商接口" }, |
|||
reachable: { label: "仅连通性", hint: "地址可达,但未验证凭据是否有效" }, |
|||
none: { label: "未探测", hint: "暂无该服务商的探针,可用性未经验证" } |
|||
}; |
|||
function healthReason(h) { |
|||
const issues = h.config_issues || []; |
|||
const fatal = issues.filter((s) => s.startsWith("[致命] ")); |
|||
if (fatal.length) return fatal.map((s) => s.replace("[致命] ", "")).join(";"); |
|||
if (h.status === "error") return h.probe_msg || "巡检失败"; |
|||
if (issues.length) return issues.join(";"); |
|||
if (h.probe_kind === "none") return h.probe_msg || "未验证可用性"; |
|||
return h.probe_msg || ""; |
|||
} |
|||
function healthLastRunText(ms) { |
|||
if (!ms) return "尚未执行"; |
|||
const diff = Date.now() - ms; |
|||
if (diff < 6e4) return "刚刚"; |
|||
if (diff < 36e5) return `${Math.floor(diff / 6e4)} 分钟前`; |
|||
if (diff < 864e5) return `${Math.floor(diff / 36e5)} 小时前`; |
|||
return new Date(ms).toLocaleString("zh-CN", { hour12: false }); |
|||
} |
|||
function parseCats(categories) { |
|||
return (categories || "").split(",").map((s) => Number(s.trim())).filter((n) => !Number.isNaN(n) && n > 0); |
|||
} |
|||
|
|||
export { CAT_LABEL as C, PROBE_META as P, REGION_LABEL as R, STATUS_META as S, healthReason as a, healthLastRunText as h, parseCats as p }; |
|||
//# sourceMappingURL=svchealth-8zW8U1Ef.mjs.map
|
|||
@ -0,0 +1 @@ |
|||
{"version":3,"file":"svchealth-8zW8U1Ef.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/svchealth-8zW8U1Ef.js"],"names":[],"mappings":"","x_google_ignoreList":[0]} |
|||
@ -0,0 +1,145 @@ |
|||
import { defineComponent, ref, computed, useSSRContext } from 'vue'; |
|||
import { ssrRenderAttrs, ssrInterpolate, ssrIncludeBooleanAttr, ssrLooseContain, ssrLooseEqual, ssrRenderAttr, ssrRenderList, ssrRenderClass, ssrRenderStyle } from 'vue/server-renderer'; |
|||
import { u as useApi } from './useApi-B-E5eLsI.mjs'; |
|||
import { u as useToast } from './useToast-CS21XT61.mjs'; |
|||
import { h as healthLastRunText, S as STATUS_META, R as REGION_LABEL, p as parseCats, C as CAT_LABEL, P as PROBE_META, a as healthReason } from './svchealth-8zW8U1Ef.mjs'; |
|||
import { _ as _export_sfc } from './server.mjs'; |
|||
import './useLoading-D4zrSa2m.mjs'; |
|||
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 'pinia'; |
|||
import 'perfect-debounce'; |
|||
|
|||
const _sfc_main = /* @__PURE__ */ defineComponent({ |
|||
__name: "svcinspect", |
|||
__ssrInlineRender: true, |
|||
setup(__props) { |
|||
useApi(); |
|||
useToast(); |
|||
const rows = ref([]); |
|||
const summary = ref({ total: 0, ok: 0, warn: 0, error: 0, skip: 0 }); |
|||
const lastRun = ref(0); |
|||
const busy = ref(false); |
|||
const filterStatus = ref(""); |
|||
const keyword = ref(""); |
|||
const lastRunText = computed(() => healthLastRunText(lastRun.value)); |
|||
const summaryCards = computed(() => [ |
|||
{ key: "error", label: "不可用", value: summary.value.error, ico: "🚨", color: "#be123c", bg: "#ffe4e6" }, |
|||
{ key: "warn", label: "有隐患", value: summary.value.warn, ico: "⚠️", color: "#b45309", bg: "#fef3c7" }, |
|||
{ key: "ok", label: "正常", value: summary.value.ok, ico: "✅", color: "#047857", bg: "#d1fae5" }, |
|||
{ key: "skip", label: "已停用", value: summary.value.skip, ico: "⏸️", color: "#64748b", bg: "#f1f5f9" }, |
|||
{ key: "", label: "巡检配置总数", value: summary.value.total, ico: "📋", color: "#334155", bg: "#e2e8f0" } |
|||
]); |
|||
const filtered = computed(() => { |
|||
const kw = keyword.value.trim().toLowerCase(); |
|||
return rows.value.filter((h) => { |
|||
if (filterStatus.value && h.status !== filterStatus.value) return false; |
|||
if (!kw) return true; |
|||
return `${h.name} ${h.svc_id} ${h.provider} ${h.app_name}`.toLowerCase().includes(kw); |
|||
}); |
|||
}); |
|||
function meta(s) { |
|||
return STATUS_META[s] || STATUS_META.skip; |
|||
} |
|||
function probeMeta(k) { |
|||
return PROBE_META[k] || PROBE_META.none; |
|||
} |
|||
function regionLabel(r) { |
|||
return REGION_LABEL[r] || `区域 ${r}`; |
|||
} |
|||
function catLabel(c) { |
|||
return CAT_LABEL[c] || `类别 ${c}`; |
|||
} |
|||
function cats(s) { |
|||
return parseCats(s); |
|||
} |
|||
function reason(h) { |
|||
return healthReason(h); |
|||
} |
|||
function timeText(ms) { |
|||
return healthLastRunText(ms); |
|||
} |
|||
function issuesOf(h) { |
|||
const all = (h.config_issues || []).map((s) => s.replace("[致命] ", "")); |
|||
const shown = reason(h); |
|||
return all.filter((s) => s !== shown && !shown.includes(s)); |
|||
} |
|||
return (_ctx, _push, _parent, _attrs) => { |
|||
_push(`<div${ssrRenderAttrs(_attrs)} data-v-a9764f3a><div class="panel p-4 mb-5" data-v-a9764f3a><div class="flex flex-wrap items-center gap-3" data-v-a9764f3a><div class="flex items-center gap-2 mr-2" data-v-a9764f3a><h2 class="text-base font-bold text-slate-800" data-v-a9764f3a>服务巡检</h2><span class="text-xs text-slate-400" data-v-a9764f3a> 定时校验第三方服务配置并探测可用性 · 最近巡检 ${ssrInterpolate(lastRunText.value)}</span></div><div class="ml-auto flex items-center gap-2" data-v-a9764f3a><select class="select select-bordered select-sm w-32" data-v-a9764f3a><option value="" data-v-a9764f3a${ssrIncludeBooleanAttr(Array.isArray(filterStatus.value) ? ssrLooseContain(filterStatus.value, "") : ssrLooseEqual(filterStatus.value, "")) ? " selected" : ""}>全部状态</option><option value="error" data-v-a9764f3a${ssrIncludeBooleanAttr(Array.isArray(filterStatus.value) ? ssrLooseContain(filterStatus.value, "error") : ssrLooseEqual(filterStatus.value, "error")) ? " selected" : ""}>仅不可用</option><option value="warn" data-v-a9764f3a${ssrIncludeBooleanAttr(Array.isArray(filterStatus.value) ? ssrLooseContain(filterStatus.value, "warn") : ssrLooseEqual(filterStatus.value, "warn")) ? " selected" : ""}>仅有隐患</option><option value="ok" data-v-a9764f3a${ssrIncludeBooleanAttr(Array.isArray(filterStatus.value) ? ssrLooseContain(filterStatus.value, "ok") : ssrLooseEqual(filterStatus.value, "ok")) ? " selected" : ""}>仅正常</option><option value="skip" data-v-a9764f3a${ssrIncludeBooleanAttr(Array.isArray(filterStatus.value) ? ssrLooseContain(filterStatus.value, "skip") : ssrLooseEqual(filterStatus.value, "skip")) ? " selected" : ""}>仅已停用</option></select><input${ssrRenderAttr("value", keyword.value)} class="input input-bordered input-sm w-44" placeholder="搜索服务名/ID/服务商" data-v-a9764f3a><button class="btn btn-sm"${ssrIncludeBooleanAttr(busy.value) ? " disabled" : ""} data-v-a9764f3a>刷新</button><button class="btn btn-primary btn-sm text-white"${ssrIncludeBooleanAttr(busy.value) ? " disabled" : ""} data-v-a9764f3a>${ssrInterpolate(busy.value ? "巡检中…" : "立即巡检")}</button></div></div><div class="grid grid-cols-2 md:grid-cols-5 gap-3 mt-4" data-v-a9764f3a><!--[-->`); |
|||
ssrRenderList(summaryCards.value, (s) => { |
|||
_push(`<div class="${ssrRenderClass([{ on: filterStatus.value === s.key }, "sum-card"])}" data-v-a9764f3a><span class="sum-ico" style="${ssrRenderStyle({ background: s.bg, color: s.color })}" data-v-a9764f3a>${ssrInterpolate(s.ico)}</span><div data-v-a9764f3a><div class="sum-lbl" data-v-a9764f3a>${ssrInterpolate(s.label)}</div><div class="sum-val" style="${ssrRenderStyle({ color: s.color })}" data-v-a9764f3a>${ssrInterpolate(s.value)}</div></div></div>`); |
|||
}); |
|||
_push(`<!--]--></div></div><div class="panel" data-v-a9764f3a><div class="panel-head" data-v-a9764f3a><span class="font-semibold text-slate-700 text-sm" data-v-a9764f3a>巡检明细</span><span class="text-xs text-slate-400" data-v-a9764f3a>共 ${ssrInterpolate(filtered.value.length)} 份配置</span><span class="ml-auto text-xs text-slate-400" data-v-a9764f3a> 一个服务在不同区域可能配着不同凭据,故按「服务 × 区域」分别巡检 </span></div><div class="overflow-x-auto" data-v-a9764f3a><table class="table w-full" data-v-a9764f3a><thead data-v-a9764f3a><tr data-v-a9764f3a><th data-v-a9764f3a>状态</th><th data-v-a9764f3a>服务</th><th data-v-a9764f3a>作用域 / 区域</th><th data-v-a9764f3a>类别</th><th data-v-a9764f3a>探测方式</th><th data-v-a9764f3a>巡检结论</th><th class="text-right" data-v-a9764f3a>耗时</th><th data-v-a9764f3a>检查时间</th><th data-v-a9764f3a></th></tr></thead><tbody data-v-a9764f3a><!--[-->`); |
|||
ssrRenderList(filtered.value, (h) => { |
|||
_push(`<tr data-v-a9764f3a><td data-v-a9764f3a><span class="st-badge" style="${ssrRenderStyle({ background: meta(h.status).bg, color: meta(h.status).color })}" data-v-a9764f3a>${ssrInterpolate(meta(h.status).label)}</span>`); |
|||
if (h.fail_streak > 1) { |
|||
_push(`<div class="streak" data-v-a9764f3a>连续 ${ssrInterpolate(h.fail_streak)} 次</div>`); |
|||
} else { |
|||
_push(`<!---->`); |
|||
} |
|||
_push(`</td><td data-v-a9764f3a><div class="font-semibold text-slate-700" data-v-a9764f3a>${ssrInterpolate(h.name || h.svc_id)}</div><div class="text-xs text-slate-400 font-mono" data-v-a9764f3a>${ssrInterpolate(h.svc_id)}`); |
|||
if (h.provider) { |
|||
_push(`<span data-v-a9764f3a> · ${ssrInterpolate(h.provider)}</span>`); |
|||
} else { |
|||
_push(`<!---->`); |
|||
} |
|||
_push(`</div></td><td data-v-a9764f3a><span class="chip chip-scope" data-v-a9764f3a>${ssrInterpolate(h.app_name || "全局默认")}</span>`); |
|||
if (h.region) { |
|||
_push(`<span class="chip chip-region" data-v-a9764f3a>${ssrInterpolate(regionLabel(h.region))}</span>`); |
|||
} else { |
|||
_push(`<span class="chip" data-v-a9764f3a>默认配置</span>`); |
|||
} |
|||
_push(`</td><td data-v-a9764f3a><!--[-->`); |
|||
ssrRenderList(cats(h.categories), (c) => { |
|||
_push(`<span class="chip" data-v-a9764f3a>${ssrInterpolate(catLabel(c))}</span>`); |
|||
}); |
|||
_push(`<!--]-->`); |
|||
if (!cats(h.categories).length) { |
|||
_push(`<span class="text-xs text-slate-300" data-v-a9764f3a>—</span>`); |
|||
} else { |
|||
_push(`<!---->`); |
|||
} |
|||
_push(`</td><td data-v-a9764f3a><span class="${ssrRenderClass(["pk-" + h.probe_kind, "chip"])}"${ssrRenderAttr("title", probeMeta(h.probe_kind).hint)} data-v-a9764f3a>${ssrInterpolate(probeMeta(h.probe_kind).label)}</span></td><td class="reason-cell" data-v-a9764f3a><div class="${ssrRenderClass(h.status === "error" ? "text-rose-600" : "text-slate-500")}" data-v-a9764f3a>${ssrInterpolate(reason(h) || "—")}</div>`); |
|||
if (issuesOf(h).length) { |
|||
_push(`<div class="issue-list" data-v-a9764f3a><!--[-->`); |
|||
ssrRenderList(issuesOf(h), (i, idx) => { |
|||
_push(`<div class="issue" data-v-a9764f3a>· ${ssrInterpolate(i)}</div>`); |
|||
}); |
|||
_push(`<!--]--></div>`); |
|||
} else { |
|||
_push(`<!---->`); |
|||
} |
|||
_push(`</td><td class="text-right text-xs text-slate-400" data-v-a9764f3a>${ssrInterpolate(h.probe_kind === "none" ? "—" : h.latency_ms + " ms")}</td><td class="text-xs text-slate-400" data-v-a9764f3a>${ssrInterpolate(timeText(h.checked_at))}</td><td data-v-a9764f3a><button class="btn btn-xs"${ssrIncludeBooleanAttr(busy.value) ? " disabled" : ""} data-v-a9764f3a>重测</button></td></tr>`); |
|||
}); |
|||
_push(`<!--]-->`); |
|||
if (!filtered.value.length) { |
|||
_push(`<tr data-v-a9764f3a><td colspan="9" class="text-center text-slate-400 py-8" data-v-a9764f3a>${ssrInterpolate(rows.value.length ? "当前筛选下没有匹配的记录" : "暂无巡检记录,点击右上角「立即巡检」执行一次")}</td></tr>`); |
|||
} else { |
|||
_push(`<!---->`); |
|||
} |
|||
_push(`</tbody></table></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/svcinspect.vue"); |
|||
return _sfc_setup ? _sfc_setup(props, ctx) : void 0; |
|||
}; |
|||
const svcinspect = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-a9764f3a"]]); |
|||
|
|||
export { svcinspect as default }; |
|||
//# sourceMappingURL=svcinspect-ApAZbGUu.mjs.map
|
|||
@ -0,0 +1 @@ |
|||
{"version":3,"file":"svcinspect-ApAZbGUu.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/svcinspect-ApAZbGUu.js"],"names":[],"mappings":"","x_google_ignoreList":[0]} |
|||
@ -0,0 +1,8 @@ |
|||
const svcinspect_vue_vue_type_style_index_0_scoped_a9764f3a_lang = ".panel[data-v-a9764f3a]{background:#fff;border:1px solid #f1f5f9;border-radius:16px;box-shadow:0 1px 2px #0000000a;overflow:hidden}.panel-head[data-v-a9764f3a]{padding:12px 18px;gap:10px;border-bottom:1px solid #f8fafc;flex-wrap:wrap}.panel-head[data-v-a9764f3a],.sum-card[data-v-a9764f3a]{display:flex;align-items:center}.sum-card[data-v-a9764f3a]{gap:11px;background:#f8fafc;border:1px solid #eef2f7;border-radius:12px;padding:10px 13px;cursor:pointer;transition:all .15s}.sum-card[data-v-a9764f3a]:hover{border-color:#cbd5e1}.sum-card.on[data-v-a9764f3a]{border-color:#0f172a;background:#fff;box-shadow:inset 0 0 0 1px #0f172a}.sum-ico[data-v-a9764f3a]{width:30px;height:30px;border-radius:9px;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:14px}.sum-lbl[data-v-a9764f3a]{font-size:11.5px;color:#94a3b8;line-height:1.2}.sum-val[data-v-a9764f3a]{font-size:19px;font-weight:700;line-height:1.3;letter-spacing:-.01em}.st-badge[data-v-a9764f3a]{font-size:11px;font-weight:700;padding:2px 9px;border-radius:999px;white-space:nowrap}.streak[data-v-a9764f3a]{font-size:10.5px;color:#be123c;margin-top:3px;font-weight:600}.chip[data-v-a9764f3a]{display:inline-block;font-size:11px;padding:1px 7px;border-radius:999px;background:#f1f5f9;color:#64748b;margin-right:4px;white-space:nowrap}.chip-scope[data-v-a9764f3a]{background:#e0e7ff;color:#4338ca}.chip-region[data-v-a9764f3a]{background:#cffafe;color:#0e7490}.pk-credential[data-v-a9764f3a]{background:#d1fae5;color:#047857}.pk-reachable[data-v-a9764f3a]{background:#fef3c7;color:#b45309}.pk-none[data-v-a9764f3a]{background:#f1f5f9;color:#94a3b8}.reason-cell[data-v-a9764f3a]{max-width:420px;font-size:12px;line-height:1.5}.issue-list[data-v-a9764f3a]{margin-top:3px}.issue[data-v-a9764f3a]{font-size:11px;color:#94a3b8}"; |
|||
|
|||
const svcinspectStyles_DpDXXkHn = [ |
|||
svcinspect_vue_vue_type_style_index_0_scoped_a9764f3a_lang |
|||
]; |
|||
|
|||
export { svcinspectStyles_DpDXXkHn as default }; |
|||
//# sourceMappingURL=svcinspect-styles.DpDXXkHn.mjs.map
|
|||
@ -0,0 +1 @@ |
|||
{"version":3,"file":"svcinspect-styles.DpDXXkHn.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/svcinspect-styles-1.mjs-DPmNZDYJ.js","../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/svcinspect-styles.DpDXXkHn.mjs"],"names":["style_0"],"mappings":"","x_google_ignoreList":[0,1]} |
|||
@ -0,0 +1,116 @@ |
|||
<template> |
|||
<!-- 仪表盘顶部第三方服务异常告警条。没有异常时整块不渲染,不占首屏。 --> |
|||
<div v-if="errorCount + warnCount > 0" class="alert-banner" :class="errorCount > 0 ? 'lv-error' : 'lv-warn'"> |
|||
<div class="ab-head"> |
|||
<span class="ab-ico">{{ errorCount > 0 ? '🚨' : '⚠️' }}</span> |
|||
<div class="ab-title"> |
|||
<strong> |
|||
{{ errorCount > 0 ? `${errorCount} 项第三方服务不可用` : `${warnCount} 项第三方服务存在隐患` }} |
|||
</strong> |
|||
<span v-if="errorCount > 0 && warnCount > 0" class="ab-sub">,另有 {{ warnCount }} 项隐患</span> |
|||
<span class="ab-sub"> · 最近巡检 {{ lastRunText }}</span> |
|||
</div> |
|||
<button class="ab-btn" @click="expanded = !expanded">{{ expanded ? '收起' : '展开详情' }}</button> |
|||
<NuxtLink to="/svcinspect" class="ab-btn ab-btn-primary">前往巡检</NuxtLink> |
|||
</div> |
|||
|
|||
<div v-if="expanded" class="ab-list"> |
|||
<div v-for="a in alerts" :key="`${a.app_name}/${a.svc_id}/${a.region}`" class="ab-item"> |
|||
<span class="ab-dot" :class="a.status === 'error' ? 'd-error' : 'd-warn'"></span> |
|||
<span class="ab-name">{{ a.name || a.svc_id }}</span> |
|||
<span v-if="a.provider" class="ab-chip">{{ a.provider }}</span> |
|||
<span class="ab-chip ab-chip-scope">{{ scopeText(a) }}</span> |
|||
<span class="ab-msg">{{ reasonOf(a) }}</span> |
|||
<span v-if="a.fail_streak > 1" class="ab-streak">连续失败 {{ a.fail_streak }} 次</span> |
|||
</div> |
|||
<div v-if="truncated" class="ab-more"> |
|||
仅显示前 {{ alerts.length }} 条,其余请到<NuxtLink to="/svcinspect" class="ab-link">服务巡检</NuxtLink>查看 |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { ref, onMounted } from 'vue' |
|||
import { useApi } from '~/composables/useApi' |
|||
import { REGION_LABEL, healthReason, healthLastRunText, type SvcHealth } from '~/utils/svchealth' |
|||
|
|||
const { webApi } = useApi() |
|||
|
|||
const alerts = ref<SvcHealth[]>([]) |
|||
const errorCount = ref(0) |
|||
const warnCount = ref(0) |
|||
const lastRun = ref(0) |
|||
const expanded = ref(false) |
|||
const truncated = ref(false) |
|||
|
|||
const LIMIT = 12 |
|||
|
|||
const lastRunText = computed(() => healthLastRunText(lastRun.value)) |
|||
|
|||
function scopeText(a: SvcHealth): string { |
|||
const app = a.app_name ? a.app_name : '全局' |
|||
return a.region ? `${app} · ${REGION_LABEL[a.region] || '区域' + a.region}` : app |
|||
} |
|||
|
|||
function reasonOf(a: SvcHealth): string { |
|||
return healthReason(a) |
|||
} |
|||
|
|||
async function load() { |
|||
try { |
|||
const res = await webApi<{ |
|||
alerts: SvcHealth[] |
|||
error_count: number |
|||
warn_count: number |
|||
last_run: number |
|||
}>('getsvcalerts', { limit: LIMIT }) |
|||
alerts.value = res.alerts || [] |
|||
errorCount.value = res.error_count || 0 |
|||
warnCount.value = res.warn_count || 0 |
|||
lastRun.value = res.last_run || 0 |
|||
truncated.value = errorCount.value + warnCount.value > alerts.value.length |
|||
// 有明确不可用的服务时默认展开——这类问题需要马上看见是哪几个,而不是再点一次。 |
|||
expanded.value = errorCount.value > 0 |
|||
} catch { |
|||
// 巡检数据拿不到不应该拖垮整个仪表盘,静默降级为「无告警」。 |
|||
alerts.value = [] |
|||
errorCount.value = 0 |
|||
warnCount.value = 0 |
|||
} |
|||
} |
|||
|
|||
onMounted(load) |
|||
defineExpose({ load }) |
|||
</script> |
|||
|
|||
<style scoped> |
|||
.alert-banner { border-radius:14px; padding:12px 16px; margin-bottom:18px; border:1px solid; } |
|||
.lv-error { background:linear-gradient(180deg,#fff1f2 0%,#fff7f7 100%); border-color:#fecdd3; } |
|||
.lv-warn { background:linear-gradient(180deg,#fffbeb 0%,#fffdf5 100%); border-color:#fde68a; } |
|||
|
|||
.ab-head { display:flex; align-items:center; gap:10px; flex-wrap:wrap; } |
|||
.ab-ico { font-size:17px; line-height:1; } |
|||
.ab-title { font-size:13px; color:#334155; flex:1; min-width:200px; } |
|||
.lv-error .ab-title strong { color:#be123c; } |
|||
.lv-warn .ab-title strong { color:#b45309; } |
|||
.ab-sub { color:#94a3b8; font-size:12px; } |
|||
|
|||
.ab-btn { font-size:12px; padding:4px 11px; border-radius:8px; border:1px solid #e2e8f0; background:#fff; color:#475569; white-space:nowrap; } |
|||
.ab-btn:hover { background:#f8fafc; } |
|||
.ab-btn-primary { background:#0f172a; border-color:#0f172a; color:#fff; } |
|||
.ab-btn-primary:hover { background:#1e293b; } |
|||
|
|||
.ab-list { margin-top:10px; padding-top:10px; border-top:1px dashed rgba(148,163,184,.4); display:flex; flex-direction:column; gap:6px; } |
|||
.ab-item { display:flex; align-items:center; gap:8px; font-size:12.5px; color:#475569; flex-wrap:wrap; } |
|||
.ab-dot { width:7px; height:7px; border-radius:50%; flex-shrink:0; } |
|||
.d-error { background:#f43f5e; } |
|||
.d-warn { background:#f59e0b; } |
|||
.ab-name { font-weight:600; color:#1e293b; } |
|||
.ab-chip { font-size:11px; padding:1px 7px; border-radius:999px; background:#f1f5f9; color:#64748b; } |
|||
.ab-chip-scope { background:#e0e7ff; color:#4338ca; } |
|||
.ab-msg { color:#64748b; flex:1; min-width:160px; } |
|||
.ab-streak { font-size:11px; color:#be123c; font-weight:600; } |
|||
.ab-more { font-size:12px; color:#94a3b8; padding-top:2px; } |
|||
.ab-link { color:#4338ca; text-decoration:underline; margin:0 2px; } |
|||
</style> |
|||
@ -0,0 +1,244 @@ |
|||
<template> |
|||
<div> |
|||
<!-- 顶部:汇总 + 操作 --> |
|||
<div class="panel p-4 mb-5"> |
|||
<div class="flex flex-wrap items-center gap-3"> |
|||
<div class="flex items-center gap-2 mr-2"> |
|||
<h2 class="text-base font-bold text-slate-800">服务巡检</h2> |
|||
<span class="text-xs text-slate-400"> |
|||
定时校验第三方服务配置并探测可用性 · 最近巡检 {{ lastRunText }} |
|||
</span> |
|||
</div> |
|||
<div class="ml-auto flex items-center gap-2"> |
|||
<select v-model="filterStatus" class="select select-bordered select-sm w-32"> |
|||
<option value="">全部状态</option> |
|||
<option value="error">仅不可用</option> |
|||
<option value="warn">仅有隐患</option> |
|||
<option value="ok">仅正常</option> |
|||
<option value="skip">仅已停用</option> |
|||
</select> |
|||
<input v-model="keyword" class="input input-bordered input-sm w-44" placeholder="搜索服务名/ID/服务商" /> |
|||
<button class="btn btn-sm" :disabled="busy" @click="load">刷新</button> |
|||
<button class="btn btn-primary btn-sm text-white" :disabled="busy" @click="runAll"> |
|||
{{ busy ? '巡检中…' : '立即巡检' }} |
|||
</button> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="grid grid-cols-2 md:grid-cols-5 gap-3 mt-4"> |
|||
<div v-for="s in summaryCards" :key="s.key" class="sum-card" :class="{ on: filterStatus === s.key }" |
|||
@click="filterStatus = filterStatus === s.key ? '' : s.key"> |
|||
<span class="sum-ico" :style="{ background: s.bg, color: s.color }">{{ s.ico }}</span> |
|||
<div> |
|||
<div class="sum-lbl">{{ s.label }}</div> |
|||
<div class="sum-val" :style="{ color: s.color }">{{ s.value }}</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- 巡检明细 --> |
|||
<div class="panel"> |
|||
<div class="panel-head"> |
|||
<span class="font-semibold text-slate-700 text-sm">巡检明细</span> |
|||
<span class="text-xs text-slate-400">共 {{ filtered.length }} 份配置</span> |
|||
<span class="ml-auto text-xs text-slate-400"> |
|||
一个服务在不同区域可能配着不同凭据,故按「服务 × 区域」分别巡检 |
|||
</span> |
|||
</div> |
|||
|
|||
<div class="overflow-x-auto"> |
|||
<table class="table w-full"> |
|||
<thead> |
|||
<tr> |
|||
<th>状态</th> |
|||
<th>服务</th> |
|||
<th>作用域 / 区域</th> |
|||
<th>类别</th> |
|||
<th>探测方式</th> |
|||
<th>巡检结论</th> |
|||
<th class="text-right">耗时</th> |
|||
<th>检查时间</th> |
|||
<th></th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
<tr v-for="h in filtered" :key="rowKey(h)"> |
|||
<td> |
|||
<span class="st-badge" :style="{ background: meta(h.status).bg, color: meta(h.status).color }"> |
|||
{{ meta(h.status).label }} |
|||
</span> |
|||
<div v-if="h.fail_streak > 1" class="streak">连续 {{ h.fail_streak }} 次</div> |
|||
</td> |
|||
<td> |
|||
<div class="font-semibold text-slate-700">{{ h.name || h.svc_id }}</div> |
|||
<div class="text-xs text-slate-400 font-mono"> |
|||
{{ h.svc_id }}<span v-if="h.provider"> · {{ h.provider }}</span> |
|||
</div> |
|||
</td> |
|||
<td> |
|||
<span class="chip chip-scope">{{ h.app_name || '全局默认' }}</span> |
|||
<span v-if="h.region" class="chip chip-region">{{ regionLabel(h.region) }}</span> |
|||
<span v-else class="chip">默认配置</span> |
|||
</td> |
|||
<td> |
|||
<span v-for="c in cats(h.categories)" :key="c" class="chip">{{ catLabel(c) }}</span> |
|||
<span v-if="!cats(h.categories).length" class="text-xs text-slate-300">—</span> |
|||
</td> |
|||
<td> |
|||
<span class="chip" :class="'pk-' + h.probe_kind" :title="probeMeta(h.probe_kind).hint"> |
|||
{{ probeMeta(h.probe_kind).label }} |
|||
</span> |
|||
</td> |
|||
<td class="reason-cell"> |
|||
<div :class="h.status === 'error' ? 'text-rose-600' : 'text-slate-500'">{{ reason(h) || '—' }}</div> |
|||
<div v-if="issuesOf(h).length" class="issue-list"> |
|||
<div v-for="(i, idx) in issuesOf(h)" :key="idx" class="issue">· {{ i }}</div> |
|||
</div> |
|||
</td> |
|||
<td class="text-right text-xs text-slate-400"> |
|||
{{ h.probe_kind === 'none' ? '—' : h.latency_ms + ' ms' }} |
|||
</td> |
|||
<td class="text-xs text-slate-400">{{ timeText(h.checked_at) }}</td> |
|||
<td> |
|||
<button class="btn btn-xs" :disabled="busy" @click="runOne(h)">重测</button> |
|||
</td> |
|||
</tr> |
|||
<tr v-if="!filtered.length"> |
|||
<td colspan="9" class="text-center text-slate-400 py-8"> |
|||
{{ rows.length ? '当前筛选下没有匹配的记录' : '暂无巡检记录,点击右上角「立即巡检」执行一次' }} |
|||
</td> |
|||
</tr> |
|||
</tbody> |
|||
</table> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { ref, computed, onMounted } from 'vue' |
|||
import { useApi } from '~/composables/useApi' |
|||
import { useToast } from '~/composables/useToast' |
|||
import { |
|||
REGION_LABEL, CAT_LABEL, STATUS_META, PROBE_META, |
|||
healthReason, healthLastRunText, parseCats, type SvcHealth, |
|||
} from '~/utils/svchealth' |
|||
|
|||
definePageMeta({ title: '服务巡检' }) |
|||
|
|||
const { webApi } = useApi() |
|||
const toast = useToast() |
|||
|
|||
const rows = ref<SvcHealth[]>([]) |
|||
const summary = ref({ total: 0, ok: 0, warn: 0, error: 0, skip: 0 }) |
|||
const lastRun = ref(0) |
|||
const busy = ref(false) |
|||
const filterStatus = ref('') |
|||
const keyword = ref('') |
|||
|
|||
const lastRunText = computed(() => healthLastRunText(lastRun.value)) |
|||
|
|||
const summaryCards = computed(() => [ |
|||
{ key: 'error', label: '不可用', value: summary.value.error, ico: '🚨', color: '#be123c', bg: '#ffe4e6' }, |
|||
{ key: 'warn', label: '有隐患', value: summary.value.warn, ico: '⚠️', color: '#b45309', bg: '#fef3c7' }, |
|||
{ key: 'ok', label: '正常', value: summary.value.ok, ico: '✅', color: '#047857', bg: '#d1fae5' }, |
|||
{ key: 'skip', label: '已停用', value: summary.value.skip, ico: '⏸️', color: '#64748b', bg: '#f1f5f9' }, |
|||
{ key: '', label: '巡检配置总数', value: summary.value.total, ico: '📋', color: '#334155', bg: '#e2e8f0' }, |
|||
]) |
|||
|
|||
const filtered = computed(() => { |
|||
const kw = keyword.value.trim().toLowerCase() |
|||
return rows.value.filter((h) => { |
|||
if (filterStatus.value && h.status !== filterStatus.value) return false |
|||
if (!kw) return true |
|||
return `${h.name} ${h.svc_id} ${h.provider} ${h.app_name}`.toLowerCase().includes(kw) |
|||
}) |
|||
}) |
|||
|
|||
function rowKey(h: SvcHealth) { return `${h.app_name}/${h.svc_id}/${h.region}` } |
|||
function meta(s: string) { return STATUS_META[s] || STATUS_META.skip } |
|||
function probeMeta(k: string) { return PROBE_META[k] || PROBE_META.none } |
|||
function regionLabel(r: number) { return REGION_LABEL[r] || `区域 ${r}` } |
|||
function catLabel(c: number) { return CAT_LABEL[c] || `类别 ${c}` } |
|||
function cats(s: string) { return parseCats(s) } |
|||
function reason(h: SvcHealth) { return healthReason(h) } |
|||
function timeText(ms: number) { return healthLastRunText(ms) } |
|||
|
|||
// 摘要行已经展示了最要紧的一条原因,这里补充列出其余配置问题,避免重复刷屏。 |
|||
function issuesOf(h: SvcHealth): string[] { |
|||
const all = (h.config_issues || []).map((s) => s.replace('[致命] ', '')) |
|||
const shown = reason(h) |
|||
return all.filter((s) => s !== shown && !shown.includes(s)) |
|||
} |
|||
|
|||
async function load() { |
|||
try { |
|||
const res = await webApi<{ |
|||
items: SvcHealth[] |
|||
summary: typeof summary.value |
|||
last_run: number |
|||
running: boolean |
|||
}>('getsvchealth', {}) |
|||
rows.value = res.items || [] |
|||
summary.value = res.summary || { total: 0, ok: 0, warn: 0, error: 0, skip: 0 } |
|||
lastRun.value = res.last_run || 0 |
|||
} catch (e: any) { |
|||
toast.error(e?.message || '加载巡检结果失败') |
|||
} |
|||
} |
|||
|
|||
async function runAll() { |
|||
busy.value = true |
|||
try { |
|||
const res = await webApi<{ count: number }>('runsvcinspect', {}) |
|||
toast.success(`巡检完成,已检查 ${res.count} 份配置`) |
|||
await load() |
|||
} catch (e: any) { |
|||
toast.error(e?.message || '巡检失败') |
|||
} finally { |
|||
busy.value = false |
|||
} |
|||
} |
|||
|
|||
async function runOne(h: SvcHealth) { |
|||
busy.value = true |
|||
try { |
|||
await webApi('runsvcinspect', { app_name: h.app_name, svc_id: h.svc_id }) |
|||
toast.success(`已重新检测:${h.name || h.svc_id}`) |
|||
await load() |
|||
} catch (e: any) { |
|||
toast.error(e?.message || '检测失败') |
|||
} finally { |
|||
busy.value = false |
|||
} |
|||
} |
|||
|
|||
onMounted(load) |
|||
</script> |
|||
|
|||
<style scoped> |
|||
.panel { background:#fff; border:1px solid #f1f5f9; border-radius:16px; box-shadow:0 1px 2px rgba(0,0,0,0.04); overflow:hidden; } |
|||
.panel-head { padding:12px 18px; display:flex; align-items:center; gap:10px; border-bottom:1px solid #f8fafc; flex-wrap:wrap; } |
|||
|
|||
.sum-card { display:flex; align-items:center; gap:11px; background:#f8fafc; border:1px solid #eef2f7; border-radius:12px; padding:10px 13px; cursor:pointer; transition:all .15s; } |
|||
.sum-card:hover { border-color:#cbd5e1; } |
|||
.sum-card.on { border-color:#0f172a; background:#fff; box-shadow:0 0 0 1px #0f172a inset; } |
|||
.sum-ico { width:30px; height:30px; border-radius:9px; display:flex; align-items:center; justify-content:center; flex-shrink:0; font-size:14px; } |
|||
.sum-lbl { font-size:11.5px; color:#94a3b8; line-height:1.2; } |
|||
.sum-val { font-size:19px; font-weight:700; line-height:1.3; letter-spacing:-0.01em; } |
|||
|
|||
.st-badge { font-size:11px; font-weight:700; padding:2px 9px; border-radius:999px; white-space:nowrap; } |
|||
.streak { font-size:10.5px; color:#be123c; margin-top:3px; font-weight:600; } |
|||
|
|||
.chip { display:inline-block; font-size:11px; padding:1px 7px; border-radius:999px; background:#f1f5f9; color:#64748b; margin-right:4px; white-space:nowrap; } |
|||
.chip-scope { background:#e0e7ff; color:#4338ca; } |
|||
.chip-region { background:#cffafe; color:#0e7490; } |
|||
.pk-credential { background:#d1fae5; color:#047857; } |
|||
.pk-reachable { background:#fef3c7; color:#b45309; } |
|||
.pk-none { background:#f1f5f9; color:#94a3b8; } |
|||
|
|||
.reason-cell { max-width:420px; font-size:12px; line-height:1.5; } |
|||
.issue-list { margin-top:3px; } |
|||
.issue { font-size:11px; color:#94a3b8; } |
|||
</style> |
|||
@ -0,0 +1,80 @@ |
|||
// 第三方服务巡检(svc_health)的前端共享类型与展示辅助。
|
|||
// 巡检页(pages/svcinspect.vue) 与仪表盘告警条(components/SvcAlertBanner.vue) 共用,
|
|||
// 保证两处对「状态怎么叫、原因怎么写、区域怎么显示」的口径完全一致。
|
|||
|
|||
// 与后端 comm/svchealth.go 的 SvcHealth 字段一一对应。
|
|||
export interface SvcHealth { |
|||
app_name: string |
|||
svc_id: string |
|||
region: number // 0=服务默认配置,>0=该区域的覆盖配置
|
|||
name: string |
|||
provider: string |
|||
categories: string |
|||
enable: boolean |
|||
status: 'ok' | 'warn' | 'error' | 'skip' |
|||
config_issues: string[] | null |
|||
probe_kind: 'none' | 'reachable' | 'credential' |
|||
probe_ok: boolean |
|||
probe_msg: string |
|||
latency_ms: number |
|||
fail_streak: number |
|||
last_ok_at: number |
|||
checked_at: number |
|||
duration_ms: number |
|||
} |
|||
|
|||
// 区域枚举(与 pb.Region、serviceconfig.vue 的 REGIONS 一致)。
|
|||
export const REGION_LABEL: Record<number, string> = { |
|||
1: '中国', 2: '美国', 3: '东亚', 4: '东南亚', 5: '南亚', 6: '中东', 7: '欧洲', |
|||
8: '俄罗斯', 9: '非洲', 10: '南美', 11: '北美', 12: '大洋洲', 13: '巴西', 14: '印度', |
|||
} |
|||
|
|||
// 服务类别(与后端 svcCatXxx、serviceconfig.vue 的 SCAT 一致)。
|
|||
export const CAT_LABEL: Record<number, string> = { |
|||
1: 'STT', 2: 'TTS', 3: 'MT', 4: 'AST', 5: '文本LLM', |
|||
6: '存储', 7: 'STS', 8: '录音识别', 9: '多媒体LLM', 10: 'MCP', |
|||
} |
|||
|
|||
export const STATUS_META: Record<string, { label: string; color: string; bg: string }> = { |
|||
error: { label: '不可用', color: '#be123c', bg: '#ffe4e6' }, |
|||
warn: { label: '有隐患', color: '#b45309', bg: '#fef3c7' }, |
|||
ok: { label: '正常', color: '#047857', bg: '#d1fae5' }, |
|||
skip: { label: '已停用', color: '#64748b', bg: '#f1f5f9' }, |
|||
} |
|||
|
|||
// 探测方式的人话说明。核心是让「未探测」不被误读成「已验证通过」。
|
|||
export const PROBE_META: Record<string, { label: string; hint: string }> = { |
|||
credential: { label: '凭据已验证', hint: '已用真实凭据调通服务商接口' }, |
|||
reachable: { label: '仅连通性', hint: '地址可达,但未验证凭据是否有效' }, |
|||
none: { label: '未探测', hint: '暂无该服务商的探针,可用性未经验证' }, |
|||
} |
|||
|
|||
// healthReason 一句话说清「为什么是这个状态」,供告警条与表格摘要列使用。
|
|||
// 优先级:致命配置问题 > 探测失败原因 > 非致命隐患 > 探测结论。
|
|||
export function healthReason(h: SvcHealth): string { |
|||
const issues = h.config_issues || [] |
|||
const fatal = issues.filter((s) => s.startsWith('[致命] ')) |
|||
if (fatal.length) return fatal.map((s) => s.replace('[致命] ', '')).join(';') |
|||
if (h.status === 'error') return h.probe_msg || '巡检失败' |
|||
if (issues.length) return issues.join(';') |
|||
if (h.probe_kind === 'none') return h.probe_msg || '未验证可用性' |
|||
return h.probe_msg || '' |
|||
} |
|||
|
|||
// healthLastRunText 把巡检时间戳渲染成「刚刚 / N 分钟前 / N 小时前 / 日期」。
|
|||
export function healthLastRunText(ms: number): string { |
|||
if (!ms) return '尚未执行' |
|||
const diff = Date.now() - ms |
|||
if (diff < 60_000) return '刚刚' |
|||
if (diff < 3_600_000) return `${Math.floor(diff / 60_000)} 分钟前` |
|||
if (diff < 86_400_000) return `${Math.floor(diff / 3_600_000)} 小时前` |
|||
return new Date(ms).toLocaleString('zh-CN', { hour12: false }) |
|||
} |
|||
|
|||
// parseCats 把逗号分隔的 categories 解析成类别数值数组。
|
|||
export function parseCats(categories: string): number[] { |
|||
return (categories || '') |
|||
.split(',') |
|||
.map((s) => Number(s.trim())) |
|||
.filter((n) => !Number.isNaN(n) && n > 0) |
|||
} |
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +1 @@ |
|||
import{_ as o,o as s,c as a,a as t,t as r}from"./Ccu6Xgpt.js";import{u as i}from"./oiJG5Pzc.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"./mElhLwm2.js";import{u as i}from"./OLpUuA7c.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}; |
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +1 @@ |
|||
import{g as h,j as x,k as w,B as y,c as r,a as e,t as d,l as b,m as _,p as v,v as g,n as k,y as B,x as u,o as p,_ as M}from"./Ccu6Xgpt.js";const A={class:"login-bg flex items-center justify-center px-4"},z={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=B({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",A,[e("div",z,[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,j as x,k as w,B as y,c as r,a as e,t as d,l as b,m as _,p as v,v as g,n as k,y as B,x as u,o as p,_ as M}from"./mElhLwm2.js";const A={class:"login-bg flex items-center justify-center px-4"},z={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=B({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",A,[e("div",z,[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 +1 @@ |
|||
import{g as t,B as n,P as a,c as o,a as s,o as c}from"./Ccu6Xgpt.js";const i={class:"py-16 text-center text-slate-400"},m=t({__name:"mcpconfig",setup(l){return n(()=>{a("/serviceconfig")}),(r,e)=>(c(),o("div",i,[...e[0]||(e[0]=[s("span",{class:"loading loading-spinner loading-sm"},null,-1),s("p",{class:"text-sm mt-3"},"MCP 配置已并入「第三方服务配置」,正在跳转…",-1)])]))}});export{m as default}; |
|||
import{g as t,B as n,P as a,c as o,a as s,o as c}from"./mElhLwm2.js";const i={class:"py-16 text-center text-slate-400"},m=t({__name:"mcpconfig",setup(l){return n(()=>{a("/serviceconfig")}),(r,e)=>(c(),o("div",i,[...e[0]||(e[0]=[s("span",{class:"loading loading-spinner loading-sm"},null,-1),s("p",{class:"text-sm mt-3"},"MCP 配置已并入「第三方服务配置」,正在跳转…",-1)])]))}});export{m as default}; |
|||
@ -1 +1 @@ |
|||
import{j as w,k as d}from"./Ccu6Xgpt.js";import{u as h}from"./CH2ZVAK2.js";async function f(o,i,a){const e=w(),u=d(),s={"Content-Type":"application/json"};e.token&&(s.Authorization=e.token),a&&Object.assign(s,a);const t=await fetch(o,{method:"POST",headers:s,body:JSON.stringify(i)});if(!t.ok)throw new Error(`HTTP error: ${t.status}`);const n=await t.json();if(n.code===18)throw e.logout(),u.push("/"),new Error(n.msg||"Unauthorized");if(n.code!==0)throw new Error(n.msg||"Unknown error");return n.data}const y=/^(get|list|load|query|fetch|search|count|stat|export|check)/i;function g(o){return!y.test(o)}function A(){const o=w(),{begin:i,end:a}=h();async function e(t,n){const r={};if(o.currentAppId&&(r["X-App-Id"]=String(o.currentAppId)),!g(t))return f(`/web/api/api_${t}`,n??{},r);i();try{return await f(`/web/api/api_${t}`,n??{},r)}finally{a()}}async function u(t,n){return f(`/console/api/${t}`,n??{})}async function s(t,n){const r=t.type||"application/octet-stream",c=await e("getcostoken",{path:n,filename:t.name,content_type:r}),p=c.upload_url||c.url||"";if(!p)throw new Error("未获取到上传地址:请确认已在【第三方服务配置→存储】配置并启用「阿里云 OSS」");const l=await fetch(p,{method:"PUT",headers:{"Content-Type":r},body:t});if(!l.ok)throw new Error(`Upload failed: ${l.status}`);return c.url||p.split("?")[0]}return{webApi:e,consoleApi:u,uploadFile:s}}export{A as u}; |
|||
import{j as w,k as d}from"./mElhLwm2.js";import{u as h}from"./qig5Qp6S.js";async function f(o,i,a){const e=w(),u=d(),s={"Content-Type":"application/json"};e.token&&(s.Authorization=e.token),a&&Object.assign(s,a);const t=await fetch(o,{method:"POST",headers:s,body:JSON.stringify(i)});if(!t.ok)throw new Error(`HTTP error: ${t.status}`);const n=await t.json();if(n.code===18)throw e.logout(),u.push("/"),new Error(n.msg||"Unauthorized");if(n.code!==0)throw new Error(n.msg||"Unknown error");return n.data}const y=/^(get|list|load|query|fetch|search|count|stat|export|check)/i;function g(o){return!y.test(o)}function A(){const o=w(),{begin:i,end:a}=h();async function e(t,n){const r={};if(o.currentAppId&&(r["X-App-Id"]=String(o.currentAppId)),!g(t))return f(`/web/api/api_${t}`,n??{},r);i();try{return await f(`/web/api/api_${t}`,n??{},r)}finally{a()}}async function u(t,n){return f(`/console/api/${t}`,n??{})}async function s(t,n){const r=t.type||"application/octet-stream",c=await e("getcostoken",{path:n,filename:t.name,content_type:r}),p=c.upload_url||c.url||"";if(!p)throw new Error("未获取到上传地址:请确认已在【第三方服务配置→存储】配置并启用「阿里云 OSS」");const l=await fetch(p,{method:"PUT",headers:{"Content-Type":r},body:t});if(!l.ok)throw new Error(`Upload failed: ${l.status}`);return c.url||p.split("?")[0]}return{webApi:e,consoleApi:u,uploadFile:s}}export{A as u}; |
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +1 @@ |
|||
import{L as y,l as x}from"./ChQPCk92.js";import{g as V,c as t,F as u,a as l,n as C,r,l as g,t as o,z as h,o as s,d as B,_ as N}from"./Ccu6Xgpt.js";const L={class:"lang-select"},O={class:"lang-chip-name"},S=["onClick"],j={key:0,class:"lang-empty"},z={key:0,class:"lang-dd"},F={class:"lang-dd-sum"},I={class:"lang-dd-panel"},T=["checked","onChange"],$={class:"lang-opt-code"},w={class:"lang-opt-name"},A=["value","disabled"],D=["value"],E=V({__name:"LangSelect",props:{modelValue:{},multiple:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},options:{default:void 0}},emits:["update:modelValue"],setup(c,{emit:f}){const d=c,m=f,p=h(()=>d.options&&d.options.length?d.options:y),i=h(()=>(d.modelValue||"").split(",").map(a=>a.trim()).filter(Boolean));function v(a){return x(a)}function _(a){if(d.disabled)return;const n=i.value.slice(),e=n.indexOf(a);e>=0?n.splice(e,1):n.push(a),m("update:modelValue",n.join(","))}function b(a){m("update:modelValue",a.target.value)}return(a,n)=>(s(),t("div",L,[c.multiple?(s(),t(u,{key:0},[l("div",{class:C(["lang-chips",{"lang-disabled":c.disabled}])},[(s(!0),t(u,null,r(i.value,e=>(s(),t("span",{key:e,class:"lang-chip"},[B(o(e),1),l("span",O,o(v(e)),1),l("button",{type:"button",class:"lang-x",onClick:k=>_(e)},"×",8,S)]))),128)),i.value.length?g("",!0):(s(),t("span",j,"未选择语言"))],2),c.disabled?g("",!0):(s(),t("details",z,[l("summary",F,"+ 选择语言(已选 "+o(i.value.length)+")",1),l("div",I,[(s(!0),t(u,null,r(p.value,e=>(s(),t("label",{key:e.code,class:"lang-opt"},[l("input",{type:"checkbox",class:"checkbox checkbox-xs checkbox-primary",checked:i.value.includes(e.code),onChange:k=>_(e.code)},null,40,T),l("span",$,o(e.code),1),l("span",w,o(e.name),1)]))),128))])]))],64)):(s(),t("select",{key:1,class:"select select-bordered select-sm w-full text-xs",value:c.modelValue,disabled:c.disabled,onChange:b},[n[0]||(n[0]=l("option",{value:""},"(未设置)",-1)),(s(!0),t(u,null,r(p.value,e=>(s(),t("option",{key:e.code,value:e.code},o(e.code)+" · "+o(e.name),9,D))),128))],40,A))]))}}),q=Object.assign(N(E,[["__scopeId","data-v-4903af59"]]),{__name:"LangSelect"});export{q as _}; |
|||
import{L as y,l as x}from"./ChQPCk92.js";import{g as V,c as t,F as u,a as l,n as C,r,l as g,t as o,z as h,o as s,d as B,_ as N}from"./mElhLwm2.js";const L={class:"lang-select"},O={class:"lang-chip-name"},S=["onClick"],j={key:0,class:"lang-empty"},z={key:0,class:"lang-dd"},F={class:"lang-dd-sum"},I={class:"lang-dd-panel"},T=["checked","onChange"],$={class:"lang-opt-code"},w={class:"lang-opt-name"},A=["value","disabled"],D=["value"],E=V({__name:"LangSelect",props:{modelValue:{},multiple:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},options:{default:void 0}},emits:["update:modelValue"],setup(c,{emit:f}){const d=c,m=f,p=h(()=>d.options&&d.options.length?d.options:y),i=h(()=>(d.modelValue||"").split(",").map(a=>a.trim()).filter(Boolean));function v(a){return x(a)}function _(a){if(d.disabled)return;const n=i.value.slice(),e=n.indexOf(a);e>=0?n.splice(e,1):n.push(a),m("update:modelValue",n.join(","))}function b(a){m("update:modelValue",a.target.value)}return(a,n)=>(s(),t("div",L,[c.multiple?(s(),t(u,{key:0},[l("div",{class:C(["lang-chips",{"lang-disabled":c.disabled}])},[(s(!0),t(u,null,r(i.value,e=>(s(),t("span",{key:e,class:"lang-chip"},[B(o(e),1),l("span",O,o(v(e)),1),l("button",{type:"button",class:"lang-x",onClick:k=>_(e)},"×",8,S)]))),128)),i.value.length?g("",!0):(s(),t("span",j,"未选择语言"))],2),c.disabled?g("",!0):(s(),t("details",z,[l("summary",F,"+ 选择语言(已选 "+o(i.value.length)+")",1),l("div",I,[(s(!0),t(u,null,r(p.value,e=>(s(),t("label",{key:e.code,class:"lang-opt"},[l("input",{type:"checkbox",class:"checkbox checkbox-xs checkbox-primary",checked:i.value.includes(e.code),onChange:k=>_(e.code)},null,40,T),l("span",$,o(e.code),1),l("span",w,o(e.name),1)]))),128))])]))],64)):(s(),t("select",{key:1,class:"select select-bordered select-sm w-full text-xs",value:c.modelValue,disabled:c.disabled,onChange:b},[n[0]||(n[0]=l("option",{value:""},"(未设置)",-1)),(s(!0),t(u,null,r(p.value,e=>(s(),t("option",{key:e.code,value:e.code},o(e.code)+" · "+o(e.name),9,D))),128))],40,A))]))}}),q=Object.assign(N(E,[["__scopeId","data-v-4903af59"]]),{__name:"LangSelect"});export{q as _}; |
|||
File diff suppressed because one or more lines are too long
@ -1 +1 @@ |
|||
import{_ as t,o,c as s,R as c}from"./Ccu6Xgpt.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,R as c}from"./mElhLwm2.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}; |
|||
@ -1,4 +1,4 @@ |
|||
import{g as G,B as K,Q as P,c as a,a as e,d as u,p as x,q as M,F as f,r as U,v as Q,s as Y,t as n,x as i,z as E,o,n as F,l as I,_ as Z}from"./Ccu6Xgpt.js";import{u as J}from"./Um-KoueI.js";import{u as W}from"./DvwKXRUn.js";import"./CH2ZVAK2.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}=J(),{success:O,error:R}=W(),z={cn:"中国",us:"美国",ea:"东亚",sea:"东南亚",sa:"南亚",me:"中东",eu:"欧洲",ru:"俄罗斯",af:"非洲",sam:"南美",nam:"北美",oc:"大洋洲",br:"巴西",in:"印度"};function D(l){return l?z[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 B(l){return l==="error"?{cls:"lv-error",txt:"解析失败"}:l==="warn"?{cls:"lv-warn",txt:"未落库"}:{cls:"lv-info",txt:"已落库"}}function H(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 j(){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,B as K,Q as P,c as a,a as e,d as u,p as x,q as M,F as f,r as U,v as Q,s as Y,t as n,x as i,z as E,o,n as F,l as I,_ as Z}from"./mElhLwm2.js";import{u as J}from"./C6twYRfy.js";import{u as W}from"./FVTAbpot.js";import"./qig5Qp6S.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}=J(),{success:O,error:R}=W(),z={cn:"中国",us:"美国",ea:"东亚",sea:"东南亚",sa:"南亚",me:"中东",eu:"欧洲",ru:"俄罗斯",af:"非洲",sam:"南美",nam:"北美",oc:"大洋洲",br:"巴西",in:"印度"};function D(l){return l?z[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 B(l){return l==="error"?{cls:"lv-error",txt:"解析失败"}:l==="warn"?{cls:"lv-warn",txt:"未落库"}:{cls:"lv-info",txt:"已落库"}}function H(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 j(){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});O("已清空 "+(r&&r.cleared!=null?r.cleared:0)+" 条"),m()}catch(r){R("清空失败:"+(r?.message||"网络异常"))}}function q(){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,U(V.value,t=>(o(),a("option",{key:t.value,value:t.value},n(t.label),9,et))),128))],544),[[M,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),[[M,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),[[Q,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:q},null,544),[[Y,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:j},"清空本日")])]),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},U(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",B(t.level).cls])},n(B(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),H(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))])])]))}}),Lt=Z(kt,[["__scopeId","data-v-742ee359"]]);export{Lt as default};
|
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +1 @@ |
|||
import{_ as s}from"./DiXjRAbV.js";import{_ as a,o as i,c as u,a as t,t as n,b as c,w as l,d}from"./Ccu6Xgpt.js";import{u as f}from"./oiJG5Pzc.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"./DuRQSWLc.js";import{_ as a,o as i,c as u,a as t,t as n,b as c,w as l,d}from"./mElhLwm2.js";import{u as f}from"./OLpUuA7c.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}; |
|||
File diff suppressed because one or more lines are too long
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…
Reference in new issue