修复了2个bug
This commit is contained in:
1 parent
ce8372e878
commit
2a64dc7395
64 files changed
+1050
-39
No files matched your search
@@ -0,0 +1 @@
|
||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[492],{1409:(e,t,l)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/_not-found/page",function(){return l(9520)}])},4585:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"styles",{enumerable:!0,get:function(){return l}});let l={error:{fontFamily:'system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"',height:"100vh",textAlign:"center",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center"},desc:{display:"inline-block"},h1:{display:"inline-block",margin:"0 20px 0 0",padding:"0 23px 0 0",fontSize:24,fontWeight:500,verticalAlign:"top",lineHeight:"49px"},h2:{fontSize:14,fontWeight:400,lineHeight:"49px",margin:0}};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},8886:(e,t,l)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"HTTPAccessErrorFallback",{enumerable:!0,get:function(){return o}});let r=l(5155),n=l(4585);function o(e){let{status:t,message:l}=e;return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("title",{children:t+": "+l}),(0,r.jsx)("div",{style:n.styles.error,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("style",{dangerouslySetInnerHTML:{__html:"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}),(0,r.jsx)("h1",{className:"next-error-h1",style:n.styles.h1,children:t}),(0,r.jsx)("div",{style:n.styles.desc,children:(0,r.jsx)("h2",{style:n.styles.h2,children:l})})]})})]})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},9520:(e,t,l)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return o}});let r=l(5155),n=l(8886),o=function(){return(0,r.jsx)("html",{children:(0,r.jsx)("body",{children:(0,r.jsx)(n.HTTPAccessErrorFallback,{status:404,message:"This page could not be found."})})})};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)}},e=>{e.O(0,[441,255,358],()=>e(e.s=1409)),_N_E=e.O()}]);
|
||||
@@ -0,0 +1 @@
|
||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[339],{63:(e,a,t)=>{"use strict";var n=t(7260);t.o(n,"usePathname")&&t.d(a,{usePathname:function(){return n.usePathname}}),t.o(n,"useRouter")&&t.d(a,{useRouter:function(){return n.useRouter}})},525:(e,a,t)=>{Promise.resolve().then(t.bind(t,6006))},1360:(e,a,t)=>{"use strict";t.d(a,{A:()=>n});let n=(0,t(1847).A)("Trash2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]])},1847:(e,a,t)=>{"use strict";t.d(a,{A:()=>l});var n=t(2115);let s=function(){for(var e=arguments.length,a=Array(e),t=0;t<e;t++)a[t]=arguments[t];return a.filter((e,a,t)=>!!e&&""!==e.trim()&&t.indexOf(e)===a).join(" ").trim()};var i={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let r=(0,n.forwardRef)((e,a)=>{let{color:t="currentColor",size:r=24,strokeWidth:l=2,absoluteStrokeWidth:o,className:c="",children:u,iconNode:d,...h}=e;return(0,n.createElement)("svg",{ref:a,...i,width:r,height:r,stroke:t,strokeWidth:o?24*Number(l)/Number(r):l,className:s("lucide",c),...h},[...d.map(e=>{let[a,t]=e;return(0,n.createElement)(a,t)}),...Array.isArray(u)?u:[u]])}),l=(e,a)=>{let t=(0,n.forwardRef)((t,i)=>{let{className:l,...o}=t;return(0,n.createElement)(r,{ref:i,iconNode:a,className:s("lucide-".concat(e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()),l),...o})});return t.displayName="".concat(e),t}},4577:(e,a,t)=>{"use strict";t.d(a,{BrowserAuthGuard:()=>u,BrowserAuthProvider:()=>o,ClientRedirect:()=>d,a:()=>c});var n=t(5155),s=t(2115),i=t(63),r=t(6660);let l=(0,s.createContext)(null);function o(e){let{children:a}=e,[t,i]=(0,s.useState)(null),[o,c]=(0,s.useState)("loading"),[u,d]=(0,s.useState)(null),h=(0,s.useCallback)(async e=>{try{let a=await (0,r.uK)(e);i(a),c("ready"),d(null)}catch(e){if(e instanceof DOMException&&"AbortError"===e.name)return;c("error"),d(e instanceof Error?e.message:"无法读取认证状态")}},[]);(0,s.useEffect)(()=>{let e=new AbortController;return h(e.signal),()=>e.abort()},[h]);let m=(0,s.useMemo)(()=>{var e,a;let n=(null==t?void 0:t.user)||null,s=null==(e=null==t?void 0:t.authRequired)||e,i=!s||(null==n?void 0:n.role)==="super_admin",r=i||(null==n?void 0:n.role)==="organization_admin";return{status:o,user:n,authMode:(null==t?void 0:t.authMode)||null,authRequired:s,authConfigured:null!=(a=null==t?void 0:t.authConfigured)&&a,isAdmin:r,isSuperAdmin:i,error:u,refresh:()=>h()}},[u,h,t,o]);return(0,n.jsx)(l.Provider,{value:m,children:a})}function c(){let e=(0,s.useContext)(l);if(!e)throw Error("useBrowserAuth must be used inside BrowserAuthProvider");return e}function u(e){let{children:a,role:t="user"}=e,l=c(),o=(0,i.usePathname)(),u=(0,i.useRouter)(),d="ready"===l.status&&l.authRequired&&!l.user;return((0,s.useEffect)(()=>{if(d){let e=(0,r.M6)(window.location,o||"/create");u.replace("/auth/login?next=".concat(encodeURIComponent(e)))}},[d,o,u]),"loading"===l.status||d)?(0,n.jsx)(h,{message:"正在确认登录状态…"}):"error"===l.status?(0,n.jsx)(h,{message:l.error||"无法读取认证状态",actionLabel:"重试",onAction:()=>void l.refresh()}):("admin"!==t||l.isAdmin)&&("super"!==t||l.isSuperAdmin)?(0,n.jsx)(n.Fragment,{children:a}):(0,n.jsx)(h,{message:"当前账号无权访问此页面。"})}function d(e){let{to:a,forwardNext:t=!1}=e;return(0,s.useEffect)(()=>{let e=t?new URLSearchParams(window.location.search).get("next"):null,n=e?"".concat(a,"?next=").concat(encodeURIComponent(e)):a;window.location.replace(n)},[t,a]),(0,n.jsx)(h,{message:"正在跳转…"})}function h(e){let{message:a,actionLabel:t,onAction:s}=e;return(0,n.jsxs)("section",{className:"panel",children:[(0,n.jsx)("p",{className:"muted",children:a}),t&&s?(0,n.jsx)("button",{className:"button",type:"button",onClick:s,children:t}):null]})}},5299:(e,a,t)=>{"use strict";t.d(a,{A:()=>n});let n=(0,t(1847).A)("LoaderCircle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]])},6006:(e,a,t)=>{"use strict";t.r(a),t.d(a,{default:()=>g});var n=t(5155),s=t(2115),i=t(6907),r=t(1847);let l=(0,r.A)("UserPlus",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["line",{x1:"19",x2:"19",y1:"8",y2:"14",key:"1bvyxn"}],["line",{x1:"22",x2:"16",y1:"11",y2:"11",key:"1shjgl"}]]);var o=t(6191),c=t(8514),u=t(9559),d=t(1360);let h=(0,r.A)("KeyRound",[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]]);var m=t(5299);function p(){let[e,a]=(0,s.useState)(""),[t,i]=(0,s.useState)(""),[r,l]=(0,s.useStateLine truncated
|
||||
@@ -0,0 +1 @@
|
||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[321,335,830,974],{63:(e,t,r)=>{"use strict";var n=r(7260);r.o(n,"usePathname")&&r.d(t,{usePathname:function(){return n.usePathname}}),r.o(n,"useRouter")&&r.d(t,{useRouter:function(){return n.useRouter}})},4577:(e,t,r)=>{"use strict";r.d(t,{BrowserAuthGuard:()=>c,BrowserAuthProvider:()=>s,ClientRedirect:()=>h,a:()=>l});var n=r(5155),a=r(2115),u=r(63),o=r(6660);let i=(0,a.createContext)(null);function s(e){let{children:t}=e,[r,u]=(0,a.useState)(null),[s,l]=(0,a.useState)("loading"),[c,h]=(0,a.useState)(null),d=(0,a.useCallback)(async e=>{try{let t=await (0,o.uK)(e);u(t),l("ready"),h(null)}catch(e){if(e instanceof DOMException&&"AbortError"===e.name)return;l("error"),h(e instanceof Error?e.message:"无法读取认证状态")}},[]);(0,a.useEffect)(()=>{let e=new AbortController;return d(e.signal),()=>e.abort()},[d]);let f=(0,a.useMemo)(()=>{var e,t;let n=(null==r?void 0:r.user)||null,a=null==(e=null==r?void 0:r.authRequired)||e,u=!a||(null==n?void 0:n.role)==="super_admin",o=u||(null==n?void 0:n.role)==="organization_admin";return{status:s,user:n,authMode:(null==r?void 0:r.authMode)||null,authRequired:a,authConfigured:null!=(t=null==r?void 0:r.authConfigured)&&t,isAdmin:o,isSuperAdmin:u,error:c,refresh:()=>d()}},[c,d,r,s]);return(0,n.jsx)(i.Provider,{value:f,children:t})}function l(){let e=(0,a.useContext)(i);if(!e)throw Error("useBrowserAuth must be used inside BrowserAuthProvider");return e}function c(e){let{children:t,role:r="user"}=e,i=l(),s=(0,u.usePathname)(),c=(0,u.useRouter)(),h="ready"===i.status&&i.authRequired&&!i.user;return((0,a.useEffect)(()=>{if(h){let e=(0,o.M6)(window.location,s||"/create");c.replace("/auth/login?next=".concat(encodeURIComponent(e)))}},[h,s,c]),"loading"===i.status||h)?(0,n.jsx)(d,{message:"正在确认登录状态…"}):"error"===i.status?(0,n.jsx)(d,{message:i.error||"无法读取认证状态",actionLabel:"重试",onAction:()=>void i.refresh()}):("admin"!==r||i.isAdmin)&&("super"!==r||i.isSuperAdmin)?(0,n.jsx)(n.Fragment,{children:t}):(0,n.jsx)(d,{message:"当前账号无权访问此页面。"})}function h(e){let{to:t,forwardNext:r=!1}=e;return(0,a.useEffect)(()=>{let e=r?new URLSearchParams(window.location.search).get("next"):null,n=e?"".concat(t,"?next=").concat(encodeURIComponent(e)):t;window.location.replace(n)},[r,t]),(0,n.jsx)(d,{message:"正在跳转…"})}function d(e){let{message:t,actionLabel:r,onAction:a}=e;return(0,n.jsxs)("section",{className:"panel",children:[(0,n.jsx)("p",{className:"muted",children:t}),r&&a?(0,n.jsx)("button",{className:"button",type:"button",onClick:a,children:r}):null]})}},6660:(e,t,r)=>{"use strict";async function n(e){let t=await fetch("/api/auth/me",{method:"GET",cache:"no-store",credentials:"same-origin",headers:{Accept:"application/json"},signal:e});if(!t.ok)throw Error("认证状态请求失败(".concat(t.status,")"));var r,n=await t.json();if(!o(n)||"boolean"!=typeof n.authenticated||"boolean"!=typeof n.authRequired||"boolean"!=typeof n.authConfigured)throw Error("认证状态响应格式无效");if(!n.authenticated){if(null!==n.authMode||null!==n.user)throw Error("认证状态响应格式无效");return{authenticated:!1,authRequired:n.authRequired,authConfigured:n.authConfigured,authMode:null,user:null}}if(!n.authConfigured||"user"!==n.authMode&&"admin"!==n.authMode||!(o(r=n.user)&&"string"==typeof r.id&&r.id.length>0&&"string"==typeof r.subject&&r.subject===r.id&&"string"==typeof r.displayName&&"string"==typeof r.clientId&&("user"===r.role||"organization_admin"===r.role||"super_admin"===r.role)&&"active"===r.status&&("super_admin"===r.role||"string"==typeof r.organizationId&&r.organizationId.length>0)&&Array.isArray(r.authorities)&&r.authorities.every(e=>"string"==typeof e)&&Array.isArray(r.scope)&&r.scope.every(e=>"string"==typeof e)))throw Error("认证用户响应格式无效");let a="user"===n.user.role?"user":"admin";if(n.authMode!==a)throw Error("认证用户响应格式无效");return{authenticated:!0,authRequired:n.authRequired,authConfigured:n.authConfigured,authMode:n.authMode,user:n.user}}function a(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/create";if(!e||!e.startsWith("/")||e.startsWith("//")||e.includes("\\"))return t;try{let r="http://zhinian.local",n=new URL(e,r);if(n.origin!==r)return t;let a="".concat(n.pathname).concat(n.search).concat(n.hash);if(n.pathname.startsWith("/api/auth")||n.pathname.startsWith("/auth/login")||n.pathname.startsWith("/auth/admin-login"))return t;return a}catch(e){return t}}function u(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/create";return a("".concat(e.pathname).concat(e.search).concat(e.hash),t)}function o(e){return"object"==typeof e&&null!==e}r.d(t,{M6:()=>u,uK:()=>n,z3:()=>a})},9656:(e,t,r)=>{Promise.resolve().then(r.bind(r,4577))}},e=>{e.O(0,[441,255,358],()=>e(e.s=9656)),_N_E=e.O()}]);
|
||||
@@ -0,0 +1 @@
|
||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[321,335,830,974],{63:(e,t,r)=>{"use strict";var n=r(7260);r.o(n,"usePathname")&&r.d(t,{usePathname:function(){return n.usePathname}}),r.o(n,"useRouter")&&r.d(t,{useRouter:function(){return n.useRouter}})},4577:(e,t,r)=>{"use strict";r.d(t,{BrowserAuthGuard:()=>c,BrowserAuthProvider:()=>s,ClientRedirect:()=>h,a:()=>l});var n=r(5155),a=r(2115),u=r(63),o=r(6660);let i=(0,a.createContext)(null);function s(e){let{children:t}=e,[r,u]=(0,a.useState)(null),[s,l]=(0,a.useState)("loading"),[c,h]=(0,a.useState)(null),d=(0,a.useCallback)(async e=>{try{let t=await (0,o.uK)(e);u(t),l("ready"),h(null)}catch(e){if(e instanceof DOMException&&"AbortError"===e.name)return;l("error"),h(e instanceof Error?e.message:"无法读取认证状态")}},[]);(0,a.useEffect)(()=>{let e=new AbortController;return d(e.signal),()=>e.abort()},[d]);let f=(0,a.useMemo)(()=>{var e,t;let n=(null==r?void 0:r.user)||null,a=null==(e=null==r?void 0:r.authRequired)||e,u=!a||(null==n?void 0:n.role)==="super_admin",o=u||(null==n?void 0:n.role)==="organization_admin";return{status:s,user:n,authMode:(null==r?void 0:r.authMode)||null,authRequired:a,authConfigured:null!=(t=null==r?void 0:r.authConfigured)&&t,isAdmin:o,isSuperAdmin:u,error:c,refresh:()=>d()}},[c,d,r,s]);return(0,n.jsx)(i.Provider,{value:f,children:t})}function l(){let e=(0,a.useContext)(i);if(!e)throw Error("useBrowserAuth must be used inside BrowserAuthProvider");return e}function c(e){let{children:t,role:r="user"}=e,i=l(),s=(0,u.usePathname)(),c=(0,u.useRouter)(),h="ready"===i.status&&i.authRequired&&!i.user;return((0,a.useEffect)(()=>{if(h){let e=(0,o.M6)(window.location,s||"/create");c.replace("/auth/login?next=".concat(encodeURIComponent(e)))}},[h,s,c]),"loading"===i.status||h)?(0,n.jsx)(d,{message:"正在确认登录状态…"}):"error"===i.status?(0,n.jsx)(d,{message:i.error||"无法读取认证状态",actionLabel:"重试",onAction:()=>void i.refresh()}):("admin"!==r||i.isAdmin)&&("super"!==r||i.isSuperAdmin)?(0,n.jsx)(n.Fragment,{children:t}):(0,n.jsx)(d,{message:"当前账号无权访问此页面。"})}function h(e){let{to:t,forwardNext:r=!1}=e;return(0,a.useEffect)(()=>{let e=r?new URLSearchParams(window.location.search).get("next"):null,n=e?"".concat(t,"?next=").concat(encodeURIComponent(e)):t;window.location.replace(n)},[r,t]),(0,n.jsx)(d,{message:"正在跳转…"})}function d(e){let{message:t,actionLabel:r,onAction:a}=e;return(0,n.jsxs)("section",{className:"panel",children:[(0,n.jsx)("p",{className:"muted",children:t}),r&&a?(0,n.jsx)("button",{className:"button",type:"button",onClick:a,children:r}):null]})}},6660:(e,t,r)=>{"use strict";async function n(e){let t=await fetch("/api/auth/me",{method:"GET",cache:"no-store",credentials:"same-origin",headers:{Accept:"application/json"},signal:e});if(!t.ok)throw Error("认证状态请求失败(".concat(t.status,")"));var r,n=await t.json();if(!o(n)||"boolean"!=typeof n.authenticated||"boolean"!=typeof n.authRequired||"boolean"!=typeof n.authConfigured)throw Error("认证状态响应格式无效");if(!n.authenticated){if(null!==n.authMode||null!==n.user)throw Error("认证状态响应格式无效");return{authenticated:!1,authRequired:n.authRequired,authConfigured:n.authConfigured,authMode:null,user:null}}if(!n.authConfigured||"user"!==n.authMode&&"admin"!==n.authMode||!(o(r=n.user)&&"string"==typeof r.id&&r.id.length>0&&"string"==typeof r.subject&&r.subject===r.id&&"string"==typeof r.displayName&&"string"==typeof r.clientId&&("user"===r.role||"organization_admin"===r.role||"super_admin"===r.role)&&"active"===r.status&&("super_admin"===r.role||"string"==typeof r.organizationId&&r.organizationId.length>0)&&Array.isArray(r.authorities)&&r.authorities.every(e=>"string"==typeof e)&&Array.isArray(r.scope)&&r.scope.every(e=>"string"==typeof e)))throw Error("认证用户响应格式无效");let a="user"===n.user.role?"user":"admin";if(n.authMode!==a)throw Error("认证用户响应格式无效");return{authenticated:!0,authRequired:n.authRequired,authConfigured:n.authConfigured,authMode:n.authMode,user:n.user}}function a(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/create";if(!e||!e.startsWith("/")||e.startsWith("//")||e.includes("\\"))return t;try{let r="http://zhinian.local",n=new URL(e,r);if(n.origin!==r)return t;let a="".concat(n.pathname).concat(n.search).concat(n.hash);if(n.pathname.startsWith("/api/auth")||n.pathname.startsWith("/auth/login")||n.pathname.startsWith("/auth/admin-login"))return t;return a}catch(e){return t}}function u(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/create";return a("".concat(e.pathname).concat(e.search).concat(e.hash),t)}function o(e){return"object"==typeof e&&null!==e}r.d(t,{M6:()=>u,uK:()=>n,z3:()=>a})},9656:(e,t,r)=>{Promise.resolve().then(r.bind(r,4577))}},e=>{e.O(0,[441,255,358],()=>e(e.s=9656)),_N_E=e.O()}]);
|
||||
@@ -0,0 +1 @@
|
||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[859],{820:(e,t,a)=>{Promise.resolve().then(a.bind(a,2985))},2985:(e,t,a)=>{"use strict";a.d(t,{AuthLoginPanel:()=>d});var r=a(5155),n=a(2115),s=a(5239),o=a(5299),i=a(9865),u=a(7612),l=a(4577),c=a(6660);function d(e){let{title:t="账户登录",submitLabel:a="登录"}=e,d=(0,l.a)(),[p,m]=(0,n.useState)(""),[g,y]=(0,n.useState)(""),[w,v]=(0,n.useState)(!1),[x,j]=(0,n.useState)(null),[b,C]=(0,n.useState)("/create"),[A,E]=(0,n.useState)(null),N=(0,n.useRef)(null),R=(0,n.useRef)(null),S="ready"===d.status&&d.authConfigured,M="ready"===d.status&&d.authRequired&&!d.authConfigured;async function _(e){if(e.preventDefault(),!S||w)return;let t=new FormData(e.currentTarget),a=h(t.get("phone")),r=h(t.get("password"));if(!a||!r)return void j("手机号和密码不能为空。");v(!0),j(null);try{let e=await fetch("/api/auth/password",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({phone:a,password:r,next:b})}),t=await e.json().catch(()=>({}));if(!e.ok)throw Error(t.error||"登录失败");window.location.assign((0,c.z3)(t.redirectTo,b))}catch(e){j(e instanceof Error?e.message:String(e))}finally{v(!1)}}return(0,n.useEffect)(()=>(0,u.It)(N,e=>(0,u.xr)(e)),[]),(0,n.useEffect)(()=>{let e=new URLSearchParams(window.location.search);C((0,c.z3)(e.get("next")));let t=e.get("error");t?E(f[t]||"登录失败,请重新登录。"):"1"===e.get("loggedOut")&&E("已退出登录。")},[]),(0,n.useEffect)(()=>{"ready"===d.status&&d.user&&window.location.replace(b)},[d.status,d.user,b]),(0,n.useEffect)(()=>{(0,u.Js)(R.current)},[x,A,M]),(0,r.jsxs)("div",{className:"auth-page",ref:N,children:[(0,r.jsxs)("section",{className:"auth-brand-panel","aria-label":"智念AIGC平台","data-animate":!0,children:[(0,r.jsx)(s.default,{className:"auth-brand-logo",src:"/logo/zhinian-logo.png",alt:"",width:168,height:38,priority:!0}),(0,r.jsx)("h1",{children:"智念AIGC平台"})]}),(0,r.jsxs)("section",{className:"panel auth-panel","data-animate":!0,children:[(0,r.jsx)("h2",{children:t}),A||M||"error"===d.status||x?(0,r.jsxs)("div",{ref:R,children:[A?(0,r.jsx)("div",{className:"callout",role:"alert",children:A}):null,M?(0,r.jsx)("div",{className:"callout",role:"alert",children:"账号认证配置不完整,请联系管理员。"}):null,"error"===d.status?(0,r.jsx)("div",{className:"callout",role:"alert",children:d.error||"无法读取认证状态。"}):null,x?(0,r.jsx)("div",{className:"callout",role:"alert",children:x}):null]}):null,(0,r.jsxs)("form",{className:"auth-password-form",onSubmit:_,children:[(0,r.jsxs)("label",{className:"field","data-animate":!0,children:[(0,r.jsx)("span",{children:"手机号"}),(0,r.jsx)("input",{autoComplete:"username",inputMode:"tel",name:"phone",required:!0,value:p,onChange:e=>m(e.target.value),disabled:!S||w,placeholder:"请输入手机号"})]}),(0,r.jsxs)("label",{className:"field","data-animate":!0,children:[(0,r.jsx)("span",{children:"密码"}),(0,r.jsx)("input",{autoComplete:"current-password",name:"password",required:!0,type:"password",value:g,onChange:e=>y(e.target.value),disabled:!S||w,placeholder:"请输入密码"})]}),(0,r.jsxs)("button",{className:"button primary auth-submit",type:"submit",disabled:!S||w,"data-animate":!0,children:[w?(0,r.jsx)(o.A,{className:"spin",size:18}):(0,r.jsx)(i.A,{size:18}),a]})]})]})]})}function h(e){return"string"==typeof e?e.trim():""}let f={auth_not_configured:"账号认证配置不完整,请联系管理员。",callback_failed:"登录失败,请重新登录。",state_invalid:"登录状态已失效,请重新登录。"}},4577:(e,t,a)=>{"use strict";a.d(t,{BrowserAuthGuard:()=>c,BrowserAuthProvider:()=>u,ClientRedirect:()=>d,a:()=>l});var r=a(5155),n=a(2115),s=a(63),o=a(6660);let i=(0,n.createContext)(null);function u(e){let{children:t}=e,[a,s]=(0,n.useState)(null),[u,l]=(0,n.useState)("loading"),[c,d]=(0,n.useState)(null),h=(0,n.useCallback)(async e=>{try{let t=await (0,o.uK)(e);s(t),l("ready"),d(null)}catch(e){if(e instanceof DOMException&&"AbortError"===e.name)return;l("error"),d(e instanceof Error?e.message:"无法读取认证状态")}},[]);(0,n.useEffect)(()=>{let e=new AbortController;return h(e.signal),()=>e.abort()},[h]);let f=(0,n.useMemo)(()=>{var e,t;let r=(null==a?void 0:a.user)||null,n=null==(e=null==a?void 0:a.authRequired)||e,s=!n||(null==r?void 0:r.role)==="super_admin",o=s||(null==r?void 0:r.role)==="organization_admin";return{status:u,user:r,authMode:(null==a?void 0:a.authMode)||null,authRequired:n,authConfigured:null!=(t=null==a?void 0:a.authConfigured)&&t,isAdmin:o,isSuperAdmin:s,error:c,refresh:()=>h()}},[c,h,a,u]);return(0,r.jsx)(i.Provider,{value:f,children:t})}function l(){let e=(0,n.useContext)(i);if(!e)throw Error("useBrowserAuth must be used inside BrowserAuthProvider");return e}function c(e){let{children:t,role:a="user"}=e,i=l(),u=(0,s.usePathname)(),c=(0,s.useRouter)(),d="ready"===i.status&&i.authRequired&&!i.user;return((0,n.useEffect)(()=>{if(d){let e=(0,o.M6)(Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[19],{1085:(e,r,s)=>{Promise.resolve().then(s.bind(s,1371))},1371:(e,r,s)=>{"use strict";s.r(r),s.d(r,{default:()=>i});var l=s(5155),n=s(2115);function i(e){let{reset:r}=e;return(0,n.useEffect)(()=>{},[]),(0,l.jsx)("main",{className:"billing-route-error",children:(0,l.jsxs)("div",{className:"billing-route-error-card",children:[(0,l.jsx)("span",{className:"billing-route-error-kicker",children:"计费中心"}),(0,l.jsx)("h1",{children:"计费服务暂时不可用"}),(0,l.jsx)("p",{children:"请先刷新页面。如果问题持续,请检查 Go API 状态和服务端日志。"}),(0,l.jsx)("button",{type:"button",onClick:()=>r(),children:"重新加载"})]})})}}},e=>{e.O(0,[441,255,358],()=>e(e.s=1085)),_N_E=e.O()}]);
|
||||
@@ -0,0 +1 @@
|
||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[522],{2885:(e,n,i)=>{"use strict";i.r(n),i.d(n,{default:()=>em});var l=i(5155),a=i(2115),t=i(5299),s=i(9559),r=i(5468),c=i(1847);let d=(0,c.A)("UsersRound",[["path",{d:"M18 21a8 8 0 0 0-16 0",key:"3ypg7q"}],["circle",{cx:"10",cy:"8",r:"5",key:"o932ke"}],["path",{d:"M22 20c0-3.37-2-6.5-4-8a5 5 0 0 0-.45-8.3",key:"10s06x"}]]),o=(0,c.A)("Banknote",[["rect",{width:"20",height:"12",x:"2",y:"6",rx:"2",key:"9lu3g6"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}],["path",{d:"M6 12h.01M18 12h.01",key:"113zkx"}]]);var u=i(6191),h=i(8514);let g=(0,c.A)("Landmark",[["line",{x1:"3",x2:"21",y1:"22",y2:"22",key:"j8o0r"}],["line",{x1:"6",x2:"6",y1:"18",y2:"11",key:"10tf0k"}],["line",{x1:"10",x2:"10",y1:"18",y2:"11",key:"54lgf6"}],["line",{x1:"14",x2:"14",y1:"18",y2:"11",key:"380y"}],["line",{x1:"18",x2:"18",y1:"18",y2:"11",key:"1kevvc"}],["polygon",{points:"12 2 20 7 4 7",key:"jkujk7"}]]);var m=i(5917),b=i(4274);let x=(0,c.A)("ArrowUpRight",[["path",{d:"M7 7h10v10",key:"1tivn9"}],["path",{d:"M7 17 17 7",key:"1vkiza"}]]);var p=i(9408),j=i(7937);let v=(0,c.A)("ReceiptText",[["path",{d:"M4 2v20l2-1 2 1 2-1 2 1 2-1 2 1 2-1 2 1V2l-2 1-2-1-2 1-2-1-2 1-2-1-2 1Z",key:"q3az6g"}],["path",{d:"M14 8H8",key:"1l3xfs"}],["path",{d:"M16 12H8",key:"1fr5h0"}],["path",{d:"M13 16H8",key:"wsln4y"}]]);var f=i(5229);let y=(0,c.A)("Settings2",[["path",{d:"M20 7h-9",key:"3s1dr2"}],["path",{d:"M14 17H5",key:"gfn3mx"}],["circle",{cx:"17",cy:"17",r:"3",key:"18b49y"}],["circle",{cx:"7",cy:"7",r:"3",key:"dfmy0x"}]]);var N=i(4166);function k(e,n,i){throw Error("".concat(e,"数据格式错误:").concat(n).concat("响应"===n?"":" ","必须是").concat(i,"。"))}function w(e,n,i){return("object"!=typeof e||null===e||Array.isArray(e))&&k(i,n,"对象"),e}function A(e,n,i){let l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:n;return Array.isArray(e[n])||k(i,l,"数组"),e[n]}function M(e,n,i,l){"string"!=typeof e[n]&&k(i,l,"字符串")}function F(e,n,i,l){void 0!==e[n]&&null!==e[n]&&"string"!=typeof e[n]&&k(i,l,"字符串")}function z(e,n,i,l){"number"==typeof e[n]&&Number.isFinite(e[n])||k(i,l,"有限数字")}function C(e,n,i,l){"boolean"!=typeof e[n]&&k(i,l,"布尔值")}function E(e,n,i){["string","number","boolean"].includes(typeof e)||k(n,i,"字符串、数字或布尔值"),"number"!=typeof e||Number.isFinite(e)||k(n,i,"有限数字")}function S(e,n,i){let l=w(e,i,n);for(let e of["accountName","bankName","accountNumber","contact"])F(l,e,n,"".concat(i,".").concat(e))}function I(e,n,i){let l=w(e,i,n);for(let e of(M(l,"organizationId",n,"".concat(i,".organizationId")),["balanceFen","totalRechargedFen","totalChargedFen"]))z(l,e,n,"".concat(i,".").concat(e));M(l,"updatedAt",n,"".concat(i,".updatedAt"))}function O(e,n,i){let l=w(e,i,n);for(let e of["rechargeFen","chargedFen","refundedFen","netConsumedFen"])z(l,e,n,"".concat(i,".").concat(e))}function R(e,n,i){let l=w(e,i,n);M(l,"id",n,"".concat(i,".id")),M(l,"organizationId",n,"".concat(i,".organizationId")),F(l,"accountId",n,"".concat(i,".accountId")),F(l,"jobId",n,"".concat(i,".jobId")),M(l,"kind",n,"".concat(i,".kind")),z(l,"deltaFen",n,"".concat(i,".deltaFen")),z(l,"balanceAfterFen",n,"".concat(i,".balanceAfterFen")),M(l,"description",n,"".concat(i,".description")),w(l.metadata,"".concat(i,".metadata"),n),M(l,"createdAt",n,"".concat(i,".createdAt")),Number.isNaN(Date.parse(l.createdAt))&&k(n,"".concat(i,".createdAt"),"有效时间字符串")}var J=i(7612);let q={accountName:"",bankName:"",accountNumber:"",contact:""},P={organizationId:"",direction:"credit",amountYuan:"",note:""};function D(e){let{isSuperAdmin:n}=e,[i,r]=(0,a.useState)(null),[c,d]=(0,a.useState)(null),[o,u]=(0,a.useState)(q),[h,g]=(0,a.useState)(P),[m,b]=(0,a.useState)("overview"),[x,p]=(0,a.useState)(!1),[j,v]=(0,a.useState)(!0),[f,y]=(0,a.useState)(!1),[D,L]=(0,a.useState)(null),[Z,Q]=(0,a.useState)(null),[X,$]=(0,a.useState)(null),ee=(0,a.useRef)(null),en=(0,a.useRef)(null),el=(0,a.useMemo)(()=>n?[{id:"overview",label:"概览"},{id:"pricing",label:"价格与计费"},{id:"balance",label:"余额与上账"},{id:"account",label:"收款设置"}]:[{id:"overview",label:"概览"},{id:"ledger",label:"账务流水"}],[n]),ea=(0,a.useMemo)(()=>null==c?void 0:c.organizations.find(e=>e.id===h.organizationId),[null==c?void 0:c.organizations,h.organizationId]);async function et(){v(!0),L(null);try{if(n){let e=await fetch("/api/admin/billing",{cache:"no-store"}),n=await _(e);if(!e.ok)throw Error(n.error||"读取超管计费数据失败");let i=function(e){let n="超管计费",i=w(e,"响应",n);return S(i.billingAccount,n,"billingAccount"),A(i,"organizations",n).forEach((e,i)=>(function(e,n,i){let l=w(e,i,n);M(l,"id",n,"".concat(i,".id")),M(l,"name",n,"".concat(i,".name")),M(l,"status",n,"".concat(i,".status")),I(l.wallet,n,"".concat(i,".wallet"))})(e,n,"organizations[".concat(i,"]"))),A(i,"members",n).forEach((e,i)=>(function(e,n,i){let l=w(e,i,n);for(let e of["id","displayName","phonLine truncated
|
||||
@@ -0,0 +1 @@
|
||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[323],{652:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>tW});var n=a(5155),i=a(2115),l=a(7855),r=a(7209),s=a(5299),o=a(8085),c=a(6191),d=a(8514),u=a(5917),m=a(6667),h=a(2583),p=a(9397),g=a(1786),x=a(5229),f=a(6046),b=a(9867),v=a(9559),j=a(3327),y=a(2196),w=a(4274),N=a(3586),k=a(2821),A=a(368),S=a(7937);function C(e){let{page:t,pageSize:a,total:i,label:l="分页",onPageChange:r}=e,s=M(i,a);if(s<=1)return null;let o=z(t,i,a);return(0,n.jsxs)("nav",{className:"pagination","aria-label":l,children:[(0,n.jsx)("button",{className:"icon-button",type:"button",title:"上一页",disabled:o<=1,onClick:()=>r(o-1),children:(0,n.jsx)(A.A,{size:17})}),(0,n.jsxs)("span",{className:"pager-meta",children:[o," / ",s]}),(0,n.jsx)("button",{className:"icon-button",type:"button",title:"下一页",disabled:o>=s,onClick:()=>r(o+1),children:(0,n.jsx)(S.A,{size:17})})]})}function z(e,t,a){return Math.min(Math.max(1,e),M(t,a))}function M(e,t){return Math.max(1,Math.ceil(e/t))}var I=a(3606),E=a(1873),P=a(6577),U=a(4122),T=a(6548),R=a(1360);function D(e){return"/api/assets/".concat(encodeURIComponent(e.id),"/download?inline=1")}function F(e){return"/api/assets/".concat(encodeURIComponent(e.id),"/download")}function O(e){return e.id?D({id:e.id}):e.url}function q(e,t){if(!e)return"";let a=t.find(t=>t.url===e);return a?D(a):e}function L(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"box";return"stroke"===t?"@标记".concat(e):"@标注".concat(e)}function K(e,t){var a;let n=t&&t>0?"图".concat(t):"";return"point"===e.kind&&e.point?"".concat(n,"<point>").concat(_(e.point.x)," ").concat(_(e.point.y),"</point>"):"box"===e.kind&&e.box?"".concat(n,"<bbox>").concat(_(e.box.left)," ").concat(_(e.box.top)," ").concat(_(e.box.right)," ").concat(_(e.box.bottom),"</bbox>"):"stroke"===e.kind&&(null==(a=e.points)?void 0:a.length)?"".concat(n||"图片","中的蓝色标记区域"):""}function B(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return e.replace(/@(图片|图)(\d+)/g,(e,a,n)=>"图".concat(t?1:Number(n)))}function _(e){return Math.max(0,Math.min(1e3,Math.round(e)))}function J(e,t){return e.sourceKey&&t.get(e.sourceKey)||1}function W(e){var t;return Number((null==(t=e.match(/\d+$/))?void 0:t[0])||0)}function V(e){let{mode:t,sources:a,selectedSources:l,source:r,uploading:o,annotations:c,onAnnotationsChange:d,onSelectSource:m,onToggleSource:h,onUpload:p,onInsertAnnotation:f}=e,[b,v]=(0,i.useState)("box"),[j,w]=(0,i.useState)(null),[N,A]=(0,i.useState)(null),[S,C]=(0,i.useState)(null),[z,M]=(0,i.useState)([]),D=(0,i.useRef)(null),F=et(r),q=(0,i.useMemo)(()=>new Set(l.map(et)),[l]),K=(0,i.useMemo)(()=>new Map(l.map((e,t)=>[et(e),t+1])),[l]),B=(0,i.useMemo)(()=>c.filter(e=>!e.sourceKey||e.sourceKey===F),[c,F]),_=B.find(e=>e.id===S),J=(0,i.useMemo)(()=>c.reduce((e,t)=>Math.max(e,t.index),0)+1,[c]),W=l.length>=10;function V(e){d([...c,{...e,sourceKey:F}]),C(e.id),M([])}(0,i.useEffect)(()=>{w(null),A(null),C(null),M([])},[F,t]),(0,i.useEffect)(()=>{"layers"===t&&"point"===b&&v("box")},[t,b]);let Y=K.get(F)||1;return(0,n.jsxs)("section",{className:(0,k.A)("seedream-workspace","interactive"===t?"interactive":"layers"),"aria-label":"interactive"===t?"Seedream 交互编辑":"Seedream 图层拆分",children:[(0,n.jsxs)("header",{className:"seedream-workspace-head",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:"interactive"===t?"精准编辑画布":"指定拆分区域"}),(0,n.jsx)("span",{children:"interactive"===t?"可在最多 10 张图片间切换,使用坐标或蓝色涂鸦描述编辑位置":"可留空自动全拆,也可框选或涂鸦指定希望拆出的元素"})]}),(0,n.jsx)("span",{className:"seedream-model-pill",children:"Seedream 5.0 Pro"})]}),r?(0,n.jsxs)("div",{className:"seedream-editor-shell",children:[(0,n.jsxs)("div",{className:"seedream-editor-toolbar",role:"toolbar","aria-label":"标注工具",children:[(0,n.jsxs)("span",{className:"seedream-current-image-badge",children:["图",Y]}),(0,n.jsxs)("button",{className:(0,k.A)("box"===b&&"active"),type:"button","aria-pressed":"box"===b,title:"框选区域",onClick:()=>v("box"),children:[(0,n.jsx)(I.A,{size:16}),"框选"]}),"interactive"===t?(0,n.jsxs)("button",{className:(0,k.A)("point"===b&&"active"),type:"button","aria-pressed":"point"===b,title:"点选位置",onClick:()=>v("point"),children:[(0,n.jsx)(E.A,{size:16}),"点选"]}):null,(0,n.jsxs)("button",{className:(0,k.A)("brush"===b&&"active"),type:"button","aria-pressed":"brush"===b,title:"蓝色涂鸦标记",onClick:()=>v("brush"),children:[(0,n.jsx)(P.A,{size:16}),"涂鸦"]}),(0,n.jsx)("span",{className:"seedream-editor-toolbar-divider"}),(0,n.jsx)("button",{type:"button",disabled:!B.length,title:"撤销","aria-label":"撤销当前图片的最后一个标注",onClick:function(){let e=B.at(-1);e&&(d(c.filter(t=>t.id!==e.id)),M(t=>[...t,e]),S===e.id&&C(null))},children:(0,n.jsx)(U.A,{size:16})}),(0,n.jsx)("button",{type:"bLine truncated
|
||||
@@ -0,0 +1 @@
|
||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[321,335,830,974],{63:(e,t,r)=>{"use strict";var n=r(7260);r.o(n,"usePathname")&&r.d(t,{usePathname:function(){return n.usePathname}}),r.o(n,"useRouter")&&r.d(t,{useRouter:function(){return n.useRouter}})},4577:(e,t,r)=>{"use strict";r.d(t,{BrowserAuthGuard:()=>c,BrowserAuthProvider:()=>s,ClientRedirect:()=>h,a:()=>l});var n=r(5155),a=r(2115),u=r(63),o=r(6660);let i=(0,a.createContext)(null);function s(e){let{children:t}=e,[r,u]=(0,a.useState)(null),[s,l]=(0,a.useState)("loading"),[c,h]=(0,a.useState)(null),d=(0,a.useCallback)(async e=>{try{let t=await (0,o.uK)(e);u(t),l("ready"),h(null)}catch(e){if(e instanceof DOMException&&"AbortError"===e.name)return;l("error"),h(e instanceof Error?e.message:"无法读取认证状态")}},[]);(0,a.useEffect)(()=>{let e=new AbortController;return d(e.signal),()=>e.abort()},[d]);let f=(0,a.useMemo)(()=>{var e,t;let n=(null==r?void 0:r.user)||null,a=null==(e=null==r?void 0:r.authRequired)||e,u=!a||(null==n?void 0:n.role)==="super_admin",o=u||(null==n?void 0:n.role)==="organization_admin";return{status:s,user:n,authMode:(null==r?void 0:r.authMode)||null,authRequired:a,authConfigured:null!=(t=null==r?void 0:r.authConfigured)&&t,isAdmin:o,isSuperAdmin:u,error:c,refresh:()=>d()}},[c,d,r,s]);return(0,n.jsx)(i.Provider,{value:f,children:t})}function l(){let e=(0,a.useContext)(i);if(!e)throw Error("useBrowserAuth must be used inside BrowserAuthProvider");return e}function c(e){let{children:t,role:r="user"}=e,i=l(),s=(0,u.usePathname)(),c=(0,u.useRouter)(),h="ready"===i.status&&i.authRequired&&!i.user;return((0,a.useEffect)(()=>{if(h){let e=(0,o.M6)(window.location,s||"/create");c.replace("/auth/login?next=".concat(encodeURIComponent(e)))}},[h,s,c]),"loading"===i.status||h)?(0,n.jsx)(d,{message:"正在确认登录状态…"}):"error"===i.status?(0,n.jsx)(d,{message:i.error||"无法读取认证状态",actionLabel:"重试",onAction:()=>void i.refresh()}):("admin"!==r||i.isAdmin)&&("super"!==r||i.isSuperAdmin)?(0,n.jsx)(n.Fragment,{children:t}):(0,n.jsx)(d,{message:"当前账号无权访问此页面。"})}function h(e){let{to:t,forwardNext:r=!1}=e;return(0,a.useEffect)(()=>{let e=r?new URLSearchParams(window.location.search).get("next"):null,n=e?"".concat(t,"?next=").concat(encodeURIComponent(e)):t;window.location.replace(n)},[r,t]),(0,n.jsx)(d,{message:"正在跳转…"})}function d(e){let{message:t,actionLabel:r,onAction:a}=e;return(0,n.jsxs)("section",{className:"panel",children:[(0,n.jsx)("p",{className:"muted",children:t}),r&&a?(0,n.jsx)("button",{className:"button",type:"button",onClick:a,children:r}):null]})}},6660:(e,t,r)=>{"use strict";async function n(e){let t=await fetch("/api/auth/me",{method:"GET",cache:"no-store",credentials:"same-origin",headers:{Accept:"application/json"},signal:e});if(!t.ok)throw Error("认证状态请求失败(".concat(t.status,")"));var r,n=await t.json();if(!o(n)||"boolean"!=typeof n.authenticated||"boolean"!=typeof n.authRequired||"boolean"!=typeof n.authConfigured)throw Error("认证状态响应格式无效");if(!n.authenticated){if(null!==n.authMode||null!==n.user)throw Error("认证状态响应格式无效");return{authenticated:!1,authRequired:n.authRequired,authConfigured:n.authConfigured,authMode:null,user:null}}if(!n.authConfigured||"user"!==n.authMode&&"admin"!==n.authMode||!(o(r=n.user)&&"string"==typeof r.id&&r.id.length>0&&"string"==typeof r.subject&&r.subject===r.id&&"string"==typeof r.displayName&&"string"==typeof r.clientId&&("user"===r.role||"organization_admin"===r.role||"super_admin"===r.role)&&"active"===r.status&&("super_admin"===r.role||"string"==typeof r.organizationId&&r.organizationId.length>0)&&Array.isArray(r.authorities)&&r.authorities.every(e=>"string"==typeof e)&&Array.isArray(r.scope)&&r.scope.every(e=>"string"==typeof e)))throw Error("认证用户响应格式无效");let a="user"===n.user.role?"user":"admin";if(n.authMode!==a)throw Error("认证用户响应格式无效");return{authenticated:!0,authRequired:n.authRequired,authConfigured:n.authConfigured,authMode:n.authMode,user:n.user}}function a(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/create";if(!e||!e.startsWith("/")||e.startsWith("//")||e.includes("\\"))return t;try{let r="http://zhinian.local",n=new URL(e,r);if(n.origin!==r)return t;let a="".concat(n.pathname).concat(n.search).concat(n.hash);if(n.pathname.startsWith("/api/auth")||n.pathname.startsWith("/auth/login")||n.pathname.startsWith("/auth/admin-login"))return t;return a}catch(e){return t}}function u(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/create";return a("".concat(e.pathname).concat(e.search).concat(e.hash),t)}function o(e){return"object"==typeof e&&null!==e}r.d(t,{M6:()=>u,uK:()=>n,z3:()=>a})},9656:(e,t,r)=>{Promise.resolve().then(r.bind(r,4577))}},e=>{e.O(0,[441,255,358],()=>e(e.s=9656)),_N_E=e.O()}]);
|
||||
@@ -0,0 +1 @@
|
||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[177],{1290:()=>{},2902:(e,t,a)=>{"use strict";a.d(t,{Rx:()=>n,mC:()=>r});let n=[{value:"today",label:"今天"},{value:"7d",label:"近 7 天"},{value:"30d",label:"近 30 天"},{value:"month",label:"本月"}];function r(e){var t;let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new Date,r=function(e){let t=Object.fromEntries(new Intl.DateTimeFormat("en-CA",{timeZone:"Asia/Shanghai",year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(e).map(e=>[e.type,e.value]));return"".concat(t.year,"-").concat(t.month,"-").concat(t.day)}(a),l=r;return"7d"===e&&(l=s(r,-6)),"30d"===e&&(l=s(r,-29)),"month"===e&&(l="".concat(r.slice(0,7),"-01")),function(e,t,a){var n,r;if(!i(e)||!i(t))throw o("日期格式必须为 YYYY-MM-DD。");if(e>t)throw o("开始日期不能晚于结束日期。");let l=(n=e,r=t,Math.round((Date.parse("".concat(r,"T00:00:00Z"))-Date.parse("".concat(n,"T00:00:00Z")))/864e5)+1);if(l>3660)throw o("单次查询最多支持 10 年。");return{from:"".concat(e,"T00:00:00+08:00"),to:"".concat(s(t,1),"T00:00:00+08:00"),startDate:e,endDate:t,label:a||(e===t?e:"".concat(e," 至 ").concat(t)),dayCount:l}}(l,r,null==(t=n.find(t=>t.value===e))?void 0:t.label)}function s(e,t){let a=new Date("".concat(e,"T00:00:00Z"));return a.setUTCDate(a.getUTCDate()+t),a.toISOString().slice(0,10)}function i(e){return!!/^\d{4}-\d{2}-\d{2}$/.test(e)&&new Date("".concat(e,"T00:00:00Z")).toISOString().slice(0,10)===e}function o(e){return Object.assign(Error(e),{status:400})}},4577:(e,t,a)=>{"use strict";a.d(t,{BrowserAuthGuard:()=>u,BrowserAuthProvider:()=>l,ClientRedirect:()=>d,a:()=>c});var n=a(5155),r=a(2115),s=a(63),i=a(6660);let o=(0,r.createContext)(null);function l(e){let{children:t}=e,[a,s]=(0,r.useState)(null),[l,c]=(0,r.useState)("loading"),[u,d]=(0,r.useState)(null),h=(0,r.useCallback)(async e=>{try{let t=await (0,i.uK)(e);s(t),c("ready"),d(null)}catch(e){if(e instanceof DOMException&&"AbortError"===e.name)return;c("error"),d(e instanceof Error?e.message:"无法读取认证状态")}},[]);(0,r.useEffect)(()=>{let e=new AbortController;return h(e.signal),()=>e.abort()},[h]);let m=(0,r.useMemo)(()=>{var e,t;let n=(null==a?void 0:a.user)||null,r=null==(e=null==a?void 0:a.authRequired)||e,s=!r||(null==n?void 0:n.role)==="super_admin",i=s||(null==n?void 0:n.role)==="organization_admin";return{status:l,user:n,authMode:(null==a?void 0:a.authMode)||null,authRequired:r,authConfigured:null!=(t=null==a?void 0:a.authConfigured)&&t,isAdmin:i,isSuperAdmin:s,error:u,refresh:()=>h()}},[u,h,a,l]);return(0,n.jsx)(o.Provider,{value:m,children:t})}function c(){let e=(0,r.useContext)(o);if(!e)throw Error("useBrowserAuth must be used inside BrowserAuthProvider");return e}function u(e){let{children:t,role:a="user"}=e,o=c(),l=(0,s.usePathname)(),u=(0,s.useRouter)(),d="ready"===o.status&&o.authRequired&&!o.user;return((0,r.useEffect)(()=>{if(d){let e=(0,i.M6)(window.location,l||"/create");u.replace("/auth/login?next=".concat(encodeURIComponent(e)))}},[d,l,u]),"loading"===o.status||d)?(0,n.jsx)(h,{message:"正在确认登录状态…"}):"error"===o.status?(0,n.jsx)(h,{message:o.error||"无法读取认证状态",actionLabel:"重试",onAction:()=>void o.refresh()}):("admin"!==a||o.isAdmin)&&("super"!==a||o.isSuperAdmin)?(0,n.jsx)(n.Fragment,{children:t}):(0,n.jsx)(h,{message:"当前账号无权访问此页面。"})}function d(e){let{to:t,forwardNext:a=!1}=e;return(0,r.useEffect)(()=>{let e=a?new URLSearchParams(window.location.search).get("next"):null,n=e?"".concat(t,"?next=").concat(encodeURIComponent(e)):t;window.location.replace(n)},[a,t]),(0,n.jsx)(h,{message:"正在跳转…"})}function h(e){let{message:t,actionLabel:a,onAction:r}=e;return(0,n.jsxs)("section",{className:"panel",children:[(0,n.jsx)("p",{className:"muted",children:t}),a&&r?(0,n.jsx)("button",{className:"button",type:"button",onClick:r,children:a}):null]})}},4662:(e,t,a)=>{"use strict";a.d(t,{AppShell:()=>R});var n=a(5155),r=a(2115),s=a(5239),i=a(2619),o=a.n(i),l=a(63),c=a(5740),u=a(4114),d=a(5870),h=a(6907),m=a(534),f=a(5468),p=a(4926),g=a(9865),v=a(2821),x=a(7612),b=a(69),j=a(4033),y=a(5299),w=a(9051),A=a(2902);function N(e){let{user:t}=e,[a,s]=(0,r.useState)(!1),[i,o]=(0,r.useState)("month"),[l,c]=(0,r.useState)(null),[u,d]=(0,r.useState)(!1),[h,m]=(0,r.useState)(null),f=(0,r.useRef)(null);return(0,r.useEffect)(()=>{if(!a)return;let e=e=>{var t;(null==(t=f.current)?void 0:t.contains(e.target))||s(!1)},t=e=>{"Escape"===e.key&&s(!1)};return document.addEventListener("pointerdown",e),document.addEventListener("keydown",t),()=>{document.removeEventListener("pointerdown",e),document.removeEventListener("keydown",t)}},[a]),(0,r.useEffect)(()=>{if(!a)return;let e=new AbortController;return d(!0),m(null),fetch("/api/usage?preset=".concat(i),{cache:"no-store",signal:e.signal}).then(async e=>{let t=await e.json();if(!e.ok)throw Error(t.error||"读取用量失败");c(t)}).catch(e=>{e instanceof DOMException&&"AbortErLine truncated
|
||||
@@ -0,0 +1 @@
|
||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[524],{1360:(e,t,a)=>{"use strict";a.d(t,{A:()=>r});let r=(0,a(1847).A)("Trash2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]])},4577:(e,t,a)=>{"use strict";a.d(t,{BrowserAuthGuard:()=>c,BrowserAuthProvider:()=>o,ClientRedirect:()=>d,a:()=>u});var r=a(5155),n=a(2115),s=a(63),l=a(6660);let i=(0,n.createContext)(null);function o(e){let{children:t}=e,[a,s]=(0,n.useState)(null),[o,u]=(0,n.useState)("loading"),[c,d]=(0,n.useState)(null),h=(0,n.useCallback)(async e=>{try{let t=await (0,l.uK)(e);s(t),u("ready"),d(null)}catch(e){if(e instanceof DOMException&&"AbortError"===e.name)return;u("error"),d(e instanceof Error?e.message:"无法读取认证状态")}},[]);(0,n.useEffect)(()=>{let e=new AbortController;return h(e.signal),()=>e.abort()},[h]);let f=(0,n.useMemo)(()=>{var e,t;let r=(null==a?void 0:a.user)||null,n=null==(e=null==a?void 0:a.authRequired)||e,s=!n||(null==r?void 0:r.role)==="super_admin",l=s||(null==r?void 0:r.role)==="organization_admin";return{status:o,user:r,authMode:(null==a?void 0:a.authMode)||null,authRequired:n,authConfigured:null!=(t=null==a?void 0:a.authConfigured)&&t,isAdmin:l,isSuperAdmin:s,error:c,refresh:()=>h()}},[c,h,a,o]);return(0,r.jsx)(i.Provider,{value:f,children:t})}function u(){let e=(0,n.useContext)(i);if(!e)throw Error("useBrowserAuth must be used inside BrowserAuthProvider");return e}function c(e){let{children:t,role:a="user"}=e,i=u(),o=(0,s.usePathname)(),c=(0,s.useRouter)(),d="ready"===i.status&&i.authRequired&&!i.user;return((0,n.useEffect)(()=>{if(d){let e=(0,l.M6)(window.location,o||"/create");c.replace("/auth/login?next=".concat(encodeURIComponent(e)))}},[d,o,c]),"loading"===i.status||d)?(0,r.jsx)(h,{message:"正在确认登录状态…"}):"error"===i.status?(0,r.jsx)(h,{message:i.error||"无法读取认证状态",actionLabel:"重试",onAction:()=>void i.refresh()}):("admin"!==a||i.isAdmin)&&("super"!==a||i.isSuperAdmin)?(0,r.jsx)(r.Fragment,{children:t}):(0,r.jsx)(h,{message:"当前账号无权访问此页面。"})}function d(e){let{to:t,forwardNext:a=!1}=e;return(0,n.useEffect)(()=>{let e=a?new URLSearchParams(window.location.search).get("next"):null,r=e?"".concat(t,"?next=").concat(encodeURIComponent(e)):t;window.location.replace(r)},[a,t]),(0,r.jsx)(h,{message:"正在跳转…"})}function h(e){let{message:t,actionLabel:a,onAction:n}=e;return(0,r.jsxs)("section",{className:"panel",children:[(0,r.jsx)("p",{className:"muted",children:t}),a&&n?(0,r.jsx)("button",{className:"button",type:"button",onClick:n,children:a}):null]})}},4934:(e,t,a)=>{"use strict";a.d(t,{LogManager:()=>d});var r=a(5155),n=a(2115),s=a(6651),l=a(5299),i=a(9559),o=a(1360),u=a(7612);let c=[{id:"all",label:"全部"},{id:"error",label:"错误"},{id:"warning",label:"警告"},{id:"info",label:"信息"}];function d(){let[e,t]=(0,n.useState)(null),[a,d]=(0,n.useState)("all"),[f,m]=(0,n.useState)(""),[p,g]=(0,n.useState)(""),[v,x]=(0,n.useState)(!0),[y,j]=(0,n.useState)(!1),[w,b]=(0,n.useState)(null),[N,A]=(0,n.useState)(null),k=(0,n.useRef)(null),E=(0,n.useRef)(null),C=(0,n.useRef)(null);(0,n.useEffect)(()=>{S()},[a,f]),(0,n.useEffect)(()=>(0,u.It)(k,e=>(0,u.xr)(e)),[]),(0,n.useEffect)(()=>{(0,u.c8)(E.current)},[null==e?void 0:e.entries]),(0,n.useEffect)(()=>{(0,u.Js)(C.current)},[w,N]);let M=(0,n.useMemo)(()=>{let t=(null==e?void 0:e.entries)||[];return{total:t.length,error:t.filter(e=>"error"===e.level).length,warning:t.filter(e=>"warning"===e.level).length,info:t.filter(e=>"info"===e.level).length}},[e]);async function S(){x(!0),b(null);try{let e=new URLSearchParams({level:a,limit:"200"});f.trim()&&e.set("q",f.trim());let r=await fetch("/api/logs?".concat(e.toString()),{cache:"no-store"}),n=await r.json();if(!r.ok)throw Error(n.error||"读取日志失败");t(n)}catch(e){b(e instanceof Error?e.message:String(e))}finally{x(!1)}}async function R(){if(window.confirm("确定清空后台日志?")){j(!0),b(null),A(null);try{let e=await fetch("/api/logs",{method:"DELETE"}),t=await e.json();if(!e.ok)throw Error(t.error||"清空日志失败");A("日志已清空。"),await S()}catch(e){b(e instanceof Error?e.message:String(e))}finally{j(!1)}}}return(0,r.jsxs)("div",{className:"log-manager",ref:k,children:[(0,r.jsxs)("div",{className:"workspace-head","data-animate":!0,children:[(0,r.jsx)("div",{children:(0,r.jsx)("h1",{className:"workspace-title",children:"日志管理"})}),(0,r.jsxs)("div",{className:"workspace-meta",children:[(0,r.jsxs)("span",{className:"status",children:[M.total," 条"]}),(0,r.jsxs)("span",{className:"status failed",children:[M.error," 错误"]}),(0,r.jsxs)("span",{className:"status running",children:[M.warning," 警告"]})]})]}),(0,r.jsxs)("section",{className:"panel log-actions","data-animate":!0,children:[Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[321,335,830,974],{63:(e,t,r)=>{"use strict";var n=r(7260);r.o(n,"usePathname")&&r.d(t,{usePathname:function(){return n.usePathname}}),r.o(n,"useRouter")&&r.d(t,{useRouter:function(){return n.useRouter}})},4577:(e,t,r)=>{"use strict";r.d(t,{BrowserAuthGuard:()=>c,BrowserAuthProvider:()=>s,ClientRedirect:()=>h,a:()=>l});var n=r(5155),a=r(2115),u=r(63),o=r(6660);let i=(0,a.createContext)(null);function s(e){let{children:t}=e,[r,u]=(0,a.useState)(null),[s,l]=(0,a.useState)("loading"),[c,h]=(0,a.useState)(null),d=(0,a.useCallback)(async e=>{try{let t=await (0,o.uK)(e);u(t),l("ready"),h(null)}catch(e){if(e instanceof DOMException&&"AbortError"===e.name)return;l("error"),h(e instanceof Error?e.message:"无法读取认证状态")}},[]);(0,a.useEffect)(()=>{let e=new AbortController;return d(e.signal),()=>e.abort()},[d]);let f=(0,a.useMemo)(()=>{var e,t;let n=(null==r?void 0:r.user)||null,a=null==(e=null==r?void 0:r.authRequired)||e,u=!a||(null==n?void 0:n.role)==="super_admin",o=u||(null==n?void 0:n.role)==="organization_admin";return{status:s,user:n,authMode:(null==r?void 0:r.authMode)||null,authRequired:a,authConfigured:null!=(t=null==r?void 0:r.authConfigured)&&t,isAdmin:o,isSuperAdmin:u,error:c,refresh:()=>d()}},[c,d,r,s]);return(0,n.jsx)(i.Provider,{value:f,children:t})}function l(){let e=(0,a.useContext)(i);if(!e)throw Error("useBrowserAuth must be used inside BrowserAuthProvider");return e}function c(e){let{children:t,role:r="user"}=e,i=l(),s=(0,u.usePathname)(),c=(0,u.useRouter)(),h="ready"===i.status&&i.authRequired&&!i.user;return((0,a.useEffect)(()=>{if(h){let e=(0,o.M6)(window.location,s||"/create");c.replace("/auth/login?next=".concat(encodeURIComponent(e)))}},[h,s,c]),"loading"===i.status||h)?(0,n.jsx)(d,{message:"正在确认登录状态…"}):"error"===i.status?(0,n.jsx)(d,{message:i.error||"无法读取认证状态",actionLabel:"重试",onAction:()=>void i.refresh()}):("admin"!==r||i.isAdmin)&&("super"!==r||i.isSuperAdmin)?(0,n.jsx)(n.Fragment,{children:t}):(0,n.jsx)(d,{message:"当前账号无权访问此页面。"})}function h(e){let{to:t,forwardNext:r=!1}=e;return(0,a.useEffect)(()=>{let e=r?new URLSearchParams(window.location.search).get("next"):null,n=e?"".concat(t,"?next=").concat(encodeURIComponent(e)):t;window.location.replace(n)},[r,t]),(0,n.jsx)(d,{message:"正在跳转…"})}function d(e){let{message:t,actionLabel:r,onAction:a}=e;return(0,n.jsxs)("section",{className:"panel",children:[(0,n.jsx)("p",{className:"muted",children:t}),r&&a?(0,n.jsx)("button",{className:"button",type:"button",onClick:a,children:r}):null]})}},6660:(e,t,r)=>{"use strict";async function n(e){let t=await fetch("/api/auth/me",{method:"GET",cache:"no-store",credentials:"same-origin",headers:{Accept:"application/json"},signal:e});if(!t.ok)throw Error("认证状态请求失败(".concat(t.status,")"));var r,n=await t.json();if(!o(n)||"boolean"!=typeof n.authenticated||"boolean"!=typeof n.authRequired||"boolean"!=typeof n.authConfigured)throw Error("认证状态响应格式无效");if(!n.authenticated){if(null!==n.authMode||null!==n.user)throw Error("认证状态响应格式无效");return{authenticated:!1,authRequired:n.authRequired,authConfigured:n.authConfigured,authMode:null,user:null}}if(!n.authConfigured||"user"!==n.authMode&&"admin"!==n.authMode||!(o(r=n.user)&&"string"==typeof r.id&&r.id.length>0&&"string"==typeof r.subject&&r.subject===r.id&&"string"==typeof r.displayName&&"string"==typeof r.clientId&&("user"===r.role||"organization_admin"===r.role||"super_admin"===r.role)&&"active"===r.status&&("super_admin"===r.role||"string"==typeof r.organizationId&&r.organizationId.length>0)&&Array.isArray(r.authorities)&&r.authorities.every(e=>"string"==typeof e)&&Array.isArray(r.scope)&&r.scope.every(e=>"string"==typeof e)))throw Error("认证用户响应格式无效");let a="user"===n.user.role?"user":"admin";if(n.authMode!==a)throw Error("认证用户响应格式无效");return{authenticated:!0,authRequired:n.authRequired,authConfigured:n.authConfigured,authMode:n.authMode,user:n.user}}function a(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/create";if(!e||!e.startsWith("/")||e.startsWith("//")||e.includes("\\"))return t;try{let r="http://zhinian.local",n=new URL(e,r);if(n.origin!==r)return t;let a="".concat(n.pathname).concat(n.search).concat(n.hash);if(n.pathname.startsWith("/api/auth")||n.pathname.startsWith("/auth/login")||n.pathname.startsWith("/auth/admin-login"))return t;return a}catch(e){return t}}function u(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/create";return a("".concat(e.pathname).concat(e.search).concat(e.hash),t)}function o(e){return"object"==typeof e&&null!==e}r.d(t,{M6:()=>u,uK:()=>n,z3:()=>a})},9656:(e,t,r)=>{Promise.resolve().then(r.bind(r,4577))}},e=>{e.O(0,[441,255,358],()=>e(e.s=9656)),_N_E=e.O()}]);
|
||||
@@ -0,0 +1 @@
|
||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[662],{4527:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>f});var a=s(5155),n=s(2115),r=s(5299),l=s(9559),i=s(6046),o=s(7612);function u(){let[e,t]=(0,n.useState)(null),[s,u]=(0,n.useState)({}),[v,f]=(0,n.useState)(()=>new Set),[p,m]=(0,n.useState)("status"),[g,x]=(0,n.useState)(!0),[j,y]=(0,n.useState)(!1),[b,w]=(0,n.useState)(null),[N,k]=(0,n.useState)(null),A=(0,n.useRef)(null),E=(0,n.useRef)(null),C=(0,n.useRef)(null),M=(0,n.useMemo)(()=>(null==e?void 0:e.groups.flatMap(e=>e.fields))||[],[e]),S=(0,n.useMemo)(()=>null==e?void 0:e.groups.find(e=>e.id===p),[p,e]),R=(0,n.useMemo)(()=>[{id:"status",label:"状态"},...(null==e?void 0:e.groups.map(e=>{var t,s;return{id:e.id,label:(t=e.id,s=e.title,"auth"===t?"登录":"visual"===t?"图片":"evolink"===t?"EvoLink":"seedance"===t?"方舟":"oss"===t?"OSS":s)}}))||[]],[e]);async function z(){x(!0),k(null),w(null);try{let s=await fetch("/api/settings",{cache:"no-store"}),a=await s.json();if(!s.ok)throw Error(a.error||"读取设置失败");if(t(a),u(c(a)),f(new Set),"status"!==p&&!a.groups.some(e=>e.id===p)){var e;m((null==(e=a.groups[0])?void 0:e.id)||"status")}}catch(e){k(e instanceof Error?e.message:String(e))}finally{x(!1)}}async function _(){if(0!==v.size){y(!0),k(null),w(null);try{let e=await fetch("/api/settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({values:Object.fromEntries([...v].map(e=>{var t;return[e,null!=(t=s[e])?t:""]}))})}),a=await e.json();if(!e.ok)throw Error(a.error||"保存设置失败");t(a),u(c(a)),f(new Set),w(a.restartRequired?"配置已保存,重启 Go 服务后生效。":"配置已保存并应用到当前服务。")}catch(e){k(e instanceof Error?e.message:String(e))}finally{y(!1)}}}function q(e,t){u(s=>({...s,[e]:t})),f(t=>{let s=new Set(t);return s.add(e),s})}return((0,n.useEffect)(()=>{z()},[]),(0,n.useEffect)(()=>(0,o.It)(A,e=>(0,o.xr)(e)),[]),(0,n.useEffect)(()=>{(0,o.Js)(C.current)},[N,b]),(0,n.useEffect)(()=>{(0,o.c8)(E.current)},[p]),g&&!e)?(0,a.jsxs)("section",{className:"panel settings-loading",children:[(0,a.jsx)(r.A,{className:"spin",size:18}),"正在读取配置"]}):(0,a.jsxs)("div",{className:"settings-panel",ref:A,children:[(0,a.jsx)("div",{className:"workspace-head","data-animate":!0,children:(0,a.jsx)("div",{children:(0,a.jsx)("h1",{className:"workspace-title",children:"服务设置"})})}),(0,a.jsxs)("section",{className:"panel settings-actions","data-animate":!0,children:[(0,a.jsx)("div",{className:"segmented settings-tabs","aria-label":"设置分类",children:R.map(e=>(0,a.jsx)("button",{className:p===e.id?"active":"","aria-pressed":p===e.id,type:"button",onClick:()=>m(e.id),children:e.label},e.id))}),(0,a.jsxs)("div",{className:"toolbar",children:[(0,a.jsxs)("button",{className:"button",type:"button",onClick:z,disabled:g||j,children:[g?(0,a.jsx)(r.A,{className:"spin",size:18}):(0,a.jsx)(l.A,{size:18}),"刷新"]}),(0,a.jsxs)("button",{className:"button primary",type:"button",onClick:_,disabled:j||0===v.size||!M.length&&!(null==e?void 0:e.engineAssignments.length),children:[j?(0,a.jsx)(r.A,{className:"spin",size:18}):(0,a.jsx)(i.A,{size:18}),"保存"]})]})]}),N||b?(0,a.jsxs)("div",{ref:C,children:[N?(0,a.jsx)("div",{className:"callout",role:"alert",children:N}):null,b?(0,a.jsx)("div",{className:"callout success-callout",role:"status","aria-live":"polite",children:b}):null]}):null,S?(0,a.jsxs)("section",{className:"panel settings-group","data-animate":!0,ref:E,children:[(0,a.jsx)("div",{className:"settings-group-head",children:(0,a.jsx)("div",{children:(0,a.jsx)("h2",{children:S.title})})}),(0,a.jsx)("div",{className:"settings-field-grid",children:S.fields.map(e=>{var t,n;return(0,a.jsxs)("label",{className:"field settings-field",children:[(0,a.jsxs)("span",{children:[e.label,e.secret?(0,a.jsx)("em",{children:e.configured?"已配置":"未配置"}):null]}),"select"===e.type?(0,a.jsx)("select",{value:null!=(t=s[e.key])?t:e.value,onChange:t=>q(e.key,t.target.value),children:(e.options||[]).map(e=>(0,a.jsx)("option",{value:e.value,children:e.label},e.value))}):(0,a.jsx)("input",{type:e.secret?"password":"number"===e.type?"number":"text",value:null!=(n=s[e.key])?n:"",placeholder:e.secret&&e.configured?"留空保留当前密钥":e.description||"",onChange:t=>q(e.key,t.target.value)}),(0,a.jsx)("small",{children:e.key})]},e.key)})})]},S.id):null,"status"===p?(0,a.jsxs)("section",{className:"panel settings-group","data-animate":!0,ref:E,children:[(0,a.jsx)("div",{className:"settings-group-head",children:(0,a.jsx)("div",{children:(0,a.jsx)("h2",{children:"功能引擎"})})}),(0,a.jsxs)("div",{className:"settings-service-strip",children:[(0,a.jsx)(d,{label:"即梦",value:h(null==e?void 0:e.services.visual),ready:!!(null==e?void 0:e.services.visual)}),(0,a.jsx)(d,{label:"EvoLink",value:h(null==e?void 0:e.services.evolink),ready:!!(null==e?void 0:e.services.evolink)}),(0,a.jsx)(d,{label:"Seedance",value:h(null==e?void 0:e.services.seedLine truncated
|
||||
@@ -0,0 +1 @@
|
||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[430],{534:(e,a,t)=>{"use strict";t.d(a,{A:()=>n});let n=(0,t(1847).A)("ChartColumn",[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"M18 17V9",key:"2bz60n"}],["path",{d:"M13 17V5",key:"1frdt8"}],["path",{d:"M8 17v-3",key:"17ska0"}]])},1770:(e,a,t)=>{Promise.resolve().then(t.bind(t,3438))},2902:(e,a,t)=>{"use strict";t.d(a,{Rx:()=>n,mC:()=>s});let n=[{value:"today",label:"今天"},{value:"7d",label:"近 7 天"},{value:"30d",label:"近 30 天"},{value:"month",label:"本月"}];function s(e){var a;let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new Date,s=function(e){let a=Object.fromEntries(new Intl.DateTimeFormat("en-CA",{timeZone:"Asia/Shanghai",year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(e).map(e=>[e.type,e.value]));return"".concat(a.year,"-").concat(a.month,"-").concat(a.day)}(t),c=s;return"7d"===e&&(c=r(s,-6)),"30d"===e&&(c=r(s,-29)),"month"===e&&(c="".concat(s.slice(0,7),"-01")),function(e,a,t){var n,s;if(!l(e)||!l(a))throw i("日期格式必须为 YYYY-MM-DD。");if(e>a)throw i("开始日期不能晚于结束日期。");let c=(n=e,s=a,Math.round((Date.parse("".concat(s,"T00:00:00Z"))-Date.parse("".concat(n,"T00:00:00Z")))/864e5)+1);if(c>3660)throw i("单次查询最多支持 10 年。");return{from:"".concat(e,"T00:00:00+08:00"),to:"".concat(r(a,1),"T00:00:00+08:00"),startDate:e,endDate:a,label:t||(e===a?e:"".concat(e," 至 ").concat(a)),dayCount:c}}(c,s,null==(a=n.find(a=>a.value===e))?void 0:a.label)}function r(e,a){let t=new Date("".concat(e,"T00:00:00Z"));return t.setUTCDate(t.getUTCDate()+a),t.toISOString().slice(0,10)}function l(e){return!!/^\d{4}-\d{2}-\d{2}$/.test(e)&&new Date("".concat(e,"T00:00:00Z")).toISOString().slice(0,10)===e}function i(e){return Object.assign(Error(e),{status:400})}},3438:(e,a,t)=>{"use strict";t.r(a),t.d(a,{default:()=>w});var n=t(5155),s=t(2115),r=t(8314),l=t(5299),i=t(9559),c=t(534),o=t(1847);let d=(0,o.A)("Users",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["path",{d:"M16 3.13a4 4 0 0 1 0 7.75",key:"1da9ce"}]]);var u=t(9408);let h=(0,o.A)("CalendarDays",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}],["path",{d:"M8 14h.01",key:"6423bh"}],["path",{d:"M12 14h.01",key:"1etili"}],["path",{d:"M16 14h.01",key:"1gbofw"}],["path",{d:"M8 18h.01",key:"lrp35t"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M16 18h.01",key:"kzsmim"}]]);var m=t(7612),p=t(2902);function x(){let e=(0,p.mC)("month");return{startDate:e.startDate,endDate:e.endDate,organizationId:"",ownerId:"",capability:"",provider:""}}function j(e){var a,t;let{isSuperAdmin:o}=e,[p,j]=(0,s.useState)(x),[N,w]=(0,s.useState)(null),[k,A]=(0,s.useState)(!0),[M,C]=(0,s.useState)(null),E=(0,s.useRef)(null),D=(0,s.useRef)(null),z=(0,s.useRef)(null);async function R(e){A(!0),C(null);try{let a=new URLSearchParams;for(let[e,t]of Object.entries(p))t&&a.set(e,t);let t=await fetch("/api/admin/usage?".concat(a.toString()),{cache:"no-store",signal:e}),n=await t.json();if(!t.ok)throw Error(n.error||"读取用量数据失败");w(n)}catch(e){if(e instanceof DOMException&&"AbortError"===e.name)return;C(e instanceof Error?e.message:String(e))}finally{(null==e?void 0:e.aborted)||A(!1)}}function I(e,a){j(t=>({...t,[e]:a}))}return(0,s.useEffect)(()=>{let e=new AbortController;return R(e.signal),()=>e.abort()},[p]),(0,s.useEffect)(()=>(0,m.It)(E,e=>(0,m.xr)(e)),[]),(0,s.useEffect)(()=>{(0,m.c8)(D.current)},[N]),(0,s.useEffect)(()=>{(0,m.Js)(z.current)},[M,null==N?void 0:N.warnings]),(0,n.jsxs)("div",{className:"usage-manager",ref:E,children:[(0,n.jsxs)("div",{className:"workspace-head","data-animate":!0,children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h1",{className:"workspace-title",children:"用量管理"}),(0,n.jsx)("p",{className:"workspace-copy",children:"按成功任务统计平台内账号与组织的真实服务用量。"})]}),(0,n.jsxs)("div",{className:"workspace-meta",children:[(0,n.jsx)("span",{className:"status",children:"北京时间"}),(0,n.jsx)("span",{className:"status running",children:(null==N?void 0:N.range.label)||"本月"})]})]}),(0,n.jsxs)("section",{className:"panel usage-filters","data-animate":!0,"aria-label":"用量筛选",children:[(0,n.jsxs)("label",{className:"field",children:[(0,n.jsx)("span",{children:"开始日期"}),(0,n.jsx)("input",{type:"date",value:p.startDate,max:p.endDate,onChange:e=>I("startDate",e.target.value)})]}),(0,n.jsxs)("label",{className:"field",children:[(0,n.jsx)("span",{children:"结束日期"}),(0,n.jsx)("input",{type:"date",value:p.endDate,min:p.startDate,onChange:e=>I("endDate",e.target.value)})]}),o?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("label",{className:"field",children:[(0,n.jsx)("span",{children:"组织"}),(0,n.jsxs)(Line truncated
|
||||
Reference in new issue
Block a user