@fudanda/admin-antd 2.20261109.1-beta.1 → 2.20261109.1-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/ApiTokensPage-w3JGRNQC.js +2 -0
- package/dist/chunks/ApiTokensPage-w3JGRNQC.js.map +1 -0
- package/dist/chunks/{App-CfQx7jWq.js → App-nh6_qOo8.js} +5 -5
- package/dist/chunks/{App-CfQx7jWq.js.map → App-nh6_qOo8.js.map} +1 -1
- package/dist/chunks/{AppModal-CVoUC2t3.js → AppModal-CEouaU03.js} +2 -2
- package/dist/chunks/{AppModal-CVoUC2t3.js.map → AppModal-CEouaU03.js.map} +1 -1
- package/dist/chunks/{ArcBaseAdmin-DQyddbFC.js → ArcBaseAdmin-CX7fQz4x.js} +2 -2
- package/dist/chunks/{ArcBaseAdmin-DQyddbFC.js.map → ArcBaseAdmin-CX7fQz4x.js.map} +1 -1
- package/dist/chunks/{DepartmentsPage-CQx53QGE.js → DepartmentsPage-BdD9VfDI.js} +2 -2
- package/dist/chunks/{DepartmentsPage-CQx53QGE.js.map → DepartmentsPage-BdD9VfDI.js.map} +1 -1
- package/dist/chunks/{DictsPage-BGnamkWk.js → DictsPage-fxBdV1-3.js} +2 -2
- package/dist/chunks/{DictsPage-BGnamkWk.js.map → DictsPage-fxBdV1-3.js.map} +1 -1
- package/dist/chunks/{EntityContextRuntime-CbzeMNXR.js → EntityContextRuntime-CMhoj6qe.js} +2 -2
- package/dist/chunks/{EntityContextRuntime-CbzeMNXR.js.map → EntityContextRuntime-CMhoj6qe.js.map} +1 -1
- package/dist/chunks/EntityContextRuntime-Dc89ZSnM.js +1 -0
- package/dist/chunks/{ExportButton-sMPAV2hd.js → ExportButton-DGxB2tcu.js} +2 -2
- package/dist/chunks/{ExportButton-sMPAV2hd.js.map → ExportButton-DGxB2tcu.js.map} +1 -1
- package/dist/chunks/{FileViewerPreviewPanel-Rti7pUhU.js → FileViewerPreviewPanel-BMZ7FdKV.js} +3 -3
- package/dist/chunks/{FileViewerPreviewPanel-Rti7pUhU.js.map → FileViewerPreviewPanel-BMZ7FdKV.js.map} +1 -1
- package/dist/chunks/{FilesPage-D_iYsUwl.js → FilesPage-DrgWELKy.js} +3 -3
- package/dist/chunks/{FilesPage-D_iYsUwl.js.map → FilesPage-DrgWELKy.js.map} +1 -1
- package/dist/chunks/{IdentitySecurityPage-rDYX5ksX.js → IdentitySecurityPage-BjTKvr-O.js} +2 -2
- package/dist/chunks/{IdentitySecurityPage-rDYX5ksX.js.map → IdentitySecurityPage-BjTKvr-O.js.map} +1 -1
- package/dist/chunks/{LogStatsScaffold-CMIz4z0a.js → LogStatsScaffold-DaB0JeAN.js} +2 -2
- package/dist/chunks/{LogStatsScaffold-CMIz4z0a.js.map → LogStatsScaffold-DaB0JeAN.js.map} +1 -1
- package/dist/chunks/{LoginLogsPage-Bv5pPJb2.js → LoginLogsPage-VmYC7i6q.js} +2 -2
- package/dist/chunks/{LoginLogsPage-Bv5pPJb2.js.map → LoginLogsPage-VmYC7i6q.js.map} +1 -1
- package/dist/chunks/{LoginLogsTable-DYcTx2oR.js → LoginLogsTable-CULcc_e8.js} +2 -2
- package/dist/chunks/{LoginLogsTable-DYcTx2oR.js.map → LoginLogsTable-CULcc_e8.js.map} +1 -1
- package/dist/chunks/{MarkdownPreviewPanel-lqs6AsoN.js → MarkdownPreviewPanel-CBcPc7Wv.js} +2 -2
- package/dist/chunks/{MarkdownPreviewPanel-lqs6AsoN.js.map → MarkdownPreviewPanel-CBcPc7Wv.js.map} +1 -1
- package/dist/chunks/{MasterDetailLayout-B5uqvh98.js → MasterDetailLayout-ByIBpmkZ.js} +2 -2
- package/dist/chunks/{MasterDetailLayout-B5uqvh98.js.map → MasterDetailLayout-ByIBpmkZ.js.map} +1 -1
- package/dist/chunks/{McpSettingsPage-Cdej9Evi.js → McpSettingsPage-C5V_rj2V.js} +2 -2
- package/dist/chunks/{McpSettingsPage-Cdej9Evi.js.map → McpSettingsPage-C5V_rj2V.js.map} +1 -1
- package/dist/chunks/{MemberAssignmentSheet-AKvLbbYW.js → MemberAssignmentSheet-DL0fg1Yf.js} +2 -2
- package/dist/chunks/{MemberAssignmentSheet-AKvLbbYW.js.map → MemberAssignmentSheet-DL0fg1Yf.js.map} +1 -1
- package/dist/chunks/{MenuCommandPalette-ia0pSIFg.js → MenuCommandPalette-C2PvK3Gh.js} +2 -2
- package/dist/chunks/{MenuCommandPalette-ia0pSIFg.js.map → MenuCommandPalette-C2PvK3Gh.js.map} +1 -1
- package/dist/chunks/{MenusPage-Bh55bvKH.js → MenusPage-Bytd1HlW.js} +2 -2
- package/dist/chunks/{MenusPage-Bh55bvKH.js.map → MenusPage-Bytd1HlW.js.map} +1 -1
- package/dist/chunks/{MonacoPreviewPanel-CT_sjf7Z.js → MonacoPreviewPanel-BZrNIcFZ.js} +2 -2
- package/dist/chunks/{MonacoPreviewPanel-CT_sjf7Z.js.map → MonacoPreviewPanel-BZrNIcFZ.js.map} +1 -1
- package/dist/chunks/{NavListPanel-DMIUMh7q.js → NavListPanel-zwUDIYSP.js} +2 -2
- package/dist/chunks/{NavListPanel-DMIUMh7q.js.map → NavListPanel-zwUDIYSP.js.map} +1 -1
- package/dist/chunks/{OperationLogsPage-7XVfmhxP.js → OperationLogsPage-D2BQdGNp.js} +2 -2
- package/dist/chunks/{OperationLogsPage-7XVfmhxP.js.map → OperationLogsPage-D2BQdGNp.js.map} +1 -1
- package/dist/chunks/{OperationLogsTable-gp-WZxiF.js → OperationLogsTable-DaaON4QR.js} +3 -3
- package/dist/chunks/{OperationLogsTable-gp-WZxiF.js.map → OperationLogsTable-DaaON4QR.js.map} +1 -1
- package/dist/chunks/{PDFPreviewPanel-CyfhyWav.js → PDFPreviewPanel-CMmnWBKW.js} +3 -3
- package/dist/chunks/{PDFPreviewPanel-CyfhyWav.js.map → PDFPreviewPanel-CMmnWBKW.js.map} +1 -1
- package/dist/chunks/{PositionsPage-Bwua1vNV.js → PositionsPage-CBZITssT.js} +2 -2
- package/dist/chunks/{PositionsPage-Bwua1vNV.js.map → PositionsPage-CBZITssT.js.map} +1 -1
- package/dist/chunks/{PreferencesSheetBody-C80D3dOM.js → PreferencesSheetBody-B0poTPEA.js} +2 -2
- package/dist/chunks/{PreferencesSheetBody-C80D3dOM.js.map → PreferencesSheetBody-B0poTPEA.js.map} +1 -1
- package/dist/chunks/{ProfilePage-DeTw-59a.js → ProfilePage-DLhacdWt.js} +2 -2
- package/dist/chunks/{ProfilePage-DeTw-59a.js.map → ProfilePage-DLhacdWt.js.map} +1 -1
- package/dist/chunks/{ProjectInfoPage-Bqn3gfXa.js → ProjectInfoPage-CJpGxpu5.js} +2 -2
- package/dist/chunks/{ProjectInfoPage-Bqn3gfXa.js.map → ProjectInfoPage-CJpGxpu5.js.map} +1 -1
- package/dist/chunks/{RelationPanel-Bio-ig-l.js → RelationPanel-BsbfEDo2.js} +2 -2
- package/dist/chunks/{RelationPanel-Bio-ig-l.js.map → RelationPanel-BsbfEDo2.js.map} +1 -1
- package/dist/chunks/{RolesPage-fwUSs2HR.js → RolesPage-46dzdiah.js} +2 -2
- package/dist/chunks/{RolesPage-fwUSs2HR.js.map → RolesPage-46dzdiah.js.map} +1 -1
- package/dist/chunks/{SessionConflictModal-Dw4opoNP.js → SessionConflictModal-Bm38eExL.js} +2 -2
- package/dist/chunks/{SessionConflictModal-Dw4opoNP.js.map → SessionConflictModal-Bm38eExL.js.map} +1 -1
- package/dist/chunks/SettingModuleDetail-BjxUJeH5.js +17 -0
- package/dist/chunks/SettingModuleDetail-BjxUJeH5.js.map +1 -0
- package/dist/chunks/{SettingsPage-Cy5-q-P6.js → SettingsPage-C32Vuizm.js} +2 -2
- package/dist/chunks/{SettingsPage-Cy5-q-P6.js.map → SettingsPage-C32Vuizm.js.map} +1 -1
- package/dist/chunks/{StatCard-BROG4NSp.js → StatCard-CRPfkSBY.js} +2 -2
- package/dist/chunks/{StatCard-BROG4NSp.js.map → StatCard-CRPfkSBY.js.map} +1 -1
- package/dist/chunks/{UserGroupsPage-CsTBkUPy.js → UserGroupsPage-08G5MdGm.js} +2 -2
- package/dist/chunks/{UserGroupsPage-CsTBkUPy.js.map → UserGroupsPage-08G5MdGm.js.map} +1 -1
- package/dist/chunks/{UserLogsPanels-3u8Z93YU.js → UserLogsPanels-nbIrMym9.js} +2 -2
- package/dist/chunks/{UserLogsPanels-3u8Z93YU.js.map → UserLogsPanels-nbIrMym9.js.map} +1 -1
- package/dist/chunks/{UserTransferSelect-ChLj4EkS.js → UserTransferSelect-C8betaWG.js} +2 -2
- package/dist/chunks/{UserTransferSelect-ChLj4EkS.js.map → UserTransferSelect-C8betaWG.js.map} +1 -1
- package/dist/chunks/{UsersPage-CfNnQJi4.js → UsersPage-BjTiNEqF.js} +2 -2
- package/dist/chunks/{UsersPage-CfNnQJi4.js.map → UsersPage-BjTiNEqF.js.map} +1 -1
- package/dist/chunks/{browser-BKLM0ThC-D0TgzKTC.js → browser-BKLM0ThC-Cp7Gi4-F.js} +1 -1
- package/dist/chunks/{code-BkkeN2fd.js → code-LswxAr98.js} +1 -1
- package/dist/chunks/{direct-engine-m32m22nx.js → direct-engine-Dv_6v4sx.js} +1 -1
- package/dist/chunks/{html-BGNWR_Bp.js → html-BokjxlLb.js} +1 -1
- package/dist/chunks/{line-CsTeuEcK.js → line-Bqh6atHH.js} +1 -1
- package/dist/chunks/{lrc-D6gjnGZ5.js → lrc-T5e1svZG.js} +1 -1
- package/dist/chunks/{markdown-BglUe9j8.js → markdown-BpWokN1s.js} +1 -1
- package/dist/chunks/{patch-C97Yl3jr.js → patch-BYVX5C9G.js} +1 -1
- package/dist/chunks/{worker-engine-B7_3qQVS.js → worker-engine-CtUAeI4G.js} +1 -1
- package/dist/index.js +1 -1
- package/dist/{src-DAkFn9SG.js → src-D6UlLiVN.js} +2 -2
- package/dist/{src-DAkFn9SG.js.map → src-D6UlLiVN.js.map} +1 -1
- package/package.json +9 -9
- package/dist/chunks/ApiTokensPage-DiRMgViD.js +0 -2
- package/dist/chunks/ApiTokensPage-DiRMgViD.js.map +0 -1
- package/dist/chunks/EntityContextRuntime-C9q95WDf.js +0 -1
- package/dist/chunks/SettingModuleDetail-I9CSJ-fh.js +0 -17
- package/dist/chunks/SettingModuleDetail-I9CSJ-fh.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-Bruge11p.js";import{H as t,Ht as n,M as r,R as i,T as a,V as o,Vt as s,b as c,bt as l,f as u,m as d,xt as f}from"./clipboard-dpqHdCyy.js";import{i as p}from"./feedback-B1UL2ETz.js";import{n as m,t as h}from"./MasterDetailLayout-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-Bruge11p.js";import{H as t,Ht as n,M as r,R as i,T as a,V as o,Vt as s,b as c,bt as l,f as u,m as d,xt as f}from"./clipboard-dpqHdCyy.js";import{i as p}from"./feedback-B1UL2ETz.js";import{n as m,t as h}from"./MasterDetailLayout-ByIBpmkZ.js";import{i as g,s as _}from"./toolbar-controls-CrM8hKZg.js";import{n as v,t as y}from"./info-CMEL1G7n.js";import{n as b,t as ee}from"./monitor-DjHEaSak.js";import{n as te,t as x}from"./save-CSrPWJxC.js";import{n as S,t as C}from"./shield-Cf8xmgtJ.js";import{n as w,r as T}from"./NavListPanel-zwUDIYSP.js";import{i as E,n as D,r as ne,t as re}from"./useSectionSelection-DBggfIoz.js";import{useEffect as ie,useRef as ae,useState as oe}from"react";import{Fragment as O,jsx as k,jsxs as A}from"react/jsx-runtime";import{GoaError as j}from"@fudanda/client";import{usePermission as M}from"@fudanda/admin-antd/core/hooks/usePermission";import{useSaveSettings as N,useSettings as P}from"@fudanda/admin-antd/core/hooks/queries/settings";import{SESSION_CONCURRENCY_SCOPES as F,SESSION_CONCURRENCY_SCOPE_LABELS as I,SESSION_EXCEED_ACTIONS as L,SESSION_EXCEED_ACTION_LABELS as R}from"@fudanda/client/identity";import{formatSessionPolicyHint as z}from"@fudanda/client/settings";import{ApiIdentitySecuritySettingsSchema as B}from"@fudanda/client/api/settings";import{foundationSettingDefaults as V}from"@fudanda/client/settings/foundation";var H,U;function W(){return(W=e((()=>{
|
|
2
2
|
/**
|
|
3
3
|
* @license lucide-react v1.67.0 - ISC
|
|
4
4
|
*
|
|
@@ -6,4 +6,4 @@ import{n as e}from"./rolldown-runtime-Bruge11p.js";import{H as t,Ht as n,M as r,
|
|
|
6
6
|
* See the LICENSE file in the root directory of this source tree.
|
|
7
7
|
*/
|
|
8
8
|
f(),H={name:`key`,size:24,node:[[`path`,{d:`m2 21 9.6-9.6`,key:`9l79m3`}],[`path`,{d:`m7.5 15.5 2.3 2.3a1 1 0 0 1 0 1.4l-2.1 2.1a1 1 0 0 1-1.4 0L4 19`,key:`fw8biw`}],[`circle`,{cx:`15.5`,cy:`7.5`,r:`5.5`,key:`4wxmhb`}]]},H.node,U=l(H)})))()}function G(e){return e<=0?`unlimited`:e===1?`single`:`limited`}function K({supportsRenewal:e}){let r=o(),{values:a}=t(),c=a?.session,l={maxSessions:c?.maxSessions??0,scope:c?.scope??`global`,exceedAction:c?.exceedAction??`kick-oldest`},u=G(l.maxSessions),d=u===`unlimited`,f=z(l),p=e=>{let t=e===`unlimited`?0:e===`single`?1:Math.max(l.maxSessions,q);r.setValue(`session.maxSessions`,t)};return/* @__PURE__ */ A(O,{children:[e&&/* @__PURE__ */ A(O,{children:[/* @__PURE__ */ k(i.Switch,{field:`session.autoRenew`,label:`自动续期`,extraText:`应用在线时,在会话临近到期时自动续期;达到最长登录期限后需重新登录`}),/* @__PURE__ */ k(i.InputNumber,{field:`session.maxLifetimeDays`,label:`最长登录期限`,min:1,max:365,precision:0,suffix:`天`,style:{width:160},rules:[{required:!0,type:`integer`,min:1,max:365,message:`请输入 1–365 之间的整数天数`}],extraText:`从首次登录开始计算,范围为 1–365 天`})]}),/* @__PURE__ */ k(i.Slot,{label:`同时在线`,children:/* @__PURE__ */ A(`div`,{className:`session-policy-limit`,children:[/* @__PURE__ */ A(n,{value:u,onChange:e=>p(e.target.value),"aria-label":`同时在线上限`,children:[/* @__PURE__ */ k(s,{value:`unlimited`,children:`不限制`}),/* @__PURE__ */ k(s,{value:`single`,children:`仅一处登录`}),/* @__PURE__ */ k(s,{value:`limited`,children:`最多 N 处`})]}),/* @__PURE__ */ k(i.InputNumber,{field:`session.maxSessions`,noLabel:!0,min:u===`limited`?2:0,max:20,style:{width:120},fieldStyle:{padding:0},fieldClassName:u===`limited`?void 0:`session-policy-limit-hidden`,suffix:`处`,"aria-label":`同时在线上限(处)`})]})}),/* @__PURE__ */ k(i.Select,{field:`session.scope`,label:`统计范围`,disabled:d,style:{width:260},optionList:F.map(e=>({value:e,label:I[e]})),extraText:`按终端分别计算时,网页、移动审批、桌面端各占一份名额`}),/* @__PURE__ */ k(i.RadioGroup,{field:`session.exceedAction`,label:`超限处理`,disabled:d,options:L.map(e=>({value:e,label:R[e]})),extraText:`拒绝新登录时,用户可在登录页选择下线其它设备后继续登录`}),/* @__PURE__ */ k(i.Slot,{label:` `,children:/* @__PURE__ */ A(`div`,{className:`session-policy-preview`,role:`status`,children:[/* @__PURE__ */ k(y,{size:14,"aria-hidden":!0}),/* @__PURE__ */ k(`span`,{children:f})]})})]})}var q;function J(){return(J=e((()=>{r(),v(),q=3})))()}function Y(e){return{...e,session:{...Q.session,...e.session}}}function se(){let{hasPermission:e}=M(),t=e(`system:identity-security:manage`),n=D(Z,`password`),r=n.active,o=ae(null),[s,l]=oe(Q),f=P(`identitySecurity`,t),m=N(`identitySecurity`),_=f.data?.effective.session,v=_?.autoRenew!==void 0&&_?.maxLifetimeDays!==void 0;ie(()=>{f.data&&l(Y(B.parse(f.data.effective)))},[f.data]);async function y(){if(!o.current||!f.data)return;let e;try{e=await o.current?.validate()}catch{let e=o.current.getFieldsError().find(({errors:e})=>e.length>0)?.name[0];e===`password`?n.select(`password`):e===`loginChallenge`?n.select(`login-challenge`):e===`session`&&n.select(`session`);return}try{let t=v?e:{...e,session:{maxSessions:e.session.maxSessions,scope:e.session.scope,exceedAction:e.session.exceedAction}},n=await m.mutateAsync({body:{version:f.data?.version??0,data:t}});l(Y(B.parse(n.effective))),p.success(`身份安全策略已保存`)}catch(e){e instanceof j&&e.status===409&&f.refetch()}}return t?/* @__PURE__ */ k(`div`,{className:`page-container page-container--stretch`,children:/* @__PURE__ */ k(h,{defaultSize:260,minSize:200,maxSize:400,persistKey:`identity-security`,style:{flex:1,minHeight:0,overflow:`hidden`},showDetail:r!==null,onBack:n.back,onResponsiveChange:n.responsiveChange,master:/* @__PURE__ */ k(w,{title:`安全模块`,rawBody:!0,children:/* @__PURE__ */ k(ne,{sections:X,active:r,onSelect:n.select})}),detail:/* @__PURE__ */ A(O,{children:[/* @__PURE__ */ k(h.Header,{extra:/* @__PURE__ */ A(a,{children:[/* @__PURE__ */ k(d,{type:`primary`,icon:/* @__PURE__ */ k(x,{size:14}),loading:m.isPending,disabled:!f.data||f.isFetching,onClick:y,children:`保存`}),/* @__PURE__ */ k(g,{onClick:()=>void f.refetch(),loading:f.isFetching,children:`重载`})]}),children:/* @__PURE__ */ k(`strong`,{children:X.find(e=>e.key===r)?.title??`身份安全`})}),/* @__PURE__ */ A(h.Body,{padding:24,children:[f.error&&/* @__PURE__ */ k(u,{type:`danger`,description:`身份安全策略加载失败,请重载后重试。`}),/* @__PURE__ */ A(i,{initValues:s,getFormApi:e=>{o.current=e},disabled:!f.data||m.isPending,labelPosition:`left`,labelWidth:150,style:{maxWidth:760},children:[/* @__PURE__ */ A(`section`,{hidden:r!==`password`,children:[/* @__PURE__ */ k(i.InputNumber,{field:`password.minLength`,label:`最小长度`,min:6,max:64}),/* @__PURE__ */ k(i.Switch,{field:`password.requireUppercase`,label:`必须包含大写`}),/* @__PURE__ */ k(i.Switch,{field:`password.requireSpecialChar`,label:`必须包含特殊字符`}),/* @__PURE__ */ k(i.Switch,{field:`password.expiryEnabled`,label:`启用密码过期`}),/* @__PURE__ */ k(i.InputNumber,{field:`password.expiryDays`,label:`过期天数`,min:1,max:3650})]}),/* @__PURE__ */ A(`section`,{hidden:r!==`login-challenge`,children:[/* @__PURE__ */ k(i.InputNumber,{field:`loginChallenge.maxAttemptsPerSource`,label:`单来源失败阈值`,min:1,max:1e3,extraText:`同一账号 + 同一 IP 的失败次数,达到后该来源需先过验证码`}),/* @__PURE__ */ k(i.InputNumber,{field:`loginChallenge.sourceLimit`,label:`多来源失败阈值`,min:1,max:100,extraText:`窗口内失败来源 IP 数,达到后该账号所有来源都需验证码(防分布式猜解)`}),/* @__PURE__ */ k(i.InputNumber,{field:`loginChallenge.windowMinutes`,label:`计数窗口(分钟)`,min:1,max:1440})]}),/* @__PURE__ */ k(`section`,{hidden:r!==`session`,children:/* @__PURE__ */ k(K,{supportsRenewal:v})})]},JSON.stringify(s))]})]})})}):/* @__PURE__ */ k(c,{description:`无访问权限`})}var X,Z,Q;function $(){return($=e((()=>{r(),W(),b(),te(),S(),m(),T(),E(),re(),_(),J(),X=[{key:`password`,title:`密码策略`,description:`密码强度与过期规则`,icon:U},{key:`login-challenge`,title:`登录失败防护`,description:`失败阈值与验证码防护`,icon:C},{key:`session`,title:`会话策略`,description:`登录状态与在线设备策略`,icon:ee}],Z=X.map(e=>e.key),Q=V.identitySecurity})))()}$();export{se as default};
|
|
9
|
-
//# sourceMappingURL=IdentitySecurityPage-
|
|
9
|
+
//# sourceMappingURL=IdentitySecurityPage-BjTKvr-O.js.map
|
package/dist/chunks/{IdentitySecurityPage-rDYX5ksX.js.map → IdentitySecurityPage-BjTKvr-O.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IdentitySecurityPage-rDYX5ksX.js","mappings":"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","names":["__iconData","createLucideIcon","modeOf","maxSessions","SessionPolicyFields","formApi","useFormApi","useFormState","draft","values","session","mode","unlimited","preview","formatSessionPolicyHint","changeMode","value","next","DEFAULT_LIMITED","_Fragment","supportsRenewal","Form","RadioGroup","Radio","SESSION_CONCURRENCY_SCOPES","SESSION_CONCURRENCY_SCOPE_LABELS","SESSION_EXCEED_ACTIONS","SESSION_EXCEED_ACTION_LABELS","Info","withSessionDefaults","policy","defaultPolicy","IdentitySecurityPage","usePermission","canManagePolicy","hasPermission","navigation","useSectionSelection","SECTION_KEYS","activeSection","useRef","setPolicy","useState","policyQuery","useSettings","savePolicyMutation","useSaveSettings","sessionPolicy","useEffect","identitySecuritySettingsSchema","handleSavePolicy","field","errors","data","saved","Toast","err","GoaError","MasterDetailLayout","NavListPanel","SectionNavigation","SECTIONS","Space","Button","Save","RefreshButton","section","Banner","api","Empty","Key","Shield","Monitor","foundationSettingDefaults"],"ignoreList":[0],"sources":["../../../../node_modules/lucide-react/dist/esm/icons/key.mjs","../../src/pages/system/identity-security/SessionPolicyFields.tsx","../../src/pages/system/identity-security/IdentitySecurityPage.tsx"],"sourcesContent":[null,"import { Form, RadioGroup, Radio, useFormApi, useFormState } from \"@/ui\";\nimport { Info } from 'lucide-react';\nimport { SESSION_CONCURRENCY_SCOPE_LABELS, SESSION_CONCURRENCY_SCOPES, SESSION_EXCEED_ACTION_LABELS, SESSION_EXCEED_ACTIONS } from '@fudanda/shared/identity';\nimport { formatSessionPolicyHint, type SessionConcurrencyPolicy } from '@fudanda/shared/settings';\ntype LimitMode = 'unlimited' | 'single' | 'limited';\n/** 「最多 N 处」的默认起点:从单处切过来时给一个有意义的 N,避免落在 0 / 1 上又变回别的模式 */\nconst DEFAULT_LIMITED = 3;\nfunction modeOf(maxSessions: number): LimitMode {\n if (maxSessions <= 0)\n return 'unlimited';\n return maxSessions === 1 ? 'single' : 'limited';\n}\n/**\n * 身份安全 → 会话策略。渲染在 <Form> 内:同时在线用单选表达「不限 / 单处 / 最多 N 处」,\n * 落到同一个 session.maxSessions 字段;不限制时范围与超限处理置灰。\n */\nexport function SessionPolicyFields({ supportsRenewal }: { supportsRenewal: boolean }) {\n const formApi = useFormApi();\n const { values } = useFormState<{\n session?: Partial<SessionConcurrencyPolicy>;\n }>();\n const draft = values?.session;\n const session: SessionConcurrencyPolicy = {\n maxSessions: draft?.maxSessions ?? 0,\n scope: draft?.scope ?? 'global',\n exceedAction: draft?.exceedAction ?? 'kick-oldest',\n };\n const mode = modeOf(session.maxSessions);\n const unlimited = mode === 'unlimited';\n const preview = formatSessionPolicyHint(session);\n const changeMode = (next: LimitMode) => {\n const value = next === 'unlimited' ? 0 : next === 'single' ? 1 : Math.max(session.maxSessions, DEFAULT_LIMITED);\n formApi.setValue('session.maxSessions', value);\n };\n return (<>\n {supportsRenewal && <>\n <Form.Switch field=\"session.autoRenew\" label=\"自动续期\" extraText=\"应用在线时,在会话临近到期时自动续期;达到最长登录期限后需重新登录\"/>\n <Form.InputNumber field=\"session.maxLifetimeDays\" label=\"最长登录期限\" min={1} max={365} precision={0} suffix=\"天\" style={{ width: 160 }} rules={[{ required: true, type: 'integer', min: 1, max: 365, message: '请输入 1–365 之间的整数天数' }]} extraText=\"从首次登录开始计算,范围为 1–365 天\"/>\n </>}\n <Form.Slot label=\"同时在线\">\n <div className=\"session-policy-limit\">\n <RadioGroup value={mode} onChange={(e) => changeMode(e.target.value as LimitMode)} aria-label=\"同时在线上限\">\n <Radio value=\"unlimited\">不限制</Radio>\n <Radio value=\"single\">仅一处登录</Radio>\n <Radio value=\"limited\">最多 N 处</Radio>\n </RadioGroup>\n {/* 常驻挂载:Semi Field 卸载会连带移除表单值,切回「不限 / 单处」时 maxSessions 必须仍在提交体里;非 N 处模式仅隐藏 */}\n <Form.InputNumber field=\"session.maxSessions\" noLabel min={mode === 'limited' ? 2 : 0} max={20} style={{ width: 120 }} fieldStyle={{ padding: 0 }} fieldClassName={mode === 'limited' ? undefined : 'session-policy-limit-hidden'} suffix=\"处\" aria-label=\"同时在线上限(处)\"/>\n </div>\n </Form.Slot>\n <Form.Select field=\"session.scope\" label=\"统计范围\" disabled={unlimited} style={{ width: 260 }} optionList={SESSION_CONCURRENCY_SCOPES.map((value) => ({ value, label: SESSION_CONCURRENCY_SCOPE_LABELS[value] }))} extraText=\"按终端分别计算时,网页、移动审批、桌面端各占一份名额\"/>\n <Form.RadioGroup field=\"session.exceedAction\" label=\"超限处理\" disabled={unlimited} options={SESSION_EXCEED_ACTIONS.map((value) => ({ value, label: SESSION_EXCEED_ACTION_LABELS[value] }))} extraText=\"拒绝新登录时,用户可在登录页选择下线其它设备后继续登录\"/>\n <Form.Slot label=\" \">\n <div className=\"session-policy-preview\" role=\"status\">\n <Info size={14} aria-hidden/>\n <span>{preview}</span>\n </div>\n </Form.Slot>\n </>);\n}\n","import { useEffect, useRef, useState } from 'react';\nimport { Banner, Button, Empty, Form, Space, Toast } from \"@/ui\";\nimport type { FormApi } from \"@/ui\";\nimport { Key, Monitor, Save, Shield } from 'lucide-react';\nimport { ApiIdentitySecuritySettingsSchema as identitySecuritySettingsSchema, type ApiIdentitySecuritySettings as IdentitySecuritySettings } from '@fudanda/shared/api/settings';\nimport { foundationSettingDefaults } from '@fudanda/shared/settings/foundation';\nimport { MasterDetailLayout } from '@/components/MasterDetailLayout';\nimport { NavListPanel } from '@/components/NavListPanel';\nimport { SectionNavigation } from '@/components/SectionNavigation';\nimport { useSectionSelection } from '@/hooks/useSectionSelection';\n\nimport { usePermission } from \"@fudanda/react-core/hooks/usePermission\";\nimport { useSaveSettings, useSettings } from \"@fudanda/react-core/hooks/queries/settings\";\nimport { GoaError } from '@fudanda/client';\nimport { RefreshButton } from \"@/components/toolbar-controls\";\nimport { SessionPolicyFields } from \"@/pages/system/identity-security/SessionPolicyFields\";\nimport \"@/pages/system/identity-security/IdentitySecurityPage.css\";\nconst SECTIONS = [\n { key: 'password', title: '密码策略', description: '密码强度与过期规则', icon: Key },\n { key: 'login-challenge', title: '登录失败防护', description: '失败阈值与验证码防护', icon: Shield },\n { key: 'session', title: '会话策略', description: '登录状态与在线设备策略', icon: Monitor },\n] as const;\nconst SECTION_KEYS = SECTIONS.map(section => section.key);\n// 默认值以 shared schema 为唯一真相(通用设置页与服务端同源)\nconst defaultPolicy: IdentitySecuritySettings = foundationSettingDefaults.identitySecurity;\nfunction withSessionDefaults(policy: IdentitySecuritySettings): IdentitySecuritySettings {\n return { ...policy, session: { ...defaultPolicy.session, ...policy.session } };\n}\nexport default function IdentitySecurityPage() {\n const { hasPermission } = usePermission();\n const canManagePolicy = hasPermission('system:identity-security:manage');\n const navigation = useSectionSelection(SECTION_KEYS, 'password');\n const activeSection = navigation.active;\n // useEditModal 例外:页面级全局配置表单(身份安全策略),保存后不关闭;表单 key 跟随策略值重挂载\n const formApi = useRef<FormApi | null>(null);\n const [policy, setPolicy] = useState<IdentitySecuritySettings>(defaultPolicy);\n // 页面级全局配置表单(无弹窗、保存后不关闭),不走 useEditModal;策略由运行时设置 identitySecurity 模块承载\n const policyQuery = useSettings('identitySecurity', canManagePolicy);\n const savePolicyMutation = useSaveSettings('identitySecurity');\n const sessionPolicy = policyQuery.data?.effective.session;\n const supportsRenewal = sessionPolicy?.autoRenew !== undefined && sessionPolicy?.maxLifetimeDays !== undefined;\n useEffect(() => {\n if (policyQuery.data)\n setPolicy(withSessionDefaults(identitySecuritySettingsSchema.parse(policyQuery.data.effective)));\n }, [policyQuery.data]);\n async function handleSavePolicy() {\n if (!formApi.current || !policyQuery.data) return;\n let values: IdentitySecuritySettings;\n try {\n values = await formApi.current?.validate() as IdentitySecuritySettings;\n }\n catch {\n const field = formApi.current.getFieldsError().find(({ errors }) => errors.length > 0)?.name[0];\n if (field === 'password') navigation.select('password');\n else if (field === 'loginChallenge') navigation.select('login-challenge');\n else if (field === 'session') navigation.select('session');\n return;\n }\n try {\n const data = supportsRenewal ? values : {\n ...values,\n session: { maxSessions: values.session.maxSessions, scope: values.session.scope, exceedAction: values.session.exceedAction },\n };\n const saved = await savePolicyMutation.mutateAsync({ body: { version: policyQuery.data?.version ?? 0, data } });\n setPolicy(withSessionDefaults(identitySecuritySettingsSchema.parse(saved.effective)));\n Toast.success('身份安全策略已保存');\n }\n catch (err) {\n // 409 = 他人已修改:请求层已提示,重载最新值供比对后再保存\n if (err instanceof GoaError && err.status === 409)\n void policyQuery.refetch();\n }\n }\n if (!canManagePolicy)\n return <Empty description=\"无访问权限\"/>;\n return (<div className=\"page-container page-container--stretch\">\n <MasterDetailLayout defaultSize={260} minSize={200} maxSize={400} persistKey=\"identity-security\"\n style={{ flex: 1, minHeight: 0, overflow: 'hidden' }} showDetail={activeSection !== null}\n onBack={navigation.back} onResponsiveChange={navigation.responsiveChange}\n master={<NavListPanel title=\"安全模块\" rawBody>\n <SectionNavigation sections={SECTIONS} active={activeSection} onSelect={navigation.select} />\n </NavListPanel>}\n detail={<>\n <MasterDetailLayout.Header extra={<Space>\n <Button type=\"primary\" icon={<Save size={14}/>} loading={savePolicyMutation.isPending} disabled={!policyQuery.data || policyQuery.isFetching} onClick={handleSavePolicy}>保存</Button>\n <RefreshButton onClick={() => void policyQuery.refetch()} loading={policyQuery.isFetching}>重载</RefreshButton>\n </Space>}>\n <strong>{SECTIONS.find(section => section.key === activeSection)?.title ?? '身份安全'}</strong>\n </MasterDetailLayout.Header>\n <MasterDetailLayout.Body padding={24}>\n {policyQuery.error && <Banner type=\"danger\" description=\"身份安全策略加载失败,请重载后重试。\" />}\n <Form key={JSON.stringify(policy)} initValues={policy} getFormApi={(api) => { formApi.current = api; }} disabled={!policyQuery.data || savePolicyMutation.isPending} labelPosition=\"left\" labelWidth={150} style={{ maxWidth: 760 }}>\n <section hidden={activeSection !== 'password'}>\n <Form.InputNumber field=\"password.minLength\" label=\"最小长度\" min={6} max={64}/>\n <Form.Switch field=\"password.requireUppercase\" label=\"必须包含大写\"/>\n <Form.Switch field=\"password.requireSpecialChar\" label=\"必须包含特殊字符\"/>\n <Form.Switch field=\"password.expiryEnabled\" label=\"启用密码过期\"/>\n <Form.InputNumber field=\"password.expiryDays\" label=\"过期天数\" min={1} max={3650}/>\n </section>\n\n {/* 登录失败不再锁定账号:达到阈值只要求验证码,真正的用户凭正确密码 + 验证码仍可登录 */}\n <section hidden={activeSection !== 'login-challenge'}>\n <Form.InputNumber field=\"loginChallenge.maxAttemptsPerSource\" label=\"单来源失败阈值\" min={1} max={1000} extraText=\"同一账号 + 同一 IP 的失败次数,达到后该来源需先过验证码\"/>\n <Form.InputNumber field=\"loginChallenge.sourceLimit\" label=\"多来源失败阈值\" min={1} max={100} extraText=\"窗口内失败来源 IP 数,达到后该账号所有来源都需验证码(防分布式猜解)\"/>\n <Form.InputNumber field=\"loginChallenge.windowMinutes\" label=\"计数窗口(分钟)\" min={1} max={1440}/>\n </section>\n <section hidden={activeSection !== 'session'}>\n <SessionPolicyFields supportsRenewal={supportsRenewal} />\n </section>\n </Form>\n </MasterDetailLayout.Body>\n </>} />\n </div>);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"IdentitySecurityPage-BjTKvr-O.js","mappings":"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","names":["__iconData","createLucideIcon","modeOf","maxSessions","SessionPolicyFields","formApi","useFormApi","useFormState","draft","values","session","mode","unlimited","preview","formatSessionPolicyHint","changeMode","value","next","DEFAULT_LIMITED","_Fragment","supportsRenewal","Form","RadioGroup","Radio","SESSION_CONCURRENCY_SCOPES","SESSION_CONCURRENCY_SCOPE_LABELS","SESSION_EXCEED_ACTIONS","SESSION_EXCEED_ACTION_LABELS","Info","withSessionDefaults","policy","defaultPolicy","IdentitySecurityPage","usePermission","canManagePolicy","hasPermission","navigation","useSectionSelection","SECTION_KEYS","activeSection","useRef","setPolicy","useState","policyQuery","useSettings","savePolicyMutation","useSaveSettings","sessionPolicy","useEffect","identitySecuritySettingsSchema","handleSavePolicy","field","errors","data","saved","Toast","err","GoaError","MasterDetailLayout","NavListPanel","SectionNavigation","SECTIONS","Space","Button","Save","RefreshButton","section","Banner","api","Empty","Key","Shield","Monitor","foundationSettingDefaults"],"ignoreList":[0],"sources":["../../../../node_modules/lucide-react/dist/esm/icons/key.mjs","../../src/pages/system/identity-security/SessionPolicyFields.tsx","../../src/pages/system/identity-security/IdentitySecurityPage.tsx"],"sourcesContent":[null,"import { Form, RadioGroup, Radio, useFormApi, useFormState } from \"@/ui\";\nimport { Info } from 'lucide-react';\nimport { SESSION_CONCURRENCY_SCOPE_LABELS, SESSION_CONCURRENCY_SCOPES, SESSION_EXCEED_ACTION_LABELS, SESSION_EXCEED_ACTIONS } from '@fudanda/shared/identity';\nimport { formatSessionPolicyHint, type SessionConcurrencyPolicy } from '@fudanda/shared/settings';\ntype LimitMode = 'unlimited' | 'single' | 'limited';\n/** 「最多 N 处」的默认起点:从单处切过来时给一个有意义的 N,避免落在 0 / 1 上又变回别的模式 */\nconst DEFAULT_LIMITED = 3;\nfunction modeOf(maxSessions: number): LimitMode {\n if (maxSessions <= 0)\n return 'unlimited';\n return maxSessions === 1 ? 'single' : 'limited';\n}\n/**\n * 身份安全 → 会话策略。渲染在 <Form> 内:同时在线用单选表达「不限 / 单处 / 最多 N 处」,\n * 落到同一个 session.maxSessions 字段;不限制时范围与超限处理置灰。\n */\nexport function SessionPolicyFields({ supportsRenewal }: { supportsRenewal: boolean }) {\n const formApi = useFormApi();\n const { values } = useFormState<{\n session?: Partial<SessionConcurrencyPolicy>;\n }>();\n const draft = values?.session;\n const session: SessionConcurrencyPolicy = {\n maxSessions: draft?.maxSessions ?? 0,\n scope: draft?.scope ?? 'global',\n exceedAction: draft?.exceedAction ?? 'kick-oldest',\n };\n const mode = modeOf(session.maxSessions);\n const unlimited = mode === 'unlimited';\n const preview = formatSessionPolicyHint(session);\n const changeMode = (next: LimitMode) => {\n const value = next === 'unlimited' ? 0 : next === 'single' ? 1 : Math.max(session.maxSessions, DEFAULT_LIMITED);\n formApi.setValue('session.maxSessions', value);\n };\n return (<>\n {supportsRenewal && <>\n <Form.Switch field=\"session.autoRenew\" label=\"自动续期\" extraText=\"应用在线时,在会话临近到期时自动续期;达到最长登录期限后需重新登录\"/>\n <Form.InputNumber field=\"session.maxLifetimeDays\" label=\"最长登录期限\" min={1} max={365} precision={0} suffix=\"天\" style={{ width: 160 }} rules={[{ required: true, type: 'integer', min: 1, max: 365, message: '请输入 1–365 之间的整数天数' }]} extraText=\"从首次登录开始计算,范围为 1–365 天\"/>\n </>}\n <Form.Slot label=\"同时在线\">\n <div className=\"session-policy-limit\">\n <RadioGroup value={mode} onChange={(e) => changeMode(e.target.value as LimitMode)} aria-label=\"同时在线上限\">\n <Radio value=\"unlimited\">不限制</Radio>\n <Radio value=\"single\">仅一处登录</Radio>\n <Radio value=\"limited\">最多 N 处</Radio>\n </RadioGroup>\n {/* 常驻挂载:Semi Field 卸载会连带移除表单值,切回「不限 / 单处」时 maxSessions 必须仍在提交体里;非 N 处模式仅隐藏 */}\n <Form.InputNumber field=\"session.maxSessions\" noLabel min={mode === 'limited' ? 2 : 0} max={20} style={{ width: 120 }} fieldStyle={{ padding: 0 }} fieldClassName={mode === 'limited' ? undefined : 'session-policy-limit-hidden'} suffix=\"处\" aria-label=\"同时在线上限(处)\"/>\n </div>\n </Form.Slot>\n <Form.Select field=\"session.scope\" label=\"统计范围\" disabled={unlimited} style={{ width: 260 }} optionList={SESSION_CONCURRENCY_SCOPES.map((value) => ({ value, label: SESSION_CONCURRENCY_SCOPE_LABELS[value] }))} extraText=\"按终端分别计算时,网页、移动审批、桌面端各占一份名额\"/>\n <Form.RadioGroup field=\"session.exceedAction\" label=\"超限处理\" disabled={unlimited} options={SESSION_EXCEED_ACTIONS.map((value) => ({ value, label: SESSION_EXCEED_ACTION_LABELS[value] }))} extraText=\"拒绝新登录时,用户可在登录页选择下线其它设备后继续登录\"/>\n <Form.Slot label=\" \">\n <div className=\"session-policy-preview\" role=\"status\">\n <Info size={14} aria-hidden/>\n <span>{preview}</span>\n </div>\n </Form.Slot>\n </>);\n}\n","import { useEffect, useRef, useState } from 'react';\nimport { Banner, Button, Empty, Form, Space, Toast } from \"@/ui\";\nimport type { FormApi } from \"@/ui\";\nimport { Key, Monitor, Save, Shield } from 'lucide-react';\nimport { ApiIdentitySecuritySettingsSchema as identitySecuritySettingsSchema, type ApiIdentitySecuritySettings as IdentitySecuritySettings } from '@fudanda/shared/api/settings';\nimport { foundationSettingDefaults } from '@fudanda/shared/settings/foundation';\nimport { MasterDetailLayout } from '@/components/MasterDetailLayout';\nimport { NavListPanel } from '@/components/NavListPanel';\nimport { SectionNavigation } from '@/components/SectionNavigation';\nimport { useSectionSelection } from '@/hooks/useSectionSelection';\n\nimport { usePermission } from \"@fudanda/react-core/hooks/usePermission\";\nimport { useSaveSettings, useSettings } from \"@fudanda/react-core/hooks/queries/settings\";\nimport { GoaError } from '@fudanda/client';\nimport { RefreshButton } from \"@/components/toolbar-controls\";\nimport { SessionPolicyFields } from \"@/pages/system/identity-security/SessionPolicyFields\";\nimport \"@/pages/system/identity-security/IdentitySecurityPage.css\";\nconst SECTIONS = [\n { key: 'password', title: '密码策略', description: '密码强度与过期规则', icon: Key },\n { key: 'login-challenge', title: '登录失败防护', description: '失败阈值与验证码防护', icon: Shield },\n { key: 'session', title: '会话策略', description: '登录状态与在线设备策略', icon: Monitor },\n] as const;\nconst SECTION_KEYS = SECTIONS.map(section => section.key);\n// 默认值以 shared schema 为唯一真相(通用设置页与服务端同源)\nconst defaultPolicy: IdentitySecuritySettings = foundationSettingDefaults.identitySecurity;\nfunction withSessionDefaults(policy: IdentitySecuritySettings): IdentitySecuritySettings {\n return { ...policy, session: { ...defaultPolicy.session, ...policy.session } };\n}\nexport default function IdentitySecurityPage() {\n const { hasPermission } = usePermission();\n const canManagePolicy = hasPermission('system:identity-security:manage');\n const navigation = useSectionSelection(SECTION_KEYS, 'password');\n const activeSection = navigation.active;\n // useEditModal 例外:页面级全局配置表单(身份安全策略),保存后不关闭;表单 key 跟随策略值重挂载\n const formApi = useRef<FormApi | null>(null);\n const [policy, setPolicy] = useState<IdentitySecuritySettings>(defaultPolicy);\n // 页面级全局配置表单(无弹窗、保存后不关闭),不走 useEditModal;策略由运行时设置 identitySecurity 模块承载\n const policyQuery = useSettings('identitySecurity', canManagePolicy);\n const savePolicyMutation = useSaveSettings('identitySecurity');\n const sessionPolicy = policyQuery.data?.effective.session;\n const supportsRenewal = sessionPolicy?.autoRenew !== undefined && sessionPolicy?.maxLifetimeDays !== undefined;\n useEffect(() => {\n if (policyQuery.data)\n setPolicy(withSessionDefaults(identitySecuritySettingsSchema.parse(policyQuery.data.effective)));\n }, [policyQuery.data]);\n async function handleSavePolicy() {\n if (!formApi.current || !policyQuery.data) return;\n let values: IdentitySecuritySettings;\n try {\n values = await formApi.current?.validate() as IdentitySecuritySettings;\n }\n catch {\n const field = formApi.current.getFieldsError().find(({ errors }) => errors.length > 0)?.name[0];\n if (field === 'password') navigation.select('password');\n else if (field === 'loginChallenge') navigation.select('login-challenge');\n else if (field === 'session') navigation.select('session');\n return;\n }\n try {\n const data = supportsRenewal ? values : {\n ...values,\n session: { maxSessions: values.session.maxSessions, scope: values.session.scope, exceedAction: values.session.exceedAction },\n };\n const saved = await savePolicyMutation.mutateAsync({ body: { version: policyQuery.data?.version ?? 0, data } });\n setPolicy(withSessionDefaults(identitySecuritySettingsSchema.parse(saved.effective)));\n Toast.success('身份安全策略已保存');\n }\n catch (err) {\n // 409 = 他人已修改:请求层已提示,重载最新值供比对后再保存\n if (err instanceof GoaError && err.status === 409)\n void policyQuery.refetch();\n }\n }\n if (!canManagePolicy)\n return <Empty description=\"无访问权限\"/>;\n return (<div className=\"page-container page-container--stretch\">\n <MasterDetailLayout defaultSize={260} minSize={200} maxSize={400} persistKey=\"identity-security\"\n style={{ flex: 1, minHeight: 0, overflow: 'hidden' }} showDetail={activeSection !== null}\n onBack={navigation.back} onResponsiveChange={navigation.responsiveChange}\n master={<NavListPanel title=\"安全模块\" rawBody>\n <SectionNavigation sections={SECTIONS} active={activeSection} onSelect={navigation.select} />\n </NavListPanel>}\n detail={<>\n <MasterDetailLayout.Header extra={<Space>\n <Button type=\"primary\" icon={<Save size={14}/>} loading={savePolicyMutation.isPending} disabled={!policyQuery.data || policyQuery.isFetching} onClick={handleSavePolicy}>保存</Button>\n <RefreshButton onClick={() => void policyQuery.refetch()} loading={policyQuery.isFetching}>重载</RefreshButton>\n </Space>}>\n <strong>{SECTIONS.find(section => section.key === activeSection)?.title ?? '身份安全'}</strong>\n </MasterDetailLayout.Header>\n <MasterDetailLayout.Body padding={24}>\n {policyQuery.error && <Banner type=\"danger\" description=\"身份安全策略加载失败,请重载后重试。\" />}\n <Form key={JSON.stringify(policy)} initValues={policy} getFormApi={(api) => { formApi.current = api; }} disabled={!policyQuery.data || savePolicyMutation.isPending} labelPosition=\"left\" labelWidth={150} style={{ maxWidth: 760 }}>\n <section hidden={activeSection !== 'password'}>\n <Form.InputNumber field=\"password.minLength\" label=\"最小长度\" min={6} max={64}/>\n <Form.Switch field=\"password.requireUppercase\" label=\"必须包含大写\"/>\n <Form.Switch field=\"password.requireSpecialChar\" label=\"必须包含特殊字符\"/>\n <Form.Switch field=\"password.expiryEnabled\" label=\"启用密码过期\"/>\n <Form.InputNumber field=\"password.expiryDays\" label=\"过期天数\" min={1} max={3650}/>\n </section>\n\n {/* 登录失败不再锁定账号:达到阈值只要求验证码,真正的用户凭正确密码 + 验证码仍可登录 */}\n <section hidden={activeSection !== 'login-challenge'}>\n <Form.InputNumber field=\"loginChallenge.maxAttemptsPerSource\" label=\"单来源失败阈值\" min={1} max={1000} extraText=\"同一账号 + 同一 IP 的失败次数,达到后该来源需先过验证码\"/>\n <Form.InputNumber field=\"loginChallenge.sourceLimit\" label=\"多来源失败阈值\" min={1} max={100} extraText=\"窗口内失败来源 IP 数,达到后该账号所有来源都需验证码(防分布式猜解)\"/>\n <Form.InputNumber field=\"loginChallenge.windowMinutes\" label=\"计数窗口(分钟)\" min={1} max={1440}/>\n </section>\n <section hidden={activeSection !== 'session'}>\n <SessionPolicyFields supportsRenewal={supportsRenewal} />\n </section>\n </Form>\n </MasterDetailLayout.Body>\n </>} />\n </div>);\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-Bruge11p.js";import{D as t,E as n,M as r,Pt as i,Ut as a,m as o,y as s}from"./clipboard-dpqHdCyy.js";import{i as c}from"./feedback-B1UL2ETz.js";import{$ as l,$n as u,$t as ee,A as d,Ai as f,An as te,Ar as p,At as m,Bn as h,Bt as g,Ci as _,Ct as v,D as ne,Dn as y,Dt as b,E as x,Ei as re,En as ie,Et as ae,F as oe,Fn as S,Fr as se,Ft as ce,G as le,Gr as ue,Gt as de,H as fe,Hr as pe,Ht as me,I as he,In as ge,Ir as C,It as _e,Jr as ve,Jt as ye,K as be,Kr as xe,Kt as Se,L as Ce,Lr as we,Lt as Te,M as Ee,Mn as De,Mr as Oe,Mt as ke,N as Ae,Nn as je,Nt as Me,O as Ne,Oi as Pe,On as Fe,Or as w,Ot as Ie,P as Le,Pn as Re,Pr as ze,Pt as Be,Q as Ve,Qn as He,Qt as Ue,R as We,Rn as Ge,Rt as Ke,Si as qe,Sn as Je,St as Ye,T as Xe,Ti as Ze,Tr as Qe,Tt as $e,U as et,Ut as tt,Vn as nt,Vr as rt,Vt as it,W as at,Wt as ot,Xt as st,Yr as ct,Yt as lt,Zt as ut,_ as dt,_i as T,_n as ft,_r as pt,_t as mt,ai as ht,an as gt,bn as _t,bt as vt,ci as yt,cn as bt,cr as xt,di as St,dn as E,dr as Ct,ei as D,en as wt,fi as Tt,fn as Et,gi as O,gn as Dt,hn as Ot,hr as kt,ii as At,in as jt,ir as Mt,j as Nt,ji as Pt,jn as Ft,jr as It,jt as Lt,k as Rt,ki as zt,kn as Bt,kr as Vt,kt as Ht,li as Ut,ln as Wt,lr as Gt,mn as Kt,mr as qt,n as Jt,ni as Yt,nn as k,oi as A,on as Xt,or as Zt,pi as Qt,pn as $t,q as en,qr as tn,qt as nn,r as rn,ri as an,rn as on,rr as sn,si as j,sn as cn,sr as ln,ti as un,tn as dn,ui as fn,un as pn,ur as mn,vi as hn,vn as gn,vr as _n,vt as vn,w as yn,wr as bn,wt as xn,xi as Sn,xn as Cn,xt as wn,y as Tn,yi as En,yn as Dn,yt as On,z as kn,zn as M,zt as An}from"./StatCard-BROG4NSp.js";import{n as jn,t as Mn}from"./list-wgUaW69x.js";import{n as Nn,t as Pn}from"./trash-Ay_Vtz4n.js";import{B as Fn,V as In}from"./App-CfQx7jWq.js";import{n as Ln,t as Rn}from"./AppModal-CVoUC2t3.js";import{Ar as zn,Dr as N,Er as P,Ft as Bn,Gn as Vn,Hn,In as F,Kn as Un,Lt as I,Nn as L,Nt as Wn,Or as R,Pt as z,Un as Gn,Wn as Kn,_ as qn,_r as Jn,b as Yn,cr as Xn,g as Zn,gr as Qn,jr as $n,kr as B,lr as er,x as tr}from"./chart-data-DI8rr6W3.js";import{a as nr,ar as rr,ir,ln as ar,o as or,un as V}from"./chart-renderer-Dl8qlg1n.js";import{useContext as sr,useState as cr}from"react";import{Fragment as H,jsx as U,jsxs as W}from"react/jsx-runtime";import lr from"dayjs";import{ToolbarSlotContext as ur}from"@fudanda/admin-antd/core/components/toolbar-slot-context";var dr;function fr(){return(fr=e((()=>{u(),F(),P(),dr=class extends He{constructor(){super(...arguments),this._getSeriesStyle=(e,t,n)=>{for(let n of L(t)){let t=this.series.getSeriesStyle(e)?.(n);if(!1!==t||n!==`fill`&&n!==`stroke`||(t=n===`fill`?this.series.getSeriesStyle(e)?.(`stroke`)?.[0]:this.series.getSeriesStyle(e)?.(`fill`)),N(t))return t}return n}}}})))()}var pr;function mr(){return(mr=e((()=>{nt(),Cn(),pr=Object.assign(Object.assign(Object.assign({},h),Je),{area:{name:`area`,type:`area`}})})))()}var hr;function gr(){return(gr=e((()=>{qt(),hr=()=>{kt(),pt(),_n()}})))()}var _r;function vr(){return(vr=e((()=>{P(),$t(),ar(),_r=class extends Et{constructor(){super(...arguments),this._supportStack=!0}_transformLabelSpec(e){let t=!1!==e.point?.visible&&!1!==e.point?.style?.visible;this._addMarkLabelSpec(e,(e=>{let n=e.position===`inside-middle`;return!t||n?`area`:`point`})),this._addMarkLabelSpec(e,`area`,`areaLabel`,`initLineLabelMarkStyle`,void 0,!0)}_transformSpecAfterMergingTheme(e,t,n){var r;super._transformSpecAfterMergingTheme(e,t,n);let{area:i={},line:a={},seriesMark:o}=e,s=!1!==i.visible&&!1!==i.style?.visible,c=!1!==a.visible&&!1!==a.style?.visible;i.support3d=!(!i.support3d&&!a.support3d),i.zIndex=N(i.zIndex)||N(a.zIndex)?Math.max(i.zIndex??0,a.zIndex??0):void 0,i.style&&delete i.style.stroke,i.state&&Object.keys(i.state).forEach((e=>{`style`in i.state[e]?delete i.state[e].style.stroke:delete i.state[e].stroke}));let l=i,u=a;(o===`line`||c&&!s)&&(l=a,u=i),i.style=V({},u.style,l.style),i.state=V({},u.state,l.state),!1===i.interactive&&(i.style.fillPickable=!1),!1===a.interactive&&(a.style.strokePickable=!1),i.interactive=!(!i.interactive&&(r=a.interactive)!=null&&!r),e.area=i,e.line=a}}})))()}var yr;function br(){return(br=e((()=>{yr={label:{visible:!1,offset:5,position:`top`,style:{stroke:{type:`palette`,key:`backgroundColor`},lineWidth:2}},point:{style:{symbolType:`circle`}},seriesMark:`area`}})))()}var G,xr;function Sr(){return(Sr=e((()=>{Qn(),_t(),y(),Vt(),St(),T(),ge(),Zt(),Dt(),mt(),Kt(),fr(),mr(),j(),gr(),vr(),Bt(),Se(),ye(),an(),ot(),me(),br(),G=class e extends ie{constructor(){super(...arguments),this.type=O.area,this.transformerConstructor=_r,this._sortDataByAxis=!1}_getSpecUpdatePolicy(){let e=super._getSpecUpdatePolicy();return Object.assign(Object.assign({},e),{dataRelatedKeys:Object.assign(Object.assign({},e.dataRelatedKeys),gn)})}initMark(){let t=this._spec.seriesMark??`area`,n=this._isAreaVisible()||this._isLineVisible();this._areaMark=this._createMark(e.mark.area,{groupKey:this._seriesField,isSeriesMark:n&&t!==`point`},{morphElementKey:this.getDimensionField()[0]}),this.initSymbolMark(t===`point`)}initMarkStyle(){this.initAreaMarkStyle(),this.initSymbolMarkStyle()}initAreaMarkStyle(){let e=this.getSpec().area?.style?.curveType??this.getSpec().line?.style?.curveType,t=e===`monotone`?this._direction===`horizontal`?`monotoneY`:`monotoneX`:e,n=this._areaMark;if(n){let e=this._isAreaVisible(),r=this._isLineVisible();e||r?n.setVisible(!0):n.setVisible(!1),this._direction===`horizontal`?this.setMarkStyle(this._areaMark,{x:this.dataToPositionX.bind(this),x1:e=>{var t;return Qt(this.dataToPositionX1(e),((t=this._xAxisHelper)?.getScale)?.call(t,0))},y:this.dataToPositionY.bind(this),y1:this.dataToPositionY.bind(this),z:this._fieldZ?this.dataToPositionZ.bind(this):null,orient:this._direction},`normal`,w.Series):this.setMarkStyle(this._areaMark,{x:this.dataToPositionX.bind(this),x1:this.dataToPositionX.bind(this),y1:e=>{var t;return Qt(this.dataToPositionY1(e),((t=this._yAxisHelper)?.getScale)?.call(t,0))},y:this.dataToPositionY.bind(this),z:this._fieldZ?this.dataToPositionZ.bind(this):null},`normal`,w.Series),this.setMarkStyle(n,{fill:!!e&&this.getColorAttribute(),stroke:!!r&&this.getColorAttribute()},`normal`,w.Series),this._invalidType!==`zero`&&this.setMarkStyle(n,{defined:this._getInvalidDefined.bind(this),connectedType:this._getInvalidConnectType()},`normal`,w.Series),this.getStack()&&this.setMarkStyle(n,{zIndex:e=>-e[Yt]},`normal`,w.Series),this.setMarkStyle(n,{curveType:t},`normal`,w.Built_In),Object.keys(n.stateStyle).forEach((e=>{n.stateStyle[e].stroke&&n.setPostProcess(`stroke`,(e=>[e,!1,!1,!1]),e)}))}}initAnimation(){let e={direction:this.direction},t=this._spec.animationAppear?.preset;if(this._lineMark&&this._lineMark.setAnimationConfig(S(A.getAnimationInKey(`line`)?.(e,t),M(`line`,this._spec,this._markAttributeContext))),this._areaMark&&this._areaMark.setAnimationConfig(S(A.getAnimationInKey(`area`)?.(e,t),M(`area`,this._spec,this._markAttributeContext))),this._symbolMark){let e=Fe(this);this._symbolMark.setAnimationConfig(S(A.getAnimationInKey(`scaleInOut`)?.(),M(`point`,this._spec,this._markAttributeContext),e))}}_isAreaVisible(){let e=this._spec.area||{};return!1!==e.visible&&!1!==e.style?.visible}_isLineVisible(){let e=this._spec.line||{};return!1!==e.visible&&!1!==e.style?.visible}initTooltip(){this._tooltipHelper=new dr(this);let{group:e,mark:t}=this._tooltipHelper.activeTriggerSet;this._areaMark&&e.add(this._areaMark),this._lineMark&&e.add(this._lineMark),this._symbolMark&&(t.add(this._symbolMark),e.add(this._symbolMark))}viewDataStatisticsUpdate(e){super.viewDataStatisticsUpdate(e),this.encodeDefined(this._areaMark,`defined`)}compile(){super.compile(),this.addSamplingCompile(),this.addOverlapCompile()}getDefaultShapeType(){return`square`}getActiveMarks(){return[this._areaMark,this._symbolMark,this._lineMark]}onLayoutEnd(){super.onLayoutEnd(),this.reCompileSampling()}getSeriesStyle(e){return t=>{let n=this._spec.seriesMark??`area`,r=this._seriesMark?.getAttribute(t,e)??void 0;return t!==`fill`||r&&n!==`line`||(t=`stroke`,r=this._seriesMark?.getAttribute(t,e)??void 0),t===`stroke`&&Jn(r)?r[0]:r}}},G.type=O.area,G.builtInTheme={area:yr},G.mark=pr,G.transformerConstructor=_r,Hn(G,Dn),xr=()=>{tt(),de(),ft(),vn(),Ot(),hr(),lt(),nn(),A.registerSeries(G.type,G)}})))()}var Cr;function wr(){return(wr=e((()=>{Te(),ze(),Cr=class extends _e{_getDefaultSeriesSpec(e){return super._getDefaultSeriesSpec(e,[`point`,`line`,`area`,`seriesMark`,`activePoint`,`sampling`,`samplingFactor`,`pointDis`,`pointDisMul`,`markOverlap`,`areaLabel`,`useSequentialAnimation`])}transformSpec(e){super.transformSpec(e),se(e)}}})))()}var K,Tr;function Er(){return(Er=e((()=>{Sr(),T(),j(),wr(),it(),ce(),ke(),m(),Ht(),ae(),v(),wn(),On(),K=class extends g{constructor(){super(...arguments),this.transformerConstructor=Cr,this.type=`area`,this.seriesType=O.area}_setModelOption(){this._modelOption.getDimensionInfo=b,this._modelOption.getDimensionInfoByValue=Ie,this._modelOption.getRectByDimensionData=$e}},K.type=`area`,K.seriesType=O.area,K.transformerConstructor=Cr,Hn(K,Be),Tr=()=>{xn(),Ye(),vt(),Me(),xr(),Lt(),A.registerChart(K.type,K)}})))()}var Dr;function Or(){return(Or=e((()=>{F(),P(),R(),Zn(),E(),De(),Bt(),ue(),Dr=class extends Ft{constructor(){super(...arguments),this.coordinate=`polar`,this._outerRadius=bt,this._innerRadius=0,this._angleField=[],this._radiusField=[],this._sortDataByAxis=!1}get outerRadius(){return this._outerRadius}get innerRadius(){return this._innerRadius}getAngleField(){return this._angleField}setAngleField(e){return this._angleField=N(e)?L(e):[],this._angleField}getRadiusField(){return this._radiusField}setRadiusField(e){return this._radiusField=N(e)?L(e):[],this._radiusField}get innerRadiusField(){return this._innerRadiusField}setInnerRadiusField(e){return this._innerRadiusField=L(e),this._innerRadiusField}get radiusScale(){return this._radiusScale}setRadiusScale(e){return this._radiusScale=e,e}get angleScale(){return this._angleScale}setAngleScale(e){return this._angleScale=e,e}get angleAxisHelper(){return this._angleAxisHelper}set angleAxisHelper(e){this._angleAxisHelper=e,this.onAngleAxisHelperUpdate()}get radiusAxisHelper(){return this._radiusAxisHelper}set radiusAxisHelper(e){this._radiusAxisHelper=e,this.onRadiusAxisHelperUpdate()}get sortDataByAxis(){return this._sortDataByAxis}_buildMarkAttributeContext(){super._buildMarkAttributeContext(),this._markAttributeContext.valueToPosition=this.valueToPosition.bind(this),this._markAttributeContext.getCenter=()=>this.angleAxisHelper.center(),this._markAttributeContext.getLayoutRadius=()=>this._computeLayoutRadius()}valueToPosition(e,t){if(B(e)||B(t)||!this.angleAxisHelper||!this.radiusAxisHelper)return{x:NaN,y:NaN};let n=this.radiusAxisHelper.dataToPosition(L(t));if(n<0){if(this._invalidType===`break`||this._invalidType===`link`)return{x:NaN,y:NaN};if(this._invalidType===`zero`)return this.angleAxisHelper.center()}let r=this.angleAxisHelper.dataToPosition(L(e));return this.angleAxisHelper.coordToPoint({angle:r,radius:n})}dataToPosition(e,t){return e&&this.angleAxisHelper&&this.radiusAxisHelper?t&&!this.isDatumInViewData(e)?null:this.valueToPosition(this.getDatumPositionValues(e,this._angleField),this.getDatumPositionValues(e,this._radiusField)):null}dataToPositionX(e){return this.dataToPosition(e)?.x}dataToPositionY(e){return this.dataToPosition(e)?.y}dataToPositionZ(e){return 0}positionToData(e){}radiusToData(e){}angleToData(e){}getStatisticFields(){var e,t;let n=[];return(e=this.radiusAxisHelper)!=null&&e.getScale&&this._radiusField.forEach((e=>{let t={key:e,operations:[]};t.operations=qn(this.radiusAxisHelper.getScale(0).type)?[`max`,`min`]:[`values`],n.push(t)})),(t=this.angleAxisHelper)!=null&&t.getScale&&this._angleField.forEach((e=>{let t={key:e,operations:[]};t.operations=qn(this.angleAxisHelper.getScale(0).type)?[`max`,`min`]:[`values`],n.push(t)})),n}setAttrFromSpec(){super.setAttrFromSpec(),N(this._spec.outerRadius)&&(this._outerRadius=this._spec.outerRadius),N(this._spec.radius)&&(this._outerRadius=this._spec.radius),N(this._spec.innerRadius)&&(this._innerRadius=this._spec.innerRadius),N(this._spec.sortDataByAxis)&&(this._sortDataByAxis=!0===this._spec.sortDataByAxis)}onRadiusAxisHelperUpdate(){this.onMarkPositionUpdate()}onAngleAxisHelperUpdate(){this.onMarkPositionUpdate()}afterInitMark(){super.afterInitMark()}_computeLayoutRadius(){let e=this._angleAxisHelper||this._radiusAxisHelper;if(e)return e.layoutRadius();let{width:t,height:n}=this._region.getLayoutRect();return Math.min(t/2,n/2)}initEvent(){super.initEvent(),this.sortDataByAxis&&this.event.on(pe.scaleDomainUpdate,{filter:e=>e.model.id===this._angleAxisHelper?.getAxisId()},(()=>{this._sortDataInAxisDomain()}))}_sortDataInAxisDomain(){var e;(e=this.getViewData()?.latestData)!=null&&e.length&&te(this.angleAxisHelper,this._angleField[0],this.getViewData().latestData)}getInvalidCheckFields(){let e=[];return this.angleAxisHelper.isContinuous&&this._angleField.forEach((t=>{e.push(t)})),this.radiusAxisHelper.isContinuous&&this._radiusField.forEach((t=>{e.push(t)})),e}}})))()}function q(e){return Ze(e)?Number.parseFloat(e):0}var kr,Ar;function jr(){return(jr=e((()=>{re(),qe(),E(),R(),Bn(),kr=(e,t)=>{let{asStartAngle:n,asEndAngle:r,asMiddleAngle:i,asRadian:a,asRatio:o,asQuadrant:s,asK:c,showAllZero:l,supportNegative:u,showEmptyCircle:ee}=t,d=t.angleField(),f=t.startAngle(),te=t.endAngle(),p=t.minAngle(),m=e.map((e=>Object.assign({},e)));if(!m||m.length===0)return m;if(!l&&ee&&Ar(m,d,u))return[];let h=(e,t,o)=>{e[n]=t,e[r]=t+o,e[i]=t+o/2,e[a]=o,e[s]=Wn(t+o/2)},g=0,_=-1/0,v=!0;for(let e=0;e<m.length;e++){let t=u?Math.abs(q(m[e][d])):q(m[e][d]);g+=t,_=Math.max(t,_),v&&t!==0&&(v=!1),m[e][cn]=t}let ne=m.map((e=>Number(e[d]))),y=te-f,b=f,x=y,re=0,ie=Sn(ne);if(m.forEach(((e,t)=>{let n=e[cn],r=g?n/g:0,i=r*y;i<p?(i=p,x-=p):re+=n;let a=b,s=b+i;e[o]=r,e[c]=_?n/_:0,e._percent_=ie[t],h(e,a,i),b=s})),x<y){if(x<=.001){let e=y/m.length;m.forEach(((t,n)=>{h(t,f+n*e,e)}))}else{let e=x/re;b=f,m.forEach((t=>{let n=t[a]===p?p:t[cn]*e;h(t,b,n),b+=n}))}}if(g!==0&&(m[m.length-1][r]=te),v&&l){let e=y/m.length;m.forEach(((t,n)=>{h(t,f+n*e,e)}))}return m},Ar=(e,t,n)=>!!B(e)||e.length===0||!!e.every((e=>q(e[t])===0))||!n&&e.reduce(((e,n)=>e+q(n[t])),0)===0})))()}function Mr(e,t,n){return(r,i,a)=>t?e.growField===`radius`?{overall:0}:{overall:e.growFrom(r,i,n)}:{overall:!1}}function Nr(e,t){if(!1===t)return{};switch(t){case`fadeIn`:return Fr;case`growRadius`:return Pr(Object.assign(Object.assign({},e),{growField:`radius`}));default:return Pr(Object.assign(Object.assign({},e),{growField:`angle`}))}}var Pr,Fr,Ir,Lr,Rr,zr;function Br(){return(Br=e((()=>{we(),j(),qt(),Pr=e=>({type:e.growField===`radius`?`growRadiusIn`:`growAngleIn`,options:Mr(e,!0,C.appear)}),Fr={type:`fadeIn`},Ir=e=>({type:e.growField===`radius`?`growRadiusIn`:`growAngleIn`,easing:`linear`,options:Mr(e,!0,C.enter)}),Lr=e=>({type:e.growField===`radius`?`growRadiusOut`:`growAngleOut`,easing:`linear`,options:Mr(e,!0,C.exit)}),Rr=()=>{A.registerAnimation(`pie`,((e,t)=>({appear:Nr(e,t),enter:Ir(e),exit:Lr(e),disappear:{duration:Ct.disappear.duration}})))},zr=()=>{A.registerAnimation(`emptyCircle`,((e,t)=>({appear:Nr(e,t)})))}})))()}function Vr(e,t){var n;let r=t.options?.distance??10,i=er(t.duration)?t.duration/2:1e3,a=t.options.easing??`cubicOut`;return{oneByOne:t.oneByOne,loop:(n=t.loop)!=null&&n,timeSlices:[{duration:i,effects:{easing:a,channel:{x:{from:t=>e.getAttribute(`x`,t),to:t=>e.getAttribute(`x`,t)+I({x:0,y:0},r,t[k]).x},y:{from:t=>e.getAttribute(`y`,t),to:t=>e.getAttribute(`y`,t)+I({x:0,y:0},r,t[k]).y}}}},{duration:i,effects:{easing:a,channel:{x:{to:t=>e.getAttribute(`x`,t),from:t=>e.getAttribute(`x`,t)+I({x:0,y:0},r,t[k]).x},y:{to:t=>e.getAttribute(`y`,t),from:t=>e.getAttribute(`y`,t)+I({x:0,y:0},r,t[k]).y}}}}]}}function Hr(){return(Hr=e((()=>{E(),Xn(),Bn()})))()}var Ur;function Wr(){return(Wr=e((()=>{nt(),Ur=Object.assign(Object.assign({},h),{pie:{name:`pie`,type:`arc`},labelLine:{name:`labelLine`,type:`path`}})})))()}var Gr;function Kr(){return(Kr=e((()=>{Qn(),P(),ar(),Re(),Gr=class extends je{_transformLabelSpec(e){this._addMarkLabelSpec(e,`pie`)}_mergeThemeToSpec(e,t){let n=this._theme,r=e;if(this._shouldMergeThemeToSpec()){let n=this._getDefaultSpecFromChart(t);r=V({},this._theme,n,e);let i=(e,t)=>V({},e===`inside`||e===`inside-center`?this._theme.innerLabel:this._theme.outerLabel,t);Jn(r.label)?r.label=r.label.map((e=>i(e.position,e))):r.label=i(r.label.position,r.label)}return{spec:r,theme:n}}_getDefaultSpecFromChart(e){let t=super._getDefaultSpecFromChart(e)??{},{centerX:n,centerY:r}=e;return N(n)&&(t.centerX=n),N(r)&&(t.centerY=r),Object.keys(t).length>0?t:void 0}}})))()}var qr;function Jr(){return(Jr=e((()=>{ht(),qr=`${At}_LABEL_VISIBLE`})))()}var Yr;function Xr(){return(Xr=e((()=>{Yr={outerRadius:.6,pie:{style:{fillOpacity:1}},label:{visible:!1,interactive:!0,position:`outside`,style:{fontWeight:`normal`,stroke:{type:`palette`,key:`backgroundColor`},fillOpacity:1}},innerLabel:{style:{lineWidth:2}},emptyCircle:{style:{fill:{type:`palette`,key:`emptyCircleColor`},fillOpacity:1}}}})))()}var Zr,Qr,J,Y,$r;function ei(){return(ei=e((()=>{P(),R(),Bn(),tr(),E(),Vt(),an(),ht(),qe(),St(),En(),Or(),T(),jr(),Br(),ge(),we(),Hr(),Ve(),Wr(),j(),Kr(),Jr(),ue(),ee(),fn(),Qe(),Xr(),Zr={valueField:!0,angleField:!0,startAngle:!0,endAngle:!0,minAngle:!0},Qr={outerRadius:!0},J=class e extends Dr{constructor(){super(...arguments),this.transformerConstructor=Gr,this._pieMarkName=`pie`,this._pieMarkType=`arc`,this.getCenter=()=>{let e=this._region.getLayoutRect();return{x:yt(this._spec?.centerX,e.width,e,e.width/2),y:yt(this._spec?.centerY,e.height,e,e.height/2)}},this._startAngle=pn,this._endAngle=Wt,this._pieMark=null,this._labelMark=null,this._labelLineMark=null,this._emptyArcMark=null,this.dataToCentralPosition=e=>{let t=e[k];if(B(t))return null;let n=this.computeDatumRadius(e),r=this.computeDatumInnerRadius(e),i=this.computeCenter(e);return I(i,(n+r)/2,t)}}_buildMarkAttributeContext(){super._buildMarkAttributeContext(),this._markAttributeContext.getCenter=()=>({x:()=>this.getCenter().x,y:()=>this.getCenter().y}),this._markAttributeContext.startAngleScale=e=>this.startAngleScale(e),this._markAttributeContext.endAngleScale=e=>this.endAngleScale(e)}setAttrFromSpec(){var e,t,n;super.setAttrFromSpec(),this._centerOffset=this._spec.centerOffset??0,this._cornerRadius=this._spec.cornerRadius??0;let r=_(N(this._spec.startAngle)?z(this._spec.startAngle):this._startAngle,N(this._spec.endAngle)?z(this._spec.endAngle):this._endAngle);this._startAngle=r.startAngle,this._endAngle=r.endAngle,this._padAngle=N(this._spec.padAngle)?z(this._spec.padAngle):0,this.setAngleField(this._spec.valueField||this._spec.angleField),this._spec.categoryField&&this.setSeriesField(this._spec.categoryField),this._radiusField=[],this._specAngleField=this._angleField.slice(),this._specRadiusField=[],this._showEmptyCircle=(e=this._spec.emptyPlaceholder?.showEmptyCircle)!=null&&e,this._showAllZero=(t=this._spec.showAllZero)!=null&&t,this._supportNegative=(n=this._spec.supportNegative)!=null&&n}initData(){super.initData();let e=this.getViewData();if(!e)return;rt(this._dataSet,`pie`,kr),e.transform({type:`pie`,options:{angleField:()=>this._angleField[0],startAngle:()=>this._startAngle,endAngle:()=>this._endAngle,minAngle:()=>N(this._spec.minAngle)?z(this._spec.minAngle):0,asStartAngle:Xt,asEndAngle:wt,asRatio:gt,asMiddleAngle:k,asRadian:jt,asQuadrant:on,asK:dn,showAllZero:this._showAllZero,supportNegative:this._supportNegative,showEmptyCircle:this._showEmptyCircle}},!1);let t=new Yn(this._dataSet,{name:`${At}_series_${this.id}_viewDataLabel`});t.parse([this.getViewData()],{type:`dataview`}),this._viewDataLabel=new bn(this._option,t)}compileData(){var e;super.compileData(),(e=this._viewDataLabel)==null||e.compile()}initMark(){this._pieMark=this._createMark(Object.assign(Object.assign({},e.mark.pie),{name:this._pieMarkName,type:this._pieMarkType}),{key:un,groupKey:this._seriesField,isSeriesMark:!0},{morph:Ge(this._spec,this._pieMarkName),morphElementKey:this._seriesField}),this._showEmptyCircle&&(this._emptyArcMark=this._createMark({name:`emptyCircle`,type:`arc`},{dataView:!1}),this._data.addRelatedMark(this._emptyArcMark))}startAngleScale(e){return hn(Xt)(e)}endAngleScale(e){return hn(wt)(e)}_computeLayoutRadius(){return Ue((()=>this._spec.layoutRadius),this.getLayoutRect,this.getCenter,(()=>({startAngle:this._startAngle,endAngle:this._endAngle})))}initMarkStyle(){let e={x:()=>this.getCenter().x,y:()=>this.getCenter().y,fill:this.getColorAttribute(),outerRadius:Tt(this._outerRadius)?this._outerRadius:()=>this._computeLayoutRadius()*this._outerRadius,innerRadius:Tt(this._innerRadius)?this._innerRadius:()=>this._computeLayoutRadius()*this._innerRadius,cornerRadius:()=>this._computeLayoutRadius()*this._cornerRadius,startAngle:e=>this.startAngleScale(e),endAngle:e=>this.endAngleScale(e),padAngle:this._padAngle,centerOffset:this._centerOffset},t=this._pieMark;t&&this.setMarkStyle(t,e,`normal`,w.Series);let n=this._emptyArcMark;n&&this.setMarkStyle(n,Object.assign(Object.assign({},e),{visible:()=>{let e=this.getViewData().latestData;return!e||!e.length}}),`normal`,w.Series)}getInteractionTriggers(){return this._parseInteractionConfig(this._pieMark?[this._pieMark]:[])}initTooltip(){super.initTooltip(),this._pieMark&&this._tooltipHelper.activeTriggerSet.mark.add(this._pieMark)}initMarkStyleWithSpec(e,t){if(super.initMarkStyleWithSpec(e,t),e.name===this._pieMarkName){let t=this.getSpec()[e.name];if(t)for(let n in t.state||{})this.setMarkStyle(e,this.generateRadiusStyle(t.state[n]),n,w.User_Mark)}e.name===`emptyCircle`&&this.setMarkStyle(e,this.generateRadiusStyle(t.style),`normal`,w.User_Mark)}initLabelMarkStyle(e){e&&this.setMarkStyle(e,{visible:hn(qr).bind(this),text:e=>e[this.getDimensionField()[0]],fill:this.getColorAttribute(),z:this.dataToPositionZ.bind(this)})}afterInitMark(){super.afterInitMark()}initEvent(){var e;super.initEvent(),(e=this._viewDataLabel.getDataView())==null||e.target.addListener(`change`,this.viewDataLabelUpdate.bind(this))}initGroups(){}onLayoutEnd(){this._viewDataLabel.getDataView().reRunAllTransform(),this.onMarkPositionUpdate(),super.onLayoutEnd()}getDimensionField(){return this._seriesField?[this._seriesField]:[]}getMeasureField(){return this._specAngleField}viewDataLabelUpdate(){this.event.emit(pe.viewDataLabelUpdate,{model:this}),this._viewDataLabel.updateData()}generateRadiusStyle(e){if(!e)return;let t={};return e.outerRadius&&(t.outerRadius=()=>this._computeLayoutRadius()*e.outerRadius),e.innerRadius&&(t.innerRadius=()=>this._computeLayoutRadius()*e.innerRadius),e.cornerRadius&&(t.cornerRadius=()=>this._computeLayoutRadius()*e.cornerRadius),t}computeCenter(e){return{x:this._pieMark.getAttribute(`x`,e,`normal`),y:this._pieMark.getAttribute(`y`,e,`normal`)}}getRadius(e=`normal`){return(e===`normal`?this.getSpec()[this._pieMark?.name||`pie`]?.style?.outerRadius:this.getSpec()[this._pieMark?.name||`pie`]?.state?.[e]?.outerRadius)??this._outerRadius}getInnerRadius(e=`normal`){return(e===`normal`?this.getSpec()[this._pieMark?.name||`pie`]?.style?.innerRadius:this.getSpec()[this._pieMark?.name||`pie`]?.state?.[e]?.innerRadius)??this._innerRadius}computeRadius(e,t){return this._computeLayoutRadius()*e*(B(t)?1:t)+this._centerOffset}computeDatumRadius(e,t){return this._computeLayoutRadius()*this.getRadius(t)+this._centerOffset}_getSpecUpdatePolicy(){let e=super._getSpecUpdatePolicy();return Object.assign(Object.assign({},e),{compileOnlyKeys:Object.assign(Object.assign({},e.compileOnlyKeys),Qr),dataRelatedKeys:Object.assign(Object.assign({},e.dataRelatedKeys),Zr)})}_compareSpec(e,t,n){n??={data:!0};let r=[`centerX`,`centerY`,`centerOffset`,`radius`,`innerRadius`,`cornerRadius`,`startAngle`,`endAngle`,`padAngle`];r.forEach((e=>{n[e]=!0}));let i=super._compareSpec(e,t,n);return e??={},r.some((n=>e[n]!==t[n]))&&(i.reRender=!0,i.change=!0),i}computeDatumInnerRadius(e,t){return this._computeLayoutRadius()*this.getInnerRadius(t)+this._centerOffset}dataToPosition(e,t){let n=e[k];if(B(n)||t&&!this.isDatumInViewData(e))return null;let r=this.computeDatumRadius(e),i=this.computeCenter(e);return I(i,r,n)}initAnimation(){let e={growFrom:(e,t,n)=>{if(n===C.appear)return this._startAngle;if(n===C.disappear)return this._endAngle;let r=[C.disappear,C.exit],i=this._pieMark.getGraphics(),a=e?.[D];if(i.find((e=>e.context.data[0]?.[D]<a))===void 0)return this._startAngle;if(i.find((e=>e.context.data[0]?.[D]>a))===void 0)return this._endAngle;let o=[...i].reverse().find((e=>e.context.data[0]?.[D]<a));return r.includes(n)?o?.getFinalAttribute()?.endAngle:o?.attribute?.endAngle}},t=this._spec.animationAppear?.preset;if(this._pieMark){let n=S(A.getAnimationInKey(`pie`)?.(e,t),M(`pie`,this._spec,this._markAttributeContext));n.normal&&n.normal.type&&(n.normal=Vr(this._pieMark,n.normal)),this._pieMark.setAnimationConfig(n)}if(this._emptyArcMark){let n=S(A.getAnimationInKey(`emptyCircle`)?.(e,t??`fadeIn`));this._emptyArcMark.setAnimationConfig(n)}}getDefaultShapeType(){return`circle`}getGroupFields(){return[]}getStackGroupFields(){return[]}getStackValueField(){return``}_noAnimationDataKey(e,t){return t}getActiveMarks(){return[this._pieMark]}},J.transformerConstructor=Gr,J.mark=Ur,J.builtInTheme={pie:Yr},Y=class extends J{constructor(){super(...arguments),this.type=O.pie}},Y.type=O.pie,$r=()=>{l(),Rr(),zr(),A.registerSeries(Y.type,Y)}})))()}var ti;function ni(){return(ni=e((()=>{F(),Qn(),R(),P(),An(),ti=class extends Ke{_isValidSeries(e){return!this.seriesType||e===this.seriesType}getIndicatorSpec(e){let t=L(e.indicator),n=e.innerRadius??e.series?.[0]?.innerRadius;return N(n)&&t.forEach((e=>{B(e.limitRatio)&&(e.limitRatio=n)})),t}_getDefaultSeriesSpec(e,t){return super._getDefaultSeriesSpec(e,[`radius`,`outerRadius`,`innerRadius`,`startAngle`,`endAngle`,`centerX`,`centerY`,`sortDataByAxis`],t)}transformSpec(e){super.transformSpec(e),Jn(e.dataZoom)&&e.dataZoom.length>0&&e.dataZoom.forEach((e=>{e.filterMode===`axis`&&(e.filterMode=`filter`)})),this.transformSeriesSpec(e),N(e.indicator)&&(e.indicator=this.getIndicatorSpec(e))}}})))()}var X;function ri(){return(ri=e((()=>{ni(),X=class extends ti{needAxes(){return!1}_getDefaultSeriesSpec(e){let t=super._getDefaultSeriesSpec(e,[`center`,`centerOffset`,`cornerRadius`,`padAngle`,`minAngle`,`emptyPlaceholder`,`showAllZero`,`supportNegative`,`useSequentialAnimation`,`layoutRadius`]);return this._addSeriesRelatedSpecKeys([`valueField`,`angleField`]),t.categoryField=e.categoryField||e.seriesField,t.valueField=e.valueField||e.angleField,t.emptyCircle=e.emptyPlaceholder?.emptyCircle,t}}})))()}var ii;function ai(){return(ai=e((()=>{it(),ri(),ii=class extends g{constructor(){super(...arguments),this.transformerConstructor=X}},ii.transformerConstructor=X})))()}var Z,oi;function si(){return(si=e((()=>{ei(),T(),ai(),j(),ri(),wn(),Z=class extends ii{constructor(){super(...arguments),this.transformerConstructor=X,this.type=`pie`,this.seriesType=O.pie}},Z.type=`pie`,Z.seriesType=O.pie,Z.transformerConstructor=X,oi=()=>{Ye(),$r(),A.registerChart(Z.type,Z)}})))()}var ci;function li(){return(li=e((()=>{F(),zn(),ci=(e,t)=>{let{datum:n,title:r,content:i}=$n(t)?t():t,a=[],o=n.call(null);return r.visible&&a.push({type:`title`,index:0,datum:o,spec:r}),L(i).forEach(((e,t)=>{e.visible&&a.push({type:`content`,index:t,datum:o,spec:e})})),a}})))()}var ui,di;function fi(){return(fi=e((()=>{ui=(e,t)=>({fontSize:{type:`token`,key:e},fill:{type:`palette`,key:t},fontWeight:`normal`,fillOpacity:1,textBaseline:`top`,textAlign:`center`}),di={title:{visible:!0,autoLimit:!1,autoFit:!1,style:ui(`l1FontSize`,`primaryFontColor`)},content:{visible:!0,style:ui(`l2FontSize`,`tertiaryFontColor`)}}})))()}var pi,Q,mi;function hi(){return(hi=e((()=>{tr(),Oe(),zt(),ut(),ar(),ve(),fn(),Gn(),P(),zn(),F(),Vn(),li(),Qe(),or(),j(),Mt(),tn(),fi(),pi=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols==`function`){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n},Q=class extends st{constructor(){super(...arguments),this.type=Pe.indicator,this.name=Pe.indicator,this.specKey=`indicator`,this.layoutType=`none`,this.layoutZIndex=It.Indicator,this.layoutLevel=p.Indicator,this._gap=0,this._activeDatum=null}static getSpecInfo(e){return sn(e,this.specKey,this.type,(e=>e&&!1!==e.visible))}created(){super.created(),this.initData(),this.initEvent()}setAttrFromSpec(){super.setAttrFromSpec(),this._gap=this._spec.gap||0,this._title=this._spec.title,this._content=L(this._spec.content),this._regions=this._option.getRegionsInUserIdOrIndex(L(this._spec.regionId),L(this._spec.regionIndex))}_compareSpec(e,t){let n=super._compareSpec(e,t);return Kn(t,e)||n.reMake||n.reCompile||(n.change=!0,n.reRender=!0,n.effects=Object.assign(Object.assign({},n.effects),{component:!0,layout:!0,render:!0})),n}initEvent(){this._option.disableTriggerEvent||this._spec.trigger!==`none`&&(this._spec.trigger===`hover`?(this.event.on(`element-highlight:start`,(e=>{let t=e.graphics[0];this.isRelativeModel(t)&&this.updateDatum(xe(t))})),this.event.on(`element-highlight:reset`,(e=>{this._activeDatum&&this.updateDatum(null)}))):(this.event.on(`element-select:start`,(e=>{let t=e.graphics[0];this.isRelativeModel(t)&&this.updateDatum(xe(t))})),this.event.on(`element-select:reset`,(e=>{this._activeDatum&&this.updateDatum(null)}))))}updateDatum(e){this._activeDatum=e,this._displayData.updateData();let t=this._getIndicatorAttrs();this._createOrUpdateIndicatorComponent(t)}initData(){rt(this._option.dataSet,`indicatorFilter`,ci);let e=new Yn(this._option.dataSet,{name:`${this.type}_${this.id}_data`});e.transform({type:`indicatorFilter`,options:()=>({title:this._title,content:this._content,datum:()=>this._activeDatum})}),e.target.addListener(`change`,this.updateDatum.bind(this)),this._displayData=new bn(this._option,e)}updateLayoutAttribute(){let e=this._getIndicatorAttrs();this._createOrUpdateIndicatorComponent(e),super.updateLayoutAttribute()}_getIndicatorAttrs(){if(!1===this._spec.visible||!1===this._spec.fixed&&this._activeDatum===null)return{visible:!1};let e=this._regions[0],{width:t,height:n}=e.getLayoutRect(),{x:r,y:i}=e.getLayoutStartPoint(),a=this._spec,{content:o,offsetX:s,offsetY:c,limitRatio:l,title:u}=a,ee=pi(a,[`content`,`offsetX`,`offsetY`,`limitRatio`,`title`]),d=[];return L(o).forEach((e=>{let t=V({},this._theme.content,e);d.push({visible:!1!==t.visible&&(!t.field||this._activeDatum!==null),space:t.space||this._gap,autoLimit:t.autoLimit,autoFit:t.autoFit,fitPercent:t.fitPercent,fitStrategy:t.fitStrategy,style:Object.assign(Object.assign({},ct(Un(t.style,[`text`]),this._activeDatum)),{text:this._createText(t.field,t.style.text)})})})),Object.assign({visible:!0,size:{width:t,height:n},zIndex:this.layoutZIndex,x:r,y:i,dx:s?Ut(s,this._computeLayoutRadius()):0,dy:c?Ut(c,this._computeLayoutRadius()):0,limitRatio:l||1/0,title:{visible:!1!==u.visible&&(!N(u.field)||this._activeDatum!==null),space:u.space||this._gap,autoLimit:u.autoLimit,autoFit:u.autoFit,fitPercent:u.fitPercent,fitStrategy:u.fitStrategy,style:Object.assign(Object.assign({},ct(Un(u.style,[`text`]),this._activeDatum)),{text:this._createText(u.field,u.style.text)})},content:d},ee)}_createOrUpdateIndicatorComponent(e){if(!1===e.visible)return this._indicatorComponent&&this._indicatorComponent.parent&&this._indicatorComponent.parent.removeChild(this._indicatorComponent),void(this._indicatorComponent=null);if(this._indicatorComponent)Kn(e,this._cacheAttrs)||this._indicatorComponent.setAttributes(e);else{let t=this.getContainer(),n=new nr(e);n.name=`indicator`,t.add(n),this._indicatorComponent=n,this._indicatorComponent.on(`*`,((e,t)=>this._delegateEvent(this._indicatorComponent,e,t)))}this._cacheAttrs=e}_createText(e,t){return e?this._activeDatum?this._activeDatum[e]:``:$n(t)?t(this._activeDatum,void 0)??``:t??``}_computeLayoutRadius(){let{width:e,height:t}=this._regions[0].getLayoutRect();return Math.min(e/2,t/2)}isRelativeModel(e){return this._regions.some((t=>!!t.getSeriesInId(e.context.modelId)))}_getNeedClearVRenderComponents(){return[this._indicatorComponent]}clear(){this._cacheAttrs=null,super.clear()}getIndicatorComponent(){return this._indicatorComponent}},Q.type=Pe.indicator,Q.builtInTheme={indicator:di},Q.specKey=`indicator`,mi=()=>{A.registerComponent(Q.type,Q)}})))()}var gi;function _i(){return(_i=e((()=>{xt(),Er(),he(),Le(),ne(),yn(),gi=x(`AreaChart`,{type:`area`,vchartConstructor:ln},[Tr,Ce,oe,...Xe])})))()}var vi;function yi(){return(yi=e((()=>{at(),be(),fe(),We(),Ee(),d(),Ne(),Gt(),ir(),vi=[mn,rr,et,Nt,en,le,Ae,Rt,kn]})))()}var bi;function xi(){return(xi=e((()=>{xt(),si(),hi(),he(),ne(),yi(),bi=x(`PieChart`,{type:`pie`,vchartConstructor:ln},[oi,Ce,mi,...vi])})))()}function Si({height:e=260,text:t=`暂无数据`,tone:n=`muted`}){return/* @__PURE__ */ U(`div`,{style:{height:e,display:`flex`,alignItems:`center`,justifyContent:`center`,color:n===`success`?`var(--arc-antd-color-success)`:`var(--arc-antd-color-text-2)`,fontSize:13},children:t})}function Ci(){return(Ci=e((()=>{})))()}var wi,Ti;function Ei(){return(Ei=e((()=>{Pt(),jn(),wi=[{key:`list`,title:`日志列表`,description:`查询、筛选和查看日志`,icon:Mn},{key:`stats`,title:`统计分析`,description:`趋势与分布统计`,icon:f}],Ti=wi.map(e=>e.key)})))()}function Di(e,t=`日志`){return e===0?`清除全部${t}`:`清除${ki[e]??`${e} 天前`}的${t}`}function Oi({clean:e,onCleared:t}){let[n,r]=cr(!1),[i,a]=cr(0),[o,s]=cr(!1);return{modalVisible:n,days:i,verifying:o,openClearModal:e=>{a(e),r(!0)},closeModal:()=>r(!1),confirmClear:async()=>{if(!o){s(!0);try{await e(i),r(!1),c.success(i===0?`历史日志已清除`:`已清除${ki[i]??`${i} 天前`}的日志,最近 ${i} 天的记录已保留`),t?.()}finally{s(!1)}}}}}var ki,$;function Ai(){return(Ai=e((()=>{r(),ki={30:`一个月前`,90:`三个月前`,180:`六个月前`,365:`一年前`},$=[0,365,180,90,30]})))()}function ji({loading:e,onClear:n,label:r=`日志`}){return sr(ur)===`mobile-actions`?/* @__PURE__ */ U(H,{children:$.map(t=>/* @__PURE__ */ U(o,{type:`danger`,theme:`light`,icon:/* @__PURE__ */ U(Pn,{size:14}),loading:e,onClick:()=>n(t),children:Di(t,r)},t))}):/* @__PURE__ */ W(t,{children:[/* @__PURE__ */ U(o,{type:`danger`,theme:`light`,icon:/* @__PURE__ */ U(Pn,{size:14}),loading:e,onClick:()=>n($[0]),children:Di($[0],r)}),/* @__PURE__ */ U(s,{trigger:`click`,position:`bottomRight`,clickToHide:!0,render:/* @__PURE__ */ U(s.Menu,{children:$.map(t=>/* @__PURE__ */ U(s.Item,{disabled:e,onClick:()=>n(t),children:Di(t,r)},t))}),children:/* @__PURE__ */ U(o,{type:`danger`,theme:`light`,disabled:e,"aria-label":`选择清除${r}范围`,icon:/* @__PURE__ */ U(Fn,{size:14})})})]})}function Mi({logName:e,control:t}){return/* @__PURE__ */ U(Rn,{title:Di(t.days,e),visible:t.modalVisible,onCancel:t.closeModal,okText:`确认清除`,okButtonProps:{type:`danger`,loading:t.verifying},onOk:t.confirmClear,maskClosable:!1,children:/* @__PURE__ */ W(`p`,{style:{marginBottom:12},children:[`此操作将永久删除当前数据权限范围内`,t.days===0?`的全部${e}`:`${ki[t.days]??`${t.days} 天前`}的${e}`,`,不可恢复。`,t.days>0&&/* @__PURE__ */ W(H,{children:[/* @__PURE__ */ U(`br`,{}),`最近 `,t.days,` 天的记录将保留。`]}),e===`操作日志`&&/* @__PURE__ */ W(H,{children:[/* @__PURE__ */ U(`br`,{}),`本次清除操作仍会生成一条操作日志。`]})]})})}function Ni(){return(Ni=e((()=>{r(),In(),Nn(),Ln(),Ai()})))()}function Pi(e){let t=Array(7).fill(0);for(let n of e??[])t[(lr(n.date).day()+6)%7]+=n.count;return Hi.map((e,n)=>({name:e,count:t[n]}))}function Fi(e,t){return t>0?e-t:null}function Ii(e){return e==null||e.total===0?null:(e.successCount/e.total*100).toFixed(1)}function Li(e,t){return e&&t&&e.total>0&&t.total>0?e.successCount/e.total-t.successCount/t.total:null}function Ri(){return/* @__PURE__ */ U(i,{loading:!0,active:!0,placeholder:/* @__PURE__ */ W(H,{children:[/* @__PURE__ */ U(Jt,{style:{marginBottom:16},children:Array.from({length:4},(e,t)=>`sk-stat-${t}`).map(e=>/* @__PURE__ */ W(`div`,{children:[/* @__PURE__ */ U(i.Title,{style:{width:64,height:26,marginBottom:10}}),/* @__PURE__ */ U(i.Paragraph,{rows:1,style:{width:80,marginBottom:0}})]},e))}),/* @__PURE__ */ W(`div`,{className:`zx-panel`,style:{marginBottom:16},children:[/* @__PURE__ */ U(i.Title,{style:{width:180,height:14,marginBottom:16}}),/* @__PURE__ */ U(i.Image,{style:{width:`100%`,height:230}})]}),/* @__PURE__ */ U(`div`,{className:`chart-grid`,children:[`sk-chart-a`,`sk-chart-b`].map(e=>/* @__PURE__ */ W(`div`,{className:`zx-panel`,children:[/* @__PURE__ */ U(i.Title,{style:{width:120,height:14,marginBottom:16}}),/* @__PURE__ */ U(i.Image,{style:{width:`100%`,height:260}})]},e))})]}),children:null})}function zi({days:e,onDaysChange:t,loading:r,fetching:i,children:o}){return/* @__PURE__ */ W(`div`,{children:[/* @__PURE__ */ U(`div`,{style:{display:`flex`,justifyContent:`flex-end`,marginBottom:16},children:/* @__PURE__ */ U(a,{value:e,onChange:e=>t(e),style:{width:140},children:Vi.map(e=>/* @__PURE__ */ U(a.Option,{value:e.value,children:e.label},e.value))})}),r?/* @__PURE__ */ U(Ri,{}):/* @__PURE__ */ U(n,{spinning:i,children:o})]})}function Bi({title:e,children:t,danger:n}){return/* @__PURE__ */ W(`div`,{className:`zx-panel`,children:[/* @__PURE__ */ U(`div`,{style:{...Tn,color:n?`var(--arc-antd-color-danger)`:Tn.color},children:e}),t]})}var Vi,Hi;function Ui(){return(Ui=e((()=>{r(),dt(),rn(),Vi=[{label:`最近 7 天`,value:7},{label:`最近 30 天`,value:30},{label:`最近 90 天`,value:90}],Hi=[`周一`,`周二`,`周三`,`周四`,`周五`,`周六`,`周日`]})))()}export{gi as C,Sr as D,$r as E,xr as O,vi as S,ei as T,Si as _,Li as a,xi as b,Pi as c,Ni as d,Ai as f,Ei as g,Ti as h,Ii as i,ji as l,wi as m,zi as n,Fi as o,Oi as p,Hi as r,Ui as s,Bi as t,Mi as u,Ci as v,_i as w,yi as x,bi as y};
|
|
2
|
-
//# sourceMappingURL=LogStatsScaffold-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-Bruge11p.js";import{D as t,E as n,M as r,Pt as i,Ut as a,m as o,y as s}from"./clipboard-dpqHdCyy.js";import{i as c}from"./feedback-B1UL2ETz.js";import{$ as l,$n as u,$t as ee,A as d,Ai as f,An as te,Ar as p,At as m,Bn as h,Bt as g,Ci as _,Ct as v,D as ne,Dn as y,Dt as b,E as x,Ei as re,En as ie,Et as ae,F as oe,Fn as S,Fr as se,Ft as ce,G as le,Gr as ue,Gt as de,H as fe,Hr as pe,Ht as me,I as he,In as ge,Ir as C,It as _e,Jr as ve,Jt as ye,K as be,Kr as xe,Kt as Se,L as Ce,Lr as we,Lt as Te,M as Ee,Mn as De,Mr as Oe,Mt as ke,N as Ae,Nn as je,Nt as Me,O as Ne,Oi as Pe,On as Fe,Or as w,Ot as Ie,P as Le,Pn as Re,Pr as ze,Pt as Be,Q as Ve,Qn as He,Qt as Ue,R as We,Rn as Ge,Rt as Ke,Si as qe,Sn as Je,St as Ye,T as Xe,Ti as Ze,Tr as Qe,Tt as $e,U as et,Ut as tt,Vn as nt,Vr as rt,Vt as it,W as at,Wt as ot,Xt as st,Yr as ct,Yt as lt,Zt as ut,_ as dt,_i as T,_n as ft,_r as pt,_t as mt,ai as ht,an as gt,bn as _t,bt as vt,ci as yt,cn as bt,cr as xt,di as St,dn as E,dr as Ct,ei as D,en as wt,fi as Tt,fn as Et,gi as O,gn as Dt,hn as Ot,hr as kt,ii as At,in as jt,ir as Mt,j as Nt,ji as Pt,jn as Ft,jr as It,jt as Lt,k as Rt,ki as zt,kn as Bt,kr as Vt,kt as Ht,li as Ut,ln as Wt,lr as Gt,mn as Kt,mr as qt,n as Jt,ni as Yt,nn as k,oi as A,on as Xt,or as Zt,pi as Qt,pn as $t,q as en,qr as tn,qt as nn,r as rn,ri as an,rn as on,rr as sn,si as j,sn as cn,sr as ln,ti as un,tn as dn,ui as fn,un as pn,ur as mn,vi as hn,vn as gn,vr as _n,vt as vn,w as yn,wr as bn,wt as xn,xi as Sn,xn as Cn,xt as wn,y as Tn,yi as En,yn as Dn,yt as On,z as kn,zn as M,zt as An}from"./StatCard-CRPfkSBY.js";import{n as jn,t as Mn}from"./list-wgUaW69x.js";import{n as Nn,t as Pn}from"./trash-Ay_Vtz4n.js";import{B as Fn,V as In}from"./App-nh6_qOo8.js";import{n as Ln,t as Rn}from"./AppModal-CEouaU03.js";import{Ar as zn,Dr as N,Er as P,Ft as Bn,Gn as Vn,Hn,In as F,Kn as Un,Lt as I,Nn as L,Nt as Wn,Or as R,Pt as z,Un as Gn,Wn as Kn,_ as qn,_r as Jn,b as Yn,cr as Xn,g as Zn,gr as Qn,jr as $n,kr as B,lr as er,x as tr}from"./chart-data-DI8rr6W3.js";import{a as nr,ar as rr,ir,ln as ar,o as or,un as V}from"./chart-renderer-Dl8qlg1n.js";import{useContext as sr,useState as cr}from"react";import{Fragment as H,jsx as U,jsxs as W}from"react/jsx-runtime";import lr from"dayjs";import{ToolbarSlotContext as ur}from"@fudanda/admin-antd/core/components/toolbar-slot-context";var dr;function fr(){return(fr=e((()=>{u(),F(),P(),dr=class extends He{constructor(){super(...arguments),this._getSeriesStyle=(e,t,n)=>{for(let n of L(t)){let t=this.series.getSeriesStyle(e)?.(n);if(!1!==t||n!==`fill`&&n!==`stroke`||(t=n===`fill`?this.series.getSeriesStyle(e)?.(`stroke`)?.[0]:this.series.getSeriesStyle(e)?.(`fill`)),N(t))return t}return n}}}})))()}var pr;function mr(){return(mr=e((()=>{nt(),Cn(),pr=Object.assign(Object.assign(Object.assign({},h),Je),{area:{name:`area`,type:`area`}})})))()}var hr;function gr(){return(gr=e((()=>{qt(),hr=()=>{kt(),pt(),_n()}})))()}var _r;function vr(){return(vr=e((()=>{P(),$t(),ar(),_r=class extends Et{constructor(){super(...arguments),this._supportStack=!0}_transformLabelSpec(e){let t=!1!==e.point?.visible&&!1!==e.point?.style?.visible;this._addMarkLabelSpec(e,(e=>{let n=e.position===`inside-middle`;return!t||n?`area`:`point`})),this._addMarkLabelSpec(e,`area`,`areaLabel`,`initLineLabelMarkStyle`,void 0,!0)}_transformSpecAfterMergingTheme(e,t,n){var r;super._transformSpecAfterMergingTheme(e,t,n);let{area:i={},line:a={},seriesMark:o}=e,s=!1!==i.visible&&!1!==i.style?.visible,c=!1!==a.visible&&!1!==a.style?.visible;i.support3d=!(!i.support3d&&!a.support3d),i.zIndex=N(i.zIndex)||N(a.zIndex)?Math.max(i.zIndex??0,a.zIndex??0):void 0,i.style&&delete i.style.stroke,i.state&&Object.keys(i.state).forEach((e=>{`style`in i.state[e]?delete i.state[e].style.stroke:delete i.state[e].stroke}));let l=i,u=a;(o===`line`||c&&!s)&&(l=a,u=i),i.style=V({},u.style,l.style),i.state=V({},u.state,l.state),!1===i.interactive&&(i.style.fillPickable=!1),!1===a.interactive&&(a.style.strokePickable=!1),i.interactive=!(!i.interactive&&(r=a.interactive)!=null&&!r),e.area=i,e.line=a}}})))()}var yr;function br(){return(br=e((()=>{yr={label:{visible:!1,offset:5,position:`top`,style:{stroke:{type:`palette`,key:`backgroundColor`},lineWidth:2}},point:{style:{symbolType:`circle`}},seriesMark:`area`}})))()}var G,xr;function Sr(){return(Sr=e((()=>{Qn(),_t(),y(),Vt(),St(),T(),ge(),Zt(),Dt(),mt(),Kt(),fr(),mr(),j(),gr(),vr(),Bt(),Se(),ye(),an(),ot(),me(),br(),G=class e extends ie{constructor(){super(...arguments),this.type=O.area,this.transformerConstructor=_r,this._sortDataByAxis=!1}_getSpecUpdatePolicy(){let e=super._getSpecUpdatePolicy();return Object.assign(Object.assign({},e),{dataRelatedKeys:Object.assign(Object.assign({},e.dataRelatedKeys),gn)})}initMark(){let t=this._spec.seriesMark??`area`,n=this._isAreaVisible()||this._isLineVisible();this._areaMark=this._createMark(e.mark.area,{groupKey:this._seriesField,isSeriesMark:n&&t!==`point`},{morphElementKey:this.getDimensionField()[0]}),this.initSymbolMark(t===`point`)}initMarkStyle(){this.initAreaMarkStyle(),this.initSymbolMarkStyle()}initAreaMarkStyle(){let e=this.getSpec().area?.style?.curveType??this.getSpec().line?.style?.curveType,t=e===`monotone`?this._direction===`horizontal`?`monotoneY`:`monotoneX`:e,n=this._areaMark;if(n){let e=this._isAreaVisible(),r=this._isLineVisible();e||r?n.setVisible(!0):n.setVisible(!1),this._direction===`horizontal`?this.setMarkStyle(this._areaMark,{x:this.dataToPositionX.bind(this),x1:e=>{var t;return Qt(this.dataToPositionX1(e),((t=this._xAxisHelper)?.getScale)?.call(t,0))},y:this.dataToPositionY.bind(this),y1:this.dataToPositionY.bind(this),z:this._fieldZ?this.dataToPositionZ.bind(this):null,orient:this._direction},`normal`,w.Series):this.setMarkStyle(this._areaMark,{x:this.dataToPositionX.bind(this),x1:this.dataToPositionX.bind(this),y1:e=>{var t;return Qt(this.dataToPositionY1(e),((t=this._yAxisHelper)?.getScale)?.call(t,0))},y:this.dataToPositionY.bind(this),z:this._fieldZ?this.dataToPositionZ.bind(this):null},`normal`,w.Series),this.setMarkStyle(n,{fill:!!e&&this.getColorAttribute(),stroke:!!r&&this.getColorAttribute()},`normal`,w.Series),this._invalidType!==`zero`&&this.setMarkStyle(n,{defined:this._getInvalidDefined.bind(this),connectedType:this._getInvalidConnectType()},`normal`,w.Series),this.getStack()&&this.setMarkStyle(n,{zIndex:e=>-e[Yt]},`normal`,w.Series),this.setMarkStyle(n,{curveType:t},`normal`,w.Built_In),Object.keys(n.stateStyle).forEach((e=>{n.stateStyle[e].stroke&&n.setPostProcess(`stroke`,(e=>[e,!1,!1,!1]),e)}))}}initAnimation(){let e={direction:this.direction},t=this._spec.animationAppear?.preset;if(this._lineMark&&this._lineMark.setAnimationConfig(S(A.getAnimationInKey(`line`)?.(e,t),M(`line`,this._spec,this._markAttributeContext))),this._areaMark&&this._areaMark.setAnimationConfig(S(A.getAnimationInKey(`area`)?.(e,t),M(`area`,this._spec,this._markAttributeContext))),this._symbolMark){let e=Fe(this);this._symbolMark.setAnimationConfig(S(A.getAnimationInKey(`scaleInOut`)?.(),M(`point`,this._spec,this._markAttributeContext),e))}}_isAreaVisible(){let e=this._spec.area||{};return!1!==e.visible&&!1!==e.style?.visible}_isLineVisible(){let e=this._spec.line||{};return!1!==e.visible&&!1!==e.style?.visible}initTooltip(){this._tooltipHelper=new dr(this);let{group:e,mark:t}=this._tooltipHelper.activeTriggerSet;this._areaMark&&e.add(this._areaMark),this._lineMark&&e.add(this._lineMark),this._symbolMark&&(t.add(this._symbolMark),e.add(this._symbolMark))}viewDataStatisticsUpdate(e){super.viewDataStatisticsUpdate(e),this.encodeDefined(this._areaMark,`defined`)}compile(){super.compile(),this.addSamplingCompile(),this.addOverlapCompile()}getDefaultShapeType(){return`square`}getActiveMarks(){return[this._areaMark,this._symbolMark,this._lineMark]}onLayoutEnd(){super.onLayoutEnd(),this.reCompileSampling()}getSeriesStyle(e){return t=>{let n=this._spec.seriesMark??`area`,r=this._seriesMark?.getAttribute(t,e)??void 0;return t!==`fill`||r&&n!==`line`||(t=`stroke`,r=this._seriesMark?.getAttribute(t,e)??void 0),t===`stroke`&&Jn(r)?r[0]:r}}},G.type=O.area,G.builtInTheme={area:yr},G.mark=pr,G.transformerConstructor=_r,Hn(G,Dn),xr=()=>{tt(),de(),ft(),vn(),Ot(),hr(),lt(),nn(),A.registerSeries(G.type,G)}})))()}var Cr;function wr(){return(wr=e((()=>{Te(),ze(),Cr=class extends _e{_getDefaultSeriesSpec(e){return super._getDefaultSeriesSpec(e,[`point`,`line`,`area`,`seriesMark`,`activePoint`,`sampling`,`samplingFactor`,`pointDis`,`pointDisMul`,`markOverlap`,`areaLabel`,`useSequentialAnimation`])}transformSpec(e){super.transformSpec(e),se(e)}}})))()}var K,Tr;function Er(){return(Er=e((()=>{Sr(),T(),j(),wr(),it(),ce(),ke(),m(),Ht(),ae(),v(),wn(),On(),K=class extends g{constructor(){super(...arguments),this.transformerConstructor=Cr,this.type=`area`,this.seriesType=O.area}_setModelOption(){this._modelOption.getDimensionInfo=b,this._modelOption.getDimensionInfoByValue=Ie,this._modelOption.getRectByDimensionData=$e}},K.type=`area`,K.seriesType=O.area,K.transformerConstructor=Cr,Hn(K,Be),Tr=()=>{xn(),Ye(),vt(),Me(),xr(),Lt(),A.registerChart(K.type,K)}})))()}var Dr;function Or(){return(Or=e((()=>{F(),P(),R(),Zn(),E(),De(),Bt(),ue(),Dr=class extends Ft{constructor(){super(...arguments),this.coordinate=`polar`,this._outerRadius=bt,this._innerRadius=0,this._angleField=[],this._radiusField=[],this._sortDataByAxis=!1}get outerRadius(){return this._outerRadius}get innerRadius(){return this._innerRadius}getAngleField(){return this._angleField}setAngleField(e){return this._angleField=N(e)?L(e):[],this._angleField}getRadiusField(){return this._radiusField}setRadiusField(e){return this._radiusField=N(e)?L(e):[],this._radiusField}get innerRadiusField(){return this._innerRadiusField}setInnerRadiusField(e){return this._innerRadiusField=L(e),this._innerRadiusField}get radiusScale(){return this._radiusScale}setRadiusScale(e){return this._radiusScale=e,e}get angleScale(){return this._angleScale}setAngleScale(e){return this._angleScale=e,e}get angleAxisHelper(){return this._angleAxisHelper}set angleAxisHelper(e){this._angleAxisHelper=e,this.onAngleAxisHelperUpdate()}get radiusAxisHelper(){return this._radiusAxisHelper}set radiusAxisHelper(e){this._radiusAxisHelper=e,this.onRadiusAxisHelperUpdate()}get sortDataByAxis(){return this._sortDataByAxis}_buildMarkAttributeContext(){super._buildMarkAttributeContext(),this._markAttributeContext.valueToPosition=this.valueToPosition.bind(this),this._markAttributeContext.getCenter=()=>this.angleAxisHelper.center(),this._markAttributeContext.getLayoutRadius=()=>this._computeLayoutRadius()}valueToPosition(e,t){if(B(e)||B(t)||!this.angleAxisHelper||!this.radiusAxisHelper)return{x:NaN,y:NaN};let n=this.radiusAxisHelper.dataToPosition(L(t));if(n<0){if(this._invalidType===`break`||this._invalidType===`link`)return{x:NaN,y:NaN};if(this._invalidType===`zero`)return this.angleAxisHelper.center()}let r=this.angleAxisHelper.dataToPosition(L(e));return this.angleAxisHelper.coordToPoint({angle:r,radius:n})}dataToPosition(e,t){return e&&this.angleAxisHelper&&this.radiusAxisHelper?t&&!this.isDatumInViewData(e)?null:this.valueToPosition(this.getDatumPositionValues(e,this._angleField),this.getDatumPositionValues(e,this._radiusField)):null}dataToPositionX(e){return this.dataToPosition(e)?.x}dataToPositionY(e){return this.dataToPosition(e)?.y}dataToPositionZ(e){return 0}positionToData(e){}radiusToData(e){}angleToData(e){}getStatisticFields(){var e,t;let n=[];return(e=this.radiusAxisHelper)!=null&&e.getScale&&this._radiusField.forEach((e=>{let t={key:e,operations:[]};t.operations=qn(this.radiusAxisHelper.getScale(0).type)?[`max`,`min`]:[`values`],n.push(t)})),(t=this.angleAxisHelper)!=null&&t.getScale&&this._angleField.forEach((e=>{let t={key:e,operations:[]};t.operations=qn(this.angleAxisHelper.getScale(0).type)?[`max`,`min`]:[`values`],n.push(t)})),n}setAttrFromSpec(){super.setAttrFromSpec(),N(this._spec.outerRadius)&&(this._outerRadius=this._spec.outerRadius),N(this._spec.radius)&&(this._outerRadius=this._spec.radius),N(this._spec.innerRadius)&&(this._innerRadius=this._spec.innerRadius),N(this._spec.sortDataByAxis)&&(this._sortDataByAxis=!0===this._spec.sortDataByAxis)}onRadiusAxisHelperUpdate(){this.onMarkPositionUpdate()}onAngleAxisHelperUpdate(){this.onMarkPositionUpdate()}afterInitMark(){super.afterInitMark()}_computeLayoutRadius(){let e=this._angleAxisHelper||this._radiusAxisHelper;if(e)return e.layoutRadius();let{width:t,height:n}=this._region.getLayoutRect();return Math.min(t/2,n/2)}initEvent(){super.initEvent(),this.sortDataByAxis&&this.event.on(pe.scaleDomainUpdate,{filter:e=>e.model.id===this._angleAxisHelper?.getAxisId()},(()=>{this._sortDataInAxisDomain()}))}_sortDataInAxisDomain(){var e;(e=this.getViewData()?.latestData)!=null&&e.length&&te(this.angleAxisHelper,this._angleField[0],this.getViewData().latestData)}getInvalidCheckFields(){let e=[];return this.angleAxisHelper.isContinuous&&this._angleField.forEach((t=>{e.push(t)})),this.radiusAxisHelper.isContinuous&&this._radiusField.forEach((t=>{e.push(t)})),e}}})))()}function q(e){return Ze(e)?Number.parseFloat(e):0}var kr,Ar;function jr(){return(jr=e((()=>{re(),qe(),E(),R(),Bn(),kr=(e,t)=>{let{asStartAngle:n,asEndAngle:r,asMiddleAngle:i,asRadian:a,asRatio:o,asQuadrant:s,asK:c,showAllZero:l,supportNegative:u,showEmptyCircle:ee}=t,d=t.angleField(),f=t.startAngle(),te=t.endAngle(),p=t.minAngle(),m=e.map((e=>Object.assign({},e)));if(!m||m.length===0)return m;if(!l&&ee&&Ar(m,d,u))return[];let h=(e,t,o)=>{e[n]=t,e[r]=t+o,e[i]=t+o/2,e[a]=o,e[s]=Wn(t+o/2)},g=0,_=-1/0,v=!0;for(let e=0;e<m.length;e++){let t=u?Math.abs(q(m[e][d])):q(m[e][d]);g+=t,_=Math.max(t,_),v&&t!==0&&(v=!1),m[e][cn]=t}let ne=m.map((e=>Number(e[d]))),y=te-f,b=f,x=y,re=0,ie=Sn(ne);if(m.forEach(((e,t)=>{let n=e[cn],r=g?n/g:0,i=r*y;i<p?(i=p,x-=p):re+=n;let a=b,s=b+i;e[o]=r,e[c]=_?n/_:0,e._percent_=ie[t],h(e,a,i),b=s})),x<y){if(x<=.001){let e=y/m.length;m.forEach(((t,n)=>{h(t,f+n*e,e)}))}else{let e=x/re;b=f,m.forEach((t=>{let n=t[a]===p?p:t[cn]*e;h(t,b,n),b+=n}))}}if(g!==0&&(m[m.length-1][r]=te),v&&l){let e=y/m.length;m.forEach(((t,n)=>{h(t,f+n*e,e)}))}return m},Ar=(e,t,n)=>!!B(e)||e.length===0||!!e.every((e=>q(e[t])===0))||!n&&e.reduce(((e,n)=>e+q(n[t])),0)===0})))()}function Mr(e,t,n){return(r,i,a)=>t?e.growField===`radius`?{overall:0}:{overall:e.growFrom(r,i,n)}:{overall:!1}}function Nr(e,t){if(!1===t)return{};switch(t){case`fadeIn`:return Fr;case`growRadius`:return Pr(Object.assign(Object.assign({},e),{growField:`radius`}));default:return Pr(Object.assign(Object.assign({},e),{growField:`angle`}))}}var Pr,Fr,Ir,Lr,Rr,zr;function Br(){return(Br=e((()=>{we(),j(),qt(),Pr=e=>({type:e.growField===`radius`?`growRadiusIn`:`growAngleIn`,options:Mr(e,!0,C.appear)}),Fr={type:`fadeIn`},Ir=e=>({type:e.growField===`radius`?`growRadiusIn`:`growAngleIn`,easing:`linear`,options:Mr(e,!0,C.enter)}),Lr=e=>({type:e.growField===`radius`?`growRadiusOut`:`growAngleOut`,easing:`linear`,options:Mr(e,!0,C.exit)}),Rr=()=>{A.registerAnimation(`pie`,((e,t)=>({appear:Nr(e,t),enter:Ir(e),exit:Lr(e),disappear:{duration:Ct.disappear.duration}})))},zr=()=>{A.registerAnimation(`emptyCircle`,((e,t)=>({appear:Nr(e,t)})))}})))()}function Vr(e,t){var n;let r=t.options?.distance??10,i=er(t.duration)?t.duration/2:1e3,a=t.options.easing??`cubicOut`;return{oneByOne:t.oneByOne,loop:(n=t.loop)!=null&&n,timeSlices:[{duration:i,effects:{easing:a,channel:{x:{from:t=>e.getAttribute(`x`,t),to:t=>e.getAttribute(`x`,t)+I({x:0,y:0},r,t[k]).x},y:{from:t=>e.getAttribute(`y`,t),to:t=>e.getAttribute(`y`,t)+I({x:0,y:0},r,t[k]).y}}}},{duration:i,effects:{easing:a,channel:{x:{to:t=>e.getAttribute(`x`,t),from:t=>e.getAttribute(`x`,t)+I({x:0,y:0},r,t[k]).x},y:{to:t=>e.getAttribute(`y`,t),from:t=>e.getAttribute(`y`,t)+I({x:0,y:0},r,t[k]).y}}}}]}}function Hr(){return(Hr=e((()=>{E(),Xn(),Bn()})))()}var Ur;function Wr(){return(Wr=e((()=>{nt(),Ur=Object.assign(Object.assign({},h),{pie:{name:`pie`,type:`arc`},labelLine:{name:`labelLine`,type:`path`}})})))()}var Gr;function Kr(){return(Kr=e((()=>{Qn(),P(),ar(),Re(),Gr=class extends je{_transformLabelSpec(e){this._addMarkLabelSpec(e,`pie`)}_mergeThemeToSpec(e,t){let n=this._theme,r=e;if(this._shouldMergeThemeToSpec()){let n=this._getDefaultSpecFromChart(t);r=V({},this._theme,n,e);let i=(e,t)=>V({},e===`inside`||e===`inside-center`?this._theme.innerLabel:this._theme.outerLabel,t);Jn(r.label)?r.label=r.label.map((e=>i(e.position,e))):r.label=i(r.label.position,r.label)}return{spec:r,theme:n}}_getDefaultSpecFromChart(e){let t=super._getDefaultSpecFromChart(e)??{},{centerX:n,centerY:r}=e;return N(n)&&(t.centerX=n),N(r)&&(t.centerY=r),Object.keys(t).length>0?t:void 0}}})))()}var qr;function Jr(){return(Jr=e((()=>{ht(),qr=`${At}_LABEL_VISIBLE`})))()}var Yr;function Xr(){return(Xr=e((()=>{Yr={outerRadius:.6,pie:{style:{fillOpacity:1}},label:{visible:!1,interactive:!0,position:`outside`,style:{fontWeight:`normal`,stroke:{type:`palette`,key:`backgroundColor`},fillOpacity:1}},innerLabel:{style:{lineWidth:2}},emptyCircle:{style:{fill:{type:`palette`,key:`emptyCircleColor`},fillOpacity:1}}}})))()}var Zr,Qr,J,Y,$r;function ei(){return(ei=e((()=>{P(),R(),Bn(),tr(),E(),Vt(),an(),ht(),qe(),St(),En(),Or(),T(),jr(),Br(),ge(),we(),Hr(),Ve(),Wr(),j(),Kr(),Jr(),ue(),ee(),fn(),Qe(),Xr(),Zr={valueField:!0,angleField:!0,startAngle:!0,endAngle:!0,minAngle:!0},Qr={outerRadius:!0},J=class e extends Dr{constructor(){super(...arguments),this.transformerConstructor=Gr,this._pieMarkName=`pie`,this._pieMarkType=`arc`,this.getCenter=()=>{let e=this._region.getLayoutRect();return{x:yt(this._spec?.centerX,e.width,e,e.width/2),y:yt(this._spec?.centerY,e.height,e,e.height/2)}},this._startAngle=pn,this._endAngle=Wt,this._pieMark=null,this._labelMark=null,this._labelLineMark=null,this._emptyArcMark=null,this.dataToCentralPosition=e=>{let t=e[k];if(B(t))return null;let n=this.computeDatumRadius(e),r=this.computeDatumInnerRadius(e),i=this.computeCenter(e);return I(i,(n+r)/2,t)}}_buildMarkAttributeContext(){super._buildMarkAttributeContext(),this._markAttributeContext.getCenter=()=>({x:()=>this.getCenter().x,y:()=>this.getCenter().y}),this._markAttributeContext.startAngleScale=e=>this.startAngleScale(e),this._markAttributeContext.endAngleScale=e=>this.endAngleScale(e)}setAttrFromSpec(){var e,t,n;super.setAttrFromSpec(),this._centerOffset=this._spec.centerOffset??0,this._cornerRadius=this._spec.cornerRadius??0;let r=_(N(this._spec.startAngle)?z(this._spec.startAngle):this._startAngle,N(this._spec.endAngle)?z(this._spec.endAngle):this._endAngle);this._startAngle=r.startAngle,this._endAngle=r.endAngle,this._padAngle=N(this._spec.padAngle)?z(this._spec.padAngle):0,this.setAngleField(this._spec.valueField||this._spec.angleField),this._spec.categoryField&&this.setSeriesField(this._spec.categoryField),this._radiusField=[],this._specAngleField=this._angleField.slice(),this._specRadiusField=[],this._showEmptyCircle=(e=this._spec.emptyPlaceholder?.showEmptyCircle)!=null&&e,this._showAllZero=(t=this._spec.showAllZero)!=null&&t,this._supportNegative=(n=this._spec.supportNegative)!=null&&n}initData(){super.initData();let e=this.getViewData();if(!e)return;rt(this._dataSet,`pie`,kr),e.transform({type:`pie`,options:{angleField:()=>this._angleField[0],startAngle:()=>this._startAngle,endAngle:()=>this._endAngle,minAngle:()=>N(this._spec.minAngle)?z(this._spec.minAngle):0,asStartAngle:Xt,asEndAngle:wt,asRatio:gt,asMiddleAngle:k,asRadian:jt,asQuadrant:on,asK:dn,showAllZero:this._showAllZero,supportNegative:this._supportNegative,showEmptyCircle:this._showEmptyCircle}},!1);let t=new Yn(this._dataSet,{name:`${At}_series_${this.id}_viewDataLabel`});t.parse([this.getViewData()],{type:`dataview`}),this._viewDataLabel=new bn(this._option,t)}compileData(){var e;super.compileData(),(e=this._viewDataLabel)==null||e.compile()}initMark(){this._pieMark=this._createMark(Object.assign(Object.assign({},e.mark.pie),{name:this._pieMarkName,type:this._pieMarkType}),{key:un,groupKey:this._seriesField,isSeriesMark:!0},{morph:Ge(this._spec,this._pieMarkName),morphElementKey:this._seriesField}),this._showEmptyCircle&&(this._emptyArcMark=this._createMark({name:`emptyCircle`,type:`arc`},{dataView:!1}),this._data.addRelatedMark(this._emptyArcMark))}startAngleScale(e){return hn(Xt)(e)}endAngleScale(e){return hn(wt)(e)}_computeLayoutRadius(){return Ue((()=>this._spec.layoutRadius),this.getLayoutRect,this.getCenter,(()=>({startAngle:this._startAngle,endAngle:this._endAngle})))}initMarkStyle(){let e={x:()=>this.getCenter().x,y:()=>this.getCenter().y,fill:this.getColorAttribute(),outerRadius:Tt(this._outerRadius)?this._outerRadius:()=>this._computeLayoutRadius()*this._outerRadius,innerRadius:Tt(this._innerRadius)?this._innerRadius:()=>this._computeLayoutRadius()*this._innerRadius,cornerRadius:()=>this._computeLayoutRadius()*this._cornerRadius,startAngle:e=>this.startAngleScale(e),endAngle:e=>this.endAngleScale(e),padAngle:this._padAngle,centerOffset:this._centerOffset},t=this._pieMark;t&&this.setMarkStyle(t,e,`normal`,w.Series);let n=this._emptyArcMark;n&&this.setMarkStyle(n,Object.assign(Object.assign({},e),{visible:()=>{let e=this.getViewData().latestData;return!e||!e.length}}),`normal`,w.Series)}getInteractionTriggers(){return this._parseInteractionConfig(this._pieMark?[this._pieMark]:[])}initTooltip(){super.initTooltip(),this._pieMark&&this._tooltipHelper.activeTriggerSet.mark.add(this._pieMark)}initMarkStyleWithSpec(e,t){if(super.initMarkStyleWithSpec(e,t),e.name===this._pieMarkName){let t=this.getSpec()[e.name];if(t)for(let n in t.state||{})this.setMarkStyle(e,this.generateRadiusStyle(t.state[n]),n,w.User_Mark)}e.name===`emptyCircle`&&this.setMarkStyle(e,this.generateRadiusStyle(t.style),`normal`,w.User_Mark)}initLabelMarkStyle(e){e&&this.setMarkStyle(e,{visible:hn(qr).bind(this),text:e=>e[this.getDimensionField()[0]],fill:this.getColorAttribute(),z:this.dataToPositionZ.bind(this)})}afterInitMark(){super.afterInitMark()}initEvent(){var e;super.initEvent(),(e=this._viewDataLabel.getDataView())==null||e.target.addListener(`change`,this.viewDataLabelUpdate.bind(this))}initGroups(){}onLayoutEnd(){this._viewDataLabel.getDataView().reRunAllTransform(),this.onMarkPositionUpdate(),super.onLayoutEnd()}getDimensionField(){return this._seriesField?[this._seriesField]:[]}getMeasureField(){return this._specAngleField}viewDataLabelUpdate(){this.event.emit(pe.viewDataLabelUpdate,{model:this}),this._viewDataLabel.updateData()}generateRadiusStyle(e){if(!e)return;let t={};return e.outerRadius&&(t.outerRadius=()=>this._computeLayoutRadius()*e.outerRadius),e.innerRadius&&(t.innerRadius=()=>this._computeLayoutRadius()*e.innerRadius),e.cornerRadius&&(t.cornerRadius=()=>this._computeLayoutRadius()*e.cornerRadius),t}computeCenter(e){return{x:this._pieMark.getAttribute(`x`,e,`normal`),y:this._pieMark.getAttribute(`y`,e,`normal`)}}getRadius(e=`normal`){return(e===`normal`?this.getSpec()[this._pieMark?.name||`pie`]?.style?.outerRadius:this.getSpec()[this._pieMark?.name||`pie`]?.state?.[e]?.outerRadius)??this._outerRadius}getInnerRadius(e=`normal`){return(e===`normal`?this.getSpec()[this._pieMark?.name||`pie`]?.style?.innerRadius:this.getSpec()[this._pieMark?.name||`pie`]?.state?.[e]?.innerRadius)??this._innerRadius}computeRadius(e,t){return this._computeLayoutRadius()*e*(B(t)?1:t)+this._centerOffset}computeDatumRadius(e,t){return this._computeLayoutRadius()*this.getRadius(t)+this._centerOffset}_getSpecUpdatePolicy(){let e=super._getSpecUpdatePolicy();return Object.assign(Object.assign({},e),{compileOnlyKeys:Object.assign(Object.assign({},e.compileOnlyKeys),Qr),dataRelatedKeys:Object.assign(Object.assign({},e.dataRelatedKeys),Zr)})}_compareSpec(e,t,n){n??={data:!0};let r=[`centerX`,`centerY`,`centerOffset`,`radius`,`innerRadius`,`cornerRadius`,`startAngle`,`endAngle`,`padAngle`];r.forEach((e=>{n[e]=!0}));let i=super._compareSpec(e,t,n);return e??={},r.some((n=>e[n]!==t[n]))&&(i.reRender=!0,i.change=!0),i}computeDatumInnerRadius(e,t){return this._computeLayoutRadius()*this.getInnerRadius(t)+this._centerOffset}dataToPosition(e,t){let n=e[k];if(B(n)||t&&!this.isDatumInViewData(e))return null;let r=this.computeDatumRadius(e),i=this.computeCenter(e);return I(i,r,n)}initAnimation(){let e={growFrom:(e,t,n)=>{if(n===C.appear)return this._startAngle;if(n===C.disappear)return this._endAngle;let r=[C.disappear,C.exit],i=this._pieMark.getGraphics(),a=e?.[D];if(i.find((e=>e.context.data[0]?.[D]<a))===void 0)return this._startAngle;if(i.find((e=>e.context.data[0]?.[D]>a))===void 0)return this._endAngle;let o=[...i].reverse().find((e=>e.context.data[0]?.[D]<a));return r.includes(n)?o?.getFinalAttribute()?.endAngle:o?.attribute?.endAngle}},t=this._spec.animationAppear?.preset;if(this._pieMark){let n=S(A.getAnimationInKey(`pie`)?.(e,t),M(`pie`,this._spec,this._markAttributeContext));n.normal&&n.normal.type&&(n.normal=Vr(this._pieMark,n.normal)),this._pieMark.setAnimationConfig(n)}if(this._emptyArcMark){let n=S(A.getAnimationInKey(`emptyCircle`)?.(e,t??`fadeIn`));this._emptyArcMark.setAnimationConfig(n)}}getDefaultShapeType(){return`circle`}getGroupFields(){return[]}getStackGroupFields(){return[]}getStackValueField(){return``}_noAnimationDataKey(e,t){return t}getActiveMarks(){return[this._pieMark]}},J.transformerConstructor=Gr,J.mark=Ur,J.builtInTheme={pie:Yr},Y=class extends J{constructor(){super(...arguments),this.type=O.pie}},Y.type=O.pie,$r=()=>{l(),Rr(),zr(),A.registerSeries(Y.type,Y)}})))()}var ti;function ni(){return(ni=e((()=>{F(),Qn(),R(),P(),An(),ti=class extends Ke{_isValidSeries(e){return!this.seriesType||e===this.seriesType}getIndicatorSpec(e){let t=L(e.indicator),n=e.innerRadius??e.series?.[0]?.innerRadius;return N(n)&&t.forEach((e=>{B(e.limitRatio)&&(e.limitRatio=n)})),t}_getDefaultSeriesSpec(e,t){return super._getDefaultSeriesSpec(e,[`radius`,`outerRadius`,`innerRadius`,`startAngle`,`endAngle`,`centerX`,`centerY`,`sortDataByAxis`],t)}transformSpec(e){super.transformSpec(e),Jn(e.dataZoom)&&e.dataZoom.length>0&&e.dataZoom.forEach((e=>{e.filterMode===`axis`&&(e.filterMode=`filter`)})),this.transformSeriesSpec(e),N(e.indicator)&&(e.indicator=this.getIndicatorSpec(e))}}})))()}var X;function ri(){return(ri=e((()=>{ni(),X=class extends ti{needAxes(){return!1}_getDefaultSeriesSpec(e){let t=super._getDefaultSeriesSpec(e,[`center`,`centerOffset`,`cornerRadius`,`padAngle`,`minAngle`,`emptyPlaceholder`,`showAllZero`,`supportNegative`,`useSequentialAnimation`,`layoutRadius`]);return this._addSeriesRelatedSpecKeys([`valueField`,`angleField`]),t.categoryField=e.categoryField||e.seriesField,t.valueField=e.valueField||e.angleField,t.emptyCircle=e.emptyPlaceholder?.emptyCircle,t}}})))()}var ii;function ai(){return(ai=e((()=>{it(),ri(),ii=class extends g{constructor(){super(...arguments),this.transformerConstructor=X}},ii.transformerConstructor=X})))()}var Z,oi;function si(){return(si=e((()=>{ei(),T(),ai(),j(),ri(),wn(),Z=class extends ii{constructor(){super(...arguments),this.transformerConstructor=X,this.type=`pie`,this.seriesType=O.pie}},Z.type=`pie`,Z.seriesType=O.pie,Z.transformerConstructor=X,oi=()=>{Ye(),$r(),A.registerChart(Z.type,Z)}})))()}var ci;function li(){return(li=e((()=>{F(),zn(),ci=(e,t)=>{let{datum:n,title:r,content:i}=$n(t)?t():t,a=[],o=n.call(null);return r.visible&&a.push({type:`title`,index:0,datum:o,spec:r}),L(i).forEach(((e,t)=>{e.visible&&a.push({type:`content`,index:t,datum:o,spec:e})})),a}})))()}var ui,di;function fi(){return(fi=e((()=>{ui=(e,t)=>({fontSize:{type:`token`,key:e},fill:{type:`palette`,key:t},fontWeight:`normal`,fillOpacity:1,textBaseline:`top`,textAlign:`center`}),di={title:{visible:!0,autoLimit:!1,autoFit:!1,style:ui(`l1FontSize`,`primaryFontColor`)},content:{visible:!0,style:ui(`l2FontSize`,`tertiaryFontColor`)}}})))()}var pi,Q,mi;function hi(){return(hi=e((()=>{tr(),Oe(),zt(),ut(),ar(),ve(),fn(),Gn(),P(),zn(),F(),Vn(),li(),Qe(),or(),j(),Mt(),tn(),fi(),pi=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols==`function`){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n},Q=class extends st{constructor(){super(...arguments),this.type=Pe.indicator,this.name=Pe.indicator,this.specKey=`indicator`,this.layoutType=`none`,this.layoutZIndex=It.Indicator,this.layoutLevel=p.Indicator,this._gap=0,this._activeDatum=null}static getSpecInfo(e){return sn(e,this.specKey,this.type,(e=>e&&!1!==e.visible))}created(){super.created(),this.initData(),this.initEvent()}setAttrFromSpec(){super.setAttrFromSpec(),this._gap=this._spec.gap||0,this._title=this._spec.title,this._content=L(this._spec.content),this._regions=this._option.getRegionsInUserIdOrIndex(L(this._spec.regionId),L(this._spec.regionIndex))}_compareSpec(e,t){let n=super._compareSpec(e,t);return Kn(t,e)||n.reMake||n.reCompile||(n.change=!0,n.reRender=!0,n.effects=Object.assign(Object.assign({},n.effects),{component:!0,layout:!0,render:!0})),n}initEvent(){this._option.disableTriggerEvent||this._spec.trigger!==`none`&&(this._spec.trigger===`hover`?(this.event.on(`element-highlight:start`,(e=>{let t=e.graphics[0];this.isRelativeModel(t)&&this.updateDatum(xe(t))})),this.event.on(`element-highlight:reset`,(e=>{this._activeDatum&&this.updateDatum(null)}))):(this.event.on(`element-select:start`,(e=>{let t=e.graphics[0];this.isRelativeModel(t)&&this.updateDatum(xe(t))})),this.event.on(`element-select:reset`,(e=>{this._activeDatum&&this.updateDatum(null)}))))}updateDatum(e){this._activeDatum=e,this._displayData.updateData();let t=this._getIndicatorAttrs();this._createOrUpdateIndicatorComponent(t)}initData(){rt(this._option.dataSet,`indicatorFilter`,ci);let e=new Yn(this._option.dataSet,{name:`${this.type}_${this.id}_data`});e.transform({type:`indicatorFilter`,options:()=>({title:this._title,content:this._content,datum:()=>this._activeDatum})}),e.target.addListener(`change`,this.updateDatum.bind(this)),this._displayData=new bn(this._option,e)}updateLayoutAttribute(){let e=this._getIndicatorAttrs();this._createOrUpdateIndicatorComponent(e),super.updateLayoutAttribute()}_getIndicatorAttrs(){if(!1===this._spec.visible||!1===this._spec.fixed&&this._activeDatum===null)return{visible:!1};let e=this._regions[0],{width:t,height:n}=e.getLayoutRect(),{x:r,y:i}=e.getLayoutStartPoint(),a=this._spec,{content:o,offsetX:s,offsetY:c,limitRatio:l,title:u}=a,ee=pi(a,[`content`,`offsetX`,`offsetY`,`limitRatio`,`title`]),d=[];return L(o).forEach((e=>{let t=V({},this._theme.content,e);d.push({visible:!1!==t.visible&&(!t.field||this._activeDatum!==null),space:t.space||this._gap,autoLimit:t.autoLimit,autoFit:t.autoFit,fitPercent:t.fitPercent,fitStrategy:t.fitStrategy,style:Object.assign(Object.assign({},ct(Un(t.style,[`text`]),this._activeDatum)),{text:this._createText(t.field,t.style.text)})})})),Object.assign({visible:!0,size:{width:t,height:n},zIndex:this.layoutZIndex,x:r,y:i,dx:s?Ut(s,this._computeLayoutRadius()):0,dy:c?Ut(c,this._computeLayoutRadius()):0,limitRatio:l||1/0,title:{visible:!1!==u.visible&&(!N(u.field)||this._activeDatum!==null),space:u.space||this._gap,autoLimit:u.autoLimit,autoFit:u.autoFit,fitPercent:u.fitPercent,fitStrategy:u.fitStrategy,style:Object.assign(Object.assign({},ct(Un(u.style,[`text`]),this._activeDatum)),{text:this._createText(u.field,u.style.text)})},content:d},ee)}_createOrUpdateIndicatorComponent(e){if(!1===e.visible)return this._indicatorComponent&&this._indicatorComponent.parent&&this._indicatorComponent.parent.removeChild(this._indicatorComponent),void(this._indicatorComponent=null);if(this._indicatorComponent)Kn(e,this._cacheAttrs)||this._indicatorComponent.setAttributes(e);else{let t=this.getContainer(),n=new nr(e);n.name=`indicator`,t.add(n),this._indicatorComponent=n,this._indicatorComponent.on(`*`,((e,t)=>this._delegateEvent(this._indicatorComponent,e,t)))}this._cacheAttrs=e}_createText(e,t){return e?this._activeDatum?this._activeDatum[e]:``:$n(t)?t(this._activeDatum,void 0)??``:t??``}_computeLayoutRadius(){let{width:e,height:t}=this._regions[0].getLayoutRect();return Math.min(e/2,t/2)}isRelativeModel(e){return this._regions.some((t=>!!t.getSeriesInId(e.context.modelId)))}_getNeedClearVRenderComponents(){return[this._indicatorComponent]}clear(){this._cacheAttrs=null,super.clear()}getIndicatorComponent(){return this._indicatorComponent}},Q.type=Pe.indicator,Q.builtInTheme={indicator:di},Q.specKey=`indicator`,mi=()=>{A.registerComponent(Q.type,Q)}})))()}var gi;function _i(){return(_i=e((()=>{xt(),Er(),he(),Le(),ne(),yn(),gi=x(`AreaChart`,{type:`area`,vchartConstructor:ln},[Tr,Ce,oe,...Xe])})))()}var vi;function yi(){return(yi=e((()=>{at(),be(),fe(),We(),Ee(),d(),Ne(),Gt(),ir(),vi=[mn,rr,et,Nt,en,le,Ae,Rt,kn]})))()}var bi;function xi(){return(xi=e((()=>{xt(),si(),hi(),he(),ne(),yi(),bi=x(`PieChart`,{type:`pie`,vchartConstructor:ln},[oi,Ce,mi,...vi])})))()}function Si({height:e=260,text:t=`暂无数据`,tone:n=`muted`}){return/* @__PURE__ */ U(`div`,{style:{height:e,display:`flex`,alignItems:`center`,justifyContent:`center`,color:n===`success`?`var(--arc-antd-color-success)`:`var(--arc-antd-color-text-2)`,fontSize:13},children:t})}function Ci(){return(Ci=e((()=>{})))()}var wi,Ti;function Ei(){return(Ei=e((()=>{Pt(),jn(),wi=[{key:`list`,title:`日志列表`,description:`查询、筛选和查看日志`,icon:Mn},{key:`stats`,title:`统计分析`,description:`趋势与分布统计`,icon:f}],Ti=wi.map(e=>e.key)})))()}function Di(e,t=`日志`){return e===0?`清除全部${t}`:`清除${ki[e]??`${e} 天前`}的${t}`}function Oi({clean:e,onCleared:t}){let[n,r]=cr(!1),[i,a]=cr(0),[o,s]=cr(!1);return{modalVisible:n,days:i,verifying:o,openClearModal:e=>{a(e),r(!0)},closeModal:()=>r(!1),confirmClear:async()=>{if(!o){s(!0);try{await e(i),r(!1),c.success(i===0?`历史日志已清除`:`已清除${ki[i]??`${i} 天前`}的日志,最近 ${i} 天的记录已保留`),t?.()}finally{s(!1)}}}}}var ki,$;function Ai(){return(Ai=e((()=>{r(),ki={30:`一个月前`,90:`三个月前`,180:`六个月前`,365:`一年前`},$=[0,365,180,90,30]})))()}function ji({loading:e,onClear:n,label:r=`日志`}){return sr(ur)===`mobile-actions`?/* @__PURE__ */ U(H,{children:$.map(t=>/* @__PURE__ */ U(o,{type:`danger`,theme:`light`,icon:/* @__PURE__ */ U(Pn,{size:14}),loading:e,onClick:()=>n(t),children:Di(t,r)},t))}):/* @__PURE__ */ W(t,{children:[/* @__PURE__ */ U(o,{type:`danger`,theme:`light`,icon:/* @__PURE__ */ U(Pn,{size:14}),loading:e,onClick:()=>n($[0]),children:Di($[0],r)}),/* @__PURE__ */ U(s,{trigger:`click`,position:`bottomRight`,clickToHide:!0,render:/* @__PURE__ */ U(s.Menu,{children:$.map(t=>/* @__PURE__ */ U(s.Item,{disabled:e,onClick:()=>n(t),children:Di(t,r)},t))}),children:/* @__PURE__ */ U(o,{type:`danger`,theme:`light`,disabled:e,"aria-label":`选择清除${r}范围`,icon:/* @__PURE__ */ U(Fn,{size:14})})})]})}function Mi({logName:e,control:t}){return/* @__PURE__ */ U(Rn,{title:Di(t.days,e),visible:t.modalVisible,onCancel:t.closeModal,okText:`确认清除`,okButtonProps:{type:`danger`,loading:t.verifying},onOk:t.confirmClear,maskClosable:!1,children:/* @__PURE__ */ W(`p`,{style:{marginBottom:12},children:[`此操作将永久删除当前数据权限范围内`,t.days===0?`的全部${e}`:`${ki[t.days]??`${t.days} 天前`}的${e}`,`,不可恢复。`,t.days>0&&/* @__PURE__ */ W(H,{children:[/* @__PURE__ */ U(`br`,{}),`最近 `,t.days,` 天的记录将保留。`]}),e===`操作日志`&&/* @__PURE__ */ W(H,{children:[/* @__PURE__ */ U(`br`,{}),`本次清除操作仍会生成一条操作日志。`]})]})})}function Ni(){return(Ni=e((()=>{r(),In(),Nn(),Ln(),Ai()})))()}function Pi(e){let t=Array(7).fill(0);for(let n of e??[])t[(lr(n.date).day()+6)%7]+=n.count;return Hi.map((e,n)=>({name:e,count:t[n]}))}function Fi(e,t){return t>0?e-t:null}function Ii(e){return e==null||e.total===0?null:(e.successCount/e.total*100).toFixed(1)}function Li(e,t){return e&&t&&e.total>0&&t.total>0?e.successCount/e.total-t.successCount/t.total:null}function Ri(){return/* @__PURE__ */ U(i,{loading:!0,active:!0,placeholder:/* @__PURE__ */ W(H,{children:[/* @__PURE__ */ U(Jt,{style:{marginBottom:16},children:Array.from({length:4},(e,t)=>`sk-stat-${t}`).map(e=>/* @__PURE__ */ W(`div`,{children:[/* @__PURE__ */ U(i.Title,{style:{width:64,height:26,marginBottom:10}}),/* @__PURE__ */ U(i.Paragraph,{rows:1,style:{width:80,marginBottom:0}})]},e))}),/* @__PURE__ */ W(`div`,{className:`zx-panel`,style:{marginBottom:16},children:[/* @__PURE__ */ U(i.Title,{style:{width:180,height:14,marginBottom:16}}),/* @__PURE__ */ U(i.Image,{style:{width:`100%`,height:230}})]}),/* @__PURE__ */ U(`div`,{className:`chart-grid`,children:[`sk-chart-a`,`sk-chart-b`].map(e=>/* @__PURE__ */ W(`div`,{className:`zx-panel`,children:[/* @__PURE__ */ U(i.Title,{style:{width:120,height:14,marginBottom:16}}),/* @__PURE__ */ U(i.Image,{style:{width:`100%`,height:260}})]},e))})]}),children:null})}function zi({days:e,onDaysChange:t,loading:r,fetching:i,children:o}){return/* @__PURE__ */ W(`div`,{children:[/* @__PURE__ */ U(`div`,{style:{display:`flex`,justifyContent:`flex-end`,marginBottom:16},children:/* @__PURE__ */ U(a,{value:e,onChange:e=>t(e),style:{width:140},children:Vi.map(e=>/* @__PURE__ */ U(a.Option,{value:e.value,children:e.label},e.value))})}),r?/* @__PURE__ */ U(Ri,{}):/* @__PURE__ */ U(n,{spinning:i,children:o})]})}function Bi({title:e,children:t,danger:n}){return/* @__PURE__ */ W(`div`,{className:`zx-panel`,children:[/* @__PURE__ */ U(`div`,{style:{...Tn,color:n?`var(--arc-antd-color-danger)`:Tn.color},children:e}),t]})}var Vi,Hi;function Ui(){return(Ui=e((()=>{r(),dt(),rn(),Vi=[{label:`最近 7 天`,value:7},{label:`最近 30 天`,value:30},{label:`最近 90 天`,value:90}],Hi=[`周一`,`周二`,`周三`,`周四`,`周五`,`周六`,`周日`]})))()}export{gi as C,Sr as D,$r as E,xr as O,vi as S,ei as T,Si as _,Li as a,xi as b,Pi as c,Ni as d,Ai as f,Ei as g,Ti as h,Ii as i,ji as l,wi as m,zi as n,Fi as o,Oi as p,Hi as r,Ui as s,Bi as t,Mi as u,Ci as v,_i as w,yi as x,bi as y};
|
|
2
|
+
//# sourceMappingURL=LogStatsScaffold-DaB0JeAN.js.map
|