| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- (function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))n(l);new MutationObserver(l=>{for(const i of l)if(i.type==="childList")for(const c of i.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&n(c)}).observe(document,{childList:!0,subtree:!0});function s(l){const i={};return l.integrity&&(i.integrity=l.integrity),l.referrerPolicy&&(i.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?i.credentials="include":l.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function n(l){if(l.ep)return;l.ep=!0;const i=s(l);fetch(l.href,i)}})();/**
- * @vue/shared v3.5.43
- * (c) 2018-present Yuxi (Evan) You and Vue contributors
- * @license MIT
- **/function En(t){const e=Object.create(null);for(const s of t.split(","))e[s]=1;return s=>s in e}const Et={},Pe=[],pe=()=>{},Dl=()=>!1,Is=t=>t.charCodeAt(0)===111&&t.charCodeAt(1)===110&&(t.charCodeAt(2)>122||t.charCodeAt(2)<97),Ns=t=>t.startsWith("onUpdate:"),Nt=Object.assign,Cn=(t,e)=>{const s=t.indexOf(e);s>-1&&t.splice(s,1)},Zi=Object.prototype.hasOwnProperty,wt=(t,e)=>Zi.call(t,e),ut=Array.isArray,Fe=t=>_s(t)==="[object Map]",Es=t=>_s(t)==="[object Set]",Xn=t=>_s(t)==="[object Date]",pt=t=>typeof t=="function",qt=t=>typeof t=="string",he=t=>typeof t=="symbol",St=t=>t!==null&&typeof t=="object",Pl=t=>(St(t)||pt(t))&&pt(t.then)&&pt(t.catch),Hl=Object.prototype.toString,_s=t=>Hl.call(t),Qi=t=>_s(t).slice(8,-1),Rl=t=>_s(t)==="[object Object]",Fn=t=>qt(t)&&t!=="NaN"&&t[0]!=="-"&&""+parseInt(t,10)===t,ss=En(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Bs=t=>{const e=Object.create(null);return(s=>e[s]||(e[s]=t(s)))},ta=/-\w/g,ee=Bs(t=>t.replace(ta,e=>e.slice(1).toUpperCase())),ea=/\B([A-Z])/g,Ne=Bs(t=>t.replace(ea,"-$1").toLowerCase()),Il=Bs(t=>t.charAt(0).toUpperCase()+t.slice(1)),Zs=Bs(t=>t?`on${Il(t)}`:""),ue=(t,e)=>!Object.is(t,e),Qs=(t,...e)=>{for(let s=0;s<t.length;s++)t[s](...e)},Nl=(t,e,s,n=!1)=>{Object.defineProperty(t,e,{configurable:!0,enumerable:!1,writable:n,value:s})},sa=t=>{const e=parseFloat(t);return isNaN(e)?t:e};let Zn;const Ws=()=>Zn||(Zn=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function jt(t){if(ut(t)){const e={};for(let s=0;s<t.length;s++){const n=t[s],l=qt(n)?aa(n):jt(n);if(l)for(const i in l)e[i]=l[i]}return e}else if(qt(t)||St(t))return t}const na=/;(?![^(]*\))/g,la=/:([^]+)/,ia=/"(?:[^"\\]|\\[^])*"|'(?:[^'\\]|\\[^])*'|\\[^]|\/\*[^]*?\*\//g;function aa(t){const e={};return t.replace(ia,s=>s.startsWith("/*")?"":s).split(na).forEach(s=>{if(s){const n=s.split(la);n.length>1&&(e[n[0].trim()]=n[1].trim())}}),e}function Wt(t){let e="";if(qt(t))e=t;else if(ut(t))for(let s=0;s<t.length;s++){const n=Wt(t[s]);n&&(e+=n+" ")}else if(St(t))for(const s in t)t[s]&&(e+=s+" ");return e.trim()}const oa="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",ra=En(oa);function Bl(t){return!!t||t===""}function ca(t,e,s){if(t.length!==e.length)return!1;let n=!0;for(let l=0;n&&l<t.length;l++)n=Us(t[l],e[l],s);return n}function Qn(t,e,s){if(t.size!==e.size)return!1;const n=Array.from(e),l=new Uint8Array(n.length);for(const i of t){let c=-1;for(let r=0;r<n.length;r++)if(!l[r]&&Us(i,n[r],s)){c=r;break}if(c<0)return!1;l[c]=1}return!0}function da(t,e,s){let n=Fe(t),l=Fe(e);if(n||l||(n=Es(t),l=Es(e),n||l))return n&&l?Qn(t,e,s):!1;const i=Object.keys(t).length,c=Object.keys(e).length;if(i!==c)return!1;for(const r in t){const d=t.hasOwnProperty(r),_=e.hasOwnProperty(r);if(d&&!_||!d&&_||!Us(t[r],e[r],s))return!1}return String(t)===String(e)}function tl(t,e,s,n){s||(s=[new Map,new Map]);const[l,i]=s;if(l.has(t)||i.has(e))return l.get(t)===e&&i.get(e)===t;l.set(t,e),i.set(e,t);const c=n(t,e,s);return l.delete(t),i.delete(e),c}function Us(t,e,s){if(t===e)return!0;let n=Xn(t),l=Xn(e);return n||l?n&&l?t.getTime()===e.getTime():!1:(n=he(t),l=he(e),n||l?t===e:(n=ut(t),l=ut(e),n||l?n&&l?tl(t,e,s,ca):!1:(n=St(t),l=St(e),n||l?!n||!l?!1:tl(t,e,s,da):String(t)===String(e))))}const Wl=t=>!!(t&&t.__v_isRef===!0),u=t=>qt(t)?t:t==null?"":ut(t)||St(t)&&(t.toString===Hl||!pt(t.toString))?Wl(t)?u(t.value):JSON.stringify(t,Ul,2):String(t),Ul=(t,e)=>Wl(e)?Ul(t,e.value):Fe(e)?{[`Map(${e.size})`]:[...e.entries()].reduce((s,[n,l],i)=>(s[tn(n,i)+" =>"]=l,s),{})}:Es(e)?{[`Set(${e.size})`]:[...e.values()].map(s=>tn(s))}:he(e)?tn(e):St(e)&&!ut(e)&&!Rl(e)?String(e):e,tn=(t,e="")=>{var s;return he(t)?`Symbol(${(s=t.description)!=null?s:e})`:t};/**
- * @vue/reactivity v3.5.43
- * (c) 2018-present Yuxi (Evan) You and Vue contributors
- * @license MIT
- **/let It;class ua{constructor(e=!1){this.detached=e,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!e&&It&&(It.active?(this.parent=It,this.index=(It.scopes||(It.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let e,s;if(this.scopes){const n=this.scopes.slice();for(e=0,s=n.length;e<s;e++)n[e].pause()}for(e=0,s=this.effects.length;e<s;e++)this.effects[e].pause()}}resume(){if(this._active&&this._isPaused){this._isPaused=!1;let e,s;if(this.scopes){const l=this.scopes.slice();for(e=0,s=l.length;e<s;e++)l[e].resume()}const n=this.effects.slice();for(e=0,s=n.length;e<s;e++)n[e].resume()}}run(e){if(this._active){const s=It;try{return It=this,e()}finally{It=s}}}on(){++this._on===1&&(this.prevScope=It,It=this)}off(){if(this._on>0&&--this._on===0){if(It===this)It=this.prevScope;else{let e=It;for(;e;){if(e.prevScope===this){e.prevScope=this.prevScope;break}e=e.prevScope}}this.prevScope=void 0}}stop(e){if(this._active){this._active=!1;let s,n;for(s=0,n=this.effects.length;s<n;s++)this.effects[s].stop();for(this.effects.length=0,s=0,n=this.cleanups.length;s<n;s++)this.cleanups[s]();if(this.cleanups.length=0,this.scopes){const l=this.scopes.slice();for(s=0,n=l.length;s<n;s++)l[s].stop(!0);this.scopes.length=0}if(!this.detached&&this.parent&&!e){const l=this.parent.scopes.pop();l&&l!==this&&(this.parent.scopes[this.index]=l,l.index=this.index)}this.parent=void 0}}}function pa(){return It}let Ct;const en=new WeakSet;class Kl{constructor(e){this.fn=e,this.deps=void 0,this.depsTail=void 0,this.flags=5,this.next=void 0,this.cleanup=void 0,this.scheduler=void 0,It&&(It.active?It.effects.push(this):this.flags&=-2)}pause(){this.flags|=64}resume(){this.flags&64&&(this.flags&=-65,en.has(this)&&(en.delete(this),this.trigger()))}notify(){this.flags&2&&!(this.flags&32)||this.flags&8||Gl(this)}run(){if(!(this.flags&1))return this.fn();this.flags|=2,el(this),zl(this);const e=Ct,s=se;Ct=this,se=!0;try{return this.fn()}finally{Yl(this),Ct=e,se=s,this.flags&=-3}}stop(){if(this.flags&1){for(let e=this.deps;e;e=e.nextDep)qn(e);this.deps=this.depsTail=void 0,el(this),this.onStop&&this.onStop(),this.flags&=-2}}trigger(){this.flags&64?en.add(this):this.scheduler?this.scheduler():this.runIfDirty()}runIfDirty(){vn(this)&&this.run()}get dirty(){return vn(this)}}let Vl=0,ns,ls;function Gl(t,e=!1){if(t.flags|=8,e){t.next=ls,ls=t;return}t.next=ns,ns=t}function An(){Vl++}function On(){if(--Vl>0)return;if(ls){let e=ls;for(ls=void 0;e;){const s=e.next;e.next=void 0,e.flags&=-9,e=s}}let t;for(;ns;){let e=ns;for(ns=void 0;e;){const s=e.next;if(e.next=void 0,e.flags&=-9,e.flags&1)try{e.trigger()}catch(n){t||(t=n)}e=s}}if(t)throw t}function zl(t){for(let e=t.deps;e;e=e.nextDep)e.version=-1,e.prevActiveLink=e.dep.activeLink,e.dep.activeLink=e}function Yl(t){let e,s=t.depsTail,n=s;for(;n;){const l=n.prevDep;n.version===-1?(n===s&&(s=l),qn(n),ha(n)):e=n,n.dep.activeLink=n.prevActiveLink,n.prevActiveLink=void 0,n=l}t.deps=e,t.depsTail=s}function vn(t){for(let e=t.deps;e;e=e.nextDep)if(e.dep.version!==e.version||e.dep.computed&&(Jl(e.dep.computed)||e.dep.version!==e.version))return!0;return!!t._dirty}function Jl(t){if(t.flags&4&&!(t.flags&16)||(t.flags&=-17,t.globalVersion===cs)||(t.globalVersion=cs,!t.isSSR&&t.flags&128&&(!t.deps&&!t._dirty||!vn(t))))return;t.flags|=2;const e=t.dep,s=Ct,n=se;Ct=t,se=!0;try{zl(t);const l=t.fn(t._value);(e.version===0||ue(l,t._value))&&(t.flags|=128,t._value=l,e.version++)}catch(l){throw e.version++,l}finally{Ct=s,se=n,Yl(t),t.flags&=-3}}function qn(t,e=!1){const{dep:s,prevSub:n,nextSub:l}=t;if(n&&(n.nextSub=l,t.prevSub=void 0),l&&(l.prevSub=n,t.nextSub=void 0),s.subs===t&&(s.subs=n,!n&&s.computed)){s.computed.flags&=-5;for(let i=s.computed.deps;i;i=i.nextDep)qn(i,!0)}!e&&!--s.sc&&s.map&&s.map.delete(s.key)}function ha(t){const{prevDep:e,nextDep:s}=t;e&&(e.nextDep=s,t.prevDep=void 0),s&&(s.prevDep=e,t.nextDep=void 0)}let se=!0;const Xl=[];function $e(){Xl.push(se),se=!1}function xe(){const t=Xl.pop();se=t===void 0?!0:t}function el(t){const{cleanup:e}=t;if(t.cleanup=void 0,e){const s=Ct;Ct=void 0;try{e()}finally{Ct=s}}}let cs=0;class fa{constructor(e,s){this.sub=e,this.dep=s,this.version=s.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Ln{constructor(e){this.computed=e,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(e){if(!Ct||!se||Ct===this.computed)return;let s=this.activeLink;if(s===void 0||s.sub!==Ct)s=this.activeLink=new fa(Ct,this),Ct.deps?(s.prevDep=Ct.depsTail,Ct.depsTail.nextDep=s,Ct.depsTail=s):Ct.deps=Ct.depsTail=s,Zl(s);else if(s.version===-1&&(s.version=this.version,s.nextDep)){const n=s.nextDep;n.prevDep=s.prevDep,s.prevDep&&(s.prevDep.nextDep=n),s.prevDep=Ct.depsTail,s.nextDep=void 0,Ct.depsTail.nextDep=s,Ct.depsTail=s,Ct.deps===s&&(Ct.deps=n)}return s}trigger(e){this.version++,cs++,this.notify(e)}notify(e){An();try{for(let s=this.subs;s;s=s.prevSub)s.sub.notify()&&s.sub.dep.notify()}finally{On()}}}function Zl(t){if(t.dep.sc++,t.sub.flags&4){const e=t.dep.computed;if(e&&!t.dep.subs){e.flags|=20;for(let n=e.deps;n;n=n.nextDep)Zl(n)}const s=t.dep.subs;s!==t&&(t.prevSub=s,s&&(s.nextSub=t)),t.dep.subs=t}}const _n=new WeakMap,He=Symbol(""),gn=Symbol(""),ds=Symbol("");function Bt(t,e,s){if(se&&Ct){let n=_n.get(t);n||_n.set(t,n=new Map);let l=n.get(s);l||(n.set(s,l=new Ln),l.map=n,l.key=s),l.track()}}function ge(t,e,s,n,l,i){const c=_n.get(t);if(!c){cs++;return}const r=d=>{d&&d.trigger()};if(An(),e==="clear")c.forEach(r);else{const d=ut(t),_=d&&Fn(s);if(d&&s==="length"){const f=Number(n);c.forEach((m,v)=>{(v==="length"||v===ds||!he(v)&&v>=f)&&r(m)})}else switch((s!==void 0||c.has(void 0))&&r(c.get(s)),_&&r(c.get(ds)),e){case"add":d?_&&r(c.get("length")):(r(c.get(He)),Fe(t)&&r(c.get(gn)));break;case"delete":d||(r(c.get(He)),Fe(t)&&r(c.get(gn)));break;case"set":Fe(t)&&r(c.get(He));break}}On()}function We(t){const e=xt(t);return e===t||(Bt(e,"iterate",ds),Qt(t))?e:fe(t)?Ae(t)?e.map(s=>Oe(te(s))):e.map(Oe):e.map(te)}function Ks(t){return Bt(t=xt(t),"iterate",ds),t}function ce(t,e){return fe(t)?Oe(Ae(t)?te(e):e):te(e)}const ma={__proto__:null,[Symbol.iterator](){return sn(this,Symbol.iterator,t=>ce(this,t))},concat(...t){return We(this).concat(...t.map(e=>ut(e)?We(e):e))},entries(){return sn(this,"entries",t=>(t[1]=ce(this,t[1]),t))},every(t,e){return me(this,"every",t,e,void 0,arguments)},filter(t,e){return me(this,"filter",t,e,s=>s.map(n=>ce(this,n)),arguments)},find(t,e){return me(this,"find",t,e,s=>ce(this,s),arguments)},findIndex(t,e){return me(this,"findIndex",t,e,void 0,arguments)},findLast(t,e){return me(this,"findLast",t,e,s=>ce(this,s),arguments)},findLastIndex(t,e){return me(this,"findLastIndex",t,e,void 0,arguments)},forEach(t,e){return me(this,"forEach",t,e,void 0,arguments)},includes(...t){return nn(this,"includes",t)},indexOf(...t){return nn(this,"indexOf",t)},join(t){return We(this).join(t)},lastIndexOf(...t){return nn(this,"lastIndexOf",t)},map(t,e){return me(this,"map",t,e,void 0,arguments)},pop(){return Je(this,"pop")},push(...t){return Je(this,"push",t)},reduce(t,...e){return sl(this,"reduce",t,e)},reduceRight(t,...e){return sl(this,"reduceRight",t,e)},shift(){return Je(this,"shift")},some(t,e){return me(this,"some",t,e,void 0,arguments)},splice(...t){return Je(this,"splice",t)},toReversed(){return We(this).toReversed()},toSorted(t){return We(this).toSorted(t)},toSpliced(...t){return We(this).toSpliced(...t)},unshift(...t){return Je(this,"unshift",t)},values(){return sn(this,"values",t=>ce(this,t))}};function sn(t,e,s){const n=Ks(t),l=n[e]();return n!==t&&!Qt(t)&&(l._next=l.next,l.next=()=>{const i=l._next();return i.done||(i.value=s(i.value)),i}),l}const va=Array.prototype;function me(t,e,s,n,l,i){const c=Ks(t),r=c!==t&&!Qt(t),d=c[e];if(d!==va[e]){const m=d.apply(t,i);return r?te(m):m}let _=s;c!==t&&(r?_=function(m,v){return s.call(this,ce(t,m),v,t)}:s.length>2&&(_=function(m,v){return s.call(this,m,v,t)}));const f=d.call(c,_,n);return r&&l?l(f):f}function sl(t,e,s,n){const l=Ks(t),i=l!==t&&!Qt(t);let c=s,r=!1;l!==t&&(i?(r=n.length===0,c=function(_,f,m){return r&&(r=!1,_=ce(t,_)),s.call(this,_,ce(t,f),m,t)}):s.length>3&&(c=function(_,f,m){return s.call(this,_,f,m,t)}));const d=l[e](c,...n);return r?ce(t,d):d}function nn(t,e,s){const n=xt(t);Bt(n,"iterate",ds);const l=n[e](...s);return(l===-1||l===!1)&&Pn(s[0])?(s[0]=xt(s[0]),n[e](...s)):l}function Je(t,e,s=[]){$e(),An();const n=xt(t)[e].apply(t,s);return On(),xe(),n}const _a=En("__proto__,__v_isRef,__isVue"),Ql=new Set(Object.getOwnPropertyNames(Symbol).filter(t=>t!=="arguments"&&t!=="caller").map(t=>Symbol[t]).filter(he));function ga(t){he(t)||(t=String(t));const e=xt(this);return Bt(e,"has",t),e.hasOwnProperty(t)}class ti{constructor(e=!1,s=!1){this._isReadonly=e,this._isShallow=s}get(e,s,n){if(s==="__v_skip")return e.__v_skip;const l=this._isReadonly,i=this._isShallow;if(s==="__v_isReactive")return!l;if(s==="__v_isReadonly")return l;if(s==="__v_isShallow")return i;if(s==="__v_raw")return n===(l?i?Ea:li:i?ni:si).get(e)||Object.getPrototypeOf(e)===Object.getPrototypeOf(n)?e:void 0;const c=ut(e);if(!l){let d;if(c&&(d=ma[s]))return d;if(s==="hasOwnProperty")return ga}const r=Reflect.get(e,s,Ut(e)?e:n);if((he(s)?Ql.has(s):_a(s))||(l||Bt(e,"get",s),i))return r;if(Ut(r)){const d=c&&Fn(s)?r:r.value;return l&&St(d)?yn(d):d}return St(r)?l?yn(r):gs(r):r}}class ei extends ti{constructor(e=!1){super(!1,e)}set(e,s,n,l){let i=e[s];const c=ut(e)&&Fn(s);if(!this._isShallow){const _=fe(i);if(!Qt(n)&&!fe(n)&&(i=xt(i),n=xt(n)),!c&&Ut(i)&&!Ut(n))return _||(i.value=n),!0}const r=c?Number(s)<e.length:wt(e,s),d=Reflect.set(e,s,n,Ut(e)?e:l);return e===xt(l)&&d&&(r?ue(n,i)&&ge(e,"set",s,n):ge(e,"add",s,n)),d}deleteProperty(e,s){const n=wt(e,s);e[s];const l=Reflect.deleteProperty(e,s);return l&&n&&ge(e,"delete",s,void 0),l}has(e,s){const n=Reflect.has(e,s);return(!he(s)||!Ql.has(s))&&Bt(e,"has",s),n}ownKeys(e){return Bt(e,"iterate",ut(e)?"length":He),Reflect.ownKeys(e)}}class ba extends ti{constructor(e=!1){super(!0,e)}set(e,s){return!0}deleteProperty(e,s){return!0}}const ya=new ei,$a=new ba,xa=new ei(!0);const bn=t=>t,$s=t=>Reflect.getPrototypeOf(t);function wa(t,e,s){return function(...n){const l=this.__v_raw,i=xt(l),c=Fe(i),r=t==="entries"||t===Symbol.iterator&&c,d=t==="keys"&&c,_=l[t](...n),f=s?bn:e?Oe:te;return!e&&Bt(i,"iterate",d?gn:He),Nt(Object.create(_),{next(){const{value:m,done:v}=_.next();return v?{value:m,done:v}:{value:r?[f(m[0]),f(m[1])]:f(m),done:v}}})}}function xs(t){return function(...e){return t==="delete"?!1:t==="clear"?void 0:this}}function ka(t,e){const s={get(l){const i=this.__v_raw,c=xt(i),r=xt(l);t||(ue(l,r)&&Bt(c,"get",l),Bt(c,"get",r));const{has:d}=$s(c),_=e?bn:t?Oe:te;if(d.call(c,l))return _(i.get(l));if(d.call(c,r))return _(i.get(r));i!==c&&i.get(l)},get size(){const l=this.__v_raw;return!t&&Bt(xt(l),"iterate",He),l.size},has(l){const i=this.__v_raw,c=xt(i),r=xt(l);return t||(ue(l,r)&&Bt(c,"has",l),Bt(c,"has",r)),l===r?i.has(l):i.has(l)||i.has(r)},forEach(l,i){const c=this,r=c.__v_raw,d=xt(r),_=e?bn:t?Oe:te;return!t&&Bt(d,"iterate",He),r.forEach((f,m)=>l.call(i,_(f),_(m),c))}};return Nt(s,t?{add:xs("add"),set:xs("set"),delete:xs("delete"),clear:xs("clear")}:{add(l){const i=xt(this),c=$s(i),r=xt(l),d=!e&&!Qt(l)&&!fe(l)?r:l;return c.has.call(i,d)||ue(l,d)&&c.has.call(i,l)||ue(r,d)&&c.has.call(i,r)||(i.add(d),ge(i,"add",d,d)),this},set(l,i){!e&&!Qt(i)&&!fe(i)&&(i=xt(i));const c=xt(this),{has:r,get:d}=$s(c);let _=r.call(c,l);_||(l=xt(l),_=r.call(c,l));const f=d.call(c,l);return c.set(l,i),_?ue(i,f)&&ge(c,"set",l,i):ge(c,"add",l,i),this},delete(l){const i=xt(this),{has:c,get:r}=$s(i);let d=c.call(i,l);d||(l=xt(l),d=c.call(i,l)),r&&r.call(i,l);const _=i.delete(l);return d&&ge(i,"delete",l,void 0),_},clear(){const l=xt(this),i=l.size!==0,c=l.clear();return i&&ge(l,"clear",void 0,void 0),c}}),["keys","values","entries",Symbol.iterator].forEach(l=>{s[l]=wa(l,t,e)}),s}function jn(t,e){const s=ka(t,e);return(n,l,i)=>l==="__v_isReactive"?!t:l==="__v_isReadonly"?t:l==="__v_raw"?n:Reflect.get(wt(s,l)&&l in n?s:n,l,i)}const Ma={get:jn(!1,!1)},Sa={get:jn(!1,!0)},Ta={get:jn(!0,!1)};const si=new WeakMap,ni=new WeakMap,li=new WeakMap,Ea=new WeakMap;function Ca(t){switch(t){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function gs(t){return fe(t)?t:Dn(t,!1,ya,Ma,si)}function Fa(t){return Dn(t,!1,xa,Sa,ni)}function yn(t){return Dn(t,!0,$a,Ta,li)}function Dn(t,e,s,n,l){if(!St(t)||t.__v_raw&&!(e&&t.__v_isReactive)||t.__v_skip||!Object.isExtensible(t))return t;const i=l.get(t);if(i)return i;const c=Ca(Qi(t));if(c===0)return t;const r=new Proxy(t,c===2?n:s);return l.set(t,r),r}function Ae(t){return fe(t)?Ae(t.__v_raw):!!(t&&t.__v_isReactive)}function fe(t){return!!(t&&t.__v_isReadonly)}function Qt(t){return!!(t&&t.__v_isShallow)}function Pn(t){return t?!!t.__v_raw:!1}function xt(t){const e=t&&t.__v_raw;return e?xt(e):t}function Aa(t){return!wt(t,"__v_skip")&&Object.isExtensible(t)&&Nl(t,"__v_skip",!0),t}const te=t=>St(t)?gs(t):t,Oe=t=>St(t)?yn(t):t;function Ut(t){return t?t.__v_isRef===!0:!1}function At(t){return Oa(t,!1)}function Oa(t,e){return Ut(t)?t:new qa(t,e)}class qa{constructor(e,s){this.dep=new Ln,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=s?e:xt(e),this._value=s?e:te(e),this.__v_isShallow=s}get value(){return this.dep.track(),this._value}set value(e){const s=this._rawValue,n=this.__v_isShallow||Qt(e)||fe(e);e=n?e:xt(e),ue(e,s)&&(this._rawValue=e,this._value=n?e:te(e),this.dep.trigger())}}function p(t){return Ut(t)?t.value:t}const La={get:(t,e,s)=>e==="__v_raw"?t:p(Reflect.get(t,e,s)),set:(t,e,s,n)=>{const l=t[e];return Ut(l)&&!Ut(s)?(l.value=s,!0):Reflect.set(t,e,s,n)}};function ii(t){return Ae(t)?t:new Proxy(t,La)}class ja{constructor(e,s,n){this.fn=e,this.setter=s,this._value=void 0,this.dep=new Ln(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=cs-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!s,this.isSSR=n}notify(){if(this.flags|=16,!(this.flags&8)&&Ct!==this)return Gl(this,!0),!0}get value(){const e=this.dep.track();return Jl(this),e&&(e.version=this.dep.version),this._value}set value(e){this.setter&&this.setter(e)}}function Da(t,e,s=!1){let n,l;return pt(t)?n=t:(n=t.get,l=t.set),new ja(n,l,s)}const ws={},Cs=new WeakMap;let je;function Pa(t,e=!1,s=je){if(s){let n=Cs.get(s);n||Cs.set(s,n=[]),n.push(t)}}function Ha(t,e,s=Et){const{immediate:n,deep:l,once:i,scheduler:c,augmentJob:r,call:d}=s,_=M=>l?M:Qt(M)||l===!1||l===0?be(M,1):be(M);let f,m,v,k,O=!1,K=!1;if(Ut(t)?(m=()=>t.value,O=Qt(t)):Ae(t)?(m=()=>_(t),O=!0):ut(t)?(K=!0,O=t.some(M=>Ae(M)||Qt(M)),m=()=>t.map(M=>{if(Ut(M))return M.value;if(Ae(M))return _(M);if(pt(M))return d?d(M,2):M()})):pt(t)?e?m=d?()=>d(t,2):t:m=()=>{if(v){$e();try{v()}finally{xe()}}const M=je;je=f;try{return d?d(t,3,[k]):t(k)}finally{je=M}}:m=pe,e&&l){const M=m,W=l===!0?1/0:l;m=()=>be(M(),W)}const Q=pa(),Y=()=>{f.stop(),Q&&Q.active&&Cn(Q.effects,f)};if(i&&e){const M=e;e=(...W)=>{const dt=M(...W);return Y(),dt}}let C=K?new Array(t.length).fill(ws):ws;const D=M=>{if(!(!(f.flags&1)||!f.dirty&&!M))if(e){const W=f.run();if(M||l||O||(K?W.some((dt,ct)=>ue(dt,C[ct])):ue(W,C))){v&&v();const dt=je;je=f;try{const ct=[W,C===ws?void 0:K&&C[0]===ws?[]:C,k];C=W,d?d(e,3,ct):e(...ct)}finally{je=dt}}}else f.run()};return r&&r(D),f=new Kl(m),f.scheduler=c?()=>c(D,!1):D,k=M=>Pa(M,!1,f),v=f.onStop=()=>{const M=Cs.get(f);if(M){if(d)d(M,4);else for(const W of M)W();Cs.delete(f)}},e?n?D(!0):C=f.run():c?c(D.bind(null,!0),!0):f.run(),Y.pause=f.pause.bind(f),Y.resume=f.resume.bind(f),Y.stop=Y,Y}function be(t,e=1/0,s){if(e<=0||!St(t)||t.__v_skip||(s=s||new Map,(s.get(t)||0)>=e))return t;if(s.set(t,e),e--,Ut(t))be(t.value,e,s);else if(ut(t))for(let n=0;n<t.length;n++)be(t[n],e,s);else if(Es(t)||Fe(t))t.forEach(n=>{be(n,e,s)});else if(Rl(t)){for(const n in t)be(t[n],e,s);for(const n of Object.getOwnPropertySymbols(t))Object.prototype.propertyIsEnumerable.call(t,n)&&be(t[n],e,s)}return t}/**
- * @vue/runtime-core v3.5.43
- * (c) 2018-present Yuxi (Evan) You and Vue contributors
- * @license MIT
- **/function bs(t,e,s,n){try{return n?t(...n):t()}catch(l){Vs(l,e,s)}}function ne(t,e,s,n){if(pt(t)){const l=bs(t,e,s,n);return l&&Pl(l)&&l.catch(i=>{Vs(i,e,s)}),l}if(ut(t)){const l=[];for(let i=0;i<t.length;i++)l.push(ne(t[i],e,s,n));return l}}function Vs(t,e,s,n=!0){const l=e?e.vnode:null,{errorHandler:i,throwUnhandledErrorInProduction:c}=e&&e.appContext.config||Et;if(e){let r=e.parent;const d=e.proxy,_=`https://vuejs.org/error-reference/#runtime-${s}`;for(;r;){const f=r.ec;if(f){for(let m=0;m<f.length;m++)if(f[m](t,d,_)===!1)return}r=r.parent}if(i){$e(),bs(i,null,10,[t,d,_]),xe();return}}Ra(t,s,l,n,c)}function Ra(t,e,s,n=!0,l=!1){if(l)throw t;console.error(t)}const Gt=[];let re=-1;const Ve=[];let Ee=null,Ue=0;const ai=Promise.resolve();let Fs=null;function Ia(t){const e=Fs||ai;return t?e.then(this?t.bind(this):t):e}function Na(t){let e=re+1,s=Gt.length;for(;e<s;){const n=e+s>>>1,l=Gt[n],i=us(l);i<t||i===t&&l.flags&2?e=n+1:s=n}return e}function Hn(t){if(!(t.flags&1)){const e=us(t),s=Gt[Gt.length-1];!s||!(t.flags&2)&&e>=us(s)?Gt.push(t):Gt.splice(Na(e),0,t),t.flags|=1,oi()}}function oi(){Fs||(Fs=ai.then(ci))}function Ba(t){if(!ut(t))Ee&&t.id===-1?Ee.splice(Ue+1,0,t):t.flags&1||(Ve.push(t),t.flags|=1);else for(let e=0;e<t.length;e++)Ve.push(t[e]);oi()}function nl(t,e,s=re+1){for(;s<Gt.length;s++){const n=Gt[s];if(n&&n.flags&2){if(t&&n.id!==t.uid)continue;Gt.splice(s,1),s--,n.flags&4&&(n.flags&=-2),n(),n.flags&4||(n.flags&=-2)}}}function ri(t){if(Ve.length){const e=[...new Set(Ve)].sort((s,n)=>us(s)-us(n));if(Ve.length=0,Ee){for(let s=0;s<e.length;s++)Ee.push(e[s]);return}for(Ee=e,Ue=0;Ue<Ee.length;Ue++){const s=Ee[Ue];s.flags&4&&(s.flags&=-2),s.flags&8||s(),s.flags&=-2}Ee=null,Ue=0}}const us=t=>t.id==null?t.flags&2?-1:1/0:t.id;function ci(t){try{for(re=0;re<Gt.length;re++){const e=Gt[re];e&&!(e.flags&8)&&(e.flags&4&&(e.flags&=-2),bs(e,e.i,e.i?15:14),e.flags&4||(e.flags&=-2))}}finally{for(;re<Gt.length;re++){const e=Gt[re];e&&(e.flags&=-2)}re=-1,Gt.length=0,ri(),Fs=null,(Gt.length||Ve.length)&&ci()}}let Zt=null,di=null;function As(t){const e=Zt;return Zt=t,di=t&&t.type.__scopeId||null,e}function Wa(t,e=Zt,s){if(!e||t._n)return t;const n=(...l)=>{n._d&&fl(-1);const i=As(e),c=Re.length;let r;try{r=t(...l)}finally{for(let d=Re.length;d>c;d--)Li();As(i),n._d&&fl(1)}return r};return n._n=!0,n._c=!0,n._d=!0,n}function ps(t,e){if(Zt===null)return t;const s=Xs(Zt),n=t.dirs||(t.dirs=[]);for(let l=0;l<e.length;l++){let[i,c,r,d=Et]=e[l];i&&(pt(i)&&(i={mounted:i,updated:i}),i.deep&&be(c),n.push({dir:i,instance:s,value:c,oldValue:void 0,arg:r,modifiers:d}))}return t}function qe(t,e,s,n){const l=t.dirs,i=e&&e.dirs;for(let c=0;c<l.length;c++){const r=l[c];i&&(r.oldValue=i[c].value);let d=r.dir[n];d&&($e(),ne(d,s,8,[t.el,r,t,e]),xe())}}function Ua(t,e){if(zt){let s=zt.provides;const n=zt.parent&&zt.parent.provides;n===s&&(s=zt.provides=Object.create(n)),s[t]=e}}function Ms(t,e,s=!1){const n=No();if(n||Ge){let l=Ge?Ge._context.provides:n?n.parent==null||n.ce?n.vnode.appContext&&n.vnode.appContext.provides:n.parent.provides:void 0;if(l&&t in l)return l[t];if(arguments.length>1)return s&&pt(e)?e.call(n&&n.proxy):e}}const Ka=Symbol.for("v-scx"),Va=()=>Ms(Ka);function is(t,e,s){return ui(t,e,s)}function ui(t,e,s=Et){const{immediate:n,deep:l,flush:i,once:c}=s,r=Nt({},s),d=e&&n||!e&&i!=="post";let _;if(ms){if(i==="sync"){const k=Va();_=k.__watcherHandles||(k.__watcherHandles=[])}else if(!d){const k=()=>{};return k.stop=pe,k.resume=pe,k.pause=pe,k}}const f=zt;r.call=(k,O,K)=>ne(k,f,O,K);let m=!1;i==="post"?r.scheduler=k=>{Yt(k,f&&f.suspense)}:i!=="sync"&&(m=!0,r.scheduler=(k,O)=>{O?k():Hn(k)}),r.augmentJob=k=>{e&&(k.flags|=4),m&&(k.flags|=2,f&&(k.id=f.uid,k.i=f))};const v=Ha(t,e,r);return ms&&(_?_.push(v):d&&v()),v}function Ga(t,e,s){const n=this.proxy,l=qt(t)?t.includes(".")?pi(n,t):()=>n[t]:t.bind(n,n);let i;pt(e)?i=e:(i=e.handler,s=e);const c=ys(this),r=ui(l,i.bind(n),s);return c(),r}function pi(t,e){const s=e.split(".");return()=>{let n=t;for(let l=0;l<s.length&&n;l++)n=n[s[l]];return n}}const za=Symbol("_vte"),Gs=t=>t.__isTeleport,ln=Symbol("_leaveCb");function Ya(t){let e=t[0];if(t.length>1){for(const s of t)if(s.type!==we){e=s;break}}return e}function hi(t){if(!In(t))return Gs(t.type)&&t.children?Ya(t.children):t;if(t.component)return t.component.subTree;const{shapeFlag:e,children:s}=t;if(s){if(e&16)return s[0];if(e&32&&pt(s.default))return s.default()}}function Rn(t,e){if(t.shapeFlag&6&&t.component){t.transition=e;const s=t.component.subTree;Rn(Gs(s.type)&&hi(s)||s,e)}else t.shapeFlag&128?(t.ssContent.transition=e.clone(t.ssContent),t.ssFallback.transition=e.clone(t.ssFallback)):t.transition=e}function Pt(t,e){return pt(t)?Nt({name:t.name},e,{setup:t}):t}function fi(t){t.ids=[t.ids[0]+t.ids[2]+++"-",0,0]}function ll(t,e){let s;return!!((s=Object.getOwnPropertyDescriptor(t,e))&&!s.configurable)}const Os=new WeakMap;function as(t,e,s,n,l=!1){if(ut(t)){t.forEach((K,Q)=>as(K,e&&(ut(e)?e[Q]:e),s,n,l));return}if(os(n)&&!l){n.shapeFlag&512&&n.type.__asyncResolved&&n.component.subTree.component&&as(t,e,s,n.component.subTree);return}const i=n.shapeFlag&4?Xs(n.component):n.el,c=l?null:i,{i:r,r:d}=t,_=e&&e.r,f=r.refs===Et?r.refs={}:r.refs,m=r.setupState,v=xt(m),k=m===Et?Dl:K=>ll(f,K)?!1:wt(v,K),O=(K,Q)=>!(Q&&ll(f,Q));if(_!=null&&_!==d){if(il(e),qt(_))f[_]=null,k(_)&&(m[_]=null);else if(Ut(_)){const K=e;O(_,K.k)&&(_.value=null),K.k&&(f[K.k]=null)}}if(pt(d))bs(d,r,12,[c,f]);else{const K=qt(d),Q=Ut(d);if(K||Q){const Y=()=>{if(t.f){const C=K?k(d)?m[d]:f[d]:O()||!t.k?d.value:f[t.k];if(l)ut(C)&&Cn(C,i);else if(ut(C))C.includes(i)||C.push(i);else if(K)f[d]=[i],k(d)&&(m[d]=f[d]);else{const D=[i];O(d,t.k)&&(d.value=D),t.k&&(f[t.k]=D)}}else K?(f[d]=c,k(d)&&(m[d]=c)):Q&&(O(d,t.k)&&(d.value=c),t.k&&(f[t.k]=c))};if(c){const C=()=>{Y(),Os.delete(t)};C.id=-1,Os.set(t,C),Yt(C,s)}else il(t),Y()}}}function il(t){const e=Os.get(t);e&&(e.flags|=8,Os.delete(t))}Ws().requestIdleCallback;Ws().cancelIdleCallback;const os=t=>!!t.type.__asyncLoader,In=t=>t.type.__isKeepAlive;function Ja(t,e){mi(t,"a",e)}function Xa(t,e){mi(t,"da",e)}function mi(t,e,s=zt){const n=t.__wdc||(t.__wdc=()=>{let l=s;for(;l;){if(l.isDeactivated)return;l=l.parent}return t()});if(zs(e,n,s),s){let l=s.parent;for(;l&&l.parent;)In(l.parent.vnode)&&Za(n,e,s,l),l=l.parent}}function Za(t,e,s,n){const l=zs(e,t,n,!0);Nn(()=>{Cn(n[e],l)},s)}function zs(t,e,s=zt,n=!1){if(s){const l=s[t]||(s[t]=[]),i=e.__weh||(e.__weh=(...c)=>{$e();const r=ys(s),d=ne(e,s,t,c);return r(),xe(),d});return n?l.unshift(i):l.push(i),i}}const Me=t=>(e,s=zt)=>{(!ms||t==="sp")&&zs(t,(...n)=>e(...n),s)},Qa=Me("bm"),Be=Me("m"),to=Me("bu"),eo=Me("u"),vi=Me("bum"),Nn=Me("um"),so=Me("sp"),no=Me("rtg"),lo=Me("rtc");function io(t,e=zt){zs("ec",t,e)}const ao=Symbol.for("v-ndc");function _t(t,e,s,n){let l;const i=s,c=ut(t);if(c||qt(t)){const r=c&&Ae(t);let d=!1,_=!1;r&&(d=!Qt(t),_=fe(t),t=Ks(t)),l=new Array(t.length);for(let f=0,m=t.length;f<m;f++)l[f]=e(d?_?Oe(te(t[f])):te(t[f]):t[f],f,void 0,i)}else if(typeof t=="number"){l=new Array(t);for(let r=0;r<t;r++)l[r]=e(r+1,r,void 0,i)}else if(St(t))if(t[Symbol.iterator])l=Array.from(t,(r,d)=>e(r,d,void 0,i));else{const r=Object.keys(t);l=new Array(r.length);for(let d=0,_=r.length;d<_;d++){const f=r[d];l[d]=e(t[f],f,d,i)}}else l=[];return l}const $n=t=>t?Hi(t)?Xs(t):$n(t.parent):null,rs=Nt(Object.create(null),{$:t=>t,$el:t=>t.vnode.el,$data:t=>t.data,$props:t=>t.props,$attrs:t=>t.attrs,$slots:t=>t.slots,$refs:t=>t.refs,$parent:t=>$n(t.parent),$root:t=>$n(t.root),$host:t=>t.ce,$emit:t=>t.emit,$options:t=>gi(t),$forceUpdate:t=>t.f||(t.f=()=>{Hn(t.update)}),$nextTick:t=>t.n||(t.n=Ia.bind(t.proxy)),$watch:t=>Ga.bind(t)}),an=(t,e)=>t!==Et&&!t.__isScriptSetup&&wt(t,e),oo={get({_:t},e){if(e==="__v_skip")return!0;const{ctx:s,setupState:n,data:l,props:i,accessCache:c,type:r,appContext:d}=t;if(e[0]!=="$"){const v=c[e];if(v!==void 0)switch(v){case 1:return n[e];case 2:return l[e];case 4:return s[e];case 3:return i[e]}else{if(an(n,e))return c[e]=1,n[e];if(l!==Et&&wt(l,e))return c[e]=2,l[e];if(wt(i,e))return c[e]=3,i[e];if(s!==Et&&wt(s,e))return c[e]=4,s[e];xn&&(c[e]=0)}}const _=rs[e];let f,m;if(_)return e==="$attrs"&&Bt(t.attrs,"get",""),_(t);if((f=r.__cssModules)&&(f=f[e]))return f;if(s!==Et&&wt(s,e))return c[e]=4,s[e];if(m=d.config.globalProperties,wt(m,e))return m[e]},set({_:t},e,s){const{data:n,setupState:l,ctx:i}=t;return an(l,e)?(l[e]=s,!0):n!==Et&&wt(n,e)?(n[e]=s,!0):wt(t.props,e)||e[0]==="$"&&e.slice(1)in t?!1:(i[e]=s,!0)},has({_:{data:t,setupState:e,accessCache:s,ctx:n,appContext:l,props:i,type:c}},r){let d;return!!(s[r]||t!==Et&&r[0]!=="$"&&wt(t,r)||an(e,r)||wt(i,r)||wt(n,r)||wt(rs,r)||wt(l.config.globalProperties,r)||(d=c.__cssModules)&&d[r])},defineProperty(t,e,s){return s.get!=null?t._.accessCache[e]=0:wt(s,"value")&&this.set(t,e,s.value,null),Reflect.defineProperty(t,e,s)}};function al(t){return ut(t)?t.reduce((e,s)=>(e[s]=null,e),{}):t}let xn=!0;function ro(t){const e=gi(t),s=t.proxy,n=t.ctx;xn=!1,e.beforeCreate&&ol(e.beforeCreate,t,"bc");const{data:l,computed:i,methods:c,watch:r,provide:d,inject:_,created:f,beforeMount:m,mounted:v,beforeUpdate:k,updated:O,activated:K,deactivated:Q,beforeDestroy:Y,beforeUnmount:C,destroyed:D,unmounted:M,render:W,renderTracked:dt,renderTriggered:ct,errorCaptured:gt,serverPrefetch:Lt,expose:Kt,inheritAttrs:T,components:G,directives:R,filters:q}=e;if(_&&co(_,n,null),c)for(const A in c){const H=c[A];pt(H)&&(n[A]=H.bind(s))}if(l){const A=l.call(s,s);St(A)&&(t.data=gs(A))}if(xn=!0,i)for(const A in i){const H=i[A],z=pt(H)?H.bind(s,s):pt(H.get)?H.get.bind(s,s):pe,N=!pt(H)&&pt(H.set)?H.set.bind(s):pe,B=P({get:z,set:N});Object.defineProperty(n,A,{enumerable:!0,configurable:!0,get:()=>B.value,set:tt=>B.value=tt})}if(r)for(const A in r)_i(r[A],n,s,A);if(d){const A=pt(d)?d.call(s):d;Reflect.ownKeys(A).forEach(H=>{Ua(H,A[H])})}f&&ol(f,t,"c");function I(A,H){ut(H)?H.forEach(z=>A(z.bind(s))):H&&A(H.bind(s))}if(I(Qa,m),I(Be,v),I(to,k),I(eo,O),I(Ja,K),I(Xa,Q),I(io,gt),I(lo,dt),I(no,ct),I(vi,C),I(Nn,M),I(so,Lt),ut(Kt))if(Kt.length){const A=t.exposed||(t.exposed={});Kt.forEach(H=>{Object.defineProperty(A,H,{get:()=>s[H],set:z=>s[H]=z,enumerable:!0})})}else t.exposed||(t.exposed={});W&&t.render===pe&&(t.render=W),T!=null&&(t.inheritAttrs=T),G&&(t.components=G),R&&(t.directives=R),Lt&&fi(t)}function co(t,e,s=pe){ut(t)&&(t=wn(t));for(const n in t){const l=t[n];let i;St(l)?"default"in l?i=Ms(l.from||n,l.default,!0):i=Ms(l.from||n):i=Ms(l),Ut(i)?Object.defineProperty(e,n,{enumerable:!0,configurable:!0,get:()=>i.value,set:c=>i.value=c}):e[n]=i}}function ol(t,e,s){ne(ut(t)?t.map(n=>n.bind(e.proxy)):t.bind(e.proxy),e,s)}function _i(t,e,s,n){let l=n.includes(".")?pi(s,n):()=>s[n];if(qt(t)){const i=e[t];pt(i)&&is(l,i)}else if(pt(t))is(l,t.bind(s));else if(St(t))if(ut(t))t.forEach(i=>_i(i,e,s,n));else{const i=pt(t.handler)?t.handler.bind(s):e[t.handler];pt(i)&&is(l,i,t)}}function gi(t){const e=t.type,{mixins:s,extends:n}=e,{mixins:l,optionsCache:i,config:{optionMergeStrategies:c}}=t.appContext,r=i.get(e);let d;return r?d=r:!l.length&&!s&&!n?d=e:(d={},l.length&&l.forEach(_=>qs(d,_,c,!0)),qs(d,e,c)),St(e)&&i.set(e,d),d}function qs(t,e,s,n=!1){const{mixins:l,extends:i}=e;i&&qs(t,i,s,!0),l&&l.forEach(c=>qs(t,c,s,!0));for(const c in e)if(!(n&&c==="expose")){const r=uo[c]||s&&s[c];t[c]=r?r(t[c],e[c]):e[c]}return t}const uo={data:rl,props:cl,emits:cl,methods:ts,computed:ts,beforeCreate:Vt,created:Vt,beforeMount:Vt,mounted:Vt,beforeUpdate:Vt,updated:Vt,beforeDestroy:Vt,beforeUnmount:Vt,destroyed:Vt,unmounted:Vt,activated:Vt,deactivated:Vt,errorCaptured:Vt,serverPrefetch:Vt,components:ts,directives:ts,watch:ho,provide:rl,inject:po};function rl(t,e){return e?t?function(){return Nt(pt(t)?t.call(this,this):t,pt(e)?e.call(this,this):e)}:e:t}function po(t,e){return ts(wn(t),wn(e))}function wn(t){if(ut(t)){const e={};for(let s=0;s<t.length;s++)e[t[s]]=t[s];return e}return t}function Vt(t,e){return t?[...new Set([].concat(t,e))]:e}function ts(t,e){return t?Nt(Object.create(null),t,e):e}function cl(t,e){return t?ut(t)&&ut(e)?[...new Set([...t,...e])]:Nt(Object.create(null),al(t),al(e??{})):e}function ho(t,e){if(!t)return e;if(!e)return t;const s=Nt(Object.create(null),t);for(const n in e)s[n]=Vt(t[n],e[n]);return s}function bi(){return{app:null,config:{isNativeTag:Dl,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let fo=0;function mo(t,e){return function(n,l=null){pt(n)||(n=Nt({},n)),l!=null&&!St(l)&&(l=null);const i=bi(),c=new WeakSet,r=[];let d=!1;const _=i.app={_uid:fo++,_component:n,_props:l,_container:null,_context:i,_instance:null,version:Go,get config(){return i.config},set config(f){},use(f,...m){return c.has(f)||(f&&pt(f.install)?(c.add(f),f.install(_,...m)):pt(f)&&(c.add(f),f(_,...m))),_},mixin(f){return i.mixins.includes(f)||i.mixins.push(f),_},component(f,m){return m?(i.components[f]=m,_):i.components[f]},directive(f,m){return m?(i.directives[f]=m,_):i.directives[f]},mount(f,m,v){if(!d){const k=_._ceVNode||Ft(n,l);return k.appContext=i,v===!0?v="svg":v===!1&&(v=void 0),t(k,f,v),d=!0,_._container=f,f.__vue_app__=_,Xs(k.component)}},onUnmount(f){r.push(f)},unmount(){d&&(ne(r,_._instance,16),t(null,_._container),delete _._container.__vue_app__)},provide(f,m){return i.provides[f]=m,_},runWithContext(f){const m=Ge;Ge=_;try{return f()}finally{Ge=m}}};return _}}let Ge=null;const vo=(t,e)=>e==="modelValue"||e==="model-value"?t.modelModifiers:t[`${e}Modifiers`]||t[`${ee(e)}Modifiers`]||t[`${Ne(e)}Modifiers`];function _o(t,e,...s){if(t.isUnmounted)return;const n=t.vnode.props||Et;let l=s;const i=e.startsWith("update:"),c=i&&vo(n,e.slice(7));c&&(c.trim&&(l=s.map(f=>qt(f)?f.trim():f)),c.number&&(l=l.map(sa)));let r,d=n[r=Zs(e)]||n[r=Zs(ee(e))];!d&&i&&(d=n[r=Zs(Ne(e))]),d&&ne(d,t,6,l);const _=n[r+"Once"];if(_){if(!t.emitted)t.emitted={};else if(t.emitted[r])return;t.emitted[r]=!0,ne(_,t,6,l)}}const go=new WeakMap;function yi(t,e,s=!1){const n=s?go:e.emitsCache,l=n.get(t);if(l!==void 0)return l;const i=t.emits;let c={},r=!1;if(!pt(t)){const d=_=>{const f=yi(_,e,!0);f&&(r=!0,Nt(c,f))};!s&&e.mixins.length&&e.mixins.forEach(d),t.extends&&d(t.extends),t.mixins&&t.mixins.forEach(d)}return!i&&!r?(St(t)&&n.set(t,null),null):(ut(i)?i.forEach(d=>c[d]=null):Nt(c,i),St(t)&&n.set(t,c),c)}function Ys(t,e){return!t||!Is(e)?!1:(e=e.slice(2),e=e==="Once"?e:e.replace(/Once$/,""),wt(t,e[0].toLowerCase()+e.slice(1))||wt(t,Ne(e))||wt(t,e))}function dl(t){const{type:e,vnode:s,proxy:n,withProxy:l,propsOptions:[i],slots:c,attrs:r,emit:d,render:_,renderCache:f,props:m,data:v,setupState:k,ctx:O,inheritAttrs:K}=t,Q=As(t);let Y,C;try{if(s.shapeFlag&4){const M=l||n,W=M;Y=de(_.call(W,M,f,m,k,v,O)),C=r}else{const M=e;Y=de(M.length>1?M(m,{attrs:r,slots:c,emit:d}):M(m,null)),C=e.props?r:bo(r)}}catch(M){Re.length=0,Vs(M,t,1),Y=Ft(we)}let D=Y;if(C&&K!==!1){const M=Object.keys(C),{shapeFlag:W}=D;M.length&&W&7&&(i&&M.some(Ns)&&(C=yo(C,i)),D=ze(D,C,!1,!0))}if(s.dirs&&(D=ze(D,null,!1,!0),D.dirs=D.dirs?D.dirs.concat(s.dirs):s.dirs),s.transition){const M=Gs(D.type)&&hi(D)||D;Rn(M,s.transition)}return Y=D,As(Q),Y}const bo=t=>{let e;for(const s in t)(s==="class"||s==="style"||Is(s))&&((e||(e={}))[s]=t[s]);return e},yo=(t,e)=>{const s={};for(const n in t)(!Ns(n)||!(n.slice(9)in e))&&(s[n]=t[n]);return s};function $o(t,e,s){const{props:n,children:l,component:i}=t,{props:c,children:r,patchFlag:d}=e,_=i.emitsOptions;if(e.dirs||e.transition)return!0;if(s&&d>=0){if(d&1024)return!0;if(d&16)return n?ul(n,c,_):!!c;if(d&8){const f=e.dynamicProps;for(let m=0;m<f.length;m++){const v=f[m];if($i(c,n,v)&&!Ys(_,v))return!0}}}else return(l||r)&&(!r||!r.$stable)?!0:n===c?!1:n?c?ul(n,c,_):!0:!!c;return!1}function ul(t,e,s){const n=Object.keys(e);if(n.length!==Object.keys(t).length)return!0;for(let l=0;l<n.length;l++){const i=n[l];if($i(e,t,i)&&!Ys(s,i))return!0}return!1}function $i(t,e,s){const n=t[s],l=e[s];return s==="style"&&St(n)&&St(l)?!Us(n,l):n!==l}function xo({vnode:t,parent:e,suspense:s},n){for(;e;){const l=e.subTree;if(l.suspense&&l.suspense.activeBranch===t&&(l.suspense.vnode.el=l.el=n,t=l),l===t)(t=e.vnode).el=n,e=e.parent;else break}s&&s.activeBranch===t&&(s.vnode.el=n)}const xi={},wi=()=>Object.create(xi),ki=t=>Object.getPrototypeOf(t)===xi;function wo(t,e,s,n=!1){const l={},i=wi();t.propsDefaults=Object.create(null),Mi(t,e,l,i);for(const c in t.propsOptions[0])c in l||(l[c]=void 0);s?t.props=n?l:Fa(l):t.type.props?t.props=l:t.props=i,t.attrs=i}function ko(t,e,s,n){const{props:l,attrs:i,vnode:{patchFlag:c}}=t,r=xt(l),[d]=t.propsOptions;let _=!1;if((n||c>0)&&!(c&16)){if(c&8){const f=t.vnode.dynamicProps;for(let m=0;m<f.length;m++){let v=f[m];if(Ys(t.emitsOptions,v))continue;const k=e[v];if(d)if(wt(i,v))k!==i[v]&&(i[v]=k,_=!0);else{const O=ee(v);l[O]=kn(d,r,O,k,t,!1)}else k!==i[v]&&(i[v]=k,_=!0)}}}else{Mi(t,e,l,i)&&(_=!0);let f;for(const m in r)(!e||!wt(e,m)&&((f=Ne(m))===m||!wt(e,f)))&&(d?s&&(s[m]!==void 0||s[f]!==void 0)&&(l[m]=kn(d,r,m,void 0,t,!0)):delete l[m]);if(i!==r)for(const m in i)(!e||!wt(e,m))&&(delete i[m],_=!0)}_&&ge(t.attrs,"set","")}function Mi(t,e,s,n){const[l,i]=t.propsOptions;let c=!1,r;if(e)for(let d in e){if(ss(d))continue;const _=e[d];let f;l&&wt(l,f=ee(d))?!i||!i.includes(f)?s[f]=_:(r||(r={}))[f]=_:Ys(t.emitsOptions,d)||(!(d in n)||_!==n[d])&&(n[d]=_,c=!0)}if(i){const d=xt(s),_=r||Et;for(let f=0;f<i.length;f++){const m=i[f];s[m]=kn(l,d,m,_[m],t,!wt(_,m))}}return c}function kn(t,e,s,n,l,i){const c=t[s];if(c!=null){const r=wt(c,"default");if(r&&n===void 0){const d=c.default;if(c.type!==Function&&!c.skipFactory&&pt(d)){const{propsDefaults:_}=l;if(s in _)n=_[s];else{const f=ys(l);n=_[s]=d.call(null,e),f()}}else n=d;l.ce&&l.ce._setProp(s,n)}c[0]&&(i&&!r?n=!1:c[1]&&(n===""||n===Ne(s))&&(n=!0))}return n}const Mo=new WeakMap;function Si(t,e,s=!1){const n=s?Mo:e.propsCache,l=n.get(t);if(l)return l;const i=t.props,c={},r=[];let d=!1;if(!pt(t)){const f=m=>{d=!0;const[v,k]=Si(m,e,!0);Nt(c,v),k&&r.push(...k)};!s&&e.mixins.length&&e.mixins.forEach(f),t.extends&&f(t.extends),t.mixins&&t.mixins.forEach(f)}if(!i&&!d)return St(t)&&n.set(t,Pe),Pe;if(ut(i))for(let f=0;f<i.length;f++){const m=ee(i[f]);pl(m)&&(c[m]=Et)}else if(i)for(const f in i){const m=ee(f);if(pl(m)){const v=i[f],k=c[m]=ut(v)||pt(v)?{type:v}:Nt({},v),O=k.type;let K=!1,Q=!0;if(ut(O))for(let Y=0;Y<O.length;++Y){const C=O[Y],D=pt(C)&&C.name;if(D==="Boolean"){K=!0;break}else D==="String"&&(Q=!1)}else K=pt(O)&&O.name==="Boolean";k[0]=K,k[1]=Q,(K||wt(k,"default"))&&r.push(m)}}const _=[c,r];return St(t)&&n.set(t,_),_}function pl(t){return t[0]!=="$"&&!ss(t)}const Bn=t=>t==="_"||t==="_ctx"||t==="$stable",Wn=t=>ut(t)?t.map(de):[de(t)],So=(t,e,s)=>{if(e._n)return e;const n=Wa((...l)=>Wn(e(...l)),s);return n._c=!1,n},Ti=(t,e,s)=>{const n=t._ctx;for(const l in t){if(Bn(l))continue;const i=t[l];if(pt(i))e[l]=So(l,i,n);else if(i!=null){const c=Wn(i);e[l]=()=>c}}},Ei=(t,e)=>{const s=Wn(e);t.slots.default=()=>s},Ci=(t,e,s)=>{for(const n in e)(s||!Bn(n))&&(t[n]=e[n])},To=(t,e,s)=>{const n=t.slots=wi();if(t.vnode.shapeFlag&32){const l=e._;l?(Ci(n,e,s),s&&Nl(n,"_",l,!0)):Ti(e,n)}else e&&Ei(t,e)},Eo=(t,e,s)=>{const{vnode:n,slots:l}=t;let i=!0,c=Et;if(n.shapeFlag&32){const r=e._;r?s&&r===1?i=!1:Ci(l,e,s):(i=!e.$stable,Ti(e,l)),c=e}else e&&(Ei(t,e),c={default:1});if(i)for(const r in l)!Bn(r)&&c[r]==null&&delete l[r]},Yt=qo;function Co(t){return Fo(t)}function Fo(t,e){const s=Ws();s.__VUE__=!0;const{insert:n,remove:l,patchProp:i,createElement:c,createText:r,createComment:d,setText:_,setElementText:f,parentNode:m,nextSibling:v,setScopeId:k=pe,insertStaticContent:O}=t,K=(h,g,b,y=null,S=null,F=null,L=void 0,j=null,x=!!g.dynamicChildren)=>{if(h===g)return;h&&!Xe(h,g)&&(y=lt(h),tt(h,S,F,!0),h=null),g.patchFlag===-2&&(x=!1,g.dynamicChildren=null),g.dynamicChildren&&h&&h.dynamicChildren&&h.dynamicChildren.hasOnce&&(g.dynamicChildren===Pe&&(g.dynamicChildren=[]),g.dynamicChildren.hasOnce=!0);const{type:$,ref:X,shapeFlag:U}=g;switch($){case Js:Q(h,g,b,y);break;case we:Y(h,g,b,y);break;case Ss:h==null&&C(g,b,y,L);break;case it:G(h,g,b,y,S,F,L,j,x);break;default:U&1?W(h,g,b,y,S,F,L,j,x):U&6?R(h,g,b,y,S,F,L,j,x):(U&64||U&128)&&$.process(h,g,b,y,S,F,L,j,x,nt)}X!=null&&S?as(X,h&&h.ref,F,g||h,!g):X==null&&h&&h.ref!=null&&as(h.ref,null,F,h,!0)},Q=(h,g,b,y)=>{if(h==null)n(g.el=r(g.children),b,y);else{const S=g.el=h.el;g.children!==h.children&&_(S,g.children)}},Y=(h,g,b,y)=>{h==null?n(g.el=d(g.children||""),b,y):g.el=h.el},C=(h,g,b,y)=>{[h.el,h.anchor]=O(h.children,g,b,y,h.el,h.anchor)},D=({el:h,anchor:g},b,y)=>{let S;for(;h&&h!==g;)S=v(h),n(h,b,y),h=S;n(g,b,y)},M=({el:h,anchor:g})=>{let b;for(;h&&h!==g;)b=v(h),l(h),h=b;l(g)},W=(h,g,b,y,S,F,L,j,x)=>{if(g.type==="svg"?L="svg":g.type==="math"&&(L="mathml"),h==null)dt(g,b,y,S,F,L,j,x);else{const $=h.el&&h.el._isVueCE?h.el:null;try{$&&$._beginPatch(),Lt(h,g,S,F,L,j,x)}finally{$&&$._endPatch()}}},dt=(h,g,b,y,S,F,L,j)=>{let x,$;const{props:X,shapeFlag:U,transition:et,dirs:ot}=h;if(x=h.el=c(h.type,F,X&&X.is,X),U&8?f(x,h.children):U&16&>(h.children,x,null,y,S,on(h,F),L,j),ot&&qe(h,null,y,"created"),ct(x,h,h.scopeId,L,y),X){for(const Tt in X)Tt!=="value"&&!ss(Tt)&&i(x,Tt,null,X[Tt],F,y);"value"in X&&i(x,"value",null,X.value,F),($=X.onVnodeBeforeMount)&&oe($,y,h)}ot&&qe(h,null,y,"beforeMount");const bt=Ao(S,et);bt&&et.beforeEnter(x),n(x,g,b),(($=X&&X.onVnodeMounted)||bt||ot)&&Yt(()=>{try{$&&oe($,y,h),bt&&et.enter(x),ot&&qe(h,null,y,"mounted")}finally{}},S)},ct=(h,g,b,y,S)=>{if(b&&k(h,b),y)for(let F=0;F<y.length;F++)k(h,y[F]);if(S){let F=S.subTree;if(g===F||qi(F.type)&&(F.ssContent===g||F.ssFallback===g)){const L=S.vnode;ct(h,L,L.scopeId,L.slotScopeIds,S.parent)}}},gt=(h,g,b,y,S,F,L,j,x=0)=>{for(let $=x;$<h.length;$++){const X=h[$]=j?_e(h[$]):de(h[$]);K(null,X,g,b,y,S,F,L,j)}},Lt=(h,g,b,y,S,F,L)=>{const j=g.el=h.el;let{patchFlag:x,dynamicChildren:$,dirs:X}=g;x|=h.patchFlag&16;const U=h.props||Et,et=g.props||Et;let ot;if(b&&Le(b,!1),(ot=et.onVnodeBeforeUpdate)&&oe(ot,b,g,h),X&&qe(g,h,b,"beforeUpdate"),b&&Le(b,!0),$&&(!h.dynamicChildren||h.dynamicChildren.length!==$.length)&&(x=0,L=!1,$=null),(U.innerHTML&&et.innerHTML==null||U.textContent&&et.textContent==null)&&f(j,""),$?Kt(h.dynamicChildren,$,j,b,y,on(g,S),F):L||H(h,g,j,null,b,y,on(g,S),F,!1),x>0){if(x&16)T(j,U,et,b,S);else if(x&2&&U.class!==et.class&&i(j,"class",null,et.class,S),x&4&&i(j,"style",U.style,et.style,S),x&8){const bt=g.dynamicProps;for(let Tt=0;Tt<bt.length;Tt++){const Mt=bt[Tt],Dt=U[Mt],Rt=et[Mt];(Rt!==Dt||Mt==="value")&&i(j,Mt,Dt,Rt,S,b)}}x&1&&h.children!==g.children&&f(j,g.children)}else!L&&$==null&&T(j,U,et,b,S);((ot=et.onVnodeUpdated)||X)&&Yt(()=>{ot&&oe(ot,b,g,h),X&&qe(g,h,b,"updated")},y)},Kt=(h,g,b,y,S,F,L)=>{for(let j=0;j<g.length;j++){const x=h[j],$=g[j],X=x.el&&(x.type===it||!Xe(x,$)||x.shapeFlag&198)?m(x.el):b;K(x,$,X,null,y,S,F,L,!0)}},T=(h,g,b,y,S)=>{if(g!==b){if(g!==Et)for(const F in g)!ss(F)&&!(F in b)&&i(h,F,g[F],null,S,y);for(const F in b){if(ss(F))continue;const L=b[F],j=g[F];L!==j&&F!=="value"&&i(h,F,j,L,S,y)}"value"in b&&i(h,"value",g.value,b.value,S)}},G=(h,g,b,y,S,F,L,j,x)=>{const $=g.el=h?h.el:r(""),X=g.anchor=h?h.anchor:r("");let{patchFlag:U,dynamicChildren:et,slotScopeIds:ot}=g;ot&&(j=j?j.concat(ot):ot),h==null?(n($,b,y),n(X,b,y),gt(g.children||[],b,X,S,F,L,j,x)):U>0&&U&64&&et&&h.dynamicChildren&&h.dynamicChildren.length===et.length?(Kt(h.dynamicChildren,et,b,S,F,L,j),(g.key!=null||S&&g===S.subTree)&&Fi(h,g,!0)):H(h,g,b,X,S,F,L,j,x)},R=(h,g,b,y,S,F,L,j,x)=>{g.slotScopeIds=j,h==null?g.shapeFlag&512?S.ctx.activate(g,b,y,L,x):q(g,b,y,S,F,L,x):V(h,g,x)},q=(h,g,b,y,S,F,L)=>{const j=h.component=Io(h,y,S);if(In(h)&&(j.ctx.renderer=nt),Bo(j,!1,L),j.asyncDep){if(S&&S.registerDep(j,I,L),!h.el){const x=j.subTree=Ft(we);Y(null,x,g,b),h.placeholder=x.el}}else I(j,h,g,b,S,F,L)},V=(h,g,b)=>{const y=g.component=h.component;if($o(h,g,b))if(y.asyncDep&&!y.asyncResolved){g.el=h.el,A(y,g,b);return}else y.next=g,y.update();else g.el=h.el,y.vnode=g},I=(h,g,b,y,S,F,L)=>{const j=()=>{if(h.isMounted){let{next:U,bu:et,u:ot,parent:bt,vnode:Tt}=h;{const ie=Ai(h);if(ie){U&&(U.el=Tt.el,A(h,U,L)),ie.asyncDep.then(()=>{Yt(()=>{h.isUnmounted||$()},S)});return}}let Mt=U,Dt;Le(h,!1),U?(U.el=Tt.el,A(h,U,L)):U=Tt,et&&Qs(et),(Dt=U.props&&U.props.onVnodeBeforeUpdate)&&oe(Dt,bt,U,Tt),Le(h,!0);const Rt=dl(h),le=h.subTree;h.subTree=Rt,K(le,Rt,m(le.el),lt(le),h,S,F),U.el=Rt.el,Mt===null&&xo(h,Rt.el),ot&&Yt(ot,S),(Dt=U.props&&U.props.onVnodeUpdated)&&Yt(()=>oe(Dt,bt,U,Tt),S)}else{let U;const{el:et,props:ot}=g,{bm:bt,m:Tt,parent:Mt,root:Dt,type:Rt}=h,le=os(g);Le(h,!1),bt&&Qs(bt),!le&&(U=ot&&ot.onVnodeBeforeMount)&&oe(U,Mt,g),Le(h,!0);{Dt.ce&&Dt.ce._hasShadowRoot()&&Dt.ce._injectChildStyle(Rt,h.parent?h.parent.type:void 0);const ie=h.subTree=dl(h);K(null,ie,b,y,h,S,F),g.el=ie.el}if(Tt&&Yt(Tt,S),!le&&(U=ot&&ot.onVnodeMounted)){const ie=g;Yt(()=>oe(U,Mt,ie),S)}(g.shapeFlag&256||Mt&&os(Mt.vnode)&&Mt.vnode.shapeFlag&256)&&h.a&&Yt(h.a,S),h.isMounted=!0,g=b=y=null}};h.scope.on();const x=h.effect=new Kl(j);h.scope.off();const $=h.update=x.run.bind(x),X=h.job=x.runIfDirty.bind(x);X.i=h,X.id=h.uid,x.scheduler=()=>Hn(X),Le(h,!0),$()},A=(h,g,b)=>{g.component=h;const y=h.vnode.props;h.vnode=g,h.next=null,ko(h,g.props,y,b),Eo(h,g.children,b),$e(),nl(h),xe()},H=(h,g,b,y,S,F,L,j,x=!1)=>{const $=h&&h.children,X=h?h.shapeFlag:0,U=g.children,{patchFlag:et,shapeFlag:ot}=g;if(et>0){if(et&128){N($,U,b,y,S,F,L,j,x);return}else if(et&256){z($,U,b,y,S,F,L,j,x);return}}ot&8?(X&16&&ft($,S,F),U!==$&&f(b,U)):X&16?ot&16?N($,U,b,y,S,F,L,j,x):ft($,S,F,!0):(X&8&&f(b,""),ot&16&>(U,b,y,S,F,L,j,x))},z=(h,g,b,y,S,F,L,j,x)=>{h=h||Pe,g=g||Pe;const $=h.length,X=g.length,U=Math.min($,X);let et;for(et=0;et<U;et++){const ot=g[et]=x?_e(g[et]):de(g[et]);K(h[et],ot,b,null,S,F,L,j,x)}$>X?ft(h,S,F,!0,!1,U):gt(g,b,y,S,F,L,j,x,U)},N=(h,g,b,y,S,F,L,j,x)=>{let $=0;const X=g.length;let U=h.length-1,et=X-1;for(;$<=U&&$<=et;){const ot=h[$],bt=g[$]=x?_e(g[$]):de(g[$]);if(Xe(ot,bt))K(ot,bt,b,null,S,F,L,j,x);else break;$++}for(;$<=U&&$<=et;){const ot=h[U],bt=g[et]=x?_e(g[et]):de(g[et]);if(Xe(ot,bt))K(ot,bt,b,null,S,F,L,j,x);else break;U--,et--}if($>U){if($<=et){const ot=et+1,bt=ot<X?g[ot].el:y;for(;$<=et;)K(null,g[$]=x?_e(g[$]):de(g[$]),b,bt,S,F,L,j,x),$++}}else if($>et)for(;$<=U;)tt(h[$],S,F,!0),$++;else{const ot=$,bt=$,Tt=new Map;for($=bt;$<=et;$++){const Jt=g[$]=x?_e(g[$]):de(g[$]);Jt.key!=null&&Tt.set(Jt.key,$)}let Mt,Dt=0;const Rt=et-bt+1;let le=!1,ie=0;const Ye=new Array(Rt);for($=0;$<Rt;$++)Ye[$]=0;for($=ot;$<=U;$++){const Jt=h[$];if(Dt>=Rt){tt(Jt,S,F,!0);continue}let ae;if(Jt.key!=null)ae=Tt.get(Jt.key);else for(Mt=bt;Mt<=et;Mt++)if(Ye[Mt-bt]===0&&Xe(Jt,g[Mt])){ae=Mt;break}ae===void 0?tt(Jt,S,F,!0):(Ye[ae-bt]=$+1,ae>=ie?ie=ae:le=!0,K(Jt,g[ae],b,null,S,F,L,j,x),Dt++)}const zn=le?Oo(Ye):Pe;for(Mt=zn.length-1,$=Rt-1;$>=0;$--){const Jt=bt+$,ae=g[Jt],Yn=g[Jt+1],Jn=Jt+1<X?Yn.el||Oi(Yn):y;Ye[$]===0?K(null,ae,b,Jn,S,F,L,j,x):le&&(Mt<0||$!==zn[Mt]?B(ae,b,Jn,2):Mt--)}}},B=(h,g,b,y,S=null)=>{const{el:F,type:L,transition:j,children:x,shapeFlag:$}=h;if($&6){B(h.component.subTree,g,b,y);return}if($&128){h.suspense.move(g,b,y);return}if($&64){L.move(h,g,b,nt);return}if(L===it){n(F,g,b);for(let U=0;U<x.length;U++)B(x[U],g,b,y);n(h.anchor,g,b);return}if(L===Ss){D(h,g,b);return}if(y!==2&&$&1&&j)if(y===0)j.persisted&&!F[ln]?n(F,g,b):(j.beforeEnter(F),n(F,g,b),Yt(()=>j.enter(F),S));else{const{leave:U,delayLeave:et,afterLeave:ot}=j,bt=()=>{h.ctx.isUnmounted?l(F):n(F,g,b)},Tt=()=>{const Mt=F._isLeaving||!!F[ln];F._isLeaving&&F[ln](!0),j.persisted&&!Mt?bt():U(F,()=>{bt(),ot&&ot()})};et?et(F,bt,Tt):Tt()}else n(F,g,b)},tt=(h,g,b,y=!1,S=!1)=>{const{type:F,props:L,ref:j,children:x,dynamicChildren:$,shapeFlag:X,patchFlag:U,dirs:et,cacheIndex:ot,memo:bt}=h;if((U===-2||$&&$.hasOnce)&&(S=!1),j!=null&&($e(),as(j,null,b,h,!0),xe()),ot!=null&&(!h.ctx||h.ctx===g)&&(g.renderCache[ot]=void 0),X&256){g.ctx.deactivate(h);return}const Tt=X&1&&et,Mt=!os(h);let Dt;if(Mt&&(Dt=L&&L.onVnodeBeforeUnmount)&&oe(Dt,g,h),X&6)rt(h.component,b,y);else{if(X&128){h.suspense.unmount(b,y);return}Tt&&qe(h,null,g,"beforeUnmount"),X&64?h.type.remove(h,g,b,nt,y):$&&!$.hasOnce&&(F!==it||U>0&&U&64)?ft($,g,b,!1,!0):(F===it&&U&384||!S&&X&16)&&ft(x,g,b),y&&st(h)}const Rt=bt!=null&&ot==null;(Mt&&(Dt=L&&L.onVnodeUnmounted)||Tt||Rt)&&Yt(()=>{Dt&&oe(Dt,g,h),Tt&&qe(h,null,g,"unmounted"),Rt&&(h.el=null)},b)},st=h=>{const{type:g,el:b,anchor:y,transition:S}=h;if(g===it){J(b,y);return}if(g===Ss){M(h),S&&!S.persisted&&S.afterLeave&&S.afterLeave();return}const F=()=>{l(b),S&&!S.persisted&&S.afterLeave&&S.afterLeave()};if(h.shapeFlag&1&&S&&!S.persisted){const{leave:L,delayLeave:j}=S,x=()=>L(b,F);j?j(h.el,F,x):x()}else F()},J=(h,g)=>{let b;for(;h!==g;)b=v(h),l(h),h=b;l(g)},rt=(h,g,b)=>{const{bum:y,scope:S,job:F,subTree:L,um:j,m:x,a:$}=h;hl(x),hl($),y&&Qs(y),S.stop(),F?(F.flags|=8,tt(L,h,g,b)):h.vnode.el&&L&&(L.transition=h.vnode.transition,tt(L,h,g,b)),j&&Yt(j,g),Yt(()=>{h.isUnmounted=!0},g)},ft=(h,g,b,y=!1,S=!1,F=0)=>{for(let L=F;L<h.length;L++)tt(h[L],g,b,y,S)},lt=h=>{if(h.shapeFlag&6)return lt(h.component.subTree);if(h.shapeFlag&128)return h.suspense.next();const g=v(h.anchor||h.el),b=g&&g[za];return b?v(b):g};let vt=!1;const mt=(h,g,b)=>{let y;h==null?g._vnode&&(tt(g._vnode,null,null,!0),y=g._vnode.component):K(g._vnode||null,h,g,null,null,null,b),g._vnode=h,vt||(vt=!0,nl(y),ri(),vt=!1)},nt={p:K,um:tt,m:B,r:st,mt:q,mc:gt,pc:H,pbc:Kt,n:lt,o:t};return{render:mt,hydrate:void 0,createApp:mo(mt)}}function on({type:t,props:e},s){return s==="svg"&&t==="foreignObject"||s==="mathml"&&t==="annotation-xml"&&e&&e.encoding&&e.encoding.includes("html")?void 0:s}function Le({effect:t,job:e},s){s?(t.flags|=32,e.flags|=4):(t.flags&=-33,e.flags&=-5)}function Ao(t,e){return(!t||t&&!t.pendingBranch)&&e&&!e.persisted}function Fi(t,e,s=!1){const n=t.children,l=e.children;if(ut(n)&&ut(l))for(let i=0;i<n.length;i++){const c=n[i];let r=l[i];r.shapeFlag&1&&!r.dynamicChildren&&((r.patchFlag<=0||r.patchFlag===32)&&(r=l[i]=_e(l[i]),r.el=c.el),!s&&r.patchFlag!==-2&&Fi(c,r)),r.type===Js&&(r.patchFlag===-1&&(r=l[i]=_e(r)),r.el=c.el),r.type===we&&!r.el&&(r.el=c.el)}}function Oo(t){const e=t.slice(),s=[0];let n,l,i,c,r;const d=t.length;for(n=0;n<d;n++){const _=t[n];if(_!==0){if(l=s[s.length-1],t[l]<_){e[n]=l,s.push(n);continue}for(i=0,c=s.length-1;i<c;)r=i+c>>1,t[s[r]]<_?i=r+1:c=r;_<t[s[i]]&&(i>0&&(e[n]=s[i-1]),s[i]=n)}}for(i=s.length,c=s[i-1];i-- >0;)s[i]=c,c=e[c];return s}function Ai(t){const e=t.subTree.component;if(e)return e.asyncDep&&!e.asyncResolved?e:Ai(e)}function hl(t){if(t)for(let e=0;e<t.length;e++)t[e].flags|=8}function Oi(t){if(t.placeholder)return t.placeholder;const e=t.component;return e?Oi(e.subTree):null}const qi=t=>t.__isSuspense;function qo(t,e){e&&e.pendingBranch?ut(t)?e.effects.push(...t):e.effects.push(t):Ba(t)}const it=Symbol.for("v-fgt"),Js=Symbol.for("v-txt"),we=Symbol.for("v-cmt"),Ss=Symbol.for("v-stc"),Re=[];let Xt=null;function w(t=!1){Re.push(Xt=t?null:[])}function Li(){Re.pop(),Xt=Re[Re.length-1]||null}let hs=1;function fl(t,e=!1){hs+=t,t<0&&Xt&&e&&(Xt.hasOnce=!0)}function ji(t){return t.dynamicChildren=hs>0?Xt||Pe:null,Li(),hs>0&&Xt&&Xt.push(t),t}function E(t,e,s,n,l,i){return ji(a(t,e,s,n,l,i,!0))}function Ht(t,e,s,n,l){return ji(Ft(t,e,s,n,l,!0))}function Di(t){return t?t.__v_isVNode===!0:!1}function Xe(t,e){return t.type===e.type&&t.key===e.key}const Pi=({key:t})=>t??null,Ts=({ref:t,ref_key:e,ref_for:s})=>(typeof t=="number"&&(t=""+t),t!=null?qt(t)||Ut(t)||pt(t)?{i:Zt,r:t,k:e,f:!!s}:t:null);function a(t,e=null,s=null,n=0,l=null,i=t===it?0:1,c=!1,r=!1){const d={__v_isVNode:!0,__v_skip:!0,type:t,props:e,key:e&&Pi(e),ref:e&&Ts(e),scopeId:di,slotScopeIds:null,children:s,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:n,dynamicProps:l,dynamicChildren:null,appContext:null,ctx:Zt};return r?(Ls(d,s),i&128&&t.normalize(d)):s&&(d.shapeFlag|=qt(s)?8:16),hs>0&&!c&&Xt&&(d.patchFlag>0||i&6)&&d.patchFlag!==32&&Xt.push(d),d}const Ft=Lo;function Lo(t,e=null,s=null,n=0,l=null,i=!1){if((!t||t===ao)&&(t=we),Di(t)){const r=ze(t,e,!0);return s&&Ls(r,s),hs>0&&!i&&Xt&&(r.shapeFlag&6?Xt[Xt.indexOf(t)]=r:Xt.push(r)),r.patchFlag=-2,r}if(Vo(t)&&(t=t.__vccOpts),e){e=jo(e);let{class:r,style:d}=e;r&&!qt(r)&&(e.class=Wt(r)),St(d)&&(Pn(d)&&!ut(d)&&(d=Nt({},d)),e.style=jt(d))}const c=qt(t)?1:qi(t)?128:Gs(t)?64:St(t)?4:pt(t)?2:0;return a(t,e,s,n,l,c,i,!0)}function jo(t){return t?Pn(t)||ki(t)?Nt({},t):t:null}function ze(t,e,s=!1,n=!1){const{props:l,ref:i,patchFlag:c,children:r,transition:d}=t,_=e?Po(l||{},e):l,f={__v_isVNode:!0,__v_skip:!0,type:t.type,props:_,key:_&&Pi(_),ref:e&&e.ref?s&&i?ut(i)?i.concat(Ts(e)):[i,Ts(e)]:Ts(e):i,scopeId:t.scopeId,slotScopeIds:t.slotScopeIds,children:r,target:t.target,targetStart:t.targetStart,targetAnchor:t.targetAnchor,staticCount:t.staticCount,shapeFlag:t.shapeFlag,patchFlag:e&&t.type!==it?c===-1?16:c|16:c,dynamicProps:t.dynamicProps,dynamicChildren:t.dynamicChildren,appContext:t.appContext,dirs:t.dirs,transition:d,component:t.component,suspense:t.suspense,ssContent:t.ssContent&&ze(t.ssContent),ssFallback:t.ssFallback&&ze(t.ssFallback),placeholder:t.placeholder,el:t.el,anchor:t.anchor,ctx:t.ctx,ce:t.ce,cacheIndex:t.cacheIndex};return d&&n&&Rn(f,d.clone(f)),f}function at(t=" ",e=0){return Ft(Js,null,t,e)}function Do(t,e){const s=Ft(Ss,null,t);return s.staticCount=e,s}function yt(t="",e=!1){return e?(w(),Ht(we,null,t)):Ft(we,null,t)}function de(t){return t==null||typeof t=="boolean"?Ft(we):ut(t)?Ft(it,null,t.slice()):Di(t)?_e(t):Ft(Js,null,String(t))}function _e(t){return t.el===null&&t.patchFlag!==-1||t.memo?t:ze(t)}function Ls(t,e){let s=0;const{shapeFlag:n}=t;if(e==null)e=null;else if(ut(e))s=16;else if(typeof e=="object")if(n&65){const l=e.default;l&&(l._c&&(l._d=!1),Ls(t,l()),l._c&&(l._d=!0));return}else{s=32;const l=e._;!l&&!ki(e)?e._ctx=Zt:l===3&&Zt&&(Zt.slots._===1?e._=1:(e._=2,t.patchFlag|=1024))}else if(pt(e)){if(n&65){Ls(t,{default:e});return}e={default:e,_ctx:Zt},s=32}else e=String(e),n&64?(s=16,e=[at(e)]):s=8;t.children=e,t.shapeFlag|=s}function Po(...t){const e={};for(let s=0;s<t.length;s++){const n=t[s];for(const l in n)if(l==="class")e.class!==n.class&&(e.class=Wt([e.class,n.class]));else if(l==="style")e.style=jt([e.style,n.style]);else if(Is(l)){const i=e[l],c=n[l];c&&i!==c&&!(ut(i)&&i.includes(c))?e[l]=i?[].concat(i,c):c:c==null&&i==null&&!Ns(l)&&(e[l]=c)}else l!==""&&(e[l]=n[l])}return e}function oe(t,e,s,n=null){ne(t,e,7,[s,n])}const Ho=bi();let Ro=0;function Io(t,e,s){const n=t.type,l=(e?e.appContext:t.appContext)||Ho,i={uid:Ro++,vnode:t,type:n,parent:e,appContext:l,root:null,next:null,subTree:null,effect:null,update:null,job:null,scope:new ua(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:e?e.provides:Object.create(l.provides),ids:e?e.ids:["",0,0],accessCache:null,renderCache:[],components:null,directives:null,propsOptions:Si(n,l),emitsOptions:yi(n,l),emit:null,emitted:null,propsDefaults:Et,inheritAttrs:n.inheritAttrs,ctx:Et,data:Et,props:Et,attrs:Et,slots:Et,refs:Et,setupState:Et,setupContext:null,suspense:s,suspenseId:s?s.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};return i.ctx={_:i},i.root=e?e.root:i,i.emit=_o.bind(null,i),t.ce&&t.ce(i),i}let zt=null;const No=()=>zt||Zt;let js,fs;{const t=Ws(),e=(s,n)=>{let l;return(l=t[s])||(l=t[s]=[]),l.push(n),i=>{l.length>1?l.forEach(c=>c(i)):l[0](i)}};js=e("__VUE_INSTANCE_SETTERS__",s=>zt=s),fs=e("__VUE_SSR_SETTERS__",s=>ms=s)}const ys=t=>{const e=zt;return js(t),t.scope.on(),()=>{t.scope.off(),js(e)}},ml=()=>{zt&&zt.scope.off(),js(null)};function Hi(t){return t.vnode.shapeFlag&4}let ms=!1;function Bo(t,e=!1,s=!1){e&&fs(e);const{props:n,children:l}=t.vnode,i=Hi(t);wo(t,n,i,e),To(t,l,s||e);const c=i?Wo(t,e):void 0;return e&&fs(!1),c}function Wo(t,e){const s=t.type;t.accessCache=Object.create(null),t.proxy=new Proxy(t.ctx,oo);const{setup:n}=s;if(n){$e();const l=t.setupContext=n.length>1?Ko(t):null,i=ys(t),c=bs(n,t,0,[t.props,l]),r=Pl(c);if(xe(),i(),(r||t.sp)&&!os(t)&&fi(t),r){if(c.then(ml,ml),e)return c.then(d=>{fs(!0);try{vl(t,d,e)}finally{fs(!1)}}).catch(d=>{Vs(d,t,0)});t.asyncDep=c}else vl(t,c)}else Ri(t)}function vl(t,e,s){pt(e)?t.type.__ssrInlineRender?t.ssrRender=e:t.render=e:St(e)&&(t.setupState=ii(e)),Ri(t)}function Ri(t,e,s){const n=t.type;t.render||(t.render=n.render||pe);{const l=ys(t);$e();try{ro(t)}finally{xe(),l()}}}const Uo={get(t,e){return Bt(t,"get",""),t[e]}};function Ko(t){const e=s=>{t.exposed=s||{}};return{attrs:new Proxy(t.attrs,Uo),slots:t.slots,emit:t.emit,expose:e}}function Xs(t){return t.exposed?t.exposeProxy||(t.exposeProxy=new Proxy(ii(Aa(t.exposed)),{get(e,s){if(s in e)return e[s];if(s in rs)return rs[s](t)},has(e,s){return s in e||s in rs}})):t.proxy}function Vo(t){return pt(t)&&"__vccOpts"in t}const P=(t,e)=>Da(t,e,ms),Go="3.5.43";/**
- * @vue/runtime-dom v3.5.43
- * (c) 2018-present Yuxi (Evan) You and Vue contributors
- * @license MIT
- **/let Mn;const _l=typeof window<"u"&&window.trustedTypes;if(_l)try{Mn=_l.createPolicy("vue",{createHTML:t=>t})}catch{}const Ii=Mn?t=>Mn.createHTML(t):t=>t,zo="http://www.w3.org/2000/svg",Yo="http://www.w3.org/1998/Math/MathML",ve=typeof document<"u"?document:null,gl=ve&&ve.createElement("template"),Jo={insert:(t,e,s)=>{e.insertBefore(t,s||null)},remove:t=>{const e=t.parentNode;e&&e.removeChild(t)},createElement:(t,e,s,n)=>{const l=e==="svg"?ve.createElementNS(zo,t):e==="mathml"?ve.createElementNS(Yo,t):s?ve.createElement(t,{is:s}):ve.createElement(t);return t==="select"&&n&&n.multiple!=null&&l.setAttribute("multiple",n.multiple),l},createText:t=>ve.createTextNode(t),createComment:t=>ve.createComment(t),setText:(t,e)=>{t.nodeValue=e},setElementText:(t,e)=>{t.textContent=e},parentNode:t=>t.parentNode,nextSibling:t=>t.nextSibling,querySelector:t=>ve.querySelector(t),setScopeId(t,e){t.setAttribute(e,"")},insertStaticContent(t,e,s,n,l,i){const c=s?s.previousSibling:e.lastChild;if(l&&(l===i||l.nextSibling))for(;e.insertBefore(l.cloneNode(!0),s),!(l===i||!(l=l.nextSibling)););else{gl.innerHTML=Ii(n==="svg"?`<svg>${t}</svg>`:n==="mathml"?`<math>${t}</math>`:t);const r=gl.content;if(n==="svg"||n==="mathml"){const d=r.firstChild;for(;d.firstChild;)r.appendChild(d.firstChild);r.removeChild(d)}e.insertBefore(r,s)}return[c?c.nextSibling:e.firstChild,s?s.previousSibling:e.lastChild]}},Xo=Symbol("_vtc");function Zo(t,e,s){const n=t[Xo];n&&(e=(e?[e,...n]:[...n]).join(" ")),e==null?t.removeAttribute("class"):s?t.setAttribute("class",e):t.className=e}const Ds=Symbol("_vod"),Ni=Symbol("_vsh"),bl={name:"show",beforeMount(t,{value:e},{transition:s}){t[Ds]=t.style.display==="none"?"":t.style.display,s&&e?s.beforeEnter(t):Ze(t,e)},mounted(t,{value:e},{transition:s}){s&&e&&s.enter(t)},updated(t,{value:e,oldValue:s},{transition:n}){!e!=!s&&(n?e?(n.beforeEnter(t),Ze(t,!0),n.enter(t)):n.leave(t,()=>{Ze(t,!1)}):Ze(t,e))},beforeUnmount(t,{value:e}){Ze(t,e)}};function Ze(t,e){t.style.display=e?t[Ds]:"none",t[Ni]=!e}const Qo=Symbol(""),tr=/(?:^|;)\s*display\s*:/;function er(t,e,s){const n=t.style,l=qt(s);let i=!1;if(s&&!l){if(e)if(qt(e))for(const c of e.split(";")){const r=c.slice(0,c.indexOf(":")).trim();s[r]==null&&es(n,r,"")}else for(const c in e)s[c]==null&&es(n,c,"");for(const c in s){c==="display"&&(i=!0);const r=s[c];r!=null?nr(t,c,!qt(e)&&e?e[c]:void 0,r)||es(n,c,r):es(n,c,"")}}else if(l){if(e!==s){const c=n[Qo];c&&(s+=";"+c),n.cssText=s,i=tr.test(s)}}else e&&t.removeAttribute("style");Ds in t&&(t[Ds]=i?n.display:"",t[Ni]&&(n.display="none"))}const ks=/\s*!important$/;function es(t,e,s){if(ut(s))s.forEach(n=>es(t,e,n));else if(s==null&&(s=""),e.startsWith("--"))ks.test(s)?t.setProperty(e,s.replace(ks,""),"important"):t.setProperty(e,s);else{const n=sr(t,e);ks.test(s)?t.setProperty(Ne(n),s.replace(ks,""),"important"):t[n]=s}}const yl=["Webkit","Moz","ms"],rn={};function sr(t,e){const s=rn[e];if(s)return s;let n=ee(e);if(n!=="filter"&&n in t)return rn[e]=n;n=Il(n);for(let l=0;l<yl.length;l++){const i=yl[l]+n;if(i in t)return rn[e]=i}return e}function nr(t,e,s,n){return t.tagName==="TEXTAREA"&&(e==="width"||e==="height")&&qt(n)&&s===n}const $l="http://www.w3.org/1999/xlink";function xl(t,e,s,n,l,i=ra(e)){n&&e.startsWith("xlink:")?s==null?t.removeAttributeNS($l,e.slice(6,e.length)):t.setAttributeNS($l,e,s):s==null||i&&!Bl(s)?t.removeAttribute(e):t.setAttribute(e,i?"":he(s)?String(s):s)}function wl(t,e,s,n,l){if(e==="innerHTML"||e==="textContent"){s!=null&&(t[e]=e==="innerHTML"?Ii(s):s);return}const i=t.tagName;if(e==="value"&&i!=="PROGRESS"&&!i.includes("-")){const r=i==="OPTION"?t.getAttribute("value")||"":t.value,d=s==null?t.type==="checkbox"?"on":"":String(s);(r!==d||!("_value"in t))&&(t.value=d),s==null&&t.removeAttribute(e),t._value=s;return}let c=!1;if(s===""||s==null){const r=typeof t[e];r==="boolean"?s=Bl(s):s==null&&r==="string"?(s="",c=!0):r==="number"&&(s=0,c=!0)}try{t[e]=s}catch{}c&&t.removeAttribute(l||e)}function lr(t,e,s,n){t.addEventListener(e,s,n)}function ir(t,e,s,n){t.removeEventListener(e,s,n)}const kl=Symbol("_vei");function ar(t,e,s,n,l=null){const i=t[kl]||(t[kl]={}),c=i[e];if(n&&c)c.value=n;else{const[r,d]=cr(e);if(n){const _=i[e]=pr(n,l);lr(t,r,_,d)}else c&&(ir(t,r,c,d),i[e]=void 0)}}const or=/(Once|Passive|Capture)$/,rr=/^on:?(?:Once|Passive|Capture)$/;function cr(t){let e,s;for(;(s=t.match(or))&&!rr.test(t);)e||(e={}),t=t.slice(0,t.length-s[1].length),e[s[1].toLowerCase()]=!0;return[t[2]===":"?t.slice(3):Ne(t.slice(2)),e]}let cn=0;const dr=Promise.resolve(),ur=()=>cn||(dr.then(()=>cn=0),cn=Date.now());function pr(t,e){const s=n=>{if(!n._vts)n._vts=Date.now();else if(n._vts<=s.attached)return;const l=s.value;if(ut(l)){const i=n.stopImmediatePropagation;n.stopImmediatePropagation=()=>{i.call(n),n._stopped=!0};const c=l.slice(),r=[n];for(let d=0;d<c.length&&!n._stopped;d++){const _=c[d];_&&ne(_,e,5,r)}}else ne(l,e,5,[n])};return s.value=t,s.attached=ur(),s}const Ml=t=>t.charCodeAt(0)===111&&t.charCodeAt(1)===110&&t.charCodeAt(2)>96&&t.charCodeAt(2)<123,hr=(t,e,s,n,l,i)=>{const c=l==="svg";e==="class"?Zo(t,n,c):e==="style"?er(t,s,n):Is(e)?Ns(e)||ar(t,e,s,n,i):(e[0]==="."?(e=e.slice(1),!0):e[0]==="^"?(e=e.slice(1),!1):fr(t,e,n,c))?(wl(t,e,n),!t.tagName.includes("-")&&(e==="value"||e==="checked"||e==="selected")&&xl(t,e,n,c,i,e!=="value")):t._isVueCE&&(mr(t,e)||t._def.__asyncLoader&&(/[A-Z]/.test(e)||!qt(n)))?wl(t,ee(e),n,i,e):(e==="true-value"?t._trueValue=n:e==="false-value"&&(t._falseValue=n),xl(t,e,n,c))};function fr(t,e,s,n){if(n)return!!(e==="innerHTML"||e==="textContent"||e in t&&Ml(e)&&pt(s));if(e==="spellcheck"||e==="draggable"||e==="translate"||e==="autocorrect"||e==="sandbox"&&t.tagName==="IFRAME"||e==="form"||e==="list"&&t.tagName==="INPUT"||e==="type"&&t.tagName==="TEXTAREA")return!1;if(e==="width"||e==="height"){const l=t.tagName;if(l==="IMG"||l==="VIDEO"||l==="CANVAS"||l==="SOURCE")return!1}return Ml(e)&&qt(s)?!1:e in t}function mr(t,e){const s=t._def.props;if(!s)return!1;const n=ee(e);return Array.isArray(s)?s.some(l=>ee(l)===n):Object.keys(s).some(l=>ee(l)===n)}const vr=Nt({patchProp:hr},Jo);let Sl;function _r(){return Sl||(Sl=Co(vr))}const gr=((...t)=>{const e=_r().createApp(...t),{mount:s}=e;return e.mount=n=>{const l=yr(n);if(!l)return;const i=e._component;!pt(i)&&!i.render&&!i.template&&(i.template=l.innerHTML),l.nodeType===1&&(l.textContent="");const c=s(l,!1,br(l));return l instanceof Element&&(l.removeAttribute("v-cloak"),l.setAttribute("data-v-app","")),c},e});function br(t){if(t instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&t instanceof MathMLElement)return"mathml"}function yr(t){return qt(t)?document.querySelector(t):t}const Bi={fleet:"/api/fleet",curves:"/api/curves",channels:"/api/channels",facts:"/api/facts",maintSurvey:"/api/maint_survey",maintStd:"/api/maint_std",maintFramework:"/api/maint_framework",dqFindings:"/api/dq_findings",ontList:"/api/ont_list",askStatus:"/api/ask_status",askModels:"/api/ask_models",vibcms:"/api/vibcms",algoHealth:"/algorithm/healthz",algoEndpoints:"/algorithm/api/endpoints",algoMatrix:"/algorithm/api/matrix",algoReliability:"/algorithm/api/reliability",algoPurity:"/algorithm/api/curves_check"};async function Wi(t,e){const s=Bi[t],n=performance.now();try{const l=await fetch(s,{headers:{Accept:"application/json",...e?.body?{"Content-Type":"application/json"}:{}},...e}),i=await l.text();let c=i;try{c=JSON.parse(i)}catch{}return{name:t,path:s,ok:l.ok,status:l.status,ms:Math.round(performance.now()-n),data:c}}catch(l){return{name:t,path:s,ok:!1,status:0,ms:Math.round(performance.now()-n),error:l instanceof Error?l.message:String(l)}}}const dn=["facts","maintSurvey","ontList","askStatus","channels","dqFindings","algoHealth","algoEndpoints","algoMatrix","algoReliability","algoPurity"],$r={class:"card"},xr={class:"hint"},wr=["disabled"],kr={class:"hint"},Mr=Pt({__name:"ContractSmoke",setup(t){const e=At([]),s=At(!1),n=At(0);function l(c){return Array.isArray(c)?`list[${c.length}]`:c&&typeof c=="object"?Object.keys(c).slice(0,8).join(", "):typeof c}async function i(){s.value=!0,e.value=[],n.value=0;for(const c of dn){const r=await Wi(c);e.value.push({name:c,path:r.path,ok:r.ok,status:r.status,ms:r.ms,keys:l(r.data),error:r.error}),n.value+=1}s.value=!1}return Be(i),(c,r)=>(w(),E("section",$r,[r[3]||(r[3]=a("h2",null,[at("契约自检 "),a("small",null,"(后端结构与算法服务可达性;对拍基准见 docs/接口契约_前后端_v0.1.md)")],-1)),a("p",xr,[at(" 进度 "+u(n.value)+"/"+u(p(dn).length)+' · 只判"通不通",不比数据值(值随数据变,锚点在 Python 侧的门禁里) ',1),a("button",{class:"re",disabled:s.value,onClick:i},"重跑",8,wr)]),a("table",null,[r[0]||(r[0]=a("thead",null,[a("tr",null,[a("th",null,"接口"),a("th",null,"路径"),a("th",null,"状态"),a("th",null,"耗时"),a("th",null,"顶层键 / 形状")])],-1)),a("tbody",null,[(w(!0),E(it,null,_t(e.value,d=>(w(),E("tr",{key:d.name,class:Wt({bad:!d.ok})},[a("td",null,u(d.name),1),a("td",null,[a("code",null,u(d.path),1)]),a("td",null,u(d.status),1),a("td",null,u(d.ms)+" ms",1),a("td",null,u(d.error||d.keys),1)],2))),128))])]),a("p",kr,[at(" 契约登记接口合计 "+u(Object.keys(p(Bi)).length)+" 条(本页抽样 "+u(p(dn).length)+" 条); 全量 42 条由 ",1),r[1]||(r[1]=a("code",null,"python scripts/http_contract_audit.py",-1)),r[2]||(r[2]=at(" 在线复核。 ",-1))])]))}}),Sr={"app.brand":"观澜","app.build":"最新完成构建","app.lang_en":"英文","app.lang_zh":"中文","app.subtitle":"海上风电场","app.title":"观澜 · 风电数据分析与决策支持","ask.common_q":"{cat} · 常用问题 (点即问, 或下方自由输入)","ask.done_meta":"模型 {m} · 用时 {s} 秒 · {n} 步","ask.elapsed":"{s} 秒","ask.empty":"问题为空","ask.en_qa_failed":"英文质检未通过: 已拦截这次模型回答, 请重新提问。","ask.error":"出错: {e}","ask.go":"提问","ask.grounding":"答案句句带 [对象id] 溯源 + 数据回抓校验核验; 判级只转述本体原文带审级, 模型零判级权。","ask.idle":"空闲 — 点常用问题或输入后提问。串行一次一问。","ask.local_down":"本机模型未启动 (Ollama 127.0.0.1:11434 未响应); 离线版不转云","ask.model":"模型","ask.no_models":"无可用模型","ask.offline":"离线版: 模型问答需连接系统。","ask.partial":"初答 · 27B 复核中","ask.placeholder":"自由提问 ({cat})","ask.question":"问题: {q}","ask.refined":"已复核 (默认档 {m} 未过成文校验, 由更强模型重答)","ask.refs.none":"无匹配契约条目 (契约 {sha}): 本回答未被结构化事实契约背书, 按模型输出对待","ask.refs.title":"契约引用 ({n} 条, 契约 {sha}) — 按问题/回答匹配的可交付结论, 引文来自 qa_refs","ask.review":"交叉审核 · {m}","ask.review_err":"审核未完成: {e}","ask.review_note":"由另一模型基于同一份证据复核上述答案。溯源核验仅校验数字与机组号是否越界, 本项校验结论是否有证据支撑。","ask.running":"推理中…","ask.verify_bad":"溯源核验未全过 (引用 {n})","ask.verify_ok":"溯源核验 {n}/{n} 全真","ask.xrev":"交叉审核","ask.xrev_note":"(DeepSeek 14B 互审, +约 1 分钟)","ask.xrev_title":"由另一模型基于同一份证据复核; 同一模型自审无法构成独立校验","asst.alarm_type":"告警类型 {t}","asst.cause_counts":"手册 {r} 次 · 工单 {w} 次 · 涉码 {c}","asst.causes":"← 可能原因 (手册排查方向 + 工单实证)","asst.check":"查什么","asst.code_placeholder":"报警码, 如 3225 / 3130 / 13902","asst.common":"常见","asst.corrective":"抢修","asst.corrective_flow":"报警码 → 失效模式 → 手册分步处置 → 历史工单","asst.drawings":"对应图纸","asst.failmodes":"指向的失效模式","asst.faulttree":"故障树","asst.faulttree_flow":"按证据量排序的系统失效模式 + 部件级成因","asst.fm_counts":"该类本场报警 {a} 条 / 工单 {w} 条","asst.head":"检修助手 — 确定性本体查询","asst.head_note":"结果逐字取自手册与工单, 不经模型","asst.identity":"系统 {sys} · 本场 {n} 条","asst.interval":"周期 {i}","asst.known_tags":"该系统手册出现过的位号 (对图纸时参考):","asst.no_causes":"(手册无该类排查条目 — 原因层待补)","asst.no_name":"(码表未收录)","asst.no_steps":"本码无手册处置条目 (手册覆盖本场 161/322 码) — 需查图纸或联系厂商支持。","asst.node":"节点","asst.nodes":"应检节点 · {c}","asst.nodes_note":"手册此步未给位号 → 按回路构成展开, 逐点查","asst.prev_empty":"(该系统无匹配的年度维护条目 — 维护作业指导书按位置代号编排, 未必逐系统对齐)","asst.prev_fm":"失效模式 (按本场报警量)","asst.prev_head":"{sys} 预防链 · 失效模式 {f} 类 · 预防性任务 {n} 项","asst.prev_tasks":"年度任务","asst.preventive":"预防性维护","asst.preventive_flow":"系统 → 失效模式 → 年度任务 → 作业指导步骤","asst.qty":"量: {q}","asst.query_failed":"查询失败: {e}","asst.querying":"查询中…","asst.spec_name":"名称","asst.spec_no":"参数号","asst.spec_range":"允许范围","asst.spec_val":"整定值","asst.specs":"判定规范 (实机参数表)","asst.step_n":"第 {n} 步","asst.steps":"现场处置 {n} 步","asst.steps_note":"节点部件 = 手册原文元件位号 (确定); 判定规范 = 实机参数表按物理量匹配的候选判据, 非厂商绑定 — 现场以铭牌与图纸复核。","asst.tags":"节点部件","asst.tree_codes":"征兆码 {c}","asst.tree_counts":"本场报警 {a} 条 · 工单 {w} 条","asst.tree_empty":"该系统无失效模式记录","asst.tree_head":"{sys} 故障树 · {n} 个失效模式","asst.tree_note":"一层 = 系统 × 失效类 (归纳自本场码表与工单) · 二层 = 手册排查方向归一 + 工单原因计数; 条长按实证量 (报警条数 + 工单 × 10), 因果来自手册与工单原文非推断, 树深两层不外推。","asst.unassigned":"未归属","asst.wi_steps":"WI {n} 步","asst.wo_action":"处置","asst.wo_fault":"故障","asst.wo_head":"现场实际怎么修的 ({sys} 历史工单 {n} 条, 台账 2020~2024)","asst.wo_note":'工单时间窗止 2024-11-21; 2025–26 现场未提供 ⇒ "0 条" 是记录缺失非未修过。',"attr.变桨与液压":"变桨与液压","attr.塔架/结构":"塔架/结构","attr.无记录停机":"无记录停机","attr.未归类":"未归类","attr.电网/供电(外部)":"电网/供电(外部)","attr.轮毂/叶片":"轮毂/叶片","attr.运维操作":"运维操作","attr.风况(外部)":"风况(外部)","cat.equip":"设备类","cat.equip.hint":"设备状态 / 机制 / 判级 — 从机组档案、对象查询与机制检索取证","cat.equip.q1":"29号机组现在什么状态、为什么、该怎么办?","cat.equip.q2":"全场哪些机组有报警级或定论级判级?逐台列出并注明审级","cat.equip.q3":"失效机制库里有哪些机制族?各涉及哪些机组、状态如何?","cat.loss":"损失分析","cat.loss.hint":"当前 3 个月损失 / 未来损失 — ont_loss / ont_scenario 取证, 金额带电价区间统计方法","cat.loss.q1":"近3个月全场损失结构如何?分状态和分机组说, 电量与金额都给","cat.loss.q2":"29号如果拖到主轴承失效, 未来损失量级是多少?与现在修对比","cat.loss.q3":"限电常态化对检修机会成本有什么影响?","cat.risk":"安全风险预测","cat.risk.hint":"风险敞口 / 劣化趋势 / 盲区 — ont_risk / ont_mechanism_search 取证, 未列 ≠ 正常","cat.risk.q1":"当前哪些机组风险在上升需要重点盯?联动监视读数如何?","cat.risk.q2":'监测有哪些盲区?哪些"没报警"不等于正常?',"cat.risk.q3":"29号轴承正在承受金属接触, 风险敞口怎么评估?","cat.sched":"检修排程决策","cat.sched.hint":"排期沙盘 / 天气窗 / 验收树 — ont_scenario / ont_get 取证","cat.sched.q1":"29号修泵什么时候做最合适?对比各情景的损失与风险","cat.sched.q2":"未来几个月哪些月份适合安排CTV检修和吊装作业?依据历史可作业窗","cat.sched.q3":"29号修好之后按什么判据验收?三分支分别是什么条件?","ch.attrib.none":"无记录 {h}h ({p}%)","ch.attrib.ok":"已归因到部件 {h}h ({p}%)","ch.attrib.uncls":"未归类 {h}h","ch.beta.median":"全场中位 {v}°","ch.blame.d1":"限电与调度令, 不进设备责任","ch.blame.d2":"故障与检修停机, 唯一进设备考核","ch.blame.d3":"正常发电欠发与低风待机","ch.blame.n1":"交易与调度侧","ch.blame.n2":"设备侧","ch.blame.n3":"运行侧","ch.blame.title":"损失 {tot} MWh 按责任归属","ch.cap.legend":"圆内数字 = 台数, 圆面积 ∝ 台数","ch.cap.median":"中位 {v}","ch.cap.p":"满发封顶","ch.cap.w":"转速封顶","ch.ml.legend":"— {s}","ch.pareto.cum80":"累计 80%","ch.pareto.cumtip":"{k} · 累计 {p}%","ch.pareto.key":"关键少数: 前 {k} 项占 80%","ch.pareto.none":"时间窗内无数据","ch.pareto.top3":"前三: ","ch.pareto.total":"共 {n} 项, 合计 {tot}{unit}","ch.pareto.xlab":"报警码 (悬停看全名)","ch.quad.few":"时间窗内码数不足, 不作四象限","ch.quad.q1":"低频长时 · 硬故障","ch.quad.q1s":"备件与检修窗","ch.quad.q2":"高频长时 · 重点治理","ch.quad.q2s":"优先派工","ch.quad.q3":"低频短时 · 本底","ch.quad.q3s":"不单独处置","ch.quad.q4":"高频短时 · 重复触发","ch.quad.q4s":"调整参数或屏蔽, 非硬件故障","ch.quad.tip":"{n} 条 · 单次中位 {med}s · 累计 {h}h · {nt} 台","ch.quad.xlab":"发生条数 (对数)","ch.quad.ylab":"单次中位时长 (对数)","ch.ram.area":"圆面积 = 累计停机时长","ch.ram.equip":"设备类","ch.ram.ext":"外部类","ch.ram.few":"部件数不足, 不作象限","ch.ram.median":"虚线 = 本场中位分界","ch.ram.q1":"常坏且难修","ch.ram.q1s":"最高优先级","ch.ram.q2":"罕发难修","ch.ram.q2s":"备件与作业窗","ch.ram.q3":"频发易修","ch.ram.q3s":"查根因, 换件无用","ch.ram.q4":"少发好修","ch.ram.q4s":"维持","ch.ram.tip":"{p}: 平均无故障间隔(MTBF){mtbf}h · 单次停机时长(MDT){mdt}h · 停机 {h}h · {n}起 · {u}台","ch.ram.tip_ext":" · 外部类不计设备可靠性","ch.ram.xlab":"平均无故障间隔(MTBF,h,对数)→ 越右越可靠","ch.ram.ylab":"单次停机时长(MDT,h)→ 越上越难修","ch.rate.days":"仅{d}天","ch.rate.month":"{m}月","ch.rate.n":"{n}条","ch.rate.tip":"{m}: {v} 条/日 (总 {n} 条, 数据覆盖 {cov}%)","ch.rate.ylab":"条/日","ch.ruler.norm":"正态期望 3.7σ","ch.ruler.row":"{r}σ σ = {s}","ch.wf.act":"实际上网","ch.wf.theo":"理论可发","ch.wf.tip":"{nm}: 损失 {loss} MWh, 占理论 {pct}%, 时长 {h}h","chain.gb":"齿轮箱","chain.gde":"发电机DE","chain.gen":"发电机","chain.gnde":"发电机NDE","chain.hss":"高速","chain.ims":"中间","chain.mba":"主轴承后","chain.mbf":"主轴承前","chain.ps":"行星","cmp.alarm_n":"报警 {a}","cmp.alarm_units":"报警机组","cmp.basis":"依据","cmp.by_system":"按系统查看","cmp.cards_note":"点系统卡 → 该系统全场机组与依据; 九系统 = 交付九分册一一对应; 叶片与叶根 / 塔架与基础无 SCADA 轴 (分册蓝本取 CMS / 巡检)","cmp.counts":"报警 {a} · 不可判 {u} · 良好 {g} · 优秀 {e}","cmp.cross_eyebrow":"多系统交叉机组","cmp.detail":"详情","cmp.detail_head":"{sys} · 全场 {n} 台","cmp.external":"外部","cmp.fleet_n":" · 全场 {n} 台","cmp.fusion_moved":"振动线结论与四源融合已移至独立板块 →","cmp.fusion_n":"({n} 台次收录)","cmp.good_units":"良好 {n} 台 (轻微偏离, 周期观察 — 点开看逐台依据)","cmp.grading_pending":"正在按所选时间窗重算判级…","cmp.grading_pending_why":"时间窗 {span}:变桨/偏航/蓄能/温度四个判级面正按该时间窗重算(首次约 25 秒),下面的系统卡暂时还是上一份统计方法 —— 算完会自动刷新,不会静默混用。","cmp.hit_sys":"命中系统","cmp.n_sys":"系统数","cmp.n_units":"({n} 台)","cmp.none":"本系统全场无非常态。","cmp.problem_page":"该问题页 →","cmp.rel_ev":"事件","cmp.rel_eyebrow":"部件可靠性 · 时间窗 {win}","cmp.rel_fm":"典型失效模式 (按时长)","cmp.rel_h":"停机时长","cmp.rel_head":"部件停机贡献与可靠性","cmp.rel_mdt":"单次停机时长(MDT,h)","cmp.rel_meta":"总停机 {t}h = 设备类 {a} + 外部类 {b}","cmp.rel_mtbo":"平均停机间隔(MTBO,h)","cmp.rel_note":'统计方法 ≥1h 停机段, 不含调度令 — 与"电量算账"里的停机时长{h} 不同, 差额是短于 1h 的停机段 (本页按段做可靠性指标须成段, 能量账按逐条工况态算电量): 两个数都对, 不可互相相减。',"cmp.rel_part":"部件","cmp.rel_units":"影响机组","cmp.unk_n":" · 不可判 {u}","cmp.unk_units":"不可判 (监测/数据不足, ≠ 正常)","cmp.watch_head":"关注机组 (≥2 系统交叉, {n} 台; 点机组号 → 该台独立页)","dec.classic":"维护标准 / 维护框架 / 数据质量三块尚未迁入新版 —","dec.head":"检修决策 · 本体问答 (推理无界, 结论须过校验)","en.balance":"电量平衡","en.blame":"损失责任分账","en.blame_note":'最大一笔是限电不是故障。进设备考核的只有"故障与检修停机" {n} MWh; 限电属交易与调度侧, 2026 起交易策略主导, 少发未必是弃风。',"en.cap_fail":"不通过","en.cap_note":"能量守恒核 · 理论 {op} 全额定上限 {cap}","en.cap_pass":"通过","en.kpi_act":"实际上网 · 等效满发 {h} h","en.kpi_loss":"损失率 · {v} MWh","en.kpi_theo":"理论可发 (实际+损失)","en.loss_mwh":"损失 MWh","en.share":"时长占比","en.state":"工况态","en.states":"工况态明细","en.states_note":"控制参数一致性与曲线欠发筛查在固定干净窗判, 已迁入「发电性能」页 — 本页只出当期电量账。","en.win":"窗 {win}","fig.fleet_median":"全场中位","fig.point":"测点","fig.quartile":"四分位","fig.this_unit":"本台","fig.trend":"趋势","fig.vibbar_note":"条为本台与全场中位之比; 色按 z (稳健离群度): 绿 <2 · 橙 2~3 · 红 ≥3","fig.x_median":"×中位","flt.alarm_face":"报警面","flt.alarm_meta":"{n} 条 · {c} 个码 · 时间窗 {win}","flt.attrib_note":'归因覆盖: "无记录停机" {h}h 是全场最大单项, 因不给 MTBF 而在上图中不出现 — 它不是"没有故障", 是"没归上因"。统计方法为段起点 ±30min 首发码。缺口成因待定: 此前写的"98% 的段在前 72h 内有报警 ⇒ 长停远窗"不成立 — 前 72h 有报警不等于该报警与本段停机有因果 (双模审 2026-08-28 逮)。要定成因须改判"段起止是否落在某条报警的持续区间内", 未做之前只报缺口不报原因。',"flt.block_err":"本块未算出 ({k}): {e}","flt.eyebrow":"故障统计与可靠性","flt.pareto_d":"帕累托 · 按持续时长","flt.pareto_d_note":"时长 = 闩锁统计方法 (复位 − 激活), 只作排序参考不作停机时长","flt.pareto_n":"帕累托 · 按发生条数","flt.pareto_n_note":"条数 = 发生频次, 不反映影响程度 — 高频短时报警码 (信号抖动或重复触发) 排序靠前","flt.per_t":"台级分布 · 报警条数 top{n}","flt.per_t_note":"全场合计 {n} 条 · 单台占比高须先核查是否为单一报警码重复触发","flt.per_t_share":"占全场","flt.quad":"故障模式四象限 · 条数 × 单次时长","flt.quad_note":"时间窗内共 {n} 个码, 图上为条数前 {m} 个。","flt.quad_note2":"点面积表示影响机组数, 大点为批次共性、小点为单台; 竖分界取条数中位, 横分界取 10min (一个 SCADA 采样格)。右下角的码不要按条数排优先级 — 属重复触发, 非硬件故障。上面两张帕累托对照看即此图的两条投影。","flt.quad_partial":"窗含不满月 {m} (覆盖 {c}%), 条数为原始累计未按天归一。","flt.ram":"可靠性 × 可维修性 · 部件象限","flt.ram_note":'按停机时长排序的表看不出这层结构: 同样 500h 的停机, "频发易修"要查根因、"罕发难修"要备件, 处置相反。设备类停机 {a}h / 外部类 {b}h (外部 = 电网·风况·运维操作, 不计设备可靠性)。海上机组 MDT 普遍偏高是交通窗口决定的, 不等于维修本身慢 — 跨场比 MDT 须同为海上。',"flt.rate":"月度故障率","flt.rate_example":"实测: {m} 总数最低但日均 {v} 条/日 = 全时间窗前列。","flt.rate_full":"各月覆盖完整。","flt.rate_note":"柱高 = 日均条数, 不是月总数","flt.rate_partial":"本时间窗 {m} 数据不满月 (灰虚线柱), 直接比月总数会读反。","flt.seasonal":"故障季节性 · top 报警族 × 月","flt.seasonal_note":"全程 19 个月 (跨 2 冬 1 夏); 未做 χ² 显著性检验前为【参考级】, 只看形态不作季节归因","flt.seasonal_unit":"条/月","flt.seasonal_x":"月","flt.stop_face":"停机面","flt.stop_h":"停机时长","flt.stop_meta":"{h}h · {n} 起 · 统计方法 ≥1h 段, 不含调度令","flt.stop_n":"次数","flt.stop_pareto":"停机归因帕累托","flt.stop_pareto_note":"按停机时长; 事件次数见悬停","flt.stop_units":"台级停机 top{n}","flt.stop_units_note":"停机时长高 ≠ 设备差 — 须先看归因里外部类占比 (调度令已剔除)","fus.alarm_n":"{n} 条","fus.alarm_rank":" · 第 {r}/{t}","fus.burst":"⚠ {p}% 是码 {c} 抖动","fus.burst_tip":"⚠ 单码 {c} 占 {p}%, 中位 {m} 秒/次 — 条数被抖动灌满","fus.clear":"× 清除","fus.cms_act":"行动","fus.cms_action":"需行动机组 (报警 / 不可判)","fus.cms_basis":"统计方法说明","fus.cms_basis_note":"本表 = windcms 状态管理判级 (含标量趋势与数据可判性); 融合矩阵 / 逐台结论 = 振动线确诊链转录 (候选以上)。两统计方法差异台: 仅本表列 {a} (多为标量发作 / 数据不可判, 未到确诊链); 仅确诊链列 {b} (预警级在察, 状态管理未升)。","fus.cms_chain":"部件状态链","fus.cms_chain_note":"(主承前 · 主承后 · 齿轮箱 · 发电机; 悬停看逐件等级)","fus.cms_evidence":"证据强度","fus.cms_focus":"状态焦点","fus.cms_focus_note":"(传动链: 主承前 · 主承后 · 齿轮箱 · 发电机两端)","fus.cms_grades":"38 台部件等级一览","fus.cms_head":"振动状态评估 (windcms 报告 {d} 结果转录)","fus.cms_link":"谱图 · 波形 · 判据 · 工作台等分析功能在独立 windcms 系统 →","fus.cms_loading":"载入振动评估结果…","fus.cms_note":"状态管理判级, 不代表确诊数量; 判据/谱线/计算过程不在本页 — 深潜走底部独立系统。","fus.cms_open":"打开 windcms ↗","fus.cms_overall":"综合","fus.cms_static":"(未启动时用静态版)","fus.cms_window":'数据窗 {r} —— 本时间窗**实算**覆盖区间 (窗名只是起始日代号); 页面上的图谱与"末窗"状态取自时间窗内最新记录, 故多显示末期日期。',"fus.col.alarm":"报警","fus.col.claim":"证据时间窗","fus.col.claim_axis":"26-01 → 09","fus.col.display_only":" · 只展示","fus.col.fixed":" · 不随本时间窗","fus.col.lub":"润滑柱塞","fus.col.oil":"油样","fus.col.part":"部件","fus.col.signal":"振动信号","fus.col.state_concl":"设备状态 / 振动结论","fus.col.temp":"温度","fus.col.tempaxis":"温度轴","fus.col.tempaxis_note":"±6 K","fus.col.vib":"振动","fus.col.wo":"工单","fus.ev_code":"码","fus.ev_dur":"累计时长 h","fus.ev_head":"{c} — 报警 {an} 条 / {au} 台 · 工单 {wn} 条 / {wu} 台 (时间窗内)","fus.ev_min":"时长 min","fus.ev_no_alarm":"时间窗内无该部件报警","fus.ev_no_wo":"时间窗内无该部件工单 (工单数据止 2024-11, 2026 类窗必空 = 数据边界)","fus.ev_recent":"最近 {n} 条明细","fus.ev_text":"报警内容","fus.ev_time":"时间","fus.ev_top":"台分布 top: ","fus.ev_units":"台数","fus.ev_win":"时间窗 {win} · 顶部选择器可换","fus.ev_wo_act":"处理","fus.ev_wo_cause":"原因","fus.ev_wo_name":"故障名称","fus.eval_head":"评价体系 (规范化定义 — 两轴并存, 不可互相替代)","fus.eval_meaning":"含义","fus.eval_note":'设备状态答"这台设备现在怎么样" (危险 > 报警 > 良好 > 优秀 > 不可判); 证据状态答"这个判断有多可信" (定论 → INSUFFICIENT)。设备状态一律取自振动线的判级栏这一个来源。本页判级为转录, 不产新判级; 标注为参照同型机组/频谱信号级 (未定位到具体零件)/测量链/未对应到具体部件的行不作部件级结论消费; claim_window = 该结论的证据时间窗, 窗外状态该结论不背书。',"fus.eval_state":"设备状态 (业主统计方法)","fus.eval_tier":"证据状态 (可信度)","fus.eyebrow":"振动与 SCADA 证据视图 · 展示振动结论、SCADA 指标、报警与工单线索","fus.fam_tip":"{n} 条 · 全场最多 {m} 条","fus.legend_note":'两轴不可互相替代: "候选"说的是可信度不是设备好坏; "良好"说的是设备状态不是证据强度。设备状态只取自振动线的判级栏这一个来源。',"fus.legend_state":"格子颜色 = 设备状态 (业主统计方法, 与 windcms 报告同一套):","fus.legend_tier":"徽章 = 证据状态 (可信度, windcms 九枚举):","fus.loop_ba":"换前 → 换后 (同标尺)","fus.loop_bound":"数据边界: {b}","fus.loop_closed":"已闭环 · 换件后恢复 ({n} 例)","fus.loop_date":"换件日","fus.loop_el":"早期 → 近期 (同标尺)","fus.loop_head":"维修后验证案例 (检出 → 换件 → 恢复)","fus.loop_item":"事项","fus.loop_neg":"负面对照: 工单后持平 {n} 例 (换件 ≠ 必然回落, 说明回落非巧合)。","fus.loop_none":"暂无端到端闭环证据:现场提交的振动数据包里没有「报警→检修→复测」的成对记录","fus.loop_note":"有换件记录且同一统计方法指标回落, 可作为检测链已闭合的案例; 指标仍在上升但缺少可匹配工单的机组, 需现场或台账确认后再关闭。","fus.loop_ratio":"恢复比","fus.loop_rising":"未闭环 · 指标上升待现场/工单确认 ({n} 台)","fus.loop_state":"状态","fus.loop_verdict":"判","fus.loop_x":"倍比","fus.lub_now":"润滑柱塞现状","fus.lv.bad":"定论/报警级","fus.lv.note":"候选/监视/观察级","fus.lv.ok":"销案/无新证","fus.lv.warn":"预警级","fus.m.bad":"异常严重, 建议尽快停机检查","fus.m.bad_e":"证据: 已定案","fus.m.ex":"未见异常, 保持常规监视","fus.m.ex_e":"证据: 仅记录 / 已取消","fus.m.ok":"轻微偏离, 记录观察","fus.m.ok_e":"证据: 待现场核实 / 已记为基线下窗观察","fus.m.unk":"数据不足或监测中断 — 不等于正常","fus.m.unk_e":"证据: 数据不足","fus.m.warn":"存在需现场核实或处置的异常","fus.m.warn_e":"证据: 基本确认 / 新出现待核实","fus.matrix_foot":'润滑柱塞各台设定本就不同 (全场单次循环 22~961 秒), 所以此列只展示不判级, 只有已定案的机制链才标色; 油液多数台末次取样距今超 12 个月, 此列看的是"样够不够新", 不代表当前状态。',"fus.matrix_head":"全场融合矩阵 (38 台 × 6 个证据面)","fus.matrix_note1":'各列取数窗口不同 (见列头) — 不同窗的两格同时发红不等于"同时发生", 不可当共时印证。',"fus.matrix_note2":'每格右侧曲线 = 逐月记忆轨迹 ({n} 个月, {m0} 起; 实心点 = 现窗) — 现窗快照会丢形态, 轨迹才看得见"塌→回升→翻转"类机制签名。',"fus.no_alarm":"时间窗内无报警","fus.none_word":"无","fus.oil_fresh":"近共时","fus.oil_none":"无样","fus.oil_stale":"stale > 12 个月","fus.rule1":"① 同一失效机制的多个观测面 ≠ 多源印证 — 融合禁按源数加权 (29# 柱塞/温度/振动稳态/振动瞬态 = 四个观测面一条机制链)。","fus.rule2":'② "没报警" ≠ "正常" — 在已知盲区上, 缺报警只说明监测面无效, 不说明设备无恙。',"fus.rules_head":"两条判读纪律 (随板块常显)","fus.short.nodata":"数据不足","fus.short.normal":"正常","fus.short.nosample":"未取样","fus.short.stale":"样龄过期","fus.short.uneval":"未评估","fus.short.unlisted":"未收录","fus.sub.cms":"振动分析","fus.sub.events":"报警工单","fus.sub.loop":"端到端闭环","fus.sub.matrix":"融合矩阵","fus.sub.units":"逐台情况","fus.temp_now":"温度轴现状","fus.tip_state":" — 设备状态 {s}","fus.tip_tier":" / 证据状态 {e}","fus.unavailable":"融合面数据不可用: {e}","fus.units_filter":" · 筛选: {l}","fus.units_head":'逐台情况 (全场 {u} 台 / {n} 台次{f}; 深入谱图/波形 → "振动分析")',"fus.unlisted_head":"未列机组 {n} 台 (振动线未收录 — 未列 ≠ 正常)","fus.unlisted_link":"未列 {n} 台","fus.win_n":"{n} 个窗段","fus.win_none":"未标窗","fus.wo_n":"{n} 单","fus.wo_none":"时间窗内无传动链工单","gen.beta":"桨距调度同档差","gen.beta_note":"同一功率档下的桨角与全场中位之差。{units} 偏离达中位的 {k} 倍 → {v}","gen.cands":"曲线欠发筛查","gen.cands_meta":"{note} · σ = {s}%","gen.cap":"封顶参数落位","gen.cap_note":"台数落在几个离散位置上, 不是连成一片 — 这是配置/版本差异的形状; 磨损或工况引起的会是连续散布。两轴各自成组且分组不同台 ⇒ 参数级差异, 成因须配置台账。","gen.ctrl":"控制参数一致性","gen.ctrl_win":"窗 {win}","gen.eyebrow":"特性曲线与控制参数","gen.figs":"七个镜头 · 逐档中位与同型机群残差","gen.fixed_win":"随上方时间窗 · 按时间窗重算","gen.loading":"正在计算七个镜头 (剥限电 · 逐档中位 · 同型机群残差)…","gen.no_cands":"无候选","gen.recomputing":"正在按所选时间窗重算七镜头…","gen.recomputing_short":"正在按窗重算…","gen.ruler":"尺子巡检 · 极差 ÷ σ","gen.ruler_note":"判据自身的分辨力。38 台正态抽样的极差期望约 3.7σ, 明显超出即分布非单峰 — 与左图的分组互为印证; 落在期望附近的轴 (额定桨角) 则是连续分布。","gen.win_range":"时间窗 {span}","gen.win_why":'七镜头与月度时序都按所选时间窗重算(含自定义起止日期)。提示:2025-07 ~ 2025-12 是"限电前干净判别窗"——2026 起交易策略主导,曲线含策略性少发,作设备判据时须注意;选到含 2026 的窗时该影响存在但不再遮掩。',"kpi.alarm_units":"九系统有报警的台数 / 全场","kpi.alarm_units.hint":"统计方法: 九系统 (叶片与叶根/变桨/偏航/齿轮箱/发电机/主轴承/变流器/塔架与基础/主控与传感网) 中任一被判「报警」即计一台。与下方「全场状态」格的统计方法不同 —— 那里按每台 振动/温度/润滑/油液/报警/工单 六列取最严一级, 所以两处数字可以不同, 不是矛盾。","kpi.avail":"时间可用率 (不含调度令) · {win}","kpi.curtail":"限电·绑定 电量损失","kpi.downtime":"停机时长 · {n} 起","kpi.loss":"停机电量损失 · {win}","kpi.loss_dispatch":"另调度令 {n}","kpi.mtbo":"平均停机间隔(MTBO;非行业 MTBF)","loss.curtail_bound":"限电 (命令与实际功率对得上)","loss.curtail_unbound":"限电命令期 · 功率未被压制","loss.dispatch":"调度令停机","loss.lowwind":"低风待机","loss.normal":"正常发电时的欠发","loss.stop":"故障与检修停机","mdl.cloud":"云端","mdl.deepseek-chat.nm":"DeepSeek","mdl.deepseek-chat.t":"约 3 到 10 秒","mdl.deepseek-r1:14b.nm":"本机 DeepSeek 14B · 审核档","mdl.deepseek-r1:14b.t":"约 1 到 3 分钟","mdl.deepseek-r1:32b.nm":"本机 DeepSeek 32B","mdl.deepseek-r1:32b.t":"约 3 到 8 分钟","mdl.deepseek-v4-pro.nm":"云端 DS","mdl.deepseek-v4-pro.t":"约 2 到 6 分钟","mdl.kimi-fast.nm":"Kimi","mdl.kimi-fast.t":"约 5 到 20 秒","mdl.local":"本地","mdl.outbound_warn":"内容会外发到模型厂商, 场名与台号已去标识化","mdl.qwen-plus.nm":"通义千问","mdl.qwen-plus.t":"约 5 到 20 秒","mdl.qwen3.8:27b.nm":"标准 27B · 复杂题","mdl.qwen3.8:27b.t":"约 2 到 4 分钟","mdl.qwen3:30b-a3b.nm":"快 30B (a3b)","mdl.qwen3:30b-a3b.t":"约 20 到 60 秒","mdl.qwen3:8b.nm":"轻量 8B · 默认","mdl.qwen3:8b.t":"约 30 到 60 秒","mdl.unknown_warn":"未知档位, 按内容会外发处理","mdl.zero_outbound":"全程零外发","mt.cov":"当前覆盖","mt.eyebrow":"系统维护 · 数据输入与更新端口","mt.fail":"盘点失败: {e}","mt.freq":"频率","mt.head":"数据维护面 · {n} 个源","mt.how":"补数据怎么做","mt.last":"末次更新","mt.layer_data":"数据层","mt.layer_data_note":"随运营滚动 — 新数据到位后跑摄入, 本体与判级自动刷新","mt.layer_mech":"机理层","mt.layer_mech_note":"相对稳定 — 换厂商资料或现场反馈修正时才动; 它是判据的地基, 变更须过审","mt.note":'每个源给出: 当前覆盖 / 末次更新 / 约定位置 / 摄入命令 / 更新频率 / 责任方。要补数据就把新文件放到"约定位置"再跑"摄入命令"。',"mt.put":"放到:","mt.resp":"责任","mt.rows_n":" ({n} 条)","mt.run":"跑:","mt.src":"源","mt.surveying":"盘点中…","ov.all_steps_done":"已走完(待验收)","ov.attention":"需要关注","ov.attention_n":"{n} 台","ov.basis_fusion":"本台依据来自融合面(九系统判级无「报警」行):部件 {part} · 链路走到第 {done}/{n} 步 · 卡在「{stuck}」 · 证据源 {srcs}","ov.caveat":"限定","ov.evidence":"查看完整依据","ov.fus_gap_hint":"这一面(需要关注 / 全场状态)取数来自融合面;缺件时如实为空,不从交付包补齐。在本机放好原始件后跑一次重算即会由观澜自己的生成端补上(scripts/rudong_fusion_handoff.py,见 docs 的「源代码化清单」)。","ov.illustrative":"示意数据","ov.no_srcs":"无(该台无外部证据源)","ov.quiet":"其余 {n} 台未进入优先关注清单;设备状态请查看全场状态评估。","ov.quiet_all":"当前优先关注清单为空;{n} 台机组的设备状态请查看全场状态评估。","ov.ranked_by":"按 设备状态 × 证据量 排序","ov.strip":"全场状态","ov.strip_hint":"一格一台 · 点格定位","ov.systems":"九系统","ov.systems_hint":"点系统看逐台依据","pop.acts":"动作统计","pop.close":"关闭","pop.loading":"载入中…","pop.none":"本时间窗无记录","pop.o_act":"处置","pop.o_cause":"原因","pop.o_check":"排查","pop.o_date":"日期","pop.o_fault":"故障","pop.o_kind":"类别","pop.orders":"工单 {n} 单","pop.orders_none":"时间窗内无工单","pop.orders_one":"工单 1 单","pop.problem":"{u} · {sys}","pop.unit":"{u} · 全部问题","rpt.attrib.note":'"无记录停机"不是没有故障, 是没归上因。',"rpt.attrib.title":"归因覆盖","rpt.aud_in":"场站内部 (全量)","rpt.aud_up":"上报集团 (脱敏)","rpt.b.attrib.d":"已归因 vs 无记录停机的占比 — 无记录不等于没有故障","rpt.b.attrib.nm":"归因覆盖","rpt.b.blame.d":'交易调度侧 / 设备侧 / 运行侧 三段占比 — 回答"谁的责任"',"rpt.b.blame.nm":"损失责任分账","rpt.b.caliber.d":"统计期 / 残月 / 工单时间窗 / 判级性质 — 建议常驻, 没有边界的数字堆不能作汇报依据","rpt.b.caliber.nm":"统计方法与适用边界","rpt.b.chain.d":"证据→机制→判级→排期→动作→验收 六步的瓶颈分布","rpt.b.chain.nm":"决策链进度","rpt.b.emon.d":"逐月上网 / 损失 / 损失率 / 等效满发, 含数据覆盖率","rpt.b.emon.nm":"逐月发电表","rpt.b.frate.d":"按天归一的日均条数, 数据不满月单独标注","rpt.b.frate.nm":"月度故障率","rpt.b.kpi.d":"六个核心数: 上网电量 / 等效满发 / 可用率 / 损失率 / 停机间隔 / 需行动台","rpt.b.kpi.nm":"一级指标","rpt.b.loop.d":"检出 → 换件 → 复测回落的历史例证, 证明这条链是通的","rpt.b.loop.nm":"闭环实证","rpt.b.narr.d":"模型基于实测数据生成的运行总结 — 为图表补充文字结论, 供汇报使用","rpt.b.narr.nm":"运行总结","rpt.b.pareto.d":"按条数降序 + 累计 80% 线, 找关键少数","rpt.b.pareto.nm":"故障帕累托","rpt.b.parts.d":"逐部件停机时长 / 事件数 / 平均无故障间隔(MTBF)/ 单次停机时长(MDT)/ 影响机组数","rpt.b.parts.nm":"部件停机表","rpt.b.plan.d":"由数据推出的行动项, 不是套话","rpt.b.plan.nm":"下期建议","rpt.b.quad.d":"条数 × 单次时长, 区分重复触发与实际停机 — 按条数排序会误定优先级","rpt.b.quad.nm":"故障四象限","rpt.b.ram.d":'平均无故障间隔(MTBF)× 单次停机时长(MDT)部件象限, 分出"频发易修"与"罕发难修", 处置方向相反',"rpt.b.ram.nm":"可靠性象限","rpt.b.units.d":"需跟踪台的部件 / 证据源 / 六步进度 / 卡在哪一步","rpt.b.units.nm":"重点机组","rpt.b.water.d":"理论可发 → 逐段扣损 → 实际上网, 用于定位电量流向","rpt.b.water.nm":"能量瀑布","rpt.blame.cal":"工况态分解 + 限电命令面绑定判别; 平均出力=实发÷台时, 用作风资源代理量","rpt.blame.note":'进设备考核的只有"故障与检修停机"; 限电属交易与调度侧。',"rpt.blame.note2":'限电不是"低风时段收到的空令": 限电·绑定时段平均出力 1.435 MW, 正常发电时段 1.412 MW, 比值 1.02 — 风况相同而出力被压, 说明限电是真压制; 但"限电命令期·功率未被压制"那一档平均出力仅 0.724 MW (18% 额定), 确属低风时段收令。',"rpt.blame.title":"损失责任分账","rpt.cal.deid":"脱敏","rpt.cal.deid_d":"上报版隐去判据门槛与特征频率","rpt.cal.denom":"可用率与损失率分母不同","rpt.cal.denom_d":'可用率分母剔除低风待机与调度令(问"该发时能不能发"), 损失率分母含全部时段(问"理论能发多少"); 同一低风时段在可用率里不计时间、在损失率里计入基数 — 这是两个指标的设计差异不是错, 但两者不可直接相乘或互推。低风待机对损失的贡献仅 118 MWh(0.5%)',"rpt.cal.partial":" — {m} 数据不满月(覆盖 {c}%), 月度已按天归一","rpt.cal.period":"统计期","rpt.cal.rating":"判级","rpt.cal.rating_d":"由振动/温度/润滑/油液四源融合得出; 行动等级由综合报告出具","rpt.cal.stop":"停机","rpt.cal.stop_d":"可靠性统计方法 ≥1h 段, 电量账为逐条工况态 — 两个数都对, 不可相减","rpt.cal.title":"统计方法与数据边界","rpt.cal.wo":"工单","rpt.cal.wo_d":"台账 2020~2024-11, 本报告不对本期检修执行下结论","rpt.caliber_lbl":"统计方法: ","rpt.chain.cal":"「动作」一列不可判 — {b}","rpt.chain.note":"六步: 证据 → 机制 → 判级 → 排期 → 动作 → 验收。当前 {s}。","rpt.chain.title":"决策链进度","rpt.chapters":"{n} 个章节","rpt.cloud_note":"; 内容会外发到模型厂商","rpt.compose":"生成","rpt.compose_fail":"生成失败: {e}","rpt.composed":"已按需求编排 {n} 块{narr} · {m} 用时 {s}s","rpt.composing":"模型编排中… 挑组件 + 写总结","rpt.emon.act":"上网 MWh","rpt.emon.cal":"覆盖率<50% 的月不参与环比","rpt.emon.cov":"覆盖","rpt.emon.eflh":"等效满发 h","rpt.emon.loss":"损失 MWh","rpt.emon.m":"月","rpt.emon.partial":" 不满月","rpt.emon.pct":"损失率","rpt.emon.title":"逐月发电","rpt.empty_canvas":"画布是空的 — 先从组件库选内容","rpt.export_docx":"导出 Word","rpt.export_xlsx":"导出 Excel","rpt.eyebrow":"汇报定制 · 画布","rpt.facts.agg":"聚合层","rpt.facts.sub":"{n} 条, 契约 {sha}; 数据/时间窗/结论只经契约更新","rpt.facts.sys":"系统","rpt.facts.text":"结论","rpt.facts.title":"可交付级结论 · 契约生成","rpt.facts.verdict":"裁决","rpt.foot_asof":"出件 {d}","rpt.foot_deid":"判据门槛与特征频率已脱敏","rpt.foot_src":"数据源 SCADA 10min · 报警事件 · 工单台账 · CMS 振动 · 油液化验","rpt.foot_trace":"结论可回溯至本体对象","rpt.frate.cal":"不满月按天归一","rpt.frate.note":"柱高=日均条数, 不是月总数。","rpt.frate.title":"月度故障率","rpt.g.end":"收尾","rpt.g.flt":"故障","rpt.g.gen":"发电","rpt.g.rel":"可靠性","rpt.g.unit":"机组","rpt.grounded":"数字全部接地","rpt.hint_idle":"悬停查看组件说明 · 已选组件再次点击移出 · 右侧 ↑↓ 调整顺序","rpt.kpi.act":"上网电量","rpt.kpi.action":"需行动机组","rpt.kpi.action_n":"定论 {a} · 预警 {b} · 候选 {c}","rpt.kpi.annual":"年化约 {v} h","rpt.kpi.avail":"时间可用率","rpt.kpi.avail_n":"不含调度令与低风待机","rpt.kpi.eflh":"等效满发小时","rpt.kpi.loss":"损失率","rpt.kpi.mom":"环比 {v}%","rpt.kpi.mom_na":"环比不可比(末月不满)","rpt.kpi.mtbo":"平均停机间隔","rpt.kpi.mtbo_n":"停机 {n} 起 · 单次均 {h}h","rpt.kpi.theo":"理论可发 {v}","rpt.library":"组件库","rpt.library_note":"点击加入报告, 再次点击移出 · 画布里已有 {n} 块","rpt.local_note":"; 数据不出本地","rpt.loop.cal":"振动标量前后对比","rpt.loop.comp":"部件","rpt.loop.date":"换件日期","rpt.loop.note":"这几台正是算法当初的检出台 ⇒ 故障前能看见、换件后能看见恢复。","rpt.loop.post":"换后","rpt.loop.pre":"换前","rpt.loop.ratio":"比值","rpt.loop.title":"端到端闭环实证","rpt.narr.cal":"模型 {m} 生成 · 数字取自系统实测摘要 · 数据回抓校验{g}","rpt.narr.empty":"还没有生成 — 在上面的交互窗输入报告要求。","rpt.narr.g_n":"报 {n} 处待核","rpt.narr.g_ok":"全通过","rpt.narr.title":"运行总结","rpt.narr.ungr":"⚠ 以下数值由模型自行推算, 不在原始数据摘要中, 引用前须核对: {v}","rpt.narr_plus":" + 一段运行总结","rpt.need_empty":"先输入报告要求","rpt.need_head":"输入报告要求","rpt.need_hint":"模型依据需求选取组件, 并基于实测数据生成运行总结","rpt.need_ph":"例如: 上报集团月报, 侧重设备可靠性与重点机组","rpt.no_compose":"本部署未启用编排接口, 画布仍可手动拼装","rpt.no_models":"本部署未配置任何模型密钥, 编排不可用","rpt.paper_sub":"统计期 {win} | {n} 台","rpt.paper_title":"运行分析报告","rpt.pareto.cal":"报警事件表","rpt.pareto.title":"故障帕累托","rpt.parts.cal":"归因=段起点±30min 首发码","rpt.parts.ev":"事件","rpt.parts.ext":" (外部)","rpt.parts.h":"停机h","rpt.parts.mdt":"单次停机时长(MDT,h)","rpt.parts.mtbf":"平均无故障间隔(MTBF,h)","rpt.parts.part":"部件","rpt.parts.title":"部件停机","rpt.parts.units":"影响机组","rpt.plan.1":'补机制定性 — {n} 台停在"判了级但根因未定", 是当前最大单一瓶颈',"rpt.plan.2":"回收 25~26 工单 — 台账止 2024-11, 本期检修执行与闭环无法自动判定","rpt.plan.3":"油液采样节奏 — 四源里油液长期 stale, 只能作回测锚","rpt.plan.4":"限电侧 — 损失六成在交易与调度侧, 设备侧改善空间有限","rpt.plan.cal":"建议级 — 排期与动作须经审批","rpt.plan.title":"下期计划与建议","rpt.preset.blank":"空白画布","rpt.preset.month":"月度运行分析","rpt.preset.topic":"设备专题","rpt.preset.week":"周报","rpt.preset.year":"年度总结","rpt.presets":"预设","rpt.preview_empty":"文档预览窗 — 从上面的组件库点选内容, 此处显示报告预览","rpt.print":"打印 / 存 PDF","rpt.quad.cal":"纵界=10min(一个SCADA采样格)","rpt.quad.note":"右下角报警码属重复触发, 不应按条数排定优先级。","rpt.quad.title":"故障模式四象限","rpt.ram.cal":"SCADA ≥1h 停机段, 不含调度令; 海上 MDT 含交通窗口","rpt.ram.note":"设备类 {a}h / 外部类 {b}h (电网·风况·运维操作不计设备可靠性)","rpt.ram.title":"可靠性 × 可维修性","rpt.ungrounded_n":"{n} 个数字待核","rpt.units.at":"卡在","rpt.units.cal":"四源融合判级","rpt.units.clear":"全通","rpt.units.ev":"部件与证据","rpt.units.head":"需跟踪 {n} 台 / {tot} | 瓶颈 ","rpt.units.prog":"进度","rpt.units.rising":"在升 {r}×","rpt.units.state":"状态","rpt.units.stuck":"{n} 台卡在「{s}」","rpt.units.title":"重点机组与处置","rpt.up_note":"上报版 — 判据门槛与特征频率已脱敏","rpt.up_tag":"上报版","rpt.water.cal":"SCADA 10min 工况态分解; 损失=同工况理论出力与实测之差。量级自检为防虚高的下限校验, 不是风资源判据","rpt.water.cap_bad":"量级自检: 理论 ≥ 全额定上限 {cap} MWh ✗ 数字不可信","rpt.water.cap_ok":"量级自检: 理论低于全额定上限 {cap} MWh ✔","rpt.water.note":"理论可发 {theo} = 上网 {act} + 损失 {loss} MWh ({pct}%)","rpt.water.title":"发电完成情况","rv.advci":"AdvCI","rv.dual":"双模型审","rv.lite":"lite","rv.none":"未审","st.bad":"危险","st.excellent":"优秀","st.ok":"良好","st.ok_excellent":"良好 / 优秀","st.unk":"不可判","st.warn":"报警","step.acceptance":"验收","step.action":"动作","step.evidence":"证据","step.mechanism":"机制","step.rating":"判级","step.schedule":"排期","step.site_records":"现场记录","step.stuck_at":"卡在「{step}」","sys.blade":"叶片与叶根","sys.control":"主控与传感网","sys.converter":"变流器","sys.gearbox":"齿轮箱","sys.generator":"发电机","sys.main_bearing":"主轴承","sys.other":"其他","sys.pitch":"变桨","sys.tower":"塔架与基础","sys.yaw":"偏航","tab.assistant":"检修助手","tab.component":"部件问题","tab.decision":"检修决策","tab.energy":"电量算账","tab.fault":"故障统计","tab.generation":"发电性能","tab.ontology":"本体","tab.overview":"总览","tab.report":"汇报定制","tab.system":"系统维护","tab.vibration":"振动融合分析","tier.candidate":"候选","tier.candidate.s":"候选","tier.candidate_baseline":"候选·记基线","tier.candidate_baseline.s":"候选·记基线","tier.candidate_new":"候选·新发","tier.candidate_new.s":"候选·新发","tier.confirmed":"定论","tier.confirmed.s":"定论","tier.detail.不可判":"不可判","tier.detail.仲裁输入":"仲裁输入","tier.detail.优":"优","tier.detail.优秀":"优秀","tier.detail.传感器项":"传感器项","tier.detail.候选":"候选","tier.detail.候选·监视(复发)":"候选·监视(复发)","tier.detail.候选·跟踪":"候选·跟踪","tier.detail.危险":"危险","tier.detail.可降":"可降","tier.detail.复发候选(两轴合并)":"复发候选(两轴合并)","tier.detail.定论":"定论","tier.detail.弱同向新证":"弱同向新证","tier.detail.报":"报","tier.detail.报警":"报警","tier.detail.本体无新证":"本体无新证","tier.detail.正常":"正常","tier.detail.正样本":"正样本","tier.detail.温度单轴保留":"温度单轴保留","tier.detail.监视":"监视","tier.detail.监视(不开箱)":"监视(不开箱)","tier.detail.良":"良","tier.detail.良好":"良好","tier.detail.蓄能失效候选(定向查)":"蓄能失效候选(定向查)","tier.detail.观察":"观察","tier.detail.观察(发电机侧)":"观察(发电机侧)","tier.detail.记基线观察":"记基线观察","tier.detail.销案(定论)":"销案(定论)","tier.detail.降观察":"降观察","tier.detail.预警":"预警","tier.detail.预警·处置升急":"预警·处置升急","tier.detail.预警·处置规划":"预警·处置规划","tier.insufficient":"不足","tier.insufficient.s":"不足","tier.near":"准定论·预警","tier.near.s":"准定论","tier.normal":"正常","tier.normal.s":"正常","tier.reference":"参考","tier.reference.s":"参考","tier.withdrawn":"撤回","tier.withdrawn.s":"撤回","ui.all":"全部","ui.back_portal":"← 返回门户","ui.back_to":"← 返回{tab}","ui.collapse":"收起","ui.count":"条数","ui.data_hidden":"({n} 处数据文本尚无英文,需复核)","ui.date":"日期","ui.empty":"无数据","ui.error":"出错了","ui.expand":"展开","ui.loading":"载入中…","ui.not_ported":"本页尚未迁入新版。","ui.not_recorded":"台账未填","ui.open":"查看 →","ui.open_classic":"在经典版打开 →","ui.query":"查询","ui.reselect":"重新选择机组 / 测点","ui.retry":"重试","ui.system":"系统","ui.unit":"机组","ui.units":"机组","ui.verbatim":"原始记录 (中文)","ui.verbatim_note":"{n} 处为手册/工单原文, 无英文译本, 按原文转录。","unit.h":"h","unit.n":" 条","unit.units":"台","vp.(振动线未收录)":"(振动线未收录)","vp.主轴承(后)+集中润滑泵":"主轴承(后)+集中润滑泵","vp.发电机(引用同族, 见族主台)":"发电机(无本台独立证据, 参照同型机组)","vp.发电机(未映射)":"发电机(未对应到具体部件)","vp.发电机DE":"发电机DE","vp.发电机DE+NDE(两端)":"发电机DE+NDE(两端)","vp.发电机NDE":"发电机NDE","vp.齿轮箱(未映射)":"齿轮箱(未对应到具体部件)","vp.齿轮箱(测量链问题, 非部件)":"齿轮箱(测量链问题, 非部件)","vp.齿轮箱(谱线级, 未映射到部件)":"齿轮箱(频谱信号级 (未定位到具体零件), 未对应到具体部件)","vp.齿轮箱中间轴":"齿轮箱中间轴","vp.齿轮箱二级行星内齿圈":"齿轮箱二级行星内齿圈","vp.齿轮箱高速轴":"齿轮箱高速轴","win.2025H2":"2025H2","win.2026":"2026年","win.2026H1":"2026H1","win.30d":"近30日","win.90d":"近90日","win.all":"全程","win.apply":"应用","win.bad_order":"开始日期不能晚于结束日期","win.banner":"时间窗 {win} · 本页全部数字随上方时间窗切换","win.custom":"自定义","win.custom_hint":"自定义起止日期(含两端)。日粒度件(判级/停机台账/曲线)按日精确;月度聚合件按所跨月份取整,图上会写明。","win.custom_sel":"自定义 {a} ~ {b}","win.from":"开始日期(含)","win.label":"时间窗","win.months":"按月","win.need_both":"请把开始与结束日期都选上","win.partial":"时间窗内 {m} 数据不满月 (覆盖 {c}%), 月度图已按天归一","win.presets":"预设时间窗","win.through":"至{date}","win.to":"结束日期(含)","tab.documents":"交付文档","tab.recalc":"数据重算","doc.eyebrow":"交付文档","doc.loading":"正在读取交付文档…","doc.head":"交付文档 ({n})","doc.note":"交付文档随包提供;下载后可离线查阅。","doc.name":"文档","doc.size":"大小","doc.get":"获取","doc.download":"下载","rc.eyebrow":"数据重算","rc.loading":"正在读取重算状态…","rc.running":"重算进行中","rc.idle":"当前空闲","rc.note":"重算链按步执行;本页每 5 秒刷新状态与日志尾部。","rc.since":"开始于","rc.start":"开始重算","rc.log":"重算日志(尾部)","rc.empty":"(暂无日志)","tab.portal":"门户栏目","pt.eyebrow":"门户栏目","pt.head":"重构前门户上的栏目(已迁移 / 可达)","pt.note":"总览、振动·CMS、交付文档、数据重算已迁为页签;系统架构/方法/经验发现/案例·液压 见「架构与资料」页签;下列两项为在线服务入口。","pt.col":"栏目","pt.what":"说明","pt.open":"打开","pt.kind_portal":"门户存档页(release/portal.html 经网关 /portal 伺服)","pt.kind_svc":"在线服务(经网关)","tab.portal_sec":"架构与资料","ps.eyebrow":"系统架构 · 方法 · 经验发现 · 案例·液压","ps.missing":"该节内容未抽取到(请检查 v2.9.2 门户原文)。","tab.portal_src":"门户","pv.eyebrow":"观澜门户(Vue 装配 · v2.9.2 原文外壳与内嵌件)","pv.loading":"正在装配门户(外壳 + 内嵌件)…","pv.assembled":"门户已装配:内嵌件 {n} 件(外壳与内嵌件均取自 v2.9.2 原文)"};function o(t,e){let s=Sr[t]??t;if(e)for(const[n,l]of Object.entries(e))s=s.split(`{${n}}`).join(String(l));return s}const Tr=["overview","energy","component","vibration","generation","fault","decision","assistant","report","system","documents","recalc","portal_sec","portal_src"],un=["overview","energy","component","fault","vibration","generation","decision","assistant","system","report","documents","recalc","portal_sec","portal_src"],Er={class:"eyebrow"},Cr={key:0,class:"panel"},Fr={class:"small",style:{color:"var(--critical)"}},Ar={key:1,class:"panel"},Or={class:"small muted"},qr={class:"panel mb"},Lr={class:"small muted"},jr={class:"panel mb"},Dr={class:"tblwrap"},Pr={style:{"margin-top":"4px"}},Hr={style:{width:"60%"}},Rr={style:{width:"16%"}},Ir={style:{width:"24%"}},Nr={class:"small"},Br={class:"small num"},Wr={class:"small"},Ur=["href","download"],Kr=Pt({__name:"Documents",setup(t){const e=At(null),s=At(""),n=l=>l>=1048576?(l/1048576).toFixed(1)+" MB":Math.max(1,Math.round(l/1024))+" KB";return Be(async()=>{try{const i=await(await fetch("/api/delivery_docs")).json();i&&i.error?s.value=String(i.error):e.value=i&&i.docs||[]}catch(l){s.value=String(l&&l.message||l)}}),(l,i)=>(w(),E("section",null,[a("div",Er,u(p(o)("doc.eyebrow")),1),s.value?(w(),E("div",Cr,[a("p",Fr,u(s.value),1)])):e.value?(w(),E(it,{key:2},[a("div",qr,[a("h3",null,u(p(o)("doc.head",{n:e.value.length})),1),a("p",Lr,u(p(o)("doc.note")),1)]),a("div",jr,[a("div",Dr,[a("table",Pr,[a("tr",null,[a("th",Hr,u(p(o)("doc.name")),1),a("th",Rr,u(p(o)("doc.size")),1),a("th",Ir,u(p(o)("doc.get")),1)]),(w(!0),E(it,null,_t(e.value,c=>(w(),E("tr",{key:c.name},[a("td",Nr,u(c.name),1),a("td",Br,u(n(c.size||0)),1),a("td",Wr,[a("a",{href:c.url,download:c.name},u(p(o)("doc.download")),9,Ur)])]))),128))])])])],64)):(w(),E("div",Ar,[a("p",Or,u(p(o)("doc.loading")),1)]))]))}}),Vr={class:"eyebrow"},Gr={key:0,class:"panel"},zr={class:"small",style:{color:"var(--critical)"}},Yr={key:1,class:"panel"},Jr={class:"small muted"},Xr={class:"panel mb"},Zr={class:"small muted"},Qr={key:0,class:"small"},tc=["disabled"],ec={class:"panel mb"},sc={class:"small",style:{"max-height":"340px",overflow:"auto",margin:"0"}},nc=Pt({__name:"Recalc",setup(t){const e=At(null),s=At(""),n=At(!1);let l=null;const i=async()=>{try{const r=await fetch("/api/recalc");e.value=await r.json()}catch(r){s.value=String(r&&r.message||r)}},c=async()=>{n.value=!0;try{await fetch("/api/recalc_start",{method:"POST"}),await i()}catch(r){s.value=String(r&&r.message||r)}finally{n.value=!1}};return Be(()=>{i(),l=setInterval(i,5e3)}),Nn(()=>{l&&clearInterval(l)}),(r,d)=>(w(),E("section",null,[a("div",Vr,u(p(o)("rc.eyebrow")),1),s.value?(w(),E("div",Gr,[a("p",zr,u(s.value),1)])):e.value?(w(),E(it,{key:2},[a("div",Xr,[a("h3",null,u(e.value.running?p(o)("rc.running"):p(o)("rc.idle")),1),a("p",Zr,u(p(o)("rc.note")),1),e.value.started_at?(w(),E("p",Qr,[at(u(p(o)("rc.since"))+" ",1),a("code",null,u(e.value.started_at),1)])):yt("",!0),a("button",{class:"pill",disabled:n.value||e.value.running,onClick:c},u(p(o)("rc.start")),9,tc)]),a("div",ec,[a("h3",null,u(p(o)("rc.log")),1),a("pre",sc,u(e.value.log||p(o)("rc.empty")),1)])],64)):(w(),E("div",Yr,[a("p",Jr,u(p(o)("rc.loading")),1)]))]))}}),lc={class:"eyebrow"},ic={class:"panel mb"},ac={class:"small muted"},oc={class:"panel mb"},rc={class:"tblwrap"},cc={style:{"margin-top":"4px"}},dc={style:{width:"22%"}},uc={style:{width:"56%"}},pc={class:"small"},hc={class:"small muted"},fc={class:"small"},mc=["href"],vc=Pt({__name:"Portal",setup(t){const e=[{id:"sim",label:"仿真",href:"/sim/",note:"仿真与回放(仿真台 18791)",kind:"svc"},{id:"admin",label:"状态",href:"/ops",note:"系统状态(运维台)",kind:"svc"},{id:"classic",label:"经典",href:"/web/detail_v2.html",note:"经典版页面(v2.9.2 原文原样:布局/样式/字体/图文表一致)",kind:"svc"}];return(s,n)=>(w(),E("section",null,[a("div",lc,u(p(o)("pt.eyebrow")),1),a("div",ic,[a("h3",null,u(p(o)("pt.head")),1),a("p",ac,u(p(o)("pt.note")),1)]),a("div",oc,[a("div",rc,[a("table",cc,[a("tr",null,[a("th",dc,u(p(o)("pt.col")),1),a("th",uc,u(p(o)("pt.what")),1),a("th",null,u(p(o)("pt.open")),1)]),(w(),E(it,null,_t(e,l=>a("tr",{key:l.id},[a("td",pc,[a("b",null,u(l.note),1)]),a("td",hc,u(l.kind==="portal"?p(o)("pt.kind_portal"):p(o)("pt.kind_svc")),1),a("td",fc,[a("a",{href:l.href},u(p(o)("pt.open")),9,mc)])])),64))])])])]))}}),_c=`</div><div class="pg" id="architecture" data-title="系统架构"><section class="hero"><div class="wrap"><div class="kicker">技术白皮书 · 系统架构</div><h1>从证据分析到处置建议</h1><p class="lead">五个相连的系统层:保留来源身份、落位设备上下文、检验机制、准备可问责的决定,并从检修结果中学习。</p></div></section>
- <section><div class="wrap"><div class="chips"><span class="chip">十分钟 SCADA</span><span class="chip">秒级数据</span><span class="chip">CMS</span><span class="chip">报警</span><span class="chip">工单</span><span class="chip">油样与检查</span><span class="chip">技术文档</span></div>
- <div class="rail" style="--n:5;margin-top:26px"><div class="node"><i>01</i><b>数据地基</b><small>每条记录能被辨识和解释吗?</small></div><div class="node"><i>02</i><b>设备本体</b><small>每条记录指向哪个物理对象与配置?</small></div><div class="node on"><i>03</i><b>证据引擎</b><small>证据支持某个具体机制吗?</small></div><div class="node"><i>04</i><b>决策服务</b><small>现在有什么动作是有依据的?</small></div><div class="node"><i>05</i><b>检修学习</b><small>动作改变了预期指标吗?</small></div></div>
- <div class="grid g2" style="margin-top:22px"><div class="callout"><b>验证过的现场结果</b> → 本体 + 证据史 → 下一轮分析</div><div class="callout warn"><b>必需证据缺失</b> → 点名采集任务 → 停止升级</div></div>
- <p class="sub" style="margin-top:12px">身份、来源完整性或必需证据未解决时,系统失败关闭;验证过的检修结果成为可复用的证据。</p></div></section>
- <section><div class="wrap"><div class="kicker">01 · 数据地基 · 登记与契约</div><h2>每条记录能被辨识和解释吗?</h2><div class="grid g2" style="margin-top:14px"><div class="card"><p>保留原始证据,定义每个通道:登记来源位置、指纹、时间覆盖与格式,不改原文件;十分钟与秒级数据核单位、采样间隔、时间戳、哨兵值、通道活性与运行状态。</p></div><div class="card"><div class="k">输出</div><p>来源登记簿、通道定义、可用时段与排除项。</p></div></div></div></section><section><div class="wrap"><div class="kicker">02 · 设备本体 · 落位</div><h2>每条记录指向哪个物理对象与配置?</h2><div class="grid g2" style="margin-top:14px"><div class="card"><p>通过受控的工程图谱连接证据:资产、系统、总成、部件、测点与通道、告警、规程、工单、文档相连;机型、配置、有效期与来源约束每一条映射,含糊的对象停在未分配。</p></div><div class="card"><div class="k">输出</div><p>按机型限定的设备对象、带类型的关系与出处。</p></div></div></div></section><section><div class="wrap"><div class="kicker">03 · 证据引擎 · 检验机制</div><h2>证据支持某个具体机制吗?</h2><div class="grid g2" style="margin-top:14px"><div class="card"><p>先验测量链与物理界,再比较绝对水平、同工况机群残差、变化、分布形状与合格谱证据;证据族分开,相互矛盾的记录保持可见。</p></div><div class="card"><div class="k">输出</div><p>有界的发现、疑似机制、支持证据、矛盾项,或「需更多数据」。</p></div></div></div></section><section><div class="wrap"><div class="kicker">04 · 决策服务 · 限定动作</div><h2>现在有什么动作是有依据的?</h2><div class="grid g2" style="margin-top:14px"><div class="card"><p>写一个可问责的决定对象:状态、机制、置信、后果、选项、责任人、到期日与闭合证据放在一起;系统准备监视/计划/动作三种选项,授权工程师批准现场与高成本动作。</p></div><div class="card"><div class="k">输出</div><p>可审阅的决定、批准人与执行边界。</p></div></div></div></section><section><div class="wrap"><div class="kicker">05 · 检修学习 · 验证与复用</div><h2>动作改变了预期指标吗?</h2><div class="grid g2" style="margin-top:14px"><div class="card"><p>工作包写明部件、规程、检查点与必需记录;检修后在同工况下比较同一指标,改善支持闭合,无改善则重开机制;验证过的结果挂回本体,供下一个相似案例。</p></div><div class="card"><div class="k">输出</div><p>现场记录、修后比较、闭合或重开的调查。</p></div></div></div></section>
- <section><div class="wrap"><div class="kicker">受保护的内容</div><h2>资产专属参考保持在受保护工作区内</h2><p class="sub">特征频率、业主与场站标识、私有技术文档与台级证据留在受保护工作区;公开图只展示架构。</p></div></section>
- </div>`,gc=`</div><div class="pg" id="method" data-title="方法"><section class="hero"><div class="wrap"><div class="kicker">工程方法</div><h1>六步分析与决策依据</h1><p class="lead">观澜把运行数据、设备上下文与检修历史连在一起,不隐藏不确定性。每个结果保留来源、时段与下一步验证。</p></div></section>
- <section><div class="wrap"><div class="kicker">输入</div><h2>十分钟 SCADA + 秒级数据</h2><div class="grid g3"><div class="card"><div class="k">十分钟 SCADA</div><h3>运行状态、热行为、负荷与机群比较</h3><p></p></div><div class="card"><div class="k">秒级数据</div><h3>快速暂态、控制响应与事件序列</h3><p></p></div><div class="card"><div class="k">CMS</div><h3>状态监测标量与合格谱</h3><p></p></div><div class="card"><div class="k">报警</div><h3>码按适用的整机厂码表解析</h3><p></p></div><div class="card"><div class="k">检修</div><h3>工单、检查、油样与换件</h3><p></p></div><div class="card"><div class="k">技术来源</div><h3>按机型限定的图纸、手册、规程与配置记录</h3><p></p></div></div>
- <div class="callout" style="margin-top:16px">单位、采样间隔、时间戳、哨兵值与通道活性在使用前核验。<b>有这一列不等于有活信号。</b></div></div></section>
- <section><div class="wrap"><div class="kicker">执行路径</div><h2>六步</h2><div class="rail" style="--n:6"><div class="node"><i>01</i><b>登记</b><small>来源:指纹与覆盖</small></div><div class="node"><i>02</i><b>落位</b><small>身份:机型与配置</small></div><div class="node"><i>03</i><b>验证</b><small>测量:单位、时间与活性</small></div><div class="node"><i>04</i><b>比较</b><small>状态:绝对与同工况对照</small></div><div class="node on"><i>05</i><b>检验</b><small>机制:支持与矛盾</small></div><div class="node"><i>06</i><b>发布</b><small>决定:动作、责任人与闭合</small></div></div></div></section>
- <section><div class="wrap"><div class="kicker">四道控制</div><h2>诊断结论的验证要求</h2><div class="grid g4"><div class="card"><div class="k">01</div><h3>先验测量链</h3><p>算特征之前先查静态偏置、缺失或默认值、时间戳对齐与真实采样行为。</p></div><div class="card"><div class="k">02</div><h3>匹配状态与时段</h3><p>同工况、同证据窗比较;检修与配置变更开启新时段。</p></div><div class="card"><div class="k">03</div><h3>证据保持独立</h3><p>同一传感器的多个特征仍是一族证据;共享预处理或共同测量链不构成互证。</p></div><div class="card"><div class="k">04</div><h3>缺必需证据就停</h3><p>缺必需证据只产出"需更多数据",点名采集任务,禁止升级到更强的结论。</p></div></div></div></section>
- <section><div class="wrap"><div class="kicker">决定与检修</div><h2>从发现到验证过的现场结果</h2><div class="grid g3"><div class="card"><div class="k">发现</div><h3>陈述状态</h3><p>部件、疑似机制、幅度、证据、矛盾与置信。</p></div><div class="card"><div class="k">决定</div><h3>选择 监视 / 计划 / 动作</h3><p>给出后果、选项、责任人、到期日、批准与闭合证据。</p></div><div class="card"><div class="k">现场结果</div><h3>看变了什么</h3><p>同工况下比较同一指标;闭合、继续或重开机制。</p></div></div><div class="callout" style="margin-top:16px">系统准备可审阅的工作范围与闭合所需证据;<b>不签发工作许可</b>,授权工程师批准现场与高成本动作。</div></div></section>
- <section><div class="wrap"><div class="kicker">边界保持可见</div><h2>记录决定边界</h2><div class="grid g2"><div class="card"><div class="k">十分钟数据</div><h3>分不开秒级作用的机制</h3><p>秒级数据改善时序证据,但本身不建立因果。</p></div><div class="card"><div class="k">相对偏差</div><h3>只是筛查结果</h3><p>直到有绝对物理量与适用边界支持为止。</p></div><div class="card"><div class="k">无确认阳性的阈值</div><h3>可排序、可筛查</h3><p>不能确认诊断。</p></div><div class="card"><div class="k">语言模型</div><h3>解释受控对象并引用记录</h3><p>不能发明关系、补缺输入或批准检修。</p></div></div></div></section>
- </div>`,bc=`</div><div class="pg" id="findings" data-title="经验发现"><section class="hero"><div class="wrap"><div class="kicker">现场经验</div><h1>现场经验与工程判断</h1><p class="lead">在 1.5 到 6 MW 机群上的工作,形成了一套鉴定证据、检验机制、支持检修决定的实用方法。</p><div class="chips"><span class="chip ev">59 项内部检查 → 8 条公开教训</span></div></div></section>
- <section><div class="wrap"><div class="grid g4"><div class="card"><div class="k">分析足迹</div><h3>60+ 个风场</h3><p>陆上 + 海上</p></div><div class="card"><div class="k">容量范围</div><h3>1.5–6 MW</h3><p></p></div><div class="card"><div class="k">架构</div><h3>双馈 · 直驱 · 半直驱</h3><p></p></div><div class="card"><div class="k">平台</div><h3>远景 · 金风 · 明阳 · 西门子</h3><p></p></div></div><p class="sub" style="margin-top:12px">项目身份、业主、场站、机组标识与资产专属诊断参数不公开。</p></div></section>
- <section><div class="wrap"><div class="kicker">八条反复出现的教训</div><h2>会改变工程结论的检查</h2><div class="grid g4" style="margin-top:14px"><div class="card"><div class="k">A · 采样</div><h3>让样本匹配问题</h3><p>比较机组或机群之前,先声明独立单位、聚合层级、对照组、分母与时间窗。</p></div><div class="card"><div class="k">B · 归因</div><h3>要机制,也要时间顺序</h3><p>共现与相关只能筛查假设;因果归因还需要物理机制、预期方向与事件级先后。</p></div><div class="card"><div class="k">C · 测量</div><h3>先验测量链</h3><p>有值的字段、固定偏置或安静的通道未必是活信号;先查单位、时间戳、采样、哨兵、偏置与传感器状态。</p></div><div class="card"><div class="k">D · 聚合</div><h3>先保留事件再汇总</h3><p>平均会抹掉极端、持续时长与受影响比例;出机群统计前先看点级形状、缺口与边界。</p></div><div class="card"><div class="k">E · 判据</div><h3>写明每条判据的适用域</h3><p>单位、阈值、方差、运行状态、控制时长、必需输入与边界附近的情形都随结果一起给出。</p></div><div class="card"><div class="k">F · 守护</div><h3>验证守护真的在跑</h3><p>文档里的检查在触发条件与生产调用路径确认前不提供任何保护,且失败必须可见。</p></div><div class="card"><div class="k">G · 管线</div><h3>让检查器失败来测它</h3><p>向隔离的样例注入已知错误,证明真实入口拒绝它,再恢复有效输入证明通过。</p></div><div class="card"><div class="k">H · 决定</div><h3>筛查与动作分开</h3><p>技术发现只有在范围、不确定性、后果、选项、责任人与批准明确后,才成为检修决定。</p></div></div></div></section>
- <section><div class="wrap"><div class="kicker">经验怎么用</div><h2>从异常发现到检修建议</h2><div class="rail" style="--n:3"><div class="node"><i>01</i><b>鉴定证据</b><small>现有数据能支持什么、不能支持什么、哪项检查补上缺口</small></div><div class="node"><i>02</i><b>落位设备上下文</b><small>通过本体映射到正确的机型、配置、部件、测点与疑似机制</small></div><div class="node on"><i>03</i><b>准备决定</b><small>给出监视/计划/动作选项、后果、现场范围、必需记录、批准人与闭合证据</small></div></div>
- <div class="callout" style="margin-top:22px"><b>经验边界。</b>经验横跨陆上与海上;换环境或换不熟悉的配置,复用任何判据或结论前都要重新验证控制、测量链、部件结构与运行制度。</div></div></section>
- <section id="contract-claims" data-contract="362a00a7649889ea79c3df3108c8b21f439da2537c93af8517da5bd92c855bba" data-version="v0"><div class="wrap"><div class="kicker">本场结论 · 契约生成</div><h2>定论与准定论·预警 (0 条)</h2><p class="sub">由结构化事实契约 362a00a7649889ea 渲染 (共 6 条); 数据、时间窗、结论只经契约更新, 本段禁手改 (release-manifest.content_contract)。</p><div style="overflow:auto"><table><tr><th>claim</th><th>裁决</th><th>结论</th><th>系统</th><th>窗 (天)</th></tr></table></div><h2 style="margin-top:22px">候选 · 参考 · 证据不足 (6 条, 按系统)</h2><details><summary>报警面 · 1 条 (候选 1)</summary><table><tr><th>claim</th><th>裁决</th><th>结论</th><th>缺项</th></tr><tr><td><code>RD-LEDGER-ALM-01</code></td><td>候选</td><td>报警集中: WTG08 5148 条(机群中位 616 条的 8.4 倍)</td><td>报警条数不等于缺陷严重度: 单码抖动(同一码反复报)会抬高条数; 未做同码基线归一。</td></tr></table></details><details><summary>传动链 · 1 条 (候选 1)</summary><table><tr><th>claim</th><th>裁决</th><th>结论</th><th>缺项</th></tr><tr><td><code>RD-LEDGER-WO-01</code></td><td>候选</td><td>重复检修: WTG33 的「偏航单元」累计 81 次(窗内)</td><td>检修台账记录的是"做过什么", 不等于"坏过几次": 同一部件的例行检查也会计次; 未做计划性/故障性停机区分(缺 work_type 字段)。</td></tr></table></details><details><summary>发电量 · 1 条 (参考 1)</summary><table><tr><th>claim</th><th>裁决</th><th>结论</th><th>缺项</th></tr><tr><td><code>RD-LEDGER-LOSS-01</code></td><td>参考</td><td>停机损失集中: WTG05 占全场停机损失 10%(2,874 MWh, 全场停机 29,368 MWh)</td><td>损失是"损失了多少电", 不是"为什么损失"; 含调度令停机(非缺陷)与限电, 需与故障类分开看。</td></tr></table></details><details><summary>温度面 · 1 条 (候选 1)</summary><table><tr><th>claim</th><th>裁决</th><th>结论</th><th>缺项</th></tr><tr><td><code>RD-LEDGER-TEMP-01</code></td><td>候选</td><td>温度相对离群: WTG01 的 tmp_wtc_TrafoTMa_mean 在 3750.0 功率档偏离机群中位 18.0K(工况窗 ref)</td><td>同工况中位比对的是"机群", 若全机群共因升温和(环境/冷却水温)则判据失效; 未接绝对限值(无 ISO/厂商温度锚)。</td></tr></table></details><details><summary>发电量, 功率曲线 · 1 条 (参考 1)</summary><table><tr><th>claim</th><th>裁决</th><th>结论</th><th>缺项</th></tr><tr><td><code>RD-LEDGER-PC-01</code></td><td>参考</td><td>功率曲线偏离: WTG03 同风速下功率偏差 -147 kW(判别: 风速计偏高候选(A类)); 全场判别分布 {'欠发候选(筛查级)': 3, '风速计偏高候选(A类)': 1}</td><td>同风速残差受机位风资源(尾流/扇区)影响; 未做机位修正, 故只作"待核"不作缺陷结论。</td></tr></table></details><details><summary>振动面 · 1 条 (候选 1)</summary><table><tr><th>claim</th><th>裁决</th><th>结论</th><th>缺项</th></tr><tr><td><code>RD-LEDGER-VIB-01</code></td><td>候选</td><td>振动面过闸线: 3 条特征线达「候选」及以上(13#·hs_rotor·BPFO(外圈), 35#·hs_rotor·BPFO(外圈), 6#·hs_rotor·BPFO(外圈))</td><td>机制未定 ⇒ **不命名部件**(滚道/圈侧须实物或换件闭环); 峰值拾取为本器口径(目标频率 ±2 bin 取最大), 无正样本锚 ⇒ 封顶「候选」, 不出「</td></tr></table></details><h2 style="margin-top:22px">已撤回 (0 条)</h2><ul></ul></div></section><!--/contract-claims--></div>`,yc=`</div><div class="pg" id="case_hydraulic" data-title="案例·液压"><section class="hero"><div class="wrap"><div class="kicker">发现案例 · 系统① 液压 · 变桨回路与高速轴制动回路</div><h1>八台机组变桨蓄能器失效</h1><p class="lead">如东海上 38 台 SWT-4.0-130。通过泵加载特征评估 70 号蓄能器储能能力,形成逐台复核与处置建议。证据状态以各项记录为准。</p>
- <div class="chips"><span class="chip s gd">健康 26 台</span><span class="chip s al">气容丧失 8 台</span><span class="chip s ob">边界 / 参数侧 5 台</span><span class="chip ev">证据窗 运行 → 2026-07-07</span><span class="chip ev">已处置 1 台 (4#) · 恢复基准待核对</span></div></div></section>
- <section><div class="wrap"><div class="kicker">01 · 问</div><h2>评估对象、监测量与适用条件</h2><div class="grid g5"><div class="card"><div class="k">系统</div><h3>液压 · 变桨回路</h3><p>一个油箱、两条回路:变桨大站 400 L / 245 bar,HS 制动器由大站经 P BRAKE 分出。</p></div><div class="card"><div class="k">监测量</div><h3>泵单次加载输出量 V_cyc</h3><p>加载时长 × 排量 36.8 L/min,来自 10-min 与秒级 SCADA 的泵启停信号。</p></div><div class="card"><div class="k">方向</div><h3>V_cyc 降低:单次进油量减少</h3><p>蓄能器气容丧失后,每次加载只能推进很少的油。</p></div><div class="card"><div class="k">评估限制</div><h3>缺 Δp 或未逐台落值</h3><p>横坐标缺失的台不外推;档案给组区间的台按区间画,不当单点。</p></div><div class="card"><div class="k">缺失资料</div><h3>轮毂 106 号无连续通道</h3><p>只能靠机组自检容量检查记录(235 bar 起测)。</p></div></div></div></section>
- <section><div class="wrap"><div class="kicker">02 · 证</div><h2>两组蓄能器,分工完全不同,判据只对 70 号有效</h2><div class="grid g2"><div class="card"><div class="k">70 号 · 泵站近端缓冲</div><h3>10 L / 180 bar</h3><p>活塞式,经 ø7 节流直连泵压主管,全额参与蓄能循环;A 类失效全在此件。系统总容变按仿真标定式分解:C = C管路 + C70 + 0.095·C106;预充 180 bar 由 38 台实测容变反算证实 (0.0839 ≈ 实测 0.087 L/bar)。</p></div><div class="card"><div class="k">106 号 · 轮毂顺桨主源</div><h3>6 × 30 L / 125 bar</h3><p>无连续 SCADA 通道,经长管 + 旋转接头 + 118 单向阀,对蓄能循环仅弱耦合 (系数 0.095)。有自检容量检查可查;最近记录 140 bar @20 ℃ = 正常。</p></div></div>
- <div class="grid g2" style="margin-top:16px"><div class="card"><div class="k">健康 · 26 台</div><h3>3.1 – 7.2 L</h3><p>全部机群带中位 4.4 L。独立核验:按变桨活动带标定的仿真健康点 4.9 L 落在带内,与中位差 12%,仿真结果与运行统计对照;独立性需另行核查。同期泵周期 96 s、加载 6 次/10 min、带宽 50 bar、油温 38 ℃、超压 0%。</p></div><div class="card"><div class="k">气容丧失 · 8 台</div><h3>0.52 L</h3><p>A 类中位 0.85 秒,为健康中位的 1/8.5。本质是系统总容变 C 由 0.087 塌到 0.0037 L/bar = 23 倍(剩下的只有纯管路柔度)。8# 实测同期:周期 2.6 s、加载 228 次/10 min、带宽 135、油温 51 ℃、超压占时 98.3%。</p></div></div></div></section>
- <section><div class="wrap"><div class="kicker">03 · 裁</div><h2>失效机理与鉴别依据</h2><div class="grid g3"><div class="card"><div class="k">阶跃变化的机理解释</div><h3>循环尖峰 → 铁片抬升 → 118 单向阀闭 → 轮毂 106 退出循环</h3><p>C 直接塌到纯管路 ≈0.003(对齐 8# 实测 0.0037)。一旦越过这个连锁点,指标阶跃下落,没有中间态。</p></div><div class="card"><div class="k">为什么不是漏油</div><h3>外漏只增每循环消耗,不改系统容变 C</h3><p>25# 泵输出 1.46× 而容变 C 仍在健康区 0.62 ⇒ 主导因素在消耗侧,先查漏点。但 C 已非满值,不能断言蓄能器完好,该台已补"同次测预充"。</p></div><div class="card"><div class="k">为什么不是泵磨损</div><h3>排量下降会拉长单次加载而不改频次</h3><p>实测 8# 是频次由 6 升到 228 次/10 min(38×)且单次时长反缩短,该特征不支持单独以泵磨损解释,仍需结合现场检查。</p></div></div><div class="callout" style="margin-top:16px">口径边界:反算出的 C 绝对值依赖假定排量 36.8 L/min;分型与健康带用的是实测 V_cyc,不受此影响。</div></div></section>
- <section><div class="wrap"><div class="kicker">04 · 分型</div><h2>V_cyc × Δp 二维判别:分型与处置参考</h2><div class="grid g4"><div class="card"><div class="k">右下</div><h3>换 70 号蓄能器</h3><p>压力波动范围扩大,单次进油量降低。7#、10#、8#、3#、20#、2#、35#。</p></div><div class="card"><div class="k">右上</div><h3>不换蓄能器</h3><p>压力波动范围扩大,但单次进油量保持 ⟹ 漏油或参数。25#。</p></div><div class="card"><div class="k">左上</div><h3>正常 · 30 台</h3><p>Δp 锁定 52,进油量满。</p></div><div class="card"><div class="k">左下 / 未落值</div><h3>参数侧 · 先测</h3><p>Δp 过窄属参数侧;Δp 未落值的台横坐标无处安放,未测 ≠ 正常。7#、10# 档案无 Δp,不因缺少坐标而取消现场复核。</p></div></div></div></section>
- <section><div class="wrap"><div class="kicker">05 · 改</div><h2>逐台处置建议</h2><table><tr><th>台</th><th>V_cyc (L/次) 原 → 现</th><th>Δp</th><th>判别</th><th>处置</th></tr><tr><td>7#</td><td class="n">9.61 → 1.8</td><td>—</td><td>气容丧失 · 全场衰减最快</td><td>换 70 号蓄能器</td></tr><tr><td>10#</td><td class="n">2.9 → 0.47</td><td>—</td><td>气容丧失 · 最新一起阶跃下降</td><td>换 70 号蓄能器</td></tr><tr><td>3# / 20# / 2# / 35#</td><td class="n">0.47–0.63 (组区间)</td><td>宽</td><td>气容丧失 · 档案未逐台落值</td><td>换 70 号蓄能器 (逐台落值后下单)</td></tr><tr><td>8#</td><td class="n">1.45 → 0.5</td><td>宽</td><td>气容丧失 · 频次 6 → 228 次/10 min</td><td>换 70 号蓄能器</td></tr><tr><td>21# / 28# / 19#</td><td class="n">0.98 / 1.15 / 0.52</td><td>宽</td><td>边界台</td><td>先测预充定型, 再定</td></tr><tr><td>25#</td><td class="n">4.33</td><td>宽 (泵输出 1.46×)</td><td>漏油或参数, 不是蓄能器</td><td>先现场核, 不换蓄能器</td></tr><tr><td>14# / 32#</td><td class="n">3.4–4.4 (健康带内)</td><td>窄</td><td>压力带宽问题</td><td>参数侧核</td></tr><tr><td>4#</td><td class="n">0.53 → 4.84</td><td>—</td><td>已处置 · 恢复基准待核对</td><td>验收:核对基准后同工况复核</td></tr></table><div class="callout warn" style="margin-top:14px">备件:70 号蓄能器 物资编码 A9B10051506(10 L / 180 bar 活塞式),编码取自备件系统「物资编码」字段;库存列表无导出日期,下单前必核 ERP 现存量,禁按本表采购。凡标「件号待确认」的条目,采购前联系现场核实。</div></div></section>
- <section><div class="wrap"><div class="kicker">06 · 顺桨安全</div><h2>顺桨储能与自检证据</h2><div class="grid g3"><div class="card"><div class="k">70 号失效</div><h3>SCADA 循环特征变化明显</h3><p>失电顺桨主源是轮毂 106(103 → 121 路),70 号不在此路。数据窗内 4 次全场停电全部安全顺桨、零超速。</p></div><div class="card"><div class="k">106 失氮(假设情形)</div><h3>SCADA 循环指标识别能力有限</h3><p>循环侧只有中度变化(吞吐约 2 L),与个体基线难分辨;能看见它的只有机组自检容量检查(UP03284 组,从轮毂 235 bar 起测)。后果最重:失电顺桨失去能量源。</p></div><div class="card"><div class="k">两者同时失效</div><h3>SCADA 上与单独 70 号失效不可分辨</h3><p>而实际后果是顺桨失败 ⇒ 不能仅凭 SCADA 排除液压失效。两套监测互补、同时关注。</p></div></div><div class="callout" style="margin-top:16px">将现有自检记录按月归档,用于跟踪 106 号蓄能器的容量变化。</div></div></section>
- <section><div class="wrap"><div class="kicker">07 · 量</div><h2>修后验证</h2><div class="grid g3"><div class="card"><div class="k">同工况复核</div><h3>同一指标 V_cyc,同一变桨活动带</h3><p>4# 已处置:0.53 → 4.84 L。4.84 L 低于此处所列 5.0–11.7 L 下限,与页面另一处 3.1–7.2 L 基准不一致。须核对工况与基准来源,当前不能据此确认修后恢复。</p></div><div class="card"><div class="k">阴性对照</div><h3>换蓄能器不该改变能量产出</h3><p>4# 换件在 E1 阴性对照池中(优化窗 22 天 < 28 → INSUFFICIENT,未出数),不夸大收益。</p></div><div class="card"><div class="k">记录归档</div><h3>工单 → 复核 → 台账</h3><p>每台的处置进检修任务,复核结果挂回本体;106 号自检记录进月度台账。</p></div></div><div class="chips" style="margin-top:14px"></div><p class="sub" style="margin-top:12px">依据:U6_变桨液压仿真台(SWT-4.0-130,图纸 1034384 / 1034386;参数标定自本场 38 台实测与原厂图纸,2026-08-13 现场证实)。本页数字全部来自《如东_液压系统治理清单_v1.2》,未重跑。<a href="#sim" data-nav="sim">仿真台在"仿真与回放"页可交互 →</a></p></div></section>
- </div>`,$c={class:"eyebrow"},xc={class:"panel mb",style:{display:"flex",gap:"8px","flex-wrap":"wrap"}},wc=["onClick"],kc={key:0,class:"panel"},Mc={class:"small muted"},Sc=["innerHTML"],Tc=Pt({__name:"PortalSections",setup(t){const e=[{id:"architecture",label:"系统架构",html:_c},{id:"method",label:"方法",html:gc},{id:"findings",label:"经验发现",html:bc},{id:"case_hydraulic",label:"案例·液压",html:yc}],s=At("architecture"),n=P(()=>(e.find(i=>i.id===s.value)||e[0]).html),l=P(()=>!n.value);return(i,c)=>(w(),E("section",null,[a("div",$c,u(p(o)("ps.eyebrow")),1),a("div",xc,[(w(),E(it,null,_t(e,r=>a("button",{key:r.id,class:Wt(["pill",{on:r.id===s.value}]),onClick:d=>s.value=r.id},u(r.label),11,wc)),64))]),l.value?(w(),E("div",kc,[a("p",Mc,u(p(o)("ps.missing")),1)])):(w(),E("div",{key:1,class:"ps-embed",innerHTML:n.value},null,8,Sc))]))}}),Ec={class:"eyebrow"},Cc={key:0,class:"panel mb"},Fc={class:"small muted"},Ac={key:1,class:"panel mb"},Oc={class:"small muted"},pn="/web/portal/",Ui=Pt({__name:"PortalView",setup(t){const e=At(null),s=At("loading"),n=At("");async function l(i){const c=await fetch(i);if(!c.ok)throw new Error(i+" "+c.status);return await c.text()}return Be(async()=>{try{let i=await l(pn+"shell.html");const c=Array.from(i.matchAll(/<!--@TEMPLATE:([^>]+?)-->/g)).map(_=>_[1]),r=await Promise.all(c.map(async _=>{try{return await l(pn+"templates/"+encodeURIComponent(_)+".html")}catch{return""}}));c.forEach((_,f)=>{i=i.replace("<!--@TEMPLATE:"+_+"-->",r[f])});try{const _=await l(pn+"governance_sources.json");i=i.replace("<!--@GOVERNANCE_SOURCES-->",'<script type="application/json" id="__governance_sources">'+_.replace(/</g,"\\u003c")+"<\/script>")}catch{}i=i.replace(/href="[^"]*\/detail\/v2[^"]*"/g,'href="#workbench"'),i=i.replace(/href="[^"]*\/v2[^"]*"/g,'href="#workbench"'),n.value=o("pv.assembled",{n:c.length});const d=new Blob([i],{type:"text/html;charset=utf-8"});e.value&&(e.value.src=URL.createObjectURL(d)),s.value="ready"}catch(i){n.value=String(i&&i.message||i),s.value="error"}}),(i,c)=>(w(),E("section",null,[a("div",Ec,u(p(o)("pv.eyebrow")),1),s.value!=="ready"?(w(),E("div",Cc,[a("p",Fc,u(s.value==="loading"?p(o)("pv.loading"):n.value),1)])):(w(),E("div",Ac,[a("p",Oc,u(n.value),1)])),c[0]||(c[0]=a("a",{class:"portal-wb",href:"#workbench",title:"切换到 Vue 工作台",style:{position:"fixed",right:"14px",bottom:"14px","z-index":"9",padding:"6px 12px","border-radius":"14px",background:"var(--accent,#0b5fa5)",color:"#fff","font-size":"12px","text-decoration":"none"}},"工作台",-1)),a("iframe",{ref_key:"frame",ref:e,class:"portal-frame",title:"观澜门户",style:{width:"100%",height:"calc(100vh - 210px)",border:"0"}},null,512)]))}}),qc={危险:"bad",报警:"warn",不可判:"unk",良好:"ok",优秀:"ex"},Lc={critical:"bad",alarm:"warn",undeterminable:"unk",indeterminate:"unk","not evaluable":"unk",good:"ok",excellent:"ex",warn:"warn",bad:"bad",ok:"ok",unk:"unk",ex:"ex"},Ps=t=>qc[String(t)]||Lc[String(t)],Tl={证据:"evidence",机制:"mechanism",判级:"rating",排期:"schedule",动作:"action",验收:"acceptance"},Sn=t=>"st."+(t==="ex"?"excellent":t),Ot=t=>String(t).replace("WTG","").replace(/^0/,"")+"#",kt=(t,e=0)=>{if(t==null||typeof t=="number"&&isNaN(t))return"—";const s=Number(t);return isNaN(s)?"—":s.toLocaleString("zh-CN",{maximumFractionDigits:e,minimumFractionDigits:e})},El=t=>{const e=Ps(t);return e?o(Sn(e)):String(t??"")},jc=["振动","温度","润滑","油液","报警","工单"];function Cl(t){const e=jc.map(n=>Ps((t?.[n]||{}).ostate)).filter(Boolean);if(!e.length)return"unk";if(e.includes("bad"))return"bad";if(e.includes("warn"))return"warn";const s=e.filter(n=>n!=="unk");return s.length?s.includes("ok")?"ok":"ex":"unk"}const Fl={bad:"critical",warn:"warning",unk:"unknown",ok:"good",ex:"excellent"},ke=t=>String(t??""),Un=["叶片与叶根","变桨","偏航","齿轮箱","发电机","主轴承","变流器","塔架与基础","主控与传感网"],Hs={叶片与叶根:"blade",变桨:"pitch",偏航:"yaw",齿轮箱:"gearbox",发电机:"generator",主轴承:"main_bearing",变流器:"converter",塔架与基础:"tower",主控与传感网:"control",主轴:"main_bearing",其他:"other"},Ki=(()=>{const t={};for(const e of Un)t[Hs[e]]=e;for(const[e,s]of Object.entries(Hs))s in t||(t[s]=e);return t})(),Rs=t=>Hs[String(t)]||String(t),Al=t=>Ki[String(t)]||String(t),ye=t=>{const e=Hs[String(t)]||String(t);return Ki[e]?o("sys."+e):String(t??"")},vs=t=>ye(t),Dc={key:0},Pc={class:"small"},Hc={href:"#tab=component","data-back":"1"},Rc={class:"panel mb"},Ic={style:{display:"flex",height:"12px","border-radius":"4px",overflow:"hidden",margin:"8px 0 4px"}},Nc={class:"small muted"},Bc={class:"tblwrap"},Wc={style:{width:"74px"}},Uc={class:"r",style:{width:"96px"}},Kc=["href"],Vc={class:"small"},Gc={class:"r"},zc=["href"],Yc={key:0,class:"panel mb"},Jc={style:{cursor:"pointer","font-weight":"600"}},Xc={class:"tblwrap"},Zc={style:{"margin-top":"10px"}},Qc={style:{width:"74px"}},td={class:"small"},ed={key:1,class:"panel"},sd={class:"small"},nd={key:0},ld={class:"panel mb small",style:{"border-left":"3px solid var(--accent)"}},id={class:"eyebrow"},ad={class:"panel mb"},od={style:{display:"grid","grid-template-columns":"repeat(auto-fit,minmax(170px,1fr))",gap:"10px"}},rd=["data-sys"],cd={class:"t"},dd={class:"bar"},ud={class:"small muted"},pd=["innerHTML"],hd={class:"small muted",style:{"margin-top":"8px"}},fd={key:1},md={class:"panel mb",style:{"border-left":"3px solid var(--critical)"}},vd={class:"small"},_d={key:2},gd={class:"eyebrow"},bd={class:"panel mb"},yd={class:"small muted",style:{"font-weight":"400"}},$d={class:"small muted",style:{margin:"-2px 0 8px"}},xd={class:"tblwrap"},wd={class:"r"},kd={class:"r"},Md={class:"r"},Sd={class:"r"},Td={key:0},Ed={class:"badge"},Cd={class:"num small"},Fd={class:"r"},Ad={class:"r"},Od={class:"r"},qd={class:"r"},Ld={class:"small"},jd={class:"small muted"},Dd={key:3},Pd={class:"panel mb"},Hd={class:"small"},Rd={href:"#tab=vibration"},Id={class:"eyebrow"},Nd={class:"panel mb"},Bd={class:"tblwrap"},Wd={class:"r"},Ud=["href"],Kd={class:"r"},Vd=["innerHTML"],Gd={class:"small"},zd=Pt({__name:"Component",props:{d:{},sys:{}},setup(t){const e=t,s=P(()=>e.d?.sysdist||{}),n=P(()=>e.d?.rel&&!e.d.rel.err?e.d.rel:null),l=P(()=>e.sys?Al(e.sys):null),i=P(()=>Un.filter(f=>s.value[f]).map(f=>{const m=s.value[f],v=m.报警||0,k=m.不可判||0,O=Object.values(m).reduce((Q,Y)=>Q+Y,0)||1,K=v>=8?"var(--critical)":v>=3?"var(--warning)":v?"var(--accent)":"var(--good)";return{s:f,dist:m,a:v,u:k,N:O,col:K}}));function c(f){return(f.syss||[]).map(m=>`<a href="/problem/${f.t}/${encodeURIComponent(Al(m)||m)}">${ye(m)}</a>`).join(" · ")}const r=P(()=>{const m=(((e.d?.control||{}).energy||{}).items||[]).filter(v=>v.k==="停机").map(v=>v.h)[0];return m??null}),d=P(()=>{const f=n.value?.表||[],m=Math.max(1,...f.map(v=>v.停机时长h));return f.map(v=>({r:v,maxH:m,sev:v.部件==="无记录停机"?"var(--unknown)":v.外部?"var(--accent)":v.占停机>=.06?"var(--critical)":v.占停机>=.03?"var(--warning)":"var(--good)"}))}),_=P(()=>{const f=l.value;if(!f)return null;const m=(e.d?.systems||{})[f]||[],v=s.value[f]||{},k=(e.d?.systems||{})[f+"·良好"]||[],O=Q=>v[Q]||0,K=Object.values(v).reduce((Q,Y)=>Q+Y,0)||1;return{s:f,N:K,gd:k,cnt:O,al:m.filter(Q=>Q.st==="报警"),un:m.filter(Q=>Q.st==="不可判"),dist:v}});return(f,m)=>_.value?(w(),E("section",Dc,[a("p",Pc,[a("a",Hc,u(p(o)("ui.back_to",{tab:p(o)("tab.component")})),1)]),a("div",Rc,[a("h3",null,u(p(o)("cmp.detail_head",{sys:p(ye)(_.value.s),n:_.value.N})),1),a("div",Ic,[(w(),E(it,null,_t([["报警","critical"],["不可判","unknown"],["良好","good"],["优秀","excellent"]],([v,k])=>a("i",{key:v,style:jt(`width:${(_.value.cnt(v)/_.value.N*100).toFixed(1)}%;background:var(--${k})`)},null,4)),64))]),a("div",Nc,u(p(o)("cmp.counts",{a:_.value.cnt("报警"),u:_.value.cnt("不可判"),g:_.value.cnt("良好"),e:_.value.cnt("优秀")})),1)]),(w(!0),E(it,null,_t([_.value.al,_.value.un],(v,k)=>ps((w(),E("div",{key:k,class:"panel mb"},[a("h3",null,u(k===0?p(o)("cmp.alarm_units"):p(o)("cmp.unk_units"))+" "+u(p(o)("cmp.n_units",{n:v.length})),1),a("div",Bc,[a("table",null,[a("tr",null,[a("th",Wc,u(p(o)("ui.unit")),1),a("th",null,u(p(o)("cmp.why")),1),a("th",Uc,u(p(o)("cmp.detail")),1)]),(w(!0),E(it,null,_t(v,O=>(w(),E("tr",{key:O.t},[a("td",null,[a("a",{href:`/turbine/${O.t}`},[a("b",null,u(p(Ot)(O.t)),1)],8,Kc)]),a("td",Vc,u(O.why),1),a("td",Gc,[a("a",{class:"small",href:`/problem/${O.t}/${encodeURIComponent(_.value.s)}`},u(p(o)("cmp.detail_link")),9,zc)])]))),128))])])])),[[bl,v.length]])),128)),_.value.gd.length?(w(),E("details",Yc,[a("summary",Jc,u(p(o)("cmp.good_units",{n:_.value.gd.length})),1),a("div",Xc,[a("table",Zc,[a("tr",null,[a("th",Qc,u(p(o)("ui.unit")),1),a("th",null,u(p(o)("cmp.why")),1)]),(w(!0),E(it,null,_t(_.value.gd,v=>(w(),E("tr",{key:v.t},[a("td",null,[a("b",null,u(p(Ot)(v.t)),1)]),a("td",td,u(v.why),1)]))),128))])])])):yt("",!0),!_.value.al.length&&!_.value.un.length&&!_.value.gd.length?(w(),E("div",ed,[a("p",sd,u(p(o)("cmp.none")),1)])):yt("",!0)])):(w(),E(it,{key:1},[t.d.sysmx_pending?(w(),E("section",nd,[a("div",ld,[a("b",null,u(p(o)("cmp.grading_pending")),1),at(" "+u(p(o)("cmp.grading_pending_why",{span:t.d.sysmx_span||""})),1)])])):yt("",!0),a("section",null,[a("div",id,u(p(o)("cmp.by_system")),1),a("div",ad,[a("div",od,[(w(!0),E(it,null,_t(i.value,v=>(w(),E("div",{key:v.s,class:"sysc",role:"button",tabindex:"0","data-sys":p(Rs)(v.s),style:jt(`cursor:pointer;border-left:3px solid ${v.col}`)},[a("div",cd,[a("b",null,u(p(ye)(v.s)),1)]),a("div",dd,[(w(),E(it,null,_t([["报警","critical"],["不可判","unknown"],["良好","good"],["优秀","excellent"]],([k,O])=>ps(a("i",{key:k,style:jt(`width:${(v.dist[k]/v.N*100).toFixed(1)}%;background:var(--${O})`)},null,4),[[bl,v.dist[k]]])),64))]),a("div",ud,[a("span",{innerHTML:p(o)("cmp.alarm_n",{a:`<b style="color:${v.col}">${v.a}</b>`})},null,8,pd),at(u((v.u?p(o)("cmp.unk_n",{u:v.u}):"")+p(o)("cmp.fleet_n",{n:v.N})),1)])],12,rd))),128))]),a("p",hd,u(p(o)("cmp.cards_note")),1)])]),t.d.rel&&t.d.rel.err?(w(),E("section",fd,[a("div",md,[a("p",vd,u(p(o)("flt.block_err",{k:"rel",e:t.d.rel.err})),1)])])):n.value?(w(),E("section",_d,[a("div",gd,u(p(o)("cmp.rel_eyebrow",{win:n.value.窗})),1),a("div",bd,[a("h3",null,[at(u(p(o)("cmp.rel_head"))+" ",1),a("span",yd,u(p(o)("cmp.rel_meta",{t:n.value.总停机h,a:n.value.设备类停机h,b:n.value.外部类停机h})),1)]),a("p",$d,u(p(o)("cmp.rel_note",{h:r.value==null?"":" "+p(kt)(r.value)+"h"})),1),a("div",xd,[a("table",null,[a("tr",null,[a("th",null,u(p(o)("cmp.rel_part")),1),a("th",null,u(p(o)("cmp.rel_h")),1),a("th",wd,u(p(o)("cmp.rel_ev")),1),a("th",kd,u(p(o)("cmp.rel_mtbo")),1),a("th",Md,u(p(o)("cmp.rel_mdt")),1),a("th",Sd,u(p(o)("cmp.rel_units")),1),a("th",null,u(p(o)("cmp.rel_fm")),1)]),(w(!0),E(it,null,_t(d.value,v=>(w(),E("tr",{key:v.r.部件},[a("td",null,[a("b",null,u(p(vs)(v.r.部件)),1),v.r.外部?(w(),E("span",Td,[m[0]||(m[0]=at(u(" "),-1)),a("span",Ed,u(p(o)("cmp.external")),1)])):yt("",!0)]),a("td",null,[a("i",{class:"bar",style:jt(`width:${Math.round(v.r.停机时长h/v.maxH*72)}px;background:${v.sev}`)},null,4),a("span",Cd,u(v.r.停机时长h)+"h · "+u((v.r.占停机*100).toFixed(1))+"%",1)]),a("td",Fd,u(v.r.事件数),1),a("td",Ad,u(v.r.外部?"—":v.r.MTBF_h||"—"),1),a("td",Od,u(v.r.MDT_h),1),a("td",qd,u(v.r.影响台数),1),a("td",Ld,u(v.r.典型失效模式||"—"),1)]))),128))])]),a("p",jd,u(n.value.口径),1)])])):yt("",!0),t.d.fus&&!t.d.fus.err?(w(),E("section",Dd,[a("div",Pd,[a("p",Hd,[at(u(p(o)("cmp.fusion_moved"))+" ",1),a("a",Rd,[a("b",null,u(p(o)("tab.vibration")),1)]),at(" "+u(p(o)("cmp.fusion_n",{n:(t.d.fus.表||[]).length})),1)])])])):yt("",!0),a("section",null,[a("div",Id,u(p(o)("cmp.cross_eyebrow")),1),a("div",Nd,[a("h3",null,u(p(o)("cmp.watch_head",{n:(t.d.watch||[]).length})),1),a("div",Bd,[a("table",null,[a("tr",null,[a("th",null,u(p(o)("ui.unit")),1),a("th",Wd,u(p(o)("cmp.n_sys")),1),a("th",null,u(p(o)("cmp.hit_sys")),1),a("th",null,u(p(o)("cmp.basis")),1)]),(w(!0),E(it,null,_t(t.d.watch||[],v=>(w(),E("tr",{key:v.t},[a("td",null,[a("a",{href:`/turbine/${v.t}`},[a("b",null,u(p(Ot)(v.t)),1)],8,Ud)]),a("td",Kd,u(v.n),1),a("td",{class:"small",innerHTML:c(v)},null,8,Vd),a("td",Gd,u(v.why),1)]))),128))])])])])],64))}}),Yd="modulepreload",Jd=function(t,e){return new URL(t,e).href},Ol={},Xd=function(e,s,n){let l=Promise.resolve();if(s&&s.length>0){let c=function(f){return Promise.all(f.map(m=>Promise.resolve(m).then(v=>({status:"fulfilled",value:v}),v=>({status:"rejected",reason:v}))))};const r=document.getElementsByTagName("link"),d=document.querySelector("meta[property=csp-nonce]"),_=d?.nonce||d?.getAttribute("nonce");l=c(s.map(f=>{if(f=Jd(f,n),f in Ol)return;Ol[f]=!0;const m=f.endsWith(".css"),v=m?'[rel="stylesheet"]':"";if(!!n)for(let K=r.length-1;K>=0;K--){const Q=r[K];if(Q.href===f&&(!m||Q.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${f}"]${v}`))return;const O=document.createElement("link");if(O.rel=m?"stylesheet":Yd,m||(O.as="script"),O.crossOrigin="",O.href=f,_&&O.setAttribute("nonce",_),document.head.appendChild(O),m)return new Promise((K,Q)=>{O.addEventListener("load",K),O.addEventListener("error",()=>Q(new Error(`Unable to preload CSS for ${f}`)))})}))}function i(c){const r=new Event("vite:preloadError",{cancelable:!0});if(r.payload=c,window.dispatchEvent(r),!r.defaultPrevented)throw c}return l.then(c=>{for(const r of c||[])r.status==="rejected"&&i(r.reason);return e().catch(i)})},Zd=["data-chart"],Qd=Pt({__name:"EChart",props:{option:{},height:{}},setup(t){const e=t,s=At(null);let n=null;async function l(){if(!s.value)return;const i=await Xd(()=>import("./index-BAPDkhe3.js"),[],import.meta.url);n||(n=i.init(s.value,void 0,{renderer:"canvas"})),n.setOption(e.option,!0)}return Be(l),is(()=>e.option,l,{deep:!0}),vi(()=>{n&&(n.dispose(),n=null)}),(i,c)=>(w(),E("div",{class:"echart","data-chart":JSON.stringify(t.option),style:jt(`height:${t.height||"260px"}`),ref_key:"el",ref:s},null,12,Zd))}}),Vi=(t,e)=>{const s=t.__vccOpts||t;for(const[n,l]of e)s[n]=l;return s},Ke=Vi(Qd,[["__scopeId","data-v-999bee15"]]),tu={key:0},eu={class:"panel"},su={class:"small muted"},nu={key:1},lu={class:"kpis",style:{"margin-bottom":"12px"}},iu={key:0},au={class:"grid2"},ou={class:"panel span2"},ru={class:"small muted",style:{"font-weight":"400"}},cu={class:"panel"},du={style:{"font-weight":"600"}},uu={class:"num"},pu={class:"small muted"},hu={class:"small muted",style:{"margin-top":"6px"}},fu={class:"panel"},mu={class:"small muted",style:{"font-weight":"400"}},vu={class:"tblwrap"},_u={class:"r",style:{width:"90px"}},gu={class:"small"},bu={class:"num small"},yu={class:"r small"},$u={class:"small muted",style:{"margin-top":"6px"}},xu=Pt({__name:"Energy",props:{d:{}},setup(t){const e=t,s=P(()=>(e.d?.control||{}).energy),n=P(()=>(e.d?.control||{}).states||[]),l={"限电·绑定":"loss.curtail_bound","限电命令·未绑定":"loss.curtail_unbound","停机(调度令)":"loss.dispatch",停机:"loss.stop",正常发电:"loss.normal",低风待机:"loss.lowwind"},i=v=>l[v]?o(l[v]):v,c=P(()=>{const v=s.value||{};return[{v:kt(v.theo),u:"MWh",l:o("en.kpi_theo"),k:""},{v:kt(v.act),u:"MWh",l:o("en.kpi_act",{h:kt(v.eflh)}),k:"ok"},{v:kt(v.loss_pct,1),u:"%",l:o("en.kpi_loss",{v:kt(v.loss)}),k:v.loss_pct>=10?"warn":""},{v:v.cap_ok?o("en.cap_pass"):o("en.cap_fail"),u:"",l:o("en.cap_note",{op:v.cap_ok?"<":"≥",cap:kt(v.cap)}),k:v.cap_ok?"ok":"bad"}]}),r=v=>v.indexOf("限电")>=0||v.indexOf("调度")>=0?0:v==="停机"?1:2,d=P(()=>{const v=[0,0,0];for(const k of s.value?.items||[])v[r(k.k)]+=k.loss;return v}),_=P(()=>{const v=s.value||{},k=(v.items||[]).filter(Y=>Y.loss>0).map(Y=>({name:Y.k,value:Math.round(Y.loss)})),O=d.value,K=O.reduce((Y,C)=>Y+C,0)||1,Q=O.map(Y=>Math.round(Y/K*100)).filter((Y,C)=>O[C]/K*500>46);return{title:{text:o("en.balance"),left:"center",textStyle:{fontSize:13}},tooltip:{trigger:"axis"},grid:{left:70,right:20,top:44,bottom:40},xAxis:{type:"category",data:k.map(Y=>Y.name)},yAxis:{type:"value",name:"MWh"},series:[{type:"bar",data:k.map(Y=>Y.value),itemStyle:{color:"#0b5fa5"}}],__data__:[Math.round(v.theo),Math.round(v.act),Math.round(k.reduce((Y,C)=>Y+C.value,0)),...k.map(Y=>Y.value),...Q]}}),f=P(()=>{const v=d.value;return{grid:{left:90,right:24,top:20,bottom:30},xAxis:{type:"value",name:"MWh"},yAxis:{type:"category",data:[o("ch.blame.n1"),o("ch.blame.n2"),o("ch.blame.n3")]},series:[{type:"bar",data:v.map(k=>Math.round(k)),itemStyle:{color:"#2f7dbf"}}],__data__:[]}}),m=P(()=>Math.max(1,...n.value.map(v=>v.pct)));return(v,k)=>s.value?(w(),E("section",nu,[a("div",lu,[(w(!0),E(it,null,_t(c.value,(O,K)=>(w(),E("div",{key:K,class:Wt(["kpi",O.k])},[a("b",null,[at(u(O.v),1),O.u?(w(),E("small",iu,u(O.u),1)):yt("",!0)]),a("span",null,u(O.l),1)],2))),128))]),a("div",au,[a("div",ou,[a("h3",null,[at(u(p(o)("en.balance"))+" ",1),a("span",ru,u(p(o)("en.win",{win:p(ke)(t.d.win)})),1)]),Ft(Ke,{option:_.value,height:"280px"},null,8,["option"])]),a("div",cu,[a("h3",null,u(p(o)("en.blame")),1),Ft(Ke,{option:f.value,height:"240px"},null,8,["option"]),(w(!0),E(it,null,_t(d.value,(O,K)=>(w(),E("div",{key:K,style:{display:"flex","align-items":"baseline",gap:"7px","margin-top":"5px"}},[a("i",{style:jt(`flex:none;width:9px;height:9px;border-radius:2px;background:${["var(--accent)","var(--critical)","var(--muted)"][K]};opacity:.55`)},null,4),a("span",du,u(p(o)(["ch.blame.n1","ch.blame.n2","ch.blame.n3"][K])),1),a("span",uu,u(p(kt)(Math.round(O)))+" MWh",1),a("span",pu,u(p(o)(["ch.blame.d1","ch.blame.d2","ch.blame.d3"][K])),1)]))),128)),a("p",hu,u(p(o)("en.blame_note",{n:p(kt)(Math.round(((s.value.items||[]).find(O=>O.k==="停机")||{}).loss||0))})),1)]),a("div",fu,[a("h3",null,[at(u(p(o)("en.states"))+" ",1),a("span",mu,u(p(o)("en.win",{win:p(ke)(t.d.win)})),1)]),a("div",vu,[a("table",null,[a("tr",null,[a("th",null,u(p(o)("en.state")),1),a("th",null,u(p(o)("en.share")),1),a("th",_u,u(p(o)("en.loss_mwh")),1)]),(w(!0),E(it,null,_t(n.value,O=>(w(),E("tr",{key:O.k},[a("td",gu,u(i(O.k)),1),a("td",null,[a("i",{class:"bar",style:jt(`width:${Math.round(O.pct/m.value*84)}px;background:${O.k.indexOf("停机")>=0&&O.k.indexOf("调度")<0?"var(--critical)":"var(--accent)"}`)},null,4),a("span",bu,u(O.pct)+"% · "+u(p(kt)(Math.round(O.h)))+"h",1)]),a("td",yu,u(p(kt)(Math.round(O.loss))),1)]))),128))])]),a("p",$u,[at(u(t.d.control.anchors||""),1),k[0]||(k[0]=a("br",null,null,-1)),at(u(p(o)("en.states_note")),1)])])])])):(w(),E("section",tu,[a("div",eu,[a("p",su,u(p(o)("ui.empty")),1)])]))}}),wu=["innerHTML"],Se=Pt({__name:"LegacyChart",props:{html:{}},setup(t){return(e,s)=>(w(),E("div",{class:"legacy-chart",innerHTML:t.html},null,8,wu))}}),ku=typeof window<"u"?window:globalThis;ku.__charts=function(t){const{t:e,fmt:s,esc:n,dv:l,EN:i}=t,c=/[㐀-鿿]/,r=T=>i&&c.test(String(T??"")),d=T=>(T=t.displayText?t.displayText(T):T==null?"":String(T),r(T)&&t.verb&&t.verb(),T),_=T=>{const G=d(T);return`<title${r(G)?' class="verbatim"':""}>${n(G)}</title>`},f=(T,G,R)=>`<svg class="dt" viewBox="0 0 ${T} ${G}" style="width:${T}px;max-width:100%;height:auto" role="img">${R}</svg>`,m=(T,G,R,q={})=>`<text x="${(+T).toFixed(1)}" y="${(+G).toFixed(1)}" font-size="${q.fs||9}" fill="${q.fill||"var(--muted)"}"${q.anchor?` text-anchor="${q.anchor}"`:""}${q.op?` opacity="${q.op}"`:""}${q.w?` font-weight="${q.w}"`:""}${q.tr?` transform="${q.tr}"`:""}${q.cls?` class="${q.cls}"`:""}>${R}</text>`,v=(T,G,R,q={})=>{const V=d(R);return m(T,G,n(V),r(V)?Object.assign({},q,{cls:"verbatim"}):q)},k={"限电·绑定":"loss.curtail_bound","限电命令·未绑定":"loss.curtail_unbound","停机(调度令)":"loss.dispatch",停机:"loss.stop",正常发电:"loss.normal",低风待机:"loss.lowwind"},O=T=>k[T]?e(k[T]):d(T);function K(T){const G=(T||[]).filter(x=>x&&x.n>0&&x.med>0);if(G.length<3)return`<p class="small muted">${e("ch.quad.few")}</p>`;const R=720,q=330,V=58,I=16,A=44,H=16,z=x=>Math.log10(x),N=G.map(x=>z(x.n)),B=G.map(x=>z(x.med)),tt=Math.min(...N)-.15,st=Math.max(...N)+.15,J=Math.min(...B)-.15,rt=Math.max(...B)+.15,ft=x=>V+(z(x)-tt)/(st-tt)*(R-V-I),lt=x=>q-A-(z(x)-J)/(rt-J)*(q-H-A),vt=G.map(x=>x.n).sort((x,$)=>x-$),mt=vt[Math.floor(vt.length/2)],nt=ft(mt),Z=lt(600),h=Math.max(...G.map(x=>x.nt)),g=G.map(x=>{const $=3+Math.sqrt(x.nt/h)*7,X=x.n>=mt&&x.med>=600,U=X?"var(--critical)":"var(--accent)";return`<circle cx="${ft(x.n).toFixed(1)}" cy="${lt(x.med).toFixed(1)}" r="${$.toFixed(1)}" fill="${U}" fill-opacity=".5" stroke="${U}" stroke-width="1">${_(`${x.code} ${d(x.k)}
- `+e("ch.quad.tip",{n:x.n,med:x.med,h:x.h,nt:x.nt}))}</circle>`}).join(""),b=G.filter(x=>x.n>=mt||x.med>=600).slice(0,8).map(x=>m(ft(x.n)+9,lt(x.med)+3,n(x.code))).join(""),y=(x,$,X,U)=>m(x,$,X,{fs:10,op:.85})+m(x,$+12,U,{fs:8.5,op:.6}),S=x=>x>=3600?x/3600+"h":x>=60?x/60+"min":x+"s",F=[10,60,600,3600,36e3].filter(x=>z(x)>=J&&z(x)<=rt).map(x=>`<line x1="${V}" y1="${lt(x).toFixed(1)}" x2="${R-I}" y2="${lt(x).toFixed(1)}" stroke="var(--line)" stroke-opacity=".4"/>`+m(V-6,lt(x)+3,S(x),{anchor:"end"})).join(""),L=[1,10,100,1e3,1e4].filter(x=>z(x)>=tt&&z(x)<=st).map(x=>m(ft(x),q-A+14,x,{anchor:"middle"})).join(""),j=H+(q-A-H)/2;return f(R,q,`${F}${L}
- <line x1="${nt.toFixed(1)}" y1="${H}" x2="${nt.toFixed(1)}" y2="${q-A}" stroke="var(--muted)" stroke-dasharray="3 3" stroke-opacity=".5"/>
- <line x1="${V}" y1="${Z.toFixed(1)}" x2="${R-I}" y2="${Z.toFixed(1)}" stroke="var(--muted)" stroke-dasharray="3 3" stroke-opacity=".5"/>
- ${y(V+6,H+12,e("ch.quad.q1"),e("ch.quad.q1s"))}${y(R-I-130,H+12,e("ch.quad.q2"),e("ch.quad.q2s"))}
- ${y(V+6,q-A-18,e("ch.quad.q3"),e("ch.quad.q3s"))}${y(R-I-130,q-A-18,e("ch.quad.q4"),e("ch.quad.q4s"))}
- ${g}${b}
- ${m(V+(R-I-V)/2,q-6,e("ch.quad.xlab"),{fs:9.5,anchor:"middle"})}
- ${m(14,j,e("ch.quad.ylab"),{fs:9.5,anchor:"middle",tr:`rotate(-90 14 ${j.toFixed(1)})`})}`)}function Q(T){const G=T.months||[],R=T.vals||[],q=T.cov||G.map(()=>1),V=T.per_day||[],I=720,A=250,H=48,z=14,N=52,B=18,tt=G.length||1,st=Math.max(...V.filter(mt=>mt!=null),1),J=(I-H-z)/tt;let rt="",ft="";G.forEach((mt,nt)=>{const Z=V[nt],h=q[nt]<.5;if(Z==null)return;const g=Z/st*(A-B-N),b=H+nt*J+J*.16,y=A-N-g,S=b+J*.34;rt+=`<rect x="${b.toFixed(1)}" y="${y.toFixed(1)}" width="${(J*.68).toFixed(1)}" height="${g.toFixed(1)}" rx="2" fill="${h?"var(--muted)":"var(--accent)"}" fill-opacity="${h?.32:.8}" stroke="${h?"var(--warning)":"none"}" stroke-dasharray="${h?"3 2":""}"><title>${e("ch.rate.tip",{m:mt,v:Z,n:R[nt],cov:(q[nt]*100).toFixed(0)})}</title></rect>`,ft+=m(S,y-4,Z,{anchor:"middle"})+m(S,A-N+13,e("ch.rate.month",{m:mt.slice(5)}),{anchor:"middle"})+m(S,A-N+25,e("ch.rate.n",{n:R[nt]}),{fs:8,op:.65,anchor:"middle"})+(h?m(S,A-N+37,e("ch.rate.days",{d:Math.round(q[nt]*30)}),{fs:8,fill:"var(--warning)",anchor:"middle"}):"")});const lt=[0,.5,1].map(mt=>m(H-6,A-N-mt*(A-B-N)+3,Math.round(st*mt),{anchor:"end"})).join(""),vt=B+(A-N-B)/2;return f(I,A,`<line x1="${H}" y1="${A-N}" x2="${I-z}" y2="${A-N}" stroke="var(--line)"/><line x1="${H}" y1="${B}" x2="${H}" y2="${A-N}" stroke="var(--line)"/>
- ${rt}${ft}${lt}${m(14,vt,e("ch.rate.ylab"),{fs:9.5,anchor:"middle",tr:`rotate(-90 14 ${vt.toFixed(1)})`})}`)}function Y(T){if(!T||!T.theo)return"";const G=720,R=300,q=8,V=8,I=30,A=64,H=(T.items||[]).filter(lt=>lt.loss>0),z=H.length+2,N=(G-q-V)/z,B=(R-I-A)/T.theo;let tt=T.theo,st="",J=0;const rt=(lt,vt,mt,nt,Z)=>`<rect x="${(q+lt*N+N*.14).toFixed(1)}" y="${vt.toFixed(1)}" width="${(N*.72).toFixed(1)}" height="${Math.max(mt,1.2).toFixed(1)}" rx="2" fill="${nt}" fill-opacity="${Z}"/>`,ft=(lt,vt,mt,nt,Z)=>m(q+lt*N+N*.5,vt-6,nt,{fs:10,fill:Z||"var(--ink)",anchor:"middle",w:600})+m(q+lt*N+N*.5,R-A+14,mt,{fs:8.5,anchor:"middle"});return st+=rt(0,R-A-T.theo*B,T.theo*B,"var(--accent)",.45)+ft(0,R-A-T.theo*B,e("ch.wf.theo"),s(T.theo)),H.forEach(lt=>{J++;const vt=R-A-tt*B,mt=lt.loss*B;tt-=lt.loss;const nt=O(lt.k);st+=rt(J,vt,mt,"var(--critical)",.55)+`<line x1="${(q+(J-1)*N+N*.86).toFixed(1)}" y1="${vt.toFixed(1)}" x2="${(q+J*N+N*.14).toFixed(1)}" y2="${vt.toFixed(1)}" stroke="var(--muted)" stroke-dasharray="2 2" stroke-opacity=".6"/>`+ft(J,vt,n(nt.length>12?nt.slice(0,11)+"…":nt),"−"+s(lt.loss),"var(--critical)")+_(e("ch.wf.tip",{nm:nt,loss:s(lt.loss),pct:(lt.loss/T.theo*100).toFixed(1),h:s(lt.h)}))}),st+=rt(z-1,R-A-T.act*B,T.act*B,"var(--good)",.6)+ft(z-1,R-A-T.act*B,e("ch.wf.act"),s(T.act),"var(--good)"),f(G,R,`<line x1="${q}" y1="${R-A}" x2="${G-V}" y2="${R-A}" stroke="var(--line)"/>${m(q,14,"MWh",{fs:9.5})}${st}`)}function C(T,G){const R=(T||[]).filter($=>$.MTBF_h&&$.MDT_h);if(R.length<3)return`<p class="small muted">${e("ch.ram.few")}</p>`;const q=720,V=340,I=56,A=112,H=48,z=16,N=$=>Math.log10($),B=R.map($=>N($.MTBF_h)),tt=R.map($=>$.MDT_h),st=Math.min(...B)-.08,J=Math.max(...B)+.08,rt=0,ft=Math.max(...tt)*1.12,lt=$=>I+(N($)-st)/(J-st)*(q-I-A),vt=$=>V-H-($-rt)/(ft-rt)*(V-z-H),mt=$=>{const X=$.slice().sort((U,et)=>U-et);return X[Math.floor(X.length/2)]},nt=mt(R.map($=>$.MTBF_h)),Z=mt(tt),h=lt(nt),g=vt(Z),b=Math.max(...R.map($=>$.停机时长h)),y=$=>d(G?G($.部件):$.部件),S=R.map($=>{const X=4+Math.sqrt($.停机时长h/b)*13,U=$.外部,et=$.MTBF_h<nt&&$.MDT_h>=Z,ot=U?"var(--muted)":et?"var(--critical)":"var(--accent)";return`<circle cx="${lt($.MTBF_h).toFixed(1)}" cy="${vt($.MDT_h).toFixed(1)}" r="${X.toFixed(1)}" fill="${ot}" fill-opacity="${U?.3:.42}" stroke="${ot}" stroke-width="1.2" stroke-dasharray="${U?"3 2":""}">${_(e("ch.ram.tip",{p:y($),mtbf:$.MTBF_h,mdt:$.MDT_h,h:$.停机时长h,n:$.事件数,u:$.影响台数})+(U?e("ch.ram.tip_ext"):""))}</circle>`+v(lt($.MTBF_h)+X+4,vt($.MDT_h)+3.5,d(y($)).slice(0,i?14:7),{fs:9.5,fill:U?"var(--muted)":"currentColor"})}).join(""),F=($,X,U,et,ot)=>m($,X,et,{fs:10,anchor:U,op:.9})+m($,X+12,ot,{fs:8.5,anchor:U,op:.62}),L=[1e3,2e3,5e3,1e4,2e4].filter($=>N($)>=st&&N($)<=J).map($=>`<line x1="${lt($).toFixed(1)}" y1="${z}" x2="${lt($).toFixed(1)}" y2="${V-H}" stroke="var(--line)" stroke-opacity=".3"/>`+m(lt($),V-H+14,$>=1e3?$/1e3+"k":$,{anchor:"middle"})).join(""),j=[0,5,10,15,20].filter($=>$<=ft).map($=>m(I-6,vt($)+3,$,{anchor:"end"})).join(""),x=z+(V-H-z)/2;return f(q,V,`${L}${j}<line x1="${I}" y1="${V-H}" x2="${q-A}" y2="${V-H}" stroke="var(--line)"/><line x1="${I}" y1="${z}" x2="${I}" y2="${V-H}" stroke="var(--line)"/>
- <line x1="${h.toFixed(1)}" y1="${z}" x2="${h.toFixed(1)}" y2="${V-H}" stroke="var(--muted)" stroke-dasharray="3 3" stroke-opacity=".45"/>
- <line x1="${I}" y1="${g.toFixed(1)}" x2="${q-A}" y2="${g.toFixed(1)}" stroke="var(--muted)" stroke-dasharray="3 3" stroke-opacity=".45"/>
- ${F(I+6,z+12,"start",e("ch.ram.q1"),e("ch.ram.q1s"))}${F(q-A-6,z+12,"end",e("ch.ram.q2"),e("ch.ram.q2s"))}
- ${F(I+6,V-H-16,"start",e("ch.ram.q3"),e("ch.ram.q3s"))}${F(q-A-6,V-H-16,"end",e("ch.ram.q4"),e("ch.ram.q4s"))}
- ${S}${m(I+(q-A-I)/2,V-8,e("ch.ram.xlab"),{fs:9.5,anchor:"middle"})}
- ${m(13,x,e("ch.ram.ylab"),{fs:9.5,anchor:"middle",tr:`rotate(-90 13 ${x.toFixed(1)})`})}
- <circle cx="${q-A+16}" cy="${z+40}" r="5" fill="var(--accent)" fill-opacity=".42" stroke="var(--accent)"/>${m(q-A+26,z+44,e("ch.ram.equip"))}
- <circle cx="${q-A+16}" cy="${z+58}" r="5" fill="var(--muted)" fill-opacity=".3" stroke="var(--muted)" stroke-dasharray="3 2"/>${m(q-A+26,z+62,e("ch.ram.ext"))}
- ${m(q-A+6,z+84,e("ch.ram.area"),{fs:8.5})}${m(q-A+6,z+98,e("ch.ram.median"),{fs:8.5})}`)}function D(T,G){const R=(T||[]).find(st=>st.部件==="无记录停机"),q=R?R.停机时长h:0,V=(T||[]).filter(st=>st.部件==="未归类").reduce((st,J)=>st+J.停机时长h,0),I=G-q-V,A=720,H=54,z=(st,J,rt,ft)=>`<rect x="${st.toFixed(1)}" y="14" width="${Math.max(J,1).toFixed(1)}" height="22" rx="3" fill="${rt}" fill-opacity="${ft}"/>`,N=I/G*A,B=V/G*A,tt=q/G*A;return f(A,H,`${z(0,N,"var(--accent)",.55)}${z(N,B,"var(--warning)",.5)}${z(N+B,tt,"var(--critical)",.5)}
- ${m(4,10,e("ch.attrib.ok",{h:Math.round(I),p:(I/G*100).toFixed(0)}))}
- ${m(N+B+tt-2,10,e("ch.attrib.none",{h:Math.round(q),p:(q/G*100).toFixed(0)}),{fill:"var(--critical)",anchor:"end"})}
- ${m(N+B/2,50,e("ch.attrib.uncls",{h:Math.round(V)}),{fill:"var(--warning)",anchor:"middle"})}`)}function M(T,G,R){const q=(T||[]).filter(y=>y&&y.v>0);if(!q.length)return`<p class="small muted">${e("ch.pareto.none")}</p>`;const V=520,I=236,A=46,H=40,z=40,N=14,B=q.length,tt=q.reduce((y,S)=>y+S.v,0),st=Math.max(...q.map(y=>y.v)),J=(V-A-H)/B,rt=y=>{y=d(y);const S=String(y).match(/^([0-9]+)/);return S?S[1]:String(y).slice(0,4)};let ft=0,lt="",vt=[],mt="",nt=null;q.forEach((y,S)=>{const F=y.v/st*(I-N-z),L=A+S*J+J*.14,j=I-z-F;lt+=`<rect x="${L.toFixed(1)}" y="${j.toFixed(1)}" width="${(J*.72).toFixed(1)}" height="${F.toFixed(1)}" rx="2" fill="var(--accent)" fill-opacity="${S<3?.85:.45}">${_(`${d(y.k)}: ${s(y.v)}${G}`)}</rect>`,ft+=y.v;const x=ft/tt;nt===null&&x>=.8&&(nt=S+1);const $=A+S*J+J/2,X=N+(1-x)*(I-N-z);vt.push(`${$.toFixed(1)},${X.toFixed(1)}`),mt+=`<circle cx="${$.toFixed(1)}" cy="${X.toFixed(1)}" r="2.4" fill="var(--warning)">${_(e("ch.pareto.cumtip",{k:d(y.k),p:(x*100).toFixed(0)}))}</circle>`});const Z=N+.2*(I-N-z),h=q.map((y,S)=>v(A+S*J+J/2,I-z+13,rt(y.k),{anchor:"middle"})).join(""),g=[0,.5,1].map(y=>m(A-5,I-z-y*(I-N-z)+3,s(Math.round(st*y)),{anchor:"end"})).join("")+[0,.5,1].map(y=>m(V-H+5,N+(1-y)*(I-N-z)+3,Math.round(y*100)+"%",{fill:"var(--warning)"})).join(""),b=q.slice(0,3).map(y=>`<b>${r(rt(y.k))?`<span class="verbatim">${n(d(rt(y.k)))}</span>`:n(rt(y.k))}</b> ${l(d(y.k).replace(/^[0-9]+ */,"").slice(0,18))}`).join(" · ");return f(V,I,`<line x1="${A}" y1="${I-z}" x2="${V-H}" y2="${I-z}" stroke="var(--line)"/><line x1="${A}" y1="${N}" x2="${A}" y2="${I-z}" stroke="var(--line)"/>${lt}
- <line x1="${A}" y1="${Z.toFixed(1)}" x2="${V-H}" y2="${Z.toFixed(1)}" stroke="var(--warning)" stroke-dasharray="4 3" stroke-opacity=".7"/>
- ${m(V-H-3,Z-4,e("ch.pareto.cum80"),{fill:"var(--warning)",anchor:"end"})}
- <polyline points="${vt.join(" ")}" fill="none" stroke="var(--warning)" stroke-width="1.5"/>${mt}${h}${g}
- ${m(A+(V-H-A)/2,I-3,e("ch.pareto.xlab"),{fs:8.5,anchor:"middle"})}`)+`<p class="small muted" style="margin-top:5px;line-height:1.6">${nt?`<b>${e("ch.pareto.key",{k:nt})}</b> (${e("ch.pareto.total",{n:B,tot:s(Math.round(tt)),unit:G})})`:e("ch.pareto.total",{n:B,tot:s(Math.round(tt)),unit:G})}<br>${e("ch.pareto.top3")}${b}${R?"<br>"+R:""}</p>`}function W(T){const G=st=>st.indexOf("限电")>=0||st.indexOf("调度")>=0?0:st==="停机"?1:2,R=[e("ch.blame.n1"),e("ch.blame.n2"),e("ch.blame.n3")],q=[e("ch.blame.d1"),e("ch.blame.d2"),e("ch.blame.d3")],V=["var(--accent)","var(--critical)","var(--muted)"],I=[0,0,0];(T.items||[]).forEach(st=>{I[G(st.k)]+=st.loss});const A=I.reduce((st,J)=>st+J,0)||1,H=500,z=44;let N=0,B="";I.forEach((st,J)=>{const rt=st/A*H;B+=`<rect x="${N.toFixed(1)}" y="12" width="${Math.max(rt,1).toFixed(1)}" height="26" rx="3" fill="${V[J]}" fill-opacity=".55"><title>${R[J]}: ${s(Math.round(st))} MWh</title></rect>`+(rt>46?m(N+rt/2,29,(st/A*100).toFixed(0)+"%",{fs:10.5,fill:"currentColor",anchor:"middle",w:600}):""),N+=rt});const tt=I.map((st,J)=>`<div style="display:flex;align-items:baseline;gap:7px;margin-top:5px"><i style="flex:none;width:9px;height:9px;border-radius:2px;background:${V[J]};opacity:.55"></i><span style="font-weight:600">${R[J]}</span><span class="num">${s(Math.round(st))} MWh</span><span class="small muted">${q[J]}</span></div>`).join("");return f(H,z,`${m(0,8,e("ch.blame.title",{tot:s(Math.round(A))}))}${B}`)+tt}function dt(T){const G=T.months||T.x||[],R=G.length;if(!R)return"";const q=620,V=250,I=52,A=34,H=["var(--accent)","#D48A1E","#2E8B6A","#7C5295"],z=[];if((T.series||[]).forEach(Z=>Z.vals.forEach(h=>{h!=null&&h===h&&z.push(h)})),(T.thresholds||[]).forEach(Z=>{Z&&Z.v!=null&&z.push(Z.v)}),!z.length)return"";let N=T.zero===!1?Math.min(...z):Math.min(0,...z),B=Math.max(...z);N===B&&(N-=1,B+=1);const tt=(B-N)*.08;B+=tt,T.zero===!1&&(N-=tt);const st=Z=>I+Z/Math.max(R-1,1)*(q-I-12),J=Z=>V-A-(Z-N)/(B-N)*(V-A-14),rt=(Z,h)=>{let g=[],b=[];return Z.forEach((y,S)=>{y==null||y!==y?(b.length&&g.push(b),b=[]):b.push(`${st(S).toFixed(1)},${J(y).toFixed(1)}`)}),b.length&&g.push(b),g.map(y=>`<polyline points="${y.join(" ")}" fill="none" stroke="${h}" stroke-width="1.8"/>`).join("")};let ft=(T.series||[]).map((Z,h)=>rt(Z.vals,H[h%4])).join("");const lt=Math.max(1,Math.ceil(R/8));let vt="";for(let Z=0;Z<R;Z+=lt)vt+=m(st(Z),V-10,String(G[Z]).includes("-")?String(G[Z]).slice(2,7):String(G[Z]),{fs:10,anchor:"middle"});let mt="";for(let Z=0;Z<5;Z++){const h=N+(B-N)*Z/4;mt+=m(I-6,J(h)+3,h.toFixed(Math.abs(B)<10?1:0),{fs:10,anchor:"end"})+`<line x1="${I}" x2="${q-12}" y1="${J(h).toFixed(1)}" y2="${J(h).toFixed(1)}" stroke="var(--line)"/>`}(T.thresholds||[]).forEach(Z=>{!Z||Z.v==null||(ft+=`<line x1="${I}" x2="${q-12}" y1="${J(Z.v).toFixed(1)}" y2="${J(Z.v).toFixed(1)}" stroke="var(--muted)" stroke-dasharray="5 4"/>`+(Z.label?v(I+6,J(Z.v)-4,Z.label,{fs:10}):""))}),T.xlab&&(ft+=v((I+q)/2,V-1,T.xlab,{fs:10,anchor:"middle"}));const nt='<div class="legend" style="margin-top:6px;flex-wrap:wrap">'+(T.series||[]).map((Z,h)=>`<span><i style="background:${H[h%4]}"></i>${r(Z.name)?`<span class="verbatim">${n(d(Z.name))}</span>`:n(Z.name)}</span>`).join("")+"</div>";return f(q,V,`${mt}${ft}${vt}`)+nt}function ct(T,G){const A=(H,z,N)=>{const B=Object.entries(z.分组||{}).map(([nt,Z])=>({v:parseFloat(nt),n:Z,raw:nt}));if(!B.length)return"";const tt=Math.min(...B.map(nt=>nt.v)),st=Math.max(...B.map(nt=>nt.v)),J=(st-tt)*.22||1,rt=tt-J,ft=st+J,lt=nt=>54+(nt-rt)/(ft-rt)*412,vt=Math.max(...B.map(nt=>nt.n)),mt=z.中位;return m(48,H+3,N,{fs:9.5,anchor:"end"})+`<line x1="54" y1="${H}" x2="466" y2="${H}" stroke="var(--line)"/><line x1="${lt(mt).toFixed(1)}" y1="${H-24}" x2="${lt(mt).toFixed(1)}" y2="${H+18}" stroke="var(--muted)" stroke-dasharray="3 3" stroke-opacity=".55"/>`+m(lt(mt),H+28,e("ch.cap.median",{v:mt}),{fs:8.5,anchor:"middle"})+B.map(nt=>{const Z=5+Math.sqrt(nt.n/vt)*9;return`<circle cx="${lt(nt.v).toFixed(1)}" cy="${H}" r="${Z.toFixed(1)}" fill="var(--accent)" fill-opacity=".42" stroke="var(--accent)"/>`+m(lt(nt.v),H-Z-5,n(nt.raw),{anchor:"middle",fill:"currentColor"})+m(lt(nt.v),H+3.5,nt.n,{anchor:"middle",fill:"var(--panel)",w:600})}).join("")};return f(500,158,`${A(44,T||{},e("ch.cap.p"))}${A(120,G||{},e("ch.cap.w"))}${m(466,12,e("ch.cap.legend"),{fs:8.5,anchor:"end"})}`)}function gt(T,G){const R=T.离群||[],q=T.全场同档差中位||0,V=500,I=34+R.length*26,A=52,H=58,z=Math.max(q,...R.map(tt=>tt.平均偏))*1.18||1,N=tt=>A+tt/z*(V-A-H),B=R.map((tt,st)=>{const J=30+st*26;return m(A-6,J+10,n(G(tt.t)),{fs:9.5,anchor:"end",fill:"currentColor"})+`<rect x="${A}" y="${J+1}" width="${(N(tt.平均偏)-A).toFixed(1)}" height="13" rx="2" fill="var(--warning)" fill-opacity=".62"/>`+m(N(tt.平均偏)+5,J+11,tt.平均偏+"°",{fill:"var(--warning)"})}).join("");return f(V,I,`<line x1="${N(q).toFixed(1)}" y1="18" x2="${N(q).toFixed(1)}" y2="${I-4}" stroke="var(--good)" stroke-dasharray="3 3"/>${m(N(q),12,e("ch.beta.median",{v:q}),{fs:8.5,fill:"var(--good)"})}<line x1="${A}" y1="18" x2="${A}" y2="${I-4}" stroke="var(--line)"/>${B}`)}function Lt(T){const G=Object.entries(T||{}),R=500,q=26+G.length*30,V=96,I=76,A=3.7,H=Math.max(A*1.35,...G.map(([,B])=>B.极差/B.σ)),z=B=>V+B/H*(R-V-I),N=G.map(([B,tt],st)=>{const J=22+st*30,rt=tt.极差/tt.σ,ft=rt>A;return v(V-6,J+11,B,{fs:9.5,anchor:"end",fill:"currentColor"})+`<rect x="${V}" y="${J+2}" width="${(z(rt)-V).toFixed(1)}" height="12" rx="2" fill="${ft?"var(--warning)":"var(--accent)"}" fill-opacity=".55"/>`+m(z(rt)+5,J+11,e("ch.ruler.row",{r:rt.toFixed(1),s:tt.σ}))}).join("");return f(R,q,`<line x1="${z(A).toFixed(1)}" y1="14" x2="${z(A).toFixed(1)}" y2="${q-4}" stroke="var(--good)" stroke-dasharray="3 3"/>${m(z(A),10,e("ch.ruler.norm"),{fs:8.5,fill:"var(--good)",anchor:"middle"})}${N}`)}function Kt(T){const G=T.kind;if(G==="vib")return`<p class="small">${r(T.text||T.comp)?`<span class="verbatim">${n(d(T.text||T.comp))}</span>`:n(T.text||T.comp||"")}</p>`;if(G==="vibbar"){const b=T.rows||[];if(!b.length)return"";const y=L=>{const j=Math.abs(L);return j>=100?L.toFixed(0):j>=10?L.toFixed(1):j>=1?L.toFixed(2):j>=.01?L.toFixed(3):Number(L).toExponential(1)},S={};b.forEach(L=>{(S[L.指标]=S[L.指标]||[]).push(L)});let F=`<p class="small muted">${e("fig.vibbar_note")}</p>`;for(const[L,j]of Object.entries(S))F+=`<div class="tblwrap" style="margin-top:8px"><b class="small muted">${l(L)}</b><table style="margin-top:2px"><tr><th>${e("fig.point")}</th><th class="r">${e("fig.x_median")}</th><th class="r">${e("fig.this_unit")}</th><th class="r">${e("fig.fleet_median")}</th><th class="r">z</th><th class="r">${e("fig.trend")}</th></tr>`+j.map(x=>{const $=Math.abs(x.z)>=3?"var(--critical)":Math.abs(x.z)>=2?"var(--warning)":"var(--good)";return`<tr><td class="small">${l(x.测点)}</td><td class="r" style="color:${$};font-weight:600">${x.倍中位!=null?x.倍中位+"×":"—"}</td><td class="r small">${y(x.本台)}</td><td class="r small muted">${y(x.全场中位)}</td><td class="r small" style="color:${Math.abs(x.z)>=3?"var(--critical)":"var(--muted)"}">${x.z}</td><td class="r small" style="color:${x.六窗比>1.15?"var(--warning)":"var(--muted)"}">${x.六窗比!=null?x.六窗比+"×":"—"}</td></tr>`}).join("")+"</table></div>";return F}const R=T.months||T.x||[],q=R.length;if(!q)return"";const V=620,I=250,A=52,H=34,z=14,N=[];if(G==="band"?[T.self,T.med,T.q1,T.q3].forEach(b=>(b||[]).forEach(y=>{y!=null&&y===y&&N.push(y)})):G==="bars"?(N.push(0),(T.vals||[]).forEach(b=>{b!=null&&b===b&&N.push(b)})):G==="xy"?[T.self,T.med].forEach(b=>(b||[]).forEach(y=>{y!=null&&y===y&&N.push(y)})):(T.series||[]).forEach(b=>(b.vals||[]).forEach(y=>{y!=null&&y===y&&N.push(y)})),(T.thresholds||[]).forEach(b=>{b&&b.v!=null&&N.push(b.v)}),!N.length)return"";let B=Math.min(...N),tt=Math.max(...N);B===tt&&(B-=1,tt+=1);const st=(tt-B)*.08;B-=st,tt+=st;const J=b=>A+b/Math.max(q-1,1)*(V-A-12),rt=b=>I-H-(b-B)/(tt-B)*(I-H-z),ft=(b,y,S)=>{let F=[],L=[];return(b||[]).forEach((j,x)=>{j==null||j!==j?(L.length&&F.push(L),L=[]):L.push(`${J(x).toFixed(1)},${rt(j).toFixed(1)}`)}),L.length&&F.push(L),F.map(j=>`<polyline points="${j.join(" ")}" fill="none" stroke="${y}" stroke-width="${S||1.8}"/>`).join("")};let lt="";if(G==="band"&&T.q1&&T.q3){const b=[],y=[];T.q3.forEach((S,F)=>{S!=null&&b.push(`${J(F).toFixed(1)},${rt(S).toFixed(1)}`)});for(let S=T.q1.length-1;S>=0;S--)T.q1[S]!=null&&y.push(`${J(S).toFixed(1)},${rt(T.q1[S]).toFixed(1)}`);b.length&&y.length&&(lt+=`<polygon points="${b.join(" ")} ${y.join(" ")}" fill="var(--unknown)" fill-opacity=".18"/>`)}if(G==="bars"){const b=Math.max(3,(V-A-20)/q*.6),y=rt(Math.max(B,0));lt+=(T.vals||[]).map((S,F)=>S==null||S!==S?"":`<rect x="${(J(F)-b/2).toFixed(1)}" y="${rt(S).toFixed(1)}" width="${b.toFixed(1)}" height="${Math.max(y-rt(S),.8).toFixed(1)}" rx="2" fill="var(--accent)" fill-opacity=".75"/>`).join("")}T.med&&(lt+=ft(T.med,"var(--muted)",1.7)),T.self&&(lt+=ft(T.self,"var(--critical)",2.1)+(T.self||[]).map((b,y)=>b==null||b!==b?"":`<circle cx="${J(y).toFixed(1)}" cy="${rt(b).toFixed(1)}" r="2.4" fill="var(--critical)"/>`).join(""));const vt=["var(--accent)","#D48A1E","#2E8B6A","#7C5295"];(T.series||[]).forEach((b,y)=>{lt+=ft(b.vals,vt[y%4])}),(T.thresholds||[]).forEach(b=>{b==null||b.v==null||(lt+=`<line x1="${A}" x2="${V-12}" y1="${rt(b.v).toFixed(1)}" y2="${rt(b.v).toFixed(1)}" stroke="var(--muted)" stroke-dasharray="5 4"/>`+(b.label?v(A+6,rt(b.v)-4,b.label,{fs:10}):""))});const mt=Math.max(1,Math.ceil(q/8));let nt="";for(let b=0;b<q;b+=mt)nt+=m(J(b),I-10,String(R[b]).includes("-")?String(R[b]).slice(2,7):String(R[b]),{fs:10,anchor:"middle"});let Z="";for(let b=0;b<5;b++){const y=B+(tt-B)*b/4;Z+=m(A-6,rt(y)+3,y.toFixed(Math.abs(tt)<10?1:0),{fs:10,anchor:"end"})+`<line x1="${A}" x2="${V-12}" y1="${rt(y).toFixed(1)}" y2="${rt(y).toFixed(1)}" stroke="var(--line)"/>`}const h=G==="band"?m(V-190,12,e("fig.this_unit"),{fill:"var(--critical)",fs:10})+m(V-110,12,e("fig.fleet_median"),{fs:10})+m(V-40,12,e("fig.quartile"),{fs:10}):(T.series||[]).length&&(T.series||[]).length<=2?T.series.map((b,y)=>m(V-12-(T.series.length-1-y)*118,12,"— "+n(d(b.name)),{fill:vt[y%4],fs:10,anchor:"end"})).join(""):"",g=(T.series||[]).length>2?'<div class="legend" style="margin-top:6px;flex-wrap:wrap">'+T.series.map((b,y)=>`<span><i style="background:${vt[y%4]}"></i>${r(b.name)?`<span class="verbatim">${n(d(b.name))}</span>`:n(b.name)}</span>`).join("")+"</div>":"";return f(V,I,`${Z}${lt}${nt}${h}`)+g}return{quadChart:K,rateChart:Q,waterfall:Y,ramChart:C,attribBar:D,paretoChart:M,blameBar:W,lossName:O,multiline:dt,capAxis:ct,betaBar:gt,rulerBar:Lt,fig:Kt}};const Mu=[[/DE[/]NDE/g,"驱动端与非驱动端"],[/GenDE/g,"发电机驱动端"],[/GenNDE/g,"发电机非驱动端"],[/HS_gen2?/g,"高速轴发电机侧"],[/HS_rot/g,"高速轴转子侧"],[/IMS/g,"中间轴"],[/(?<![A-Za-z])NDE(?![A-Za-z])/g,"非驱动端"],[/(?<![A-Za-z])DE(?![A-Za-z])/g,"驱动端"],[/内圈BPFI/g,"内圈特征频率"],[/外圈BPFO/g,"外圈特征频率"],[/BPFI/g,"内圈特征频率"],[/BPFO/g,"外圈特征频率"],[/FTF/g,"保持架特征频率"],[/BSF/g,"滚动体特征频率"],[/TD_1R/g,"时域单转指标"],[/Peak/g,"冲击峰值"],[/Rms/gi,"有效值"],[/([0-9]+(?:[.][0-9]+)?)[ ]*阶/g,"$1 倍轴频"],[/[(]o([0-9]+(?:[.][0-9]+)?)[)]/g,"(轴频 $1 倍)"],[/×p90/g,"×全场90分位"],[/×fleet/g,"×全场中位"],[/六窗/g,"六个观测窗"],[/([0-9])窗/g,"$1 个观测窗"],[/宽带/g,"宽频带总量"],[/台阶/g,"阶跃上升"],[/缓升/g,"缓慢上升"],[/回落/g,"回落至"],[/全净|六窗全净/g,"各窗均干净"],[/清洁/g,"干净"],[/回归/g,"回到常态"],[/同族/g,"同批次共性 (见该批主台)"],[/族第([^ ]+)台/g,"同批次第$1台"],[/族/g,"批次共性组"],[/gain异常/g,"测点增益异常"],[/gain/g,"测点增益"],[/[(]销[)]/g,"(已销案)"],[/梯度/g,"沿链梯度最高点"],[/周期主导/g,"周期成分主导"],[/急性事件/g,"突发事件"],[/慢性/g,"长期"],[/主异常在/g,"主要异常位于"]],ht=t=>String(t??"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,"""),Gi=t=>String(t??""),$t=t=>ht(t),Su={危险:"bad",报警:"warn",不可判:"unk",良好:"ok",优秀:"ex"},Tu={critical:"bad",alarm:"warn",undeterminable:"unk",indeterminate:"unk","not evaluable":"unk",good:"ok",excellent:"ex",warn:"warn",bad:"bad",ok:"ok",unk:"unk",ex:"ex"},Kn=t=>Su[String(t)]||Tu[String(t)],zi={bad:"var(--critical)",warn:"var(--warning)",unk:"var(--unknown)",ok:"var(--good)",ex:"var(--excellent)"},Yi={优秀:"var(--excellent)",良好:"var(--good)",报警:"var(--warning)",危险:"var(--critical)",不可判:"var(--unknown)",监测不可用:"var(--unknown)",无监测:"var(--unknown)"},Ji={bad:"var(--critical)",warn:"var(--warning)",note:"var(--muted)",ok:"var(--good)",unlisted:"var(--muted)",stale:"var(--muted)",meta:"var(--muted)"},Eu={定论:"confirmed","准定论·预警":"near","候选·新发":"candidate_new",候选:"candidate","候选·记基线":"candidate_baseline",参考:"reference",INSUFFICIENT:"insufficient",正常:"normal",撤回:"withdrawn"},Vn=t=>"st."+(t==="ex"?"excellent":t),Ce=t=>{const e=Kn(t);return e?o(Vn(e)):$t(t)},hn=t=>{const e=Eu[String(t)],s="tier."+e;return e?o(s):String(t)==="—"?"—":$t(t)},Xi=(t,e,s)=>`<span class="duo" style="--c:${s}"><span class="st">${t}</span><span class="ev">${e}</span></span>`,Ie=t=>{let e=String(t??"");for(const[s,n]of Mu)e=e.replace(s,n);return e},fn=t=>Ie(t),Cu=(t,e)=>{if(!t||t.filter(m=>m!=null).length<3)return"";const s=t.filter(m=>m!=null),n=Math.min(...s),l=Math.max(...s),i=l-n||1,c=84,r=22,d=t.length;let _="",f=null;return t.forEach((m,v)=>{if(m==null)return;const k=v/(d-1)*c,O=r-2-(m-n)/i*(r-4);_+=(_?"L":"M")+k.toFixed(1)+" "+O.toFixed(1),f=[k,O]}),`<svg width="${c}" height="${r}" style="vertical-align:middle;margin-left:6px"><path d="${_}" fill="none" stroke="${e}" stroke-width="1.2" opacity=".75"/><circle cx="${f[0]}" cy="${f[1]}" r="2.4" fill="${e}"/></svg>`},Fu={齿轮箱:"#8A6D3B",发电机:"#4A6FA5",主轴承:"#2E7D6B",变桨叶片:"#4A6FA5",偏航:"#2E7D6B",测风:"#7C5295",其他:"#5A6470"},Au=(t,e,s)=>{if(!e)return`<span class="small muted">${o("fus.no_alarm")}</span>`;const n=118,l=Math.max(6,Math.round(e/Math.max(s||e,1)*n));return`<div title="${ht(o("fus.fam_tip",{n:e,m:s||e}))}" style="display:flex;height:9px;border-radius:3px;overflow:hidden;width:${l}px">${(t||[]).map(i=>`<i title="${ht(ye(i.k))} ${i.n}" style="width:${(i.n/e*100).toFixed(1)}%;background:${Fu[i.k]||"#5A6470"}"></i>`).join("")}</div><div class="small muted" style="margin-top:3px">${(t||[]).slice(0,2).map(i=>ye(i.k)+" "+i.n).join(" · ")}</div>`};function Ou(t){const e=(t.列窗||{}).months||[];let s=`<div class="panel mb" style="border-left:3px solid var(--warning)"><b>${o("fus.rules_head")}</b><p class="small" style="margin-top:4px">${o("fus.rule1")}<br>${o("fus.rule2")}</p></div>`;s+=`<div class="panel mb"><h3>${o("fus.matrix_head")}</h3><p class="small muted">${o("fus.matrix_note1")}</p><p class="small">${o("fus.matrix_note2",{n:e.length,m0:e[0]||"?"})}</p>
- <div class="small muted" style="margin:6px 0 12px;line-height:2"><div><b>${o("fus.legend_state")}</b> ${["bad","warn","ok","ex","unk"].map(v=>`<span style="display:inline-flex;align-items:center;gap:4px;margin-right:12px"><i style="width:10px;height:10px;border-radius:2px;background:${zi[v]}"></i>${o(Vn(v))}</span>`).join("")}</div>
- <div><b>${o("fus.legend_tier")}</b> ${["定论","准定论·预警","候选·新发","候选","候选·记基线","参考","INSUFFICIENT"].map(v=>`<span style="display:inline-flex;align-items:center;gap:4px;margin-right:12px"><i style="width:10px;height:10px;border-radius:2px;background:${(t.色标||{})[v]||"#ccc"}"></i>${hn(v)}</span>`).join("")}</div><div>${o("fus.legend_note")}</div></div>`;const n=v=>{const k=String(v||""),O=k.match(/20[0-9][0-9]-[0-9][0-9](?:~20[0-9][0-9]-[0-9][0-9])?|至[ ]*20[0-9][0-9]-[0-9][0-9]|20[0-9][0-9]~20[0-9][0-9]/);return O?O[0].startsWith("至")?o("win.through",{date:O[0].replace(/^至\s*/,"")}):O[0]:k.slice(0,14)},l=(v,k,O)=>`<th title="${ht(k||"")}${O||""}"><div>${v}</div><div class="small muted" style="font-weight:400">${$t(n(k))}${O||""}</div></th>`,i=t.列窗||{};s+=`<div class="tblwrap"><table class="fmx" style="table-layout:fixed;width:100%;min-width:900px"><colgroup><col style="width:7%">${'<col style="width:15.5%">'.repeat(6)}</colgroup><tr><th>${o("ui.unit")}</th>${l(o("fus.col.vib"),i.振动,o("fus.col.fixed"))}${l(o("fus.col.temp"),i.温度)}${l(o("fus.col.lub"),i.润滑,o("fus.col.display_only"))}${l(o("fus.col.oil"),i.油液)}${l(o("fus.col.alarm"),i.报警)}${l(o("fus.col.wo"),i.工单)}</tr>`;const c=t.矩阵||[],r=Math.max(1,...c.map(v=>(v.报警||{}).n||0)),d=Math.max(1,...c.map(v=>(v.工单||{}).n||0)),_=t.色标||{},f=v=>{if(v.ostate&&v.ostate!=="不可判")return Ce(v.ostate);const k=String(v.note||"");return/数据不足|不可判|nsufficient/.test(k)?o("fus.short.nodata"):/未评估|ot assessed/.test(k)?o("fus.short.uneval"):/无样|未取样|o sample/.test(k)?o("fus.short.nosample"):/样龄|stale/.test(k)?o("fus.short.stale"):{ok:o("fus.short.normal"),unlisted:o("fus.short.unlisted"),stale:o("fus.short.stale")}[v.level]||"—"},m=v=>{const k=v||{},O=Yi[k.ostate]||_[k.wlevel]||Ji[k.level]||"var(--muted)",K=Ie(k.note),Q=["bad","warn","note"].includes(k.level),Y=ht(K)+o("fus.tip_state",{s:Ce(k.ostate||"?")});if(!Q)return`<td class="small" title="${Y}" style="border-left:3px solid ${O};color:var(--muted)">${f(k)}</td>`;const C=K.split(/[::]/),D=(C.length>1?C.slice(1).join(":"):K).trim(),M=/^[ ]*(评估报告|两口径差异|⚠|ssessment)/.test(D)||D.length>16?"":D,W=M?$t(M):k.ostate&&k.ostate!=="不可判"?"":f(k),dt=k.wlevel&&k.wlevel!=="—"&&k.wlevel!=="正常"&&k.ostate?Xi(Ce(k.ostate),hn(k.wlevel),O):"";return`<td class="small" title="${Y}${o("fus.tip_tier",{e:hn(k.wlevel||"?")})}" style="border-left:3px solid ${O};overflow:hidden"><div><div style="color:${O};font-weight:${["bad","warn"].includes(k.level)?600:400}">${W}</div>${dt}</div>${Cu(k.hist,k.level==="bad"?"var(--critical)":k.level==="warn"?"var(--warning)":"var(--muted)")}</td>`};return c.forEach(v=>{const k=v.报警||{n:0,fam:[]},O=v.工单||{n:0,acts:[]},K=k.rank&&k.rank<=5?"var(--warning)":"var(--line)",Q=k.burst,Y=ht((k.items||[]).map(C=>`${C.code} ${Ie(C.text)} — ${C.n} (${C.first}~${C.last})`).join(`
- `))+(Q?`
- `+ht(o("fus.burst_tip",{c:Q.code,p:(Q.share*100).toFixed(0),m:Q.med_s})):"");s+=`<tr><td><a href="/turbine/${v.turbine}"><b>${Ot(v.turbine)}</b></a></td>${m(v.振动)}${m(v.温度)}${m(v.润滑)}${m(v.油液)}
- <td title="${Y}" style="border-left:3px solid ${Q?"var(--unknown)":K}"><b class="small num" style="color:${k.rank&&k.rank<=10?"var(--ink)":"var(--muted)"}">${o("fus.alarm_n",{n:k.n})}</b>${k.rank?`<span class="small muted">${o("fus.alarm_rank",{r:k.rank,t:k.tot})}</span>`:""}${Q?`<div class="small" style="color:var(--unknown)">${o("fus.burst",{p:(Q.share*100).toFixed(0),c:Q.code})}</div>`:""}${k.rank&&k.rank<=10||Q?Au(k.fam,k.n,r):""}</td>
- <td title="${ht((O.items||[]).map(C=>`${C.date} ${fn(C.name)} → ${fn(C.act)}${C.part?" "+fn(C.part):""}`).join(`
- `)||o("fus.wo_none"))}" style="min-width:110px">${O.n?`<b class="small">${o("fus.wo_n",{n:O.n})}</b>${O.last?`<span class="small muted"> · ${ht(O.last)}</span>`:""}<div style="height:7px;border-radius:3px;background:var(--muted);opacity:.5;margin-top:4px;width:${Math.max(6,Math.round(O.n/d*90))}px"></div><div class="small muted" style="margin-top:3px">${(O.acts||[]).slice(0,2).map(C=>$t(C.k)+"×"+C.n).join(" · ")}</div>`:'<span class="small muted">—</span>'}</td></tr>`}),s+`</table></div><p class="small muted" style="margin-top:8px">${o("fus.matrix_foot")}</p></div>`}const ql=(t,e,s)=>{const n=Math.max(t,e,7),l=120,i=c=>Math.max(2,c/n*(l-4));return`<svg class="dt" viewBox="0 0 ${l} 26" style="width:${l}px;height:26px"><rect x="2" y="2" width="${i(t).toFixed(1)}" height="9" rx="2" fill="var(--muted)" fill-opacity=".55"/><rect x="2" y="15" width="${i(e).toFixed(1)}" height="9" rx="2" fill="${s}" fill-opacity=".9"/></svg>`},Tn=(t,e)=>{const s=String(t||"").replace(/main bearing[, ]*[(]?(?:rear|back)[)]?/ig,"主轴承后").replace(/main bearing[, ]*[(]?(?:front|forward)[)]?/ig,"主轴承前").replace(/main bearing/ig,"主轴承").replace(/generator[, ]*(?:NDE|non-drive[- ]end)/ig,"发电机NDE").replace(/generator[, ]*(?:DE|drive[- ]end)/ig,"发电机DE").replace(/generator/ig,"发电机").replace(/gearbox/ig,"齿轮箱").replace(/planetary/ig,"行星").replace(/intermediate[- ](?:speed[- ])?shaft/ig,"中间轴").replace(/high[- ]speed shaft/ig,"高速轴"),n=/齿轮箱/.test(s)&&!/行星|中间轴|中速|高速轴/.test(s);return`<span class="chain" title="${ht(Gi(t))}">${Hu.map(([l,i])=>{const c=i.test(s)||n&&["ps","ims","hss"].includes(l);return`<i class="${c?"on":""}" style="${c?`background:${e};border-color:${e}`:""}" title="${o("chain."+l)}"></i>`}).join("")}</span>`};function qu(t){const e=t.能力&&t.能力.loop&&t.能力.loop["换件闭环 (检出→换件→恢复)"]?t.能力.loop:null;if(!e)return`<div class="panel mb"><p class="small">${o("fus.loop_none")}</p></div>`;const s=e["换件闭环 (检出→换件→恢复)"]||[],n=e["当前在升 (无工单可对)"]||[],l=e["负面对照 (工单后持平)"];return`<div class="panel mb"><h3>${o("fus.loop_head")}</h3><p class="small">${o("fus.loop_note")}</p>
- <h3 style="margin-top:8px">${o("fus.loop_closed",{n:s.length})}</h3><div class="tblwrap"><table><tr><th>${o("ui.unit")}</th><th>${o("fus.col.part")}</th><th>${o("fus.loop_item")}</th><th>${o("fus.loop_date")}</th><th>${o("fus.loop_ba")}</th><th class="r">${o("fus.loop_ratio")}</th><th>${o("fus.loop_verdict")}</th></tr>
- ${s.map(i=>`<tr><td><b>${Ot(i.turbine)}</b></td><td>${Tn(i.component+(i.title||""),"var(--good)")} <span class="small">${vs(i.component)}</span></td><td class="small">${$t(i.title)}</td><td>${ht(i.replace_date)}</td><td>${ql(i.pre,i.post,"var(--good)")}<span class="small muted">${i.pre} → ${i.post}</span></td><td class="r"><b style="color:var(--good)">${i.ratio}×</b></td><td><span class="chip ok">${$t(i.verdict)}</span></td></tr>`).join("")}</table></div>
- <p class="small" style="margin-top:6px">${o("fus.loop_neg",{n:l})}</p>
- <h3 style="margin-top:14px">${o("fus.loop_rising",{n:n.length})}</h3><div class="tblwrap"><table><tr><th>${o("ui.unit")}</th><th>${o("fus.col.part")}</th><th>${o("fus.loop_el")}</th><th class="r">${o("fus.loop_x")}</th><th>${o("fus.loop_state")}</th></tr>
- ${n.map(i=>`<tr><td><b>${Ot(i.turbine)}</b></td><td>${Tn(i.component,"var(--warning)")} <span class="small">${vs(i.component)}</span></td><td>${ql(i.early,i.late,"var(--warning)")}<span class="small muted">${i.early} → ${i.late}</span></td><td class="r"><b style="color:var(--warning)">${i.ratio}×</b></td><td><span class="chip warn">${o("rpt.units.rising",{r:i.ratio})}</span></td></tr>`).join("")}</table></div>
- <p class="small muted" style="margin-top:8px">${o("fus.loop_bound",{b:$t(String(e["★数据边界"]||"").split("**").join(""))})}</p></div>`}const Lu=(t,e,s,n)=>{if(e==null)return`<span class="small">${$t(Gi(n).slice(0,30))}</span>`;const l=6,i=104,c=i/2,r=Math.max(-1,Math.min(1,e/l)),d=Math.abs(r)*(c-8),f=Math.abs(e)>=3?/候选|andidate/.test(s||"")?"var(--warning)":/记基线|aseline/.test(s||"")?"var(--accent)":/不可判|返服|ndeterm/.test(s||"")?"var(--unknown)":"var(--muted)":"var(--muted)",m=Math.abs(e)>l;return`<div title="${ht(n||"")}" style="display:flex;align-items:center;gap:7px"><svg class="dt" viewBox="0 0 ${i} 18" style="width:${i}px;height:18px;flex:none"><line x1="4" y1="9" x2="${i-4}" y2="9" stroke="var(--line)" stroke-opacity=".7"/><line x1="${c}" y1="1" x2="${c}" y2="17" stroke="var(--muted)" stroke-opacity=".6"/><rect x="${e>=0?c:c-d}" y="4" width="${Math.max(d,1.5)}" height="10" rx="2" fill="${f}" fill-opacity=".9"/>${m?`<path d="M${e>0?i-5:5},9 l${e>0?-5:5},-4 v8 z" fill="${f}"/>`:""}</svg><b class="small num" style="color:${f}">${e>0?"+":""}${e}K</b></div><div class="small muted" style="margin-top:1px">${ht(t||"")}</div>`},ju=(t,e)=>{if(!t||!t.length)return`<span class="small" title="${ht(e||"")}">${o("fus.win_none")}</span>`;const s=Date.parse("2026-01-01"),n=Date.parse("2026-09-01"),l=118,i=c=>3+Math.max(0,Math.min(1,(Date.parse(c)-s)/(n-s)))*(l-6);return`<div title="${ht(e||"")}"><svg class="dt" viewBox="0 0 ${l} 18" style="width:${l}px;height:18px"><rect x="3" y="4" width="${l-6}" height="10" rx="2" fill="var(--line)" fill-opacity=".5"/>${t.map(([c,r])=>{const d=i(c),_=i(r);return`<rect x="${d.toFixed(1)}" y="4" width="${Math.max(_-d,2.5).toFixed(1)}" height="10" rx="2" fill="var(--accent)" fill-opacity=".8"/>`}).join("")}</svg><div class="small muted">${o("fus.win_n",{n:t.length})}</div></div>`},Du=(t,e,s)=>`<div title="${ht(s||"")}" style="display:flex;align-items:center;gap:6px"><i style="width:9px;height:9px;border-radius:50%;flex:none;background:${e?"var(--good)":"var(--unknown)"}"></i><span class="small num">${ht(t||o("fus.oil_none"))}</span></div><div class="small muted">${t?o(e?"fus.oil_fresh":"fus.oil_stale"):"—"}</div>`,De=(t,e)=>{const s=Kn(t);return s?`<span class="chip ${s} ">${o(Vn(s))}</span>`:t?`<span class="chip">${ht(t)}</span>`:""};function Pu(t,e){const s=t.表||[],n=t.矩阵||[];let l=s,c=`<div class="panel mb"><h3>${o("fus.units_head",{u:new Set(s.map(r=>r.turbine)).size,n:l.length+"",f:""})}</h3>
- <div style="display:flex;gap:8px;margin:8px 0 12px;flex-wrap:wrap">${["bad","warn","note","ok"].map(r=>`<button class="pill ${e===r?"on":""}" data-ffilter="${r}">${o("fus.lv."+r)}</button>`).join("")}<button class="pill " data-ffilter="unlisted">${o("fus.unlisted_link",{n:n.filter(r=>(r.振动||{}).level==="unlisted").length})}</button></div>
- <div class="panel" style="border-left:3px solid var(--accent);margin-bottom:12px"><b class="small">${o("fus.eval_head")}</b><div class="tblwrap"><table style="margin-top:8px"><tr><th style="width:30%">${o("fus.eval_state")}</th><th style="width:30%">${o("fus.eval_tier")}</th><th>${o("fus.eval_meaning")}</th></tr>
- <tr><td>${De("危险")}</td><td><span class="tier confirmed">${o("tier.confirmed.s")}</span></td><td class="small">${o("fus.m.bad")} <span class="muted">(${o("fus.m.bad_e")})</span></td></tr>
- <tr><td>${De("报警")}</td><td><span class="tier near">${o("tier.near")}</span> / <span class="tier candidate">${o("tier.candidate_new")}</span></td><td class="small">${o("fus.m.warn")} <span class="muted">(${o("fus.m.warn_e")})</span></td></tr>
- <tr><td>${De("良好")}</td><td><span class="tier candidate">${o("tier.candidate")}</span> / <span class="tier candidate">${o("tier.candidate_baseline")}</span></td><td class="small">${o("fus.m.ok")} <span class="muted">(${o("fus.m.ok_e")})</span></td></tr>
- <tr><td>${De("优秀")}</td><td><span class="tier reference">${o("tier.reference")}</span> / <span class="tier reference">${o("tier.normal")}</span> / <span class="tier withdrawn">${o("tier.withdrawn")}</span></td><td class="small">${o("fus.m.ex")} <span class="muted">(${o("fus.m.ex_e")})</span></td></tr>
- <tr><td>${De("不可判")}</td><td><span class="tier insufficient">${o("tier.insufficient")}</span></td><td class="small">${o("fus.m.unk")} <span class="muted">(${o("fus.m.unk_e")})</span></td></tr></table></div><p class="small muted" style="margin-top:7px">${o("fus.eval_note")}</p></div>
- <div class="tblwrap"><table><tr><th>${o("ui.unit")}</th><th>${o("fus.col.part")}</th><th>${o("fus.col.state_concl")}</th><th>${o("fus.col.claim")} <span class="small muted" style="font-weight:400">${o("fus.col.claim_axis")}</span></th><th>${o("fus.col.signal")}</th><th>${o("fus.col.tempaxis")} <span class="small muted" style="font-weight:400">${o("fus.col.tempaxis_note")}</span></th><th>${o("fus.col.oil")}</th></tr>`;return l.forEach(r=>{const d=Ji[r.级]||"var(--accent)",_=Yi[r.设备状态]||"var(--muted)";c+=`<tr><td><a href="/turbine/${r.turbine}"><b>${Ot(r.turbine)}</b></a></td><td style="min-width:200px">${Tn(r.部件,d)} <span class="small">${vs(r.部件)}</span></td>
- <td title="${ht(Ie(r.振动结论))}">${Xi(Ce(r.设备状态||"—"),$t(r.振动结论),_)}</td><td style="min-width:130px">${ju(r.窗区间,r.claim_window)}</td>
- <td class="small" title="${ht(r.振动信号||"")}">${$t(Ie(r.振动信号))}</td><td style="min-width:158px">${Lu(r.温度通道,r.温度dev,r.温度判,r.温度轴)}</td><td style="min-width:112px">${Du(r.油末样,r.油新鲜,r.油样轴)}</td></tr>`}),c+"</table></div></div>"}const Hu=[["mbf",/主轴承[((]前|主轴承前|主轴承[++]|主轴承(?![((前后])/],["mba",/主轴承[((]后|主轴承后/],["ps",/行星|二级行星/],["ims",/中间轴|中速/],["hss",/高速轴|高速(?!.*发电)/],["gde",/发电机DE|发电机[((]|发电机(?!NDE)/],["gnde",/发电机NDE|NDE/]],Qe=t=>zi[Kn(t)]||null,Ll=t=>`<span class="chain">${Object.entries(t).map(([e,s])=>`<i class="${s?"on":""}" style="${s?`background:${s};border-color:${s}`:""}" title="${o("chain."+e)}"></i>`).join("")}</span>`,Ru=t=>{const e=String(t||""),s=/准定论|near[- ](?:conf|establish)/i.test(e)?3:/确诊|onfirmed/.test(e)?4:/定论|ettled|stablished/.test(e)?3:/候选|andidate/.test(e)?2:/参考|eference/.test(e)?1:0,n=s>=4?"var(--critical)":s===3?"var(--warning)":s===2?"var(--accent)":s===1?"var(--muted)":"var(--unknown)";return`<div style="display:flex;align-items:center;gap:7px"><svg class="dt" viewBox="0 0 62 20" style="width:62px;height:20px;flex:none">${[0,1,2,3].map(l=>`<rect x="${2+l*15}" y="${12-l*3}" width="11" height="${6+l*3}" rx="1.5" fill="${l<s?n:"none"}" fill-opacity=".9" stroke="${n}" stroke-opacity="${l<s?1:.4}" ${l>=s?'stroke-dasharray="2 1.5"':""}/>`).join("")}</svg><span class="small" style="color:${n}">${$t(e)}</span></div>`};function Iu(t,e){if(!t.事件)return`<div class="panel mb"><p class="small muted">${o("ui.empty")}</p></div>`;let s=`<div class="panel mb"><p class="small muted"><b>${o("fus.ev_win",{win:ke(e.win)})}</b></p></div>`;for(const[n,l]of Object.entries(t.事件)){const i=l,c=i.报警||{},r=i.工单||{};s+=`<div class="panel mb"><h3>${o("fus.ev_head",{c:ye(n),an:c.总条数||0,au:c.台数||0,wn:r.总条数||0,wu:r.台数||0})}</h3>`,c.总条数>0?s+=`<div class="tblwrap"><table><tr><th>${o("fus.ev_code")}</th><th>${o("fus.ev_text")}</th><th class="r">${o("ui.count")}</th><th class="r">${o("fus.ev_units")}</th><th class="r">${o("fus.ev_dur")}</th></tr>${(c.码统计||[]).map(d=>`<tr><td>${ht(d.code)}</td><td class="small">${$t(Ie(d.text))}</td><td class="r">${d.条数}</td><td class="r">${d.台数}</td><td class="r">${d.时长h}</td></tr>`).join("")}</table></div>
- <p class="small">${o("fus.ev_top")}${Object.entries(c.top台||{}).map(([d,_])=>`<a href="/turbine/${d}">${Ot(d)}</a>×${_}`).join(" · ")}</p>
- <details><summary class="small">${o("fus.ev_recent",{n:(c.近况||[]).length})}</summary><div class="tblwrap"><table><tr><th>${o("ui.unit")}</th><th>${o("fus.ev_time")}</th><th>${o("fus.ev_code")}</th><th>${o("fus.ev_text")}</th><th class="r">${o("fus.ev_min")}</th></tr>${(c.近况||[]).map(d=>`<tr><td>${Ot(d.t)}</td><td class="small">${ht(d.on)}</td><td>${ht(d.code)}</td><td class="small">${$t(Ie(d.text))}</td><td class="r">${d.dur_min??"—"}</td></tr>`).join("")}</table></div></details>`:s+=`<p class="small">${o("fus.ev_no_alarm")}</p>`,r.总条数>0?s+=`<div class="tblwrap"><table style="margin-top:8px"><tr><th>${o("ui.unit")}</th><th>${o("ui.date")}</th><th>${o("fus.ev_wo_name")}</th><th>${o("fus.ev_wo_act")}</th><th>${o("fus.ev_wo_cause")}</th></tr>${(r.明细||[]).map(d=>`<tr><td>${Ot(d.t)}</td><td class="small">${ht(d.date)}</td><td class="small">${$t(d.name)}</td><td class="small">${$t(d.act)}</td><td class="small">${$t(d.cause)}</td></tr>`).join("")}</table></div>`:s+=`<p class="small">${o("fus.ev_no_wo")}</p>`,s+="</div>"}return s}function Nu(t,e){if(!t)return`<div class="panel mb"><p class="small muted">${o("fus.cms_loading")}</p></div>`;if(t.error)return`<div class="panel mb"><p class="small" style="color:var(--critical)">${$t(t.error)}</p></div>`;const s={主轴承前:"mbf",主轴承后:"mba",齿轮箱:"gb",发电机:"gen",发电机DE:"gde",发电机NDE:"gnde","Main bearing, front":"mbf","Main bearing, rear":"mba",Gearbox:"gb",Generator:"gen","Generator DE":"gde","Generator NDE":"gnde"};return`<div class="panel mb"><h3>${o("fus.cms_head",{d:ht(t.date||"")})}</h3>
- ${t.时间范围?`<p class="small" style="margin:2px 0 6px">${o("fus.cms_window",{r:ht(t.时间范围)})}</p>`:""}
- <p class="small">${$t(t.overall||"")} ${o("fus.cms_note")}</p>
- <h3 style="margin-top:10px">${o("fus.cms_action")}</h3><div class="tblwrap"><table><tr><th>${o("ui.unit")}</th><th>${o("fus.loop_state")}</th><th>${o("fus.cms_focus")} <span class="small muted" style="font-weight:400">${o("fus.cms_focus_note")}</span></th><th>${o("fus.cms_evidence")}</th><th>${o("fus.cms_act")}</th></tr>
- ${(t.action||[]).map(n=>{const l={};return String(n[2]).split(/[;;]/).forEach(i=>{const c=i.split(/[::]/);if(c.length>1){const r=s[c[0].trim()]||null;r&&(l[r]=Qe(c[1].trim()))}}),`<tr><td><b>${Ot(n[0])}</b></td><td>${De(n[1])}</td><td title="${ht(n[2])}">${Ll(l)} <span class="small muted">${$t(n[2])}</span></td><td style="min-width:150px">${Ru(n[3])}</td><td>${/P0/.test(n[4])?`<b style="color:var(--critical)">${ht(n[4])}</b>`:ht(n[4])}</td></tr>`}).join("")}</table></div>
- <h3 style="margin-top:14px">${o("fus.cms_grades")}</h3><div class="tblwrap"><table><tr><th>${o("ui.unit")}</th><th>${o("fus.cms_chain")} <span class="small muted" style="font-weight:400">${o("fus.cms_chain_note")}</span></th><th>${o("fus.cms_overall")}</th><th>${o("fus.cms_act")}</th></tr>
- ${(t.grades||[]).map(n=>`<tr><td><b>${Ot(n.t)}</b></td><td title="${o("chain.mbf")} ${Ce(n.主轴承前)} · ${o("chain.mba")} ${Ce(n.主轴承后)} · ${o("chain.gb")} ${Ce(n.齿轮箱)} · ${o("chain.gen")} ${Ce(n.发电机)}">${Ll({mbf:Qe(n.主轴承前),mba:Qe(n.主轴承后),gb:Qe(n.齿轮箱),gen:Qe(n.发电机)})}</td><td>${De(n.综合)}</td><td class="small">${ht(n.行动)}</td></tr>`).join("")}</table></div>
- <div class="small" style="margin-top:12px;padding:10px;border:1px solid var(--line);border-radius:8px"><b>${o("fus.cms_basis")}</b> ${o("fus.cms_basis_note",{a:((t.diff||{}).only_cms||[]).map(Ot).join(", ")||o("fus.none_word"),b:((t.diff||{}).only_vibration_package||(t.diff||{}).only_handoff||[]).map(Ot).join(", ")||o("fus.none_word")})}</div>
- <p class="small muted" style="margin-top:10px">${o("fus.cms_link")} <a href="http://localhost:8030/index.html" target="_blank" rel="noopener">${o("fus.cms_open")}</a> <a href="/windcms/index.html" target="_blank" rel="noopener">${o("fus.cms_static")}</a></p></div>`}const Bu=["matrix","loop","units","events","cms"],Wu=typeof window<"u"?window:globalThis,jl=Wu.__charts,Uu=jl?jl({t:o,fmt:kt,esc:ht,dv:$t,EN:!1,displayText:t=>t==null?"":String(t),verb:()=>{}}):{};function Te(t,...e){const s=Uu[t];if(typeof s!="function")return"";try{return s(...e)}catch{return""}}const Ku={class:"eyebrow"},Vu={class:"panel mb small",style:{"border-left":"3px solid var(--accent)"}},Gu={style:{color:"var(--warning)"}},zu={class:"grid2"},Yu={class:"eyebrow",style:{"grid-column":"1/-1","margin-top":"4px"}},Ju={style:{"text-transform":"none","letter-spacing":"0",color:"var(--muted)"}},Xu={class:"panel span2"},Zu={class:"small muted",style:{"margin-top":"6px"}},Qu={class:"panel"},tp=["innerHTML"],ep={class:"panel"},sp=["innerHTML"],np={class:"panel span2"},lp={class:"small muted",style:{"margin-top":"6px"}},ip={key:0,style:{color:"var(--warning)"}},ap={class:"panel"},op={class:"tblwrap"},rp={style:{width:"70px"}},cp={class:"r",style:{width:"80px"}},dp={class:"num small"},up={class:"r small"},pp={class:"small muted",style:{"margin-top":"6px"}},hp={key:0,class:"panel",style:{"border-left":"3px solid var(--critical)"}},fp={class:"small"},mp={key:1,class:"panel"},vp={class:"small muted",style:{"font-weight":"400"}},_p={class:"legend",style:{"margin-top":"6px","flex-wrap":"wrap"}},gp={class:"small muted",style:{"margin-top":"6px"}},bp={class:"eyebrow",style:{"grid-column":"1/-1","margin-top":"4px"}},yp={style:{"text-transform":"none","letter-spacing":"0",color:"var(--muted)"}},$p={key:0,class:"panel span2"},xp={class:"small muted",style:{"margin-top":"6px"}},wp={style:{"margin-top":"12px"}},kp={class:"small muted",style:{"margin-top":"2px"}},Mp={class:"panel"},Sp=["innerHTML"],Tp={class:"small muted",style:{"margin-top":"4px"}},Ep={class:"panel"},Cp={class:"tblwrap"},Fp={style:{width:"64px"}},Ap={class:"r",style:{width:"56px"}},Op={class:"num small"},qp={class:"r small"},Lp={class:"small muted",style:{"margin-top":"6px"}},jp=Pt({__name:"Fault",props:{d:{}},setup(t){const e=t,s=P(()=>e.d?.faults||{}),n=P(()=>s.value.partial||[]),l=P(()=>e.d?.m8&&!e.d.m8.err?e.d.m8.mtbf:null),i=P(()=>s.value.monthly||{months:[],vals:[]}),c=P(()=>n.value.length?(i.value.months||[]).indexOf(n.value[0]):-1),r=P(()=>{const T=n.value.length?o("flt.rate_partial",{m:n.value.join("/")}):o("flt.rate_full"),G=c.value>=0&&!!i.value.per_day;return T+(G?" "+o("flt.rate_example",{m:n.value[0],v:d.value}):"")}),d=P(()=>{const T=c.value;return T>=0&&i.value.per_day?i.value.per_day[T]:null}),_=P(()=>n.value.length?o("win.partial",{m:n.value.join("/"),c:Math.round((s.value.cov_min||0)*100)}):""),f=T=>{const G=String(T).match(/^([0-9]+)/);return G?G[1]:String(T).slice(0,4)},m=T=>String(T??"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""");function v(T,G,R){const q=(T||[]).filter(B=>B&&B.v>0);if(!q.length)return m(o("ch.pareto.none"));const V=q.reduce((B,tt)=>B+tt.v,0);let I=0,A=null;for(let B=0;B<q.length;B++)I+=q[B].v,A===null&&V&&I/V>=.8&&(A=B+1);const H=q.slice(0,3).map(B=>`<b>${m(f(B.k))}</b> ${m(String(B.k).replace(/^[0-9]+ */,"").slice(0,18))}`).join(" · "),z=o("ch.pareto.total",{n:q.length,tot:kt(Math.round(V)),unit:G});return(A?`<b>${m(o("ch.pareto.key",{k:A}))}</b> (${m(z)})`:m(z))+"<br>"+m(o("ch.pareto.top3"))+H+(R?"<br>"+m(R):"")}const k=P(()=>v(s.value.pareto_n||[],o("unit.n"),o("flt.pareto_n_note"))),O=P(()=>v(s.value.pareto_d||[]," h",o("flt.pareto_d_note"))),K=P(()=>v(dt.value," h",o("flt.stop_pareto_note"))),Q=P(()=>s.value.per_t||[]),Y=P(()=>Math.max(1,...Q.value.map(T=>T.v))),C=P(()=>l.value&&e.d?.m8?.seasonal?e.d.m8.seasonal:[]),D=["var(--accent)","#D48A1E","#2E8B6A","#7C5295"],M=P(()=>C.value.slice(0,4).map(T=>String(T.name).slice(0,16))),W=P(()=>e.d?.rel&&!e.d.rel.err?e.d.rel:null),dt=P(()=>(e.d?.m8?.stop_pareto||[]).map(T=>({k:String(T.k).split(";")[0].slice(0,26),v:T.h}))),ct=T=>vs(T),gt=P(()=>({months:C.value[0]&&C.value[0].months||[],series:C.value.slice(0,4).map(T=>({name:String(T.name),vals:T.vals}))})),Lt=P(()=>l.value?.台级top||[]),Kt=P(()=>Math.max(1,...Lt.value.map(T=>T.时长h)));return(T,G)=>(w(),E("section",null,[a("div",Ku,u(p(o)("flt.eyebrow")),1),a("div",Vu,[a("b",null,u(p(o)("win.banner",{win:p(ke)(t.d.win)})),1),_.value?(w(),E(it,{key:0},[G[0]||(G[0]=at(" | ",-1)),a("span",Gu,u(_.value),1)],64)):yt("",!0)]),a("div",zu,[a("div",Yu,[at(u(p(o)("flt.alarm_face"))+" ",1),a("span",Ju,u(p(o)("flt.alarm_meta",{n:p(kt)(s.value.total),c:s.value.n_codes,win:p(ke)(t.d.win)})),1)]),a("div",Xu,[a("h3",null,u(p(o)("flt.rate")),1),Ft(Se,{html:p(Te)("rateChart",i.value)},null,8,["html"]),a("p",Zu,[a("b",null,u(p(o)("flt.rate_note")),1),at(" — "+u(r.value),1)])]),a("div",Qu,[a("h3",null,u(p(o)("flt.pareto_n")),1),Ft(Se,{html:p(Te)("paretoChart",s.value.pareto_n||[],p(o)("unit.n"),p(o)("flt.pareto_n_note"))},null,8,["html"]),a("p",{class:"small muted",style:{"margin-top":"5px","line-height":"1.6"},innerHTML:k.value},null,8,tp)]),a("div",ep,[a("h3",null,u(p(o)("flt.pareto_d")),1),Ft(Se,{html:p(Te)("paretoChart",s.value.pareto_d||[]," h",p(o)("flt.pareto_d_note"))},null,8,["html"]),a("p",{class:"small muted",style:{"margin-top":"5px","line-height":"1.6"},innerHTML:O.value},null,8,sp)]),a("div",np,[a("h3",null,u(p(o)("flt.quad")),1),Ft(Se,{html:p(Te)("quadChart",s.value.quad||[])},null,8,["html"]),a("p",lp,[at(u(p(o)("flt.quad_note",{n:s.value.n_codes,m:(s.value.quad||[]).length}))+" ",1),n.value.length?(w(),E("span",ip,u(p(o)("flt.quad_partial",{m:n.value.join("/"),c:Math.round((s.value.cov_min||0)*100)})),1)):yt("",!0),at(" "+u(p(o)("flt.quad_note2")),1)])]),a("div",ap,[a("h3",null,u(p(o)("flt.per_t",{n:Q.value.length})),1),a("div",op,[a("table",null,[a("tr",null,[a("th",rp,u(p(o)("ui.unit")),1),a("th",null,u(p(o)("ui.count")),1),a("th",cp,u(p(o)("flt.per_t_share")),1)]),(w(!0),E(it,null,_t(Q.value,R=>(w(),E("tr",{key:R.k},[a("td",null,[a("b",null,u(p(Ot)(R.k)),1)]),a("td",null,[a("i",{class:"bar",style:jt(`width:${Math.round(R.v/Y.value*90)}px;background:${R.v/Y.value>.6?"var(--critical)":"var(--accent)"}`)},null,4),a("span",dp,u(p(kt)(R.v)),1)]),a("td",up,u((R.v/s.value.total*100).toFixed(1))+"%",1)]))),128))])]),a("p",pp,u(p(o)("flt.per_t_note",{n:p(kt)(s.value.total)})),1)]),t.d.m8&&t.d.m8.err?(w(),E("div",hp,[a("p",fp,u(p(o)("flt.block_err",{k:"m8",e:t.d.m8.err})),1)])):yt("",!0),l.value&&C.value.length?(w(),E("div",mp,[a("h3",null,[at(u(p(o)("flt.seasonal"))+" ",1),a("span",vp,"("+u(p(o)("flt.seasonal_unit"))+")",1)]),Ft(Se,{html:p(Te)("multiline",gt.value)},null,8,["html"]),a("div",_p,[(w(!0),E(it,null,_t(M.value,(R,q)=>(w(),E("span",{key:q},[a("i",{style:jt(`background:${D[q%4]}`)},null,4),at(u(R),1)]))),128))]),a("p",gp,u(p(o)("flt.seasonal_note")),1)])):yt("",!0),l.value?(w(),E(it,{key:2},[a("div",bp,[at(u(p(o)("flt.stop_face"))+" ",1),a("span",yp,u(p(o)("flt.stop_meta",{h:p(kt)(l.value.停机总时长h),n:p(kt)(l.value.停机事件数)})),1)]),W.value?(w(),E("div",$p,[a("h3",null,u(p(o)("flt.ram")),1),Ft(Se,{html:p(Te)("ramChart",W.value&&W.value.表||[],ct)},null,8,["html"]),a("p",xp,u(p(o)("flt.ram_note",{a:W.value.设备类停机h,b:W.value.外部类停机h})),1),a("div",wp,[Ft(Se,{html:p(Te)("attribBar",W.value&&W.value.表||[],W.value&&W.value.总停机h||0)},null,8,["html"])]),a("p",kp,u(p(o)("flt.attrib_note",{h:((W.value.表||[]).find(R=>R.部件==="无记录停机")||{}).停机时长h||0})),1)])):yt("",!0),a("div",Mp,[a("h3",null,u(p(o)("flt.stop_pareto")),1),Ft(Se,{html:p(Te)("paretoChart",dt.value," h",p(o)("flt.stop_pareto_note"))},null,8,["html"]),a("p",{class:"small muted",style:{"margin-top":"5px","line-height":"1.6"},innerHTML:K.value},null,8,Sp),a("p",Tp,u(l.value.口径),1)]),a("div",Ep,[a("h3",null,u(p(o)("flt.stop_units",{n:Lt.value.length})),1),a("div",Cp,[a("table",null,[a("tr",null,[a("th",Fp,u(p(o)("ui.unit")),1),a("th",null,u(p(o)("flt.stop_h")),1),a("th",Ap,u(p(o)("flt.stop_n")),1)]),(w(!0),E(it,null,_t(Lt.value,R=>(w(),E("tr",{key:R.t},[a("td",null,[a("b",null,u(p(Ot)(R.t)),1)]),a("td",null,[a("i",{class:"bar",style:jt(`width:${Math.round(R.时长h/Kt.value*90)}px;background:${R.时长h/Kt.value>.6?"var(--critical)":"var(--accent)"}`)},null,4),a("span",Op,u(p(kt)(R.时长h)),1),G[1]||(G[1]=at("h",-1))]),a("td",qp,u(R.次),1)]))),128))])]),a("p",Lp,u(p(o)("flt.stop_units_note")),1)])],64)):yt("",!0)])]))}});function Dp(t){const e=t.parentNode;if(e){for(;t.firstChild;)e.insertBefore(t.firstChild,t);e.removeChild(t)}}const Gn={mounted:t=>Dp(t)},Pp={class:"eyebrow"},Hp={style:{display:"flex",gap:"8px","margin-bottom":"14px","flex-wrap":"wrap"}},Rp=["data-fsub","onClick"],Ip=["innerHTML"],Np=Pt({__name:"Vibration",props:{d:{},sub:{},cms:{}},emits:["sub"],setup(t,{emit:e}){const s=t,n=e,l=P(()=>s.sub||"matrix"),i=P(()=>s.d?.fus),c=P(()=>{const r=i.value;return!r||r.err?`<section><div class="panel"><p>${o("fus.unavailable",{e:String(r&&r.err||"")})}</p></div></section>`:l.value==="matrix"?Ou(r):l.value==="loop"?qu(r):l.value==="units"?Pu(r,null):l.value==="events"?Iu(r,s.d):l.value==="cms"?Nu(s.cms??null):`<div class="panel mb"><p class="small muted">子视图「${o("fus.sub."+l.value)}」尚未迁移到 Vue(迁移中)。</p></div>`});return(r,d)=>(w(),E("section",null,[a("div",Pp,u(p(o)("fus.eyebrow")),1),a("div",Hp,[(w(!0),E(it,null,_t(p(Bu),_=>(w(),E("button",{key:_,class:Wt(["pill",{on:_===l.value}]),"data-fsub":_,onClick:f=>n("sub",_)},u(p(o)("fus.sub."+_)),11,Rp))),128))]),ps(a("div",{class:"unwrap-host",innerHTML:c.value},null,8,Ip),[[p(Gn)]])]))}}),Bp={class:"eyebrow"},Wp={class:"panel mb small",style:{"border-left":"3px solid var(--accent)"}},Up={class:"muted",style:{"margin-top":"3px"}},Kp={key:0,class:"panel mb",style:{"border-left":"3px solid var(--critical)"}},Vp={class:"small"},Gp={class:"small muted",style:{"font-weight":"400"}},zp={key:0,class:"chip"},Yp={style:{display:"flex","flex-wrap":"wrap",gap:"18px"}},Jp={style:{flex:"1 1 300px","min-width":"280px"}},Xp={class:"small",style:{"font-weight":"600","margin-bottom":"4px"}},Zp={class:"small muted",style:{"margin-top":"4px"}},Qp={style:{flex:"1 1 300px","min-width":"280px"}},th={class:"small",style:{"font-weight":"600","margin-bottom":"4px"}},eh=["innerHTML"],sh={class:"small",style:{"font-weight":"600",margin:"12px 0 4px"}},nh={class:"small muted",style:{"margin-top":"4px"}},lh={key:2,class:"panel mb"},ih={class:"small muted",style:{"font-weight":"400"}},ah=["innerHTML"],oh={class:"eyebrow"},rh={key:3,class:"panel",style:{"border-left":"3px solid var(--critical)"}},ch={class:"small"},dh={key:4,class:"panel",style:{"border-left":"3px solid var(--accent)"}},uh={class:"small"},ph={key:5,class:"panel"},hh={class:"small muted"},fh={key:6,class:"grid2"},mh={key:0},vh={class:"small muted",style:{"font-weight":"400"}},_h={class:"legend",style:{"margin-top":"6px","flex-wrap":"wrap"}},gh={key:0,class:"small muted",style:{"margin-top":"6px"}},bh=Pt({__name:"Generation",props:{d:{},curves:{},pending:{type:Boolean}},setup(t){const e=t,s=P(()=>e.d?.m9&&!e.d.m9.err?e.d.m9:null),n=P(()=>e.d?.control||null),l=P(()=>e.curves||null),i=P(()=>(e.d?.sysmx_span||[]).join(" ~ ")||""),c=C=>{const D=Object.entries(C?.分组||{}).map(([dt,ct])=>({v:parseFloat(dt),n:ct,raw:dt}));if(!D.length)return null;const M=D.map(dt=>dt.v).sort((dt,ct)=>dt-ct),W=M.length%2?M[(M.length-1)/2]:(M[M.length/2-1]+M[M.length/2])/2;return{gs:D,med:W}},r=P(()=>({p:c(s.value?.P封顶),w:c(s.value?.ω封顶)})),d=P(()=>{const C=r.value.p,D=r.value.w,M=[];return C&&M.push({name:o("ch.cap.p"),type:"scatter",data:C.gs.map(W=>[W.v,1]),symbolSize:10,itemStyle:{color:"#0b5fa5",opacity:.6}}),D&&M.push({name:o("ch.cap.w"),type:"scatter",data:D.gs.map(W=>[W.v,0]),symbolSize:10,itemStyle:{color:"#b45309",opacity:.6}}),{grid:{left:56,right:36,top:20,bottom:24},xAxis:{type:"value"},yAxis:{type:"value",min:-.5,max:1.5,show:!1},series:M,__data__:[]}}),_=P(()=>s.value?.β_schedule?.离群||[]),f=P(()=>s.value?.β_schedule?.全场同档差中位||0),m=P(()=>({grid:{left:56,right:60,top:20,bottom:24},xAxis:{type:"value"},yAxis:{type:"category",data:_.value.map(C=>Ot(C.t))},series:[{type:"bar",data:_.value.map(C=>C.平均偏),itemStyle:{color:"#0b5fa5"}}],__data__:[]})),v=P(()=>{const C=n.value?.curve?.cands||[];return C.length?C.map(D=>`<a href="/turbine/${D.t}">${Ot(D.t)}</a> ${D.dev}% ${$t(D.判)}`).join(" | "):o("gen.no_cands")}),k=P(()=>o("gen.beta_note",{units:_.value.map(C=>`<a href="/turbine/${C.t}">${Ot(C.t)}</a>`).join(" / "),k:_.value.length?Math.round(Math.max(..._.value.map(C=>C.平均偏))/Math.max(f.value||0,.01)):"—",v:$t(s.value?.β_schedule?.判)})),O=P(()=>Object.entries(s.value?.尺子||{}).map(([C,D])=>({k:C,r:D.极差/D.σ}))),K=P(()=>({grid:{left:100,right:80,top:20,bottom:24},xAxis:{type:"value"},yAxis:{type:"category",data:O.value.map(C=>C.k)},series:[{type:"bar",data:O.value.map(C=>C.r),itemStyle:{color:"#0b5fa5"}}],__data__:[]})),Q=P(()=>l.value?.figs||[]);function Y(C){const D=C.months||C.x||[];return{grid:{left:56,right:20,top:28,bottom:40},legend:{top:0,textStyle:{fontSize:10}},xAxis:{type:"category",data:D},yAxis:{type:"value",scale:!0},series:(C.series||[]).map(M=>({name:String(M.name),type:"line",data:M.vals,connectNulls:!1})),__data__:[]}}return(C,D)=>(w(),E("section",null,[a("div",Bp,u(p(o)("gen.eyebrow")),1),a("div",Wp,[a("b",null,u(p(o)("gen.fixed_win")),1),at(" "+u(i.value?p(o)("gen.win_range",{span:i.value}):"")+" ",1),a("div",Up,u(p(o)("gen.win_why")),1)]),t.d.m9&&t.d.m9.err?(w(),E("div",Kp,[a("p",Vp,u(p(o)("flt.block_err",{k:"m9",e:p($t)(t.d.m9.err)})),1)])):yt("",!0),s.value?(w(),E("div",{key:1,class:"panel mb",style:jt(t.pending?"border-left:3px solid var(--accent)":"")},[a("h3",null,[at(u(p(o)("gen.ctrl"))+" ",1),a("span",Gp,u(p(o)("gen.ctrl_win",{win:p($t)(s.value.窗)})),1),t.pending?(w(),E("span",zp,u(p(o)("gen.recomputing_short")),1)):yt("",!0)]),a("div",Yp,[a("div",Jp,[a("div",Xp,u(p(o)("gen.cap")),1),Ft(Ke,{option:d.value,height:"170px"},null,8,["option"]),a("p",Zp,u(p(o)("gen.cap_note")),1)]),a("div",Qp,[a("div",th,u(p(o)("gen.beta")),1),Ft(Ke,{option:m.value,height:"170px"},null,8,["option"]),a("p",{class:"small muted",style:{"margin-top":"4px"},innerHTML:k.value},null,8,eh),a("div",sh,u(p(o)("gen.ruler")),1),Ft(Ke,{option:K.value,height:"170px"},null,8,["option"]),a("p",nh,u(p(o)("gen.ruler_note")),1)])])],4)):yt("",!0),n.value&&n.value.curve?(w(),E("div",lh,[a("h3",null,[at(u(p(o)("gen.cands"))+" ",1),a("span",ih,u(p(o)("gen.cands_meta",{note:p($t)(n.value.curve.note||""),s:t.d.sigma||n.value.curve.sigma})),1)]),a("p",{class:"small",innerHTML:v.value},null,8,ah)])):yt("",!0),a("div",oh,u(p(o)("gen.figs")),1),l.value&&l.value.err?(w(),E("div",rh,[a("p",ch,u(p(ht)(l.value.err)),1)])):l.value&&l.value.building?(w(),E("div",dh,[a("p",uh,[a("b",null,u(p(o)("gen.recomputing")),1),at(" "+u(p($t)(l.value.curves?.note||"")),1)]),D[0]||(D[0]=a("div",{class:"skel",style:{width:"60%","margin-top":"10px"}},null,-1)),D[1]||(D[1]=a("div",{class:"skel",style:{width:"80%","margin-top":"8px"}},null,-1))])):l.value?(w(),E("div",fh,[(w(!0),E(it,null,_t(Q.value,(M,W)=>(w(),E("div",{key:W,class:"panel"},[a("h3",null,[at(u(p($t)(M.title||"")),1),M.unit?(w(),E("span",mh,[a("span",vh,"("+u(p($t)(M.unit))+")",1)])):yt("",!0)]),Ft(Ke,{option:Y(M),height:"260px"},null,8,["option"]),a("div",_h,[(w(!0),E(it,null,_t(M.series||[],(dt,ct)=>(w(),E("span",{key:ct},[a("i",{style:jt(`background:${["var(--accent)","#D48A1E","#2E8B6A","#7C5295"][ct%4]}`)},null,4),at(u(String(dt.name)),1)]))),128))]),M.note?(w(),E("p",gh,u(p($t)(M.note)),1)):yt("",!0)]))),128))])):(w(),E("div",ph,[a("p",hh,u(p(o)("gen.loading")),1),D[2]||(D[2]=a("div",{class:"skel",style:{width:"60%","margin-top":"10px"}},null,-1)),D[3]||(D[3]=a("div",{class:"skel",style:{width:"80%","margin-top":"8px"}},null,-1))]))]))}}),yh={class:"eyebrow"},$h={class:"small muted"},xh=["href"],wh=["innerHTML"],kh={class:"panel mb"},Mh={class:"small muted"},Sh=["innerHTML"],Th={style:{display:"flex",gap:"8px","flex-wrap":"wrap",margin:"10px 0","align-items":"center"}},Eh=["placeholder","value"],Ch={class:"small muted",for:"askm"},Fh=["innerHTML"],Ah=["innerHTML"],Oh=["title"],qh={class:"muted"},Lh={class:"btn",id:"askgo"},jh={id:"askout",class:"small"},Dh=Pt({__name:"Decision",props:{d:{},apis:{}},setup(t){const e=t,s=[["equip","设备类"],["sched","检修排程决策"],["loss","损失分析"],["risk","安全风险预测"]],n={"qwen3:8b":"local","qwen3.8:27b":"local","qwen3:30b-a3b":"local","deepseek-r1:14b":"local","deepseek-r1:32b":"local","deepseek-chat":"cloud","kimi-fast":"cloud","qwen-plus":"cloud","deepseek-v4-pro":"cloud"},l=At("equip"),i=At(""),c=At(""),r=At(""),d=P(()=>e.apis?.["/detail/api/ask_models"]??e.apis?.["/api/ask_models"]??null),_=P(()=>d.value?d.value.models||{}:null),f=P(()=>!!d.value?.offline||!!d.value?.LOCAL_AI_DOWN),m=P(()=>o("cat."+l.value)),v=P(()=>s.map(([W])=>`<button class="pill ${W===l.value?"on":""}" data-cat="${W}">${o("cat."+W)}</button>`).join("")),k=P(()=>[1,2,3].map(W=>`<div class="qitem" data-q="${ht(o("cat."+l.value+".q"+W))}">${o("cat."+l.value+".q"+W)}</div>`).join("")),O=(W,dt)=>o("mdl."+W+"."+dt),K=W=>(O(W,"nm")||W)+(n[W]?" · "+o("mdl."+n[W]):"")+(O(W,"t")?" · "+O(W,"t"):""),Q=W=>n[W]?n[W]==="local"?o("mdl.zero_outbound"):`<span style="color:var(--warning)">${o("mdl.outbound_warn")}</span>`:`<span style="color:var(--warning)">${o("mdl.unknown_warn")}</span>`,Y=P(()=>{const W=_.value;if(W===null)return c.value;const dt=Object.keys(W);return!c.value||!dt.includes(c.value)?dt[0]||"":c.value}),C=P(()=>{const W=_.value;return W===null?'<option value="">…</option>':Object.keys(W).length?Object.keys(W).map(dt=>`<option value="${ht(dt)}" ${dt===Y?"selected":""}>${ht(K(dt))}</option>`).join(""):`<option value="">${f.value?o("ask.local_down"):o("ask.no_models")}</option>`}),D=P(()=>`/?lang=zh&win=${encodeURIComponent(String(e.d?.win||""))}`),M=P(()=>Y.value?Q(Y.value):"");return(W,dt)=>(w(),E("section",null,[a("div",yh,u(p(o)("dec.head")),1),a("p",$h,[at(u(p(o)("dec.classic"))+" ",1),a("a",{href:D.value},u(p(o)("ui.open_classic")),9,xh)]),ps(a("div",{style:{display:"flex",gap:"8px",margin:"10px 0 12px","flex-wrap":"wrap"},class:"unwrap-host",innerHTML:v.value},null,8,wh),[[p(Gn)]]),a("div",kh,[a("h3",null,u(p(o)("ask.common_q",{cat:m.value})),1),a("p",Mh,u(p(o)("cat."+l.value+".hint"))+u("。")+u(p(o)("ask.grounding")),1),a("div",{innerHTML:k.value},null,8,Sh),a("div",Th,[a("input",{id:"askq",type:"text",placeholder:p(ht)(p(o)("ask.placeholder",{cat:m.value})),value:i.value,style:{flex:"1","min-width":"280px"}},null,8,Eh),a("label",Ch,u(p(o)("ask.model")),1),a("select",{id:"askm",innerHTML:C.value},null,8,Fh),a("span",{id:"mdlnote",class:"small",innerHTML:M.value},null,8,Ah),a("label",{class:"small",style:{cursor:"pointer","white-space":"nowrap"},title:p(ht)(p(o)("ask.xrev_title"))},[dt[0]||(dt[0]=a("input",{type:"checkbox",id:"askxrev"},null,-1)),at(" "+u(p(o)("ask.xrev"))+" ",1),a("span",qh,u(p(o)("ask.xrev_note")),1)],8,Oh),a("button",Lh,u(p(o)("ask.go")),1)]),a("div",jh,u(r.value||p(o)("ask.idle")),1)])]))}}),Ph={class:"eyebrow"},Hh={class:"panel mb"},Rh={class:"small muted",style:{"font-weight":"400"}},Ih=["placeholder","value"],Nh={class:"btn","data-asst":"fault"},Bh={class:"small muted"},Wh=["innerHTML"],Uh={id:"asstOut_fault",style:{"margin-top":"10px"}},Kh={class:"panel mb"},Vh={class:"small muted",style:{"font-weight":"400"}},Gh=["innerHTML"],zh={class:"btn","data-asst":"prev"},Yh={id:"asstOut_prev",style:{"margin-top":"10px"}},Jh={class:"panel mb"},Xh={class:"small muted",style:{"font-weight":"400"}},Zh=["innerHTML"],Qh={class:"btn","data-asst":"tree"},tf={id:"asstOut_tree",style:{"margin-top":"10px"}},mn="display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:8px",ef=Pt({__name:"Assistant",setup(t){const e=["变桨","偏航","主轴承","齿轮箱","发电机","变流器","塔架与基础","主控与传感网","叶片与叶根"],s=["3225","3130","13902","10105","3224"],n=gs({fault:"",prev:"pitch",tree:"pitch",out:{fault:"",prev:"",tree:""}}),l=c=>e.map(r=>`<option value="${Rs(r)}" ${n[c]===Rs(r)?"selected":""}>${ye(r)}</option>`).join(""),i=P(()=>s.map(c=>`<a href="#" data-code="${c}">${c}</a>`).join(" · "));return(c,r)=>(w(),E("section",null,[a("div",Ph,u(p(o)("asst.head"))+" — "+u(p(o)("asst.head_note")),1),a("div",Hh,[a("h3",null,[at(u(p(o)("asst.corrective"))+" ",1),a("span",Rh,u(p(o)("asst.corrective_flow")),1)]),a("div",{style:mn},[a("input",{id:"asstIn_fault",placeholder:p(ht)(p(o)("asst.code_placeholder")),value:n.fault,style:{flex:"1 1 220px"}},null,8,Ih),a("button",Nh,u(p(o)("ui.query")),1),a("span",Bh,[at(u(p(o)("asst.common"))+" ",1),ps(a("span",{class:"unwrap-host",innerHTML:i.value},null,8,Wh),[[p(Gn)]])])]),a("div",Uh,u(n.out.fault),1)]),a("div",Kh,[a("h3",null,[at(u(p(o)("asst.preventive"))+" ",1),a("span",Vh,u(p(o)("asst.preventive_flow")),1)]),a("div",{style:mn},[a("select",{id:"asstIn_prev",style:{flex:"1 1 200px"},innerHTML:l("prev")},null,8,Gh),a("button",zh,u(p(o)("ui.query")),1)]),a("div",Yh,u(n.out.prev),1)]),a("div",Jh,[a("h3",null,[at(u(p(o)("asst.faulttree"))+" ",1),a("span",Xh,u(p(o)("asst.faulttree_flow")),1)]),a("div",{style:mn},[a("select",{id:"asstIn_tree",style:{flex:"1 1 200px"},innerHTML:l("tree")},null,8,Zh),a("button",Qh,u(p(o)("ui.query")),1)]),a("div",tf,u(n.out.tree),1)])]))}}),sf={class:"eyebrow"},nf={key:0,class:"panel"},lf={class:"small muted"},af={key:1,class:"panel"},of={class:"small",style:{color:"var(--critical)"}},rf={class:"panel mb"},cf={class:"small muted"},df={class:"small muted"},uf={class:"tblwrap"},pf={style:{"margin-top":"10px"}},hf={style:{width:"18%"}},ff={style:{width:"20%"}},mf={style:{width:"13%"}},vf={style:{width:"10%"}},_f={style:{width:"11%"}},gf={class:"small"},bf={class:"small num"},yf={key:0,class:"muted"},$f={class:"small muted"},xf={class:"small"},wf={class:"small"},kf={class:"small"},Mf={class:"muted"},Sf={style:{"margin-top":"3px"}},Tf={class:"muted",style:{"margin-top":"3px"}},Ef=Pt({__name:"System",props:{apis:{}},setup(t){const e=t,s=r=>String(r??""),n=P(()=>e.apis?.["/detail/api/maint_survey"]??e.apis?.["/api/maint_survey"]??null),l=[[["数据","Data"],"mt.layer_data","mt.layer_data_note","var(--accent)"],[["机理","Domain model","Mechanism"],"mt.layer_mech","mt.layer_mech_note","var(--warning)"]],i=P(()=>n.value?.rows||[]),c=P(()=>l.map(([r,d,_,f])=>({kn:d,kd:_,col:f,rs:i.value.filter(m=>r.includes(String(m.层)))})).filter(r=>r.rs.length));return(r,d)=>(w(),E("section",null,[a("div",sf,u(p(o)("mt.eyebrow")),1),n.value?n.value.error?(w(),E("div",af,[a("p",of,u(p($t)(n.value.error)),1)])):(w(),E(it,{key:2},[a("div",rf,[a("h3",null,u(p(o)("mt.head",{n:i.value.length})),1),a("p",cf,u(p(o)("mt.note")),1)]),(w(!0),E(it,null,_t(c.value,_=>(w(),E("div",{key:_.kn,class:"panel mb",style:jt(`border-left:3px solid ${_.col}`)},[a("h3",null,u(p(o)(_.kn))+" ("+u(_.rs.length)+")",1),a("p",df,u(p(o)(_.kd)),1),a("div",uf,[a("table",pf,[a("tr",null,[a("th",hf,u(p(o)("mt.src")),1),a("th",ff,u(p(o)("mt.cov")),1),a("th",mf,u(p(o)("mt.last")),1),a("th",vf,u(p(o)("mt.freq")),1),a("th",_f,u(p(o)("mt.resp")),1),a("th",null,u(p(o)("mt.how")),1)]),(w(!0),E(it,null,_t(_.rs,(f,m)=>(w(),E("tr",{key:m},[a("td",gf,[a("b",null,u(f.存在?"":"✗ ")+u(s(f.名)),1)]),a("td",bf,[at(u(s(f.覆盖)),1),f.条数?(w(),E("span",yf,u(p(o)("mt.rows_n",{n:p(kt)(f.条数)})),1)):yt("",!0)]),a("td",$f,u(p(ht)(f.末次更新||"—")),1),a("td",xf,u(s(f.频率)),1),a("td",wf,u(s(f.责任)),1),a("td",kf,[a("div",Mf,[at(u(p(o)("mt.put"))+" ",1),a("code",null,u(s(f.位置)),1)]),a("div",Sf,[at(u(p(o)("mt.run"))+" ",1),a("code",null,u(s(f.摄入)),1)]),a("div",Tf,u(s(f.说明)),1)])]))),128))])])],4))),128))],64)):(w(),E("div",nf,[a("p",lf,u(p(o)("mt.surveying")),1)]))]))}}),Cf={class:"eyebrow"},Ff={class:"panel mb noprint"},Af={style:{display:"flex",gap:"10px","align-items":"center","flex-wrap":"wrap","margin-bottom":"10px"}},Of={class:"small",style:{"font-weight":"600"}},qf=["data-preset"],Lf={id:"rptaud"},jf=["selected"],Df=["selected"],Pf={class:"btn quiet",id:"rptprint"},Hf={class:"btn quiet","data-export":"docx"},Rf={class:"btn quiet","data-export":"xlsx"},If={key:0,class:"small",style:{color:"var(--warning)","flex-basis":"100%"}},Nf={class:"small",style:{"font-weight":"600","margin-bottom":"7px"}},Bf={style:{"font-weight":"400",color:"var(--muted)"}},Wf=["innerHTML"],Uf={id:"rpthint",class:"small muted",style:{"margin-top":"9px","padding-top":"8px","border-top":"1px solid var(--line)","min-height":"19px"}},Kf={style:{"margin-top":"11px","padding-top":"10px","border-top":"1px solid var(--line)"}},Vf={class:"small",style:{"font-weight":"600","margin-bottom":"6px"}},Gf=["innerHTML"],zf={style:{display:"flex",gap:"8px","align-items":"center","flex-wrap":"wrap"}},Yf=["placeholder","value"],Jf=["innerHTML"],Xf=["disabled"],Zf={id:"rptout",class:"small muted",style:{"margin-top":"7px"}},Qf={key:0,class:"paper",style:{"text-align":"center",padding:"56px 40px"}},tm={class:"small muted"},em={key:1,class:"paper"},sm={class:"paper-hd"},nm={class:"paper-ti"},lm={class:"small muted",style:{"margin-top":"3px"}},im={class:"small muted",style:{"text-align":"right"}},am={key:0,class:"noprint",style:{display:"flex",gap:"3px","justify-content":"flex-end","margin-bottom":"-6px",position:"relative","z-index":"2"}},om=["data-k","disabled"],rm=["data-k","disabled"],cm=["data-k"],dm=["innerHTML"],um=["innerHTML"],pm={class:"paper-ft"},hm=Pt({__name:"Report",props:{d:{},apis:{}},setup(t){const e=t,s={month:["kpi","water","emon","blame","ram","pareto","units","plan","caliber"],week:["kpi","frate","units","plan","caliber"],topic:["units","chain","ram","loop","caliber"],year:["kpi","water","emon","ram","loop","caliber"],blank:[]},n={kpi:"gen",water:"gen",emon:"gen",blame:"gen",ram:"rel",parts:"rel",attrib:"rel",pareto:"flt",quad:"flt",frate:"flt",units:"unit",chain:"unit",loop:"unit",plan:"end",caliber:"end",narr:"end"},l={kpi:"▦",water:"▤",emon:"▥",blame:"◧",ram:"◈",parts:"▤",attrib:"▬",pareto:"▮",quad:"◇",frate:"▪",units:"☰",chain:"⛓",loop:"✓",plan:"✎",caliber:"⚑",narr:"✍"},i={"qwen3:8b":"local","qwen3.8:27b":"local","qwen3:30b-a3b":"local","deepseek-r1:14b":"local","deepseek-r1:32b":"local","deepseek-chat":"cloud","kimi-fast":"cloud","qwen-plus":"cloud","deepseek-v4-pro":"cloud"},c=["gen","rel","flt","unit","end"],r=gs({canvas:[],aud:"in",need:"",model:"",models:null,compose:null,narr:null,out:""}),d=P(()=>e.apis?.["/detail/api/ask_models"]??e.apis?.["/api/ask_models"]??null),_=P(()=>d.value?d.value.models||{}:r.models),f=P(()=>!!d.value?.offline),m=(ct,gt)=>o("mdl."+ct+"."+gt),v=ct=>(m(ct,"nm")||ct)+(i[ct]?" · "+o("mdl."+i[ct]):"")+(m(ct,"t")?" · "+m(ct,"t"):""),k=ct=>r.canvas.includes(ct),O=P(()=>r.compose===!0&&!!_.value&&Object.keys(_.value).length>0),K=P(()=>{const ct=_.value;return ct===null?'<option value="">…</option>':Object.keys(ct).length?Object.keys(ct).map(gt=>`<option value="${ht(gt)}" ${gt===D?"selected":""}>${ht(v(gt))}</option>`).join(""):`<option value="">${f.value?o("ask.local_down"):o("ask.no_models")}</option>`}),Q=P(()=>c.map(ct=>`<div class="small muted" style="text-align:right;white-space:nowrap">${o("rpt.g."+ct)}</div><div style="display:flex;gap:6px;flex-wrap:wrap">`+Object.keys(n).filter(gt=>n[gt]===ct).map(gt=>`<button class="pill ${k(gt)?"on":""}" data-block="${gt}" style="border-radius:7px;padding:5px 11px;font-size:12.5px;opacity:${k(gt)?1:.8}">${l[gt]} ${o("rpt.b."+gt+".nm")}${k(gt)?" ✓":""}</button>`).join("")+"</div>").join("")),Y=P(()=>""),C=ct=>"",D=P(()=>{const ct=_.value;if(ct===null)return r.model;const gt=Object.keys(ct);return!r.model||!gt.includes(r.model)?gt[0]||"":r.model}),M=P(()=>o("rpt.need_hint")+(D.value?i[D.value]==="local"?o("rpt.local_note"):`<span style="color:var(--warning)">${o("rpt.cloud_note")}</span>`:"")),W=P(()=>r.out?r.out:r.compose===!1?o("rpt.no_compose"):_.value&&!Object.keys(_.value).length?f.value?o("ask.local_down"):o("rpt.no_models"):""),dt=P(()=>(String(e.d?.fus?.数据时点||"").match(/\d{4}-\d{2}-\d{2}/)||[""])[0]);return(ct,gt)=>(w(),E("section",null,[a("div",Cf,u(p(o)("rpt.eyebrow")),1),a("div",Ff,[a("div",Af,[a("span",Of,u(p(o)("rpt.presets")),1),(w(!0),E(it,null,_t(Object.keys(s),Lt=>(w(),E("button",{key:Lt,class:"pill","data-preset":Lt},u(p(o)("rpt.preset."+Lt)),9,qf))),128)),gt[0]||(gt[0]=a("span",{style:{flex:"1"}},null,-1)),a("select",Lf,[a("option",{value:"in",selected:r.aud==="in"},u(p(o)("rpt.aud_in")),9,jf),a("option",{value:"up",selected:r.aud==="up"},u(p(o)("rpt.aud_up")),9,Df)]),a("button",Pf,u(p(o)("rpt.print")),1),a("button",Hf,u(p(o)("rpt.export_docx")),1),a("button",Rf,u(p(o)("rpt.export_xlsx")),1),r.aud==="up"?(w(),E("span",If,u(p(o)("rpt.up_note")),1)):yt("",!0)]),a("div",Nf,[at(u(p(o)("rpt.library"))+" ",1),a("span",Bf,u(p(o)("rpt.library_note",{n:r.canvas.length})),1)]),a("div",{style:{display:"grid","grid-template-columns":"auto 1fr",gap:"6px 12px","align-items":"center"},innerHTML:Q.value},null,8,Wf),a("div",Uf,u(p(o)("rpt.hint_idle")),1),a("div",Kf,[a("div",Vf,[at(u(p(o)("rpt.need_head"))+" ",1),a("span",{id:"rptmdlnote",style:{"font-weight":"400",color:"var(--muted)"},innerHTML:M.value},null,8,Gf)]),a("div",zf,[a("input",{id:"rptneed",placeholder:p(ht)(p(o)("rpt.need_ph")),value:r.need,style:{flex:"1 1 300px","min-width":"220px"}},null,8,Yf),a("select",{id:"rptmdl",innerHTML:K.value},null,8,Jf),a("button",{class:"btn",id:"rptgo",disabled:!O.value},u(p(o)("rpt.compose")),9,Xf)]),a("div",Zf,u(W.value),1)])]),r.canvas.length?(w(),E("div",em,[a("div",sm,[a("div",null,[a("div",nm,u(p(o)("app.brand"))+" · "+u(p(o)("rpt.paper_title")),1),a("div",lm,u(p(o)("rpt.paper_sub",{win:p(ke)(t.d.win),n:(t.d.kpi||{}).全场||38}))+u(r.aud==="up"?" | "+p(o)("rpt.up_tag"):""),1)]),a("div",im,u(p(o)("rpt.chapters",{n:r.canvas.length})),1)]),(w(!0),E(it,null,_t(r.canvas,(Lt,Kt)=>(w(),E(it,{key:Lt},[n[Lt]?(w(),E("div",am,[a("button",{class:"pill","data-mv":"up","data-k":Lt,disabled:Kt===0,style:{padding:"1px 8px","font-size":"11px",opacity:".7"}},"↑",8,om),a("button",{class:"pill","data-mv":"down","data-k":Lt,disabled:Kt===r.canvas.length-1,style:{padding:"1px 8px","font-size":"11px",opacity:".7"}},"↓",8,rm),a("button",{class:"pill","data-mv":"del","data-k":Lt,style:{padding:"1px 8px","font-size":"11px",opacity:".7"}},"×",8,cm)])):yt("",!0),n[Lt]?(w(),E("div",{key:1,innerHTML:C()},null,8,dm)):yt("",!0)],64))),128)),a("div",{innerHTML:Y.value},null,8,um),a("div",pm,[a("span",null,u(p(o)("rpt.foot_src"))+u(dt.value?" | "+p(o)("rpt.foot_asof",{d:dt.value}):""),1),a("span",null,u(p(o)("rpt.foot_trace"))+u(r.aud==="up"?" | "+p(o)("rpt.foot_deid"):""),1)])])):(w(),E("div",Qf,[a("div",tm,u(p(o)("rpt.preview_empty")),1)]))]))}}),fm={class:"kpis"},mm=["title"],vm=["innerHTML"],_m={key:1},gm={key:0},bm={class:"sechead"},ym={class:"meta"},$m={class:"meta"},xm={key:0,class:"card mb",style:{"margin-bottom":"10px"}},wm={class:"small",style:{color:"var(--warning)"}},km={class:"small muted"},Mm={class:"cards"},Sm=["id"],Tm={class:"head"},Em=["href"],Cm={class:"sys"},Fm={class:"evidence-detail"},Am={class:"why"},Om={class:"evid"},qm=["title"],Lm={key:1,class:"rv"},jm={key:0,class:"caveat"},Dm={class:"sechead"},Pm={class:"meta"},Hm={class:"legend"},Rm={class:"cells"},Im=["data-u","title"],Nm={key:1,class:"quiet",style:{padding:"10px"}},Bm={class:"nums"},Wm={class:"quiet"},Um={class:"sechead"},Km={class:"meta"},Vm={class:"systems"},Gm={class:"t"},zm=["href"],Ym={class:"bar"},Jm={class:"cnt"},Xm=Pt({__name:"Overview",props:{d:{}},setup(t){const e=t,s=P(()=>e.d?.fus||{}),n=P(()=>e.d?.m8?.mtbf||{}),l=P(()=>e.d?.control||{}),i=P(()=>{const C={};for(const D of l.value.states||[])C[D.k]=D.loss;return C}),c=P(()=>{const C=l.value,D=o("kpi.loss",{win:ke(e.d?.win)})+(i.value["停机(调度令)"]!=null?` · ${o("kpi.loss_dispatch",{n:kt(i.value["停机(调度令)"])})}`:"");return[{v:kt(C.avail,1),u:"%",l:o("kpi.avail",{win:ke(e.d?.win)}),k:C.avail>=95?"ok":"warn",ti:""},{v:kt(n.value.停机总时长h),u:"h",l:o("kpi.downtime",{n:kt(n.value.停机事件数)}),k:"warn",ti:""},{v:kt(n.value.MTBF_h),u:"h",l:o("kpi.mtbo"),k:"",ti:""},{v:kt(i.value.停机),u:"MWh",l:D,k:"",ti:""},{v:kt(i.value["限电·绑定"]),u:"MWh",l:o("kpi.curtail"),k:"",ti:""},{vRaw:`${kt(e.d?.kpi?.报警台)} <small>/ ${kt(e.d?.kpi?.全场)}</small>`,u:"",l:o("kpi.alarm_units"),k:e.d?.kpi?.报警台?"warn":"ok",ti:o("kpi.alarm_units.hint"),vHtml:!0}]}),r=P(()=>{const C={};for(const D of e.d?.watch||[])C[D.t]=D.why;return C}),d=P(()=>((s.value.链盘||{}).rows||[]).filter(C=>C.lvl==="bad"||C.lvl==="warn"));function _(C){const D=(r.value[C.t]||"").trim();if(D)return D;const M=Tl[C.stuck]||String(C.stuck||"").toLowerCase(),W=o(M==="evidence"?"step.site_records":"step."+(M||"evidence"));return o("ov.basis_fusion",{part:C.part||"—",done:C.done==null?"—":C.done,n:(C.steps||[]).length||"—",stuck:C.stuck?W:o("ov.all_steps_done"),srcs:(C.srcs||[]).join(" / ")||o("ov.no_srcs")})}function f(C){if(!C.stuck)return"";const D=Tl[C.stuck]||String(C.stuck||"").toLowerCase(),M=o(D==="evidence"?"step.site_records":"step."+(D||"evidence"));return o("step.stuck_at",{step:M})}const m=[["危险","critical"],["报警","warning"],["不可判","unknown"],["良好","good"],["优秀","excellent"]],v=P(()=>{const C=e.d?.sysdist||{};return Un.map(D=>{const M=C[D]||{},W=Object.values(M).reduce((dt,ct)=>dt+ct,0)||1;return{name:ye(D),slug:Rs(D),dist:M,n:W,seg:m.filter(([dt])=>M[dt]).map(([dt,ct])=>({k:dt,v:ct}))}})}),k=P(()=>s.value.矩阵||[]),O=P(()=>new Set(d.value.map(C=>C.t))),K={定论:"confirmed","准定论·预警":"near","候选·新发":"candidate_new",候选:"candidate","候选·记基线":"candidate_baseline",参考:"reference",INSUFFICIENT:"insufficient",正常:"normal",撤回:"withdrawn"},Q={candidate_new:"candidate",candidate_baseline:"candidate",normal:"reference"},Y=C=>{const D=K[String(C??"")];return D?Q[D]||D:""};return(C,D)=>(w(),E(it,null,[a("section",null,[a("div",fm,[(w(!0),E(it,null,_t(c.value,(M,W)=>(w(),E("div",{key:W,class:Wt(["kpi",M.k]),title:M.ti||void 0},[M.vHtml?(w(),E("b",{key:0,innerHTML:M.vRaw},null,8,vm)):(w(),E("b",_m,[at(u(M.v),1),M.u?(w(),E("small",gm,u(M.u),1)):yt("",!0)])),a("span",null,u(M.l),1)],10,mm))),128))])]),a("section",null,[a("div",bm,[a("h2",null,u(p(o)("ov.attention")),1),a("span",ym,u(p(o)("ov.attention_n",{n:d.value.length})),1),a("span",$m,u(p(o)("ov.ranked_by")),1)]),s.value.gap?(w(),E("div",xm,[a("p",wm,u(s.value.gap),1),a("p",km,u(p(o)("ov.fus_gap_hint")),1)])):yt("",!0),a("div",Mm,[(w(!0),E(it,null,_t(d.value,M=>(w(),E("div",{key:M.t,class:"card",id:`u-${M.t}`,style:jt(`--sev:var(--${p(Fl)[p(Ps)(M.ostate)||(M.lvl==="bad"?"bad":"warn")]})`)},[a("div",Tm,[a("a",{class:"unit",href:`/turbine/${M.t}`},u(p(Ot)(M.t)),9,Em),a("span",Cm,u(M.part||""),1),a("span",{class:Wt(["chip",p(Ps)(M.ostate)||(M.lvl==="bad"?"bad":"warn")])},u(p(El)(M.ostate||(M.lvl==="bad"?"危险":"报警"))),3)]),a("details",Fm,[a("summary",null,u(p(o)("ov.evidence")),1),a("div",Am,u(_(M)),1)]),a("div",Om,[M.estate?(w(),E("span",{key:0,class:Wt(["tier",Y(M.estate)]),title:p(o)("tier."+(K[M.estate]||"unknown"))},u(p(El)(M.estate)),11,qm)):yt("",!0),M.srcs&&M.srcs.length?(w(),E("span",Lm,u(M.srcs.length)+" sources",1)):yt("",!0)]),f(M)||M.next?(w(),E("div",jm,[a("b",null,u(p(o)("ov.caveat")),1),at(u(f(M))+u(f(M)&&M.next?" — ":"")+u(M.next||""),1)])):yt("",!0)],12,Sm))),128))])]),a("section",null,[a("div",Dm,[a("h2",null,u(p(o)("ov.strip")),1),a("span",Pm,u(p(o)("ov.strip_hint")),1),a("div",Hm,[(w(),E(it,null,_t(["bad","warn","unk","ok","ex"],M=>a("span",{key:M},[a("i",{style:jt(`background:var(--${p(Fl)[M]})`)},null,4),at(u(p(o)(p(Sn)(M))),1)])),64))])]),a("div",{class:"strip",style:jt(`--n:${k.value.length||38}`)},[a("div",Rm,[k.value.length?(w(!0),E(it,{key:0},_t(k.value,M=>(w(),E("div",{key:M.turbine,class:Wt(["cell",[p(Cl)(M),O.value.has(M.turbine)?"hot":""]]),"data-u":M.turbine,title:`${p(Ot)(M.turbine)} ${p(o)(p(Sn)(p(Cl)(M)))}`},null,10,Im))),128)):(w(),E("div",Nm,u(s.value.gap||p(o)("ov.fus_gap_hint")),1))]),a("div",Bm,[(w(!0),E(it,null,_t(k.value,M=>(w(),E("span",{key:`n-${M.turbine}`,class:Wt(O.value.has(M.turbine)?"hot":"")},u(p(Ot)(M.turbine).replace("#","")),3))),128))]),a("div",Wm,u(d.value.length?p(o)("ov.quiet",{n:Math.max(0,(k.value.length||38)-d.value.length)}):p(o)("ov.quiet_all",{n:k.value.length||38})),1)],4)]),a("section",null,[a("div",Um,[a("h2",null,u(p(o)("ov.systems")),1),a("span",Km,u(p(o)("ov.systems_hint")),1)]),a("div",Vm,[(w(!0),E(it,null,_t(v.value,M=>(w(),E("div",{key:M.name,class:"sysc"},[a("div",Gm,[a("b",null,u(M.name),1),a("a",{href:`#tab=component&sys=${encodeURIComponent(M.slug)}`},u(p(o)("ui.open")),9,zm)]),a("div",Ym,[(w(!0),E(it,null,_t(M.seg,W=>(w(),E("i",{key:W.k,style:jt(`width:${(M.dist[W.k]/M.n*100).toFixed(1)}%;background:var(--${W.v})`)},null,4))),128))]),a("div",Jm,[(w(!0),E(it,null,_t(M.seg,W=>(w(),E("span",{key:`c-${W.k}`},[a("i",{style:jt(`background:var(--${W.v})`)},null,4),at(u(M.dist[W.k]),1)]))),128))])]))),128))])])],64))}}),Zm={class:"wb-tabs"},Qm=["onClick"],tv={key:0,class:"todo"},ev={class:"page-head"},sv={class:"window-badge"},nv={key:15,class:"card"},lv={class:"hint"},iv=Pt({__name:"Workbench",props:{d:{},tab:{},sys:{},sub:{},cms:{},curves:{},apis:{}},emits:["tab","sub"],setup(t,{emit:e}){const s=t,n=e,l=P(()=>!un.includes(s.tab));return(i,c)=>(w(),E(it,null,[a("nav",Zm,[(w(!0),E(it,null,_t(p(Tr),r=>(w(),E("button",{key:r,class:Wt({on:r===t.tab}),onClick:d=>n("tab",r)},[at(u(p(o)("tab."+r)),1),p(un).includes(r)?yt("",!0):(w(),E("sup",tv,"迁移中"))],10,Qm))),128))]),a("div",ev,[a("h1",null,u(p(o)("tab."+t.tab)),1),a("span",sv,u(p(o)("win.label"))+" · "+u(p(ke)(t.d?.win)),1)]),t.tab==="overview"?(w(),Ht(Xm,{key:0,d:t.d},null,8,["d"])):t.tab==="energy"?(w(),Ht(xu,{key:1,d:t.d},null,8,["d"])):t.tab==="component"?(w(),Ht(zd,{key:2,d:t.d,sys:t.sys},null,8,["d","sys"])):t.tab==="fault"?(w(),Ht(jp,{key:3,d:t.d},null,8,["d"])):t.tab==="vibration"?(w(),Ht(Np,{key:4,d:t.d,sub:t.sub,cms:t.cms,onSub:c[0]||(c[0]=r=>n("sub",r))},null,8,["d","sub","cms"])):t.tab==="generation"?(w(),Ht(bh,{key:5,d:t.d,curves:t.curves,pending:!!t.d.m9_pending},null,8,["d","curves","pending"])):t.tab==="decision"?(w(),Ht(Dh,{key:6,d:t.d,apis:t.apis},null,8,["d","apis"])):t.tab==="assistant"?(w(),Ht(ef,{key:7,d:t.d},null,8,["d"])):t.tab==="system"?(w(),Ht(Ef,{key:8,apis:t.apis},null,8,["apis"])):t.tab==="report"?(w(),Ht(hm,{key:9,d:t.d,apis:t.apis},null,8,["d","apis"])):t.tab==="documents"?(w(),Ht(Kr,{key:10})):t.tab==="recalc"?(w(),Ht(nc,{key:11})):t.tab==="portal"?(w(),Ht(vc,{key:12})):t.tab==="portal_sec"?(w(),Ht(Tc,{key:13})):t.tab==="portal_src"?(w(),Ht(Ui,{key:14})):l.value?(w(),E("section",nv,[a("h2",null,[at(u(p(o)("tab."+t.tab))+" ",1),c[1]||(c[1]=a("small",null,"(本页签尚未迁移到 Vue)",-1))]),a("p",lv,[c[2]||(c[2]=at(" 迁移纪律:页签逐个搬,每搬一个就用 ",-1)),c[3]||(c[3]=a("code",null,"tools/render_parity.mjs",-1)),c[4]||(c[4]=at(" 与重构前页面 (现网 ",-1)),c[5]||(c[5]=a("code",null,"/detail/v2",-1)),at(")对拍文案/数值/类名序列,**通过后**才删对应的 Python 前端源码。 当前已迁移:"+u(p(un).join("、"))+"。 ",1)])])):yt("",!0)],64))}}),av=Vi(iv,[["__scopeId","data-v-bef855f5"]]),ov={key:1,class:"top"},rv={key:2},cv={key:0,class:"hint",style:{padding:"0 18px"}},dv={key:1,class:"hint",style:{padding:"0 18px",color:"var(--bad)"}},uv={key:2,class:"card"},pv=Pt({__name:"App",setup(t){const e=At(location.hash.replace("#","")==="workbench"?"workbench":"portal");function s(f){e.value=f;try{location.hash=f==="portal"?"":f}catch{}}const n=At("overview"),l=At(null),i=At(null),c=At(""),r=At(!1),d=At("");async function _(){r.value=!0,d.value="";const f=c.value?`?win=${encodeURIComponent(c.value)}`:"",m=await Wi("fleet",{method:"GET"});if(f)try{const v=await fetch("/api/fleet"+f);i.value=await v.json()}catch(v){d.value=v instanceof Error?v.message:String(v)}else m.ok?(i.value=m.data,i.value?.win&&(c.value=i.value.win)):d.value=m.error||`HTTP ${m.status}`;r.value=!1}return is(c,f=>{f&&f!==i.value?.win&&_()}),Be(_),(f,m)=>(w(),E(it,null,[e.value==="portal"?(w(),Ht(Ui,{key:0})):(w(),E("header",ov,[m[5]||(m[5]=a("div",{class:"brand"},"观澜 · 风电数据分析与决策支持",-1)),a("nav",null,[a("button",{class:Wt({on:e.value==="workbench"}),onClick:m[0]||(m[0]=v=>s("workbench"))},"工作台",2),a("button",{class:Wt({on:e.value==="smoke"}),onClick:m[1]||(m[1]=v=>s("smoke"))},"契约自检",2),a("button",{class:Wt({on:e.value==="about"}),onClick:m[2]||(m[2]=v=>s("about"))},"关于本前端",2)])])),e.value!=="portal"?(w(),E("main",rv,[e.value==="workbench"?(w(),E(it,{key:0},[r.value?(w(),E("p",cv,"取数中(/api/fleet)…")):d.value?(w(),E("p",dv,"取数失败:"+u(d.value),1)):i.value?(w(),Ht(av,{key:2,d:i.value,tab:n.value,sub:l.value,onTab:m[3]||(m[3]=v=>n.value=v),onSub:m[4]||(m[4]=v=>l.value=v)},null,8,["d","tab","sub"])):yt("",!0)],64)):e.value==="smoke"?(w(),Ht(Mr,{key:1})):(w(),E("section",uv,[...m[6]||(m[6]=[Do("<h2>关于本前端</h2><ul><li>技术栈:<b>Vue 3 + Vite + TypeScript + Node.js</b>(用户令 2026-09-29)</li><li>与后端交互:只走网关一个源站,路径与形状以 <code>app_backEnd/app_backEnd_guanlan/contract/http_api_v1.json</code> 冻契约为准</li><li>数据来源:与重构前 <code>/detail/v2</code> 同一个接口 <code>/api/fleet?win=</code></li><li>迁移纪律:页签逐个搬,与重构前页面对拍通过后才删对应 Python 源码</li></ul>",2)])]))])):yt("",!0)],64))}});gr(pv).mount("#app");
|