koishi-plugin-oni-sync-bot 0.9.0 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +2 -2
- package/dist/style.css +1 -1
- package/lib/index.js +349 -67
- package/lib/plugins/databaseExtension.d.ts +2 -0
- package/lib/plugins/synccontributor.d.ts +15 -0
- package/lib/sync/pageSync.d.ts +18 -2
- package/lib/utils/tools.d.ts +5 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{defineComponent as I,openBlock as g,createElementBlock as $,createElementVNode as a,ref as O,computed as w,watch as ue,onMounted as tt,resolveComponent as C,createBlock as R,withCtx as c,createVNode as r,unref as m,createTextVNode as N,Fragment as ie,renderList as $e,normalizeClass as D,toDisplayString as B,createCommentVNode as L,reactive as Vt,warn as It,inject as te,isRef as Mt,getCurrentInstance as ce,provide as Bt,renderSlot as be,mergeProps as Pt,Transition as nt,withDirectives as Ne,normalizeStyle as ot,vShow as lt,shallowReactive as Lt,resolveDynamicComponent as Dt,withModifiers as Rt,isVNode as at,render as Ae,resolveDirective as jt}from"vue";import{store as Ft,Time as At,message as Se,send as se}from"@koishijs/client";import{isClient as Ve,useEventListener as Ut,useResizeObserver as Kt,useTimeoutFn as Gt}from"@vueuse/core";/*! Element Plus Icons Vue v2.3.2 */var Ht=I({name:"Bottom",__name:"bottom",setup(e){return(n,t)=>(g(),$("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[a("path",{fill:"currentColor",d:"M544 805.888V168a32 32 0 1 0-64 0v637.888L246.656 557.952a30.72 30.72 0 0 0-45.312 0 35.52 35.52 0 0 0 0 48.064l288 306.048a30.72 30.72 0 0 0 45.312 0l288-306.048a35.52 35.52 0 0 0 0-48 30.72 30.72 0 0 0-45.312 0L544 805.824z"})]))}}),qt=Ht,Wt=I({name:"CircleCloseFilled",__name:"circle-close-filled",setup(e){return(n,t)=>(g(),$("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[a("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 393.664L407.936 353.6a38.4 38.4 0 1 0-54.336 54.336L457.664 512 353.6 616.064a38.4 38.4 0 1 0 54.336 54.336L512 566.336 616.064 670.4a38.4 38.4 0 1 0 54.336-54.336L566.336 512 670.4 407.936a38.4 38.4 0 1 0-54.336-54.336z"})]))}}),Zt=Wt,Jt=I({name:"Close",__name:"close",setup(e){return(n,t)=>(g(),$("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[a("path",{fill:"currentColor",d:"M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z"})]))}}),Yt=Jt,Xt=I({name:"InfoFilled",__name:"info-filled",setup(e){return(n,t)=>(g(),$("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[a("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896.064A448 448 0 0 1 512 64m67.2 275.072c33.28 0 60.288-23.104 60.288-57.344s-27.072-57.344-60.288-57.344c-33.28 0-60.16 23.104-60.16 57.344s26.88 57.344 60.16 57.344M590.912 699.2c0-6.848 2.368-24.64 1.024-34.752l-52.608 60.544c-10.88 11.456-24.512 19.392-30.912 17.28a12.99 12.99 0 0 1-8.256-14.72l87.68-276.992c7.168-35.136-12.544-67.2-54.336-71.296-44.096 0-108.992 44.736-148.48 101.504 0 6.784-1.28 23.68.064 33.792l52.544-60.608c10.88-11.328 23.552-19.328 29.952-17.152a12.8 12.8 0 0 1 7.808 16.128L388.48 728.576c-10.048 32.256 8.96 63.872 55.04 71.04 67.84 0 107.904-43.648 147.456-100.416z"})]))}}),Qt=Xt,en=I({name:"Plus",__name:"plus",setup(e){return(n,t)=>(g(),$("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[a("path",{fill:"currentColor",d:"M480 480V128a32 32 0 0 1 64 0v352h352a32 32 0 1 1 0 64H544v352a32 32 0 1 1-64 0V544H128a32 32 0 0 1 0-64z"})]))}}),tn=en,nn=I({name:"Refresh",__name:"refresh",setup(e){return(n,t)=>(g(),$("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[a("path",{fill:"currentColor",d:"M771.776 794.88A384 384 0 0 1 128 512h64a320 320 0 0 0 555.712 216.448H654.72a32 32 0 1 1 0-64h149.056a32 32 0 0 1 32 32v148.928a32 32 0 1 1-64 0v-50.56zM276.288 295.616h92.992a32 32 0 0 1 0 64H220.16a32 32 0 0 1-32-32V178.56a32 32 0 0 1 64 0v50.56A384 384 0 0 1 896.128 512h-64a320 320 0 0 0-555.776-216.384z"})]))}}),on=nn,ln=I({name:"SuccessFilled",__name:"success-filled",setup(e){return(n,t)=>(g(),$("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[a("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.27 38.27 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"})]))}}),an=ln,sn=I({name:"Top",__name:"top",setup(e){return(n,t)=>(g(),$("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[a("path",{fill:"currentColor",d:"M572.235 205.282v600.365a30.118 30.118 0 1 1-60.235 0V205.282L292.382 438.633a28.913 28.913 0 0 1-42.646 0 33.43 33.43 0 0 1 0-45.236l271.058-288.045a28.913 28.913 0 0 1 42.647 0L834.5 393.397a33.43 33.43 0 0 1 0 45.176 28.913 28.913 0 0 1-42.647 0l-219.618-233.23z"})]))}}),rn=sn,un=I({name:"WarningFilled",__name:"warning-filled",setup(e){return(n,t)=>(g(),$("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[a("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 192a58.43 58.43 0 0 0-58.24 63.744l23.36 256.384a35.072 35.072 0 0 0 69.76 0l23.296-256.384A58.43 58.43 0 0 0 512 256m0 512a51.2 51.2 0 1 0 0-102.4 51.2 51.2 0 0 0 0 102.4"})]))}}),cn=un;const dn={class:"filter-container"},pn={class:"filter-row"},fn={class:"button-group"},mn={key:0,class:"empty-state"},vn="yyyy-MM-dd hh:mm:ss",gn=I({__name:"page",setup(e){const n=O(),t=O("all"),o=O(""),s=O([]);function d(T){const k=At.template(vn,new Date(T.timestamp)),p=T.type.toUpperCase(),x=T.content.replace(/\u001b\[[0-9;]*m/g,"");return`[${k}] [${p}] ${x}`}const i=w(()=>s.value.filter(T=>!T.includes("[ERROR]")&&!T.includes("[WARN]"))),l=w(()=>s.value.filter(T=>T.includes("[ERROR]")||T.includes("[WARN]"))),f=w(()=>{switch(t.value){case"normal":return i.value;case"error":return l.value;default:return s.value}}),b=w(()=>{if(!o.value.trim())return f.value;const T=o.value.toLowerCase();return f.value.filter(k=>k.toLowerCase().includes(T))});function _(T){return T.includes("[ERROR]")?"log-error":T.includes("[WARN]")?"log-warn":T.includes("[INFO]")?"log-info":""}const h=()=>{n.value&&(n.value.scrollTop=0)},S=()=>{n.value&&(n.value.scrollTop=n.value.scrollHeight)};return ue(()=>Ft.onilogs,T=>{T&&(s.value=T.map(d))},{deep:true,immediate:true}),ue(()=>s.value.length,()=>{setTimeout(S,0)}),tt(()=>{S()}),(T,k)=>{const p=C("el-tab-pane"),x=C("el-tabs"),z=C("el-input"),j=C("el-icon"),U=C("el-button"),V=C("k-layout");return g(),R(V,null,{default:c(()=>[a("div",dn,[r(x,{modelValue:t.value,"onUpdate:modelValue":k[0]||(k[0]=M=>t.value=M),class:"log-tabs"},{default:c(()=>[r(p,{name:"all",label:"全部日志"}),r(p,{name:"normal",label:"正常日志"}),r(p,{name:"error",label:"错误/警告"})]),_:1},8,["modelValue"]),a("div",pn,[r(z,{modelValue:o.value,"onUpdate:modelValue":k[1]||(k[1]=M=>o.value=M),placeholder:"搜索日志内容...",clearable:"",class:"filter-input"},null,8,["modelValue"]),a("div",fn,[r(U,{size:"small",onClick:h},{default:c(()=>[r(j,null,{default:c(()=>[r(m(rn))]),_:1}),k[2]||(k[2]=N(" 顶部 ",-1))]),_:1}),r(U,{size:"small",onClick:S},{default:c(()=>[r(j,null,{default:c(()=>[r(m(qt))]),_:1}),k[3]||(k[3]=N(" 底部 ",-1))]),_:1})])])]),a("div",{class:"log-container",ref_key:"scrollRef",ref:n},[(g(true),$(ie,null,$e(b.value,(M,q)=>(g(),$("div",{key:q,class:"log-line"},[a("pre",{class:D(_(M))},B(M),3)]))),128)),b.value.length===0?(g(),$("div",mn,[...k[4]||(k[4]=[a("p",null,"暂无日志",-1)])])):L("v-if",true)],512)]),_:1})}}}),fe=(e,n)=>{const t=e.__vccOpts||e;for(const[o,s]of n)t[o]=s;return t},_n=fe(gn,[["__scopeId","data-v-62639236"]]),st=10,yn=2e4,hn=1.33,H={steamEngine:2e3,oilEngine:200,hydrogenEngine:500,biodieselEngine:200,CommandModule:200,RoboPilotCommandModule:200,SolidBooster:1e3,LiquidFuelTank:100,OxidizerTank:100,OxidizerTankLiquid:100,CargoBay:2e3,GasCargoBay:2e3,LiquidCargoBay:2e3,SpecialCargoBay:2e3,TouristModule:200,ResearchModule:200,person:30},ge={steam:20,oil:40,hydrogen:60,biodiesel:50,booster:12e3},ke={steam:900,fuel:900,oxygen:2700},bn={steam:"steamEngine",oil:"oilEngine",hydrogen:"hydrogenEngine",biodiesel:"biodieselEngine"},Cn={ResearchModule:"研究舱",CargoBay:"固体货舱",GasCargoBay:"气体货舱",LiquidCargoBay:"液体货舱",SpecialCargoBay:"生物货舱",TouristModule:"观光舱",RoboPilotCommandModule:"机器驾驶舱"};function rt(e){return Math.ceil(Math.max(e,Math.pow(e/300,3.2)))}function wn(e){const n={};for(const[t,o]of Object.entries(e))typeof o=="number"&&o>=0&&(n[t]=o);return n}function xn(e){let n=H.CommandModule;for(const t in e)Object.prototype.hasOwnProperty.call(e,t)&&(n+=(H[t]||0)*e[t]);return n}function Oe(e){return e.length===0?[]:(e.sort((n,t)=>n.weight-t.weight),[e[0]])}function Sn(e,n){e+=H.steamEngine;const t=[];for(let o=0;o<=st;o++){const s=e+H.SolidBooster*o,d=ge.booster*o;for(let i=0;i<=ke.steam;i++){const l=s+i,f=d+ge.steam*i,b=rt(l),_=f-b;if(_>=n){t.push({capacity:i,booster:o,weight:l,mergedDistance:f,punish:b,finalDistance:_});break}}}return Oe(t)}function Tn(e,n,t,o,s,d,i,l){const f=Math.ceil(e/ke.fuel),b=Math.ceil(e/ke.oxygen),_=l==="liquid"?H.OxidizerTankLiquid:H.OxidizerTank,h=t+H.LiquidFuelTank*f+_*b,S=e*2,T=h+S,k=Math.floor(o+s*e*d),p=rt(T),x=k-p;return x<i?{isValid:false}:{isValid:true,solution:{capacity:e,booster:n,fuelCount:f,oxygenCount:b,dryWeight:h,wetWeight:S,weight:T,mergedDistance:k,punish:p,finalDistance:x}}}function $n(e,n,t,o,s){const d=ge[e],i=o==="liquid"?hn:1;n+=H[bn[e]];const l=[];for(let f=0;f<=st;f++){const b=n+H.SolidBooster*f,_=ge.booster*f;for(let h=0;h<=yn;h+=10){const S=Tn(h,f,b,_,d,i,t,o);if(S.isValid){l.push(S.solution);break}}}if(l.length===0)return[];if(!s){const f=new Map;for(const b of l){const _=b.fuelCount;(!f.has(_)||f.get(_).weight>b.weight)&&f.set(_,b)}return Oe(Array.from(f.values()))}return Oe(l)}function kn(e){const{type:n,distance:t,oxygenType:o,allowWaste:s,...d}=e,i=wn(d),l=xn(i);return n==="steam"?Sn(l,t):$n(n,l,t,o,s)}const On={class:"rocket-calculator sci-fi-bg"},En={class:"content-layout"},zn={class:"config-section"},Nn={class:"distance-control"},Vn={class:"distance-step-selector"},In={class:"distance-input-wrapper"},Mn={class:"distance-value"},Bn={class:"oxidizer-hint"},Pn={class:"config-section"},Ln={class:"modules-grid"},Dn={class:"module-header"},Rn={class:"module-name"},jn={key:0,class:"empty-state"},Fn={key:1,class:"empty-state"},An={class:"key-stats"},Un={class:"stat-item primary"},Kn={class:"stat-value"},Gn={class:"stat-item success"},Hn={class:"stat-value"},qn={class:"stat-item warning"},Wn={class:"stat-value"},Zn={class:"detail-stats"},Jn={class:"detail-grid"},Yn={class:"detail-item"},Xn={class:"detail-label"},Qn={class:"detail-value"},eo={class:"detail-item"},to={class:"detail-value"},no={key:0,class:"detail-item"},oo={class:"detail-value"},lo={key:1,class:"detail-item"},ao={class:"detail-value"},so={class:"data-table-section"},ro={class:"table-wrapper"},io=I({__name:"calculator",setup(e){const n=w(()=>{const i=[];for(let l=1e4;l<=19e4;l+=1e4)i.push(l);return i}),t=Vt({type:"steam",distance:1e4,oxygenType:"solid",allowWaste:false,ResearchModule:0,CargoBay:0,GasCargoBay:0,LiquidCargoBay:0,SpecialCargoBay:0,TouristModule:0,RoboPilotCommandModule:0}),o=O(null),s=()=>{try{const i=kn(t);o.value=i,i.length>0?Se.success("解算完成!已收敛到最优解"):Se.warning("解算失败,无解空间")}catch(i){Se.error("解算器异常"),console.error(i)}},d=()=>{t.type="steam",t.distance=1e4,t.oxygenType="solid",t.ResearchModule=0,t.CargoBay=0,t.GasCargoBay=0,t.LiquidCargoBay=0,t.SpecialCargoBay=0,t.TouristModule=0,t.RoboPilotCommandModule=0,o.value=null};return(i,l)=>{const f=C("el-option"),b=C("el-select"),_=C("el-form-item"),h=C("el-button"),S=C("el-radio-button"),T=C("el-radio-group"),k=C("el-form"),p=C("el-input-number"),x=C("k-card"),z=C("el-divider"),j=C("el-table-column"),U=C("el-table");return g(),$("div",On,[L(" 背景装饰网格 "),l[32]||(l[32]=a("div",{class:"grid-overlay"},null,-1)),r(x,{class:"header-card sci-fi-card"},{default:c(()=>[l[29]||(l[29]=a("div",{class:"header-glow"},null,-1)),l[30]||(l[30]=a("h1",{class:"sci-fi-title"},"ONI ROCKET CALCULATOR",-1)),l[31]||(l[31]=a("p",{class:"sci-fi-subtitle"},"缺氧火箭最优配置解算系统 · 基于官方物理引擎",-1)),a("div",En,[L(" 输入控制台 "),r(x,{class:"form-card sci-fi-card"},{default:c(()=>[l[9]||(l[9]=a("div",{class:"card-header-line"},null,-1)),L(" 主配置 "),a("div",zn,[l[6]||(l[6]=a("h3",{class:"section-title"},"【核心参数】",-1)),r(k,{model:t,size:"large",class:"sci-fi-form","label-position":"top"},{default:c(()=>[r(_,{label:"引擎类型"},{default:c(()=>[r(b,{modelValue:t.type,"onUpdate:modelValue":l[0]||(l[0]=V=>t.type=V),style:{width:"100%"},class:"sci-fi-select"},{default:c(()=>[r(f,{label:"蒸汽引擎",value:"steam"}),r(f,{label:"石油引擎",value:"oil"}),r(f,{label:"液氢引擎",value:"hydrogen"}),r(f,{label:"生物柴油引擎",value:"biodiesel"})]),_:1},8,["modelValue"])]),_:1}),r(_,{label:"目标轨道"},{default:c(()=>[a("div",Nn,[L(" 10000km 一档的步进选择器 "),a("div",Vn,[(g(true),$(ie,null,$e(n.value,V=>(g(),R(h,{key:V,class:D(["step-btn",{active:t.distance===V}]),onClick:M=>t.distance=V},{default:c(()=>[N(B(V/1e3)+"k ",1)]),_:2},1032,["class","onClick"]))),128))]),a("div",In,[l[2]||(l[2]=a("span",{class:"distance-label"},"当前:",-1)),a("span",Mn,B(t.distance.toLocaleString()),1),l[3]||(l[3]=a("span",{class:"unit"},"km",-1))])])]),_:1}),t.type!=="steam"?(g(),R(_,{key:0,label:"氧化剂"},{default:c(()=>[r(T,{modelValue:t.oxygenType,"onUpdate:modelValue":l[1]||(l[1]=V=>t.oxygenType=V),class:"sci-fi-radio-group"},{default:c(()=>[r(S,{label:"solid"},{default:c(()=>[...l[4]||(l[4]=[N("氧石",-1)])]),_:1}),r(S,{label:"liquid"},{default:c(()=>[...l[5]||(l[5]=[N("液氧",-1)])]),_:1})]),_:1},8,["modelValue"]),a("div",Bn,[a("span",{class:D(["hint-item",{active:t.oxygenType==="solid"}])},"1.0x 效率",2),a("span",{class:D(["hint-item",{active:t.oxygenType==="liquid"}])},"1.33x 效率",2)])]),_:1})):L("v-if",true)]),_:1},8,["model"])]),l[10]||(l[10]=a("div",{class:"divider-line"},null,-1)),L(" 可选模块 "),a("div",Pn,[l[8]||(l[8]=a("h3",{class:"section-title"},"【载荷配置】",-1)),r(k,{model:t,size:"large",class:"modules-form","label-position":"top"},{default:c(()=>[a("div",Ln,[(g(true),$(ie,null,$e(m(Cn),(V,M)=>(g(),$("div",{key:M,class:"module-item"},[a("div",Dn,[a("span",Rn,B(V),1)]),r(p,{modelValue:t[M],"onUpdate:modelValue":q=>t[M]=q,min:0,max:20,class:"module-input"},null,8,["modelValue","onUpdate:modelValue"])]))),128))]),r(_,{class:"calculate-btn-wrapper"},{default:c(()=>[r(h,{onClick:s,class:"sci-fi-calculate-btn"},{default:c(()=>[...l[7]||(l[7]=[a("span",{class:"btn-text"},"▶ 执行解算",-1),a("span",{class:"btn-glow"},null,-1)])]),_:1})]),_:1})]),_:1},8,["model"])])]),_:1}),L(" 结果显示面板 "),r(x,{class:"result-card sci-fi-card"},{default:c(()=>[l[28]||(l[28]=a("div",{class:"card-header-line"},null,-1)),o.value?o.value.length===0?(g(),$("div",Fn,[l[13]||(l[13]=a("div",{class:"empty-icon"},"⚠️",-1)),l[14]||(l[14]=a("p",{class:"empty-text error"},"解算失败",-1)),l[15]||(l[15]=a("p",{class:"empty-hint"},"无法找到满足条件的配置,请尝试减少载荷",-1)),r(h,{onClick:d,class:"sci-fi-reset-btn"},{default:c(()=>[...l[12]||(l[12]=[N("重置参数",-1)])]),_:1})])):(g(),$(ie,{key:2},[l[27]||(l[27]=a("div",{class:"result-header"},[a("h3",{class:"result-title"},"✅ 最优解算结果"),a("div",{class:"result-status"},[a("span",{class:"status-dot"}),a("span",null,"CONVERGED")])],-1)),a("div",An,[a("div",Un,[l[17]||(l[17]=a("div",{class:"stat-label"},"总起飞重量",-1)),a("div",Kn,[N(B(o.value[0].weight.toLocaleString())+" ",1),l[16]||(l[16]=a("span",{class:"stat-unit"},"kg",-1))])]),a("div",Gn,[l[19]||(l[19]=a("div",{class:"stat-label"},"预计射程",-1)),a("div",Hn,[N(B(o.value[0].finalDistance.toLocaleString())+" ",1),l[18]||(l[18]=a("span",{class:"stat-unit"},"km",-1))])]),a("div",qn,[l[21]||(l[21]=a("div",{class:"stat-label"},"质量惩罚",-1)),a("div",Wn,[N(B(o.value[0].punish.toLocaleString())+" ",1),l[20]||(l[20]=a("span",{class:"stat-unit"},"km",-1))])])]),r(z,{class:"sci-fi-divider"}),a("div",Zn,[l[25]||(l[25]=a("h4",{class:"detail-title"},"【配置详情】",-1)),a("div",Jn,[a("div",Yn,[a("span",Xn,B(t.type==="steam"?"蒸汽填充量":"燃料填充量"),1),a("span",Qn,B(o.value[0].capacity.toLocaleString())+" kg",1)]),a("div",eo,[l[22]||(l[22]=a("span",{class:"detail-label"},"助推器数量",-1)),a("span",to,B(o.value[0].booster)+" 个",1)]),o.value[0].fuelCount!==void 0?(g(),$("div",no,[l[23]||(l[23]=a("span",{class:"detail-label"},"燃料舱数量",-1)),a("span",oo,B(o.value[0].fuelCount)+" 个",1)])):L("v-if",true),o.value[0].oxygenCount!==void 0?(g(),$("div",lo,[l[24]||(l[24]=a("span",{class:"detail-label"},"氧化剂舱数量",-1)),a("span",ao,B(o.value[0].oxygenCount)+" 个",1)])):L("v-if",true)])]),r(z,{class:"sci-fi-divider"}),a("div",so,[l[26]||(l[26]=a("h4",{class:"detail-title"},"【原始数据】",-1)),a("div",ro,[r(U,{data:o.value,stripe:"",class:"sci-fi-table"},{default:c(()=>[r(j,{prop:"weight",label:"总重(kg)",sortable:""}),r(j,{prop:"finalDistance",label:"射程(km)",sortable:""}),r(j,{prop:"booster",label:"助推器"}),r(j,{prop:"fuelCount",label:"燃料舱"}),r(j,{prop:"oxygenCount",label:"氧化剂舱"})]),_:1},8,["data"])])])],64)):(g(),$("div",jn,[...l[11]||(l[11]=[a("div",{class:"scan-line"},null,-1),a("div",{class:"empty-icon"},"📡",-1),a("p",{class:"empty-text"},"等待输入参数...",-1),a("p",{class:"empty-hint"},"请配置核心参数与载荷",-1)])]))]),_:1})])]),_:1})])}}}),uo=fe(io,[["__scopeId","data-v-3e8f9409"]]),co={};function po(e,n){const t=C("k-slot"),o=C("el-scrollbar"),s=C("k-layout");return g(),R(s,null,{default:c(()=>[r(o,{class:"scrollbar"},{default:c(()=>[r(t,{name:"calculator"})]),_:1})]),_:1})}const fo=fe(co,[["render",po],["__scopeId","data-v-7f2607d9"]]),mo={};function vo(e,n){const t=C("k-slot"),o=C("el-scrollbar"),s=C("k-layout");return g(),R(s,null,{default:c(()=>[r(o,{class:"scrollbar"},{default:c(()=>[r(t,{name:"onitodos"})]),_:1})]),_:1})}const go=fe(mo,[["render",vo],["__scopeId","data-v-4a10404d"]]);/**
|
|
1
|
+
import{defineComponent as I,openBlock as g,createElementBlock as $,createElementVNode as a,ref as O,computed as w,watch as he,onMounted as tt,resolveComponent as C,createBlock as R,withCtx as c,createVNode as r,unref as m,createTextVNode as N,Fragment as ie,renderList as $e,normalizeClass as D,toDisplayString as B,createCommentVNode as L,reactive as Vt,warn as It,inject as te,isRef as Mt,getCurrentInstance as ue,provide as Bt,renderSlot as be,mergeProps as Pt,Transition as nt,withDirectives as Ne,normalizeStyle as ot,vShow as lt,shallowReactive as Lt,resolveDynamicComponent as Dt,withModifiers as Rt,isVNode as at,render as Ae,resolveDirective as jt}from"vue";import{store as Ft,Time as At,message as Se,send as se}from"@koishijs/client";import{isClient as Ve,useEventListener as Ut,useResizeObserver as Kt,useTimeoutFn as Gt}from"@vueuse/core";/*! Element Plus Icons Vue v2.3.2 */var Ht=I({name:"Bottom",__name:"bottom",setup(e){return(n,t)=>(g(),$("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[a("path",{fill:"currentColor",d:"M544 805.888V168a32 32 0 1 0-64 0v637.888L246.656 557.952a30.72 30.72 0 0 0-45.312 0 35.52 35.52 0 0 0 0 48.064l288 306.048a30.72 30.72 0 0 0 45.312 0l288-306.048a35.52 35.52 0 0 0 0-48 30.72 30.72 0 0 0-45.312 0L544 805.824z"})]))}}),qt=Ht,Wt=I({name:"CircleCloseFilled",__name:"circle-close-filled",setup(e){return(n,t)=>(g(),$("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[a("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 393.664L407.936 353.6a38.4 38.4 0 1 0-54.336 54.336L457.664 512 353.6 616.064a38.4 38.4 0 1 0 54.336 54.336L512 566.336 616.064 670.4a38.4 38.4 0 1 0 54.336-54.336L566.336 512 670.4 407.936a38.4 38.4 0 1 0-54.336-54.336z"})]))}}),Zt=Wt,Jt=I({name:"Close",__name:"close",setup(e){return(n,t)=>(g(),$("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[a("path",{fill:"currentColor",d:"M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z"})]))}}),Yt=Jt,Xt=I({name:"InfoFilled",__name:"info-filled",setup(e){return(n,t)=>(g(),$("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[a("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896.064A448 448 0 0 1 512 64m67.2 275.072c33.28 0 60.288-23.104 60.288-57.344s-27.072-57.344-60.288-57.344c-33.28 0-60.16 23.104-60.16 57.344s26.88 57.344 60.16 57.344M590.912 699.2c0-6.848 2.368-24.64 1.024-34.752l-52.608 60.544c-10.88 11.456-24.512 19.392-30.912 17.28a12.99 12.99 0 0 1-8.256-14.72l87.68-276.992c7.168-35.136-12.544-67.2-54.336-71.296-44.096 0-108.992 44.736-148.48 101.504 0 6.784-1.28 23.68.064 33.792l52.544-60.608c10.88-11.328 23.552-19.328 29.952-17.152a12.8 12.8 0 0 1 7.808 16.128L388.48 728.576c-10.048 32.256 8.96 63.872 55.04 71.04 67.84 0 107.904-43.648 147.456-100.416z"})]))}}),Qt=Xt,en=I({name:"Plus",__name:"plus",setup(e){return(n,t)=>(g(),$("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[a("path",{fill:"currentColor",d:"M480 480V128a32 32 0 0 1 64 0v352h352a32 32 0 1 1 0 64H544v352a32 32 0 1 1-64 0V544H128a32 32 0 0 1 0-64z"})]))}}),tn=en,nn=I({name:"Refresh",__name:"refresh",setup(e){return(n,t)=>(g(),$("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[a("path",{fill:"currentColor",d:"M771.776 794.88A384 384 0 0 1 128 512h64a320 320 0 0 0 555.712 216.448H654.72a32 32 0 1 1 0-64h149.056a32 32 0 0 1 32 32v148.928a32 32 0 1 1-64 0v-50.56zM276.288 295.616h92.992a32 32 0 0 1 0 64H220.16a32 32 0 0 1-32-32V178.56a32 32 0 0 1 64 0v50.56A384 384 0 0 1 896.128 512h-64a320 320 0 0 0-555.776-216.384z"})]))}}),on=nn,ln=I({name:"SuccessFilled",__name:"success-filled",setup(e){return(n,t)=>(g(),$("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[a("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.27 38.27 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"})]))}}),an=ln,sn=I({name:"Top",__name:"top",setup(e){return(n,t)=>(g(),$("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[a("path",{fill:"currentColor",d:"M572.235 205.282v600.365a30.118 30.118 0 1 1-60.235 0V205.282L292.382 438.633a28.913 28.913 0 0 1-42.646 0 33.43 33.43 0 0 1 0-45.236l271.058-288.045a28.913 28.913 0 0 1 42.647 0L834.5 393.397a33.43 33.43 0 0 1 0 45.176 28.913 28.913 0 0 1-42.647 0l-219.618-233.23z"})]))}}),rn=sn,un=I({name:"WarningFilled",__name:"warning-filled",setup(e){return(n,t)=>(g(),$("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[a("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 192a58.43 58.43 0 0 0-58.24 63.744l23.36 256.384a35.072 35.072 0 0 0 69.76 0l23.296-256.384A58.43 58.43 0 0 0 512 256m0 512a51.2 51.2 0 1 0 0-102.4 51.2 51.2 0 0 0 0 102.4"})]))}}),cn=un;const dn={class:"filter-container"},pn={class:"filter-row"},fn={class:"button-group"},mn={key:0,class:"empty-state"},vn="yyyy-MM-dd hh:mm:ss",gn=I({__name:"page",setup(e){const n=O(),t=O("all"),o=O(""),s=O([]);function d(T){const k=At.template(vn,new Date(T.timestamp)),p=T.type.toUpperCase(),x=T.content.replace(/\u001b\[[0-9;]*m/g,"");return`[${k}] [${p}] ${x}`}const i=w(()=>s.value.filter(T=>!T.includes("[ERROR]")&&!T.includes("[WARN]"))),l=w(()=>s.value.filter(T=>T.includes("[ERROR]")||T.includes("[WARN]"))),f=w(()=>{switch(t.value){case"normal":return i.value;case"error":return l.value;default:return s.value}}),b=w(()=>{let T=f.value;if(!o.value.trim())return[...T].reverse();const k=o.value.toLowerCase();return T.filter(p=>p.toLowerCase().includes(k)).reverse()});function _(T){return T.includes("[ERROR]")?"log-error":T.includes("[WARN]")?"log-warn":T.includes("[INFO]")?"log-info":""}const y=()=>{n.value&&(n.value.scrollTop=0)},S=()=>{n.value&&(n.value.scrollTop=n.value.scrollHeight)};return he(()=>Ft.onilogs,T=>{T&&(s.value=T.map(d))},{deep:true,immediate:true}),tt(()=>{y()}),(T,k)=>{const p=C("el-tab-pane"),x=C("el-tabs"),z=C("el-input"),j=C("el-icon"),U=C("el-button"),V=C("k-layout");return g(),R(V,null,{default:c(()=>[a("div",dn,[r(x,{modelValue:t.value,"onUpdate:modelValue":k[0]||(k[0]=M=>t.value=M),class:"log-tabs"},{default:c(()=>[r(p,{name:"all",label:"全部日志"}),r(p,{name:"normal",label:"正常日志"}),r(p,{name:"error",label:"错误/警告"})]),_:1},8,["modelValue"]),a("div",pn,[r(z,{modelValue:o.value,"onUpdate:modelValue":k[1]||(k[1]=M=>o.value=M),placeholder:"搜索日志内容...",clearable:"",class:"filter-input"},null,8,["modelValue"]),a("div",fn,[r(U,{size:"small",onClick:S},{default:c(()=>[r(j,null,{default:c(()=>[r(m(qt))]),_:1}),k[2]||(k[2]=N(" 底部 ",-1))]),_:1}),r(U,{size:"small",onClick:y},{default:c(()=>[r(j,null,{default:c(()=>[r(m(rn))]),_:1}),k[3]||(k[3]=N(" 顶部 ",-1))]),_:1})])])]),a("div",{class:"log-container",ref_key:"scrollRef",ref:n},[(g(true),$(ie,null,$e(b.value,(M,q)=>(g(),$("div",{key:q,class:"log-line"},[a("pre",{class:D(_(M))},B(M),3)]))),128)),b.value.length===0?(g(),$("div",mn,[...k[4]||(k[4]=[a("p",null,"暂无日志",-1)])])):L("v-if",true)],512)]),_:1})}}}),pe=(e,n)=>{const t=e.__vccOpts||e;for(const[o,s]of n)t[o]=s;return t},_n=pe(gn,[["__scopeId","data-v-e5e2df7e"]]),st=10,yn=2e4,hn=1.33,H={steamEngine:2e3,oilEngine:200,hydrogenEngine:500,biodieselEngine:200,CommandModule:200,RoboPilotCommandModule:200,SolidBooster:1e3,LiquidFuelTank:100,OxidizerTank:100,OxidizerTankLiquid:100,CargoBay:2e3,GasCargoBay:2e3,LiquidCargoBay:2e3,SpecialCargoBay:2e3,TouristModule:200,ResearchModule:200,person:30},ve={steam:20,oil:40,hydrogen:60,biodiesel:50,booster:12e3},ke={steam:900,fuel:900,oxygen:2700},bn={steam:"steamEngine",oil:"oilEngine",hydrogen:"hydrogenEngine",biodiesel:"biodieselEngine"},Cn={ResearchModule:"研究舱",CargoBay:"固体货舱",GasCargoBay:"气体货舱",LiquidCargoBay:"液体货舱",SpecialCargoBay:"生物货舱",TouristModule:"观光舱",RoboPilotCommandModule:"机器驾驶舱"};function rt(e){return Math.ceil(Math.max(e,Math.pow(e/300,3.2)))}function wn(e){const n={};for(const[t,o]of Object.entries(e))typeof o=="number"&&o>=0&&(n[t]=o);return n}function xn(e){let n=H.CommandModule;for(const t in e)Object.prototype.hasOwnProperty.call(e,t)&&(n+=(H[t]||0)*e[t]);return n}function Oe(e){return e.length===0?[]:(e.sort((n,t)=>n.weight-t.weight),[e[0]])}function Sn(e,n){e+=H.steamEngine;const t=[];for(let o=0;o<=st;o++){const s=e+H.SolidBooster*o,d=ve.booster*o;for(let i=0;i<=ke.steam;i++){const l=s+i,f=d+ve.steam*i,b=rt(l),_=f-b;if(_>=n){t.push({capacity:i,booster:o,weight:l,mergedDistance:f,punish:b,finalDistance:_});break}}}return Oe(t)}function Tn(e,n,t,o,s,d,i,l){const f=Math.ceil(e/ke.fuel),b=Math.ceil(e/ke.oxygen),_=l==="liquid"?H.OxidizerTankLiquid:H.OxidizerTank,y=t+H.LiquidFuelTank*f+_*b,S=e*2,T=y+S,k=Math.floor(o+s*e*d),p=rt(T),x=k-p;return x<i?{isValid:false}:{isValid:true,solution:{capacity:e,booster:n,fuelCount:f,oxygenCount:b,dryWeight:y,wetWeight:S,weight:T,mergedDistance:k,punish:p,finalDistance:x}}}function $n(e,n,t,o,s){const d=ve[e],i=o==="liquid"?hn:1;n+=H[bn[e]];const l=[];for(let f=0;f<=st;f++){const b=n+H.SolidBooster*f,_=ve.booster*f;for(let y=0;y<=yn;y+=10){const S=Tn(y,f,b,_,d,i,t,o);if(S.isValid){l.push(S.solution);break}}}if(l.length===0)return[];if(!s){const f=new Map;for(const b of l){const _=b.fuelCount;(!f.has(_)||f.get(_).weight>b.weight)&&f.set(_,b)}return Oe(Array.from(f.values()))}return Oe(l)}function kn(e){const{type:n,distance:t,oxygenType:o,allowWaste:s,...d}=e,i=wn(d),l=xn(i);return n==="steam"?Sn(l,t):$n(n,l,t,o,s)}const On={class:"rocket-calculator sci-fi-bg"},En={class:"content-layout"},zn={class:"config-section"},Nn={class:"distance-control"},Vn={class:"distance-step-selector"},In={class:"distance-input-wrapper"},Mn={class:"distance-value"},Bn={class:"oxidizer-hint"},Pn={class:"config-section"},Ln={class:"modules-grid"},Dn={class:"module-header"},Rn={class:"module-name"},jn={key:0,class:"empty-state"},Fn={key:1,class:"empty-state"},An={class:"key-stats"},Un={class:"stat-item primary"},Kn={class:"stat-value"},Gn={class:"stat-item success"},Hn={class:"stat-value"},qn={class:"stat-item warning"},Wn={class:"stat-value"},Zn={class:"detail-stats"},Jn={class:"detail-grid"},Yn={class:"detail-item"},Xn={class:"detail-label"},Qn={class:"detail-value"},eo={class:"detail-item"},to={class:"detail-value"},no={key:0,class:"detail-item"},oo={class:"detail-value"},lo={key:1,class:"detail-item"},ao={class:"detail-value"},so={class:"data-table-section"},ro={class:"table-wrapper"},io=I({__name:"calculator",setup(e){const n=w(()=>{const i=[];for(let l=1e4;l<=19e4;l+=1e4)i.push(l);return i}),t=Vt({type:"steam",distance:1e4,oxygenType:"solid",allowWaste:false,ResearchModule:0,CargoBay:0,GasCargoBay:0,LiquidCargoBay:0,SpecialCargoBay:0,TouristModule:0,RoboPilotCommandModule:0}),o=O(null),s=()=>{try{const i=kn(t);o.value=i,i.length>0?Se.success("解算完成!已收敛到最优解"):Se.warning("解算失败,无解空间")}catch(i){Se.error("解算器异常"),console.error(i)}},d=()=>{t.type="steam",t.distance=1e4,t.oxygenType="solid",t.ResearchModule=0,t.CargoBay=0,t.GasCargoBay=0,t.LiquidCargoBay=0,t.SpecialCargoBay=0,t.TouristModule=0,t.RoboPilotCommandModule=0,o.value=null};return(i,l)=>{const f=C("el-option"),b=C("el-select"),_=C("el-form-item"),y=C("el-button"),S=C("el-radio-button"),T=C("el-radio-group"),k=C("el-form"),p=C("el-input-number"),x=C("k-card"),z=C("el-divider"),j=C("el-table-column"),U=C("el-table");return g(),$("div",On,[L(" 背景装饰网格 "),l[32]||(l[32]=a("div",{class:"grid-overlay"},null,-1)),r(x,{class:"header-card sci-fi-card"},{default:c(()=>[l[29]||(l[29]=a("div",{class:"header-glow"},null,-1)),l[30]||(l[30]=a("h1",{class:"sci-fi-title"},"ONI ROCKET CALCULATOR",-1)),l[31]||(l[31]=a("p",{class:"sci-fi-subtitle"},"缺氧火箭最优配置解算系统 · 基于官方物理引擎",-1)),a("div",En,[L(" 输入控制台 "),r(x,{class:"form-card sci-fi-card"},{default:c(()=>[l[9]||(l[9]=a("div",{class:"card-header-line"},null,-1)),L(" 主配置 "),a("div",zn,[l[6]||(l[6]=a("h3",{class:"section-title"},"【核心参数】",-1)),r(k,{model:t,size:"large",class:"sci-fi-form","label-position":"top"},{default:c(()=>[r(_,{label:"引擎类型"},{default:c(()=>[r(b,{modelValue:t.type,"onUpdate:modelValue":l[0]||(l[0]=V=>t.type=V),style:{width:"100%"},class:"sci-fi-select"},{default:c(()=>[r(f,{label:"蒸汽引擎",value:"steam"}),r(f,{label:"石油引擎",value:"oil"}),r(f,{label:"液氢引擎",value:"hydrogen"}),r(f,{label:"生物柴油引擎",value:"biodiesel"})]),_:1},8,["modelValue"])]),_:1}),r(_,{label:"目标轨道"},{default:c(()=>[a("div",Nn,[L(" 10000km 一档的步进选择器 "),a("div",Vn,[(g(true),$(ie,null,$e(n.value,V=>(g(),R(y,{key:V,class:D(["step-btn",{active:t.distance===V}]),onClick:M=>t.distance=V},{default:c(()=>[N(B(V/1e3)+"k ",1)]),_:2},1032,["class","onClick"]))),128))]),a("div",In,[l[2]||(l[2]=a("span",{class:"distance-label"},"当前:",-1)),a("span",Mn,B(t.distance.toLocaleString()),1),l[3]||(l[3]=a("span",{class:"unit"},"km",-1))])])]),_:1}),t.type!=="steam"?(g(),R(_,{key:0,label:"氧化剂"},{default:c(()=>[r(T,{modelValue:t.oxygenType,"onUpdate:modelValue":l[1]||(l[1]=V=>t.oxygenType=V),class:"sci-fi-radio-group"},{default:c(()=>[r(S,{label:"solid"},{default:c(()=>[...l[4]||(l[4]=[N("氧石",-1)])]),_:1}),r(S,{label:"liquid"},{default:c(()=>[...l[5]||(l[5]=[N("液氧",-1)])]),_:1})]),_:1},8,["modelValue"]),a("div",Bn,[a("span",{class:D(["hint-item",{active:t.oxygenType==="solid"}])},"1.0x 效率",2),a("span",{class:D(["hint-item",{active:t.oxygenType==="liquid"}])},"1.33x 效率",2)])]),_:1})):L("v-if",true)]),_:1},8,["model"])]),l[10]||(l[10]=a("div",{class:"divider-line"},null,-1)),L(" 可选模块 "),a("div",Pn,[l[8]||(l[8]=a("h3",{class:"section-title"},"【载荷配置】",-1)),r(k,{model:t,size:"large",class:"modules-form","label-position":"top"},{default:c(()=>[a("div",Ln,[(g(true),$(ie,null,$e(m(Cn),(V,M)=>(g(),$("div",{key:M,class:"module-item"},[a("div",Dn,[a("span",Rn,B(V),1)]),r(p,{modelValue:t[M],"onUpdate:modelValue":q=>t[M]=q,min:0,max:20,class:"module-input"},null,8,["modelValue","onUpdate:modelValue"])]))),128))]),r(_,{class:"calculate-btn-wrapper"},{default:c(()=>[r(y,{onClick:s,class:"sci-fi-calculate-btn"},{default:c(()=>[...l[7]||(l[7]=[a("span",{class:"btn-text"},"▶ 执行解算",-1),a("span",{class:"btn-glow"},null,-1)])]),_:1})]),_:1})]),_:1},8,["model"])])]),_:1}),L(" 结果显示面板 "),r(x,{class:"result-card sci-fi-card"},{default:c(()=>[l[28]||(l[28]=a("div",{class:"card-header-line"},null,-1)),o.value?o.value.length===0?(g(),$("div",Fn,[l[13]||(l[13]=a("div",{class:"empty-icon"},"⚠️",-1)),l[14]||(l[14]=a("p",{class:"empty-text error"},"解算失败",-1)),l[15]||(l[15]=a("p",{class:"empty-hint"},"无法找到满足条件的配置,请尝试减少载荷",-1)),r(y,{onClick:d,class:"sci-fi-reset-btn"},{default:c(()=>[...l[12]||(l[12]=[N("重置参数",-1)])]),_:1})])):(g(),$(ie,{key:2},[l[27]||(l[27]=a("div",{class:"result-header"},[a("h3",{class:"result-title"},"✅ 最优解算结果"),a("div",{class:"result-status"},[a("span",{class:"status-dot"}),a("span",null,"CONVERGED")])],-1)),a("div",An,[a("div",Un,[l[17]||(l[17]=a("div",{class:"stat-label"},"总起飞重量",-1)),a("div",Kn,[N(B(o.value[0].weight.toLocaleString())+" ",1),l[16]||(l[16]=a("span",{class:"stat-unit"},"kg",-1))])]),a("div",Gn,[l[19]||(l[19]=a("div",{class:"stat-label"},"预计射程",-1)),a("div",Hn,[N(B(o.value[0].finalDistance.toLocaleString())+" ",1),l[18]||(l[18]=a("span",{class:"stat-unit"},"km",-1))])]),a("div",qn,[l[21]||(l[21]=a("div",{class:"stat-label"},"质量惩罚",-1)),a("div",Wn,[N(B(o.value[0].punish.toLocaleString())+" ",1),l[20]||(l[20]=a("span",{class:"stat-unit"},"km",-1))])])]),r(z,{class:"sci-fi-divider"}),a("div",Zn,[l[25]||(l[25]=a("h4",{class:"detail-title"},"【配置详情】",-1)),a("div",Jn,[a("div",Yn,[a("span",Xn,B(t.type==="steam"?"蒸汽填充量":"燃料填充量"),1),a("span",Qn,B(o.value[0].capacity.toLocaleString())+" kg",1)]),a("div",eo,[l[22]||(l[22]=a("span",{class:"detail-label"},"助推器数量",-1)),a("span",to,B(o.value[0].booster)+" 个",1)]),o.value[0].fuelCount!==void 0?(g(),$("div",no,[l[23]||(l[23]=a("span",{class:"detail-label"},"燃料舱数量",-1)),a("span",oo,B(o.value[0].fuelCount)+" 个",1)])):L("v-if",true),o.value[0].oxygenCount!==void 0?(g(),$("div",lo,[l[24]||(l[24]=a("span",{class:"detail-label"},"氧化剂舱数量",-1)),a("span",ao,B(o.value[0].oxygenCount)+" 个",1)])):L("v-if",true)])]),r(z,{class:"sci-fi-divider"}),a("div",so,[l[26]||(l[26]=a("h4",{class:"detail-title"},"【原始数据】",-1)),a("div",ro,[r(U,{data:o.value,stripe:"",class:"sci-fi-table"},{default:c(()=>[r(j,{prop:"weight",label:"总重(kg)",sortable:""}),r(j,{prop:"finalDistance",label:"射程(km)",sortable:""}),r(j,{prop:"booster",label:"助推器"}),r(j,{prop:"fuelCount",label:"燃料舱"}),r(j,{prop:"oxygenCount",label:"氧化剂舱"})]),_:1},8,["data"])])])],64)):(g(),$("div",jn,[...l[11]||(l[11]=[a("div",{class:"scan-line"},null,-1),a("div",{class:"empty-icon"},"📡",-1),a("p",{class:"empty-text"},"等待输入参数...",-1),a("p",{class:"empty-hint"},"请配置核心参数与载荷",-1)])]))]),_:1})])]),_:1})])}}}),uo=pe(io,[["__scopeId","data-v-3e8f9409"]]),co={};function po(e,n){const t=C("k-slot"),o=C("el-scrollbar"),s=C("k-layout");return g(),R(s,null,{default:c(()=>[r(o,{class:"scrollbar"},{default:c(()=>[r(t,{name:"calculator"})]),_:1})]),_:1})}const fo=pe(co,[["render",po],["__scopeId","data-v-7f2607d9"]]),mo={};function vo(e,n){const t=C("k-slot"),o=C("el-scrollbar"),s=C("k-layout");return g(),R(s,null,{default:c(()=>[r(o,{class:"scrollbar"},{default:c(()=>[r(t,{name:"onitodos"})]),_:1})]),_:1})}const go=pe(mo,[["render",vo],["__scopeId","data-v-4a10404d"]]);/**
|
|
2
2
|
* @vue/shared v3.5.29
|
|
3
3
|
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
|
4
4
|
* @license MIT
|
|
5
|
-
**/const _o=Object.prototype.hasOwnProperty,Ue=(e,n)=>_o.call(e,n),_e=e=>typeof e=="function",ye=e=>typeof e=="string",it=e=>e!==null&&typeof e=="object";var yo=typeof global=="object"&&global&&global.Object===Object&&global,ho=typeof self=="object"&&self&&self.Object===Object&&self,Ie=yo||ho||Function("return this")(),ne=Ie.Symbol,ut=Object.prototype,bo=ut.hasOwnProperty,Co=ut.toString,re=ne?ne.toStringTag:void 0;function wo(e){var n=bo.call(e,re),t=e[re];try{e[re]=void 0;var o=true}catch{}var s=Co.call(e);return o&&(n?e[re]=t:delete e[re]),s}var xo=Object.prototype,So=xo.toString;function To(e){return So.call(e)}var $o="[object Null]",ko="[object Undefined]",Ke=ne?ne.toStringTag:void 0;function ct(e){return e==null?e===void 0?ko:$o:Ke&&Ke in Object(e)?wo(e):To(e)}function Oo(e){return e!=null&&typeof e=="object"}var Eo="[object Symbol]";function Me(e){return typeof e=="symbol"||Oo(e)&&ct(e)==Eo}function zo(e,n){for(var t=-1,o=e==null?0:e.length,s=Array(o);++t<o;)s[t]=n(e[t],t,e);return s}var Be=Array.isArray,Ge=ne?ne.prototype:void 0,He=Ge?Ge.toString:void 0;function dt(e){if(typeof e=="string")return e;if(Be(e))return zo(e,dt)+"";if(Me(e))return He?He.call(e):"";var n=e+"";return n=="0"&&1/e==-1/0?"-0":n}function pt(e){var n=typeof e;return e!=null&&(n=="object"||n=="function")}var No="[object AsyncFunction]",Vo="[object Function]",Io="[object GeneratorFunction]",Mo="[object Proxy]";function Bo(e){if(!pt(e))return false;var n=ct(e);return n==Vo||n==Io||n==No||n==Mo}var Te=Ie["__core-js_shared__"],qe=function(){var e=/[^.]+$/.exec(Te&&Te.keys&&Te.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function Po(e){return!!qe&&qe in e}var Lo=Function.prototype,Do=Lo.toString;function Ro(e){if(e!=null){try{return Do.call(e)}catch{}try{return e+""}catch{}}return""}var jo=/[\\^$.*+?()[\]{}|]/g,Fo=/^\[object .+?Constructor\]$/,Ao=Function.prototype,Uo=Object.prototype,Ko=Ao.toString,Go=Uo.hasOwnProperty,Ho=RegExp("^"+Ko.call(Go).replace(jo,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function qo(e){if(!pt(e)||Po(e))return false;var n=Bo(e)?Ho:Fo;return n.test(Ro(e))}function Wo(e,n){return e==null?void 0:e[n]}function ft(e,n){var t=Wo(e,n);return qo(t)?t:void 0}function Zo(e,n){return e===n||e!==e&&n!==n}var Jo=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Yo=/^\w*$/;function Xo(e,n){if(Be(e))return false;var t=typeof e;return t=="number"||t=="symbol"||t=="boolean"||e==null||Me(e)?true:Yo.test(e)||!Jo.test(e)||n!=null&&e in Object(n)}var de=ft(Object,"create");function Qo(){this.__data__=de?de(null):{},this.size=0}function el(e){var n=this.has(e)&&delete this.__data__[e];return this.size-=n?1:0,n}var tl="__lodash_hash_undefined__",nl=Object.prototype,ol=nl.hasOwnProperty;function ll(e){var n=this.__data__;if(de){var t=n[e];return t===tl?void 0:t}return ol.call(n,e)?n[e]:void 0}var al=Object.prototype,sl=al.hasOwnProperty;function rl(e){var n=this.__data__;return de?n[e]!==void 0:sl.call(n,e)}var il="__lodash_hash_undefined__";function ul(e,n){var t=this.__data__;return this.size+=this.has(e)?0:1,t[e]=de&&n===void 0?il:n,this}function Q(e){var n=-1,t=e==null?0:e.length;for(this.clear();++n<t;){var o=e[n];this.set(o[0],o[1])}}Q.prototype.clear=Qo;Q.prototype.delete=el;Q.prototype.get=ll;Q.prototype.has=rl;Q.prototype.set=ul;function cl(){this.__data__=[],this.size=0}function Ce(e,n){for(var t=e.length;t--;)if(Zo(e[t][0],n))return t;return-1}var dl=Array.prototype,pl=dl.splice;function fl(e){var n=this.__data__,t=Ce(n,e);if(t<0)return false;var o=n.length-1;return t==o?n.pop():pl.call(n,t,1),--this.size,true}function ml(e){var n=this.__data__,t=Ce(n,e);return t<0?void 0:n[t][1]}function vl(e){return Ce(this.__data__,e)>-1}function gl(e,n){var t=this.__data__,o=Ce(t,e);return o<0?(++this.size,t.push([e,n])):t[o][1]=n,this}function le(e){var n=-1,t=e==null?0:e.length;for(this.clear();++n<t;){var o=e[n];this.set(o[0],o[1])}}le.prototype.clear=cl;le.prototype.delete=fl;le.prototype.get=ml;le.prototype.has=vl;le.prototype.set=gl;var _l=ft(Ie,"Map");function yl(){this.size=0,this.__data__={hash:new Q,map:new(_l||le),string:new Q}}function hl(e){var n=typeof e;return n=="string"||n=="number"||n=="symbol"||n=="boolean"?e!=="__proto__":e===null}function we(e,n){var t=e.__data__;return hl(n)?t[typeof n=="string"?"string":"hash"]:t.map}function bl(e){var n=we(this,e).delete(e);return this.size-=n?1:0,n}function Cl(e){return we(this,e).get(e)}function wl(e){return we(this,e).has(e)}function xl(e,n){var t=we(this,e),o=t.size;return t.set(e,n),this.size+=t.size==o?0:1,this}function ee(e){var n=-1,t=e==null?0:e.length;for(this.clear();++n<t;){var o=e[n];this.set(o[0],o[1])}}ee.prototype.clear=yl;ee.prototype.delete=bl;ee.prototype.get=Cl;ee.prototype.has=wl;ee.prototype.set=xl;var Sl="Expected a function";function Pe(e,n){if(typeof e!="function"||n!=null&&typeof n!="function")throw new TypeError(Sl);var t=function(){var o=arguments,s=n?n.apply(this,o):o[0],d=t.cache;if(d.has(s))return d.get(s);var i=e.apply(this,o);return t.cache=d.set(s,i)||d,i};return t.cache=new(Pe.Cache||ee),t}Pe.Cache=ee;var Tl=500;function $l(e){var n=Pe(e,function(o){return t.size===Tl&&t.clear(),o}),t=n.cache;return n}var kl=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Ol=/\\(\\)?/g,El=$l(function(e){var n=[];return e.charCodeAt(0)===46&&n.push(""),e.replace(kl,function(t,o,s,d){n.push(s?d.replace(Ol,"$1"):o||t)}),n});function zl(e){return e==null?"":dt(e)}function Nl(e,n){return Be(e)?e:Xo(e,n)?[e]:El(zl(e))}function Vl(e){if(typeof e=="string"||Me(e))return e;var n=e+"";return n=="0"&&1/e==-1/0?"-0":n}function Il(e,n){n=Nl(n,e);for(var t=0,o=n.length;e!=null&&t<o;)e=e[Vl(n[t++])];return t&&t==o?e:void 0}function Ml(e,n,t){var o=e==null?void 0:Il(e,n);return o===void 0?t:o}function Bl(e){for(var n=-1,t=e==null?0:e.length,o={};++n<t;){var s=e[n];o[s[0]]=s[1]}return o}const Pl=e=>e===void 0,pe=e=>typeof e=="number",Ll=e=>typeof Element>"u"?false:e instanceof Element,Dl=e=>ye(e)?!Number.isNaN(Number(e)):false,We=e=>Object.keys(e);function Ee(e,n="px"){if(!e)return"";if(pe(e)||Dl(e))return`${e}${n}`;if(ye(e))return e}const mt="__epPropKey",F=e=>e,Rl=e=>it(e)&&!!e[mt],vt=(e,n)=>{if(!it(e)||Rl(e))return e;const{values:t,required:o,default:s,type:d,validator:i}=e,f={type:d,required:!!o,validator:t||i?b=>{let _=false,h=[];if(t&&(h=Array.from(t),Ue(e,"default")&&h.push(s),_||(_=h.includes(b))),i&&(_||(_=i(b))),!_&&h.length>0){const S=[...new Set(h)].map(T=>JSON.stringify(T)).join(", ");It(`Invalid prop: validation failed${n?` for prop "${n}"`:""}. Expected one of [${S}], got value ${JSON.stringify(b)}.`)}return _}:void 0,[mt]:true};return Ue(e,"default")&&(f.default=s),f},me=e=>Bl(Object.entries(e).map(([n,t])=>[n,vt(t,n)])),jl=F([String,Object,Function]),Fl={Close:Yt},Ze={success:an,warning:cn,error:Zt,info:Qt},gt=(e,n)=>(e.install=t=>{for(const o of[e,...Object.values({})])t.component(o.name,o)},e),Al=(e,n)=>(e.install=t=>{e._context=t._context,t.config.globalProperties[n]=e},e),Ul={esc:"Escape"},Kl=["","default","small","large"],Gl=e=>e,Je=({from:e,replacement:n,scope:t,version:o,ref:s,type:d="API"},i)=>{ue(()=>m(i),l=>{},{immediate:true})};var Hl={name:"en",el:{breadcrumb:{label:"Breadcrumb"},colorpicker:{confirm:"OK",clear:"Clear",defaultLabel:"color picker",description:"current color is {color}. press enter to select a new color."},datepicker:{now:"Now",today:"Today",cancel:"Cancel",clear:"Clear",confirm:"OK",dateTablePrompt:"Use the arrow keys and enter to select the day of the month",monthTablePrompt:"Use the arrow keys and enter to select the month",yearTablePrompt:"Use the arrow keys and enter to select the year",selectedDate:"Selected date",selectDate:"Select date",selectTime:"Select time",startDate:"Start Date",startTime:"Start Time",endDate:"End Date",endTime:"End Time",prevYear:"Previous Year",nextYear:"Next Year",prevMonth:"Previous Month",nextMonth:"Next Month",year:"",month1:"January",month2:"February",month3:"March",month4:"April",month5:"May",month6:"June",month7:"July",month8:"August",month9:"September",month10:"October",month11:"November",month12:"December",week:"week",weeks:{sun:"Sun",mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat"},weeksFull:{sun:"Sunday",mon:"Monday",tue:"Tuesday",wed:"Wednesday",thu:"Thursday",fri:"Friday",sat:"Saturday"},months:{jan:"Jan",feb:"Feb",mar:"Mar",apr:"Apr",may:"May",jun:"Jun",jul:"Jul",aug:"Aug",sep:"Sep",oct:"Oct",nov:"Nov",dec:"Dec"}},inputNumber:{decrease:"decrease number",increase:"increase number"},select:{loading:"Loading",noMatch:"No matching data",noData:"No data",placeholder:"Select"},dropdown:{toggleDropdown:"Toggle Dropdown"},cascader:{noMatch:"No matching data",loading:"Loading",placeholder:"Select",noData:"No data"},pagination:{goto:"Go to",pagesize:"/page",total:"Total {total}",pageClassifier:"",page:"Page",prev:"Go to previous page",next:"Go to next page",currentPage:"page {pager}",prevPages:"Previous {pager} pages",nextPages:"Next {pager} pages",deprecationWarning:"Deprecated usages detected, please refer to the el-pagination documentation for more details"},dialog:{close:"Close this dialog"},drawer:{close:"Close this dialog"},messagebox:{title:"Message",confirm:"OK",cancel:"Cancel",error:"Illegal input",close:"Close this dialog"},upload:{deleteTip:"press delete to remove",delete:"Delete",preview:"Preview",continue:"Continue"},slider:{defaultLabel:"slider between {min} and {max}",defaultRangeStartLabel:"pick start value",defaultRangeEndLabel:"pick end value"},table:{emptyText:"No Data",confirmFilter:"Confirm",resetFilter:"Reset",clearFilter:"All",sumText:"Sum"},tour:{next:"Next",previous:"Previous",finish:"Finish"},tree:{emptyText:"No Data"},transfer:{noMatch:"No matching data",noData:"No data",titles:["List 1","List 2"],filterPlaceholder:"Enter keyword",noCheckedFormat:"{total} items",hasCheckedFormat:"{checked}/{total} checked"},image:{error:"FAILED"},pageHeader:{title:"Back"},popconfirm:{confirmButtonText:"Yes",cancelButtonText:"No"},carousel:{leftArrow:"Carousel arrow left",rightArrow:"Carousel arrow right",indicator:"Carousel switch to index {index}"}}};const ql=e=>(n,t)=>Wl(n,t,m(e)),Wl=(e,n,t)=>Ml(t,e,e).replace(/\{(\w+)\}/g,(o,s)=>{var d;return`${(d=n==null?void 0:n[s])!=null?d:`{${s}}`}`}),Zl=e=>{const n=w(()=>m(e).name),t=Mt(e)?e:O(e);return{lang:n,locale:t,t:ql(e)}},_t=Symbol("localeContextKey"),Jl=e=>{const n=e||te(_t,O());return Zl(w(()=>n.value||Hl))},ve="el",Yl="is-",X=(e,n,t,o,s)=>{let d=`${e}-${n}`;return t&&(d+=`-${t}`),o&&(d+=`__${o}`),s&&(d+=`--${s}`),d},yt=Symbol("namespaceContextKey"),Xl=e=>{const n=e||(ce()?te(yt,O(ve)):O(ve));return w(()=>m(n)||ve)},Le=(e,n)=>{const t=Xl(n);return{namespace:t,b:(p="")=>X(t.value,e,p,"",""),e:p=>p?X(t.value,e,"",p,""):"",m:p=>p?X(t.value,e,"","",p):"",be:(p,x)=>p&&x?X(t.value,e,p,x,""):"",em:(p,x)=>p&&x?X(t.value,e,"",p,x):"",bm:(p,x)=>p&&x?X(t.value,e,p,"",x):"",bem:(p,x,z)=>p&&x&&z?X(t.value,e,p,x,z):"",is:(p,...x)=>{const z=x.length>=1?x[0]:true;return p&&z?`${Yl}${p}`:""},cssVar:p=>{const x={};for(const z in p)p[z]&&(x[`--${t.value}-${z}`]=p[z]);return x},cssVarName:p=>`--${t.value}-${p}`,cssVarBlock:p=>{const x={};for(const z in p)p[z]&&(x[`--${t.value}-${e}-${z}`]=p[z]);return x},cssVarBlockName:p=>`--${t.value}-${e}-${p}`}},Ye={current:0},Xe=O(0),ht=2e3,Qe=Symbol("elZIndexContextKey"),bt=Symbol("zIndexContextKey"),Ql=e=>{const n=ce()?te(Qe,Ye):Ye,t=e||(ce()?te(bt,void 0):void 0),o=w(()=>{const i=m(t);return pe(i)?i:ht}),s=w(()=>o.value+Xe.value),d=()=>(n.current++,Xe.value=n.current,s.value);return!Ve&&te(Qe),{initialZIndex:o,currentZIndex:s,nextZIndex:d}},ea=vt({type:String,values:Kl,required:false}),ta=Symbol("size"),na=Symbol("emptyValuesContextKey"),oa=me({emptyValues:Array,valueOnClear:{type:[String,Number,Boolean,Function],default:void 0,validator:e=>_e(e)?!e():!e}}),Ct=Symbol(),he=O();function wt(e,n=void 0){return ce()?te(Ct,he):he}function la(e,n){const t=wt(),o=Le(e,w(()=>{var l;return((l=t.value)==null?void 0:l.namespace)||ve})),s=Jl(w(()=>{var l;return(l=t.value)==null?void 0:l.locale})),d=Ql(w(()=>{var l;return((l=t.value)==null?void 0:l.zIndex)||ht})),i=w(()=>{var l;return m(n)||((l=t.value)==null?void 0:l.size)||""});return xt(w(()=>m(t)||{})),{ns:o,locale:s,zIndex:d,size:i}}const xt=(e,n,t=false)=>{var o;const s=!!ce(),d=s?wt():void 0,i=(o=void 0)!=null?o:s?Bt:void 0;if(!i)return;const l=w(()=>{const f=m(e);return d!=null&&d.value?aa(d.value,f):f});return i(Ct,l),i(_t,w(()=>l.value.locale)),i(yt,w(()=>l.value.namespace)),i(bt,w(()=>l.value.zIndex)),i(ta,{size:w(()=>l.value.size||"")}),i(na,w(()=>({emptyValues:l.value.emptyValues,valueOnClear:l.value.valueOnClear}))),(t||!he.value)&&(he.value=l.value),l},aa=(e,n)=>{const t=[...new Set([...We(e),...We(n)])],o={};for(const s of t)o[s]=n[s]!==void 0?n[s]:e[s];return o},sa=me({a11y:{type:Boolean,default:true},locale:{type:F(Object)},size:ea,button:{type:F(Object)},experimentalFeatures:{type:F(Object)},keyboardNavigation:{type:Boolean,default:true},message:{type:F(Object)},zIndex:Number,namespace:{type:String,default:"el"},...oa}),ze={};I({name:"ElConfigProvider",props:sa,setup(e,{slots:n}){ue(()=>e.message,o=>{Object.assign(ze,o??{})},{immediate:true,deep:true});const t=xt(e);return()=>be(n,"default",{config:t==null?void 0:t.value})}});var De=(e,n)=>{const t=e.__vccOpts||e;for(const[o,s]of n)t[o]=s;return t};const ra=me({size:{type:F([Number,String])},color:{type:String}}),ia=I({name:"ElIcon",inheritAttrs:false}),ua=I({...ia,props:ra,setup(e){const n=e,t=Le("icon"),o=w(()=>{const{size:s,color:d}=n;return!s&&!d?{}:{fontSize:Pl(s)?void 0:Ee(s),"--color":d}});return(s,d)=>(g(),$("i",Pt({class:m(t).b(),style:m(o)},s.$attrs),[be(s.$slots,"default")],16))}});var ca=De(ua,[["__file","icon.vue"]]);const et=gt(ca),da=me({value:{type:[String,Number],default:""},max:{type:Number,default:99},isDot:Boolean,hidden:Boolean,type:{type:String,values:["primary","success","warning","info","danger"],default:"danger"},showZero:{type:Boolean,default:true},color:String,dotStyle:{type:F([String,Object,Array])},badgeStyle:{type:F([String,Object,Array])},offset:{type:F(Array),default:[0,0]},dotClass:{type:String},badgeClass:{type:String}}),pa=["textContent"],fa=I({name:"ElBadge"}),ma=I({...fa,props:da,setup(e,{expose:n}){const t=e,o=Le("badge"),s=w(()=>t.isDot?"":pe(t.value)&&pe(t.max)?t.max<t.value?`${t.max}+`:t.value===0&&!t.showZero?"":`${t.value}`:`${t.value}`),d=w(()=>{var i,l,f,b,_,h;return[{backgroundColor:t.color,marginRight:Ee(-((l=(i=t.offset)==null?void 0:i[0])!=null?l:0)),marginTop:Ee((b=(f=t.offset)==null?void 0:f[1])!=null?b:0)},(_=t.dotStyle)!=null?_:{},(h=t.badgeStyle)!=null?h:{}]});return Je({from:"dot-style",replacement:"badge-style",version:"2.8.0",scope:"el-badge",ref:"https://element-plus.org/en-US/component/badge.html"},w(()=>!!t.dotStyle)),Je({from:"dot-class",replacement:"badge-class",version:"2.8.0",scope:"el-badge",ref:"https://element-plus.org/en-US/component/badge.html"},w(()=>!!t.dotClass)),n({content:s}),(i,l)=>(g(),$("div",{class:D(m(o).b())},[be(i.$slots,"default"),r(nt,{name:`${m(o).namespace.value}-zoom-in-center`,persisted:""},{default:c(()=>[Ne(a("sup",{class:D([m(o).e("content"),m(o).em("content",i.type),m(o).is("fixed",!!i.$slots.default),m(o).is("dot",i.isDot),i.dotClass,i.badgeClass]),style:ot(m(d)),textContent:B(m(s))},null,14,pa),[[lt,!i.hidden&&(m(s)||i.isDot)]])]),_:1},8,["name"])],2))}});var va=De(ma,[["__file","badge.vue"]]);const ga=gt(va),St=["success","info","warning","error"],P=Gl({customClass:"",center:false,dangerouslyUseHTMLString:false,duration:3e3,icon:void 0,id:"",message:"",onClose:void 0,showClose:false,type:"info",plain:false,offset:16,zIndex:0,grouping:false,repeatNum:1,appendTo:Ve?document.body:void 0}),_a=me({customClass:{type:String,default:P.customClass},center:{type:Boolean,default:P.center},dangerouslyUseHTMLString:{type:Boolean,default:P.dangerouslyUseHTMLString},duration:{type:Number,default:P.duration},icon:{type:jl,default:P.icon},id:{type:String,default:P.id},message:{type:F([String,Object,Function]),default:P.message},onClose:{type:F(Function),default:P.onClose},showClose:{type:Boolean,default:P.showClose},type:{type:String,values:St,default:P.type},plain:{type:Boolean,default:P.plain},offset:{type:Number,default:P.offset},zIndex:{type:Number,default:P.zIndex},grouping:{type:Boolean,default:P.grouping},repeatNum:{type:Number,default:P.repeatNum}}),ya={destroy:()=>true},A=Lt([]),ha=e=>{const n=A.findIndex(s=>s.id===e),t=A[n];let o;return n>0&&(o=A[n-1]),{current:t,prev:o}},ba=e=>{const{prev:n}=ha(e);return n?n.vm.exposed.bottom.value:0},Ca=(e,n)=>A.findIndex(o=>o.id===e)>0?16:n,wa=["id"],xa=["innerHTML"],Sa=I({name:"ElMessage"}),Ta=I({...Sa,props:_a,emits:ya,setup(e,{expose:n}){const t=e,{Close:o}=Fl,{ns:s,zIndex:d}=la("message"),{currentZIndex:i,nextZIndex:l}=d,f=O(),b=O(false),_=O(0);let h;const S=w(()=>t.type?t.type==="error"?"danger":t.type:"info"),T=w(()=>{const E=t.type;return{[s.bm("icon",E)]:E&&Ze[E]}}),k=w(()=>t.icon||Ze[t.type]||""),p=w(()=>ba(t.id)),x=w(()=>Ca(t.id,t.offset)+p.value),z=w(()=>_.value+x.value),j=w(()=>({top:`${x.value}px`,zIndex:i.value}));function U(){t.duration!==0&&({stop:h}=Gt(()=>{M()},t.duration))}function V(){h==null||h()}function M(){b.value=false}function q({code:E}){E===Ul.esc&&M()}return tt(()=>{U(),l(),b.value=true}),ue(()=>t.repeatNum,()=>{V(),U()}),Ut(document,"keydown",q),Kt(f,()=>{_.value=f.value.getBoundingClientRect().height}),n({visible:b,bottom:z,close:M}),(E,ae)=>(g(),R(nt,{name:m(s).b("fade"),onBeforeLeave:E.onClose,onAfterLeave:ae[0]||(ae[0]=y=>E.$emit("destroy")),persisted:""},{default:c(()=>[Ne(a("div",{id:E.id,ref_key:"messageRef",ref:f,class:D([m(s).b(),{[m(s).m(E.type)]:E.type},m(s).is("center",E.center),m(s).is("closable",E.showClose),m(s).is("plain",E.plain),E.customClass]),style:ot(m(j)),role:"alert",onMouseenter:V,onMouseleave:U},[E.repeatNum>1?(g(),R(m(ga),{key:0,value:E.repeatNum,type:m(S),class:D(m(s).e("badge"))},null,8,["value","type","class"])):L("v-if",true),m(k)?(g(),R(m(et),{key:1,class:D([m(s).e("icon"),m(T)])},{default:c(()=>[(g(),R(Dt(m(k))))]),_:1},8,["class"])):L("v-if",true),be(E.$slots,"default",{},()=>[E.dangerouslyUseHTMLString?(g(),$(ie,{key:1},[L(" Caution here, message could've been compromised, never use user's input as message "),a("p",{class:D(m(s).e("content")),innerHTML:E.message},null,10,xa)],2112)):(g(),$("p",{key:0,class:D(m(s).e("content"))},B(E.message),3))]),E.showClose?(g(),R(m(et),{key:2,class:D(m(s).e("closeBtn")),onClick:Rt(M,["stop"])},{default:c(()=>[r(m(o))]),_:1},8,["class","onClick"])):L("v-if",true)],46,wa),[[lt,b.value]])]),_:3},8,["name","onBeforeLeave"]))}});var $a=De(Ta,[["__file","message.vue"]]);let ka=1;const Tt=e=>{const n=!e||ye(e)||at(e)||_e(e)?{message:e}:e,t={...P,...n};if(!t.appendTo)t.appendTo=document.body;else if(ye(t.appendTo)){let o=document.querySelector(t.appendTo);Ll(o)||(o=document.body),t.appendTo=o}return t},Oa=e=>{const n=A.indexOf(e);if(n===-1)return;A.splice(n,1);const{handler:t}=e;t.close()},Ea=({appendTo:e,...n},t)=>{const o=`message_${ka++}`,s=n.onClose,d=document.createElement("div"),i={...n,id:o,onClose:()=>{s==null||s(),Oa(_)},onDestroy:()=>{Ae(null,d)}},l=r($a,i,_e(i.message)||at(i.message)?{default:_e(i.message)?i.message:()=>i.message}:null);l.appContext=t||oe._context,Ae(l,d),e.appendChild(d.firstElementChild);const f=l.component,_={id:o,vnode:l,vm:f,handler:{close:()=>{f.exposed.visible.value=false}},props:l.component.props};return _},oe=(e={},n)=>{if(!Ve)return{close:()=>{}};if(pe(ze.max)&&A.length>=ze.max)return{close:()=>{}};const t=Tt(e);if(t.grouping&&A.length){const s=A.find(({vnode:d})=>{var i;return((i=d.props)==null?void 0:i.message)===t.message});if(s)return s.props.repeatNum+=1,s.props.type=t.type,s.handler}const o=Ea(t,n);return A.push(o),o.handler};St.forEach(e=>{oe[e]=(n={},t)=>{const o=Tt(n);return oe({...o,type:e},t)}});function za(e){for(const n of A)(!e||e===n.props.type)&&n.handler.close()}oe.closeAll=za;oe._context=null;const K=Al(oe,"$message"),Na={class:"todo-app"},Va={class:"todo-container"},Ia={class:"todo-header"},Ma={class:"button-group"},Ba={class:"todo-stats"},Pa={class:"search-filter-section"},La={class:"filter-buttons"},Da={class:"todo-table-card"},Ra={key:1,class:"pagination-section"},ja=I({__name:"todolist",setup(e){const n=O([]),t=O(false),o=O(false),s=O(false),d=O(false),i=O(false),l=O(""),f=O("all"),b=O(1),_=O(8),h=O({title:"",content:"",createdBy:""}),S=O({id:0,title:"",content:"",createdBy:"",completed:false}),T=w(()=>n.value.filter(y=>y.completed).length),k=w(()=>n.value.filter(y=>!y.completed).length),p=w(()=>{let y=n.value;if(f.value==="active"?y=y.filter(u=>!u.completed):f.value==="completed"&&(y=y.filter(u=>u.completed)),l.value.trim()){const u=l.value.toLowerCase().trim();y=y.filter(W=>W.title.toLowerCase().includes(u)||W.content.toLowerCase().includes(u))}return b.value=1,y}),x=w(()=>{const y=(b.value-1)*_.value,u=y+_.value;return p.value.slice(y,u)});function z(y){_.value=y,b.value=1}function j(y){b.value=y}function U(y){return new Date(y).toLocaleString("zh-CN")}function V(){s.value=true,se("onitodos/list").then(y=>{n.value=y,s.value=false,K.success("刷新成功")}).catch(y=>{s.value=false,K.error("刷新失败"),console.error(y)})}se("onitodos/list").then(y=>{n.value=y});async function M(){if(!h.value.title.trim()){K.warning("请输入标题");return}o.value=true;try{await se("onitodos/add",{title:h.value.title,content:h.value.content,createdBy:h.value.createdBy}),K.success("添加成功"),d.value=false,h.value={title:"",content:"",createdBy:""},V()}catch(y){K.error("添加失败"),console.error(y)}finally{o.value=false}}function q(y){S.value={id:y.id,title:y.title,content:y.content,createdBy:y.createdBy,completed:y.completed},i.value=true}async function E(){if(!S.value.title.trim()){K.warning("请输入标题");return}o.value=true;try{await se("onitodos/update",{id:S.value.id,title:S.value.title,content:S.value.content,createdBy:S.value.createdBy,completed:S.value.completed}),K.success("更新成功"),i.value=false,V()}catch(y){K.error("更新失败"),console.error(y)}finally{o.value=false}}async function ae(y,u){try{await se("onitodos/update",{id:y.id,completed:u}),K.success(u?"标记完成成功":"取消完成成功"),V()}catch(W){K.error("操作失败"),console.error(W)}}return(y,u)=>{const W=C("el-icon"),G=C("el-button"),xe=C("el-statistic"),Z=C("el-input"),J=C("el-table-column"),$t=C("el-tag"),kt=C("el-table"),Ot=C("el-empty"),Et=C("el-pagination"),Y=C("el-form-item"),Re=C("el-form"),je=C("el-dialog"),zt=C("el-checkbox"),Nt=jt("loading");return g(),$("div",Na,[u[29]||(u[29]=a("div",{class:"bg-pattern"},null,-1)),a("div",Va,[a("div",Ia,[u[20]||(u[20]=a("h2",{class:"todo-title"},[a("span",{class:"title-dot"},"♦"),a("span",{class:"title-text"},"ONITODO"),a("span",{class:"title-dot"},"♦")],-1)),a("div",Ma,[r(G,{type:"default",class:"cute-btn",onClick:V,loading:s.value},{default:c(()=>[r(W,null,{default:c(()=>[r(m(on))]),_:1}),u[18]||(u[18]=N(" 刷新 ",-1))]),_:1},8,["loading"]),r(G,{type:"primary",class:"cute-btn primary",onClick:u[0]||(u[0]=v=>d.value=true)},{default:c(()=>[r(W,null,{default:c(()=>[r(m(tn))]),_:1}),u[19]||(u[19]=N(" 新增待办 ",-1))]),_:1})])]),a("div",Ba,[r(xe,{title:"总计",value:n.value.length},null,8,["value"]),r(xe,{title:"已完成",value:T.value},null,8,["value"]),r(xe,{title:"未完成",value:k.value},null,8,["value"])]),a("div",Pa,[r(Z,{modelValue:l.value,"onUpdate:modelValue":u[1]||(u[1]=v=>l.value=v),placeholder:"🔍 搜索标题或内容...",class:"search-input cute-input",clearable:""},null,8,["modelValue"]),a("div",La,[a("button",{class:D(["filter-btn",{active:f.value==="all"}]),onClick:u[2]||(u[2]=v=>f.value="all")}," 全部 ",2),a("button",{class:D(["filter-btn",{active:f.value==="active"}]),onClick:u[3]||(u[3]=v=>f.value="active")}," 未完成 ",2),a("button",{class:D(["filter-btn",{active:f.value==="completed"}]),onClick:u[4]||(u[4]=v=>f.value="completed")}," 已完成 ",2)])]),a("div",Da,[Ne((g(),R(kt,{data:x.value,stripe:"",style:{width:"100%"},class:"cute-table"},{default:c(()=>[r(J,{type:"index",label:"id",width:"80"}),r(J,{prop:"title",label:"标题","min-width":"150","show-overflow-tooltip":""},{default:c(({row:v})=>[a("span",{class:D({"completed-text":v.completed})},B(v.title),3)]),_:1}),r(J,{prop:"content",label:"内容","min-width":"150","show-overflow-tooltip":""}),r(J,{prop:"createdBy",label:"创建人",width:"80","show-overflow-tooltip":""}),r(J,{prop:"completed",label:"状态",width:"80"},{default:c(({row:v})=>[r($t,{type:v.completed?"success":"warning",size:"small",class:"cute-tag"},{default:c(()=>[N(B(v.completed?"已完成":"未完成"),1)]),_:2},1032,["type"])]),_:1}),r(J,{prop:"createdAt",label:"创建时间",width:"180"},{default:c(({row:v})=>[N(B(U(v.createdAt)),1)]),_:1}),r(J,{label:"操作",width:"150",fixed:"right"},{default:c(({row:v})=>[v.completed?(g(),R(G,{key:1,size:"small",type:"warning",class:"cute-btn",onClick:Fe=>ae(v,false)},{default:c(()=>[...u[22]||(u[22]=[N(" 取消 ",-1)])]),_:1},8,["onClick"])):(g(),R(G,{key:0,size:"small",type:"success",class:"cute-btn",onClick:Fe=>ae(v,true)},{default:c(()=>[...u[21]||(u[21]=[N(" 完成 ",-1)])]),_:1},8,["onClick"])),r(G,{size:"small",type:"primary",class:"cute-btn",onClick:Fe=>q(v)},{default:c(()=>[...u[23]||(u[23]=[N(" 编辑 ",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[Nt,t.value]]),p.value.length===0&&!t.value?(g(),R(Ot,{key:0,description:"暂无待办事项"})):L("v-if",true),p.value.length>8?(g(),$("div",Ra,[r(Et,{"current-page":b.value,"onUpdate:currentPage":u[5]||(u[5]=v=>b.value=v),"page-size":_.value,"onUpdate:pageSize":u[6]||(u[6]=v=>_.value=v),"page-sizes":[8,16,32,64],total:p.value.length,layout:"total, sizes, prev, pager, next, jumper",background:"",onSizeChange:z,onCurrentChange:j},null,8,["current-page","page-size","total"])])):L("v-if",true)])]),r(je,{modelValue:d.value,"onUpdate:modelValue":u[11]||(u[11]=v=>d.value=v),title:"新增待办事项",width:"500px",class:"cute-dialog"},{footer:c(()=>[r(G,{onClick:u[10]||(u[10]=v=>d.value=false),class:"cute-btn"},{default:c(()=>[...u[24]||(u[24]=[N("取消",-1)])]),_:1}),r(G,{type:"primary",onClick:M,loading:o.value,class:"cute-btn primary"},{default:c(()=>[...u[25]||(u[25]=[N(" 保存 ",-1)])]),_:1},8,["loading"])]),default:c(()=>[r(Re,{model:h.value,"label-width":"80px"},{default:c(()=>[r(Y,{label:"标题"},{default:c(()=>[r(Z,{modelValue:h.value.title,"onUpdate:modelValue":u[7]||(u[7]=v=>h.value.title=v),placeholder:"请输入标题",class:"cute-input"},null,8,["modelValue"])]),_:1}),r(Y,{label:"内容"},{default:c(()=>[r(Z,{modelValue:h.value.content,"onUpdate:modelValue":u[8]||(u[8]=v=>h.value.content=v),type:"textarea",rows:4,placeholder:"请输入具体内容",class:"cute-input"},null,8,["modelValue"])]),_:1}),r(Y,{label:"创建人"},{default:c(()=>[r(Z,{modelValue:h.value.createdBy,"onUpdate:modelValue":u[9]||(u[9]=v=>h.value.createdBy=v),placeholder:"默认为:默认创建人",class:"cute-input"},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue"]),r(je,{modelValue:i.value,"onUpdate:modelValue":u[17]||(u[17]=v=>i.value=v),title:"编辑待办事项",width:"500px",class:"cute-dialog"},{footer:c(()=>[r(G,{onClick:u[16]||(u[16]=v=>i.value=false),class:"cute-btn"},{default:c(()=>[...u[27]||(u[27]=[N("取消",-1)])]),_:1}),r(G,{type:"primary",onClick:E,loading:o.value,class:"cute-btn primary"},{default:c(()=>[...u[28]||(u[28]=[N(" 保存 ",-1)])]),_:1},8,["loading"])]),default:c(()=>[r(Re,{model:S.value,"label-width":"80px"},{default:c(()=>[r(Y,{label:"标题"},{default:c(()=>[r(Z,{modelValue:S.value.title,"onUpdate:modelValue":u[12]||(u[12]=v=>S.value.title=v),placeholder:"请输入标题",class:"cute-input"},null,8,["modelValue"])]),_:1}),r(Y,{label:"内容"},{default:c(()=>[r(Z,{modelValue:S.value.content,"onUpdate:modelValue":u[13]||(u[13]=v=>S.value.content=v),type:"textarea",rows:4,placeholder:"请输入具体内容",class:"cute-input"},null,8,["modelValue"])]),_:1}),r(Y,{label:"创建人"},{default:c(()=>[r(Z,{modelValue:S.value.createdBy,"onUpdate:modelValue":u[14]||(u[14]=v=>S.value.createdBy=v),placeholder:"请输入创建人",class:"cute-input"},null,8,["modelValue"])]),_:1}),r(Y,{label:"状态"},{default:c(()=>[r(zt,{modelValue:S.value.completed,"onUpdate:modelValue":u[15]||(u[15]=v=>S.value.completed=v),class:"cute-checkbox"},{default:c(()=>[...u[26]||(u[26]=[N(" 已完成 ",-1)])]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue"])])}}}),Fa=fe(ja,[["__scopeId","data-v-1d6d47ce"]]),Ga=e=>{e.page({name:"同步机器人",path:"/onilogs",component:_n,fields:["onilogs"]}),e.page({name:"火箭计算器",path:"/calculator",component:fo}),e.page({name:"缺氧 TodoList",path:"/onitodos",component:go}),e.slot({type:"calculator",component:uo}),e.slot({type:"onitodos",component:Fa})};export{Ga as default};
|
|
5
|
+
**/const _o=Object.prototype.hasOwnProperty,Ue=(e,n)=>_o.call(e,n),ge=e=>typeof e=="function",_e=e=>typeof e=="string",it=e=>e!==null&&typeof e=="object";var yo=typeof global=="object"&&global&&global.Object===Object&&global,ho=typeof self=="object"&&self&&self.Object===Object&&self,Ie=yo||ho||Function("return this")(),ne=Ie.Symbol,ut=Object.prototype,bo=ut.hasOwnProperty,Co=ut.toString,re=ne?ne.toStringTag:void 0;function wo(e){var n=bo.call(e,re),t=e[re];try{e[re]=void 0;var o=true}catch{}var s=Co.call(e);return o&&(n?e[re]=t:delete e[re]),s}var xo=Object.prototype,So=xo.toString;function To(e){return So.call(e)}var $o="[object Null]",ko="[object Undefined]",Ke=ne?ne.toStringTag:void 0;function ct(e){return e==null?e===void 0?ko:$o:Ke&&Ke in Object(e)?wo(e):To(e)}function Oo(e){return e!=null&&typeof e=="object"}var Eo="[object Symbol]";function Me(e){return typeof e=="symbol"||Oo(e)&&ct(e)==Eo}function zo(e,n){for(var t=-1,o=e==null?0:e.length,s=Array(o);++t<o;)s[t]=n(e[t],t,e);return s}var Be=Array.isArray,Ge=ne?ne.prototype:void 0,He=Ge?Ge.toString:void 0;function dt(e){if(typeof e=="string")return e;if(Be(e))return zo(e,dt)+"";if(Me(e))return He?He.call(e):"";var n=e+"";return n=="0"&&1/e==-1/0?"-0":n}function pt(e){var n=typeof e;return e!=null&&(n=="object"||n=="function")}var No="[object AsyncFunction]",Vo="[object Function]",Io="[object GeneratorFunction]",Mo="[object Proxy]";function Bo(e){if(!pt(e))return false;var n=ct(e);return n==Vo||n==Io||n==No||n==Mo}var Te=Ie["__core-js_shared__"],qe=function(){var e=/[^.]+$/.exec(Te&&Te.keys&&Te.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function Po(e){return!!qe&&qe in e}var Lo=Function.prototype,Do=Lo.toString;function Ro(e){if(e!=null){try{return Do.call(e)}catch{}try{return e+""}catch{}}return""}var jo=/[\\^$.*+?()[\]{}|]/g,Fo=/^\[object .+?Constructor\]$/,Ao=Function.prototype,Uo=Object.prototype,Ko=Ao.toString,Go=Uo.hasOwnProperty,Ho=RegExp("^"+Ko.call(Go).replace(jo,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function qo(e){if(!pt(e)||Po(e))return false;var n=Bo(e)?Ho:Fo;return n.test(Ro(e))}function Wo(e,n){return e==null?void 0:e[n]}function ft(e,n){var t=Wo(e,n);return qo(t)?t:void 0}function Zo(e,n){return e===n||e!==e&&n!==n}var Jo=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Yo=/^\w*$/;function Xo(e,n){if(Be(e))return false;var t=typeof e;return t=="number"||t=="symbol"||t=="boolean"||e==null||Me(e)?true:Yo.test(e)||!Jo.test(e)||n!=null&&e in Object(n)}var ce=ft(Object,"create");function Qo(){this.__data__=ce?ce(null):{},this.size=0}function el(e){var n=this.has(e)&&delete this.__data__[e];return this.size-=n?1:0,n}var tl="__lodash_hash_undefined__",nl=Object.prototype,ol=nl.hasOwnProperty;function ll(e){var n=this.__data__;if(ce){var t=n[e];return t===tl?void 0:t}return ol.call(n,e)?n[e]:void 0}var al=Object.prototype,sl=al.hasOwnProperty;function rl(e){var n=this.__data__;return ce?n[e]!==void 0:sl.call(n,e)}var il="__lodash_hash_undefined__";function ul(e,n){var t=this.__data__;return this.size+=this.has(e)?0:1,t[e]=ce&&n===void 0?il:n,this}function Q(e){var n=-1,t=e==null?0:e.length;for(this.clear();++n<t;){var o=e[n];this.set(o[0],o[1])}}Q.prototype.clear=Qo;Q.prototype.delete=el;Q.prototype.get=ll;Q.prototype.has=rl;Q.prototype.set=ul;function cl(){this.__data__=[],this.size=0}function Ce(e,n){for(var t=e.length;t--;)if(Zo(e[t][0],n))return t;return-1}var dl=Array.prototype,pl=dl.splice;function fl(e){var n=this.__data__,t=Ce(n,e);if(t<0)return false;var o=n.length-1;return t==o?n.pop():pl.call(n,t,1),--this.size,true}function ml(e){var n=this.__data__,t=Ce(n,e);return t<0?void 0:n[t][1]}function vl(e){return Ce(this.__data__,e)>-1}function gl(e,n){var t=this.__data__,o=Ce(t,e);return o<0?(++this.size,t.push([e,n])):t[o][1]=n,this}function le(e){var n=-1,t=e==null?0:e.length;for(this.clear();++n<t;){var o=e[n];this.set(o[0],o[1])}}le.prototype.clear=cl;le.prototype.delete=fl;le.prototype.get=ml;le.prototype.has=vl;le.prototype.set=gl;var _l=ft(Ie,"Map");function yl(){this.size=0,this.__data__={hash:new Q,map:new(_l||le),string:new Q}}function hl(e){var n=typeof e;return n=="string"||n=="number"||n=="symbol"||n=="boolean"?e!=="__proto__":e===null}function we(e,n){var t=e.__data__;return hl(n)?t[typeof n=="string"?"string":"hash"]:t.map}function bl(e){var n=we(this,e).delete(e);return this.size-=n?1:0,n}function Cl(e){return we(this,e).get(e)}function wl(e){return we(this,e).has(e)}function xl(e,n){var t=we(this,e),o=t.size;return t.set(e,n),this.size+=t.size==o?0:1,this}function ee(e){var n=-1,t=e==null?0:e.length;for(this.clear();++n<t;){var o=e[n];this.set(o[0],o[1])}}ee.prototype.clear=yl;ee.prototype.delete=bl;ee.prototype.get=Cl;ee.prototype.has=wl;ee.prototype.set=xl;var Sl="Expected a function";function Pe(e,n){if(typeof e!="function"||n!=null&&typeof n!="function")throw new TypeError(Sl);var t=function(){var o=arguments,s=n?n.apply(this,o):o[0],d=t.cache;if(d.has(s))return d.get(s);var i=e.apply(this,o);return t.cache=d.set(s,i)||d,i};return t.cache=new(Pe.Cache||ee),t}Pe.Cache=ee;var Tl=500;function $l(e){var n=Pe(e,function(o){return t.size===Tl&&t.clear(),o}),t=n.cache;return n}var kl=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Ol=/\\(\\)?/g,El=$l(function(e){var n=[];return e.charCodeAt(0)===46&&n.push(""),e.replace(kl,function(t,o,s,d){n.push(s?d.replace(Ol,"$1"):o||t)}),n});function zl(e){return e==null?"":dt(e)}function Nl(e,n){return Be(e)?e:Xo(e,n)?[e]:El(zl(e))}function Vl(e){if(typeof e=="string"||Me(e))return e;var n=e+"";return n=="0"&&1/e==-1/0?"-0":n}function Il(e,n){n=Nl(n,e);for(var t=0,o=n.length;e!=null&&t<o;)e=e[Vl(n[t++])];return t&&t==o?e:void 0}function Ml(e,n,t){var o=e==null?void 0:Il(e,n);return o===void 0?t:o}function Bl(e){for(var n=-1,t=e==null?0:e.length,o={};++n<t;){var s=e[n];o[s[0]]=s[1]}return o}const Pl=e=>e===void 0,de=e=>typeof e=="number",Ll=e=>typeof Element>"u"?false:e instanceof Element,Dl=e=>_e(e)?!Number.isNaN(Number(e)):false,We=e=>Object.keys(e);function Ee(e,n="px"){if(!e)return"";if(de(e)||Dl(e))return`${e}${n}`;if(_e(e))return e}const mt="__epPropKey",F=e=>e,Rl=e=>it(e)&&!!e[mt],vt=(e,n)=>{if(!it(e)||Rl(e))return e;const{values:t,required:o,default:s,type:d,validator:i}=e,f={type:d,required:!!o,validator:t||i?b=>{let _=false,y=[];if(t&&(y=Array.from(t),Ue(e,"default")&&y.push(s),_||(_=y.includes(b))),i&&(_||(_=i(b))),!_&&y.length>0){const S=[...new Set(y)].map(T=>JSON.stringify(T)).join(", ");It(`Invalid prop: validation failed${n?` for prop "${n}"`:""}. Expected one of [${S}], got value ${JSON.stringify(b)}.`)}return _}:void 0,[mt]:true};return Ue(e,"default")&&(f.default=s),f},fe=e=>Bl(Object.entries(e).map(([n,t])=>[n,vt(t,n)])),jl=F([String,Object,Function]),Fl={Close:Yt},Ze={success:an,warning:cn,error:Zt,info:Qt},gt=(e,n)=>(e.install=t=>{for(const o of[e,...Object.values({})])t.component(o.name,o)},e),Al=(e,n)=>(e.install=t=>{e._context=t._context,t.config.globalProperties[n]=e},e),Ul={esc:"Escape"},Kl=["","default","small","large"],Gl=e=>e,Je=({from:e,replacement:n,scope:t,version:o,ref:s,type:d="API"},i)=>{he(()=>m(i),l=>{},{immediate:true})};var Hl={name:"en",el:{breadcrumb:{label:"Breadcrumb"},colorpicker:{confirm:"OK",clear:"Clear",defaultLabel:"color picker",description:"current color is {color}. press enter to select a new color."},datepicker:{now:"Now",today:"Today",cancel:"Cancel",clear:"Clear",confirm:"OK",dateTablePrompt:"Use the arrow keys and enter to select the day of the month",monthTablePrompt:"Use the arrow keys and enter to select the month",yearTablePrompt:"Use the arrow keys and enter to select the year",selectedDate:"Selected date",selectDate:"Select date",selectTime:"Select time",startDate:"Start Date",startTime:"Start Time",endDate:"End Date",endTime:"End Time",prevYear:"Previous Year",nextYear:"Next Year",prevMonth:"Previous Month",nextMonth:"Next Month",year:"",month1:"January",month2:"February",month3:"March",month4:"April",month5:"May",month6:"June",month7:"July",month8:"August",month9:"September",month10:"October",month11:"November",month12:"December",week:"week",weeks:{sun:"Sun",mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat"},weeksFull:{sun:"Sunday",mon:"Monday",tue:"Tuesday",wed:"Wednesday",thu:"Thursday",fri:"Friday",sat:"Saturday"},months:{jan:"Jan",feb:"Feb",mar:"Mar",apr:"Apr",may:"May",jun:"Jun",jul:"Jul",aug:"Aug",sep:"Sep",oct:"Oct",nov:"Nov",dec:"Dec"}},inputNumber:{decrease:"decrease number",increase:"increase number"},select:{loading:"Loading",noMatch:"No matching data",noData:"No data",placeholder:"Select"},dropdown:{toggleDropdown:"Toggle Dropdown"},cascader:{noMatch:"No matching data",loading:"Loading",placeholder:"Select",noData:"No data"},pagination:{goto:"Go to",pagesize:"/page",total:"Total {total}",pageClassifier:"",page:"Page",prev:"Go to previous page",next:"Go to next page",currentPage:"page {pager}",prevPages:"Previous {pager} pages",nextPages:"Next {pager} pages",deprecationWarning:"Deprecated usages detected, please refer to the el-pagination documentation for more details"},dialog:{close:"Close this dialog"},drawer:{close:"Close this dialog"},messagebox:{title:"Message",confirm:"OK",cancel:"Cancel",error:"Illegal input",close:"Close this dialog"},upload:{deleteTip:"press delete to remove",delete:"Delete",preview:"Preview",continue:"Continue"},slider:{defaultLabel:"slider between {min} and {max}",defaultRangeStartLabel:"pick start value",defaultRangeEndLabel:"pick end value"},table:{emptyText:"No Data",confirmFilter:"Confirm",resetFilter:"Reset",clearFilter:"All",sumText:"Sum"},tour:{next:"Next",previous:"Previous",finish:"Finish"},tree:{emptyText:"No Data"},transfer:{noMatch:"No matching data",noData:"No data",titles:["List 1","List 2"],filterPlaceholder:"Enter keyword",noCheckedFormat:"{total} items",hasCheckedFormat:"{checked}/{total} checked"},image:{error:"FAILED"},pageHeader:{title:"Back"},popconfirm:{confirmButtonText:"Yes",cancelButtonText:"No"},carousel:{leftArrow:"Carousel arrow left",rightArrow:"Carousel arrow right",indicator:"Carousel switch to index {index}"}}};const ql=e=>(n,t)=>Wl(n,t,m(e)),Wl=(e,n,t)=>Ml(t,e,e).replace(/\{(\w+)\}/g,(o,s)=>{var d;return`${(d=n==null?void 0:n[s])!=null?d:`{${s}}`}`}),Zl=e=>{const n=w(()=>m(e).name),t=Mt(e)?e:O(e);return{lang:n,locale:t,t:ql(e)}},_t=Symbol("localeContextKey"),Jl=e=>{const n=e||te(_t,O());return Zl(w(()=>n.value||Hl))},me="el",Yl="is-",X=(e,n,t,o,s)=>{let d=`${e}-${n}`;return t&&(d+=`-${t}`),o&&(d+=`__${o}`),s&&(d+=`--${s}`),d},yt=Symbol("namespaceContextKey"),Xl=e=>{const n=e||(ue()?te(yt,O(me)):O(me));return w(()=>m(n)||me)},Le=(e,n)=>{const t=Xl(n);return{namespace:t,b:(p="")=>X(t.value,e,p,"",""),e:p=>p?X(t.value,e,"",p,""):"",m:p=>p?X(t.value,e,"","",p):"",be:(p,x)=>p&&x?X(t.value,e,p,x,""):"",em:(p,x)=>p&&x?X(t.value,e,"",p,x):"",bm:(p,x)=>p&&x?X(t.value,e,p,"",x):"",bem:(p,x,z)=>p&&x&&z?X(t.value,e,p,x,z):"",is:(p,...x)=>{const z=x.length>=1?x[0]:true;return p&&z?`${Yl}${p}`:""},cssVar:p=>{const x={};for(const z in p)p[z]&&(x[`--${t.value}-${z}`]=p[z]);return x},cssVarName:p=>`--${t.value}-${p}`,cssVarBlock:p=>{const x={};for(const z in p)p[z]&&(x[`--${t.value}-${e}-${z}`]=p[z]);return x},cssVarBlockName:p=>`--${t.value}-${e}-${p}`}},Ye={current:0},Xe=O(0),ht=2e3,Qe=Symbol("elZIndexContextKey"),bt=Symbol("zIndexContextKey"),Ql=e=>{const n=ue()?te(Qe,Ye):Ye,t=e||(ue()?te(bt,void 0):void 0),o=w(()=>{const i=m(t);return de(i)?i:ht}),s=w(()=>o.value+Xe.value),d=()=>(n.current++,Xe.value=n.current,s.value);return!Ve&&te(Qe),{initialZIndex:o,currentZIndex:s,nextZIndex:d}},ea=vt({type:String,values:Kl,required:false}),ta=Symbol("size"),na=Symbol("emptyValuesContextKey"),oa=fe({emptyValues:Array,valueOnClear:{type:[String,Number,Boolean,Function],default:void 0,validator:e=>ge(e)?!e():!e}}),Ct=Symbol(),ye=O();function wt(e,n=void 0){return ue()?te(Ct,ye):ye}function la(e,n){const t=wt(),o=Le(e,w(()=>{var l;return((l=t.value)==null?void 0:l.namespace)||me})),s=Jl(w(()=>{var l;return(l=t.value)==null?void 0:l.locale})),d=Ql(w(()=>{var l;return((l=t.value)==null?void 0:l.zIndex)||ht})),i=w(()=>{var l;return m(n)||((l=t.value)==null?void 0:l.size)||""});return xt(w(()=>m(t)||{})),{ns:o,locale:s,zIndex:d,size:i}}const xt=(e,n,t=false)=>{var o;const s=!!ue(),d=s?wt():void 0,i=(o=void 0)!=null?o:s?Bt:void 0;if(!i)return;const l=w(()=>{const f=m(e);return d!=null&&d.value?aa(d.value,f):f});return i(Ct,l),i(_t,w(()=>l.value.locale)),i(yt,w(()=>l.value.namespace)),i(bt,w(()=>l.value.zIndex)),i(ta,{size:w(()=>l.value.size||"")}),i(na,w(()=>({emptyValues:l.value.emptyValues,valueOnClear:l.value.valueOnClear}))),(t||!ye.value)&&(ye.value=l.value),l},aa=(e,n)=>{const t=[...new Set([...We(e),...We(n)])],o={};for(const s of t)o[s]=n[s]!==void 0?n[s]:e[s];return o},sa=fe({a11y:{type:Boolean,default:true},locale:{type:F(Object)},size:ea,button:{type:F(Object)},experimentalFeatures:{type:F(Object)},keyboardNavigation:{type:Boolean,default:true},message:{type:F(Object)},zIndex:Number,namespace:{type:String,default:"el"},...oa}),ze={};I({name:"ElConfigProvider",props:sa,setup(e,{slots:n}){he(()=>e.message,o=>{Object.assign(ze,o??{})},{immediate:true,deep:true});const t=xt(e);return()=>be(n,"default",{config:t==null?void 0:t.value})}});var De=(e,n)=>{const t=e.__vccOpts||e;for(const[o,s]of n)t[o]=s;return t};const ra=fe({size:{type:F([Number,String])},color:{type:String}}),ia=I({name:"ElIcon",inheritAttrs:false}),ua=I({...ia,props:ra,setup(e){const n=e,t=Le("icon"),o=w(()=>{const{size:s,color:d}=n;return!s&&!d?{}:{fontSize:Pl(s)?void 0:Ee(s),"--color":d}});return(s,d)=>(g(),$("i",Pt({class:m(t).b(),style:m(o)},s.$attrs),[be(s.$slots,"default")],16))}});var ca=De(ua,[["__file","icon.vue"]]);const et=gt(ca),da=fe({value:{type:[String,Number],default:""},max:{type:Number,default:99},isDot:Boolean,hidden:Boolean,type:{type:String,values:["primary","success","warning","info","danger"],default:"danger"},showZero:{type:Boolean,default:true},color:String,dotStyle:{type:F([String,Object,Array])},badgeStyle:{type:F([String,Object,Array])},offset:{type:F(Array),default:[0,0]},dotClass:{type:String},badgeClass:{type:String}}),pa=["textContent"],fa=I({name:"ElBadge"}),ma=I({...fa,props:da,setup(e,{expose:n}){const t=e,o=Le("badge"),s=w(()=>t.isDot?"":de(t.value)&&de(t.max)?t.max<t.value?`${t.max}+`:t.value===0&&!t.showZero?"":`${t.value}`:`${t.value}`),d=w(()=>{var i,l,f,b,_,y;return[{backgroundColor:t.color,marginRight:Ee(-((l=(i=t.offset)==null?void 0:i[0])!=null?l:0)),marginTop:Ee((b=(f=t.offset)==null?void 0:f[1])!=null?b:0)},(_=t.dotStyle)!=null?_:{},(y=t.badgeStyle)!=null?y:{}]});return Je({from:"dot-style",replacement:"badge-style",version:"2.8.0",scope:"el-badge",ref:"https://element-plus.org/en-US/component/badge.html"},w(()=>!!t.dotStyle)),Je({from:"dot-class",replacement:"badge-class",version:"2.8.0",scope:"el-badge",ref:"https://element-plus.org/en-US/component/badge.html"},w(()=>!!t.dotClass)),n({content:s}),(i,l)=>(g(),$("div",{class:D(m(o).b())},[be(i.$slots,"default"),r(nt,{name:`${m(o).namespace.value}-zoom-in-center`,persisted:""},{default:c(()=>[Ne(a("sup",{class:D([m(o).e("content"),m(o).em("content",i.type),m(o).is("fixed",!!i.$slots.default),m(o).is("dot",i.isDot),i.dotClass,i.badgeClass]),style:ot(m(d)),textContent:B(m(s))},null,14,pa),[[lt,!i.hidden&&(m(s)||i.isDot)]])]),_:1},8,["name"])],2))}});var va=De(ma,[["__file","badge.vue"]]);const ga=gt(va),St=["success","info","warning","error"],P=Gl({customClass:"",center:false,dangerouslyUseHTMLString:false,duration:3e3,icon:void 0,id:"",message:"",onClose:void 0,showClose:false,type:"info",plain:false,offset:16,zIndex:0,grouping:false,repeatNum:1,appendTo:Ve?document.body:void 0}),_a=fe({customClass:{type:String,default:P.customClass},center:{type:Boolean,default:P.center},dangerouslyUseHTMLString:{type:Boolean,default:P.dangerouslyUseHTMLString},duration:{type:Number,default:P.duration},icon:{type:jl,default:P.icon},id:{type:String,default:P.id},message:{type:F([String,Object,Function]),default:P.message},onClose:{type:F(Function),default:P.onClose},showClose:{type:Boolean,default:P.showClose},type:{type:String,values:St,default:P.type},plain:{type:Boolean,default:P.plain},offset:{type:Number,default:P.offset},zIndex:{type:Number,default:P.zIndex},grouping:{type:Boolean,default:P.grouping},repeatNum:{type:Number,default:P.repeatNum}}),ya={destroy:()=>true},A=Lt([]),ha=e=>{const n=A.findIndex(s=>s.id===e),t=A[n];let o;return n>0&&(o=A[n-1]),{current:t,prev:o}},ba=e=>{const{prev:n}=ha(e);return n?n.vm.exposed.bottom.value:0},Ca=(e,n)=>A.findIndex(o=>o.id===e)>0?16:n,wa=["id"],xa=["innerHTML"],Sa=I({name:"ElMessage"}),Ta=I({...Sa,props:_a,emits:ya,setup(e,{expose:n}){const t=e,{Close:o}=Fl,{ns:s,zIndex:d}=la("message"),{currentZIndex:i,nextZIndex:l}=d,f=O(),b=O(false),_=O(0);let y;const S=w(()=>t.type?t.type==="error"?"danger":t.type:"info"),T=w(()=>{const E=t.type;return{[s.bm("icon",E)]:E&&Ze[E]}}),k=w(()=>t.icon||Ze[t.type]||""),p=w(()=>ba(t.id)),x=w(()=>Ca(t.id,t.offset)+p.value),z=w(()=>_.value+x.value),j=w(()=>({top:`${x.value}px`,zIndex:i.value}));function U(){t.duration!==0&&({stop:y}=Gt(()=>{M()},t.duration))}function V(){y==null||y()}function M(){b.value=false}function q({code:E}){E===Ul.esc&&M()}return tt(()=>{U(),l(),b.value=true}),he(()=>t.repeatNum,()=>{V(),U()}),Ut(document,"keydown",q),Kt(f,()=>{_.value=f.value.getBoundingClientRect().height}),n({visible:b,bottom:z,close:M}),(E,ae)=>(g(),R(nt,{name:m(s).b("fade"),onBeforeLeave:E.onClose,onAfterLeave:ae[0]||(ae[0]=h=>E.$emit("destroy")),persisted:""},{default:c(()=>[Ne(a("div",{id:E.id,ref_key:"messageRef",ref:f,class:D([m(s).b(),{[m(s).m(E.type)]:E.type},m(s).is("center",E.center),m(s).is("closable",E.showClose),m(s).is("plain",E.plain),E.customClass]),style:ot(m(j)),role:"alert",onMouseenter:V,onMouseleave:U},[E.repeatNum>1?(g(),R(m(ga),{key:0,value:E.repeatNum,type:m(S),class:D(m(s).e("badge"))},null,8,["value","type","class"])):L("v-if",true),m(k)?(g(),R(m(et),{key:1,class:D([m(s).e("icon"),m(T)])},{default:c(()=>[(g(),R(Dt(m(k))))]),_:1},8,["class"])):L("v-if",true),be(E.$slots,"default",{},()=>[E.dangerouslyUseHTMLString?(g(),$(ie,{key:1},[L(" Caution here, message could've been compromised, never use user's input as message "),a("p",{class:D(m(s).e("content")),innerHTML:E.message},null,10,xa)],2112)):(g(),$("p",{key:0,class:D(m(s).e("content"))},B(E.message),3))]),E.showClose?(g(),R(m(et),{key:2,class:D(m(s).e("closeBtn")),onClick:Rt(M,["stop"])},{default:c(()=>[r(m(o))]),_:1},8,["class","onClick"])):L("v-if",true)],46,wa),[[lt,b.value]])]),_:3},8,["name","onBeforeLeave"]))}});var $a=De(Ta,[["__file","message.vue"]]);let ka=1;const Tt=e=>{const n=!e||_e(e)||at(e)||ge(e)?{message:e}:e,t={...P,...n};if(!t.appendTo)t.appendTo=document.body;else if(_e(t.appendTo)){let o=document.querySelector(t.appendTo);Ll(o)||(o=document.body),t.appendTo=o}return t},Oa=e=>{const n=A.indexOf(e);if(n===-1)return;A.splice(n,1);const{handler:t}=e;t.close()},Ea=({appendTo:e,...n},t)=>{const o=`message_${ka++}`,s=n.onClose,d=document.createElement("div"),i={...n,id:o,onClose:()=>{s==null||s(),Oa(_)},onDestroy:()=>{Ae(null,d)}},l=r($a,i,ge(i.message)||at(i.message)?{default:ge(i.message)?i.message:()=>i.message}:null);l.appContext=t||oe._context,Ae(l,d),e.appendChild(d.firstElementChild);const f=l.component,_={id:o,vnode:l,vm:f,handler:{close:()=>{f.exposed.visible.value=false}},props:l.component.props};return _},oe=(e={},n)=>{if(!Ve)return{close:()=>{}};if(de(ze.max)&&A.length>=ze.max)return{close:()=>{}};const t=Tt(e);if(t.grouping&&A.length){const s=A.find(({vnode:d})=>{var i;return((i=d.props)==null?void 0:i.message)===t.message});if(s)return s.props.repeatNum+=1,s.props.type=t.type,s.handler}const o=Ea(t,n);return A.push(o),o.handler};St.forEach(e=>{oe[e]=(n={},t)=>{const o=Tt(n);return oe({...o,type:e},t)}});function za(e){for(const n of A)(!e||e===n.props.type)&&n.handler.close()}oe.closeAll=za;oe._context=null;const K=Al(oe,"$message"),Na={class:"todo-app"},Va={class:"todo-container"},Ia={class:"todo-header"},Ma={class:"button-group"},Ba={class:"todo-stats"},Pa={class:"search-filter-section"},La={class:"filter-buttons"},Da={class:"todo-table-card"},Ra={key:1,class:"pagination-section"},ja=I({__name:"todolist",setup(e){const n=O([]),t=O(false),o=O(false),s=O(false),d=O(false),i=O(false),l=O(""),f=O("all"),b=O(1),_=O(8),y=O({title:"",content:"",createdBy:""}),S=O({id:0,title:"",content:"",createdBy:"",completed:false}),T=w(()=>n.value.filter(h=>h.completed).length),k=w(()=>n.value.filter(h=>!h.completed).length),p=w(()=>{let h=n.value;if(f.value==="active"?h=h.filter(u=>!u.completed):f.value==="completed"&&(h=h.filter(u=>u.completed)),l.value.trim()){const u=l.value.toLowerCase().trim();h=h.filter(W=>W.title.toLowerCase().includes(u)||W.content.toLowerCase().includes(u))}return b.value=1,h}),x=w(()=>{const h=(b.value-1)*_.value,u=h+_.value;return p.value.slice(h,u)});function z(h){_.value=h,b.value=1}function j(h){b.value=h}function U(h){return new Date(h).toLocaleString("zh-CN")}function V(){s.value=true,se("onitodos/list").then(h=>{n.value=h,s.value=false,K.success("刷新成功")}).catch(h=>{s.value=false,K.error("刷新失败"),console.error(h)})}se("onitodos/list").then(h=>{n.value=h});async function M(){if(!y.value.title.trim()){K.warning("请输入标题");return}o.value=true;try{await se("onitodos/add",{title:y.value.title,content:y.value.content,createdBy:y.value.createdBy}),K.success("添加成功"),d.value=false,y.value={title:"",content:"",createdBy:""},V()}catch(h){K.error("添加失败"),console.error(h)}finally{o.value=false}}function q(h){S.value={id:h.id,title:h.title,content:h.content,createdBy:h.createdBy,completed:h.completed},i.value=true}async function E(){if(!S.value.title.trim()){K.warning("请输入标题");return}o.value=true;try{await se("onitodos/update",{id:S.value.id,title:S.value.title,content:S.value.content,createdBy:S.value.createdBy,completed:S.value.completed}),K.success("更新成功"),i.value=false,V()}catch(h){K.error("更新失败"),console.error(h)}finally{o.value=false}}async function ae(h,u){try{await se("onitodos/update",{id:h.id,completed:u}),K.success(u?"标记完成成功":"取消完成成功"),V()}catch(W){K.error("操作失败"),console.error(W)}}return(h,u)=>{const W=C("el-icon"),G=C("el-button"),xe=C("el-statistic"),Z=C("el-input"),J=C("el-table-column"),$t=C("el-tag"),kt=C("el-table"),Ot=C("el-empty"),Et=C("el-pagination"),Y=C("el-form-item"),Re=C("el-form"),je=C("el-dialog"),zt=C("el-checkbox"),Nt=jt("loading");return g(),$("div",Na,[u[29]||(u[29]=a("div",{class:"bg-pattern"},null,-1)),a("div",Va,[a("div",Ia,[u[20]||(u[20]=a("h2",{class:"todo-title"},[a("span",{class:"title-dot"},"♦"),a("span",{class:"title-text"},"ONITODO"),a("span",{class:"title-dot"},"♦")],-1)),a("div",Ma,[r(G,{type:"default",class:"cute-btn",onClick:V,loading:s.value},{default:c(()=>[r(W,null,{default:c(()=>[r(m(on))]),_:1}),u[18]||(u[18]=N(" 刷新 ",-1))]),_:1},8,["loading"]),r(G,{type:"primary",class:"cute-btn primary",onClick:u[0]||(u[0]=v=>d.value=true)},{default:c(()=>[r(W,null,{default:c(()=>[r(m(tn))]),_:1}),u[19]||(u[19]=N(" 新增待办 ",-1))]),_:1})])]),a("div",Ba,[r(xe,{title:"总计",value:n.value.length},null,8,["value"]),r(xe,{title:"已完成",value:T.value},null,8,["value"]),r(xe,{title:"未完成",value:k.value},null,8,["value"])]),a("div",Pa,[r(Z,{modelValue:l.value,"onUpdate:modelValue":u[1]||(u[1]=v=>l.value=v),placeholder:"🔍 搜索标题或内容...",class:"search-input cute-input",clearable:""},null,8,["modelValue"]),a("div",La,[a("button",{class:D(["filter-btn",{active:f.value==="all"}]),onClick:u[2]||(u[2]=v=>f.value="all")}," 全部 ",2),a("button",{class:D(["filter-btn",{active:f.value==="active"}]),onClick:u[3]||(u[3]=v=>f.value="active")}," 未完成 ",2),a("button",{class:D(["filter-btn",{active:f.value==="completed"}]),onClick:u[4]||(u[4]=v=>f.value="completed")}," 已完成 ",2)])]),a("div",Da,[Ne((g(),R(kt,{data:x.value,stripe:"",style:{width:"100%"},class:"cute-table"},{default:c(()=>[r(J,{type:"index",label:"id",width:"80"}),r(J,{prop:"title",label:"标题","min-width":"150","show-overflow-tooltip":""},{default:c(({row:v})=>[a("span",{class:D({"completed-text":v.completed})},B(v.title),3)]),_:1}),r(J,{prop:"content",label:"内容","min-width":"150","show-overflow-tooltip":""}),r(J,{prop:"createdBy",label:"创建人",width:"80","show-overflow-tooltip":""}),r(J,{prop:"completed",label:"状态",width:"80"},{default:c(({row:v})=>[r($t,{type:v.completed?"success":"warning",size:"small",class:"cute-tag"},{default:c(()=>[N(B(v.completed?"已完成":"未完成"),1)]),_:2},1032,["type"])]),_:1}),r(J,{prop:"createdAt",label:"创建时间",width:"180"},{default:c(({row:v})=>[N(B(U(v.createdAt)),1)]),_:1}),r(J,{label:"操作",width:"150",fixed:"right"},{default:c(({row:v})=>[v.completed?(g(),R(G,{key:1,size:"small",type:"warning",class:"cute-btn",onClick:Fe=>ae(v,false)},{default:c(()=>[...u[22]||(u[22]=[N(" 取消 ",-1)])]),_:1},8,["onClick"])):(g(),R(G,{key:0,size:"small",type:"success",class:"cute-btn",onClick:Fe=>ae(v,true)},{default:c(()=>[...u[21]||(u[21]=[N(" 完成 ",-1)])]),_:1},8,["onClick"])),r(G,{size:"small",type:"primary",class:"cute-btn",onClick:Fe=>q(v)},{default:c(()=>[...u[23]||(u[23]=[N(" 编辑 ",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[Nt,t.value]]),p.value.length===0&&!t.value?(g(),R(Ot,{key:0,description:"暂无待办事项"})):L("v-if",true),p.value.length>8?(g(),$("div",Ra,[r(Et,{"current-page":b.value,"onUpdate:currentPage":u[5]||(u[5]=v=>b.value=v),"page-size":_.value,"onUpdate:pageSize":u[6]||(u[6]=v=>_.value=v),"page-sizes":[8,16,32,64],total:p.value.length,layout:"total, sizes, prev, pager, next, jumper",background:"",onSizeChange:z,onCurrentChange:j},null,8,["current-page","page-size","total"])])):L("v-if",true)])]),r(je,{modelValue:d.value,"onUpdate:modelValue":u[11]||(u[11]=v=>d.value=v),title:"新增待办事项",width:"500px",class:"cute-dialog"},{footer:c(()=>[r(G,{onClick:u[10]||(u[10]=v=>d.value=false),class:"cute-btn"},{default:c(()=>[...u[24]||(u[24]=[N("取消",-1)])]),_:1}),r(G,{type:"primary",onClick:M,loading:o.value,class:"cute-btn primary"},{default:c(()=>[...u[25]||(u[25]=[N(" 保存 ",-1)])]),_:1},8,["loading"])]),default:c(()=>[r(Re,{model:y.value,"label-width":"80px"},{default:c(()=>[r(Y,{label:"标题"},{default:c(()=>[r(Z,{modelValue:y.value.title,"onUpdate:modelValue":u[7]||(u[7]=v=>y.value.title=v),placeholder:"请输入标题",class:"cute-input"},null,8,["modelValue"])]),_:1}),r(Y,{label:"内容"},{default:c(()=>[r(Z,{modelValue:y.value.content,"onUpdate:modelValue":u[8]||(u[8]=v=>y.value.content=v),type:"textarea",rows:4,placeholder:"请输入具体内容",class:"cute-input"},null,8,["modelValue"])]),_:1}),r(Y,{label:"创建人"},{default:c(()=>[r(Z,{modelValue:y.value.createdBy,"onUpdate:modelValue":u[9]||(u[9]=v=>y.value.createdBy=v),placeholder:"默认为:默认创建人",class:"cute-input"},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue"]),r(je,{modelValue:i.value,"onUpdate:modelValue":u[17]||(u[17]=v=>i.value=v),title:"编辑待办事项",width:"500px",class:"cute-dialog"},{footer:c(()=>[r(G,{onClick:u[16]||(u[16]=v=>i.value=false),class:"cute-btn"},{default:c(()=>[...u[27]||(u[27]=[N("取消",-1)])]),_:1}),r(G,{type:"primary",onClick:E,loading:o.value,class:"cute-btn primary"},{default:c(()=>[...u[28]||(u[28]=[N(" 保存 ",-1)])]),_:1},8,["loading"])]),default:c(()=>[r(Re,{model:S.value,"label-width":"80px"},{default:c(()=>[r(Y,{label:"标题"},{default:c(()=>[r(Z,{modelValue:S.value.title,"onUpdate:modelValue":u[12]||(u[12]=v=>S.value.title=v),placeholder:"请输入标题",class:"cute-input"},null,8,["modelValue"])]),_:1}),r(Y,{label:"内容"},{default:c(()=>[r(Z,{modelValue:S.value.content,"onUpdate:modelValue":u[13]||(u[13]=v=>S.value.content=v),type:"textarea",rows:4,placeholder:"请输入具体内容",class:"cute-input"},null,8,["modelValue"])]),_:1}),r(Y,{label:"创建人"},{default:c(()=>[r(Z,{modelValue:S.value.createdBy,"onUpdate:modelValue":u[14]||(u[14]=v=>S.value.createdBy=v),placeholder:"请输入创建人",class:"cute-input"},null,8,["modelValue"])]),_:1}),r(Y,{label:"状态"},{default:c(()=>[r(zt,{modelValue:S.value.completed,"onUpdate:modelValue":u[15]||(u[15]=v=>S.value.completed=v),class:"cute-checkbox"},{default:c(()=>[...u[26]||(u[26]=[N(" 已完成 ",-1)])]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue"])])}}}),Fa=pe(ja,[["__scopeId","data-v-1d6d47ce"]]),Ga=e=>{e.page({name:"同步机器人",path:"/onilogs",component:_n,fields:["onilogs"]}),e.page({name:"火箭计算器",path:"/calculator",component:fo}),e.page({name:"缺氧 TodoList",path:"/onitodos",component:go}),e.slot({type:"calculator",component:uo}),e.slot({type:"onitodos",component:Fa})};export{Ga as default};
|
package/dist/style.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.filter-container[data-v-62639236]{background:#fff;padding:16px;margin-bottom:12px;border-radius:4px;box-shadow:0 2px 4px #0000001a}.log-tabs[data-v-62639236]{margin-bottom:16px}.filter-row[data-v-62639236]{display:flex;gap:12px;align-items:center}.filter-input[data-v-62639236]{flex:1}.button-group[data-v-62639236]{display:flex;gap:8px}.log-container[data-v-62639236]{width:100%;height:calc(100vh - 220px);overflow-y:auto;padding:12px;font-family:monospace;background:#1e1e1e;color:#d4d4d4;border-radius:4px}.log-line[data-v-62639236]{line-height:1.5;font-size:13px}pre[data-v-62639236]{margin:0;font-family:inherit;white-space:pre-wrap;word-break:break-all}.log-error[data-v-62639236]{color:#f44747}.log-warn[data-v-62639236]{color:#dcdcaa}.log-info[data-v-62639236]{color:#4fc1ff}.empty-state[data-v-62639236]{display:flex;justify-content:center;align-items:center;height:100%;color:gray;font-size:14px}[data-v-3e8f9409]{box-sizing:border-box}.rocket-calculator[data-v-3e8f9409]{max-width:800px;margin:0 auto;padding:20px;box-sizing:border-box;position:relative;min-height:100vh;overflow-x:hidden}.sci-fi-bg[data-v-3e8f9409]{background:linear-gradient(135deg,#0a0e27,#1a1f3a,#0f172a);color:#e0e7ff}.grid-overlay[data-v-3e8f9409]{position:fixed;top:0;left:0;right:0;bottom:0;background-image:linear-gradient(rgba(0,255,255,.03) 1px,transparent 1px),linear-gradient(90deg,rgba(0,255,255,.03) 1px,transparent 1px);background-size:40px 40px;pointer-events:none;z-index:0}.sci-fi-card[data-v-3e8f9409]{background:#0f172af2;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid rgba(0,255,255,.2);box-shadow:0 0 20px #00ffff1a,inset 0 0 20px #00000080;position:relative;overflow:visible;z-index:1}.sci-fi-card[data-v-3e8f9409] .k-card__body{padding:24px}.card-header-line[data-v-3e8f9409]{position:absolute;top:0;left:0;right:0;height:2px;background:linear-gradient(90deg,transparent,#00ffff,#8b5cf6,transparent);animation:lineGlow-3e8f9409 3s ease-in-out infinite;z-index:1}@keyframes lineGlow-3e8f9409{0%,to{opacity:.5}50%{opacity:1}}.header-card[data-v-3e8f9409]{margin-bottom:24px;text-align:center;position:relative;z-index:10;margin-top:8px}.header-glow[data-v-3e8f9409]{position:absolute;top:-50%;left:50%;transform:translate(-50%);width:200%;height:100%;background:radial-gradient(ellipse,rgba(139,92,246,.15) 0%,transparent 70%);pointer-events:none;z-index:-1}.sci-fi-title[data-v-3e8f9409]{margin:0 0 8px;font-size:28px;font-weight:800;letter-spacing:4px;color:#0ff;background:linear-gradient(90deg,#0ff,#8b5cf6,#0ff);background-size:200% auto;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;animation:titleShine-3e8f9409 4s linear infinite;position:relative;z-index:2;text-shadow:0 0 30px rgba(0,255,255,.3);line-height:1.4}@keyframes titleShine-3e8f9409{0%{background-position:0% center}to{background-position:200% center}}.sci-fi-subtitle[data-v-3e8f9409]{margin:0;color:#64748b;font-size:13px;letter-spacing:2px;text-transform:uppercase;position:relative;z-index:2;line-height:1.5}.content-layout[data-v-3e8f9409]{display:flex;flex-direction:column;gap:24px;position:relative;z-index:1}.config-section[data-v-3e8f9409]{margin-bottom:20px;position:relative;z-index:1}.section-title[data-v-3e8f9409]{margin:0 0 20px;font-size:14px;color:#0ff;letter-spacing:2px;font-weight:600}.distance-control[data-v-3e8f9409]{width:100%}.distance-step-selector[data-v-3e8f9409]{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;margin-bottom:16px}.step-btn[data-v-3e8f9409]{margin:0;background:#0000004d;border:1px solid rgba(0,255,255,.2);color:#94a3b8;padding:8px 4px;font-size:12px;font-weight:600;transition:all .2s ease;white-space:nowrap}.step-btn[data-v-3e8f9409]:hover{border-color:#00ffff80;color:#0ff;transform:translateY(-1px)}.step-btn.active[data-v-3e8f9409]{background:#00ffff26;border-color:#0ff;color:#0ff;box-shadow:0 0 15px #00ffff4d}.distance-input-wrapper[data-v-3e8f9409]{display:flex;align-items:center;justify-content:center;gap:8px;padding:12px;background:#0000004d;border:1px solid rgba(139,92,246,.3);border-radius:4px}.distance-label[data-v-3e8f9409]{color:#64748b;font-size:13px}.distance-value[data-v-3e8f9409]{font-size:20px;font-weight:800;color:#8b5cf6}.unit[data-v-3e8f9409]{color:#8b5cf6;font-weight:600;font-size:14px}.modules-grid[data-v-3e8f9409]{display:grid;grid-template-columns:1fr 1fr;gap:12px}.module-item[data-v-3e8f9409]{background:#00ffff0d;border:1px solid rgba(0,255,255,.1);padding:12px;border-radius:4px;transition:all .3s ease;display:flex;flex-direction:column;gap:8px}.module-item[data-v-3e8f9409]:hover{border-color:#00ffff4d;background:#00ffff14}.module-name[data-v-3e8f9409]{font-size:13px;color:#94a3b8}.module-input[data-v-3e8f9409]{width:100%}.module-input[data-v-3e8f9409] .el-input__wrapper{background:#0000004d;border:1px solid rgba(0,255,255,.2);box-shadow:none;padding:4px 6px}.module-input[data-v-3e8f9409] .el-input__inner{text-align:center;color:#0ff;font-weight:700;font-size:16px}.module-input[data-v-3e8f9409] .el-input-number__decrease,.module-input[data-v-3e8f9409] .el-input-number__increase{background:#0ff3;color:#0ff;border-color:#00ffff4d;font-weight:800;font-size:16px;transition:all .2s ease}.module-input[data-v-3e8f9409] .el-input-number__decrease:hover,.module-input[data-v-3e8f9409] .el-input-number__increase:hover{background:#0ff6;color:#fff}.module-input[data-v-3e8f9409] .el-input-number__decrease.is-disabled,.module-input[data-v-3e8f9409] .el-input-number__increase.is-disabled{background:#0003;color:#475569;border-color:#ffffff1a}.calculate-btn-wrapper[data-v-3e8f9409]{margin-top:24px;margin-bottom:0}.sci-fi-calculate-btn[data-v-3e8f9409]{width:100%;height:50px;background:linear-gradient(135deg,#0ff,#8b5cf6);border:none;color:#0a0e27;font-weight:800;font-size:16px;letter-spacing:2px;position:relative;overflow:hidden;transition:all .3s ease}.sci-fi-calculate-btn[data-v-3e8f9409]:hover{transform:translateY(-2px);box-shadow:0 10px 30px #00ffff4d}.btn-text[data-v-3e8f9409]{position:relative;z-index:1}.btn-glow[data-v-3e8f9409]{position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.4),transparent);animation:btnScan-3e8f9409 2s ease-in-out infinite}@keyframes btnScan-3e8f9409{0%{left:-100%}to{left:100%}}.sci-fi-radio-group[data-v-3e8f9409]{width:100%;display:flex}.sci-fi-radio-group[data-v-3e8f9409] .el-radio-button{flex:1}.sci-fi-radio-group[data-v-3e8f9409] .el-radio-button__inner{width:100%;background:#0000004d;border:1px solid rgba(0,255,255,.2);color:#94a3b8;font-weight:600;padding:12px 10px;transition:all .2s ease}.sci-fi-radio-group[data-v-3e8f9409] .el-radio-button__inner:hover{color:#0ff;border-color:#0ff6}.sci-fi-radio-group[data-v-3e8f9409] .el-radio-button__orig-radio:checked+.el-radio-button__inner{background:#00ffff26;border-color:#0ff;color:#0ff;box-shadow:0 0 15px #0ff3}.oxidizer-hint[data-v-3e8f9409]{display:flex;justify-content:space-around;margin-top:8px}.hint-item[data-v-3e8f9409]{font-size:12px;color:#64748b;transition:all .2s ease}.hint-item.active[data-v-3e8f9409]{color:#0ff;font-weight:600}.divider-line[data-v-3e8f9409]{height:1px;background:linear-gradient(90deg,transparent,rgba(0,255,255,.3),transparent);margin:24px 0}.result-header[data-v-3e8f9409]{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px;flex-wrap:wrap;gap:8px}.result-title[data-v-3e8f9409]{margin:0;font-size:18px;color:#0ff;letter-spacing:2px}.result-status[data-v-3e8f9409]{display:flex;align-items:center;gap:8px;font-size:12px;color:#67c23a;letter-spacing:1px}.status-dot[data-v-3e8f9409]{width:8px;height:8px;background:#67c23a;border-radius:50%;animation:statusPulse-3e8f9409 2s ease-in-out infinite}@keyframes statusPulse-3e8f9409{0%,to{box-shadow:0 0 #67c23a66}50%{box-shadow:0 0 0 8px #67c23a00}}.key-stats[data-v-3e8f9409]{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-bottom:24px}.stat-item[data-v-3e8f9409]{background:#0000004d;border:1px solid rgba(255,255,255,.1);padding:16px;text-align:center;position:relative}.stat-item.primary[data-v-3e8f9409]{border-color:#0ff6;box-shadow:0 0 20px #00ffff1a}.stat-item.success[data-v-3e8f9409]{border-color:#67c23a66;box-shadow:0 0 20px #67c23a1a}.stat-item.warning[data-v-3e8f9409]{border-color:#e6a23c66;box-shadow:0 0 20px #e6a23c1a}.stat-label[data-v-3e8f9409]{font-size:12px;color:#64748b;margin-bottom:8px;text-transform:uppercase;letter-spacing:1px}.stat-value[data-v-3e8f9409]{font-size:24px;font-weight:800}.stat-item.primary .stat-value[data-v-3e8f9409]{color:#0ff}.stat-item.success .stat-value[data-v-3e8f9409]{color:#67c23a}.stat-item.warning .stat-value[data-v-3e8f9409]{color:#e6a23c}.stat-unit[data-v-3e8f9409]{font-size:14px;opacity:.7}.detail-title[data-v-3e8f9409]{margin:0 0 16px;font-size:14px;color:#8b5cf6;letter-spacing:2px}.detail-grid[data-v-3e8f9409]{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}.detail-item[data-v-3e8f9409]{display:flex;justify-content:space-between;align-items:center;background:#0003;padding:12px 16px;border-left:3px solid #8b5cf6;gap:8px}.detail-label[data-v-3e8f9409]{font-size:13px;color:#94a3b8}.detail-value[data-v-3e8f9409]{font-size:16px;font-weight:700;color:#e0e7ff;text-align:right}.sci-fi-divider[data-v-3e8f9409]{border-color:#00ffff1a;margin:24px 0}.table-wrapper[data-v-3e8f9409]{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.sci-fi-table[data-v-3e8f9409]{background:#0003;min-width:500px}.sci-fi-table[data-v-3e8f9409] .el-table__header-wrapper{background:#00ffff0d}.sci-fi-table[data-v-3e8f9409] .el-table th{background:transparent;color:#0ff;border-color:#00ffff1a}.sci-fi-table[data-v-3e8f9409] .el-table td{border-color:#ffffff0d}.sci-fi-table[data-v-3e8f9409] .el-table--striped .el-table__body tr.el-table__row--striped{background:#0000001a}.empty-state[data-v-3e8f9409]{text-align:center;padding:60px 20px;position:relative}.scan-line[data-v-3e8f9409]{position:absolute;top:0;left:0;right:0;height:2px;background:linear-gradient(90deg,transparent,rgba(0,255,255,.5),transparent);animation:scanMove-3e8f9409 3s linear infinite}@keyframes scanMove-3e8f9409{0%{top:0;opacity:0}10%{opacity:1}90%{opacity:1}to{top:100%;opacity:0}}.empty-icon[data-v-3e8f9409]{font-size:48px;margin-bottom:16px}.empty-text[data-v-3e8f9409]{font-size:16px;color:#64748b;margin:0 0 8px;letter-spacing:1px}.empty-text.error[data-v-3e8f9409]{color:#f87171}.empty-hint[data-v-3e8f9409]{font-size:13px;color:#475569;margin:0 0 24px;line-height:1.5}.sci-fi-reset-btn[data-v-3e8f9409]{background:#8b5cf633;border:1px solid #8b5cf6;color:#8b5cf6}.sci-fi-reset-btn[data-v-3e8f9409]:hover{background:#8b5cf64d;color:#a78bfa}.sci-fi-form[data-v-3e8f9409] .el-form-item__label{color:#94a3b8;font-weight:600;padding-bottom:6px;line-height:1.4}.sci-fi-select[data-v-3e8f9409] .el-input__wrapper{background:#0000004d;border:1px solid rgba(0,255,255,.2);box-shadow:none}.sci-fi-select[data-v-3e8f9409] .el-input__wrapper:hover{border-color:#0ff6}.sci-fi-select[data-v-3e8f9409] .el-input__wrapper.is-focus{border-color:#0ff;box-shadow:0 0 10px #0ff3}@media screen and (max-width: 600px){.rocket-calculator[data-v-3e8f9409]{padding:12px}.sci-fi-title[data-v-3e8f9409]{font-size:20px;letter-spacing:2px}.sci-fi-card[data-v-3e8f9409] .k-card__body{padding:16px}.key-stats[data-v-3e8f9409],.modules-grid[data-v-3e8f9409],.detail-grid[data-v-3e8f9409]{grid-template-columns:1fr}.distance-step-selector[data-v-3e8f9409]{grid-template-columns:repeat(3,1fr)}}.scrollbar[data-v-7f2607d9]{background:linear-gradient(135deg,#0a0e27,#1a1f3a,#0f172a);color:#e0e7ff}.todo-app[data-v-1d6d47ce]{min-height:100vh;position:relative;background:linear-gradient(135deg,#e0f4ff,#f0f8ff,#e8f5ff);padding:20px}.bg-pattern[data-v-1d6d47ce]{position:fixed;top:0;left:0;right:0;bottom:0;background-image:radial-gradient(circle,#b8d4e8 1px,transparent 1px);background-size:25px 25px;opacity:.5;pointer-events:none;z-index:0}.todo-container[data-v-1d6d47ce]{position:relative;z-index:1;max-width:1000px;margin:0 auto}.todo-header[data-v-1d6d47ce]{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.todo-title[data-v-1d6d47ce]{font-family:Comic Sans MS,cursive,sans-serif;font-size:48px;font-weight:700;color:#fff;text-shadow:2px 2px 0 #333,-2px -2px 0 #333,2px -2px 0 #333,-2px 2px 0 #333,0px 2px 0 #333,0px -2px 0 #333,2px 0px 0 #333,-2px 0px 0 #333,3px 3px 0 #ffd700,4px 4px 0 #333;letter-spacing:5px;display:inline-flex;align-items:center;gap:10px;margin:0}.title-dot[data-v-1d6d47ce]{color:#ff6b9d;font-size:16px;animation:bounce-1d6d47ce .6s infinite alternate}@keyframes bounce-1d6d47ce{0%{transform:translateY(0)}to{transform:translateY(-6px)}}.title-text[data-v-1d6d47ce]{background:linear-gradient(180deg,#fff,#f0f0f0);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.button-group[data-v-1d6d47ce]{display:flex;gap:10px}.cute-btn[data-v-1d6d47ce]{background:#fff;border:2px solid #333;color:#333;font-family:Comic Sans MS,cursive,sans-serif;border-radius:8px;box-shadow:3px 3px #333;transition:all .1s}.cute-btn[data-v-1d6d47ce]:hover{transform:translate(1px,1px);box-shadow:2px 2px #333}.cute-btn[data-v-1d6d47ce]:active{transform:translate(2px,2px);box-shadow:1px 1px #333}.cute-btn.primary[data-v-1d6d47ce]{background:linear-gradient(135deg,#ffb6c1,pink)}.todo-stats[data-v-1d6d47ce]{display:flex;gap:20px;margin-bottom:15px;padding:8px 15px;background:#fff;border:2px solid #333;border-radius:10px;box-shadow:4px 4px #333}.search-filter-section[data-v-1d6d47ce]{display:flex;gap:15px;margin-bottom:20px;align-items:center;flex-wrap:wrap}.search-input[data-v-1d6d47ce]{flex:1;min-width:250px}.filter-buttons[data-v-1d6d47ce]{display:flex;gap:10px}.filter-btn[data-v-1d6d47ce]{background:#fff;border:2px solid #333;color:#333;font-family:Comic Sans MS,cursive,sans-serif;padding:8px 20px;border-radius:8px;box-shadow:3px 3px #333;cursor:pointer;transition:all .1s}.filter-btn[data-v-1d6d47ce]:hover{transform:translate(1px,1px);box-shadow:2px 2px #333}.filter-btn[data-v-1d6d47ce]:active{transform:translate(2px,2px);box-shadow:1px 1px #333}.filter-btn.active[data-v-1d6d47ce]{background:linear-gradient(135deg,#87ceeb,#98d8c8)}.todo-table-card[data-v-1d6d47ce]{background:#fff;border:3px solid #333;border-radius:15px;box-shadow:8px 8px #333;overflow:hidden}.cute-table[data-v-1d6d47ce]{font-family:Comic Sans MS,cursive,sans-serif}.cute-table[data-v-1d6d47ce] .el-table__header th{background:linear-gradient(135deg,#87ceeb,#98d8c8);color:#333;font-weight:700}.completed-text[data-v-1d6d47ce]{text-decoration:line-through;color:#909399}.cute-tag[data-v-1d6d47ce]{font-family:Comic Sans MS,cursive,sans-serif;border:2px solid #333}[data-v-1d6d47ce] .el-dialog{border:3px solid #333;border-radius:15px;box-shadow:8px 8px #333}[data-v-1d6d47ce] .el-dialog__header{background:linear-gradient(135deg,#87ceeb,#98d8c8);border-bottom:3px solid #333;margin:0;padding:15px 20px}[data-v-1d6d47ce] .el-dialog__header .el-dialog__title{font-family:Comic Sans MS,cursive,sans-serif;font-weight:700;color:#333}.cute-input[data-v-1d6d47ce] .el-input__wrapper{border:2px solid #333;border-radius:8px;box-shadow:none}.cute-checkbox[data-v-1d6d47ce]{font-family:Comic Sans MS,cursive,sans-serif;color:#333}.cute-checkbox[data-v-1d6d47ce] .el-checkbox__input .el-checkbox__inner{border:2px solid #333;border-radius:4px;box-shadow:2px 2px #333}.cute-checkbox[data-v-1d6d47ce] .el-checkbox__input .el-checkbox__inner:hover{transform:translate(1px,1px);box-shadow:1px 1px #333}.cute-checkbox[data-v-1d6d47ce] .el-checkbox__input.is-checked .el-checkbox__inner{background:linear-gradient(135deg,#87ceeb,#98d8c8);border-color:#333}[data-v-1d6d47ce] .el-statistic__head{color:inherit;font-family:Comic Sans MS,cursive,sans-serif;font-size:14px}[data-v-1d6d47ce] .el-statistic__content{color:inherit;font-family:Comic Sans MS,cursive,sans-serif;font-size:20px}.pagination-section[data-v-1d6d47ce]{padding:20px;display:flex;justify-content:center;border-top:2px solid #333;background:linear-gradient(135deg,#f5f5f5,#fff)}[data-v-1d6d47ce] .el-pagination{font-family:Comic Sans MS,cursive,sans-serif}[data-v-1d6d47ce] .el-pagination button,[data-v-1d6d47ce] .el-pagination li{border:2px solid #333;border-radius:8px;box-shadow:2px 2px #333;transition:all .1s}[data-v-1d6d47ce] .el-pagination button:hover,[data-v-1d6d47ce] .el-pagination li:hover{transform:translate(1px,1px);box-shadow:1px 1px #333}[data-v-1d6d47ce] .el-pagination button.is-active,[data-v-1d6d47ce] .el-pagination li.is-active{background:linear-gradient(135deg,#87ceeb,#98d8c8);color:#333;font-weight:700}[data-v-1d6d47ce] .el-pagination .el-pager li{border-radius:8px}[data-v-1d6d47ce] .el-pagination .el-pagination__sizes .el-select .el-input__wrapper,[data-v-1d6d47ce] .el-pagination .el-pagination__jump .el-select .el-input__wrapper,[data-v-1d6d47ce] .el-pagination .el-pagination__sizes .el-input__wrapper,[data-v-1d6d47ce] .el-pagination .el-pagination__jump .el-input__wrapper{border:2px solid #333;border-radius:8px;box-shadow:2px 2px #333}@media (max-width: 768px){.todo-app[data-v-1d6d47ce]{padding:10px}.todo-header[data-v-1d6d47ce]{flex-direction:column;gap:15px;align-items:stretch}.todo-title[data-v-1d6d47ce]{font-size:32px;letter-spacing:2px;justify-content:center}.title-dot[data-v-1d6d47ce]{font-size:12px}.button-group[data-v-1d6d47ce]{justify-content:center;flex-wrap:wrap}.cute-btn[data-v-1d6d47ce]{font-size:14px;padding:8px 12px}.todo-stats[data-v-1d6d47ce]{flex-wrap:wrap;justify-content:center;gap:10px}[data-v-1d6d47ce] .el-statistic{text-align:center}[data-v-1d6d47ce] .el-statistic__content{font-size:18px}.search-filter-section[data-v-1d6d47ce]{flex-direction:column;align-items:stretch}.search-input[data-v-1d6d47ce]{min-width:auto;width:100%}.filter-buttons[data-v-1d6d47ce]{justify-content:center;flex-wrap:wrap}.filter-btn[data-v-1d6d47ce]{padding:6px 14px;font-size:14px}.todo-table-card[data-v-1d6d47ce]{border-radius:10px;box-shadow:4px 4px #333}[data-v-1d6d47ce] .el-dialog{width:95%!important;margin:5vh auto!important;max-width:400px}[data-v-1d6d47ce] .el-dialog__header{padding:12px 16px}[data-v-1d6d47ce] .el-dialog__body{padding:15px}.pagination-section[data-v-1d6d47ce]{padding:15px 10px}[data-v-1d6d47ce] .el-pagination{flex-wrap:wrap;justify-content:center;gap:8px}[data-v-1d6d47ce] .el-pagination .el-pagination__sizes,[data-v-1d6d47ce] .el-pagination .el-pagination__jump{margin:0}[data-v-1d6d47ce] .el-pagination button,[data-v-1d6d47ce] .el-pagination li{min-width:32px;height:32px;line-height:28px;padding:0 8px}}@media (max-width: 480px){.todo-title[data-v-1d6d47ce]{font-size:24px;letter-spacing:1px}.title-dot[data-v-1d6d47ce]{font-size:10px}.cute-btn[data-v-1d6d47ce]{font-size:13px;padding:7px 10px}.filter-btn[data-v-1d6d47ce]{padding:5px 12px;font-size:13px}[data-v-1d6d47ce] .el-dialog{width:92%!important}}
|
|
1
|
+
.filter-container[data-v-e5e2df7e]{background:#fff;padding:16px;margin-bottom:12px;border-radius:8px;box-shadow:0 2px 8px #00000014;border:1px solid #e8e8e8}.log-tabs[data-v-e5e2df7e]{margin-bottom:16px}.log-tabs[data-v-e5e2df7e] .el-tabs__header{border-bottom:2px solid #e8e8e8}.log-tabs[data-v-e5e2df7e] .el-tabs__item{color:#333!important;font-weight:500;font-size:14px;padding:0 20px;margin-right:10px;opacity:1!important}.log-tabs[data-v-e5e2df7e] .el-tabs__item:hover{color:#1890ff!important}.log-tabs[data-v-e5e2df7e] .el-tabs__item.is-active{color:#1890ff!important;font-weight:600}.log-tabs[data-v-e5e2df7e] .el-tabs__active-bar{background-color:#1890ff;height:3px}.filter-row[data-v-e5e2df7e]{display:flex;gap:12px;align-items:center}.filter-input[data-v-e5e2df7e]{flex:1}.filter-input[data-v-e5e2df7e] .el-input__wrapper{border:1px solid #d9d9d9;border-radius:6px;background-color:#fff;transition:all .3s}.filter-input[data-v-e5e2df7e] .el-input__wrapper:hover{border-color:#1890ff}.filter-input[data-v-e5e2df7e] .el-input__wrapper.is-focus{border-color:#1890ff;box-shadow:0 0 0 2px #1890ff1a}.filter-input[data-v-e5e2df7e] .el-input__placeholder{color:#8c8c8c}.button-group[data-v-e5e2df7e]{display:flex;gap:8px}[data-v-e5e2df7e] .el-button{background-color:#fff;border:1px solid #d9d9d9;color:#333;border-radius:6px;padding:6px 16px;font-size:13px;transition:all .3s}[data-v-e5e2df7e] .el-button:hover{background-color:#f5f5f5;border-color:#1890ff;color:#1890ff}[data-v-e5e2df7e] .el-button:active{background-color:#e8f4ff}.log-container[data-v-e5e2df7e]{width:100%;height:calc(100vh - 260px);overflow-y:auto;padding:16px 16px 60px;font-family:Consolas,Monaco,Courier New,monospace;background-color:#1a1a2e;color:#e4e4e4;border-radius:8px;box-shadow:0 2px 8px #00000026}.log-line[data-v-e5e2df7e]{line-height:1.6;font-size:13px;padding:2px 0}pre[data-v-e5e2df7e]{margin:0;font-family:inherit;white-space:pre-wrap;word-break:break-all}.log-error[data-v-e5e2df7e]{color:#ff6b6b;text-shadow:0 0 2px rgba(255,107,107,.3)}.log-warn[data-v-e5e2df7e]{color:#ffd93d;text-shadow:0 0 2px rgba(255,217,61,.3)}.log-info[data-v-e5e2df7e]{color:#6bcfff;text-shadow:0 0 2px rgba(107,207,255,.3)}.empty-state[data-v-e5e2df7e]{display:flex;justify-content:center;align-items:center;height:100%;color:#888;font-size:14px}[data-v-e5e2df7e]::-webkit-scrollbar{width:8px;height:8px}[data-v-e5e2df7e]::-webkit-scrollbar-track{background:#2a2a4a;border-radius:4px}[data-v-e5e2df7e]::-webkit-scrollbar-thumb{background:#4a4a6a;border-radius:4px}[data-v-e5e2df7e]::-webkit-scrollbar-thumb:hover{background:#5a5a8a}[data-v-3e8f9409]{box-sizing:border-box}.rocket-calculator[data-v-3e8f9409]{max-width:800px;margin:0 auto;padding:20px;box-sizing:border-box;position:relative;min-height:100vh;overflow-x:hidden}.sci-fi-bg[data-v-3e8f9409]{background:linear-gradient(135deg,#0a0e27,#1a1f3a,#0f172a);color:#e0e7ff}.grid-overlay[data-v-3e8f9409]{position:fixed;top:0;left:0;right:0;bottom:0;background-image:linear-gradient(rgba(0,255,255,.03) 1px,transparent 1px),linear-gradient(90deg,rgba(0,255,255,.03) 1px,transparent 1px);background-size:40px 40px;pointer-events:none;z-index:0}.sci-fi-card[data-v-3e8f9409]{background:#0f172af2;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid rgba(0,255,255,.2);box-shadow:0 0 20px #00ffff1a,inset 0 0 20px #00000080;position:relative;overflow:visible;z-index:1}.sci-fi-card[data-v-3e8f9409] .k-card__body{padding:24px}.card-header-line[data-v-3e8f9409]{position:absolute;top:0;left:0;right:0;height:2px;background:linear-gradient(90deg,transparent,#00ffff,#8b5cf6,transparent);animation:lineGlow-3e8f9409 3s ease-in-out infinite;z-index:1}@keyframes lineGlow-3e8f9409{0%,to{opacity:.5}50%{opacity:1}}.header-card[data-v-3e8f9409]{margin-bottom:24px;text-align:center;position:relative;z-index:10;margin-top:8px}.header-glow[data-v-3e8f9409]{position:absolute;top:-50%;left:50%;transform:translate(-50%);width:200%;height:100%;background:radial-gradient(ellipse,rgba(139,92,246,.15) 0%,transparent 70%);pointer-events:none;z-index:-1}.sci-fi-title[data-v-3e8f9409]{margin:0 0 8px;font-size:28px;font-weight:800;letter-spacing:4px;color:#0ff;background:linear-gradient(90deg,#0ff,#8b5cf6,#0ff);background-size:200% auto;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;animation:titleShine-3e8f9409 4s linear infinite;position:relative;z-index:2;text-shadow:0 0 30px rgba(0,255,255,.3);line-height:1.4}@keyframes titleShine-3e8f9409{0%{background-position:0% center}to{background-position:200% center}}.sci-fi-subtitle[data-v-3e8f9409]{margin:0;color:#64748b;font-size:13px;letter-spacing:2px;text-transform:uppercase;position:relative;z-index:2;line-height:1.5}.content-layout[data-v-3e8f9409]{display:flex;flex-direction:column;gap:24px;position:relative;z-index:1}.config-section[data-v-3e8f9409]{margin-bottom:20px;position:relative;z-index:1}.section-title[data-v-3e8f9409]{margin:0 0 20px;font-size:14px;color:#0ff;letter-spacing:2px;font-weight:600}.distance-control[data-v-3e8f9409]{width:100%}.distance-step-selector[data-v-3e8f9409]{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;margin-bottom:16px}.step-btn[data-v-3e8f9409]{margin:0;background:#0000004d;border:1px solid rgba(0,255,255,.2);color:#94a3b8;padding:8px 4px;font-size:12px;font-weight:600;transition:all .2s ease;white-space:nowrap}.step-btn[data-v-3e8f9409]:hover{border-color:#00ffff80;color:#0ff;transform:translateY(-1px)}.step-btn.active[data-v-3e8f9409]{background:#00ffff26;border-color:#0ff;color:#0ff;box-shadow:0 0 15px #00ffff4d}.distance-input-wrapper[data-v-3e8f9409]{display:flex;align-items:center;justify-content:center;gap:8px;padding:12px;background:#0000004d;border:1px solid rgba(139,92,246,.3);border-radius:4px}.distance-label[data-v-3e8f9409]{color:#64748b;font-size:13px}.distance-value[data-v-3e8f9409]{font-size:20px;font-weight:800;color:#8b5cf6}.unit[data-v-3e8f9409]{color:#8b5cf6;font-weight:600;font-size:14px}.modules-grid[data-v-3e8f9409]{display:grid;grid-template-columns:1fr 1fr;gap:12px}.module-item[data-v-3e8f9409]{background:#00ffff0d;border:1px solid rgba(0,255,255,.1);padding:12px;border-radius:4px;transition:all .3s ease;display:flex;flex-direction:column;gap:8px}.module-item[data-v-3e8f9409]:hover{border-color:#00ffff4d;background:#00ffff14}.module-name[data-v-3e8f9409]{font-size:13px;color:#94a3b8}.module-input[data-v-3e8f9409]{width:100%}.module-input[data-v-3e8f9409] .el-input__wrapper{background:#0000004d;border:1px solid rgba(0,255,255,.2);box-shadow:none;padding:4px 6px}.module-input[data-v-3e8f9409] .el-input__inner{text-align:center;color:#0ff;font-weight:700;font-size:16px}.module-input[data-v-3e8f9409] .el-input-number__decrease,.module-input[data-v-3e8f9409] .el-input-number__increase{background:#0ff3;color:#0ff;border-color:#00ffff4d;font-weight:800;font-size:16px;transition:all .2s ease}.module-input[data-v-3e8f9409] .el-input-number__decrease:hover,.module-input[data-v-3e8f9409] .el-input-number__increase:hover{background:#0ff6;color:#fff}.module-input[data-v-3e8f9409] .el-input-number__decrease.is-disabled,.module-input[data-v-3e8f9409] .el-input-number__increase.is-disabled{background:#0003;color:#475569;border-color:#ffffff1a}.calculate-btn-wrapper[data-v-3e8f9409]{margin-top:24px;margin-bottom:0}.sci-fi-calculate-btn[data-v-3e8f9409]{width:100%;height:50px;background:linear-gradient(135deg,#0ff,#8b5cf6);border:none;color:#0a0e27;font-weight:800;font-size:16px;letter-spacing:2px;position:relative;overflow:hidden;transition:all .3s ease}.sci-fi-calculate-btn[data-v-3e8f9409]:hover{transform:translateY(-2px);box-shadow:0 10px 30px #00ffff4d}.btn-text[data-v-3e8f9409]{position:relative;z-index:1}.btn-glow[data-v-3e8f9409]{position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.4),transparent);animation:btnScan-3e8f9409 2s ease-in-out infinite}@keyframes btnScan-3e8f9409{0%{left:-100%}to{left:100%}}.sci-fi-radio-group[data-v-3e8f9409]{width:100%;display:flex}.sci-fi-radio-group[data-v-3e8f9409] .el-radio-button{flex:1}.sci-fi-radio-group[data-v-3e8f9409] .el-radio-button__inner{width:100%;background:#0000004d;border:1px solid rgba(0,255,255,.2);color:#94a3b8;font-weight:600;padding:12px 10px;transition:all .2s ease}.sci-fi-radio-group[data-v-3e8f9409] .el-radio-button__inner:hover{color:#0ff;border-color:#0ff6}.sci-fi-radio-group[data-v-3e8f9409] .el-radio-button__orig-radio:checked+.el-radio-button__inner{background:#00ffff26;border-color:#0ff;color:#0ff;box-shadow:0 0 15px #0ff3}.oxidizer-hint[data-v-3e8f9409]{display:flex;justify-content:space-around;margin-top:8px}.hint-item[data-v-3e8f9409]{font-size:12px;color:#64748b;transition:all .2s ease}.hint-item.active[data-v-3e8f9409]{color:#0ff;font-weight:600}.divider-line[data-v-3e8f9409]{height:1px;background:linear-gradient(90deg,transparent,rgba(0,255,255,.3),transparent);margin:24px 0}.result-header[data-v-3e8f9409]{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px;flex-wrap:wrap;gap:8px}.result-title[data-v-3e8f9409]{margin:0;font-size:18px;color:#0ff;letter-spacing:2px}.result-status[data-v-3e8f9409]{display:flex;align-items:center;gap:8px;font-size:12px;color:#67c23a;letter-spacing:1px}.status-dot[data-v-3e8f9409]{width:8px;height:8px;background:#67c23a;border-radius:50%;animation:statusPulse-3e8f9409 2s ease-in-out infinite}@keyframes statusPulse-3e8f9409{0%,to{box-shadow:0 0 #67c23a66}50%{box-shadow:0 0 0 8px #67c23a00}}.key-stats[data-v-3e8f9409]{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-bottom:24px}.stat-item[data-v-3e8f9409]{background:#0000004d;border:1px solid rgba(255,255,255,.1);padding:16px;text-align:center;position:relative}.stat-item.primary[data-v-3e8f9409]{border-color:#0ff6;box-shadow:0 0 20px #00ffff1a}.stat-item.success[data-v-3e8f9409]{border-color:#67c23a66;box-shadow:0 0 20px #67c23a1a}.stat-item.warning[data-v-3e8f9409]{border-color:#e6a23c66;box-shadow:0 0 20px #e6a23c1a}.stat-label[data-v-3e8f9409]{font-size:12px;color:#64748b;margin-bottom:8px;text-transform:uppercase;letter-spacing:1px}.stat-value[data-v-3e8f9409]{font-size:24px;font-weight:800}.stat-item.primary .stat-value[data-v-3e8f9409]{color:#0ff}.stat-item.success .stat-value[data-v-3e8f9409]{color:#67c23a}.stat-item.warning .stat-value[data-v-3e8f9409]{color:#e6a23c}.stat-unit[data-v-3e8f9409]{font-size:14px;opacity:.7}.detail-title[data-v-3e8f9409]{margin:0 0 16px;font-size:14px;color:#8b5cf6;letter-spacing:2px}.detail-grid[data-v-3e8f9409]{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}.detail-item[data-v-3e8f9409]{display:flex;justify-content:space-between;align-items:center;background:#0003;padding:12px 16px;border-left:3px solid #8b5cf6;gap:8px}.detail-label[data-v-3e8f9409]{font-size:13px;color:#94a3b8}.detail-value[data-v-3e8f9409]{font-size:16px;font-weight:700;color:#e0e7ff;text-align:right}.sci-fi-divider[data-v-3e8f9409]{border-color:#00ffff1a;margin:24px 0}.table-wrapper[data-v-3e8f9409]{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.sci-fi-table[data-v-3e8f9409]{background:#0003;min-width:500px}.sci-fi-table[data-v-3e8f9409] .el-table__header-wrapper{background:#00ffff0d}.sci-fi-table[data-v-3e8f9409] .el-table th{background:transparent;color:#0ff;border-color:#00ffff1a}.sci-fi-table[data-v-3e8f9409] .el-table td{border-color:#ffffff0d}.sci-fi-table[data-v-3e8f9409] .el-table--striped .el-table__body tr.el-table__row--striped{background:#0000001a}.empty-state[data-v-3e8f9409]{text-align:center;padding:60px 20px;position:relative}.scan-line[data-v-3e8f9409]{position:absolute;top:0;left:0;right:0;height:2px;background:linear-gradient(90deg,transparent,rgba(0,255,255,.5),transparent);animation:scanMove-3e8f9409 3s linear infinite}@keyframes scanMove-3e8f9409{0%{top:0;opacity:0}10%{opacity:1}90%{opacity:1}to{top:100%;opacity:0}}.empty-icon[data-v-3e8f9409]{font-size:48px;margin-bottom:16px}.empty-text[data-v-3e8f9409]{font-size:16px;color:#64748b;margin:0 0 8px;letter-spacing:1px}.empty-text.error[data-v-3e8f9409]{color:#f87171}.empty-hint[data-v-3e8f9409]{font-size:13px;color:#475569;margin:0 0 24px;line-height:1.5}.sci-fi-reset-btn[data-v-3e8f9409]{background:#8b5cf633;border:1px solid #8b5cf6;color:#8b5cf6}.sci-fi-reset-btn[data-v-3e8f9409]:hover{background:#8b5cf64d;color:#a78bfa}.sci-fi-form[data-v-3e8f9409] .el-form-item__label{color:#94a3b8;font-weight:600;padding-bottom:6px;line-height:1.4}.sci-fi-select[data-v-3e8f9409] .el-input__wrapper{background:#0000004d;border:1px solid rgba(0,255,255,.2);box-shadow:none}.sci-fi-select[data-v-3e8f9409] .el-input__wrapper:hover{border-color:#0ff6}.sci-fi-select[data-v-3e8f9409] .el-input__wrapper.is-focus{border-color:#0ff;box-shadow:0 0 10px #0ff3}@media screen and (max-width: 600px){.rocket-calculator[data-v-3e8f9409]{padding:12px}.sci-fi-title[data-v-3e8f9409]{font-size:20px;letter-spacing:2px}.sci-fi-card[data-v-3e8f9409] .k-card__body{padding:16px}.key-stats[data-v-3e8f9409],.modules-grid[data-v-3e8f9409],.detail-grid[data-v-3e8f9409]{grid-template-columns:1fr}.distance-step-selector[data-v-3e8f9409]{grid-template-columns:repeat(3,1fr)}}.scrollbar[data-v-7f2607d9]{background:linear-gradient(135deg,#0a0e27,#1a1f3a,#0f172a);color:#e0e7ff}.todo-app[data-v-1d6d47ce]{min-height:100vh;position:relative;background:linear-gradient(135deg,#e0f4ff,#f0f8ff,#e8f5ff);padding:20px}.bg-pattern[data-v-1d6d47ce]{position:fixed;top:0;left:0;right:0;bottom:0;background-image:radial-gradient(circle,#b8d4e8 1px,transparent 1px);background-size:25px 25px;opacity:.5;pointer-events:none;z-index:0}.todo-container[data-v-1d6d47ce]{position:relative;z-index:1;max-width:1000px;margin:0 auto}.todo-header[data-v-1d6d47ce]{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.todo-title[data-v-1d6d47ce]{font-family:Comic Sans MS,cursive,sans-serif;font-size:48px;font-weight:700;color:#fff;text-shadow:2px 2px 0 #333,-2px -2px 0 #333,2px -2px 0 #333,-2px 2px 0 #333,0px 2px 0 #333,0px -2px 0 #333,2px 0px 0 #333,-2px 0px 0 #333,3px 3px 0 #ffd700,4px 4px 0 #333;letter-spacing:5px;display:inline-flex;align-items:center;gap:10px;margin:0}.title-dot[data-v-1d6d47ce]{color:#ff6b9d;font-size:16px;animation:bounce-1d6d47ce .6s infinite alternate}@keyframes bounce-1d6d47ce{0%{transform:translateY(0)}to{transform:translateY(-6px)}}.title-text[data-v-1d6d47ce]{background:linear-gradient(180deg,#fff,#f0f0f0);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.button-group[data-v-1d6d47ce]{display:flex;gap:10px}.cute-btn[data-v-1d6d47ce]{background:#fff;border:2px solid #333;color:#333;font-family:Comic Sans MS,cursive,sans-serif;border-radius:8px;box-shadow:3px 3px #333;transition:all .1s}.cute-btn[data-v-1d6d47ce]:hover{transform:translate(1px,1px);box-shadow:2px 2px #333}.cute-btn[data-v-1d6d47ce]:active{transform:translate(2px,2px);box-shadow:1px 1px #333}.cute-btn.primary[data-v-1d6d47ce]{background:linear-gradient(135deg,#ffb6c1,pink)}.todo-stats[data-v-1d6d47ce]{display:flex;gap:20px;margin-bottom:15px;padding:8px 15px;background:#fff;border:2px solid #333;border-radius:10px;box-shadow:4px 4px #333}.search-filter-section[data-v-1d6d47ce]{display:flex;gap:15px;margin-bottom:20px;align-items:center;flex-wrap:wrap}.search-input[data-v-1d6d47ce]{flex:1;min-width:250px}.filter-buttons[data-v-1d6d47ce]{display:flex;gap:10px}.filter-btn[data-v-1d6d47ce]{background:#fff;border:2px solid #333;color:#333;font-family:Comic Sans MS,cursive,sans-serif;padding:8px 20px;border-radius:8px;box-shadow:3px 3px #333;cursor:pointer;transition:all .1s}.filter-btn[data-v-1d6d47ce]:hover{transform:translate(1px,1px);box-shadow:2px 2px #333}.filter-btn[data-v-1d6d47ce]:active{transform:translate(2px,2px);box-shadow:1px 1px #333}.filter-btn.active[data-v-1d6d47ce]{background:linear-gradient(135deg,#87ceeb,#98d8c8)}.todo-table-card[data-v-1d6d47ce]{background:#fff;border:3px solid #333;border-radius:15px;box-shadow:8px 8px #333;overflow:hidden}.cute-table[data-v-1d6d47ce]{font-family:Comic Sans MS,cursive,sans-serif}.cute-table[data-v-1d6d47ce] .el-table__header th{background:linear-gradient(135deg,#87ceeb,#98d8c8);color:#333;font-weight:700}.completed-text[data-v-1d6d47ce]{text-decoration:line-through;color:#909399}.cute-tag[data-v-1d6d47ce]{font-family:Comic Sans MS,cursive,sans-serif;border:2px solid #333}[data-v-1d6d47ce] .el-dialog{border:3px solid #333;border-radius:15px;box-shadow:8px 8px #333}[data-v-1d6d47ce] .el-dialog__header{background:linear-gradient(135deg,#87ceeb,#98d8c8);border-bottom:3px solid #333;margin:0;padding:15px 20px}[data-v-1d6d47ce] .el-dialog__header .el-dialog__title{font-family:Comic Sans MS,cursive,sans-serif;font-weight:700;color:#333}.cute-input[data-v-1d6d47ce] .el-input__wrapper{border:2px solid #333;border-radius:8px;box-shadow:none}.cute-checkbox[data-v-1d6d47ce]{font-family:Comic Sans MS,cursive,sans-serif;color:#333}.cute-checkbox[data-v-1d6d47ce] .el-checkbox__input .el-checkbox__inner{border:2px solid #333;border-radius:4px;box-shadow:2px 2px #333}.cute-checkbox[data-v-1d6d47ce] .el-checkbox__input .el-checkbox__inner:hover{transform:translate(1px,1px);box-shadow:1px 1px #333}.cute-checkbox[data-v-1d6d47ce] .el-checkbox__input.is-checked .el-checkbox__inner{background:linear-gradient(135deg,#87ceeb,#98d8c8);border-color:#333}[data-v-1d6d47ce] .el-statistic__head{color:inherit;font-family:Comic Sans MS,cursive,sans-serif;font-size:14px}[data-v-1d6d47ce] .el-statistic__content{color:inherit;font-family:Comic Sans MS,cursive,sans-serif;font-size:20px}.pagination-section[data-v-1d6d47ce]{padding:20px;display:flex;justify-content:center;border-top:2px solid #333;background:linear-gradient(135deg,#f5f5f5,#fff)}[data-v-1d6d47ce] .el-pagination{font-family:Comic Sans MS,cursive,sans-serif}[data-v-1d6d47ce] .el-pagination button,[data-v-1d6d47ce] .el-pagination li{border:2px solid #333;border-radius:8px;box-shadow:2px 2px #333;transition:all .1s}[data-v-1d6d47ce] .el-pagination button:hover,[data-v-1d6d47ce] .el-pagination li:hover{transform:translate(1px,1px);box-shadow:1px 1px #333}[data-v-1d6d47ce] .el-pagination button.is-active,[data-v-1d6d47ce] .el-pagination li.is-active{background:linear-gradient(135deg,#87ceeb,#98d8c8);color:#333;font-weight:700}[data-v-1d6d47ce] .el-pagination .el-pager li{border-radius:8px}[data-v-1d6d47ce] .el-pagination .el-pagination__sizes .el-select .el-input__wrapper,[data-v-1d6d47ce] .el-pagination .el-pagination__jump .el-select .el-input__wrapper,[data-v-1d6d47ce] .el-pagination .el-pagination__sizes .el-input__wrapper,[data-v-1d6d47ce] .el-pagination .el-pagination__jump .el-input__wrapper{border:2px solid #333;border-radius:8px;box-shadow:2px 2px #333}@media (max-width: 768px){.todo-app[data-v-1d6d47ce]{padding:10px}.todo-header[data-v-1d6d47ce]{flex-direction:column;gap:15px;align-items:stretch}.todo-title[data-v-1d6d47ce]{font-size:32px;letter-spacing:2px;justify-content:center}.title-dot[data-v-1d6d47ce]{font-size:12px}.button-group[data-v-1d6d47ce]{justify-content:center;flex-wrap:wrap}.cute-btn[data-v-1d6d47ce]{font-size:14px;padding:8px 12px}.todo-stats[data-v-1d6d47ce]{flex-wrap:wrap;justify-content:center;gap:10px}[data-v-1d6d47ce] .el-statistic{text-align:center}[data-v-1d6d47ce] .el-statistic__content{font-size:18px}.search-filter-section[data-v-1d6d47ce]{flex-direction:column;align-items:stretch}.search-input[data-v-1d6d47ce]{min-width:auto;width:100%}.filter-buttons[data-v-1d6d47ce]{justify-content:center;flex-wrap:wrap}.filter-btn[data-v-1d6d47ce]{padding:6px 14px;font-size:14px}.todo-table-card[data-v-1d6d47ce]{border-radius:10px;box-shadow:4px 4px #333}[data-v-1d6d47ce] .el-dialog{width:95%!important;margin:5vh auto!important;max-width:400px}[data-v-1d6d47ce] .el-dialog__header{padding:12px 16px}[data-v-1d6d47ce] .el-dialog__body{padding:15px}.pagination-section[data-v-1d6d47ce]{padding:15px 10px}[data-v-1d6d47ce] .el-pagination{flex-wrap:wrap;justify-content:center;gap:8px}[data-v-1d6d47ce] .el-pagination .el-pagination__sizes,[data-v-1d6d47ce] .el-pagination .el-pagination__jump{margin:0}[data-v-1d6d47ce] .el-pagination button,[data-v-1d6d47ce] .el-pagination li{min-width:32px;height:32px;line-height:28px;padding:0 8px}}@media (max-width: 480px){.todo-title[data-v-1d6d47ce]{font-size:24px;letter-spacing:1px}.title-dot[data-v-1d6d47ce]{font-size:10px}.cute-btn[data-v-1d6d47ce]{font-size:13px;padding:7px 10px}.filter-btn[data-v-1d6d47ce]{padding:5px 12px;font-size:13px}[data-v-1d6d47ce] .el-dialog{width:92%!important}}
|
package/lib/index.js
CHANGED
|
@@ -35,7 +35,7 @@ __export(src_exports, {
|
|
|
35
35
|
name: () => name
|
|
36
36
|
});
|
|
37
37
|
module.exports = __toCommonJS(src_exports);
|
|
38
|
-
var
|
|
38
|
+
var import_koishi12 = require("koishi");
|
|
39
39
|
var import_path = require("path");
|
|
40
40
|
|
|
41
41
|
// src/services/wikiBotService.ts
|
|
@@ -145,6 +145,22 @@ function getErrorMessage(error) {
|
|
|
145
145
|
return String(error);
|
|
146
146
|
}
|
|
147
147
|
__name(getErrorMessage, "getErrorMessage");
|
|
148
|
+
function formatWikiTime(isoString) {
|
|
149
|
+
try {
|
|
150
|
+
const date = new Date(isoString);
|
|
151
|
+
if (Number.isNaN(date.getTime())) return isoString;
|
|
152
|
+
const pad = /* @__PURE__ */ __name((n) => String(n).padStart(2, "0"), "pad");
|
|
153
|
+
const y = date.getFullYear();
|
|
154
|
+
const m = pad(date.getMonth() + 1);
|
|
155
|
+
const d = pad(date.getDate());
|
|
156
|
+
const hh = pad((date.getUTCHours() + 8) % 24);
|
|
157
|
+
const mm = pad(date.getUTCMinutes());
|
|
158
|
+
return `${y}-${m}-${d} ${hh}:${mm}`;
|
|
159
|
+
} catch {
|
|
160
|
+
return isoString;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
__name(formatWikiTime, "formatWikiTime");
|
|
148
164
|
|
|
149
165
|
// src/services/wikiBotService.ts
|
|
150
166
|
var WikiBotService = class _WikiBotService extends import_koishi2.Service {
|
|
@@ -466,7 +482,9 @@ var DatabaseExtension = class {
|
|
|
466
482
|
id: "integer",
|
|
467
483
|
title: "string",
|
|
468
484
|
pinyin_full: "string",
|
|
469
|
-
pinyin_first: "string"
|
|
485
|
+
pinyin_first: "string",
|
|
486
|
+
contributor: "string",
|
|
487
|
+
change_time: "string"
|
|
470
488
|
});
|
|
471
489
|
}
|
|
472
490
|
};
|
|
@@ -829,8 +847,72 @@ var CONFIG2 = {
|
|
|
829
847
|
BATCH_LIMIT: "max",
|
|
830
848
|
FILE_NAMESPACE_PREFIX: "File:",
|
|
831
849
|
DEFAULT_USER: "同步坤器人",
|
|
832
|
-
INCREMENTAL_USER: "定时同步"
|
|
850
|
+
INCREMENTAL_USER: "定时同步",
|
|
851
|
+
DB_RETRY_MAX: 3,
|
|
852
|
+
DB_RETRY_DELAY: 500
|
|
833
853
|
};
|
|
854
|
+
async function withRetry(fn, maxRetries = CONFIG2.DB_RETRY_MAX, delay = CONFIG2.DB_RETRY_DELAY) {
|
|
855
|
+
let lastError;
|
|
856
|
+
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
857
|
+
try {
|
|
858
|
+
return await fn();
|
|
859
|
+
} catch (err) {
|
|
860
|
+
lastError = err instanceof Error ? err : new Error(String(err));
|
|
861
|
+
if (attempt < maxRetries) {
|
|
862
|
+
logger.debug(
|
|
863
|
+
`数据库操作失败,正在重试 (${attempt}/${maxRetries}): ${lastError.message}`
|
|
864
|
+
);
|
|
865
|
+
await (0, import_koishi6.sleep)(delay);
|
|
866
|
+
}
|
|
867
|
+
}
|
|
868
|
+
}
|
|
869
|
+
throw lastError || new Error("数据库操作失败");
|
|
870
|
+
}
|
|
871
|
+
__name(withRetry, "withRetry");
|
|
872
|
+
async function ensurePageInDatabase(database, pageId, title) {
|
|
873
|
+
if (!database) return;
|
|
874
|
+
try {
|
|
875
|
+
await withRetry(async () => {
|
|
876
|
+
const existing = await database.get("wikipages", { title });
|
|
877
|
+
if (existing.length === 0) {
|
|
878
|
+
const { pinyin_full, pinyin_first } = generatePinyinInfo(title);
|
|
879
|
+
await database.create("wikipages", {
|
|
880
|
+
id: pageId,
|
|
881
|
+
title,
|
|
882
|
+
pinyin_full,
|
|
883
|
+
pinyin_first
|
|
884
|
+
});
|
|
885
|
+
logger.info(`[数据库初始化] ✅ 页面 ${title} 已添加到数据库`);
|
|
886
|
+
}
|
|
887
|
+
});
|
|
888
|
+
} catch (err) {
|
|
889
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
890
|
+
logger.warn(`[数据库初始化] ❌ 初始化页面 ${title} 失败: ${errMsg}`);
|
|
891
|
+
}
|
|
892
|
+
}
|
|
893
|
+
__name(ensurePageInDatabase, "ensurePageInDatabase");
|
|
894
|
+
async function updateContributorToDatabase(database, title, user, timestamp) {
|
|
895
|
+
if (!database) return;
|
|
896
|
+
try {
|
|
897
|
+
await withRetry(async () => {
|
|
898
|
+
await database.set(
|
|
899
|
+
"wikipages",
|
|
900
|
+
{ title },
|
|
901
|
+
{
|
|
902
|
+
contributor: user,
|
|
903
|
+
change_time: formatWikiTime(timestamp)
|
|
904
|
+
}
|
|
905
|
+
);
|
|
906
|
+
logger.debug(`[数据库更新] ✅ 页面 ${title} 的贡献者信息已更新: ${user}`);
|
|
907
|
+
});
|
|
908
|
+
} catch (err) {
|
|
909
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
910
|
+
logger.warn(
|
|
911
|
+
`[数据库更新] ❌ 更新页面 ${title} 的贡献者信息失败: ${errMsg}`
|
|
912
|
+
);
|
|
913
|
+
}
|
|
914
|
+
}
|
|
915
|
+
__name(updateContributorToDatabase, "updateContributorToDatabase");
|
|
834
916
|
async function syncSinglePage(oldSite, newSite, pageTitle, user) {
|
|
835
917
|
if (CONFIG2.IGNORED_PAGES.has(pageTitle)) {
|
|
836
918
|
logger.info(`[syncSinglePage] 🚫 页面 ${pageTitle} 在忽略列表中,跳过`);
|
|
@@ -985,7 +1067,13 @@ async function syncPages(oldSite, newSite) {
|
|
|
985
1067
|
}
|
|
986
1068
|
}
|
|
987
1069
|
__name(syncPages, "syncPages");
|
|
988
|
-
async function incrementalUpdate(oldSite, newSite, config, onSynced) {
|
|
1070
|
+
async function incrementalUpdate(oldSite, newSite, config, onSynced, database) {
|
|
1071
|
+
const startTime = Date.now();
|
|
1072
|
+
const processedTitles = /* @__PURE__ */ new Set();
|
|
1073
|
+
const syncedItems = [];
|
|
1074
|
+
let totalProcessed = 0;
|
|
1075
|
+
let totalSkipped = 0;
|
|
1076
|
+
let totalSynced = 0;
|
|
989
1077
|
try {
|
|
990
1078
|
const now = /* @__PURE__ */ new Date();
|
|
991
1079
|
const threeHoursAgo = new Date(now.getTime() - 3 * 60 * 60 * 1e3);
|
|
@@ -998,18 +1086,20 @@ async function incrementalUpdate(oldSite, newSite, config, onSynced) {
|
|
|
998
1086
|
rcstart: now.toISOString(),
|
|
999
1087
|
rcend: threeHoursAgo.toISOString(),
|
|
1000
1088
|
rcdir: "older",
|
|
1001
|
-
rcprop: "user|comment|title|timestamp"
|
|
1089
|
+
rcprop: "user|comment|title|timestamp|ids"
|
|
1002
1090
|
});
|
|
1003
|
-
const processedTitles = /* @__PURE__ */ new Set();
|
|
1004
|
-
let totalProcessed = 0;
|
|
1005
|
-
let totalSkipped = 0;
|
|
1006
|
-
const syncedItems = [];
|
|
1007
1091
|
for await (const res of queryGen) {
|
|
1008
1092
|
const pages = res.query?.recentchanges || [];
|
|
1009
1093
|
for (const page of pages) {
|
|
1010
|
-
const
|
|
1094
|
+
const {
|
|
1095
|
+
title,
|
|
1096
|
+
user: rcUser,
|
|
1097
|
+
timestamp: rcTimestamp,
|
|
1098
|
+
comment: rcComment,
|
|
1099
|
+
pageid
|
|
1100
|
+
} = page;
|
|
1011
1101
|
if (processedTitles.has(title)) {
|
|
1012
|
-
logger.
|
|
1102
|
+
logger.debug(`[增量更新流程] ⏭️ 已处理过 ${title}, 跳过`);
|
|
1013
1103
|
totalSkipped++;
|
|
1014
1104
|
continue;
|
|
1015
1105
|
}
|
|
@@ -1024,45 +1114,33 @@ async function incrementalUpdate(oldSite, newSite, config, onSynced) {
|
|
|
1024
1114
|
processedTitles.add(title);
|
|
1025
1115
|
totalProcessed++;
|
|
1026
1116
|
try {
|
|
1027
|
-
const
|
|
1028
|
-
const
|
|
1029
|
-
const
|
|
1117
|
+
const user = rcUser || "未知";
|
|
1118
|
+
const timestamp = rcTimestamp || "";
|
|
1119
|
+
const comment = rcComment || "";
|
|
1030
1120
|
if (title.startsWith(CONFIG2.FILE_NAMESPACE_PREFIX)) {
|
|
1031
|
-
|
|
1032
|
-
logger.info(
|
|
1033
|
-
`[增量更新流程] 🖼️ 检查到图片: ${title},正在尝试转存`
|
|
1034
|
-
);
|
|
1035
|
-
const result = await syncSingleImage(
|
|
1121
|
+
await handleImageSync(
|
|
1036
1122
|
oldSite,
|
|
1037
1123
|
newSite,
|
|
1038
|
-
|
|
1039
|
-
|
|
1124
|
+
title,
|
|
1125
|
+
user,
|
|
1126
|
+
timestamp,
|
|
1127
|
+
comment,
|
|
1128
|
+
config,
|
|
1129
|
+
syncedItems
|
|
1040
1130
|
);
|
|
1041
|
-
if (result.success && result.reason === "synced") {
|
|
1042
|
-
syncedItems.push({
|
|
1043
|
-
title,
|
|
1044
|
-
type: "image",
|
|
1045
|
-
user: rcUser,
|
|
1046
|
-
timestamp: rcTimestamp,
|
|
1047
|
-
comment: rcComment
|
|
1048
|
-
});
|
|
1049
|
-
}
|
|
1050
1131
|
} else {
|
|
1051
|
-
|
|
1132
|
+
await handlePageSync(
|
|
1052
1133
|
oldSite,
|
|
1053
1134
|
newSite,
|
|
1054
1135
|
title,
|
|
1055
|
-
|
|
1136
|
+
pageid || 0,
|
|
1137
|
+
user,
|
|
1138
|
+
timestamp,
|
|
1139
|
+
comment,
|
|
1140
|
+
database,
|
|
1141
|
+
syncedItems
|
|
1056
1142
|
);
|
|
1057
|
-
|
|
1058
|
-
syncedItems.push({
|
|
1059
|
-
title,
|
|
1060
|
-
type: "page",
|
|
1061
|
-
user: rcUser,
|
|
1062
|
-
timestamp: rcTimestamp,
|
|
1063
|
-
comment: rcComment
|
|
1064
|
-
});
|
|
1065
|
-
}
|
|
1143
|
+
totalSynced++;
|
|
1066
1144
|
}
|
|
1067
1145
|
await (0, import_koishi6.sleep)(CONFIG2.SYNC_INTERVAL_SUCCESS);
|
|
1068
1146
|
} catch (error) {
|
|
@@ -1072,18 +1150,50 @@ async function incrementalUpdate(oldSite, newSite, config, onSynced) {
|
|
|
1072
1150
|
}
|
|
1073
1151
|
}
|
|
1074
1152
|
}
|
|
1153
|
+
} catch (globalError) {
|
|
1154
|
+
logger.error(`[增量更新流程] 💥 增量更新流程异常终止:`, globalError);
|
|
1155
|
+
throw globalError;
|
|
1156
|
+
} finally {
|
|
1157
|
+
const duration = (Date.now() - startTime) / 1e3;
|
|
1075
1158
|
logger.info(
|
|
1076
|
-
`[增量更新流程] ✅ 增量更新完成!处理: ${totalProcessed}, 跳过: ${totalSkipped}, 通知: ${syncedItems.length}`
|
|
1159
|
+
`[增量更新流程] ✅ 增量更新完成!处理: ${totalProcessed}, 跳过: ${totalSkipped}, 同步: ${totalSynced}, 通知: ${syncedItems.length}, 耗时: ${duration.toFixed(2)}s`
|
|
1077
1160
|
);
|
|
1078
1161
|
if (syncedItems.length > 0) {
|
|
1079
1162
|
onSynced?.(syncedItems);
|
|
1080
1163
|
}
|
|
1081
|
-
} catch (globalError) {
|
|
1082
|
-
logger.error(`[增量更新流程] 💥 增量更新流程异常终止:`, globalError);
|
|
1083
|
-
throw globalError;
|
|
1084
1164
|
}
|
|
1085
1165
|
}
|
|
1086
1166
|
__name(incrementalUpdate, "incrementalUpdate");
|
|
1167
|
+
async function handleImageSync(oldSite, newSite, title, user, timestamp, comment, config, syncedItems) {
|
|
1168
|
+
const fileName = title.replace(CONFIG2.FILE_NAMESPACE_PREFIX, "");
|
|
1169
|
+
logger.info(`[增量更新流程] 🖼️ 检查到图片: ${title},正在尝试转存`);
|
|
1170
|
+
const result = await syncSingleImage(oldSite, newSite, fileName, config);
|
|
1171
|
+
if (result.success && result.reason === "synced") {
|
|
1172
|
+
syncedItems.push({
|
|
1173
|
+
title,
|
|
1174
|
+
type: "image",
|
|
1175
|
+
user,
|
|
1176
|
+
timestamp,
|
|
1177
|
+
comment
|
|
1178
|
+
});
|
|
1179
|
+
}
|
|
1180
|
+
}
|
|
1181
|
+
__name(handleImageSync, "handleImageSync");
|
|
1182
|
+
async function handlePageSync(oldSite, newSite, title, pageId, user, timestamp, comment, database, syncedItems) {
|
|
1183
|
+
await ensurePageInDatabase(database, pageId, title);
|
|
1184
|
+
const result = await syncSinglePage(oldSite, newSite, title, user);
|
|
1185
|
+
if (result.success && result.reason === "synced") {
|
|
1186
|
+
syncedItems.push({
|
|
1187
|
+
title,
|
|
1188
|
+
type: "page",
|
|
1189
|
+
user,
|
|
1190
|
+
timestamp,
|
|
1191
|
+
comment
|
|
1192
|
+
});
|
|
1193
|
+
await updateContributorToDatabase(database, title, user, timestamp);
|
|
1194
|
+
}
|
|
1195
|
+
}
|
|
1196
|
+
__name(handlePageSync, "handlePageSync");
|
|
1087
1197
|
|
|
1088
1198
|
// src/sync/moduleSync.ts
|
|
1089
1199
|
var import_koishi7 = require("koishi");
|
|
@@ -1252,27 +1362,11 @@ async function syncModules(oldSite, newSite) {
|
|
|
1252
1362
|
__name(syncModules, "syncModules");
|
|
1253
1363
|
|
|
1254
1364
|
// src/plugins/syncCommands.ts
|
|
1255
|
-
function formatWikiTime(isoString) {
|
|
1256
|
-
try {
|
|
1257
|
-
const date = new Date(isoString);
|
|
1258
|
-
if (Number.isNaN(date.getTime())) return isoString;
|
|
1259
|
-
const pad = /* @__PURE__ */ __name((n) => String(n).padStart(2, "0"), "pad");
|
|
1260
|
-
const y = date.getFullYear();
|
|
1261
|
-
const m = pad(date.getMonth() + 1);
|
|
1262
|
-
const d = pad(date.getDate());
|
|
1263
|
-
const hh = pad(date.getHours());
|
|
1264
|
-
const mm = pad(date.getMinutes());
|
|
1265
|
-
return `${y}-${m}-${d} ${hh}:${mm}`;
|
|
1266
|
-
} catch {
|
|
1267
|
-
return isoString;
|
|
1268
|
-
}
|
|
1269
|
-
}
|
|
1270
|
-
__name(formatWikiTime, "formatWikiTime");
|
|
1271
1365
|
var SyncCommands = class {
|
|
1272
1366
|
static {
|
|
1273
1367
|
__name(this, "SyncCommands");
|
|
1274
1368
|
}
|
|
1275
|
-
static inject = ["wikiBot", "cron"];
|
|
1369
|
+
static inject = ["wikiBot", "database", "cron"];
|
|
1276
1370
|
config;
|
|
1277
1371
|
notifyFn;
|
|
1278
1372
|
constructor(ctx, config) {
|
|
@@ -1285,7 +1379,8 @@ var SyncCommands = class {
|
|
|
1285
1379
|
ctx.wikiBot.getGGBot(),
|
|
1286
1380
|
ctx.wikiBot.getBWikiBot(),
|
|
1287
1381
|
config,
|
|
1288
|
-
this.notifyFn
|
|
1382
|
+
this.notifyFn,
|
|
1383
|
+
ctx.database
|
|
1289
1384
|
);
|
|
1290
1385
|
});
|
|
1291
1386
|
ctx.cron("30 8 * * 4", async () => {
|
|
@@ -1730,7 +1825,20 @@ bwiki: https://${this.config.domain}/bw/88888888`;
|
|
|
1730
1825
|
`;
|
|
1731
1826
|
}
|
|
1732
1827
|
md += `**📖 ${match.title}**
|
|
1828
|
+
|
|
1733
1829
|
`;
|
|
1830
|
+
if (match.contributor || match.change_time) {
|
|
1831
|
+
md += "---\n";
|
|
1832
|
+
if (match.contributor) {
|
|
1833
|
+
md += `> **👤 最后贡献者:** ${match.contributor}
|
|
1834
|
+
`;
|
|
1835
|
+
}
|
|
1836
|
+
if (match.change_time) {
|
|
1837
|
+
md += `> **🕐 最后修改:** ${match.change_time}
|
|
1838
|
+
`;
|
|
1839
|
+
}
|
|
1840
|
+
md += "惟知是信 至诚若天\n---\n";
|
|
1841
|
+
}
|
|
1734
1842
|
const keyboard = this.buildResultKeyboard(match);
|
|
1735
1843
|
return this.sendResponse(session, md, keyboard);
|
|
1736
1844
|
}
|
|
@@ -1738,9 +1846,24 @@ bwiki: https://${this.config.domain}/bw/88888888`;
|
|
|
1738
1846
|
if (prefix) {
|
|
1739
1847
|
message += prefix + "\n";
|
|
1740
1848
|
}
|
|
1741
|
-
message +=
|
|
1742
|
-
|
|
1743
|
-
|
|
1849
|
+
message += `📖 ${match.title}
|
|
1850
|
+
`;
|
|
1851
|
+
if (match.contributor || match.change_time) {
|
|
1852
|
+
message += "--------\n";
|
|
1853
|
+
if (match.contributor) {
|
|
1854
|
+
message += `👤 最后贡献者:${match.contributor}
|
|
1855
|
+
`;
|
|
1856
|
+
}
|
|
1857
|
+
if (match.change_time) {
|
|
1858
|
+
message += `🕐 最后修改:${match.change_time}
|
|
1859
|
+
`;
|
|
1860
|
+
}
|
|
1861
|
+
}
|
|
1862
|
+
message += "惟知是信 至诚若天\n";
|
|
1863
|
+
message += "--------\n";
|
|
1864
|
+
message += `🔗 GG原站点: \`https://${this.config.domain}/gg/${match.id}\`
|
|
1865
|
+
`;
|
|
1866
|
+
message += `📚 bwiki: \`https://${this.config.domain}/bw/${match.id}\``;
|
|
1744
1867
|
return message;
|
|
1745
1868
|
}
|
|
1746
1869
|
async findPreciseMatch(ctx, queryKey, queryPinyinFull, queryPinyinFirst) {
|
|
@@ -2428,9 +2551,167 @@ var TodoList = class {
|
|
|
2428
2551
|
}
|
|
2429
2552
|
};
|
|
2430
2553
|
|
|
2554
|
+
// src/plugins/syncContributor.ts
|
|
2555
|
+
var import_koishi11 = require("koishi");
|
|
2556
|
+
var SyncContributor = class {
|
|
2557
|
+
constructor(ctx, config) {
|
|
2558
|
+
this.config = config;
|
|
2559
|
+
this.ctx = ctx;
|
|
2560
|
+
this.logger = ctx.logger("【同步贡献者】");
|
|
2561
|
+
this.registerCommands(ctx);
|
|
2562
|
+
this.setupWeeklySchedule(ctx);
|
|
2563
|
+
}
|
|
2564
|
+
static {
|
|
2565
|
+
__name(this, "SyncContributor");
|
|
2566
|
+
}
|
|
2567
|
+
static inject = ["wikiBot", "database", "cron"];
|
|
2568
|
+
logger;
|
|
2569
|
+
ctx;
|
|
2570
|
+
setupWeeklySchedule(ctx) {
|
|
2571
|
+
ctx.cron("0 0 2 * * 0", async () => {
|
|
2572
|
+
this.logger.info("⏰ 开始执行每周日贡献者同步任务");
|
|
2573
|
+
await this.executeSyncAllContributors("定时任务");
|
|
2574
|
+
});
|
|
2575
|
+
this.logger.info("✅ 每周日贡献者定时同步任务已注册(每周日凌晨2点执行)");
|
|
2576
|
+
}
|
|
2577
|
+
async executeSyncAllContributors(source) {
|
|
2578
|
+
try {
|
|
2579
|
+
if (!this.ctx.wikiBot.isReady) {
|
|
2580
|
+
const msg = "❌ WikiBot 服务尚未就绪";
|
|
2581
|
+
this.logger.warn(`[${source}] ${msg}`);
|
|
2582
|
+
return msg;
|
|
2583
|
+
}
|
|
2584
|
+
const pages = await this.ctx.database.get("wikipages", {});
|
|
2585
|
+
this.logger.info(`[${source}] 开始处理 ${pages.length} 个页面`);
|
|
2586
|
+
if (pages.length === 0) {
|
|
2587
|
+
const msg = "⚠️ 数据库中没有页面数据";
|
|
2588
|
+
this.logger.warn(`[${source}] ${msg}`);
|
|
2589
|
+
return msg;
|
|
2590
|
+
}
|
|
2591
|
+
let successCount = 0;
|
|
2592
|
+
let failCount = 0;
|
|
2593
|
+
const failedPages = [];
|
|
2594
|
+
for (const page of pages) {
|
|
2595
|
+
await (0, import_koishi11.sleep)(800);
|
|
2596
|
+
try {
|
|
2597
|
+
const data = await getContributorsAndTimestamp(
|
|
2598
|
+
page.title,
|
|
2599
|
+
this.ctx.wikiBot.getGGBot()
|
|
2600
|
+
);
|
|
2601
|
+
if (data.contributor && data.contributor !== "") {
|
|
2602
|
+
await this.ctx.database.set(
|
|
2603
|
+
"wikipages",
|
|
2604
|
+
{ title: page.title },
|
|
2605
|
+
{
|
|
2606
|
+
contributor: data.contributor,
|
|
2607
|
+
change_time: data.change_time
|
|
2608
|
+
}
|
|
2609
|
+
);
|
|
2610
|
+
successCount++;
|
|
2611
|
+
}
|
|
2612
|
+
} catch (err) {
|
|
2613
|
+
failCount++;
|
|
2614
|
+
const errorMsg = err instanceof Error ? err.message : String(err);
|
|
2615
|
+
failedPages.push(page.title);
|
|
2616
|
+
this.logger.error(
|
|
2617
|
+
`[${source}] 页面 ${page.title} 同步失败: ${errorMsg}`
|
|
2618
|
+
);
|
|
2619
|
+
}
|
|
2620
|
+
}
|
|
2621
|
+
const resultMsg = `✅ 同步完成,成功: ${successCount},失败: ${failCount}`;
|
|
2622
|
+
this.logger.info(`[${source}] ${resultMsg}`);
|
|
2623
|
+
if (failedPages.length > 0) {
|
|
2624
|
+
this.logger.warn(`[${source}] 失败页面列表: ${failedPages.join(", ")}`);
|
|
2625
|
+
}
|
|
2626
|
+
return resultMsg;
|
|
2627
|
+
} catch (err) {
|
|
2628
|
+
const errorMsg = err instanceof Error ? err.message : String(err);
|
|
2629
|
+
const msg = `❌ 同步所有页面贡献者失败: ${errorMsg}`;
|
|
2630
|
+
this.logger.error(`[${source}] ${msg}`);
|
|
2631
|
+
return msg;
|
|
2632
|
+
}
|
|
2633
|
+
}
|
|
2634
|
+
registerCommands(ctx) {
|
|
2635
|
+
ctx.command("synccontributor <title:text>", "同步页面的贡献者", {
|
|
2636
|
+
authority: 2
|
|
2637
|
+
}).action(async ({ session }, title) => {
|
|
2638
|
+
return this.syncSinglePage(title);
|
|
2639
|
+
});
|
|
2640
|
+
ctx.command("synccontributor.all", "同步所有页面的贡献者", { authority: 2 }).action(async ({ session }) => {
|
|
2641
|
+
return this.executeSyncAllContributors("手动命令");
|
|
2642
|
+
});
|
|
2643
|
+
}
|
|
2644
|
+
async syncSinglePage(title) {
|
|
2645
|
+
try {
|
|
2646
|
+
if (!this.ctx.wikiBot.isReady) {
|
|
2647
|
+
const msg = "❌ WikiBot 服务尚未就绪,请稍后重试";
|
|
2648
|
+
this.logger.warn(`[单页同步] ${msg}`);
|
|
2649
|
+
return msg;
|
|
2650
|
+
}
|
|
2651
|
+
if (!this.ctx.wikiBot.isGGBotReady()) {
|
|
2652
|
+
const msg = "❌ WIKIGG Bot 尚未就绪";
|
|
2653
|
+
this.logger.warn(`[单页同步] ${msg}`);
|
|
2654
|
+
return msg;
|
|
2655
|
+
}
|
|
2656
|
+
this.logger.info(`[单页同步] 开始处理页面: ${title}`);
|
|
2657
|
+
const data = await getContributorsAndTimestamp(
|
|
2658
|
+
title,
|
|
2659
|
+
this.ctx.wikiBot.getGGBot()
|
|
2660
|
+
);
|
|
2661
|
+
if (!data.contributor || data.contributor === "") {
|
|
2662
|
+
const msg = `❌ 页面 "${title}" 不存在或未被编辑`;
|
|
2663
|
+
this.logger.warn(`[单页同步] ${msg}`);
|
|
2664
|
+
return msg;
|
|
2665
|
+
}
|
|
2666
|
+
await this.ctx.database.set(
|
|
2667
|
+
"wikipages",
|
|
2668
|
+
{ title },
|
|
2669
|
+
{
|
|
2670
|
+
contributor: data.contributor,
|
|
2671
|
+
change_time: data.change_time
|
|
2672
|
+
}
|
|
2673
|
+
);
|
|
2674
|
+
const successMsg = `✅ 页面 ${title} 的贡献者已同步为:${data.contributor},时间:${data.change_time}`;
|
|
2675
|
+
this.logger.info(`[单页同步] ${successMsg}`);
|
|
2676
|
+
return successMsg;
|
|
2677
|
+
} catch (err) {
|
|
2678
|
+
const errorMsg = err instanceof Error ? err.message : String(err);
|
|
2679
|
+
const msg = `❌ 同步页面 "${title}" 的贡献者失败: ${errorMsg}`;
|
|
2680
|
+
this.logger.error(`[单页同步] ${msg}`);
|
|
2681
|
+
return msg;
|
|
2682
|
+
}
|
|
2683
|
+
}
|
|
2684
|
+
};
|
|
2685
|
+
async function getContributorsAndTimestamp(title, sourceBot) {
|
|
2686
|
+
if (!title) return { contributor: "", change_time: "" };
|
|
2687
|
+
try {
|
|
2688
|
+
const res = await sourceBot.request({
|
|
2689
|
+
action: "query",
|
|
2690
|
+
format: "json",
|
|
2691
|
+
prop: "revisions",
|
|
2692
|
+
titles: title,
|
|
2693
|
+
formatversion: "2",
|
|
2694
|
+
rvprop: "timestamp|user"
|
|
2695
|
+
});
|
|
2696
|
+
if (res.query.pages[0].missing === true) {
|
|
2697
|
+
return { contributor: "", change_time: "" };
|
|
2698
|
+
}
|
|
2699
|
+
const revisions = res.query.pages[0].revisions[0];
|
|
2700
|
+
return {
|
|
2701
|
+
contributor: revisions.user,
|
|
2702
|
+
change_time: formatWikiTime(revisions.timestamp)
|
|
2703
|
+
};
|
|
2704
|
+
} catch (err) {
|
|
2705
|
+
const errorMsg = err instanceof Error ? err.message : String(err);
|
|
2706
|
+
this.logger.error(`[同步贡献者] ❌ 处理 ${title} 时出错: ${errorMsg}`);
|
|
2707
|
+
return { contributor: "", change_time: "" };
|
|
2708
|
+
}
|
|
2709
|
+
}
|
|
2710
|
+
__name(getContributorsAndTimestamp, "getContributorsAndTimestamp");
|
|
2711
|
+
|
|
2431
2712
|
// src/index.ts
|
|
2432
2713
|
var name = "oni-sync-bot";
|
|
2433
|
-
var Config =
|
|
2714
|
+
var Config = import_koishi12.Schema.intersect([
|
|
2434
2715
|
WikiBotService.Config,
|
|
2435
2716
|
RouteRedirect.Config,
|
|
2436
2717
|
SyncCommands.Config,
|
|
@@ -2446,6 +2727,7 @@ function apply(ctx, config) {
|
|
|
2446
2727
|
ctx.plugin(QueryCommands, config);
|
|
2447
2728
|
ctx.plugin(UpdateCommands, config);
|
|
2448
2729
|
ctx.plugin(TodoList);
|
|
2730
|
+
ctx.plugin(SyncContributor, config);
|
|
2449
2731
|
ctx.inject(["console"], (ctx2) => {
|
|
2450
2732
|
ctx2.console.addEntry({
|
|
2451
2733
|
dev: (0, import_path.resolve)(__dirname, "../client/index.ts"),
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Context } from "koishi";
|
|
2
|
+
export interface ContributorConfig {
|
|
3
|
+
}
|
|
4
|
+
export declare class SyncContributor {
|
|
5
|
+
private config;
|
|
6
|
+
static readonly inject: string[];
|
|
7
|
+
private logger;
|
|
8
|
+
private ctx;
|
|
9
|
+
constructor(ctx: Context, config: ContributorConfig);
|
|
10
|
+
private setupWeeklySchedule;
|
|
11
|
+
private executeSyncAllContributors;
|
|
12
|
+
private registerCommands;
|
|
13
|
+
private syncSinglePage;
|
|
14
|
+
}
|
|
15
|
+
export declare function apply(ctx: Context, config: ContributorConfig): void;
|
package/lib/sync/pageSync.d.ts
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
import { Mwn } from "mwn";
|
|
2
2
|
import { Config } from "../index";
|
|
3
|
+
export interface Database {
|
|
4
|
+
set(table: string, query: object, data: object): Promise<any>;
|
|
5
|
+
get<T = any>(table: string, query: object): Promise<T[]>;
|
|
6
|
+
create(table: string, data: object): Promise<any>;
|
|
7
|
+
upsert(table: string, data: object | object[]): Promise<any>;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* 检查并初始化页面到数据库
|
|
11
|
+
* 如果数据库中不存在该页面,先创建基本数据
|
|
12
|
+
*/
|
|
13
|
+
export declare function ensurePageInDatabase(database: Database | undefined, pageId: number, title: string): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* 更新页面贡献者信息到数据库
|
|
16
|
+
*/
|
|
17
|
+
export declare function updateContributorToDatabase(database: Database | undefined, title: string, user: string, timestamp: string): Promise<void>;
|
|
3
18
|
/**
|
|
4
19
|
* 单页面同步
|
|
5
20
|
* @param oldSite 源站点机器人实例
|
|
@@ -36,6 +51,7 @@ export interface SyncNotifyItem {
|
|
|
36
51
|
* @param newSite 目标站点机器人实例
|
|
37
52
|
* @param config KOISHI用户配置的项
|
|
38
53
|
* @param onSynced 同步成功批量回调(仅 reason==="synced" 的条目,函数结束时一次调用)
|
|
54
|
+
* @param database 数据库实例(可选),用于更新贡献者信息
|
|
39
55
|
*/
|
|
40
|
-
declare function incrementalUpdate(oldSite: Mwn, newSite: Mwn, config: Config, onSynced?: (items: SyncNotifyItem[]) => void): Promise<void>;
|
|
41
|
-
export { syncSinglePage, syncPages
|
|
56
|
+
export declare function incrementalUpdate(oldSite: Mwn, newSite: Mwn, config: Config, onSynced?: (items: SyncNotifyItem[]) => void, database?: Database): Promise<void>;
|
|
57
|
+
export { syncSinglePage, syncPages };
|
package/lib/utils/tools.d.ts
CHANGED
|
@@ -18,4 +18,8 @@ declare function generatePinyinInfo(text: string): {
|
|
|
18
18
|
pinyin_first: string;
|
|
19
19
|
};
|
|
20
20
|
declare function getErrorMessage(error: unknown): string;
|
|
21
|
-
|
|
21
|
+
/**
|
|
22
|
+
* 将 MediaWiki ISO 时间戳(如 "2024-06-19T10:30:45Z")转为北京时间可读字符串
|
|
23
|
+
*/
|
|
24
|
+
declare function formatWikiTime(isoString: string): string;
|
|
25
|
+
export { getAndProcessPageContent, generatePinyinInfo, logger, getErrorMessage, formatWikiTime, };
|