546 changed files with 6260 additions and 2403 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
@ -0,0 +1 @@ |
|||
const o=[{value:"cn",label:"国内"},{value:"hw",label:"海外"}],t=new Set(["cn","china","中国","国内"]);function E(e){const n=(e||"").trim();return n?t.has(n.toLowerCase())?"cn":"hw":""}function r(e){const n=E(e);return n?n==="cn"?"国内":"海外":"未指定"}export{o as R,E as n,r}; |
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1 @@ |
|||
import{b as a}from"./CCZrj3X-.js";let i=0;function f(){const o=a("app:toasts",()=>[]);function e(s,t="info",r=3e3){const n=++i;o.value.push({id:n,type:t,msg:s}),r>0&&setTimeout(()=>{o.value=o.value.filter(u=>u.id!==n)},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
@ -1 +1 @@ |
|||
import{_ as t,o,c as s,R as c}from"./AL6uUoB7.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"./DMxDLVSv.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}; |
|||
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
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@ |
|||
import{j as w,k as d}from"./AL6uUoB7.js";import{u as h}from"./mydnAiU4.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
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
File diff suppressed because one or more lines are too long
@ -0,0 +1 @@ |
|||
import{e as y,a9 as h,aa as w,A as g,j as d,k}from"./DMxDLVSv.js";const A="$s";function b(...t){const s=typeof t[t.length-1]=="string"?t.pop():void 0;typeof t[0]!="string"&&t.unshift(s);const[a,o]=t;if(!a||typeof a!="string")throw new TypeError("[nuxt] [useState] key must be a string: "+a);if(o!==void 0&&typeof o!="function")throw new Error("[nuxt] [useState] init must be a function: "+o);const i=A+a,r=y(),n=h(r.payload.state,i);if(o&&(r._state[i]??={_default:o}),n.value===void 0&&o){const e=o();if(w(e))return r.payload.state[i]=e,e;n.value=e}return n}function m(){const t=b("app:loading",()=>0),s=g(()=>t.value>0);function a(){t.value++}function o(){t.value=Math.max(0,t.value-1)}return{count:t,loading:s,begin:a,end:o}}async function f(t,s,a){const o=d(),i=k(),r={"Content-Type":"application/json"};o.token&&(r.Authorization=o.token),a&&Object.assign(r,a);const n=await fetch(t,{method:"POST",headers:r,body:JSON.stringify(s)});if(!n.ok)throw new Error(`HTTP error: ${n.status}`);const e=await n.json();if(e.code===18)throw o.logout(),i.push("/"),new Error(e.msg||"Unauthorized");if(e.code!==0)throw new Error(e.msg||"Unknown error");return e.data}const S=/^(get|list|load|query|fetch|search|count|stat|export|check)/i;function v(t){return!S.test(t)}function x(){const t=d(),{begin:s,end:a}=m();async function o(n,e){const u={};if(t.currentAppId&&(u["X-App-Id"]=String(t.currentAppId)),!v(n))return f(`/web/api/api_${n}`,e??{},u);s();try{return await f(`/web/api/api_${n}`,e??{},u)}finally{a()}}async function i(n,e){return f(`/console/api/${n}`,e??{})}async function r(n,e){const u=n.type||"application/octet-stream",c=await o("getcostoken",{path:e,filename:n.name,content_type:u}),p=c.upload_url||c.url||"";if(!p)throw new Error("未获取到上传地址:请确认已在【第三方服务配置→存储】配置并启用「阿里云 OSS」");const l=await fetch(p,{method:"PUT",headers:{"Content-Type":u},body:n});if(!l.ok)throw new Error(`Upload failed: ${l.status}`);return c.url||p.split("?")[0]}return{webApi:o,consoleApi:i,uploadFile:r}}export{m as a,b,x 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"./AL6uUoB7.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"./DMxDLVSv.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}; |
|||
File diff suppressed because one or more lines are too long
@ -1,4 +0,0 @@ |
|||
import{g as G,B as K,Q as P,c as a,a as e,d as u,p as g,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"./AL6uUoB7.js";import{u as J}from"./BgfmgSoF.js";import{u as W}from"./D_urMdl7.js";import"./mydnAiU4.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 注册,快照已收到但不会写入统计库"},_t={key:1,class:"muted"},gt={class:"muted"},xt={class:"muted"},yt={class:"muted"},bt={class:"muted"},ht={key:0,class:"muted"},wt={class:"t"},kt={key:0,class:"late"},Ct=G({__name:"statlog",setup(Tt){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([]),x=i(!1),_=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.channel_id||"")+" "+(t.stat_day||"")).toLowerCase().indexOf(s)<0))});async function m(){x.value=!0,_.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){_.value=l?.message||"网络异常"}finally{x.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,[g(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}]]),g(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]]),g(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,[g(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,[x.value?(o(),a("div",ct,"加载中...")):_.value?(o(),a("div",dt,"加载失败:"+n(_.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",_t,"(无应用名)")),e("span",gt," · "+n(D(t.region)),1),e("span",xt," · "+n(S(t.product_id)),1),e("span",yt," · "+n(t.channel_id||"未分配渠道"),1)]),e("div",bt,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",ht," · "+n(t.summary),1)):I("",!0)],64)):(o(),a(f,{key:1},[u(n(t.summary||"无增量"),1)],64))]),e("div",wt,[u(n(C(t.snap_ts)),1),H(t)?(o(),a("span",kt,"迟到"+n(t.ts-t.snap_ts)+"s",1)):I("",!0)])]))),128)):(o(),a("div",vt,n(c.value.length?"无匹配记录":"该日暂无接收记录"),1))])])]))}}),Nt=Z(Ct,[["__scopeId","data-v-e7a3debc"]]);export{Nt as default};
|
|||
@ -1 +1 @@ |
|||
import{_ as o,o as s,c as a,a as t,t as r}from"./AL6uUoB7.js";import{u as i}from"./eNlViwMf.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"./DMxDLVSv.js";import{u as i}from"./CYxZMiFx.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}; |
|||
@ -0,0 +1,4 @@ |
|||
import{g as G,C as K,Q as P,c as a,a as e,d as u,q as g,s as U,F as f,r as B,v as Q,x as Y,t as n,y as i,A as E,o,n as F,l as A,_ as Z}from"./DMxDLVSv.js";import{u as J}from"./CCZrj3X-.js";import{u as W}from"./B-sqZCu-.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 注册,快照已收到但不会写入统计库"},_t={key:1,class:"muted"},gt={class:"muted"},xt={class:"muted"},yt={class:"muted"},bt={class:"muted"},ht={key:0,class:"muted"},wt={class:"t"},kt={key:0,class:"late"},Ct=G({__name:"statlog",setup(Tt){const{webApi:I}=J(),{success:O,error:R}=W(),H={cn:"中国",us:"美国",ea:"东亚",sea:"东南亚",sa:"南亚",me:"中东",eu:"欧洲",ru:"俄罗斯",af:"非洲",sam:"南美",nam:"北美",oc:"大洋洲",br:"巴西",in:"印度"};function D(l){return l?H[l]||l:"-"}const c=i([]),x=i(!1),_=i(""),L=i("-"),N=i("-"),y=i(""),v=i(0),b=i(""),h=i(""),w=i(!1);let d=null;function p(l=0){const s=new Date(Date.now()+l*864e5),t=new Intl.DateTimeFormat("en-CA",{timeZone:"Asia/Shanghai",year:"numeric",month:"2-digit",day:"2-digit"}).format(s);return parseInt(t.replace(/-/g,""),10)}function k(l){const s=""+l;return s.length===8?s.slice(0,4)+"-"+s.slice(4,6)+"-"+s.slice(6,8):s}function C(l){if(!l)return"--";const s=new Date(l*1e3),t=r=>r<10?"0"+r:""+r;return t(s.getHours())+":"+t(s.getMinutes())+":"+t(s.getSeconds())}function S(l){return l?"0x"+(l>>>0).toString(16).toUpperCase():"全部"}const V=E(()=>[{value:p(0),label:"今天 "+k(p(0))},{value:p(-1),label:"昨天 "+k(p(-1))}]);function M(l){return l==="error"?{cls:"lv-error",txt:"解析失败"}:l==="warn"?{cls:"lv-warn",txt:"未落库"}:{cls:"lv-info",txt:"已落库"}}function j(l){return!!(l.snap_ts&&l.ts&&l.ts-l.snap_ts>120)}const T=E(()=>{const l=b.value,s=h.value.trim().toLowerCase();return c.value.filter(t=>!(l&&t.level!==l||s&&((t.app||"")+" "+(t.region||"")+" "+D(t.region)+" "+(t.product_id||"")+" "+S(t.product_id)+" "+(t.channel_id||"")+" "+(t.stat_day||"")).toLowerCase().indexOf(s)<0))});async function m(){x.value=!0,_.value="";try{const l=await I("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){_.value=l?.message||"网络异常"}finally{x.value=!1}}async function q(){const l=v.value||0,s=V.value.find(r=>r.value===l),t=s?s.label:""+l;if(window.confirm("确定清空「"+t+`」的接收流水吗?
|
|||
|
|||
只清除本核对面板的记录,不影响已落库的统计数据。 |
|||
清空后可重新触发埋点,观察是否正常进来。`))try{const r=await I("clearstatlogs",{day:l});O("已清空 "+(r&&r.cleared!=null?r.cleared:0)+" 条"),m()}catch(r){R("清空失败:"+(r?.message||"网络异常"))}}function z(){w.value?(d=X(m,15e3),y.value="· 每 15 秒自动刷新"):(d&&clearInterval(d),d=null,y.value="")}return K(()=>{v.value=p(0),m()}),P(()=>{d&&clearInterval(d)}),(l,s)=>(o(),a("div",null,[e("div",$,[s[6]||(s[6]=e("div",null,[e("h2",{class:"text-lg font-bold text-slate-700"},"统计日志"),e("p",{class:"text-xs text-slate-400 mt-0.5"},[u("console 从 NATS 收到的「当日统计快照」接收流水(最新在前,按接收时间分天存 Redis)。各业务部署每个同步周期/启动时/0点 推送一次当日绝对快照,console 收到后覆盖落库。用于核对每个部署是否在正常汇报;带 "),e("span",{class:"unreg"},"未注册"),u(" 的应用快照已收到但"),e("b",null,"不会落库"),u("(应用名需与 console 注册表完全一致)。")])],-1)),e("div",tt,[g(e("select",{"onUpdate:modelValue":s[0]||(s[0]=t=>v.value=t),class:"select select-bordered select-sm",onChange:m},[(o(!0),a(f,null,B(V.value,t=>(o(),a("option",{key:t.value,value:t.value},n(t.label),9,et))),128))],544),[[U,v.value,void 0,{number:!0}]]),g(e("select",{"onUpdate:modelValue":s[1]||(s[1]=t=>b.value=t),class:"select select-bordered select-sm"},[...s[4]||(s[4]=[e("option",{value:""},"全部级别",-1),e("option",{value:"info"},"已落库",-1),e("option",{value:"warn"},"未落库",-1),e("option",{value:"error"},"解析失败",-1)])],512),[[U,b.value]]),g(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,[g(e("input",{"onUpdate:modelValue":s[3]||(s[3]=t=>w.value=t),type:"checkbox",class:"checkbox checkbox-xs",onChange:z},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:q},"清空本日")])]),e("div",lt,[e("span",null,[s[7]||(s[7]=u("该日保留 ",-1)),e("b",nt,n(L.value),1),s[8]||(s[8]=u(" 条",-1))]),e("span",null,[s[9]||(s[9]=u("当前显示 ",-1)),e("b",at,n(T.value.length),1),s[10]||(s[10]=u(" 条",-1))]),e("span",null,[s[11]||(s[11]=u("最近接收 ",-1)),e("b",ot,n(N.value),1)]),e("span",rt,n(y.value),1)]),e("div",ut,[s[12]||(s[12]=e("div",{id:"logHead"},[e("div",null,"接收时间"),e("div",null,"级别"),e("div",null,"应用 · 区域 · 产品 · 渠道商"),e("div",null,"统计日"),e("div",null,"指标摘要 / 说明"),e("div",null,"快照时间")],-1)),e("div",it,[x.value?(o(),a("div",ct,"加载中...")):_.value?(o(),a("div",dt,"加载失败:"+n(_.value),1)):T.value.length?(o(!0),a(f,{key:3},B(T.value,(t,r)=>(o(),a("div",{key:r,class:"logrow"},[e("div",pt,n(C(t.ts)),1),e("div",null,[e("span",{class:F(["lv",M(t.level).cls])},n(M(t.level).txt),3)]),e("div",null,[t.app?(o(),a(f,{key:0},[e("span",mt,n(t.app),1),t.registered?A("",!0):(o(),a("span",ft,"未注册"))],64)):(o(),a("span",_t,"(无应用名)")),e("span",gt," · "+n(D(t.region)),1),e("span",xt," · "+n(S(t.product_id)),1),e("span",yt," · "+n(t.channel_id||"未分配渠道"),1)]),e("div",bt,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",ht," · "+n(t.summary),1)):A("",!0)],64)):(o(),a(f,{key:1},[u(n(t.summary||"无增量"),1)],64))]),e("div",wt,[u(n(C(t.snap_ts)),1),j(t)?(o(),a("span",kt,"迟到"+n(t.ts-t.snap_ts)+"s",1)):A("",!0)])]))),128)):(o(),a("div",vt,n(c.value.length?"无匹配记录":"该日暂无接收记录"),1))])])]))}}),Lt=Z(Ct,[["__scopeId","data-v-e7a3debc"]]);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
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"./AL6uUoB7.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,C as y,c as r,a as e,t as d,l as b,p as _,q as v,v as f,n as k,z as M,y as u,o as p,_ as z}from"./DMxDLVSv.js";const A={class:"login-bg flex items-center justify-center px-4"},B={class:"login-card"},C={class:"text-center"},S={style:{"font-size":"22px","font-weight":"700",color:"#0F172A",margin:"0 0 4px"}},T={key:0,class:"login-error show"},V={style:{width:"16px",height:"16px","flex-shrink":"0"},fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},j={style:{"margin-bottom":"16px"}},q={style:{"margin-bottom":"24px"}},D=h({__name:"index",setup(L){const a=x(),c=w(),o=M({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 g(){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",B,[e("div",C,[t[2]||(t[2]=e("div",{class:"logo-icon"},[e("svg",{class:"h-7 w-7 text-white",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"})])],-1)),e("h1",S,d(m.value),1),t[3]||(t[3]=e("p",{style:{"font-size":"13px",color:"#94A3B8",margin:"0 0 32px"}},"管理控制台",-1))]),n.value?(p(),r("div",T,[(p(),r("svg",V,[...t[4]||(t[4]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"},null,-1)])])),e("span",null,d(n.value),1)])):b("",!0),e("form",{onSubmit:_(g,["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),[[f,o.account]])]),e("div",q,[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),[[f,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=z(D,[["__scopeId","data-v-4f88fb34"]]);export{O 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
@ -1 +0,0 @@ |
|||
import{a as u}from"./mydnAiU4.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
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"./CCixCNzH.js";import{_ as a,o as i,c as u,a as t,t as n,b as c,w as l,d}from"./AL6uUoB7.js";import{u as f}from"./eNlViwMf.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"./DBs5psLk.js";import{_ as a,o as i,c as u,a as t,t as n,b as c,w as l,d}from"./DMxDLVSv.js";import{u as f}from"./CYxZMiFx.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}; |
|||
@ -0,0 +1,2 @@ |
|||
import{u as r}from"./B-sqZCu-.js";import{g as x,c as i,a as t,t as o,l as f,o as l}from"./DMxDLVSv.js";const b={key:0,class:"modal modal-open"},u={class:"modal-box max-w-md"},p={class:"font-bold text-base mb-1"},y={class:"rounded-xl border border-slate-200 bg-slate-50 p-3 space-y-2"},g={class:"flex items-center justify-between gap-3"},v={class:"font-mono font-semibold text-sm"},_={class:"flex items-center justify-between gap-3"},w={class:"font-mono font-semibold text-sm"},h={key:0,class:"mt-3 text-xs text-emerald-600"},k={key:1,class:"mt-3 text-xs text-amber-600"},C={class:"modal-action"},T=x({__name:"AccountCredentialDialog",props:{info:{}},emits:["close"],setup(s){const n=s,{success:c,warn:m}=r();async function d(){if(!n.info)return;const a=`用户名:${n.info.username} |
|||
初始密码:${n.info.password}`;try{await navigator.clipboard.writeText(a),c("凭据已复制")}catch{m("复制失败,请手工记录")}}return(a,e)=>s.info?(l(),i("div",b,[t("div",u,[t("h3",p,o(s.info.title),1),e[3]||(e[3]=t("p",{class:"text-xs text-slate-400 mb-3"},"初始密码仅在此显示一次,关闭后无法再查看(如需重设请到「后台账号」改密)。",-1)),t("div",y,[t("div",g,[e[1]||(e[1]=t("span",{class:"text-xs text-slate-500"},"登录用户名",-1)),t("span",v,o(s.info.username),1)]),t("div",_,[e[2]||(e[2]=t("span",{class:"text-xs text-slate-500"},"初始密码",-1)),t("span",w,o(s.info.password),1)])]),s.info.mailTo?(l(),i("div",h," ✓ 凭据已邮件发送至 "+o(s.info.mailTo),1)):(l(),i("div",k," ⚠ 凭据未能邮件送达"+o(s.info.mailError?":"+s.info.mailError:"")+",请手工转达上面的用户名和密码。 ",1)),t("div",C,[t("button",{class:"btn btn-ghost btn-sm",onClick:d},"复制"),t("button",{class:"btn btn-primary btn-sm text-white",onClick:e[0]||(e[0]=$=>a.$emit("close"))},"我已记录,关闭")])])])):f("",!0)}}),D=Object.assign(T,{__name:"AccountCredentialDialog"});export{D as _};
|
|||
File diff suppressed because one or more lines are too long
@ -1 +1 @@ |
|||
import{g as t,B as n,P as a,c as o,a as s,o as c}from"./AL6uUoB7.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,C as n,P as a,c as o,a as s,o as c}from"./DMxDLVSv.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}; |
|||
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 +0,0 @@ |
|||
.chk[data-v-11e40be5]{display:flex;align-items:center;gap:6px;padding:5px 9px;border:1px solid #e2e8f0;border-radius:8px;font-size:12px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.chk[data-v-11e40be5]:hover{background:#f8fafc}.chk input[data-v-11e40be5]{width:14px;height:14px} |
|||
@ -0,0 +1 @@ |
|||
.chk[data-v-b47e60f8]{display:flex;align-items:center;gap:6px;padding:5px 9px;border:1px solid #e2e8f0;border-radius:8px;font-size:12px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.chk[data-v-b47e60f8]:hover{background:#f8fafc}.chk input[data-v-b47e60f8]{width:14px;height:14px} |
|||
File diff suppressed because one or more lines are too long
@ -1 +1 @@ |
|||
{"id":"195ddb9e-078c-4238-82de-ba95840a71bc","timestamp":1786331664123} |
|||
{"id":"997f9c5b-5ea7-4cda-a9d8-aeefc19242d7","timestamp":1786585621230} |
|||
@ -1 +0,0 @@ |
|||
{"id":"195ddb9e-078c-4238-82de-ba95840a71bc","timestamp":1786331664123,"prerendered":[]} |
|||
@ -0,0 +1 @@ |
|||
{"id":"997f9c5b-5ea7-4cda-a9d8-aeefc19242d7","timestamp":1786585621230,"prerendered":[]} |
|||
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 @@ |
|||
.login-bg[data-v-3a3bca03]{min-height:100vh;background:linear-gradient(135deg,#0f172a,#1e293b 50%,#0f172a);position:relative;overflow:hidden}.login-bg[data-v-3a3bca03]:before{content:"";position:absolute;top:-50%;left:-50%;width:200%;height:200%;background:radial-gradient(ellipse at 30% 20%,rgba(99,102,241,.15) 0,transparent 50%),radial-gradient(ellipse at 70% 80%,rgba(139,92,246,.1) 0,transparent 50%);animation:bgFloat-3a3bca03 20s ease-in-out infinite}@keyframes bgFloat-3a3bca03{0%,to{transform:translate(0)}50%{transform:translate(-2%,2%)}}.login-card[data-v-3a3bca03]{background:#fffffff2;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border:1px solid hsla(0,0%,100%,.2);border-radius:20px;box-shadow:0 25px 80px #0000004d,0 8px 32px #00000026;padding:40px;width:100%;max-width:420px;animation:cardIn-3a3bca03 .6s cubic-bezier(.16,1,.3,1)}@keyframes cardIn-3a3bca03{0%{opacity:0;transform:translateY(20px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}.logo-icon[data-v-3a3bca03]{width:56px;height:56px;background:linear-gradient(135deg,#4f46e5,#7c3aed);border-radius:16px;display:flex;align-items:center;justify-content:center;margin:0 auto 20px;box-shadow:0 8px 24px #4f46e559}.login-input[data-v-3a3bca03]{width:100%;padding:12px 16px;border:1.5px solid #e2e8f0;border-radius:10px;font-size:14px;color:#334155;background:#f8fafc;transition:all .2s;outline:none}.login-input[data-v-3a3bca03]:focus{border-color:#6366f1;background:#fff;box-shadow:0 0 0 3px #6366f11a}.login-input[data-v-3a3bca03]::-moz-placeholder{color:#cbd5e1}.login-input[data-v-3a3bca03]::placeholder{color:#cbd5e1}.login-btn[data-v-3a3bca03]{width:100%;padding:12px;border:none;border-radius:10px;background:linear-gradient(135deg,#4f46e5,#6366f1);color:#fff;font-size:15px;font-weight:600;cursor:pointer;transition:all .3s;box-shadow:0 4px 16px #4f46e54d}.login-btn[data-v-3a3bca03]:hover{background:linear-gradient(135deg,#4338ca,#4f46e5);transform:translateY(-2px);box-shadow:0 8px 24px #4f46e566}.login-btn[data-v-3a3bca03]:active{transform:translateY(0)}.login-btn.loading[data-v-3a3bca03]{opacity:.7;pointer-events:none}.login-label[data-v-3a3bca03]{display:block;font-size:13px;font-weight:500;color:#64748b;margin-bottom:6px}.login-error[data-v-3a3bca03]{background:#fef2f2;border:1px solid #fecaca;color:#dc2626;padding:10px 14px;border-radius:10px;font-size:13px;margin-bottom:16px;display:none}.login-error.show[data-v-3a3bca03]{display:flex;align-items:center;gap:8px} |
|||
.login-bg[data-v-4f88fb34]{min-height:100vh;background:linear-gradient(135deg,#0f172a,#1e293b 50%,#0f172a);position:relative;overflow:hidden}.login-bg[data-v-4f88fb34]:before{content:"";position:absolute;top:-50%;left:-50%;width:200%;height:200%;background:radial-gradient(ellipse at 30% 20%,rgba(99,102,241,.15) 0,transparent 50%),radial-gradient(ellipse at 70% 80%,rgba(139,92,246,.1) 0,transparent 50%);animation:bgFloat-4f88fb34 20s ease-in-out infinite}@keyframes bgFloat-4f88fb34{0%,to{transform:translate(0)}50%{transform:translate(-2%,2%)}}.login-card[data-v-4f88fb34]{background:#fffffff2;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border:1px solid hsla(0,0%,100%,.2);border-radius:20px;box-shadow:0 25px 80px #0000004d,0 8px 32px #00000026;padding:40px;width:100%;max-width:420px;animation:cardIn-4f88fb34 .6s cubic-bezier(.16,1,.3,1)}@keyframes cardIn-4f88fb34{0%{opacity:0;transform:translateY(20px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}.logo-icon[data-v-4f88fb34]{width:56px;height:56px;background:linear-gradient(135deg,#4f46e5,#7c3aed);border-radius:16px;display:flex;align-items:center;justify-content:center;margin:0 auto 20px;box-shadow:0 8px 24px #4f46e559}.login-input[data-v-4f88fb34]{width:100%;padding:12px 16px;border:1.5px solid #e2e8f0;border-radius:10px;font-size:14px;color:#334155;background:#f8fafc;transition:all .2s;outline:none}.login-input[data-v-4f88fb34]:focus{border-color:#6366f1;background:#fff;box-shadow:0 0 0 3px #6366f11a}.login-input[data-v-4f88fb34]::-moz-placeholder{color:#cbd5e1}.login-input[data-v-4f88fb34]::placeholder{color:#cbd5e1}.login-btn[data-v-4f88fb34]{width:100%;padding:12px;border:none;border-radius:10px;background:linear-gradient(135deg,#4f46e5,#6366f1);color:#fff;font-size:15px;font-weight:600;cursor:pointer;transition:all .3s;box-shadow:0 4px 16px #4f46e54d}.login-btn[data-v-4f88fb34]:hover{background:linear-gradient(135deg,#4338ca,#4f46e5);transform:translateY(-2px);box-shadow:0 8px 24px #4f46e566}.login-btn[data-v-4f88fb34]:active{transform:translateY(0)}.login-btn.loading[data-v-4f88fb34]{opacity:.7;pointer-events:none}.login-label[data-v-4f88fb34]{display:block;font-size:13px;font-weight:500;color:#64748b;margin-bottom:6px}.login-error[data-v-4f88fb34]{background:#fef2f2;border:1px solid #fecaca;color:#dc2626;padding:10px 14px;border-radius:10px;font-size:13px;margin-bottom:16px;display:none}.login-error.show[data-v-4f88fb34]{display:flex;align-items:center;gap:8px} |
|||
@ -1 +0,0 @@ |
|||
.app-grid[data-v-6c9af955]{display:grid;grid-template-columns:repeat(auto-fill,minmax(310px,1fr));gap:16px}.app-card[data-v-6c9af955]{background:#fff;border:1px solid #eef2f7;border-radius:16px;overflow:hidden;box-shadow:0 1px 2px #0f172a0a,0 4px 16px #0f172a08;cursor:pointer;position:relative;display:flex;flex-direction:column;transition:transform .14s ease,box-shadow .14s ease,border-color .14s ease}.app-card[data-v-6c9af955]:hover{transform:translateY(-2px);box-shadow:0 10px 40px #0f172a1f;border-color:#e2e8f0}.app-card[data-v-6c9af955]:focus-visible{outline:2px solid #4f46e5;outline-offset:2px}.app-card[data-v-6c9af955]:before{content:"";position:absolute;inset:0 0 auto;height:3px;background:linear-gradient(90deg,#4f46e5,#7c3aed)}.app-card.off[data-v-6c9af955]:before{background:#94a3b8}.app-card.orphan[data-v-6c9af955]{cursor:default;border-color:#fde68a}.app-card.orphan[data-v-6c9af955]:before{background:#f59e0b}.app-card.orphan[data-v-6c9af955]:hover{transform:none}.ac-head[data-v-6c9af955]{padding:18px 18px 12px;display:flex;gap:13px;align-items:flex-start}.ac-logo[data-v-6c9af955]{width:44px;height:44px;border-radius:12px;flex-shrink:0;color:#fff;background:linear-gradient(135deg,#4f46e5,#7c3aed);display:grid;place-items:center;font-weight:800;font-size:18px;box-shadow:0 5px 14px #4f46e547}.app-card.off .ac-logo[data-v-6c9af955]{background:#94a3b8;box-shadow:none}.app-card.orphan .ac-logo[data-v-6c9af955]{background:#f59e0b;box-shadow:none}.ac-title[data-v-6c9af955]{font-size:15.5px;font-weight:700;color:#1e293b;letter-spacing:-.01em}.ac-meta[data-v-6c9af955]{font-size:11.5px;color:#94a3b8;margin-top:3px}.ac-remark[data-v-6c9af955]{font-size:12px;color:#64748b;padding:0 18px 14px;margin:0;min-height:2.4em}.ac-stats[data-v-6c9af955]{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid #eef2f7;background:#fcfcfd}.ac-stat[data-v-6c9af955]{padding:11px 8px;text-align:center;border-right:1px solid #eef2f7}.ac-stat[data-v-6c9af955]:last-child{border-right:0}.ac-stat-n[data-v-6c9af955]{font-size:17px;font-weight:700;line-height:1.2;color:#1e293b;font-family:SF Mono,Menlo,monospace;font-variant-numeric:tabular-nums}.ac-stat-n.warn[data-v-6c9af955]{color:#b45309}.ac-stat-n.zero[data-v-6c9af955]{color:#cbd5e1}.ac-stat-l[data-v-6c9af955]{font-size:10px;color:#94a3b8;margin-top:2px;letter-spacing:.03em}.ac-regions[data-v-6c9af955]{padding:11px 18px;gap:5px;flex-wrap:wrap;align-items:center;min-height:42px}.ac-foot[data-v-6c9af955],.ac-regions[data-v-6c9af955]{display:flex;border-top:1px solid #eef2f7}.ac-foot[data-v-6c9af955]{padding:10px 14px;gap:6px;justify-content:flex-end;margin-top:auto}.orphan-list[data-v-6c9af955]{border-top:1px solid #eef2f7}.orphan-row[data-v-6c9af955]{display:flex;align-items:center;gap:8px;padding:9px 16px;border-bottom:1px solid #f8fafc}.orphan-row[data-v-6c9af955]:last-child{border-bottom:0}.chip[data-v-6c9af955]{display:inline-flex;align-items:center;font-size:10.5px;font-weight:700;padding:2px 7px;border-radius:5px;background:#f1f5f9;color:#64748b}.chip-app[data-v-6c9af955]{background:#eef2ff;color:#4338ca}.chip-dep[data-v-6c9af955]{background:#ecfeff;color:#0e7490}.chip-warn[data-v-6c9af955]{background:#fef3c7;color:#b45309} |
|||
@ -0,0 +1 @@ |
|||
.app-grid[data-v-80f99751]{display:grid;grid-template-columns:repeat(auto-fill,minmax(310px,1fr));gap:16px}.app-card[data-v-80f99751]{background:#fff;border:1px solid #eef2f7;border-radius:16px;overflow:hidden;box-shadow:0 1px 2px #0f172a0a,0 4px 16px #0f172a08;cursor:pointer;position:relative;display:flex;flex-direction:column;transition:transform .14s ease,box-shadow .14s ease,border-color .14s ease}.app-card[data-v-80f99751]:hover{transform:translateY(-2px);box-shadow:0 10px 40px #0f172a1f;border-color:#e2e8f0}.app-card[data-v-80f99751]:focus-visible{outline:2px solid #4f46e5;outline-offset:2px}.app-card[data-v-80f99751]:before{content:"";position:absolute;inset:0 0 auto;height:3px;background:linear-gradient(90deg,#4f46e5,#7c3aed)}.app-card.off[data-v-80f99751]:before{background:#94a3b8}.app-card.orphan[data-v-80f99751]{cursor:default;border-color:#fde68a}.app-card.orphan[data-v-80f99751]:before{background:#f59e0b}.app-card.orphan[data-v-80f99751]:hover{transform:none}.ac-head[data-v-80f99751]{padding:18px 18px 12px;display:flex;gap:13px;align-items:flex-start}.ac-logo[data-v-80f99751]{width:44px;height:44px;border-radius:12px;flex-shrink:0;color:#fff;background:linear-gradient(135deg,#4f46e5,#7c3aed);display:grid;place-items:center;font-weight:800;font-size:18px;box-shadow:0 5px 14px #4f46e547}.app-card.off .ac-logo[data-v-80f99751]{background:#94a3b8;box-shadow:none}.app-card.orphan .ac-logo[data-v-80f99751]{background:#f59e0b;box-shadow:none}.ac-title[data-v-80f99751]{font-size:15.5px;font-weight:700;color:#1e293b;letter-spacing:-.01em}.ac-meta[data-v-80f99751]{font-size:11.5px;color:#94a3b8;margin-top:3px}.ac-remark[data-v-80f99751]{font-size:12px;color:#64748b;padding:0 18px 14px;margin:0;min-height:2.4em}.ac-stats[data-v-80f99751]{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid #eef2f7;background:#fcfcfd}.ac-stat[data-v-80f99751]{padding:11px 8px;text-align:center;border-right:1px solid #eef2f7}.ac-stat[data-v-80f99751]:last-child{border-right:0}.ac-stat-n[data-v-80f99751]{font-size:17px;font-weight:700;line-height:1.2;color:#1e293b;font-family:SF Mono,Menlo,monospace;font-variant-numeric:tabular-nums}.ac-stat-n.warn[data-v-80f99751]{color:#b45309}.ac-stat-n.zero[data-v-80f99751]{color:#cbd5e1}.ac-stat-l[data-v-80f99751]{font-size:10px;color:#94a3b8;margin-top:2px;letter-spacing:.03em}.ac-regions[data-v-80f99751]{padding:11px 18px;gap:5px;flex-wrap:wrap;align-items:center;min-height:42px}.ac-foot[data-v-80f99751],.ac-regions[data-v-80f99751]{display:flex;border-top:1px solid #eef2f7}.ac-foot[data-v-80f99751]{padding:10px 14px;gap:6px;justify-content:flex-end;margin-top:auto}.orphan-list[data-v-80f99751]{border-top:1px solid #eef2f7}.orphan-row[data-v-80f99751]{display:flex;align-items:center;gap:8px;padding:9px 16px;border-bottom:1px solid #f8fafc}.orphan-row[data-v-80f99751]:last-child{border-bottom:0}.chip[data-v-80f99751]{display:inline-flex;align-items:center;font-size:10.5px;font-weight:700;padding:2px 7px;border-radius:5px;background:#f1f5f9;color:#64748b}.chip-app[data-v-80f99751]{background:#eef2ff;color:#4338ca}.chip-dep[data-v-80f99751]{background:#ecfeff;color:#0e7490}.chip-warn[data-v-80f99751]{background:#fef3c7;color:#b45309} |
|||
@ -1 +1 @@ |
|||
import{L as y,l as x}from"./DD3V9C6_.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"./AL6uUoB7.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"./DD3V9C6_.js";import{g as V,c as t,F as u,a as l,n as C,r,l as g,t as o,A as h,o as s,d as B,_ as N}from"./DMxDLVSv.js";const L={class:"lang-select"},O={class:"lang-chip-name"},S=["onClick"],j={key:0,class:"lang-empty"},A={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"},z=["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",A,[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,z))]))}}),q=Object.assign(N(E,[["__scopeId","data-v-4903af59"]]),{__name:"LangSelect"});export{q as _}; |
|||
@ -1 +0,0 @@ |
|||
import{e as f,a9 as p,aa as c,z as r}from"./AL6uUoB7.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}; |
|||
@ -1 +0,0 @@ |
|||
.svc-grid[data-v-4e0895d6]{display:grid;grid-template-columns:repeat(auto-fill,minmax(248px,1fr));gap:12px}.svc-card[data-v-4e0895d6]{background:#fff;border:1px solid #eef2f7;border-radius:14px;padding:14px;cursor:pointer;transition:all .15s}.svc-card[data-v-4e0895d6]:hover{border-color:#c7d2fe;box-shadow:0 6px 18px #6366f11f;transform:translateY(-1px)}.add-card[data-v-4e0895d6]{display:flex;flex-direction:column;align-items:center;justify-content:center;border-style:dashed;border-color:#e2e8f0;background:#fafbff;min-height:120px}.add-card[data-v-4e0895d6]:hover{border-color:#a5b4fc;background:#f5f3ff}.field-count[data-v-4e0895d6]{display:inline-flex;font-size:10px;font-weight:600;padding:1px 7px;border-radius:6px;background:#f1f5f9;color:#64748b}.line-clamp-2[data-v-4e0895d6]{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.svc-logo[data-v-4e0895d6]{width:36px;height:36px;border-radius:9px;display:flex;align-items:center;justify-content:center;font-size:16px;flex-shrink:0;color:#fff;font-weight:700}.cat-chip[data-v-4e0895d6]{font-weight:700;padding:2px 7px}.cat-chip[data-v-4e0895d6],.provider-chip[data-v-4e0895d6]{display:inline-flex;font-size:10px;border-radius:6px}.provider-chip[data-v-4e0895d6]{font-weight:600;padding:1px 7px;background:#eef2ff;color:#4338ca;font-family:SF Mono,Menlo,monospace}.wizard-steps[data-v-4e0895d6]{display:flex;align-items:center;gap:8px}.wstep[data-v-4e0895d6]{font-size:12px;font-weight:600;color:#94a3b8;padding:5px 12px;border-radius:8px;background:#f1f5f9;cursor:pointer;white-space:nowrap}.wstep.on[data-v-4e0895d6]{color:#4338ca;background:#eef2ff}.wstep.cur[data-v-4e0895d6]{color:#fff;background:#6366f1}.wstep.disabled[data-v-4e0895d6]{cursor:not-allowed;opacity:.6}.wline[data-v-4e0895d6]{flex:1;height:1px;background:#e2e8f0}.type-grid[data-v-4e0895d6]{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.type-card[data-v-4e0895d6]{display:flex;flex-direction:column;align-items:flex-start;padding:14px;border-radius:12px;border:1.5px solid #e2e8f0;cursor:pointer;transition:all .15s;background:#fff}.type-card[data-v-4e0895d6]:hover{border-color:#c7d2fe;background:#f5f3ff}.type-card.on[data-v-4e0895d6]{border-color:#6366f1;background:#eef2ff;box-shadow:0 4px 12px #6366f11f}.lock-badge[data-v-4e0895d6]{display:inline-flex;align-items:center;gap:3px;background:#fef2f2;color:#dc2626}.inherit-badge[data-v-4e0895d6],.lock-badge[data-v-4e0895d6]{font-size:10px;font-weight:600;padding:1px 7px;border-radius:6px}.inherit-badge[data-v-4e0895d6]{background:#f1f5f9;color:#94a3b8}.override-badge[data-v-4e0895d6]{background:#fef3c7;color:#b45309}.disabled-badge[data-v-4e0895d6],.override-badge[data-v-4e0895d6]{font-size:10px;font-weight:600;padding:1px 7px;border-radius:6px}.disabled-badge[data-v-4e0895d6]{background:#fee2e2;color:#b91c1c}.field-input[data-v-4e0895d6]{border:1px solid #e2e8f0;border-radius:7px;padding:5px 9px;font-size:12.5px;font-family:SF Mono,Menlo,monospace;width:100%}.field-input[data-v-4e0895d6]:focus{border-color:#6366f1;box-shadow:0 0 0 3px #6366f11a;outline:none}.field-input[data-v-4e0895d6]:disabled{background:#f8fafc;color:#cbd5e1}.modal-overlay[data-v-4e0895d6]{position:fixed;inset:0;background:#0f172a73;z-index:100;display:flex;align-items:center;justify-content:center;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.svc-box[data-v-4e0895d6]{padding:26px;width:860px;max-width:96vw;max-height:90vh;overflow:auto}.svc-box[data-v-4e0895d6],.sync-box[data-v-4e0895d6]{background:#fff;border-radius:20px;box-shadow:0 24px 80px #0000002e}.sync-box[data-v-4e0895d6]{padding:28px;width:520px;max-width:95vw}.tpl-box[data-v-4e0895d6]{background:#fff;border-radius:20px;padding:24px;width:620px;max-width:96vw;max-height:88vh;overflow:auto;box-shadow:0 24px 80px #0000002e}.tpl-list[data-v-4e0895d6]{max-height:60vh;overflow:auto}.tpl-row[data-v-4e0895d6]{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:9px;border:1px solid #eef2f7;margin-bottom:6px}.tpl-row[data-v-4e0895d6]:hover{border-color:#c7d2fe;background:#f8fafc}.sync-region-grid[data-v-4e0895d6]{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:14px 0}.sync-region-item[data-v-4e0895d6]{display:flex;align-items:center;gap:7px;padding:8px 10px;border-radius:9px;border:1.5px solid #e2e8f0;cursor:pointer;transition:all .15s;font-size:13px;font-weight:500;color:#475569}.sync-region-item[data-v-4e0895d6]:hover{border-color:#c7d2fe;background:#f5f3ff}.sync-region-item.checked[data-v-4e0895d6]{border-color:#6366f1;background:#eef2ff;color:#4338ca} |
|||
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
@ -0,0 +1,38 @@ |
|||
import { defineComponent, mergeProps, useSSRContext } from 'vue'; |
|||
import { ssrRenderAttrs, ssrInterpolate } from 'vue/server-renderer'; |
|||
import { u as useToast } from './useToast-MBvLaNjH.mjs'; |
|||
|
|||
const _sfc_main = /* @__PURE__ */ defineComponent({ |
|||
__name: "AccountCredentialDialog", |
|||
__ssrInlineRender: true, |
|||
props: { |
|||
info: {} |
|||
}, |
|||
emits: ["close"], |
|||
setup(__props) { |
|||
useToast(); |
|||
return (_ctx, _push, _parent, _attrs) => { |
|||
if (__props.info) { |
|||
_push(`<div${ssrRenderAttrs(mergeProps({ class: "modal modal-open" }, _attrs))}><div class="modal-box max-w-md"><h3 class="font-bold text-base mb-1">${ssrInterpolate(__props.info.title)}</h3><p class="text-xs text-slate-400 mb-3">初始密码仅在此显示一次,关闭后无法再查看(如需重设请到「后台账号」改密)。</p><div class="rounded-xl border border-slate-200 bg-slate-50 p-3 space-y-2"><div class="flex items-center justify-between gap-3"><span class="text-xs text-slate-500">登录用户名</span><span class="font-mono font-semibold text-sm">${ssrInterpolate(__props.info.username)}</span></div><div class="flex items-center justify-between gap-3"><span class="text-xs text-slate-500">初始密码</span><span class="font-mono font-semibold text-sm">${ssrInterpolate(__props.info.password)}</span></div></div>`); |
|||
if (__props.info.mailTo) { |
|||
_push(`<div class="mt-3 text-xs text-emerald-600"> ✓ 凭据已邮件发送至 ${ssrInterpolate(__props.info.mailTo)}</div>`); |
|||
} else { |
|||
_push(`<div class="mt-3 text-xs text-amber-600"> ⚠ 凭据未能邮件送达${ssrInterpolate(__props.info.mailError ? ":" + __props.info.mailError : "")},请手工转达上面的用户名和密码。 </div>`); |
|||
} |
|||
_push(`<div class="modal-action"><button class="btn btn-ghost btn-sm">复制</button><button class="btn btn-primary btn-sm text-white">我已记录,关闭</button></div></div></div>`); |
|||
} else { |
|||
_push(`<!---->`); |
|||
} |
|||
}; |
|||
} |
|||
}); |
|||
const _sfc_setup = _sfc_main.setup; |
|||
_sfc_main.setup = (props, ctx) => { |
|||
const ssrContext = useSSRContext(); |
|||
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/AccountCredentialDialog.vue"); |
|||
return _sfc_setup ? _sfc_setup(props, ctx) : void 0; |
|||
}; |
|||
const __nuxt_component_0 = Object.assign(_sfc_main, { __name: "AccountCredentialDialog" }); |
|||
|
|||
export { __nuxt_component_0 as _ }; |
|||
//# sourceMappingURL=AccountCredentialDialog-D37zgaXm.mjs.map
|
|||
@ -0,0 +1 @@ |
|||
{"version":3,"file":"AccountCredentialDialog-D37zgaXm.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/AccountCredentialDialog-D37zgaXm.js"],"names":[],"mappings":"","x_google_ignoreList":[0]} |
|||
@ -0,0 +1,8 @@ |
|||
import { A as AppDeployTab_vue_vue_type_style_index_0_scoped_c511dcb4_lang } from './_name_-styles-1.mjs-BmcUDjex.mjs'; |
|||
|
|||
const AppDeployTabStyles_4FdVYf2u = [ |
|||
AppDeployTab_vue_vue_type_style_index_0_scoped_c511dcb4_lang |
|||
]; |
|||
|
|||
export { AppDeployTabStyles_4FdVYf2u as default }; |
|||
//# sourceMappingURL=AppDeployTab-styles.4FdVYf2u.mjs.map
|
|||
@ -0,0 +1 @@ |
|||
{"version":3,"file":"AppDeployTab-styles.4FdVYf2u.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/AppDeployTab-styles.4FdVYf2u.mjs"],"names":["style_0"],"mappings":"","x_google_ignoreList":[0]} |
|||
@ -1,8 +0,0 @@ |
|||
import { A as AppDeployTab_vue_vue_type_style_index_0_scoped_7b082515_lang } from './_name_-styles-1.mjs-DV0K6DvJ.mjs'; |
|||
|
|||
const AppDeployTabStyles_CUK7XFMF = [ |
|||
AppDeployTab_vue_vue_type_style_index_0_scoped_7b082515_lang |
|||
]; |
|||
|
|||
export { AppDeployTabStyles_CUK7XFMF as default }; |
|||
//# sourceMappingURL=AppDeployTab-styles.CUK7XFMF.mjs.map
|
|||
@ -1 +0,0 @@ |
|||
{"version":3,"file":"AppDeployTab-styles.CUK7XFMF.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/AppDeployTab-styles.CUK7XFMF.mjs"],"names":["style_0"],"mappings":"","x_google_ignoreList":[0]} |
|||
@ -1 +0,0 @@ |
|||
{"version":3,"file":"_name_-BbBzwp8c.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/_name_-BbBzwp8c.js"],"names":["useRoute"],"mappings":"","x_google_ignoreList":[0]} |
|||
@ -0,0 +1 @@ |
|||
{"version":3,"file":"_name_-CJXf25S4.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/_name_-CJXf25S4.js"],"names":["useRoute"],"mappings":"","x_google_ignoreList":[0]} |
|||
@ -0,0 +1,4 @@ |
|||
const AppDeployTab_vue_vue_type_style_index_0_scoped_c511dcb4_lang = ".card[data-v-c511dcb4]{background:#fff;border:1px solid #eef2f7;border-radius:14px;box-shadow:0 1px 2px #0f172a0a;overflow:hidden}.card-head[data-v-c511dcb4]{padding:15px 18px;border-bottom:1px solid #eef2f7;display:flex;align-items:flex-start;justify-content:space-between;gap:14px;flex-wrap:wrap}.card-title[data-v-c511dcb4]{font-size:14.5px;font-weight:700;color:#1e293b}.card-desc[data-v-c511dcb4]{font-size:11.5px;color:#64748b;margin-top:3px;max-width:74ch;line-height:1.55}.dep[data-v-c511dcb4]{display:grid;grid-template-columns:1.5fr 1fr 1fr .9fr auto;gap:14px;align-items:center;padding:14px 18px;border-bottom:1px solid #eef2f7}.dep[data-v-c511dcb4]:last-child{border-bottom:0}.dep[data-v-c511dcb4]:hover{background:#fcfcfd}.dep.pending[data-v-c511dcb4]{background:linear-gradient(90deg,#fef3c7,transparent 34%)}.dep-name[data-v-c511dcb4]{font-weight:600;font-size:13.5px;color:#334155;display:flex;align-items:center;gap:7px;flex-wrap:wrap}.dep-sub[data-v-c511dcb4]{font-size:11px;color:#94a3b8;margin-top:3px;font-family:SF Mono,Menlo,monospace}.dep-acts[data-v-c511dcb4]{display:flex;gap:4px;flex-wrap:wrap;justify-content:flex-end}.field-l[data-v-c511dcb4]{font-size:10px;color:#94a3b8;letter-spacing:.04em;text-transform:uppercase;font-weight:600;margin-bottom:3px}.chip[data-v-c511dcb4]{display:inline-flex;align-items:center;font-size:10.5px;font-weight:700;padding:2px 7px;border-radius:5px;background:#f1f5f9;color:#64748b}.chip-dep[data-v-c511dcb4]{background:#ecfeff;color:#0e7490}.chip-ok[data-v-c511dcb4]{background:#dcfce7;color:#15803d}.chip-warn[data-v-c511dcb4]{background:#fef3c7;color:#b45309}.chip-mono[data-v-c511dcb4]{font-family:SF Mono,Menlo,monospace;font-weight:600}@media(max-width:1280px){.dep[data-v-c511dcb4]{grid-template-columns:1fr 1fr}.dep-acts[data-v-c511dcb4]{grid-column:1/-1;justify-content:flex-start}}"; |
|||
|
|||
export { AppDeployTab_vue_vue_type_style_index_0_scoped_c511dcb4_lang as A }; |
|||
//# sourceMappingURL=_name_-styles-1.mjs-BmcUDjex.mjs.map
|
|||
@ -0,0 +1 @@ |
|||
{"version":3,"file":"_name_-styles-1.mjs-BmcUDjex.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/_name_-styles-1.mjs-BmcUDjex.js"],"names":[],"mappings":"","x_google_ignoreList":[0]} |
|||
@ -1,4 +0,0 @@ |
|||
const AppDeployTab_vue_vue_type_style_index_0_scoped_7b082515_lang = ".card[data-v-7b082515]{background:#fff;border:1px solid #eef2f7;border-radius:14px;box-shadow:0 1px 2px #0f172a0a;overflow:hidden}.card-head[data-v-7b082515]{padding:15px 18px;border-bottom:1px solid #eef2f7;display:flex;align-items:flex-start;justify-content:space-between;gap:14px;flex-wrap:wrap}.card-title[data-v-7b082515]{font-size:14.5px;font-weight:700;color:#1e293b}.card-desc[data-v-7b082515]{font-size:11.5px;color:#64748b;margin-top:3px;max-width:74ch;line-height:1.55}.dep[data-v-7b082515]{display:grid;grid-template-columns:1.5fr 1fr 1fr .9fr auto;gap:14px;align-items:center;padding:14px 18px;border-bottom:1px solid #eef2f7}.dep[data-v-7b082515]:last-child{border-bottom:0}.dep[data-v-7b082515]:hover{background:#fcfcfd}.dep.pending[data-v-7b082515]{background:linear-gradient(90deg,#fef3c7,transparent 34%)}.dep-name[data-v-7b082515]{font-weight:600;font-size:13.5px;color:#334155;display:flex;align-items:center;gap:7px;flex-wrap:wrap}.dep-sub[data-v-7b082515]{font-size:11px;color:#94a3b8;margin-top:3px;font-family:SF Mono,Menlo,monospace}.dep-acts[data-v-7b082515]{display:flex;gap:4px;flex-wrap:wrap;justify-content:flex-end}.field-l[data-v-7b082515]{font-size:10px;color:#94a3b8;letter-spacing:.04em;text-transform:uppercase;font-weight:600;margin-bottom:3px}.chip[data-v-7b082515]{display:inline-flex;align-items:center;font-size:10.5px;font-weight:700;padding:2px 7px;border-radius:5px;background:#f1f5f9;color:#64748b}.chip-dep[data-v-7b082515]{background:#ecfeff;color:#0e7490}.chip-ok[data-v-7b082515]{background:#dcfce7;color:#15803d}.chip-warn[data-v-7b082515]{background:#fef3c7;color:#b45309}.chip-mono[data-v-7b082515]{font-family:SF Mono,Menlo,monospace;font-weight:600}@media(max-width:1280px){.dep[data-v-7b082515]{grid-template-columns:1fr 1fr}.dep-acts[data-v-7b082515]{grid-column:1/-1;justify-content:flex-start}}"; |
|||
|
|||
export { AppDeployTab_vue_vue_type_style_index_0_scoped_7b082515_lang as A }; |
|||
//# sourceMappingURL=_name_-styles-1.mjs-DV0K6DvJ.mjs.map
|
|||
@ -1 +0,0 @@ |
|||
{"version":3,"file":"_name_-styles-1.mjs-DV0K6DvJ.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/_name_-styles-1.mjs-DV0K6DvJ.js"],"names":[],"mappings":"","x_google_ignoreList":[0]} |
|||
@ -0,0 +1,13 @@ |
|||
import { A as AppDeployTab_vue_vue_type_style_index_0_scoped_c511dcb4_lang } from './_name_-styles-1.mjs-BmcUDjex.mjs'; |
|||
import { A as AppModuleTab_vue_vue_type_style_index_0_scoped_ff0e4b71_lang } from './_name_-styles-2.mjs-BXCS7H7R.mjs'; |
|||
|
|||
const _name__vue_vue_type_style_index_0_scoped_5215c85d_lang = '.hero[data-v-5215c85d]{background:#fff;border:1px solid #eef2f7;border-radius:16px;padding:20px 22px;margin-bottom:16px;box-shadow:0 1px 2px #0f172a0a,0 4px 16px #0f172a08;display:flex;gap:18px;align-items:center;flex-wrap:wrap}.hero-logo[data-v-5215c85d]{width:58px;height:58px;border-radius:15px;flex-shrink:0;color:#fff;background:linear-gradient(135deg,#4f46e5,#7c3aed);display:grid;place-items:center;font-weight:800;font-size:24px;box-shadow:0 8px 22px #4f46e54d}.hero-name[data-v-5215c85d]{font-size:20px;font-weight:700;color:#1e293b;letter-spacing:-.015em;display:flex;align-items:center;gap:9px;flex-wrap:wrap}.kpis[data-v-5215c85d]{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px;margin-bottom:18px}.kpi[data-v-5215c85d]{background:#fff;border:1px solid #eef2f7;border-radius:12px;padding:13px 15px;position:relative;overflow:hidden;box-shadow:0 1px 2px #0f172a0a}.kpi[data-v-5215c85d]:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:#e2e8f0}.kpi.ok[data-v-5215c85d]:before{background:#16a34a}.kpi.warn[data-v-5215c85d]:before{background:#d97706}.kpi.accent[data-v-5215c85d]:before{background:#4f46e5}.kpi-l[data-v-5215c85d]{font-size:10.5px;color:#94a3b8;letter-spacing:.04em;text-transform:uppercase;font-weight:600}.kpi-v[data-v-5215c85d]{font-size:22px;font-weight:700;color:#1e293b;margin-top:3px;letter-spacing:-.02em;font-family:SF Mono,Menlo,monospace;font-variant-numeric:tabular-nums}.kpi-v small[data-v-5215c85d]{font-size:12px;color:#94a3b8;font-weight:500;margin-left:3px}.tablist[data-v-5215c85d]{display:flex;gap:2px;border-bottom:1px solid #e2e8f0;margin-bottom:18px;overflow-x:auto}.tab[data-v-5215c85d]{border:0;background:none;font-size:13.5px;color:#64748b;padding:10px 15px;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap;display:flex;align-items:center;gap:6px}.tab[data-v-5215c85d]:hover{color:#1e293b}.tab[aria-selected=true][data-v-5215c85d]{color:#4338ca;border-bottom-color:#4f46e5;font-weight:600}.tab-n[data-v-5215c85d]{font-size:10.5px;background:#f8fafc;border:1px solid #eef2f7;color:#64748b;border-radius:20px;padding:0 6px;font-family:SF Mono,Menlo,monospace}.tab[aria-selected=true] .tab-n[data-v-5215c85d]{background:#eef2ff;color:#4338ca;border-color:transparent}.depbar[data-v-5215c85d]{gap:10px;flex-wrap:wrap;background:#f8fafc;border:1px solid #eef2f7;border-radius:11px;padding:10px 13px;margin-bottom:16px}.depbar[data-v-5215c85d],.depchip[data-v-5215c85d]{display:flex;align-items:center}.depchip[data-v-5215c85d]{border:1px solid #e2e8f0;background:#fff;border-radius:20px;padding:4px 12px;font-size:12px;cursor:pointer;color:#334155;gap:6px}.depchip[data-v-5215c85d]:hover{border-color:#0e7490}.depchip[aria-pressed=true][data-v-5215c85d]{background:#ecfeff;border-color:#0e7490;color:#0e7490;font-weight:600}.depchip .dot[data-v-5215c85d]{width:6px;height:6px;border-radius:50%;background:#16a34a}.depchip .dot.pending[data-v-5215c85d]{background:#d97706}.chip[data-v-5215c85d]{display:inline-flex;align-items:center;font-size:10.5px;font-weight:700;padding:2px 7px;border-radius:5px;background:#f1f5f9;color:#64748b}.chip-ok[data-v-5215c85d]{background:#dcfce7;color:#15803d}.chip-mono[data-v-5215c85d]{font-family:SF Mono,Menlo,monospace;font-weight:600}'; |
|||
|
|||
const _name_Styles_CveqLyYu = [ |
|||
AppDeployTab_vue_vue_type_style_index_0_scoped_c511dcb4_lang, |
|||
AppModuleTab_vue_vue_type_style_index_0_scoped_ff0e4b71_lang, |
|||
_name__vue_vue_type_style_index_0_scoped_5215c85d_lang |
|||
]; |
|||
|
|||
export { _name_Styles_CveqLyYu as default }; |
|||
//# sourceMappingURL=_name_-styles.CveqLyYu.mjs.map
|
|||
@ -0,0 +1 @@ |
|||
{"version":3,"file":"_name_-styles.CveqLyYu.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/_name_-styles-3.mjs-BitgxNQW.js","../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/_name_-styles.CveqLyYu.mjs"],"names":["style_0","style_1","style_2"],"mappings":"","x_google_ignoreList":[0,1]} |
|||
@ -1,13 +0,0 @@ |
|||
import { A as AppDeployTab_vue_vue_type_style_index_0_scoped_7b082515_lang } from './_name_-styles-1.mjs-DV0K6DvJ.mjs'; |
|||
import { A as AppModuleTab_vue_vue_type_style_index_0_scoped_ff0e4b71_lang } from './_name_-styles-2.mjs-BXCS7H7R.mjs'; |
|||
|
|||
const _name__vue_vue_type_style_index_0_scoped_865381f4_lang = '.hero[data-v-865381f4]{background:#fff;border:1px solid #eef2f7;border-radius:16px;padding:20px 22px;margin-bottom:16px;box-shadow:0 1px 2px #0f172a0a,0 4px 16px #0f172a08;display:flex;gap:18px;align-items:center;flex-wrap:wrap}.hero-logo[data-v-865381f4]{width:58px;height:58px;border-radius:15px;flex-shrink:0;color:#fff;background:linear-gradient(135deg,#4f46e5,#7c3aed);display:grid;place-items:center;font-weight:800;font-size:24px;box-shadow:0 8px 22px #4f46e54d}.hero-name[data-v-865381f4]{font-size:20px;font-weight:700;color:#1e293b;letter-spacing:-.015em;display:flex;align-items:center;gap:9px;flex-wrap:wrap}.kpis[data-v-865381f4]{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px;margin-bottom:18px}.kpi[data-v-865381f4]{background:#fff;border:1px solid #eef2f7;border-radius:12px;padding:13px 15px;position:relative;overflow:hidden;box-shadow:0 1px 2px #0f172a0a}.kpi[data-v-865381f4]:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:#e2e8f0}.kpi.ok[data-v-865381f4]:before{background:#16a34a}.kpi.warn[data-v-865381f4]:before{background:#d97706}.kpi.accent[data-v-865381f4]:before{background:#4f46e5}.kpi-l[data-v-865381f4]{font-size:10.5px;color:#94a3b8;letter-spacing:.04em;text-transform:uppercase;font-weight:600}.kpi-v[data-v-865381f4]{font-size:22px;font-weight:700;color:#1e293b;margin-top:3px;letter-spacing:-.02em;font-family:SF Mono,Menlo,monospace;font-variant-numeric:tabular-nums}.kpi-v small[data-v-865381f4]{font-size:12px;color:#94a3b8;font-weight:500;margin-left:3px}.tablist[data-v-865381f4]{display:flex;gap:2px;border-bottom:1px solid #e2e8f0;margin-bottom:18px;overflow-x:auto}.tab[data-v-865381f4]{border:0;background:none;font-size:13.5px;color:#64748b;padding:10px 15px;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap;display:flex;align-items:center;gap:6px}.tab[data-v-865381f4]:hover{color:#1e293b}.tab[aria-selected=true][data-v-865381f4]{color:#4338ca;border-bottom-color:#4f46e5;font-weight:600}.tab-n[data-v-865381f4]{font-size:10.5px;background:#f8fafc;border:1px solid #eef2f7;color:#64748b;border-radius:20px;padding:0 6px;font-family:SF Mono,Menlo,monospace}.tab[aria-selected=true] .tab-n[data-v-865381f4]{background:#eef2ff;color:#4338ca;border-color:transparent}.depbar[data-v-865381f4]{gap:10px;flex-wrap:wrap;background:#f8fafc;border:1px solid #eef2f7;border-radius:11px;padding:10px 13px;margin-bottom:16px}.depbar[data-v-865381f4],.depchip[data-v-865381f4]{display:flex;align-items:center}.depchip[data-v-865381f4]{border:1px solid #e2e8f0;background:#fff;border-radius:20px;padding:4px 12px;font-size:12px;cursor:pointer;color:#334155;gap:6px}.depchip[data-v-865381f4]:hover{border-color:#0e7490}.depchip[aria-pressed=true][data-v-865381f4]{background:#ecfeff;border-color:#0e7490;color:#0e7490;font-weight:600}.depchip .dot[data-v-865381f4]{width:6px;height:6px;border-radius:50%;background:#16a34a}.depchip .dot.pending[data-v-865381f4]{background:#d97706}.chip[data-v-865381f4]{display:inline-flex;align-items:center;font-size:10.5px;font-weight:700;padding:2px 7px;border-radius:5px;background:#f1f5f9;color:#64748b}.chip-ok[data-v-865381f4]{background:#dcfce7;color:#15803d}.chip-mono[data-v-865381f4]{font-family:SF Mono,Menlo,monospace;font-weight:600}'; |
|||
|
|||
const _name_Styles_Dz82uZcJ = [ |
|||
AppDeployTab_vue_vue_type_style_index_0_scoped_7b082515_lang, |
|||
AppModuleTab_vue_vue_type_style_index_0_scoped_ff0e4b71_lang, |
|||
_name__vue_vue_type_style_index_0_scoped_865381f4_lang |
|||
]; |
|||
|
|||
export { _name_Styles_Dz82uZcJ as default }; |
|||
//# sourceMappingURL=_name_-styles.Dz82uZcJ.mjs.map
|
|||
@ -1 +0,0 @@ |
|||
{"version":3,"file":"_name_-styles.Dz82uZcJ.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/_name_-styles-3.mjs-Uy9b9kOk.js","../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/_name_-styles.Dz82uZcJ.mjs"],"names":["style_0","style_1","style_2"],"mappings":"","x_google_ignoreList":[0,1]} |
|||
@ -1,199 +0,0 @@ |
|||
import { defineComponent, ref, reactive, computed, watch, unref, useSSRContext } from 'vue'; |
|||
import { ssrRenderAttrs, ssrRenderStyle, ssrRenderList, ssrInterpolate, ssrRenderClass, ssrRenderAttr, ssrIncludeBooleanAttr, ssrLooseContain, ssrLooseEqual } from 'vue/server-renderer'; |
|||
import { u as useApi } from './useApi-B-E5eLsI.mjs'; |
|||
import { u as useToast } from './useToast-CS21XT61.mjs'; |
|||
import { _ as _export_sfc, D as DEFAULT_ADMIN_ACCESS, M as MENU_GROUPS } 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: "accounts", |
|||
__ssrInlineRender: true, |
|||
setup(__props) { |
|||
useApi(); |
|||
useToast(); |
|||
const ROLE = { 1: "超管", 2: "管理员", 3: "品牌商", 4: "运营", 5: "渠道商" }; |
|||
const ROLE_CLS = { 1: "badge-error", 2: "badge-primary", 3: "badge-warning", 4: "badge-info", 5: "badge-accent" }; |
|||
const REGIONS = [["cn", "中国"], ["us", "美国"], ["ea", "东亚"], ["sea", "东南亚"], ["sa", "南亚"], ["me", "中东"], ["eu", "欧洲"], ["ru", "俄罗斯"], ["af", "非洲"], ["sam", "南美"], ["nam", "北美"], ["oc", "大洋洲"], ["br", "巴西"], ["in", "印度"]]; |
|||
const view = ref("list"); |
|||
const rows = ref([]); |
|||
const apps = ref([]); |
|||
const loading = ref(false); |
|||
const submitting = ref(false); |
|||
const editId = ref(0); |
|||
const form = reactive({ |
|||
username: "", |
|||
password: "", |
|||
identity: 2, |
|||
enabled: "1", |
|||
remark: "", |
|||
brandid: 0, |
|||
channelid: "" |
|||
}); |
|||
const channels = ref([]); |
|||
const accountChannelOptions = computed( |
|||
() => form.brandid ? channels.value.filter((ch) => ch.brandid === form.brandid) : [] |
|||
); |
|||
const sel = reactive({ |
|||
access: [], |
|||
apps: [], |
|||
regions: [], |
|||
products: [] |
|||
}); |
|||
const brands = ref([]); |
|||
const productGroups = ref([]); |
|||
const prodLoading = ref(false); |
|||
function fromCsv(s) { |
|||
return (s || "").split(",").map((x) => x.trim()).filter((x) => x); |
|||
} |
|||
function scopeParts(a) { |
|||
const parts = []; |
|||
if (a.apps) parts.push("应用:" + fromCsv(a.apps).length); |
|||
if (a.regions) parts.push("区域:" + fromCsv(a.regions).length); |
|||
if (a.products) parts.push("产品:" + fromCsv(a.products).length); |
|||
if (a.access) parts.push("页面:" + fromCsv(a.access).length); |
|||
return parts; |
|||
} |
|||
watch(() => form.identity, (idt) => { |
|||
if (idt === 2 && sel.access.length === 0) sel.access = DEFAULT_ADMIN_ACCESS.slice(); |
|||
}); |
|||
ref(null); |
|||
ref(0); |
|||
const topup = reactive({ |
|||
name: "", |
|||
cur: "", |
|||
vipday: 0, |
|||
trademin: 0, |
|||
meetmin: 0 |
|||
}); |
|||
return (_ctx, _push, _parent, _attrs) => { |
|||
_push(`<div${ssrRenderAttrs(_attrs)} data-v-11e40be5><div style="${ssrRenderStyle(view.value === "list" ? null : { display: "none" })}" data-v-11e40be5><div class="flex items-center justify-between mb-4" data-v-11e40be5><div data-v-11e40be5><h2 class="text-lg font-bold text-slate-700" data-v-11e40be5>后台账号</h2><p class="text-xs text-slate-400 mt-0.5" data-v-11e40be5>超管 / 管理员 / 代理 / 运营。代理·运营可绑定应用·区域·产品,登录后仪表盘按绑定限制。</p></div><button class="btn btn-primary btn-sm text-white" data-v-11e40be5>+ 新建账号</button></div><div class="bg-white rounded-xl shadow-sm border border-slate-100 overflow-hidden" data-v-11e40be5><table class="table table-sm" data-v-11e40be5><thead data-v-11e40be5><tr class="text-slate-500" data-v-11e40be5><th data-v-11e40be5>ID</th><th data-v-11e40be5>用户名</th><th data-v-11e40be5>角色</th><th data-v-11e40be5>状态</th><th data-v-11e40be5>绑定作用域</th><th data-v-11e40be5>备注</th><th class="text-right" data-v-11e40be5>操作</th></tr></thead><tbody data-v-11e40be5>`); |
|||
if (loading.value) { |
|||
_push(`<tr data-v-11e40be5><td colspan="7" class="text-center text-slate-400 py-8" data-v-11e40be5>加载中...</td></tr>`); |
|||
} else if (!rows.value.length) { |
|||
_push(`<tr data-v-11e40be5><td colspan="7" class="text-center text-slate-400 py-8" data-v-11e40be5>暂无账号(引导超管不在此列)</td></tr>`); |
|||
} else { |
|||
_push(`<!---->`); |
|||
} |
|||
_push(`<!--[-->`); |
|||
ssrRenderList(rows.value, (a) => { |
|||
_push(`<tr data-v-11e40be5><td class="font-mono" data-v-11e40be5>${ssrInterpolate(a.id)}</td><td class="font-medium" data-v-11e40be5>${ssrInterpolate(a.username || "")}</td><td data-v-11e40be5><span class="${ssrRenderClass([ROLE_CLS[a.identity] || "", "badge badge-sm"])}" data-v-11e40be5>${ssrInterpolate(ROLE[a.identity] || a.identity)}</span></td><td data-v-11e40be5>`); |
|||
if (a.enabled) { |
|||
_push(`<span class="text-green-600 text-xs" data-v-11e40be5>启用</span>`); |
|||
} else { |
|||
_push(`<span class="text-slate-400 text-xs" data-v-11e40be5>停用</span>`); |
|||
} |
|||
_push(`</td><td data-v-11e40be5>`); |
|||
if (a.identity === 3 || a.identity === 4) { |
|||
_push(`<!--[-->`); |
|||
if (scopeParts(a).length) { |
|||
_push(`<span class="text-xs text-slate-500" data-v-11e40be5>${ssrInterpolate(scopeParts(a).join(" · "))}</span>`); |
|||
} else { |
|||
_push(`<span class="text-xs text-slate-300" data-v-11e40be5>未绑定(不限)</span>`); |
|||
} |
|||
_push(`<!--]-->`); |
|||
} else if (a.identity === 2) { |
|||
_push(`<!--[-->`); |
|||
if (a.access) { |
|||
_push(`<span class="text-xs text-slate-500" data-v-11e40be5>菜单:${ssrInterpolate(fromCsv(a.access).length)}</span>`); |
|||
} else { |
|||
_push(`<span class="text-xs text-slate-300" data-v-11e40be5>默认(除SaaS/系统管理)</span>`); |
|||
} |
|||
_push(`<!--]-->`); |
|||
} else { |
|||
_push(`<span class="text-xs text-slate-300" data-v-11e40be5>全部权限</span>`); |
|||
} |
|||
if (a.identity === 3) { |
|||
_push(`<div class="text-[11px] text-emerald-600 mt-0.5" data-v-11e40be5> 余额 VIP${ssrInterpolate(a.balance_vipday || 0)}天 · 翻译${ssrInterpolate(a.balance_trademin || 0)}分 · 会议${ssrInterpolate(a.balance_meetmin || 0)}分 </div>`); |
|||
} else { |
|||
_push(`<!---->`); |
|||
} |
|||
_push(`</td><td class="text-xs text-slate-500" data-v-11e40be5>${ssrInterpolate(a.remark || "")}</td><td data-v-11e40be5><div class="flex gap-1 justify-end" data-v-11e40be5>`); |
|||
if (a.identity === 3) { |
|||
_push(`<button class="btn btn-ghost btn-xs text-emerald-600" data-v-11e40be5>充值</button>`); |
|||
} else { |
|||
_push(`<!---->`); |
|||
} |
|||
_push(`<button class="btn btn-ghost btn-xs" data-v-11e40be5>编辑</button><button class="btn btn-ghost btn-xs text-amber-600" data-v-11e40be5>改密</button><button class="btn btn-ghost btn-xs text-red-500" data-v-11e40be5>删除</button></div></td></tr>`); |
|||
}); |
|||
_push(`<!--]--></tbody></table></div></div><div style="${ssrRenderStyle(view.value === "form" ? null : { display: "none" })}" data-v-11e40be5><div class="flex items-center gap-3 mb-5" data-v-11e40be5><button class="btn btn-ghost btn-sm" data-v-11e40be5>← 返回列表</button><h2 class="text-lg font-semibold text-slate-800" data-v-11e40be5>${ssrInterpolate(editId.value ? "编辑账号 #" + editId.value : "新建账号")}</h2></div><div class="bg-white rounded-xl shadow-sm border border-slate-100 p-6 max-w-2xl" data-v-11e40be5><div class="grid grid-cols-2 gap-3" data-v-11e40be5><div data-v-11e40be5><label class="text-xs text-slate-500" data-v-11e40be5>用户名</label><input${ssrRenderAttr("value", form.username)}${ssrIncludeBooleanAttr(!!editId.value) ? " disabled" : ""} class="input input-bordered input-sm w-full" placeholder="登录用户名" data-v-11e40be5></div><div style="${ssrRenderStyle(!editId.value ? null : { display: "none" })}" data-v-11e40be5><label class="text-xs text-slate-500" data-v-11e40be5>密码</label><input${ssrRenderAttr("value", form.password)} type="password" class="input input-bordered input-sm w-full" placeholder="登录密码" data-v-11e40be5></div><div data-v-11e40be5><label class="text-xs text-slate-500" data-v-11e40be5>角色</label><select class="select select-bordered select-sm w-full" data-v-11e40be5><option${ssrRenderAttr("value", 2)} data-v-11e40be5${ssrIncludeBooleanAttr(Array.isArray(form.identity) ? ssrLooseContain(form.identity, 2) : ssrLooseEqual(form.identity, 2)) ? " selected" : ""}>管理员(默认除 SaaS/系统管理外全部)</option><option${ssrRenderAttr("value", 3)} data-v-11e40be5${ssrIncludeBooleanAttr(Array.isArray(form.identity) ? ssrLooseContain(form.identity, 3) : ssrLooseEqual(form.identity, 3)) ? " selected" : ""}>品牌商(绑定品牌商,见名下全部渠道商)</option><option${ssrRenderAttr("value", 5)} data-v-11e40be5${ssrIncludeBooleanAttr(Array.isArray(form.identity) ? ssrLooseContain(form.identity, 5) : ssrLooseEqual(form.identity, 5)) ? " selected" : ""}>渠道商(绑定单个渠道商,只见自己数据)</option><option${ssrRenderAttr("value", 4)} data-v-11e40be5${ssrIncludeBooleanAttr(Array.isArray(form.identity) ? ssrLooseContain(form.identity, 4) : ssrLooseEqual(form.identity, 4)) ? " selected" : ""}>运营(内部,按绑定限制)</option><option${ssrRenderAttr("value", 1)} data-v-11e40be5${ssrIncludeBooleanAttr(Array.isArray(form.identity) ? ssrLooseContain(form.identity, 1) : ssrLooseEqual(form.identity, 1)) ? " selected" : ""}>超管(全部权限)</option></select></div><div data-v-11e40be5><label class="text-xs text-slate-500" data-v-11e40be5>状态</label><select class="select select-bordered select-sm w-full" data-v-11e40be5><option value="1" data-v-11e40be5${ssrIncludeBooleanAttr(Array.isArray(form.enabled) ? ssrLooseContain(form.enabled, "1") : ssrLooseEqual(form.enabled, "1")) ? " selected" : ""}>启用</option><option value="0" data-v-11e40be5${ssrIncludeBooleanAttr(Array.isArray(form.enabled) ? ssrLooseContain(form.enabled, "0") : ssrLooseEqual(form.enabled, "0")) ? " selected" : ""}>停用</option></select></div><div class="col-span-2" data-v-11e40be5><label class="text-xs text-slate-500" data-v-11e40be5>备注</label><input${ssrRenderAttr("value", form.remark)} class="input input-bordered input-sm w-full" placeholder="可选" data-v-11e40be5></div></div><div class="mt-4 border-t border-slate-100 pt-4" style="${ssrRenderStyle(form.identity !== 1 ? null : { display: "none" })}" data-v-11e40be5><div class="flex items-center justify-between mb-1" data-v-11e40be5><div class="text-sm font-semibold text-slate-600" data-v-11e40be5>菜单权限</div><div class="flex gap-1" data-v-11e40be5><button type="button" class="btn btn-ghost btn-xs" data-v-11e40be5>管理员默认</button><button type="button" class="btn btn-ghost btn-xs" data-v-11e40be5>全选</button><button type="button" class="btn btn-ghost btn-xs" data-v-11e40be5>清空</button></div></div><p class="text-xs text-slate-400 mb-3" data-v-11e40be5>管理员默认开放除「SaaS 管理 / 系统管理」以外的全部菜单(权限留空时按默认生效);代理/运营需显式勾选。</p><!--[-->`); |
|||
ssrRenderList(unref(MENU_GROUPS), (g) => { |
|||
_push(`<div class="mb-2.5" data-v-11e40be5><div class="text-xs text-slate-500 mb-1.5" data-v-11e40be5>${ssrInterpolate(g.label)}`); |
|||
if (g.restricted) { |
|||
_push(`<span class="text-amber-500 ml-1" data-v-11e40be5>(管理员默认不开放)</span>`); |
|||
} else { |
|||
_push(`<!---->`); |
|||
} |
|||
_push(`</div><div class="flex flex-wrap gap-2" data-v-11e40be5><!--[-->`); |
|||
ssrRenderList(g.items, (m) => { |
|||
_push(`<label class="chk" data-v-11e40be5><input${ssrIncludeBooleanAttr(Array.isArray(sel.access) ? ssrLooseContain(sel.access, m.id) : sel.access) ? " checked" : ""} type="checkbox"${ssrRenderAttr("value", m.id)} data-v-11e40be5>${ssrInterpolate(m.label)}</label>`); |
|||
}); |
|||
_push(`<!--]--></div></div>`); |
|||
}); |
|||
_push(`<!--]--></div><div class="mt-4 border-t border-slate-100 pt-4" style="${ssrRenderStyle(form.identity === 3 || form.identity === 5 ? null : { display: "none" })}" data-v-11e40be5><div class="text-sm font-semibold text-slate-600 mb-2" data-v-11e40be5> 归属绑定 <span class="text-xs text-slate-400 font-normal" data-v-11e40be5>(品牌商账号只绑品牌商;渠道商账号两者都要绑)</span></div><div class="grid grid-cols-2 gap-3" data-v-11e40be5><div data-v-11e40be5><label class="text-xs text-slate-500" data-v-11e40be5>所属品牌商 *</label><select class="select select-bordered select-sm w-full" data-v-11e40be5><option${ssrRenderAttr("value", 0)} data-v-11e40be5${ssrIncludeBooleanAttr(Array.isArray(form.brandid) ? ssrLooseContain(form.brandid, 0) : ssrLooseEqual(form.brandid, 0)) ? " selected" : ""}>请选择品牌商</option><!--[-->`); |
|||
ssrRenderList(brands.value, (b) => { |
|||
_push(`<option${ssrRenderAttr("value", b.id)} data-v-11e40be5${ssrIncludeBooleanAttr(Array.isArray(form.brandid) ? ssrLooseContain(form.brandid, b.id) : ssrLooseEqual(form.brandid, b.id)) ? " selected" : ""}>${ssrInterpolate(b.brand)}</option>`); |
|||
}); |
|||
_push(`<!--]--></select></div><div style="${ssrRenderStyle(form.identity === 5 ? null : { display: "none" })}" data-v-11e40be5><label class="text-xs text-slate-500" data-v-11e40be5>所属渠道商 *</label><select class="select select-bordered select-sm w-full"${ssrIncludeBooleanAttr(!accountChannelOptions.value.length) ? " disabled" : ""} data-v-11e40be5><option value="" data-v-11e40be5${ssrIncludeBooleanAttr(Array.isArray(form.channelid) ? ssrLooseContain(form.channelid, "") : ssrLooseEqual(form.channelid, "")) ? " selected" : ""}>${ssrInterpolate(form.brandid ? accountChannelOptions.value.length ? "请选择渠道商" : "该品牌商暂无渠道商" : "请先选择品牌商")}</option><!--[-->`); |
|||
ssrRenderList(accountChannelOptions.value, (ch) => { |
|||
_push(`<option${ssrRenderAttr("value", ch.id)} data-v-11e40be5${ssrIncludeBooleanAttr(Array.isArray(form.channelid) ? ssrLooseContain(form.channelid, ch.id) : ssrLooseEqual(form.channelid, ch.id)) ? " selected" : ""}>${ssrInterpolate(ch.name)} (${ssrInterpolate(ch.id)})</option>`); |
|||
}); |
|||
_push(`<!--]--></select></div></div><p class="text-xs text-slate-400 mt-2" data-v-11e40be5> 数据隔离由后端强制:品牌商账号只能看到本品牌商及其名下渠道商的数据,渠道商账号只能看到自己渠道的数据。 </p></div><div class="mt-4 border-t border-slate-100 pt-4" style="${ssrRenderStyle(form.identity === 3 || form.identity === 4 ? null : { display: "none" })}" data-v-11e40be5><div class="text-sm font-semibold text-slate-600 mb-2" data-v-11e40be5>作用域绑定 <span class="text-xs text-slate-400 font-normal" data-v-11e40be5>(代理/运营生效;限制仪表盘数据范围)</span></div><div class="mb-3" data-v-11e40be5><div class="text-xs text-slate-500 mb-1.5" data-v-11e40be5>绑定应用 <span class="text-slate-300" data-v-11e40be5>(仪表盘只显示这些应用数据;不勾=不限)</span></div><div class="flex flex-wrap gap-2" data-v-11e40be5>`); |
|||
if (apps.value.length) { |
|||
_push(`<!--[-->`); |
|||
ssrRenderList(apps.value, (a) => { |
|||
_push(`<label class="chk" data-v-11e40be5><input${ssrIncludeBooleanAttr(Array.isArray(sel.apps) ? ssrLooseContain(sel.apps, a.name) : sel.apps) ? " checked" : ""} type="checkbox"${ssrRenderAttr("value", a.name)} data-v-11e40be5>${ssrInterpolate(a.name || "应用#" + a.id)}</label>`); |
|||
}); |
|||
_push(`<!--]-->`); |
|||
} else { |
|||
_push(`<span class="text-xs text-slate-300" data-v-11e40be5>无注册应用</span>`); |
|||
} |
|||
_push(`</div></div><div class="mb-3" data-v-11e40be5><div class="text-xs text-slate-500 mb-1.5" data-v-11e40be5>绑定区域 <span class="text-slate-300" data-v-11e40be5>(不勾=不限)</span></div><div class="flex flex-wrap gap-2" data-v-11e40be5><!--[-->`); |
|||
ssrRenderList(REGIONS, (r) => { |
|||
_push(`<label class="chk" data-v-11e40be5><input${ssrIncludeBooleanAttr(Array.isArray(sel.regions) ? ssrLooseContain(sel.regions, r[0]) : sel.regions) ? " checked" : ""} type="checkbox"${ssrRenderAttr("value", r[0])} data-v-11e40be5>${ssrInterpolate(r[1])}</label>`); |
|||
}); |
|||
_push(`<!--]--></div></div><div data-v-11e40be5><div class="text-xs text-slate-500 mb-1.5" data-v-11e40be5>绑定产品 <span class="text-slate-300" data-v-11e40be5>(按厂家分组;仪表盘只显示这些产品数据;不勾=不限)</span></div><div class="max-h-56 overflow-y-auto pr-1 border border-slate-100 rounded-lg p-2" data-v-11e40be5>`); |
|||
if (prodLoading.value) { |
|||
_push(`<span class="text-xs text-slate-300" data-v-11e40be5>加载产品中...</span>`); |
|||
} else if (!productGroups.value.length) { |
|||
_push(`<span class="text-xs text-slate-300" data-v-11e40be5>无产品</span>`); |
|||
} else { |
|||
_push(`<!--[-->`); |
|||
ssrRenderList(productGroups.value, (g) => { |
|||
_push(`<div class="mb-2 last:mb-0" data-v-11e40be5><div class="text-[11px] font-semibold text-slate-500 mb-1 sticky top-0 bg-white py-0.5" data-v-11e40be5>🏭 ${ssrInterpolate(g.label)}</div><div class="flex flex-wrap gap-2" data-v-11e40be5><!--[-->`); |
|||
ssrRenderList(g.products, (p) => { |
|||
_push(`<label class="chk" data-v-11e40be5><input${ssrIncludeBooleanAttr(Array.isArray(sel.products) ? ssrLooseContain(sel.products, String(p.id)) : sel.products) ? " checked" : ""} type="checkbox"${ssrRenderAttr("value", String(p.id))} data-v-11e40be5>${ssrInterpolate((p.devicename || "产品") + " #" + p.id)}</label>`); |
|||
}); |
|||
_push(`<!--]--></div></div>`); |
|||
}); |
|||
_push(`<!--]-->`); |
|||
} |
|||
_push(`</div></div></div><div class="flex gap-3 justify-end mt-6" data-v-11e40be5><button class="btn btn-ghost btn-sm" data-v-11e40be5>取消</button><button class="btn btn-primary btn-sm text-white"${ssrIncludeBooleanAttr(submitting.value) ? " disabled" : ""} data-v-11e40be5>保存</button></div></div></div><dialog class="modal" data-v-11e40be5><div class="modal-box max-w-md" data-v-11e40be5><h3 class="font-bold text-lg mb-1" data-v-11e40be5>充值 / 调整资源点</h3><p class="text-xs text-slate-400 mb-3" data-v-11e40be5>代理:<span class="font-medium text-slate-600" data-v-11e40be5>${ssrInterpolate(topup.name)}</span>。填增量(可填负数下调),当前余额:<span class="text-emerald-600" data-v-11e40be5>${ssrInterpolate(topup.cur)}</span></p><div class="grid grid-cols-3 gap-3" data-v-11e40be5><div data-v-11e40be5><label class="text-xs text-slate-500" data-v-11e40be5>VIP天数</label><input${ssrRenderAttr("value", topup.vipday)} type="number" class="input input-bordered input-sm w-full" data-v-11e40be5></div><div data-v-11e40be5><label class="text-xs text-slate-500" data-v-11e40be5>翻译分钟</label><input${ssrRenderAttr("value", topup.trademin)} type="number" class="input input-bordered input-sm w-full" data-v-11e40be5></div><div data-v-11e40be5><label class="text-xs text-slate-500" data-v-11e40be5>会议分钟</label><input${ssrRenderAttr("value", topup.meetmin)} type="number" class="input input-bordered input-sm w-full" data-v-11e40be5></div></div><div class="modal-action" data-v-11e40be5><button class="btn btn-ghost btn-sm" data-v-11e40be5>取消</button><button class="btn btn-primary btn-sm text-white" data-v-11e40be5>确认</button></div></div><form method="dialog" class="modal-backdrop" data-v-11e40be5><button data-v-11e40be5>close</button></form></dialog></div>`); |
|||
}; |
|||
} |
|||
}); |
|||
const _sfc_setup = _sfc_main.setup; |
|||
_sfc_main.setup = (props, ctx) => { |
|||
const ssrContext = useSSRContext(); |
|||
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/accounts.vue"); |
|||
return _sfc_setup ? _sfc_setup(props, ctx) : void 0; |
|||
}; |
|||
const accounts = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-11e40be5"]]); |
|||
|
|||
export { accounts as default }; |
|||
//# sourceMappingURL=accounts-C1hb7WMW.mjs.map
|
|||
@ -1 +0,0 @@ |
|||
{"version":3,"file":"accounts-C1hb7WMW.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/accounts-C1hb7WMW.js"],"names":[],"mappings":"","x_google_ignoreList":[0]} |
|||
@ -0,0 +1,201 @@ |
|||
import { defineComponent, ref, computed, reactive, watch, unref, useSSRContext } from 'vue'; |
|||
import { ssrRenderAttrs, ssrRenderStyle, ssrRenderList, ssrInterpolate, ssrRenderClass, ssrRenderAttr, ssrIncludeBooleanAttr, ssrLooseContain, ssrLooseEqual } from 'vue/server-renderer'; |
|||
import { u as useApi } from './useApi-BNSkSrat.mjs'; |
|||
import { u as useToast } from './useToast-MBvLaNjH.mjs'; |
|||
import { _ as _export_sfc, D as DEFAULT_ADMIN_ACCESS, M as MENU_GROUPS } from './server.mjs'; |
|||
import { R as REGION_OPTIONS } from './regions-D1dSykUW.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: "accounts", |
|||
__ssrInlineRender: true, |
|||
setup(__props) { |
|||
useApi(); |
|||
useToast(); |
|||
const ROLE = { 1: "超管", 2: "管理员", 3: "品牌商", 4: "运营", 5: "渠道商" }; |
|||
const ROLE_CLS = { 1: "badge-error", 2: "badge-primary", 3: "badge-warning", 4: "badge-info", 5: "badge-accent" }; |
|||
const view = ref("list"); |
|||
const rows = ref([]); |
|||
const apps = ref([]); |
|||
const appNames = computed( |
|||
() => [...new Set(apps.value.map((a) => a.app_name || a.name).filter(Boolean))].sort() |
|||
); |
|||
const loading = ref(false); |
|||
const submitting = ref(false); |
|||
const editId = ref(0); |
|||
const form = reactive({ |
|||
username: "", |
|||
password: "", |
|||
identity: 2, |
|||
enabled: "1", |
|||
remark: "", |
|||
brandid: 0, |
|||
channelid: "" |
|||
}); |
|||
const channels = ref([]); |
|||
const accountChannelOptions = computed( |
|||
() => form.brandid ? channels.value.filter((ch) => ch.brandid === form.brandid) : [] |
|||
); |
|||
const sel = reactive({ |
|||
access: [], |
|||
apps: [], |
|||
regions: [], |
|||
products: [] |
|||
}); |
|||
const brands = ref([]); |
|||
const productGroups = ref([]); |
|||
const prodLoading = ref(false); |
|||
function fromCsv(s) { |
|||
return (s || "").split(",").map((x) => x.trim()).filter((x) => x); |
|||
} |
|||
function scopeParts(a) { |
|||
const parts = []; |
|||
if (a.apps) parts.push("应用:" + fromCsv(a.apps).length); |
|||
if (a.regions) parts.push("区域:" + fromCsv(a.regions).length); |
|||
if (a.products) parts.push("产品:" + fromCsv(a.products).length); |
|||
if (a.access) parts.push("页面:" + fromCsv(a.access).length); |
|||
return parts; |
|||
} |
|||
watch(() => form.identity, (idt) => { |
|||
if (idt === 2 && sel.access.length === 0) sel.access = DEFAULT_ADMIN_ACCESS.slice(); |
|||
}); |
|||
ref(null); |
|||
ref(0); |
|||
const topup = reactive({ |
|||
name: "", |
|||
cur: "", |
|||
vipday: 0, |
|||
trademin: 0, |
|||
meetmin: 0 |
|||
}); |
|||
return (_ctx, _push, _parent, _attrs) => { |
|||
_push(`<div${ssrRenderAttrs(_attrs)} data-v-b47e60f8><div style="${ssrRenderStyle(view.value === "list" ? null : { display: "none" })}" data-v-b47e60f8><div class="flex items-center justify-between mb-4" data-v-b47e60f8><div data-v-b47e60f8><h2 class="text-lg font-bold text-slate-700" data-v-b47e60f8>后台账号</h2><p class="text-xs text-slate-400 mt-0.5" data-v-b47e60f8>超管 / 管理员 / 代理 / 运营。代理·运营可绑定应用·区域·产品,登录后仪表盘按绑定限制。</p></div><button class="btn btn-primary btn-sm text-white" data-v-b47e60f8>+ 新建账号</button></div><div class="bg-white rounded-xl shadow-sm border border-slate-100 overflow-hidden" data-v-b47e60f8><table class="table table-sm" data-v-b47e60f8><thead data-v-b47e60f8><tr class="text-slate-500" data-v-b47e60f8><th data-v-b47e60f8>ID</th><th data-v-b47e60f8>用户名</th><th data-v-b47e60f8>角色</th><th data-v-b47e60f8>状态</th><th data-v-b47e60f8>绑定作用域</th><th data-v-b47e60f8>备注</th><th class="text-right" data-v-b47e60f8>操作</th></tr></thead><tbody data-v-b47e60f8>`); |
|||
if (loading.value) { |
|||
_push(`<tr data-v-b47e60f8><td colspan="7" class="text-center text-slate-400 py-8" data-v-b47e60f8>加载中...</td></tr>`); |
|||
} else if (!rows.value.length) { |
|||
_push(`<tr data-v-b47e60f8><td colspan="7" class="text-center text-slate-400 py-8" data-v-b47e60f8>暂无账号(引导超管不在此列)</td></tr>`); |
|||
} else { |
|||
_push(`<!---->`); |
|||
} |
|||
_push(`<!--[-->`); |
|||
ssrRenderList(rows.value, (a) => { |
|||
_push(`<tr data-v-b47e60f8><td class="font-mono" data-v-b47e60f8>${ssrInterpolate(a.id)}</td><td class="font-medium" data-v-b47e60f8>${ssrInterpolate(a.username || "")}</td><td data-v-b47e60f8><span class="${ssrRenderClass([ROLE_CLS[a.identity] || "", "badge badge-sm"])}" data-v-b47e60f8>${ssrInterpolate(ROLE[a.identity] || a.identity)}</span></td><td data-v-b47e60f8>`); |
|||
if (a.enabled) { |
|||
_push(`<span class="text-green-600 text-xs" data-v-b47e60f8>启用</span>`); |
|||
} else { |
|||
_push(`<span class="text-slate-400 text-xs" data-v-b47e60f8>停用</span>`); |
|||
} |
|||
_push(`</td><td data-v-b47e60f8>`); |
|||
if (a.identity === 3 || a.identity === 4) { |
|||
_push(`<!--[-->`); |
|||
if (scopeParts(a).length) { |
|||
_push(`<span class="text-xs text-slate-500" data-v-b47e60f8>${ssrInterpolate(scopeParts(a).join(" · "))}</span>`); |
|||
} else { |
|||
_push(`<span class="text-xs text-slate-300" data-v-b47e60f8>未绑定(不限)</span>`); |
|||
} |
|||
_push(`<!--]-->`); |
|||
} else if (a.identity === 2) { |
|||
_push(`<!--[-->`); |
|||
if (a.access) { |
|||
_push(`<span class="text-xs text-slate-500" data-v-b47e60f8>菜单:${ssrInterpolate(fromCsv(a.access).length)}</span>`); |
|||
} else { |
|||
_push(`<span class="text-xs text-slate-300" data-v-b47e60f8>默认(除SaaS/系统管理)</span>`); |
|||
} |
|||
_push(`<!--]-->`); |
|||
} else { |
|||
_push(`<span class="text-xs text-slate-300" data-v-b47e60f8>全部权限</span>`); |
|||
} |
|||
if (a.identity === 3) { |
|||
_push(`<div class="text-[11px] text-emerald-600 mt-0.5" data-v-b47e60f8> 余额 VIP${ssrInterpolate(a.balance_vipday || 0)}天 · 翻译${ssrInterpolate(a.balance_trademin || 0)}分 · 会议${ssrInterpolate(a.balance_meetmin || 0)}分 </div>`); |
|||
} else { |
|||
_push(`<!---->`); |
|||
} |
|||
_push(`</td><td class="text-xs text-slate-500" data-v-b47e60f8>${ssrInterpolate(a.remark || "")}</td><td data-v-b47e60f8><div class="flex gap-1 justify-end" data-v-b47e60f8>`); |
|||
if (a.identity === 3) { |
|||
_push(`<button class="btn btn-ghost btn-xs text-emerald-600" data-v-b47e60f8>充值</button>`); |
|||
} else { |
|||
_push(`<!---->`); |
|||
} |
|||
_push(`<button class="btn btn-ghost btn-xs" data-v-b47e60f8>编辑</button><button class="btn btn-ghost btn-xs text-amber-600" data-v-b47e60f8>改密</button><button class="btn btn-ghost btn-xs text-red-500" data-v-b47e60f8>删除</button></div></td></tr>`); |
|||
}); |
|||
_push(`<!--]--></tbody></table></div></div><div style="${ssrRenderStyle(view.value === "form" ? null : { display: "none" })}" data-v-b47e60f8><div class="flex items-center gap-3 mb-5" data-v-b47e60f8><button class="btn btn-ghost btn-sm" data-v-b47e60f8>← 返回列表</button><h2 class="text-lg font-semibold text-slate-800" data-v-b47e60f8>${ssrInterpolate(editId.value ? "编辑账号 #" + editId.value : "新建账号")}</h2></div><div class="bg-white rounded-xl shadow-sm border border-slate-100 p-6 max-w-2xl" data-v-b47e60f8><div class="grid grid-cols-2 gap-3" data-v-b47e60f8><div data-v-b47e60f8><label class="text-xs text-slate-500" data-v-b47e60f8>用户名</label><input${ssrRenderAttr("value", form.username)}${ssrIncludeBooleanAttr(!!editId.value) ? " disabled" : ""} class="input input-bordered input-sm w-full" placeholder="登录用户名" data-v-b47e60f8></div><div style="${ssrRenderStyle(!editId.value ? null : { display: "none" })}" data-v-b47e60f8><label class="text-xs text-slate-500" data-v-b47e60f8>密码</label><input${ssrRenderAttr("value", form.password)} type="password" class="input input-bordered input-sm w-full" placeholder="登录密码" data-v-b47e60f8></div><div data-v-b47e60f8><label class="text-xs text-slate-500" data-v-b47e60f8>角色</label><select class="select select-bordered select-sm w-full" data-v-b47e60f8><option${ssrRenderAttr("value", 2)} data-v-b47e60f8${ssrIncludeBooleanAttr(Array.isArray(form.identity) ? ssrLooseContain(form.identity, 2) : ssrLooseEqual(form.identity, 2)) ? " selected" : ""}>管理员(默认除 SaaS/系统管理外全部)</option><option${ssrRenderAttr("value", 3)} data-v-b47e60f8${ssrIncludeBooleanAttr(Array.isArray(form.identity) ? ssrLooseContain(form.identity, 3) : ssrLooseEqual(form.identity, 3)) ? " selected" : ""}>品牌商(绑定品牌商,见名下全部渠道商)</option><option${ssrRenderAttr("value", 5)} data-v-b47e60f8${ssrIncludeBooleanAttr(Array.isArray(form.identity) ? ssrLooseContain(form.identity, 5) : ssrLooseEqual(form.identity, 5)) ? " selected" : ""}>渠道商(绑定单个渠道商,只见自己数据)</option><option${ssrRenderAttr("value", 4)} data-v-b47e60f8${ssrIncludeBooleanAttr(Array.isArray(form.identity) ? ssrLooseContain(form.identity, 4) : ssrLooseEqual(form.identity, 4)) ? " selected" : ""}>运营(内部,按绑定限制)</option><option${ssrRenderAttr("value", 1)} data-v-b47e60f8${ssrIncludeBooleanAttr(Array.isArray(form.identity) ? ssrLooseContain(form.identity, 1) : ssrLooseEqual(form.identity, 1)) ? " selected" : ""}>超管(全部权限)</option></select></div><div data-v-b47e60f8><label class="text-xs text-slate-500" data-v-b47e60f8>状态</label><select class="select select-bordered select-sm w-full" data-v-b47e60f8><option value="1" data-v-b47e60f8${ssrIncludeBooleanAttr(Array.isArray(form.enabled) ? ssrLooseContain(form.enabled, "1") : ssrLooseEqual(form.enabled, "1")) ? " selected" : ""}>启用</option><option value="0" data-v-b47e60f8${ssrIncludeBooleanAttr(Array.isArray(form.enabled) ? ssrLooseContain(form.enabled, "0") : ssrLooseEqual(form.enabled, "0")) ? " selected" : ""}>停用</option></select></div><div class="col-span-2" data-v-b47e60f8><label class="text-xs text-slate-500" data-v-b47e60f8>备注</label><input${ssrRenderAttr("value", form.remark)} class="input input-bordered input-sm w-full" placeholder="可选" data-v-b47e60f8></div></div><div class="mt-4 border-t border-slate-100 pt-4" style="${ssrRenderStyle(form.identity !== 1 ? null : { display: "none" })}" data-v-b47e60f8><div class="flex items-center justify-between mb-1" data-v-b47e60f8><div class="text-sm font-semibold text-slate-600" data-v-b47e60f8>菜单权限</div><div class="flex gap-1" data-v-b47e60f8><button type="button" class="btn btn-ghost btn-xs" data-v-b47e60f8>管理员默认</button><button type="button" class="btn btn-ghost btn-xs" data-v-b47e60f8>全选</button><button type="button" class="btn btn-ghost btn-xs" data-v-b47e60f8>清空</button></div></div><p class="text-xs text-slate-400 mb-3" data-v-b47e60f8>管理员默认开放除「SaaS 管理 / 系统管理」以外的全部菜单(权限留空时按默认生效);代理/运营需显式勾选。</p><!--[-->`); |
|||
ssrRenderList(unref(MENU_GROUPS), (g) => { |
|||
_push(`<div class="mb-2.5" data-v-b47e60f8><div class="text-xs text-slate-500 mb-1.5" data-v-b47e60f8>${ssrInterpolate(g.label)}`); |
|||
if (g.restricted) { |
|||
_push(`<span class="text-amber-500 ml-1" data-v-b47e60f8>(管理员默认不开放)</span>`); |
|||
} else { |
|||
_push(`<!---->`); |
|||
} |
|||
_push(`</div><div class="flex flex-wrap gap-2" data-v-b47e60f8><!--[-->`); |
|||
ssrRenderList(g.items, (m) => { |
|||
_push(`<label class="chk" data-v-b47e60f8><input${ssrIncludeBooleanAttr(Array.isArray(sel.access) ? ssrLooseContain(sel.access, m.id) : sel.access) ? " checked" : ""} type="checkbox"${ssrRenderAttr("value", m.id)} data-v-b47e60f8>${ssrInterpolate(m.label)}</label>`); |
|||
}); |
|||
_push(`<!--]--></div></div>`); |
|||
}); |
|||
_push(`<!--]--></div><div class="mt-4 border-t border-slate-100 pt-4" style="${ssrRenderStyle(form.identity === 3 || form.identity === 5 ? null : { display: "none" })}" data-v-b47e60f8><div class="text-sm font-semibold text-slate-600 mb-2" data-v-b47e60f8> 归属绑定 <span class="text-xs text-slate-400 font-normal" data-v-b47e60f8>(品牌商账号只绑品牌商;渠道商账号两者都要绑)</span></div><div class="grid grid-cols-2 gap-3" data-v-b47e60f8><div data-v-b47e60f8><label class="text-xs text-slate-500" data-v-b47e60f8>所属品牌商 *</label><select class="select select-bordered select-sm w-full" data-v-b47e60f8><option${ssrRenderAttr("value", 0)} data-v-b47e60f8${ssrIncludeBooleanAttr(Array.isArray(form.brandid) ? ssrLooseContain(form.brandid, 0) : ssrLooseEqual(form.brandid, 0)) ? " selected" : ""}>请选择品牌商</option><!--[-->`); |
|||
ssrRenderList(brands.value, (b) => { |
|||
_push(`<option${ssrRenderAttr("value", b.id)} data-v-b47e60f8${ssrIncludeBooleanAttr(Array.isArray(form.brandid) ? ssrLooseContain(form.brandid, b.id) : ssrLooseEqual(form.brandid, b.id)) ? " selected" : ""}>${ssrInterpolate(b.brand)}</option>`); |
|||
}); |
|||
_push(`<!--]--></select></div><div style="${ssrRenderStyle(form.identity === 5 ? null : { display: "none" })}" data-v-b47e60f8><label class="text-xs text-slate-500" data-v-b47e60f8>所属渠道商 *</label><select class="select select-bordered select-sm w-full"${ssrIncludeBooleanAttr(!accountChannelOptions.value.length) ? " disabled" : ""} data-v-b47e60f8><option value="" data-v-b47e60f8${ssrIncludeBooleanAttr(Array.isArray(form.channelid) ? ssrLooseContain(form.channelid, "") : ssrLooseEqual(form.channelid, "")) ? " selected" : ""}>${ssrInterpolate(form.brandid ? accountChannelOptions.value.length ? "请选择渠道商" : "该品牌商暂无渠道商" : "请先选择品牌商")}</option><!--[-->`); |
|||
ssrRenderList(accountChannelOptions.value, (ch) => { |
|||
_push(`<option${ssrRenderAttr("value", ch.id)} data-v-b47e60f8${ssrIncludeBooleanAttr(Array.isArray(form.channelid) ? ssrLooseContain(form.channelid, ch.id) : ssrLooseEqual(form.channelid, ch.id)) ? " selected" : ""}>${ssrInterpolate(ch.name)} (${ssrInterpolate(ch.id)})</option>`); |
|||
}); |
|||
_push(`<!--]--></select></div></div><p class="text-xs text-slate-400 mt-2" data-v-b47e60f8> 数据隔离由后端强制:品牌商账号只能看到本品牌商及其名下渠道商的数据,渠道商账号只能看到自己渠道的数据。 </p></div><div class="mt-4 border-t border-slate-100 pt-4" style="${ssrRenderStyle(form.identity === 3 || form.identity === 4 ? null : { display: "none" })}" data-v-b47e60f8><div class="text-sm font-semibold text-slate-600 mb-2" data-v-b47e60f8>作用域绑定 <span class="text-xs text-slate-400 font-normal" data-v-b47e60f8>(代理/运营生效;限制仪表盘数据范围)</span></div><div class="mb-3" data-v-b47e60f8><div class="text-xs text-slate-500 mb-1.5" data-v-b47e60f8>绑定应用 <span class="text-slate-300" data-v-b47e60f8>(仪表盘只显示这些应用数据;不勾=不限)</span></div><div class="flex flex-wrap gap-2" data-v-b47e60f8>`); |
|||
if (appNames.value.length) { |
|||
_push(`<!--[-->`); |
|||
ssrRenderList(appNames.value, (n) => { |
|||
_push(`<label class="chk" data-v-b47e60f8><input${ssrIncludeBooleanAttr(Array.isArray(sel.apps) ? ssrLooseContain(sel.apps, n) : sel.apps) ? " checked" : ""} type="checkbox"${ssrRenderAttr("value", n)} data-v-b47e60f8>${ssrInterpolate(n)}</label>`); |
|||
}); |
|||
_push(`<!--]-->`); |
|||
} else { |
|||
_push(`<span class="text-xs text-slate-300" data-v-b47e60f8>无注册应用</span>`); |
|||
} |
|||
_push(`</div></div><div class="mb-3" data-v-b47e60f8><div class="text-xs text-slate-500 mb-1.5" data-v-b47e60f8>绑定区域 <span class="text-slate-300" data-v-b47e60f8>(不勾=不限)</span></div><div class="flex flex-wrap gap-2" data-v-b47e60f8><!--[-->`); |
|||
ssrRenderList(unref(REGION_OPTIONS), (r) => { |
|||
_push(`<label class="chk" data-v-b47e60f8><input${ssrIncludeBooleanAttr(Array.isArray(sel.regions) ? ssrLooseContain(sel.regions, r.value) : sel.regions) ? " checked" : ""} type="checkbox"${ssrRenderAttr("value", r.value)} data-v-b47e60f8>${ssrInterpolate(r.label)}</label>`); |
|||
}); |
|||
_push(`<!--]--></div></div><div data-v-b47e60f8><div class="text-xs text-slate-500 mb-1.5" data-v-b47e60f8>绑定产品 <span class="text-slate-300" data-v-b47e60f8>(按厂家分组;仪表盘只显示这些产品数据;不勾=不限)</span></div><div class="max-h-56 overflow-y-auto pr-1 border border-slate-100 rounded-lg p-2" data-v-b47e60f8>`); |
|||
if (prodLoading.value) { |
|||
_push(`<span class="text-xs text-slate-300" data-v-b47e60f8>加载产品中...</span>`); |
|||
} else if (!productGroups.value.length) { |
|||
_push(`<span class="text-xs text-slate-300" data-v-b47e60f8>无产品</span>`); |
|||
} else { |
|||
_push(`<!--[-->`); |
|||
ssrRenderList(productGroups.value, (g) => { |
|||
_push(`<div class="mb-2 last:mb-0" data-v-b47e60f8><div class="text-[11px] font-semibold text-slate-500 mb-1 sticky top-0 bg-white py-0.5" data-v-b47e60f8>🏭 ${ssrInterpolate(g.label)}</div><div class="flex flex-wrap gap-2" data-v-b47e60f8><!--[-->`); |
|||
ssrRenderList(g.products, (p) => { |
|||
_push(`<label class="chk" data-v-b47e60f8><input${ssrIncludeBooleanAttr(Array.isArray(sel.products) ? ssrLooseContain(sel.products, String(p.id)) : sel.products) ? " checked" : ""} type="checkbox"${ssrRenderAttr("value", String(p.id))} data-v-b47e60f8>${ssrInterpolate((p.devicename || "产品") + " #" + p.id)}</label>`); |
|||
}); |
|||
_push(`<!--]--></div></div>`); |
|||
}); |
|||
_push(`<!--]-->`); |
|||
} |
|||
_push(`</div></div></div><div class="flex gap-3 justify-end mt-6" data-v-b47e60f8><button class="btn btn-ghost btn-sm" data-v-b47e60f8>取消</button><button class="btn btn-primary btn-sm text-white"${ssrIncludeBooleanAttr(submitting.value) ? " disabled" : ""} data-v-b47e60f8>保存</button></div></div></div><dialog class="modal" data-v-b47e60f8><div class="modal-box max-w-md" data-v-b47e60f8><h3 class="font-bold text-lg mb-1" data-v-b47e60f8>充值 / 调整资源点</h3><p class="text-xs text-slate-400 mb-3" data-v-b47e60f8>代理:<span class="font-medium text-slate-600" data-v-b47e60f8>${ssrInterpolate(topup.name)}</span>。填增量(可填负数下调),当前余额:<span class="text-emerald-600" data-v-b47e60f8>${ssrInterpolate(topup.cur)}</span></p><div class="grid grid-cols-3 gap-3" data-v-b47e60f8><div data-v-b47e60f8><label class="text-xs text-slate-500" data-v-b47e60f8>VIP天数</label><input${ssrRenderAttr("value", topup.vipday)} type="number" class="input input-bordered input-sm w-full" data-v-b47e60f8></div><div data-v-b47e60f8><label class="text-xs text-slate-500" data-v-b47e60f8>翻译分钟</label><input${ssrRenderAttr("value", topup.trademin)} type="number" class="input input-bordered input-sm w-full" data-v-b47e60f8></div><div data-v-b47e60f8><label class="text-xs text-slate-500" data-v-b47e60f8>会议分钟</label><input${ssrRenderAttr("value", topup.meetmin)} type="number" class="input input-bordered input-sm w-full" data-v-b47e60f8></div></div><div class="modal-action" data-v-b47e60f8><button class="btn btn-ghost btn-sm" data-v-b47e60f8>取消</button><button class="btn btn-primary btn-sm text-white" data-v-b47e60f8>确认</button></div></div><form method="dialog" class="modal-backdrop" data-v-b47e60f8><button data-v-b47e60f8>close</button></form></dialog></div>`); |
|||
}; |
|||
} |
|||
}); |
|||
const _sfc_setup = _sfc_main.setup; |
|||
_sfc_main.setup = (props, ctx) => { |
|||
const ssrContext = useSSRContext(); |
|||
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/accounts.vue"); |
|||
return _sfc_setup ? _sfc_setup(props, ctx) : void 0; |
|||
}; |
|||
const accounts = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-b47e60f8"]]); |
|||
|
|||
export { accounts as default }; |
|||
//# sourceMappingURL=accounts-CampayFP.mjs.map
|
|||
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue