@hieuzest/koishi-plugin-mahjongpub 0.3.4 → 0.3.5

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 CHANGED
@@ -1,7 +1,7 @@
1
- import{icons as At,send as R,receive as Lt}from"@koishijs/client";import{createElementBlock as h,openBlock as d,createCommentVNode as V,createElementVNode as p,defineComponent as H,warn as Ut,watch as ce,unref as T,inject as fe,ref as S,computed as j,isRef as Ft,getCurrentInstance as _e,provide as Bt,renderSlot as Ve,mergeProps as Kt,normalizeClass as Y,createVNode as s,Transition as mt,withCtx as l,withDirectives as Le,toDisplayString as P,normalizeStyle as ft,vShow as Ue,shallowReactive as Ht,onMounted as je,createBlock as E,resolveDynamicComponent as Gt,Fragment as q,withModifiers as Se,isVNode as vt,render as et,resolveComponent as k,createTextVNode as x,renderList as Q,withKeys as De,reactive as Zt,onUnmounted as Jt,nextTick as Yt}from"vue";import{isClient as Fe,useEventListener as qt,useResizeObserver as Wt,useTimeoutFn as Xt}from"@vueuse/core";const ie=(e,n)=>{const t=e.__vccOpts||e;for(const[a,o]of n)t[a]=o;return t},Qt={},en={class:"k-icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"};function tn(e,n){return d(),h("svg",en,[V(" Mahjong tile "),n[0]||(n[0]=p("rect",{x:"3",y:"1",width:"18",height:"22",rx:"2",ry:"2",fill:"none",stroke:"currentColor","stroke-width":"1.5"},null,-1)),n[1]||(n[1]=p("rect",{x:"5",y:"3",width:"14",height:"18",rx:"1",ry:"1",fill:"none",stroke:"currentColor","stroke-width":"0.8"},null,-1)),V(" 中 character simplified "),n[2]||(n[2]=p("rect",{x:"8",y:"7",width:"8",height:"10",rx:"0.5",fill:"none",stroke:"currentColor","stroke-width":"1.2"},null,-1)),n[3]||(n[3]=p("line",{x1:"12",y1:"7",x2:"12",y2:"17",stroke:"currentColor","stroke-width":"1.2"},null,-1)),n[4]||(n[4]=p("line",{x1:"8",y1:"12",x2:"16",y2:"12",stroke:"currentColor","stroke-width":"1.2"},null,-1))])}const nn=ie(Qt,[["render",tn]]);At.register("mahjongpub:icon",nn);/**
1
+ import{icons as Lt,send as L,receive as At}from"@koishijs/client";import{createElementBlock as h,openBlock as i,createCommentVNode as V,createElementVNode as c,defineComponent as H,warn as Ut,watch as ce,unref as T,inject as fe,ref as I,computed as P,isRef as Ft,getCurrentInstance as _e,provide as Bt,renderSlot as Ve,mergeProps as Kt,normalizeClass as Y,createVNode as s,Transition as mt,withCtx as l,withDirectives as Ae,toDisplayString as N,normalizeStyle as ft,vShow as Ue,shallowReactive as Ht,onMounted as je,createBlock as j,resolveDynamicComponent as Gt,Fragment as q,withModifiers as Se,isVNode as vt,render as et,resolveComponent as k,createTextVNode as $,renderList as Q,withKeys as De,reactive as Zt,onUnmounted as Jt,nextTick as Yt}from"vue";import{isClient as Fe,useEventListener as qt,useResizeObserver as Wt,useTimeoutFn as Xt}from"@vueuse/core";const ie=(e,n)=>{const t=e.__vccOpts||e;for(const[a,o]of n)t[a]=o;return t},Qt={},en={class:"k-icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"};function tn(e,n){return i(),h("svg",en,[V(" Mahjong tile "),n[0]||(n[0]=c("rect",{x:"3",y:"1",width:"18",height:"22",rx:"2",ry:"2",fill:"none",stroke:"currentColor","stroke-width":"1.5"},null,-1)),n[1]||(n[1]=c("rect",{x:"5",y:"3",width:"14",height:"18",rx:"1",ry:"1",fill:"none",stroke:"currentColor","stroke-width":"0.8"},null,-1)),V(" 中 character simplified "),n[2]||(n[2]=c("rect",{x:"8",y:"7",width:"8",height:"10",rx:"0.5",fill:"none",stroke:"currentColor","stroke-width":"1.2"},null,-1)),n[3]||(n[3]=c("line",{x1:"12",y1:"7",x2:"12",y2:"17",stroke:"currentColor","stroke-width":"1.2"},null,-1)),n[4]||(n[4]=c("line",{x1:"8",y1:"12",x2:"16",y2:"12",stroke:"currentColor","stroke-width":"1.2"},null,-1))])}const nn=ie(Qt,[["render",tn]]);Lt.register("mahjongpub:icon",nn);/**
2
2
  * @vue/shared v3.5.26
3
3
  * (c) 2018-present Yuxi (Evan) You and Vue contributors
4
4
  * @license MIT
5
- **/const an=Object.prototype.hasOwnProperty,tt=(e,n)=>an.call(e,n),Ie=e=>typeof e=="function",ze=e=>typeof e=="string",yt=e=>e!==null&&typeof e=="object";var on=typeof global=="object"&&global&&global.Object===Object&&global,ln=typeof self=="object"&&self&&self.Object===Object&&self,Be=on||ln||Function("return this")(),ve=Be.Symbol,gt=Object.prototype,sn=gt.hasOwnProperty,rn=gt.toString,he=ve?ve.toStringTag:void 0;function un(e){var n=sn.call(e,he),t=e[he];try{e[he]=void 0;var a=true}catch{}var o=rn.call(e);return a&&(n?e[he]=t:delete e[he]),o}var dn=Object.prototype,cn=dn.toString;function pn(e){return cn.call(e)}var mn="[object Null]",fn="[object Undefined]",nt=ve?ve.toStringTag:void 0;function ht(e){return e==null?e===void 0?fn:mn:nt&&nt in Object(e)?un(e):pn(e)}function vn(e){return e!=null&&typeof e=="object"}var yn="[object Symbol]";function Ke(e){return typeof e=="symbol"||vn(e)&&ht(e)==yn}function gn(e,n){for(var t=-1,a=e==null?0:e.length,o=Array(a);++t<a;)o[t]=n(e[t],t,e);return o}var He=Array.isArray,at=ve?ve.prototype:void 0,ot=at?at.toString:void 0;function _t(e){if(typeof e=="string")return e;if(He(e))return gn(e,_t)+"";if(Ke(e))return ot?ot.call(e):"";var n=e+"";return n=="0"&&1/e==-1/0?"-0":n}function bt(e){var n=typeof e;return e!=null&&(n=="object"||n=="function")}var hn="[object AsyncFunction]",_n="[object Function]",bn="[object GeneratorFunction]",wn="[object Proxy]";function Cn(e){if(!bt(e))return false;var n=ht(e);return n==_n||n==bn||n==hn||n==wn}var Me=Be["__core-js_shared__"],lt=function(){var e=/[^.]+$/.exec(Me&&Me.keys&&Me.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function $n(e){return!!lt&&lt in e}var xn=Function.prototype,kn=xn.toString;function Sn(e){if(e!=null){try{return kn.call(e)}catch{}try{return e+""}catch{}}return""}var In=/[\\^$.*+?()[\]{}|]/g,zn=/^\[object .+?Constructor\]$/,Tn=Function.prototype,Vn=Object.prototype,jn=Tn.toString,Pn=Vn.hasOwnProperty,Nn=RegExp("^"+jn.call(Pn).replace(In,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function On(e){if(!bt(e)||$n(e))return false;var n=Cn(e)?Nn:zn;return n.test(Sn(e))}function En(e,n){return e==null?void 0:e[n]}function wt(e,n){var t=En(e,n);return On(t)?t:void 0}function Mn(e,n){return e===n||e!==e&&n!==n}var Dn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Rn=/^\w*$/;function An(e,n){if(He(e))return false;var t=typeof e;return t=="number"||t=="symbol"||t=="boolean"||e==null||Ke(e)?true:Rn.test(e)||!Dn.test(e)||n!=null&&e in Object(n)}var be=wt(Object,"create");function Ln(){this.__data__=be?be(null):{},this.size=0}function Un(e){var n=this.has(e)&&delete this.__data__[e];return this.size-=n?1:0,n}var Fn="__lodash_hash_undefined__",Bn=Object.prototype,Kn=Bn.hasOwnProperty;function Hn(e){var n=this.__data__;if(be){var t=n[e];return t===Fn?void 0:t}return Kn.call(n,e)?n[e]:void 0}var Gn=Object.prototype,Zn=Gn.hasOwnProperty;function Jn(e){var n=this.__data__;return be?n[e]!==void 0:Zn.call(n,e)}var Yn="__lodash_hash_undefined__";function qn(e,n){var t=this.__data__;return this.size+=this.has(e)?0:1,t[e]=be&&n===void 0?Yn:n,this}function pe(e){var n=-1,t=e==null?0:e.length;for(this.clear();++n<t;){var a=e[n];this.set(a[0],a[1])}}pe.prototype.clear=Ln;pe.prototype.delete=Un;pe.prototype.get=Hn;pe.prototype.has=Jn;pe.prototype.set=qn;function Wn(){this.__data__=[],this.size=0}function Pe(e,n){for(var t=e.length;t--;)if(Mn(e[t][0],n))return t;return-1}var Xn=Array.prototype,Qn=Xn.splice;function ea(e){var n=this.__data__,t=Pe(n,e);if(t<0)return false;var a=n.length-1;return t==a?n.pop():Qn.call(n,t,1),--this.size,true}function ta(e){var n=this.__data__,t=Pe(n,e);return t<0?void 0:n[t][1]}function na(e){return Pe(this.__data__,e)>-1}function aa(e,n){var t=this.__data__,a=Pe(t,e);return a<0?(++this.size,t.push([e,n])):t[a][1]=n,this}function ge(e){var n=-1,t=e==null?0:e.length;for(this.clear();++n<t;){var a=e[n];this.set(a[0],a[1])}}ge.prototype.clear=Wn;ge.prototype.delete=ea;ge.prototype.get=ta;ge.prototype.has=na;ge.prototype.set=aa;var oa=wt(Be,"Map");function la(){this.size=0,this.__data__={hash:new pe,map:new(oa||ge),string:new pe}}function sa(e){var n=typeof e;return n=="string"||n=="number"||n=="symbol"||n=="boolean"?e!=="__proto__":e===null}function Ne(e,n){var t=e.__data__;return sa(n)?t[typeof n=="string"?"string":"hash"]:t.map}function ra(e){var n=Ne(this,e).delete(e);return this.size-=n?1:0,n}function ia(e){return Ne(this,e).get(e)}function ua(e){return Ne(this,e).has(e)}function da(e,n){var t=Ne(this,e),a=t.size;return t.set(e,n),this.size+=t.size==a?0:1,this}function me(e){var n=-1,t=e==null?0:e.length;for(this.clear();++n<t;){var a=e[n];this.set(a[0],a[1])}}me.prototype.clear=la;me.prototype.delete=ra;me.prototype.get=ia;me.prototype.has=ua;me.prototype.set=da;var ca="Expected a function";function Ge(e,n){if(typeof e!="function"||n!=null&&typeof n!="function")throw new TypeError(ca);var t=function(){var a=arguments,o=n?n.apply(this,a):a[0],i=t.cache;if(i.has(o))return i.get(o);var c=e.apply(this,a);return t.cache=i.set(o,c)||i,c};return t.cache=new(Ge.Cache||me),t}Ge.Cache=me;var pa=500;function ma(e){var n=Ge(e,function(a){return t.size===pa&&t.clear(),a}),t=n.cache;return n}var fa=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,va=/\\(\\)?/g,ya=ma(function(e){var n=[];return e.charCodeAt(0)===46&&n.push(""),e.replace(fa,function(t,a,o,i){n.push(o?i.replace(va,"$1"):a||t)}),n});function ga(e){return e==null?"":_t(e)}function ha(e,n){return He(e)?e:An(e,n)?[e]:ya(ga(e))}function _a(e){if(typeof e=="string"||Ke(e))return e;var n=e+"";return n=="0"&&1/e==-1/0?"-0":n}function ba(e,n){n=ha(n,e);for(var t=0,a=n.length;e!=null&&t<a;)e=e[_a(n[t++])];return t&&t==a?e:void 0}function wa(e,n,t){var a=e==null?void 0:ba(e,n);return a===void 0?t:a}function Ca(e){for(var n=-1,t=e==null?0:e.length,a={};++n<t;){var o=e[n];a[o[0]]=o[1]}return a}const $a=e=>e===void 0,we=e=>typeof e=="number",xa=e=>typeof Element>"u"?false:e instanceof Element,ka=e=>ze(e)?!Number.isNaN(Number(e)):false,st=e=>Object.keys(e);function Re(e,n="px"){if(!e)return"";if(we(e)||ka(e))return`${e}${n}`;if(ze(e))return e}/*! Element Plus Icons Vue v2.3.2 */var Sa=H({name:"CircleCloseFilled",__name:"circle-close-filled",setup(e){return(n,t)=>(d(),h("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[p("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"})]))}}),Ia=Sa,za=H({name:"Close",__name:"close",setup(e){return(n,t)=>(d(),h("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[p("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"})]))}}),Ta=za,Va=H({name:"InfoFilled",__name:"info-filled",setup(e){return(n,t)=>(d(),h("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[p("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"})]))}}),ja=Va,Pa=H({name:"SuccessFilled",__name:"success-filled",setup(e){return(n,t)=>(d(),h("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[p("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"})]))}}),Na=Pa,Oa=H({name:"WarningFilled",__name:"warning-filled",setup(e){return(n,t)=>(d(),h("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[p("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"})]))}}),Ea=Oa;const Ct="__epPropKey",le=e=>e,Ma=e=>yt(e)&&!!e[Ct],$t=(e,n)=>{if(!yt(e)||Ma(e))return e;const{values:t,required:a,default:o,type:i,validator:c}=e,$={type:i,required:!!a,validator:t||c?I=>{let y=false,_=[];if(t&&(_=Array.from(t),tt(e,"default")&&_.push(o),y||(y=_.includes(I))),c&&(y||(y=c(I))),!y&&_.length>0){const g=[...new Set(_)].map(C=>JSON.stringify(C)).join(", ");Ut(`Invalid prop: validation failed${n?` for prop "${n}"`:""}. Expected one of [${g}], got value ${JSON.stringify(I)}.`)}return y}:void 0,[Ct]:true};return tt(e,"default")&&($.default=o),$},Ce=e=>Ca(Object.entries(e).map(([n,t])=>[n,$t(t,n)])),Da=le([String,Object,Function]),Ra={Close:Ta},rt={success:Na,warning:Ea,error:Ia,info:ja},xt=(e,n)=>(e.install=t=>{for(const a of[e,...Object.values({})])t.component(a.name,a)},e),Aa=(e,n)=>(e.install=t=>{e._context=t._context,t.config.globalProperties[n]=e},e),La={esc:"Escape"},Ua=["","default","small","large"],Fa=e=>e,it=({from:e,replacement:n,scope:t,version:a,ref:o,type:i="API"},c)=>{ce(()=>T(c),m=>{},{immediate:true})};var Ba={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 Ka=e=>(n,t)=>Ha(n,t,T(e)),Ha=(e,n,t)=>wa(t,e,e).replace(/\{(\w+)\}/g,(a,o)=>{var i;return`${(i=n==null?void 0:n[o])!=null?i:`{${o}}`}`}),Ga=e=>{const n=j(()=>T(e).name),t=Ft(e)?e:S(e);return{lang:n,locale:t,t:Ka(e)}},kt=Symbol("localeContextKey"),Za=e=>{const n=e||fe(kt,S());return Ga(j(()=>n.value||Ba))},ke="el",Ja="is-",de=(e,n,t,a,o)=>{let i=`${e}-${n}`;return t&&(i+=`-${t}`),a&&(i+=`__${a}`),o&&(i+=`--${o}`),i},St=Symbol("namespaceContextKey"),Ya=e=>{const n=e||(_e()?fe(St,S(ke)):S(ke));return j(()=>T(n)||ke)},Ze=(e,n)=>{const t=Ya(n);return{namespace:t,b:(f="")=>de(t.value,e,f,"",""),e:f=>f?de(t.value,e,"",f,""):"",m:f=>f?de(t.value,e,"","",f):"",be:(f,w)=>f&&w?de(t.value,e,f,w,""):"",em:(f,w)=>f&&w?de(t.value,e,"",f,w):"",bm:(f,w)=>f&&w?de(t.value,e,f,"",w):"",bem:(f,w,u)=>f&&w&&u?de(t.value,e,f,w,u):"",is:(f,...w)=>{const u=w.length>=1?w[0]:true;return f&&u?`${Ja}${f}`:""},cssVar:f=>{const w={};for(const u in f)f[u]&&(w[`--${t.value}-${u}`]=f[u]);return w},cssVarName:f=>`--${t.value}-${f}`,cssVarBlock:f=>{const w={};for(const u in f)f[u]&&(w[`--${t.value}-${e}-${u}`]=f[u]);return w},cssVarBlockName:f=>`--${t.value}-${e}-${f}`}},ut={current:0},dt=S(0),It=2e3,ct=Symbol("elZIndexContextKey"),zt=Symbol("zIndexContextKey"),qa=e=>{const n=_e()?fe(ct,ut):ut,t=e||(_e()?fe(zt,void 0):void 0),a=j(()=>{const c=T(t);return we(c)?c:It}),o=j(()=>a.value+dt.value),i=()=>(n.current++,dt.value=n.current,o.value);return!Fe&&fe(ct),{initialZIndex:a,currentZIndex:o,nextZIndex:i}},Wa=$t({type:String,values:Ua,required:false}),Xa=Symbol("size"),Qa=Symbol("emptyValuesContextKey"),eo=Ce({emptyValues:Array,valueOnClear:{type:[String,Number,Boolean,Function],default:void 0,validator:e=>Ie(e)?!e():!e}}),Tt=Symbol(),Te=S();function Vt(e,n=void 0){return _e()?fe(Tt,Te):Te}function to(e,n){const t=Vt(),a=Ze(e,j(()=>{var m;return((m=t.value)==null?void 0:m.namespace)||ke})),o=Za(j(()=>{var m;return(m=t.value)==null?void 0:m.locale})),i=qa(j(()=>{var m;return((m=t.value)==null?void 0:m.zIndex)||It})),c=j(()=>{var m;return T(n)||((m=t.value)==null?void 0:m.size)||""});return jt(j(()=>T(t)||{})),{ns:a,locale:o,zIndex:i,size:c}}const jt=(e,n,t=false)=>{var a;const o=!!_e(),i=o?Vt():void 0,c=(a=void 0)!=null?a:o?Bt:void 0;if(!c)return;const m=j(()=>{const $=T(e);return i!=null&&i.value?no(i.value,$):$});return c(Tt,m),c(kt,j(()=>m.value.locale)),c(St,j(()=>m.value.namespace)),c(zt,j(()=>m.value.zIndex)),c(Xa,{size:j(()=>m.value.size||"")}),c(Qa,j(()=>({emptyValues:m.value.emptyValues,valueOnClear:m.value.valueOnClear}))),(t||!Te.value)&&(Te.value=m.value),m},no=(e,n)=>{const t=[...new Set([...st(e),...st(n)])],a={};for(const o of t)a[o]=n[o]!==void 0?n[o]:e[o];return a},ao=Ce({a11y:{type:Boolean,default:true},locale:{type:le(Object)},size:Wa,button:{type:le(Object)},experimentalFeatures:{type:le(Object)},keyboardNavigation:{type:Boolean,default:true},message:{type:le(Object)},zIndex:Number,namespace:{type:String,default:"el"},...eo}),Ae={};H({name:"ElConfigProvider",props:ao,setup(e,{slots:n}){ce(()=>e.message,a=>{Object.assign(Ae,a??{})},{immediate:true,deep:true});const t=jt(e);return()=>Ve(n,"default",{config:t==null?void 0:t.value})}});var Je=(e,n)=>{const t=e.__vccOpts||e;for(const[a,o]of n)t[a]=o;return t};const oo=Ce({size:{type:le([Number,String])},color:{type:String}}),lo=H({name:"ElIcon",inheritAttrs:false}),so=H({...lo,props:oo,setup(e){const n=e,t=Ze("icon"),a=j(()=>{const{size:o,color:i}=n;return!o&&!i?{}:{fontSize:$a(o)?void 0:Re(o),"--color":i}});return(o,i)=>(d(),h("i",Kt({class:T(t).b(),style:T(a)},o.$attrs),[Ve(o.$slots,"default")],16))}});var ro=Je(so,[["__file","icon.vue"]]);const pt=xt(ro),io=Ce({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:le([String,Object,Array])},badgeStyle:{type:le([String,Object,Array])},offset:{type:le(Array),default:[0,0]},dotClass:{type:String},badgeClass:{type:String}}),uo=["textContent"],co=H({name:"ElBadge"}),po=H({...co,props:io,setup(e,{expose:n}){const t=e,a=Ze("badge"),o=j(()=>t.isDot?"":we(t.value)&&we(t.max)?t.max<t.value?`${t.max}+`:t.value===0&&!t.showZero?"":`${t.value}`:`${t.value}`),i=j(()=>{var c,m,$,I,y,_;return[{backgroundColor:t.color,marginRight:Re(-((m=(c=t.offset)==null?void 0:c[0])!=null?m:0)),marginTop:Re((I=($=t.offset)==null?void 0:$[1])!=null?I:0)},(y=t.dotStyle)!=null?y:{},(_=t.badgeStyle)!=null?_:{}]});return it({from:"dot-style",replacement:"badge-style",version:"2.8.0",scope:"el-badge",ref:"https://element-plus.org/en-US/component/badge.html"},j(()=>!!t.dotStyle)),it({from:"dot-class",replacement:"badge-class",version:"2.8.0",scope:"el-badge",ref:"https://element-plus.org/en-US/component/badge.html"},j(()=>!!t.dotClass)),n({content:o}),(c,m)=>(d(),h("div",{class:Y(T(a).b())},[Ve(c.$slots,"default"),s(mt,{name:`${T(a).namespace.value}-zoom-in-center`,persisted:""},{default:l(()=>[Le(p("sup",{class:Y([T(a).e("content"),T(a).em("content",c.type),T(a).is("fixed",!!c.$slots.default),T(a).is("dot",c.isDot),c.dotClass,c.badgeClass]),style:ft(T(i)),textContent:P(T(o))},null,14,uo),[[Ue,!c.hidden&&(T(o)||c.isDot)]])]),_:1},8,["name"])],2))}});var mo=Je(po,[["__file","badge.vue"]]);const fo=xt(mo),Pt=["success","info","warning","error"],Z=Fa({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:Fe?document.body:void 0}),vo=Ce({customClass:{type:String,default:Z.customClass},center:{type:Boolean,default:Z.center},dangerouslyUseHTMLString:{type:Boolean,default:Z.dangerouslyUseHTMLString},duration:{type:Number,default:Z.duration},icon:{type:Da,default:Z.icon},id:{type:String,default:Z.id},message:{type:le([String,Object,Function]),default:Z.message},onClose:{type:le(Function),default:Z.onClose},showClose:{type:Boolean,default:Z.showClose},type:{type:String,values:Pt,default:Z.type},plain:{type:Boolean,default:Z.plain},offset:{type:Number,default:Z.offset},zIndex:{type:Number,default:Z.zIndex},grouping:{type:Boolean,default:Z.grouping},repeatNum:{type:Number,default:Z.repeatNum}}),yo={destroy:()=>true},se=Ht([]),go=e=>{const n=se.findIndex(o=>o.id===e),t=se[n];let a;return n>0&&(a=se[n-1]),{current:t,prev:a}},ho=e=>{const{prev:n}=go(e);return n?n.vm.exposed.bottom.value:0},_o=(e,n)=>se.findIndex(a=>a.id===e)>0?16:n,bo=["id"],wo=["innerHTML"],Co=H({name:"ElMessage"}),$o=H({...Co,props:vo,emits:yo,setup(e,{expose:n}){const t=e,{Close:a}=Ra,{ns:o,zIndex:i}=to("message"),{currentZIndex:c,nextZIndex:m}=i,$=S(),I=S(false),y=S(0);let _;const g=j(()=>t.type?t.type==="error"?"danger":t.type:"info"),C=j(()=>{const M=t.type;return{[o.bm("icon",M)]:M&&rt[M]}}),N=j(()=>t.icon||rt[t.type]||""),f=j(()=>ho(t.id)),w=j(()=>_o(t.id,t.offset)+f.value),u=j(()=>y.value+w.value),b=j(()=>({top:`${w.value}px`,zIndex:c.value}));function B(){t.duration!==0&&({stop:_}=Xt(()=>{L()},t.duration))}function U(){_==null||_()}function L(){I.value=false}function J({code:M}){M===La.esc&&L()}return je(()=>{B(),m(),I.value=true}),ce(()=>t.repeatNum,()=>{U(),B()}),qt(document,"keydown",J),Wt($,()=>{y.value=$.value.getBoundingClientRect().height}),n({visible:I,bottom:u,close:L}),(M,z)=>(d(),E(mt,{name:T(o).b("fade"),onBeforeLeave:M.onClose,onAfterLeave:z[0]||(z[0]=K=>M.$emit("destroy")),persisted:""},{default:l(()=>[Le(p("div",{id:M.id,ref_key:"messageRef",ref:$,class:Y([T(o).b(),{[T(o).m(M.type)]:M.type},T(o).is("center",M.center),T(o).is("closable",M.showClose),T(o).is("plain",M.plain),M.customClass]),style:ft(T(b)),role:"alert",onMouseenter:U,onMouseleave:B},[M.repeatNum>1?(d(),E(T(fo),{key:0,value:M.repeatNum,type:T(g),class:Y(T(o).e("badge"))},null,8,["value","type","class"])):V("v-if",true),T(N)?(d(),E(T(pt),{key:1,class:Y([T(o).e("icon"),T(C)])},{default:l(()=>[(d(),E(Gt(T(N))))]),_:1},8,["class"])):V("v-if",true),Ve(M.$slots,"default",{},()=>[M.dangerouslyUseHTMLString?(d(),h(q,{key:1},[V(" Caution here, message could've been compromised, never use user's input as message "),p("p",{class:Y(T(o).e("content")),innerHTML:M.message},null,10,wo)],2112)):(d(),h("p",{key:0,class:Y(T(o).e("content"))},P(M.message),3))]),M.showClose?(d(),E(T(pt),{key:2,class:Y(T(o).e("closeBtn")),onClick:Se(L,["stop"])},{default:l(()=>[s(T(a))]),_:1},8,["class","onClick"])):V("v-if",true)],46,bo),[[Ue,I.value]])]),_:3},8,["name","onBeforeLeave"]))}});var xo=Je($o,[["__file","message.vue"]]);let ko=1;const Nt=e=>{const n=!e||ze(e)||vt(e)||Ie(e)?{message:e}:e,t={...Z,...n};if(!t.appendTo)t.appendTo=document.body;else if(ze(t.appendTo)){let a=document.querySelector(t.appendTo);xa(a)||(a=document.body),t.appendTo=a}return t},So=e=>{const n=se.indexOf(e);if(n===-1)return;se.splice(n,1);const{handler:t}=e;t.close()},Io=({appendTo:e,...n},t)=>{const a=`message_${ko++}`,o=n.onClose,i=document.createElement("div"),c={...n,id:a,onClose:()=>{o==null||o(),So(y)},onDestroy:()=>{et(null,i)}},m=s(xo,c,Ie(c.message)||vt(c.message)?{default:Ie(c.message)?c.message:()=>c.message}:null);m.appContext=t||ye._context,et(m,i),e.appendChild(i.firstElementChild);const $=m.component,y={id:a,vnode:m,vm:$,handler:{close:()=>{$.exposed.visible.value=false}},props:m.component.props};return y},ye=(e={},n)=>{if(!Fe)return{close:()=>{}};if(we(Ae.max)&&se.length>=Ae.max)return{close:()=>{}};const t=Nt(e);if(t.grouping&&se.length){const o=se.find(({vnode:i})=>{var c;return((c=i.props)==null?void 0:c.message)===t.message});if(o)return o.props.repeatNum+=1,o.props.type=t.type,o.handler}const a=Io(t,n);return se.push(a),a.handler};Pt.forEach(e=>{ye[e]=(n={},t)=>{const a=Nt(n);return ye({...a,type:e},t)}});function zo(e){for(const n of se)(!e||e===n.props.type)&&n.handler.close()}ye.closeAll=zo;ye._context=null;const F=Aa(ye,"$message"),To={class:"sidebar"},Vo={class:"sidebar-header"},jo={class:"contest-list"},Po=["onClick","onContextmenu"],No={class:"contest-name"},Oo={class:"contest-cid"},Eo=H({__name:"sidebar",props:{contests:{},activeCid:{}},emits:["select","add","remove","update"],setup(e,{emit:n}){const t=n,a=S(false),o=S(null),i=S(""),c=S(null),m=S(false);async function $(){if(o.value){m.value=true;try{c.value=await R("mahjongpub/search-contests",o.value)}catch(w){F.error(`查询失败: ${w}`)}finally{m.value=false}}}async function I(){if(c.value){m.value=true;try{const w={cid:c.value.cid,name:c.value.name,adminPassword:i.value||void 0};await R("mahjongpub/add-managed",w),t("add",w),a.value=false,o.value=null,c.value=null,i.value=""}catch(w){F.error(`添加失败: ${w}`)}finally{m.value=false}}}const y=S(false),_=S(null),g=S("");function C(w,u){_.value=u,g.value=u.adminPassword??"",y.value=true}async function N(){if(_.value)try{await R("mahjongpub/update-managed",_.value.cid,{adminPassword:g.value||void 0}),t("update",_.value.cid,{adminPassword:g.value||void 0}),y.value=false}catch(w){F.error(`保存失败: ${w}`)}}async function f(){if(_.value)try{await R("mahjongpub/remove-managed",_.value.cid),t("remove",_.value.cid),y.value=false}catch(w){F.error(`移除失败: ${w}`)}}return(w,u)=>{const b=k("el-button"),B=k("el-icon"),U=k("el-input"),L=k("el-form-item"),J=k("el-form"),M=k("el-dialog");return d(),h("div",To,[p("div",Vo,[u[9]||(u[9]=p("span",null,"比赛列表",-1)),s(b,{size:"small",type:"primary",onClick:u[0]||(u[0]=z=>a.value=true)},{default:l(()=>[...u[8]||(u[8]=[x("+ 添加",-1)])]),_:1})]),p("div",jo,[(d(true),h(q,null,Q(e.contests,z=>(d(),h("div",{key:z.cid,class:Y(["contest-item",{active:z.cid===e.activeCid}]),onClick:K=>w.$emit("select",z.cid),onContextmenu:Se(K=>C(K,z),["prevent"])},[p("div",No,P(z.name),1),p("div",Oo,"#"+P(z.cid),1),z.adminPassword?(d(),E(B,{key:0,class:"admin-badge",title:"已配置管理密码"},{default:l(()=>[...u[10]||(u[10]=[p("svg",{viewBox:"0 0 24 24",width:"14",height:"14",fill:"currentColor"},[p("path",{d:"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z"})],-1)])]),_:1})):V("v-if",true)],42,Po))),128))]),V(" Import Dialog "),s(M,{modelValue:a.value,"onUpdate:modelValue":u[4]||(u[4]=z=>a.value=z),title:"添加比赛",width:"420"},{footer:l(()=>[s(b,{onClick:u[3]||(u[3]=z=>a.value=false)},{default:l(()=>[...u[11]||(u[11]=[x("取消",-1)])]),_:1}),s(b,{loading:m.value,onClick:$},{default:l(()=>[...u[12]||(u[12]=[x("查询",-1)])]),_:1},8,["loading"]),s(b,{type:"primary",disabled:!c.value,onClick:I},{default:l(()=>[...u[13]||(u[13]=[x("添加",-1)])]),_:1},8,["disabled"])]),default:l(()=>[s(J,{"label-width":"80px",onSubmit:Se(I,["prevent"])},{default:l(()=>[s(L,{label:"比赛 ID"},{default:l(()=>[s(U,{modelValue:o.value,"onUpdate:modelValue":u[1]||(u[1]=z=>o.value=z),modelModifiers:{number:true},placeholder:"输入大凤林比赛 ID"},null,8,["modelValue"])]),_:1}),c.value?(d(),E(L,{key:0,label:"比赛名称"},{default:l(()=>[p("span",null,P(c.value.name),1)]),_:1})):V("v-if",true),c.value?(d(),E(L,{key:1,label:"当前轮次"},{default:l(()=>[p("span",null,P(c.value.round),1)]),_:1})):V("v-if",true),s(L,{label:"管理密码"},{default:l(()=>[s(U,{modelValue:i.value,"onUpdate:modelValue":u[2]||(u[2]=z=>i.value=z),placeholder:"可选,用于队伍管理","show-password":""},null,8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue"]),V(" Context Menu (password edit) "),s(M,{modelValue:y.value,"onUpdate:modelValue":u[7]||(u[7]=z=>y.value=z),title:"编辑比赛",width:"400"},{footer:l(()=>[s(b,{type:"danger",onClick:f},{default:l(()=>[...u[14]||(u[14]=[x("移除比赛",-1)])]),_:1}),s(b,{onClick:u[6]||(u[6]=z=>y.value=false)},{default:l(()=>[...u[15]||(u[15]=[x("取消",-1)])]),_:1}),s(b,{type:"primary",onClick:N},{default:l(()=>[...u[16]||(u[16]=[x("保存",-1)])]),_:1})]),default:l(()=>[_.value?(d(),E(J,{key:0,"label-width":"80px"},{default:l(()=>[s(L,{label:"比赛名称"},{default:l(()=>[p("span",null,P(_.value.name)+" (#"+P(_.value.cid)+")",1)]),_:1}),s(L,{label:"管理密码"},{default:l(()=>[s(U,{modelValue:g.value,"onUpdate:modelValue":u[5]||(u[5]=z=>g.value=z),placeholder:"留空则无队伍管理权限","show-password":""},null,8,["modelValue"])]),_:1})]),_:1})):V("v-if",true)]),_:1},8,["modelValue"])])}}}),Mo=ie(Eo,[["__scopeId","data-v-e7b90e50"]]),Do={class:"cls-header"},Ro={class:"cls-title"},Ao={key:0,class:"error-msg"},Lo={class:"player-list"},Uo={class:"player-info"},Fo={class:"player-name"},Bo={class:"swap-popover"},Ko={key:0,class:"swap-section"},Ho=["onClick"],Go={class:"swap-manual"},Zo={class:"swap-mode-actions"},Jo={class:"player-right"},Yo=["onClick"],qo={key:1,class:"point-edit"},Wo={key:0,class:"no-players"},Xo={class:"cls-actions"},Qo=H({__name:"cls-card",props:{cls:{},status:{},externalCheckResult:{},hasAdmin:{type:Boolean}},emits:["start","stop","check","swap","edit-point"],setup(e,{emit:n}){const t=e,a=n,o=j(()=>t.status.next??t.status.last??[]),i=j(()=>t.status.status==="pending"||t.status.status==="suspended"),c=S(false),m=S(null),$=j(()=>m.value??t.externalCheckResult??null),I=S(""),y=S({});function _(u,b){y.value[u]=b}function g(u){const b=y.value[u];b!==void 0&&a("edit-point",u,b),y.value[u]=void 0}function C(){c.value=true,m.value=null,a("check",u=>{m.value=u,c.value=false})}function N(u,b,B){b!=null&&b.trim()&&(a("swap",u,b.trim(),B),I.value="")}const f=j(()=>{switch(t.status.status){case"pending":return"info";case"running":return"success";case"finished":return"";case"suspended":return"warning";case"error":return"danger"}}),w=j(()=>{switch(t.status.status){case"pending":return"等待中";case"running":return"进行中";case"finished":return"已结束";case"suspended":return"已停止";case"error":return"错误"}});return(u,b)=>{const B=k("el-tag"),U=k("el-button"),L=k("el-divider"),J=k("el-input"),M=k("el-popover"),z=k("el-card");return d(),E(z,{class:Y(["cls-card",`status-${e.status.status}`]),shadow:"hover"},{header:l(()=>[p("div",Do,[p("span",Ro,P(e.cls)+"组 - "+P(e.status.rowi+1),1),s(B,{type:f.value,size:"small",effect:"dark"},{default:l(()=>[x(P(w.value),1)]),_:1},8,["type"])])]),default:l(()=>[e.status.status==="error"&&e.status.msg?(d(),h("div",Ao,P(e.status.msg),1)):V("v-if",true),p("div",Lo,[(d(true),h(q,null,Q(o.value,(K,G)=>{var $e;return d(),h("div",{key:G,class:"player-row"},[p("div",Uo,[$.value?(d(),h("span",{key:0,class:Y(["online-dot",($e=$.value[G])!=null&&$e.online?"online":"offline"])},null,2)):V("v-if",true),p("span",Fo,P(K.player),1),i.value?(d(),E(M,{key:1,trigger:"click",width:220,placement:"right","popper-class":"swap-popover-container"},{reference:l(()=>[s(U,{size:"small",text:"",class:"swap-btn",title:"换人"},{default:l(()=>[...b[3]||(b[3]=[x("✎",-1)])]),_:1})]),default:l(()=>{var ee;return[p("div",Bo,[(ee=K.teammates)!=null&&ee.length?(d(),h("div",Ko,[b[4]||(b[4]=p("div",{class:"swap-title"},"从队伍名单选择",-1)),(d(true),h(q,null,Q(K.teammates,(re,Oe)=>(d(),h("div",{key:Oe,class:Y(["swap-option",{active:re===K.player}]),onClick:v=>N(G,re,false)},P(re),11,Ho))),128))])):V("v-if",true),s(L,{style:{margin:"8px 0"}}),b[7]||(b[7]=p("div",{class:"swap-title"},"手动输入",-1)),p("div",Go,[s(J,{modelValue:I.value,"onUpdate:modelValue":b[0]||(b[0]=re=>I.value=re),size:"small",placeholder:"选手名"},null,8,["modelValue"])]),p("div",Zo,[s(U,{size:"small",onClick:re=>N(G,I.value,false)},{default:l(()=>[...b[5]||(b[5]=[x("临时替换",-1)])]),_:1},8,["onClick"]),e.hasAdmin?(d(),E(U,{key:0,size:"small",type:"primary",onClick:re=>N(G,I.value,true)},{default:l(()=>[...b[6]||(b[6]=[x("修改名单",-1)])]),_:1},8,["onClick"])):V("v-if",true)])])]}),_:2},1024)):V("v-if",true)]),p("div",Jo,[y.value[G]?(d(),h("div",qo,[s(J,{modelValue:y.value[G],"onUpdate:modelValue":ee=>y.value[G]=ee,modelModifiers:{number:true},size:"small",style:{width:"70px"},onKeyup:[De(ee=>g(G),["enter"]),De(ee=>y.value[G]=void 0,["escape"])]},null,8,["modelValue","onUpdate:modelValue","onKeyup"]),s(U,{size:"small",text:"",type:"primary",class:"point-edit-btn",onClick:ee=>g(G)},{default:l(()=>[...b[8]||(b[8]=[x("✓",-1)])]),_:1},8,["onClick"]),s(U,{size:"small",text:"",class:"point-edit-btn",onClick:ee=>y.value[G]=void 0},{default:l(()=>[...b[9]||(b[9]=[x("✕",-1)])]),_:1},8,["onClick"])])):(d(),h("span",{key:0,class:Y(["player-point",{editable:i.value}]),onClick:ee=>i.value&&_(G,K.point)},P(K.point),11,Yo))])])}),128)),o.value.length?V("v-if",true):(d(),h("div",Wo,"-"))]),p("div",Xo,[e.status.status==="pending"||e.status.status==="suspended"?(d(),E(U,{key:0,type:"success",size:"small",onClick:b[1]||(b[1]=K=>u.$emit("start"))},{default:l(()=>[...b[10]||(b[10]=[x(" 开赛 ",-1)])]),_:1})):V("v-if",true),e.status.status==="pending"||e.status.status==="running"?(d(),E(U,{key:1,type:"warning",size:"small",onClick:b[2]||(b[2]=K=>u.$emit("stop"))},{default:l(()=>[...b[11]||(b[11]=[x(" 停止 ",-1)])]),_:1})):V("v-if",true),i.value?(d(),E(U,{key:2,size:"small",loading:c.value,onClick:C},{default:l(()=>[...b[12]||(b[12]=[x(" 检查 ",-1)])]),_:1},8,["loading"])):V("v-if",true)])]),_:1},8,["class"])}}}),el=ie(Qo,[["__scopeId","data-v-559ac705"]]),tl={class:"match-manager"},nl={class:"config-header"},al={class:"schedule-section"},ol={class:"schedule-list"},ll={class:"config-actions"},sl={class:"subscriber-list"},rl={key:0,class:"subscriber-empty"},il={class:"subscriber-add"},ul={class:"schedule-control-header"},dl={class:"schedule-control-list"},cl={class:"schedule-info"},pl={key:0,class:"schedule-time"},ml={key:2,class:"status-section"},fl={class:"status-header"},vl={class:"status-actions"},yl={class:"cls-grid"},gl={key:3,class:"status-placeholder"},hl={class:"log-header"},_l={class:"log-time"},bl={class:"log-msg"},wl={key:0,class:"log-empty"},Cl=H({__name:"match-manager",props:{cid:{},contestInfo:{}},emits:["refresh"],setup(e,{emit:n}){const t=e,a=n,o=S({type:"ssb",round:"",lobby:"",playerIndex:"",ver:"",maxRow:"",schedules:[]}),i=S([]),c=S([]),m=S(),$=S(false),I=S(false),y=Zt({}),_=S("");let g=null;function C(v){if(v===""||v===void 0||v===null)return;const r=Number(v);return isNaN(r)?void 0:r}ce(()=>{var v;return(v=t.contestInfo)==null?void 0:v.extra},v=>{v&&(o.value.type=v.type??"ssb",o.value.round=v.round??"",o.value.lobby=v.lobby??"",o.value.playerIndex=v.playerIndex??"",o.value.ver=v.ver??"",o.value.maxRow=v.maxRow??"",o.value.schedules=(v.schedules??[]).map(r=>({...r,_time:r.startAt?new Date(2e3,0,1,...r.startAt.split(":").map(Number)):void 0})))},{immediate:true});function N(){o.value.schedules.push({maxRow:10,_time:void 0})}async function f(){const v=o.value.schedules.map(r=>({maxRow:r.maxRow,startAt:r._time?`${r._time.getHours().toString().padStart(2,"0")}:${r._time.getMinutes().toString().padStart(2,"0")}`:void 0}));await R("mahjongpub/init",t.cid,{type:o.value.type,round:C(o.value.round),lobby:o.value.lobby||void 0,playerIndex:C(o.value.playerIndex),ver:C(o.value.ver),maxRow:C(o.value.maxRow),schedules:v.length?v:void 0}),a("refresh"),await u()}async function w(){await R("mahjongpub/deinit",t.cid),i.value=[],a("refresh")}async function u(){var v;if(!(!((v=t.contestInfo)!=null&&v.extra)&&!i.value.length))try{i.value=await R("mahjongpub/cls-status",t.cid)}catch(r){console.error("Failed to refresh status:",r)}}async function b(v){await R("mahjongpub/start",t.cid,[v]),setTimeout(u,1e3)}async function B(v){await R("mahjongpub/stop",t.cid,[v]),setTimeout(u,500)}async function U(v,r){try{const A=await R("mahjongpub/check-players",t.cid,v);y[v]=A,r(A)}catch(A){F.error(`检查失败: ${A}`),r([])}}async function L(){I.value=true;const v=[];try{const r=i.value.filter(([,A])=>A.status==="pending"||A.status==="suspended").map(([A,te])=>[A,te]);for(const[A,te]of r)try{const ne=await R("mahjongpub/check-players",t.cid,A);y[A]=ne}catch(ne){v.push(`${A}组: ${ne}`);const ae=te.next??te.last??[];y[A]=ae.map(W=>({player:W.player,online:false}))}v.length&&F.warning(`部分检查失败:
6
- ${v.join(`
7
- `)}`)}finally{I.value=false}}async function J(v,r,A,te){try{if(te){const ne=i.value.find(([W])=>W===v);if(!ne)return;const ae=(ne[1].next??ne[1].last??[]).map(W=>W.player);ae[r]=A,await R("mahjongpub/swap-cls-players",t.cid,v,ae),F.success("名单已修改")}else await R("mahjongpub/override-player",t.cid,v,r,A),F.success("临时替换成功");await u()}catch(ne){F.error(`换人失败: ${ne}`)}}async function M(v,r,A){try{await R("mahjongpub/edit-point",t.cid,v,r,A),F.success("分数已修改"),await u()}catch(te){F.error(`修改失败: ${te}`)}}async function z(){const v=_.value.trim();if(v)try{await R("mahjongpub/add-subscriber",t.cid,v),_.value="",a("refresh")}catch(r){F.error(`添加失败: ${r}`)}}async function K(v){try{await R("mahjongpub/remove-subscriber",t.cid,v),a("refresh")}catch(r){F.error(`移除失败: ${r}`)}}async function G(v){try{await R("mahjongpub/apply-schedule",t.cid,v),a("refresh"),setTimeout(u,1e3)}catch(r){F.error(`应用失败: ${r}`)}}async function $e(v){try{await R("mahjongpub/toggle-schedule-pause",t.cid,v),a("refresh")}catch(r){F.error(`操作失败: ${r}`)}}async function ee(){$.value=true;try{await R("mahjongpub/start",t.cid,[])}finally{$.value=false,setTimeout(u,1e3)}}async function re(){await R("mahjongpub/stop",t.cid,[]),setTimeout(u,500)}function Oe(v){const r=new Date,A=`${r.getHours().toString().padStart(2,"0")}:${r.getMinutes().toString().padStart(2,"0")}:${r.getSeconds().toString().padStart(2,"0")}`;c.value.push({time:A,message:v}),c.value.length>200&&c.value.splice(0,c.value.length-200),Yt(()=>{m.value&&(m.value.scrollTop=m.value.scrollHeight)})}return Lt("mahjongpub/log",v=>{const[r,A]=v;r===t.cid&&Oe(A)}),je(()=>{var v;(v=t.contestInfo)!=null&&v.extra&&u(),g=setInterval(u,3e3)}),Jt(()=>{g&&clearInterval(g)}),(v,r)=>{var Ye,qe,We,Xe,Qe;const A=k("el-tag"),te=k("el-option"),ne=k("el-select"),ae=k("el-form-item"),W=k("el-input"),Ot=k("el-form"),Et=k("el-input-number"),Mt=k("el-time-picker"),oe=k("el-button"),xe=k("el-card"),Dt=k("el-switch");return d(),h("div",tl,[V(" Config Bar "),s(xe,{class:"config-card",shadow:"never"},{header:l(()=>{var D,O;return[p("div",nl,[p("span",null,P((D=e.contestInfo)==null?void 0:D.name)+" — 比赛配置",1),(O=e.contestInfo)!=null&&O.extra?(d(),E(A,{key:0,type:"success",size:"small"},{default:l(()=>[...r[9]||(r[9]=[x("已初始化",-1)])]),_:1})):(d(),E(A,{key:1,type:"info",size:"small"},{default:l(()=>[...r[10]||(r[10]=[x("未初始化",-1)])]),_:1}))])]}),default:l(()=>{var D;return[s(Ot,{inline:true,size:"small","label-width":"70px"},{default:l(()=>[s(ae,{label:"类型"},{default:l(()=>[s(ne,{modelValue:o.value.type,"onUpdate:modelValue":r[0]||(r[0]=O=>o.value.type=O),style:{width:"100px"}},{default:l(()=>[s(te,{label:"掌心 (ti)",value:"ti"}),s(te,{label:"雀魂 (ssb)",value:"ssb"})]),_:1},8,["modelValue"])]),_:1}),s(ae,{label:"轮次"},{default:l(()=>[s(W,{modelValue:o.value.round,"onUpdate:modelValue":r[1]||(r[1]=O=>o.value.round=O),style:{width:"80px"},placeholder:"默认"},null,8,["modelValue"])]),_:1}),s(ae,{label:"比赛场"},{default:l(()=>[s(W,{modelValue:o.value.lobby,"onUpdate:modelValue":r[2]||(r[2]=O=>o.value.lobby=O),style:{width:"120px"},placeholder:"lobby ID"},null,8,["modelValue"])]),_:1}),s(ae,{label:"选手序号"},{default:l(()=>[s(W,{modelValue:o.value.playerIndex,"onUpdate:modelValue":r[3]||(r[3]=O=>o.value.playerIndex=O),style:{width:"60px"},placeholder:"自动"},null,8,["modelValue"])]),_:1}),s(ae,{label:"版本"},{default:l(()=>[s(W,{modelValue:o.value.ver,"onUpdate:modelValue":r[4]||(r[4]=O=>o.value.ver=O),style:{width:"60px"},placeholder:"0"},null,8,["modelValue"])]),_:1}),s(ae,{label:"最大行"},{default:l(()=>[s(W,{modelValue:o.value.maxRow,"onUpdate:modelValue":r[5]||(r[5]=O=>o.value.maxRow=O),style:{width:"60px"},placeholder:"默认"},null,8,["modelValue"])]),_:1})]),_:1}),p("div",al,[r[13]||(r[13]=p("div",{class:"schedule-label"},"定时阶段",-1)),p("div",ol,[(d(true),h(q,null,Q(o.value.schedules,(O,ue)=>(d(),h("div",{key:ue,class:"schedule-row"},[s(Et,{modelValue:O.maxRow,"onUpdate:modelValue":X=>O.maxRow=X,min:1,size:"small","controls-position":"right",style:{width:"80px"},placeholder:"maxRow"},null,8,["modelValue","onUpdate:modelValue"]),s(Mt,{modelValue:O._time,"onUpdate:modelValue":X=>O._time=X,size:"small",format:"HH:mm",style:{width:"120px"},placeholder:"开始时间",clearable:""},null,8,["modelValue","onUpdate:modelValue"]),s(oe,{size:"small",type:"danger",text:"",onClick:X=>o.value.schedules.splice(ue,1)},{default:l(()=>[...r[11]||(r[11]=[x("×",-1)])]),_:1},8,["onClick"])]))),128))]),s(oe,{size:"small",onClick:N},{default:l(()=>[...r[12]||(r[12]=[x("+ 添加阶段",-1)])]),_:1})]),p("div",ll,[s(oe,{type:"primary",size:"small",onClick:f},{default:l(()=>[...r[14]||(r[14]=[x("初始化",-1)])]),_:1}),s(oe,{type:"danger",size:"small",disabled:!((D=e.contestInfo)!=null&&D.extra),onClick:w},{default:l(()=>[...r[15]||(r[15]=[x("反初始化",-1)])]),_:1},8,["disabled"])])]}),_:1}),V(" Subscribers "),(Ye=e.contestInfo)!=null&&Ye.extra?(d(),E(xe,{key:0,class:"subscriber-card",shadow:"never"},{header:l(()=>[...r[16]||(r[16]=[p("div",{class:"subscriber-header"},[p("span",null,"消息订阅")],-1)])]),default:l(()=>{var D;return[p("div",sl,[(d(true),h(q,null,Q(e.contestInfo.extra.subscribers,O=>(d(),E(A,{key:O,closable:"",size:"small",class:"subscriber-tag",onClose:ue=>K(O)},{default:l(()=>[x(P(O),1)]),_:2},1032,["onClose"]))),128)),(D=e.contestInfo.extra.subscribers)!=null&&D.length?V("v-if",true):(d(),h("span",rl,"暂无订阅"))]),p("div",il,[s(W,{modelValue:_.value,"onUpdate:modelValue":r[6]||(r[6]=O=>_.value=O),size:"small",placeholder:"platform:channelId",style:{width:"240px"},onKeyup:De(z,["enter"])},null,8,["modelValue"]),s(oe,{size:"small",type:"primary",onClick:z},{default:l(()=>[...r[17]||(r[17]=[x("添加",-1)])]),_:1})])]}),_:1})):V("v-if",true),V(" Schedule Control (runtime) "),(Xe=(We=(qe=e.contestInfo)==null?void 0:qe.extra)==null?void 0:We.schedules)!=null&&Xe.length?(d(),E(xe,{key:1,class:"schedule-control-card",shadow:"never"},{header:l(()=>[p("div",ul,[p("span",null,"定时控制 (当前 maxRow="+P(e.contestInfo.extra.maxRow??"默认")+")",1),s(Dt,{"model-value":!e.contestInfo.extra.schedulePaused,"active-text":"自动","inactive-text":"暂停",size:"small",onChange:r[7]||(r[7]=D=>$e(!D))},null,8,["model-value"])])]),default:l(()=>[p("div",dl,[(d(true),h(q,null,Q(e.contestInfo.extra.schedules,(D,O)=>(d(),h("div",{key:O,class:"schedule-control-row"},[p("span",cl,[x(" 阶段 "+P(O+1)+":"+P(D.maxRow)+" 行 ",1),D.startAt?(d(),h("span",pl,"@ "+P(D.startAt),1)):V("v-if",true)]),e.contestInfo.extra.maxRow>=D.maxRow?(d(),E(A,{key:0,type:"success",size:"small"},{default:l(()=>[...r[18]||(r[18]=[x("已生效",-1)])]),_:1})):(d(),E(oe,{key:1,size:"small",type:"primary",onClick:ue=>G(D.maxRow)},{default:l(()=>[...r[19]||(r[19]=[x(" 立即生效 ",-1)])]),_:1},8,["onClick"]))]))),128))])]),_:1})):V("v-if",true),V(" Status Cards "),(Qe=e.contestInfo)!=null&&Qe.extra?(d(),h("div",ml,[p("div",fl,[p("span",null,"对局状态 — 第 "+P(e.contestInfo.extra.round??e.contestInfo.totalRounds)+" 轮",1),p("div",vl,[s(oe,{type:"success",size:"small",loading:$.value,onClick:ee},{default:l(()=>[...r[20]||(r[20]=[x("全部开赛",-1)])]),_:1},8,["loading"]),s(oe,{type:"warning",size:"small",onClick:re},{default:l(()=>[...r[21]||(r[21]=[x("全部停止",-1)])]),_:1}),s(oe,{size:"small",loading:I.value,onClick:L},{default:l(()=>[...r[22]||(r[22]=[x("全部检查",-1)])]),_:1},8,["loading"]),s(oe,{size:"small",onClick:u},{default:l(()=>[...r[23]||(r[23]=[x("刷新",-1)])]),_:1})])]),p("div",yl,[(d(true),h(q,null,Q(i.value,([D,O])=>{var ue;return d(),E(el,{key:D,cls:D,status:O,"external-check-result":y[D],"has-admin":(ue=e.contestInfo)==null?void 0:ue.hasAdmin,onStart:X=>b(D),onStop:X=>B(D),onCheck:X=>U(D,X),onSwap:(X,Ee,Rt)=>J(D,X,Ee,Rt),onEditPoint:(X,Ee)=>M(D,X,Ee)},null,8,["cls","status","external-check-result","has-admin","onStart","onStop","onCheck","onSwap","onEditPoint"])}),128))])])):(d(),h("div",gl,[...r[24]||(r[24]=[p("p",null,"请先初始化比赛配置",-1)])])),V(" Log Panel "),s(xe,{class:"log-card",shadow:"never"},{header:l(()=>[p("div",hl,[r[26]||(r[26]=p("span",null,"日志",-1)),s(oe,{size:"small",text:"",onClick:r[8]||(r[8]=D=>c.value=[])},{default:l(()=>[...r[25]||(r[25]=[x("清空",-1)])]),_:1})])]),default:l(()=>[p("div",{ref_key:"logScrollRef",ref:m,class:"log-scroll"},[(d(true),h(q,null,Q(c.value,(D,O)=>(d(),h("div",{key:O,class:"log-line"},[p("span",_l,P(D.time),1),p("span",bl,P(D.message),1)]))),128)),c.value.length?V("v-if",true):(d(),h("div",wl,"暂无日志"))],512)]),_:1})])}}}),$l=ie(Cl,[["__scopeId","data-v-13c91849"]]),xl={class:"team-manager"},kl={class:"team-header"},Sl={class:"team-header-actions"},Il={key:0,class:"inline-edit"},zl={class:"player-index"},Tl={class:"inline-edit-actions"},Vl={key:1,class:"player-display"},jl={key:0,class:"no-players"},Pl=H({__name:"team-manager",props:{cid:{}},setup(e){const n=e,t=S([]),a=S(""),o=S(null),i=S([]),c=S(false),m=j(()=>{if(!a.value)return t.value;const g=a.value.toLowerCase();return t.value.filter(C=>C.name.toLowerCase().includes(g)||C.tid.toString().includes(g)||C.players.some(N=>N.toLowerCase().includes(g)))});async function $(){try{t.value=await R("mahjongpub/list-teams",n.cid)}catch(g){F.error(`加载队伍失败: ${g}`)}}function I(g){o.value=g.tid,i.value=[...g.players]}function y(){o.value=null,i.value=[]}async function _(g){c.value=true;try{const C=i.value.filter(f=>f.trim()),N=await R("mahjongpub/update-team-players",n.cid,g.tid,C);F.success(N||"保存成功"),o.value=null,i.value=[],await $()}catch(C){F.error(`保存失败: ${C}`)}finally{c.value=false}}return je($),(g,C)=>{const N=k("el-input"),f=k("el-button"),w=k("el-table-column"),u=k("el-tag"),b=k("el-table");return d(),h("div",xl,[p("div",kl,[C[3]||(C[3]=p("span",null,"队伍管理",-1)),p("div",Sl,[s(N,{modelValue:a.value,"onUpdate:modelValue":C[0]||(C[0]=B=>a.value=B),size:"small",placeholder:"搜索队名/选手",clearable:"",style:{width:"200px"}},null,8,["modelValue"]),s(f,{size:"small",onClick:$},{default:l(()=>[...C[2]||(C[2]=[x("刷新",-1)])]),_:1})])]),s(b,{data:m.value,size:"small",border:"",class:"team-table","row-key":"tid"},{default:l(()=>[s(w,{prop:"tid",label:"ID",width:"60",sortable:""}),s(w,{prop:"name",label:"队名",width:"120",sortable:""}),s(w,{label:"选手名单","min-width":"400"},{default:l(({row:B})=>[o.value===B.tid?(d(),h("div",Il,[(d(true),h(q,null,Q(i.value,(U,L)=>(d(),h("div",{key:L,class:"inline-edit-row"},[p("span",zl,P(L+1)+".",1),s(N,{modelValue:i.value[L],"onUpdate:modelValue":J=>i.value[L]=J,size:"small"},null,8,["modelValue","onUpdate:modelValue"]),s(f,{size:"small",type:"danger",text:"",onClick:J=>i.value.splice(L,1)},{default:l(()=>[...C[4]||(C[4]=[x("×",-1)])]),_:1},8,["onClick"])]))),128)),p("div",Tl,[s(f,{size:"small",onClick:C[1]||(C[1]=U=>i.value.push(""))},{default:l(()=>[...C[5]||(C[5]=[x("+ 添加",-1)])]),_:1}),s(f,{size:"small",type:"primary",loading:c.value,onClick:U=>_(B)},{default:l(()=>[...C[6]||(C[6]=[x("保存",-1)])]),_:1},8,["loading","onClick"]),s(f,{size:"small",onClick:y},{default:l(()=>[...C[7]||(C[7]=[x("取消",-1)])]),_:1})])])):(d(),h("div",Vl,[(d(true),h(q,null,Q(B.players,(U,L)=>(d(),E(u,{key:L,size:"small",class:"player-tag"},{default:l(()=>[x(P(U),1)]),_:2},1024))),128)),B.players.length?V("v-if",true):(d(),h("span",jl,"无选手"))]))]),_:1}),s(w,{label:"操作",width:"80",align:"center"},{default:l(({row:B})=>[o.value!==B.tid?(d(),E(f,{key:0,size:"small",text:"",onClick:U=>I(B)},{default:l(()=>[...C[8]||(C[8]=[x(" 编辑 ",-1)])]),_:1},8,["onClick"])):V("v-if",true)]),_:1})]),_:1},8,["data"])])}}}),Nl=ie(Pl,[["__scopeId","data-v-064b204b"]]),Ol={class:"lobby-panel"},El={class:"lobby-config"},Ml={class:"section-header"},Dl={key:1,class:"empty-hint"},Rl={class:"section-header"},Al={key:0,class:"game-list"},Ll={class:"game-header"},Ul=["title"],Fl={class:"game-actions"},Bl={class:"game-players"},Kl={key:1,class:"empty-hint"},Hl=H({__name:"lobby-panel",props:{cid:{},initLobby:{},initType:{}},setup(e){const n=e,t=S(n.initLobby??""),a=S(n.initType??"ssb"),o=S([]),i=S([]),c=S(false);ce(()=>n.initLobby,_=>{_&&(t.value=_)}),ce(()=>n.initType,_=>{_&&(a.value=_)});async function m(){if(t.value){c.value=true;try{const[_,g]=await Promise.all([R("mahjongpub/lobby-players",+t.value,a.value),R("mahjongpub/lobby-games",+t.value,a.value)]);o.value=_,i.value=g}catch(_){F.error(`查询失败: ${_}`)}finally{c.value=false}}}async function $(_){try{await R("mahjongpub/lobby-pause",+t.value,a.value,_),F.success("已暂停")}catch(g){F.error(`暂停失败: ${g}`)}}async function I(_){try{await R("mahjongpub/lobby-resume",+t.value,a.value,_),F.success("已恢复")}catch(g){F.error(`恢复失败: ${g}`)}}async function y(_){try{await R("mahjongpub/lobby-stop",+t.value,a.value,_),F.success("已中止"),await m()}catch(g){F.error(`中止失败: ${g}`)}}return(_,g)=>{const C=k("el-input"),N=k("el-form-item"),f=k("el-option"),w=k("el-select"),u=k("el-button"),b=k("el-form"),B=k("el-table-column"),U=k("el-table"),L=k("el-card"),J=k("el-popconfirm"),M=k("el-tag");return d(),h("div",Ol,[p("div",El,[s(b,{inline:true,size:"small"},{default:l(()=>[s(N,{label:"比赛场 ID"},{default:l(()=>[s(C,{modelValue:t.value,"onUpdate:modelValue":g[0]||(g[0]=z=>t.value=z),placeholder:"lobby ID",style:{width:"140px"}},null,8,["modelValue"])]),_:1}),s(N,{label:"平台"},{default:l(()=>[s(w,{modelValue:a.value,"onUpdate:modelValue":g[1]||(g[1]=z=>a.value=z),style:{width:"120px"}},{default:l(()=>[s(f,{label:"掌心 (ti)",value:"ti"}),s(f,{label:"雀魂 (ssb)",value:"ssb"})]),_:1},8,["modelValue"])]),_:1}),s(N,null,{default:l(()=>[s(u,{size:"small",type:"primary",onClick:m},{default:l(()=>[...g[2]||(g[2]=[x("刷新",-1)])]),_:1})]),_:1})]),_:1})]),V(" Ready Players "),s(L,{shadow:"never",class:"section-card"},{header:l(()=>[p("div",Ml,[p("span",null,"待机选手 ("+P(o.value.length)+")",1)])]),default:l(()=>[o.value.length?(d(),E(U,{key:0,data:o.value,size:"small",border:"","max-height":"300"},{default:l(()=>[s(B,{prop:"nickname",label:"昵称","min-width":"150"}),s(B,{prop:"accountId",label:"ID",width:"120"})]),_:1},8,["data"])):(d(),h("div",Dl,P(c.value?"加载中...":t.value?"暂无待机选手":"请输入比赛场 ID 后查询"),1))]),_:1}),V(" Running Games "),s(L,{shadow:"never",class:"section-card"},{header:l(()=>[p("div",Rl,[p("span",null,"进行中对局 ("+P(i.value.length)+")",1)])]),default:l(()=>[i.value.length?(d(),h("div",Al,[(d(true),h(q,null,Q(i.value,z=>(d(),E(L,{key:z.id,shadow:"hover",class:"game-card"},{default:l(()=>[p("div",Ll,[p("span",{class:"game-id",title:z.id},P(z.id.slice(0,12))+"...",9,Ul),p("div",Fl,[s(u,{size:"small",type:"warning",onClick:K=>$(z.id)},{default:l(()=>[...g[3]||(g[3]=[x("暂停",-1)])]),_:1},8,["onClick"]),s(u,{size:"small",type:"primary",onClick:K=>I(z.id)},{default:l(()=>[...g[4]||(g[4]=[x("恢复",-1)])]),_:1},8,["onClick"]),s(J,{title:"确定中止该对局?",onConfirm:K=>y(z.id)},{reference:l(()=>[s(u,{size:"small",type:"danger"},{default:l(()=>[...g[5]||(g[5]=[x("中止",-1)])]),_:1})]),_:1},8,["onConfirm"])])]),p("div",Bl,[(d(true),h(q,null,Q(z.players,(K,G)=>(d(),E(M,{key:G,size:"small",class:"player-tag"},{default:l(()=>[x(P(K.nickname||`#${K.accountId}`),1)]),_:2},1024))),128))])]),_:2},1024))),128))])):(d(),h("div",Kl,P(c.value?"加载中...":t.value?"暂无进行中对局":"请输入比赛场 ID 后查询"),1))]),_:1})])}}}),Gl=ie(Hl,[["__scopeId","data-v-a21c65dd"]]),Zl={key:0,class:"empty-state"},Jl={key:1,class:"empty-state"},Yl={key:2,class:"contest-panel"},ql={class:"first-tab-label"},Wl={key:1},Xl=H({__name:"contest-panel",props:{cid:{},managed:{},sidebarCollapsed:{type:Boolean}},emits:["toggle-sidebar"],setup(e,{emit:n}){const t=e,a=S("match"),o=S(false),i=S(null);async function c(){o.value=true;try{i.value=await R("mahjongpub/contest-info",t.cid)}catch(m){console.error("Failed to load contest info:",m)}finally{o.value=false}}return ce(()=>t.cid,()=>{a.value="match",c()},{immediate:true}),(m,$)=>{const I=k("el-button"),y=k("el-tab-pane"),_=k("el-tooltip"),g=k("el-tabs");return e.cid?o.value&&!i.value?(d(),h("div",Jl,[...$[3]||($[3]=[p("p",null,"加载中...",-1)])])):(d(),h("div",Yl,[s(g,{modelValue:a.value,"onUpdate:modelValue":$[1]||($[1]=C=>a.value=C)},{default:l(()=>{var C;return[s(y,{name:"match"},{label:l(()=>[p("div",ql,[s(I,{class:"sidebar-toggle-btn",size:"small",text:"",title:e.sidebarCollapsed?"展开侧边栏":"收起侧边栏",onClick:$[0]||($[0]=Se(N=>m.$emit("toggle-sidebar"),["stop"]))},{default:l(()=>[x(P(e.sidebarCollapsed?"▶":"◀"),1)]),_:1},8,["title"]),$[4]||($[4]=p("span",null,"比赛进程",-1))])]),default:l(()=>[s($l,{cid:e.cid,"contest-info":i.value,onRefresh:c},null,8,["cid","contest-info"])]),_:1}),s(y,{label:"队伍管理",name:"team",disabled:!((C=i.value)!=null&&C.hasAdmin)},{label:l(()=>{var N;return[(N=i.value)!=null&&N.hasAdmin?(d(),h("span",Wl,"队伍管理")):(d(),E(_,{key:0,content:"请先配置管理密码(右键侧边栏比赛项)",placement:"top"},{default:l(()=>[...$[5]||($[5]=[p("span",null,"队伍管理",-1)])]),_:1}))]}),default:l(()=>{var N;return[(N=i.value)!=null&&N.hasAdmin?(d(),E(Nl,{key:0,cid:e.cid},null,8,["cid"])):V("v-if",true)]}),_:1},8,["disabled"]),s(y,{label:"比赛场",name:"lobby"},{default:l(()=>{var N,f,w,u;return[s(Gl,{cid:e.cid,"init-lobby":(f=(N=i.value)==null?void 0:N.extra)==null?void 0:f.lobby,"init-type":(u=(w=i.value)==null?void 0:w.extra)==null?void 0:u.type},null,8,["cid","init-lobby","init-type"])]}),_:1})]}),_:1},8,["modelValue"])])):(d(),h("div",Zl,[...$[2]||($[2]=[p("p",null,"请选择比赛",-1)])]))}}}),Ql=ie(Xl,[["__scopeId","data-v-c9a9bbef"]]),es={class:"main-layout"},ts={class:"content-wrapper"},ns={key:1,class:"empty-state"},as=H({__name:"layout",setup(e){const n=S([]),t=S(null),a=S(false),o=j(()=>n.value.find(I=>I.cid===t.value)??null);async function i(){n.value=await R("mahjongpub/list-managed")}async function c(I){await i(),t.value=I.cid}async function m(I){var y;await i(),t.value===I&&(t.value=((y=n.value[0])==null?void 0:y.cid)??null)}async function $(I,y){await i()}return je(i),(I,y)=>{const _=k("k-layout");return d(),E(_,null,{default:l(()=>[p("div",es,[p("div",{class:Y(["sidebar-wrapper",{collapsed:a.value}])},[Le(s(Mo,{contests:n.value,"active-cid":t.value,onSelect:y[0]||(y[0]=g=>t.value=g),onAdd:c,onRemove:m,onUpdate:$},null,8,["contests","active-cid"]),[[Ue,!a.value]])],2),p("div",ts,[t.value?(d(),E(Ql,{key:t.value,cid:t.value,managed:o.value,"sidebar-collapsed":a.value,onToggleSidebar:y[1]||(y[1]=g=>a.value=!a.value)},null,8,["cid","managed","sidebar-collapsed"])):(d(),h("div",ns,[...y[2]||(y[2]=[p("p",null,"请从左侧选择或添加比赛",-1)])]))])])]),_:1})}}}),os=ie(as,[["__scopeId","data-v-592f974d"]]),is=e=>{e.page({name:"比赛管理",path:"/mahjongpub",icon:"mahjongpub:icon",component:os,authority:3})};export{is as default};
5
+ **/const an=Object.prototype.hasOwnProperty,tt=(e,n)=>an.call(e,n),Ie=e=>typeof e=="function",ze=e=>typeof e=="string",yt=e=>e!==null&&typeof e=="object";var on=typeof global=="object"&&global&&global.Object===Object&&global,ln=typeof self=="object"&&self&&self.Object===Object&&self,Be=on||ln||Function("return this")(),ve=Be.Symbol,gt=Object.prototype,sn=gt.hasOwnProperty,rn=gt.toString,he=ve?ve.toStringTag:void 0;function un(e){var n=sn.call(e,he),t=e[he];try{e[he]=void 0;var a=true}catch{}var o=rn.call(e);return a&&(n?e[he]=t:delete e[he]),o}var dn=Object.prototype,cn=dn.toString;function pn(e){return cn.call(e)}var mn="[object Null]",fn="[object Undefined]",nt=ve?ve.toStringTag:void 0;function ht(e){return e==null?e===void 0?fn:mn:nt&&nt in Object(e)?un(e):pn(e)}function vn(e){return e!=null&&typeof e=="object"}var yn="[object Symbol]";function Ke(e){return typeof e=="symbol"||vn(e)&&ht(e)==yn}function gn(e,n){for(var t=-1,a=e==null?0:e.length,o=Array(a);++t<a;)o[t]=n(e[t],t,e);return o}var He=Array.isArray,at=ve?ve.prototype:void 0,ot=at?at.toString:void 0;function _t(e){if(typeof e=="string")return e;if(He(e))return gn(e,_t)+"";if(Ke(e))return ot?ot.call(e):"";var n=e+"";return n=="0"&&1/e==-1/0?"-0":n}function bt(e){var n=typeof e;return e!=null&&(n=="object"||n=="function")}var hn="[object AsyncFunction]",_n="[object Function]",bn="[object GeneratorFunction]",wn="[object Proxy]";function Cn(e){if(!bt(e))return false;var n=ht(e);return n==_n||n==bn||n==hn||n==wn}var Me=Be["__core-js_shared__"],lt=function(){var e=/[^.]+$/.exec(Me&&Me.keys&&Me.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function $n(e){return!!lt&&lt in e}var xn=Function.prototype,kn=xn.toString;function Sn(e){if(e!=null){try{return kn.call(e)}catch{}try{return e+""}catch{}}return""}var In=/[\\^$.*+?()[\]{}|]/g,zn=/^\[object .+?Constructor\]$/,Tn=Function.prototype,Vn=Object.prototype,jn=Tn.toString,Pn=Vn.hasOwnProperty,Nn=RegExp("^"+jn.call(Pn).replace(In,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function On(e){if(!bt(e)||$n(e))return false;var n=Cn(e)?Nn:zn;return n.test(Sn(e))}function En(e,n){return e==null?void 0:e[n]}function wt(e,n){var t=En(e,n);return On(t)?t:void 0}function Mn(e,n){return e===n||e!==e&&n!==n}var Dn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Rn=/^\w*$/;function Ln(e,n){if(He(e))return false;var t=typeof e;return t=="number"||t=="symbol"||t=="boolean"||e==null||Ke(e)?true:Rn.test(e)||!Dn.test(e)||n!=null&&e in Object(n)}var be=wt(Object,"create");function An(){this.__data__=be?be(null):{},this.size=0}function Un(e){var n=this.has(e)&&delete this.__data__[e];return this.size-=n?1:0,n}var Fn="__lodash_hash_undefined__",Bn=Object.prototype,Kn=Bn.hasOwnProperty;function Hn(e){var n=this.__data__;if(be){var t=n[e];return t===Fn?void 0:t}return Kn.call(n,e)?n[e]:void 0}var Gn=Object.prototype,Zn=Gn.hasOwnProperty;function Jn(e){var n=this.__data__;return be?n[e]!==void 0:Zn.call(n,e)}var Yn="__lodash_hash_undefined__";function qn(e,n){var t=this.__data__;return this.size+=this.has(e)?0:1,t[e]=be&&n===void 0?Yn:n,this}function pe(e){var n=-1,t=e==null?0:e.length;for(this.clear();++n<t;){var a=e[n];this.set(a[0],a[1])}}pe.prototype.clear=An;pe.prototype.delete=Un;pe.prototype.get=Hn;pe.prototype.has=Jn;pe.prototype.set=qn;function Wn(){this.__data__=[],this.size=0}function Pe(e,n){for(var t=e.length;t--;)if(Mn(e[t][0],n))return t;return-1}var Xn=Array.prototype,Qn=Xn.splice;function ea(e){var n=this.__data__,t=Pe(n,e);if(t<0)return false;var a=n.length-1;return t==a?n.pop():Qn.call(n,t,1),--this.size,true}function ta(e){var n=this.__data__,t=Pe(n,e);return t<0?void 0:n[t][1]}function na(e){return Pe(this.__data__,e)>-1}function aa(e,n){var t=this.__data__,a=Pe(t,e);return a<0?(++this.size,t.push([e,n])):t[a][1]=n,this}function ge(e){var n=-1,t=e==null?0:e.length;for(this.clear();++n<t;){var a=e[n];this.set(a[0],a[1])}}ge.prototype.clear=Wn;ge.prototype.delete=ea;ge.prototype.get=ta;ge.prototype.has=na;ge.prototype.set=aa;var oa=wt(Be,"Map");function la(){this.size=0,this.__data__={hash:new pe,map:new(oa||ge),string:new pe}}function sa(e){var n=typeof e;return n=="string"||n=="number"||n=="symbol"||n=="boolean"?e!=="__proto__":e===null}function Ne(e,n){var t=e.__data__;return sa(n)?t[typeof n=="string"?"string":"hash"]:t.map}function ra(e){var n=Ne(this,e).delete(e);return this.size-=n?1:0,n}function ia(e){return Ne(this,e).get(e)}function ua(e){return Ne(this,e).has(e)}function da(e,n){var t=Ne(this,e),a=t.size;return t.set(e,n),this.size+=t.size==a?0:1,this}function me(e){var n=-1,t=e==null?0:e.length;for(this.clear();++n<t;){var a=e[n];this.set(a[0],a[1])}}me.prototype.clear=la;me.prototype.delete=ra;me.prototype.get=ia;me.prototype.has=ua;me.prototype.set=da;var ca="Expected a function";function Ge(e,n){if(typeof e!="function"||n!=null&&typeof n!="function")throw new TypeError(ca);var t=function(){var a=arguments,o=n?n.apply(this,a):a[0],u=t.cache;if(u.has(o))return u.get(o);var d=e.apply(this,a);return t.cache=u.set(o,d)||u,d};return t.cache=new(Ge.Cache||me),t}Ge.Cache=me;var pa=500;function ma(e){var n=Ge(e,function(a){return t.size===pa&&t.clear(),a}),t=n.cache;return n}var fa=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,va=/\\(\\)?/g,ya=ma(function(e){var n=[];return e.charCodeAt(0)===46&&n.push(""),e.replace(fa,function(t,a,o,u){n.push(o?u.replace(va,"$1"):a||t)}),n});function ga(e){return e==null?"":_t(e)}function ha(e,n){return He(e)?e:Ln(e,n)?[e]:ya(ga(e))}function _a(e){if(typeof e=="string"||Ke(e))return e;var n=e+"";return n=="0"&&1/e==-1/0?"-0":n}function ba(e,n){n=ha(n,e);for(var t=0,a=n.length;e!=null&&t<a;)e=e[_a(n[t++])];return t&&t==a?e:void 0}function wa(e,n,t){var a=e==null?void 0:ba(e,n);return a===void 0?t:a}function Ca(e){for(var n=-1,t=e==null?0:e.length,a={};++n<t;){var o=e[n];a[o[0]]=o[1]}return a}const $a=e=>e===void 0,we=e=>typeof e=="number",xa=e=>typeof Element>"u"?false:e instanceof Element,ka=e=>ze(e)?!Number.isNaN(Number(e)):false,st=e=>Object.keys(e);function Re(e,n="px"){if(!e)return"";if(we(e)||ka(e))return`${e}${n}`;if(ze(e))return e}/*! Element Plus Icons Vue v2.3.2 */var Sa=H({name:"CircleCloseFilled",__name:"circle-close-filled",setup(e){return(n,t)=>(i(),h("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[c("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"})]))}}),Ia=Sa,za=H({name:"Close",__name:"close",setup(e){return(n,t)=>(i(),h("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[c("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"})]))}}),Ta=za,Va=H({name:"InfoFilled",__name:"info-filled",setup(e){return(n,t)=>(i(),h("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[c("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"})]))}}),ja=Va,Pa=H({name:"SuccessFilled",__name:"success-filled",setup(e){return(n,t)=>(i(),h("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[c("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"})]))}}),Na=Pa,Oa=H({name:"WarningFilled",__name:"warning-filled",setup(e){return(n,t)=>(i(),h("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[c("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"})]))}}),Ea=Oa;const Ct="__epPropKey",le=e=>e,Ma=e=>yt(e)&&!!e[Ct],$t=(e,n)=>{if(!yt(e)||Ma(e))return e;const{values:t,required:a,default:o,type:u,validator:d}=e,w={type:u,required:!!a,validator:t||d?S=>{let f=false,b=[];if(t&&(b=Array.from(t),tt(e,"default")&&b.push(o),f||(f=b.includes(S))),d&&(f||(f=d(S))),!f&&b.length>0){const _=[...new Set(b)].map(C=>JSON.stringify(C)).join(", ");Ut(`Invalid prop: validation failed${n?` for prop "${n}"`:""}. Expected one of [${_}], got value ${JSON.stringify(S)}.`)}return f}:void 0,[Ct]:true};return tt(e,"default")&&(w.default=o),w},Ce=e=>Ca(Object.entries(e).map(([n,t])=>[n,$t(t,n)])),Da=le([String,Object,Function]),Ra={Close:Ta},rt={success:Na,warning:Ea,error:Ia,info:ja},xt=(e,n)=>(e.install=t=>{for(const a of[e,...Object.values({})])t.component(a.name,a)},e),La=(e,n)=>(e.install=t=>{e._context=t._context,t.config.globalProperties[n]=e},e),Aa={esc:"Escape"},Ua=["","default","small","large"],Fa=e=>e,it=({from:e,replacement:n,scope:t,version:a,ref:o,type:u="API"},d)=>{ce(()=>T(d),v=>{},{immediate:true})};var Ba={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 Ka=e=>(n,t)=>Ha(n,t,T(e)),Ha=(e,n,t)=>wa(t,e,e).replace(/\{(\w+)\}/g,(a,o)=>{var u;return`${(u=n==null?void 0:n[o])!=null?u:`{${o}}`}`}),Ga=e=>{const n=P(()=>T(e).name),t=Ft(e)?e:I(e);return{lang:n,locale:t,t:Ka(e)}},kt=Symbol("localeContextKey"),Za=e=>{const n=e||fe(kt,I());return Ga(P(()=>n.value||Ba))},ke="el",Ja="is-",de=(e,n,t,a,o)=>{let u=`${e}-${n}`;return t&&(u+=`-${t}`),a&&(u+=`__${a}`),o&&(u+=`--${o}`),u},St=Symbol("namespaceContextKey"),Ya=e=>{const n=e||(_e()?fe(St,I(ke)):I(ke));return P(()=>T(n)||ke)},Ze=(e,n)=>{const t=Ya(n);return{namespace:t,b:(m="")=>de(t.value,e,m,"",""),e:m=>m?de(t.value,e,"",m,""):"",m:m=>m?de(t.value,e,"","",m):"",be:(m,p)=>m&&p?de(t.value,e,m,p,""):"",em:(m,p)=>m&&p?de(t.value,e,"",m,p):"",bm:(m,p)=>m&&p?de(t.value,e,m,"",p):"",bem:(m,p,y)=>m&&p&&y?de(t.value,e,m,p,y):"",is:(m,...p)=>{const y=p.length>=1?p[0]:true;return m&&y?`${Ja}${m}`:""},cssVar:m=>{const p={};for(const y in m)m[y]&&(p[`--${t.value}-${y}`]=m[y]);return p},cssVarName:m=>`--${t.value}-${m}`,cssVarBlock:m=>{const p={};for(const y in m)m[y]&&(p[`--${t.value}-${e}-${y}`]=m[y]);return p},cssVarBlockName:m=>`--${t.value}-${e}-${m}`}},ut={current:0},dt=I(0),It=2e3,ct=Symbol("elZIndexContextKey"),zt=Symbol("zIndexContextKey"),qa=e=>{const n=_e()?fe(ct,ut):ut,t=e||(_e()?fe(zt,void 0):void 0),a=P(()=>{const d=T(t);return we(d)?d:It}),o=P(()=>a.value+dt.value),u=()=>(n.current++,dt.value=n.current,o.value);return!Fe&&fe(ct),{initialZIndex:a,currentZIndex:o,nextZIndex:u}},Wa=$t({type:String,values:Ua,required:false}),Xa=Symbol("size"),Qa=Symbol("emptyValuesContextKey"),eo=Ce({emptyValues:Array,valueOnClear:{type:[String,Number,Boolean,Function],default:void 0,validator:e=>Ie(e)?!e():!e}}),Tt=Symbol(),Te=I();function Vt(e,n=void 0){return _e()?fe(Tt,Te):Te}function to(e,n){const t=Vt(),a=Ze(e,P(()=>{var v;return((v=t.value)==null?void 0:v.namespace)||ke})),o=Za(P(()=>{var v;return(v=t.value)==null?void 0:v.locale})),u=qa(P(()=>{var v;return((v=t.value)==null?void 0:v.zIndex)||It})),d=P(()=>{var v;return T(n)||((v=t.value)==null?void 0:v.size)||""});return jt(P(()=>T(t)||{})),{ns:a,locale:o,zIndex:u,size:d}}const jt=(e,n,t=false)=>{var a;const o=!!_e(),u=o?Vt():void 0,d=(a=void 0)!=null?a:o?Bt:void 0;if(!d)return;const v=P(()=>{const w=T(e);return u!=null&&u.value?no(u.value,w):w});return d(Tt,v),d(kt,P(()=>v.value.locale)),d(St,P(()=>v.value.namespace)),d(zt,P(()=>v.value.zIndex)),d(Xa,{size:P(()=>v.value.size||"")}),d(Qa,P(()=>({emptyValues:v.value.emptyValues,valueOnClear:v.value.valueOnClear}))),(t||!Te.value)&&(Te.value=v.value),v},no=(e,n)=>{const t=[...new Set([...st(e),...st(n)])],a={};for(const o of t)a[o]=n[o]!==void 0?n[o]:e[o];return a},ao=Ce({a11y:{type:Boolean,default:true},locale:{type:le(Object)},size:Wa,button:{type:le(Object)},experimentalFeatures:{type:le(Object)},keyboardNavigation:{type:Boolean,default:true},message:{type:le(Object)},zIndex:Number,namespace:{type:String,default:"el"},...eo}),Le={};H({name:"ElConfigProvider",props:ao,setup(e,{slots:n}){ce(()=>e.message,a=>{Object.assign(Le,a??{})},{immediate:true,deep:true});const t=jt(e);return()=>Ve(n,"default",{config:t==null?void 0:t.value})}});var Je=(e,n)=>{const t=e.__vccOpts||e;for(const[a,o]of n)t[a]=o;return t};const oo=Ce({size:{type:le([Number,String])},color:{type:String}}),lo=H({name:"ElIcon",inheritAttrs:false}),so=H({...lo,props:oo,setup(e){const n=e,t=Ze("icon"),a=P(()=>{const{size:o,color:u}=n;return!o&&!u?{}:{fontSize:$a(o)?void 0:Re(o),"--color":u}});return(o,u)=>(i(),h("i",Kt({class:T(t).b(),style:T(a)},o.$attrs),[Ve(o.$slots,"default")],16))}});var ro=Je(so,[["__file","icon.vue"]]);const pt=xt(ro),io=Ce({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:le([String,Object,Array])},badgeStyle:{type:le([String,Object,Array])},offset:{type:le(Array),default:[0,0]},dotClass:{type:String},badgeClass:{type:String}}),uo=["textContent"],co=H({name:"ElBadge"}),po=H({...co,props:io,setup(e,{expose:n}){const t=e,a=Ze("badge"),o=P(()=>t.isDot?"":we(t.value)&&we(t.max)?t.max<t.value?`${t.max}+`:t.value===0&&!t.showZero?"":`${t.value}`:`${t.value}`),u=P(()=>{var d,v,w,S,f,b;return[{backgroundColor:t.color,marginRight:Re(-((v=(d=t.offset)==null?void 0:d[0])!=null?v:0)),marginTop:Re((S=(w=t.offset)==null?void 0:w[1])!=null?S:0)},(f=t.dotStyle)!=null?f:{},(b=t.badgeStyle)!=null?b:{}]});return it({from:"dot-style",replacement:"badge-style",version:"2.8.0",scope:"el-badge",ref:"https://element-plus.org/en-US/component/badge.html"},P(()=>!!t.dotStyle)),it({from:"dot-class",replacement:"badge-class",version:"2.8.0",scope:"el-badge",ref:"https://element-plus.org/en-US/component/badge.html"},P(()=>!!t.dotClass)),n({content:o}),(d,v)=>(i(),h("div",{class:Y(T(a).b())},[Ve(d.$slots,"default"),s(mt,{name:`${T(a).namespace.value}-zoom-in-center`,persisted:""},{default:l(()=>[Ae(c("sup",{class:Y([T(a).e("content"),T(a).em("content",d.type),T(a).is("fixed",!!d.$slots.default),T(a).is("dot",d.isDot),d.dotClass,d.badgeClass]),style:ft(T(u)),textContent:N(T(o))},null,14,uo),[[Ue,!d.hidden&&(T(o)||d.isDot)]])]),_:1},8,["name"])],2))}});var mo=Je(po,[["__file","badge.vue"]]);const fo=xt(mo),Pt=["success","info","warning","error"],Z=Fa({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:Fe?document.body:void 0}),vo=Ce({customClass:{type:String,default:Z.customClass},center:{type:Boolean,default:Z.center},dangerouslyUseHTMLString:{type:Boolean,default:Z.dangerouslyUseHTMLString},duration:{type:Number,default:Z.duration},icon:{type:Da,default:Z.icon},id:{type:String,default:Z.id},message:{type:le([String,Object,Function]),default:Z.message},onClose:{type:le(Function),default:Z.onClose},showClose:{type:Boolean,default:Z.showClose},type:{type:String,values:Pt,default:Z.type},plain:{type:Boolean,default:Z.plain},offset:{type:Number,default:Z.offset},zIndex:{type:Number,default:Z.zIndex},grouping:{type:Boolean,default:Z.grouping},repeatNum:{type:Number,default:Z.repeatNum}}),yo={destroy:()=>true},se=Ht([]),go=e=>{const n=se.findIndex(o=>o.id===e),t=se[n];let a;return n>0&&(a=se[n-1]),{current:t,prev:a}},ho=e=>{const{prev:n}=go(e);return n?n.vm.exposed.bottom.value:0},_o=(e,n)=>se.findIndex(a=>a.id===e)>0?16:n,bo=["id"],wo=["innerHTML"],Co=H({name:"ElMessage"}),$o=H({...Co,props:vo,emits:yo,setup(e,{expose:n}){const t=e,{Close:a}=Ra,{ns:o,zIndex:u}=to("message"),{currentZIndex:d,nextZIndex:v}=u,w=I(),S=I(false),f=I(0);let b;const _=P(()=>t.type?t.type==="error"?"danger":t.type:"info"),C=P(()=>{const M=t.type;return{[o.bm("icon",M)]:M&&rt[M]}}),O=P(()=>t.icon||rt[t.type]||""),m=P(()=>ho(t.id)),p=P(()=>_o(t.id,t.offset)+m.value),y=P(()=>f.value+p.value),x=P(()=>({top:`${p.value}px`,zIndex:d.value}));function U(){t.duration!==0&&({stop:b}=Xt(()=>{B()},t.duration))}function D(){b==null||b()}function B(){S.value=false}function J({code:M}){M===Aa.esc&&B()}return je(()=>{U(),v(),S.value=true}),ce(()=>t.repeatNum,()=>{D(),U()}),qt(document,"keydown",J),Wt(w,()=>{f.value=w.value.getBoundingClientRect().height}),n({visible:S,bottom:y,close:B}),(M,z)=>(i(),j(mt,{name:T(o).b("fade"),onBeforeLeave:M.onClose,onAfterLeave:z[0]||(z[0]=K=>M.$emit("destroy")),persisted:""},{default:l(()=>[Ae(c("div",{id:M.id,ref_key:"messageRef",ref:w,class:Y([T(o).b(),{[T(o).m(M.type)]:M.type},T(o).is("center",M.center),T(o).is("closable",M.showClose),T(o).is("plain",M.plain),M.customClass]),style:ft(T(x)),role:"alert",onMouseenter:D,onMouseleave:U},[M.repeatNum>1?(i(),j(T(fo),{key:0,value:M.repeatNum,type:T(_),class:Y(T(o).e("badge"))},null,8,["value","type","class"])):V("v-if",true),T(O)?(i(),j(T(pt),{key:1,class:Y([T(o).e("icon"),T(C)])},{default:l(()=>[(i(),j(Gt(T(O))))]),_:1},8,["class"])):V("v-if",true),Ve(M.$slots,"default",{},()=>[M.dangerouslyUseHTMLString?(i(),h(q,{key:1},[V(" Caution here, message could've been compromised, never use user's input as message "),c("p",{class:Y(T(o).e("content")),innerHTML:M.message},null,10,wo)],2112)):(i(),h("p",{key:0,class:Y(T(o).e("content"))},N(M.message),3))]),M.showClose?(i(),j(T(pt),{key:2,class:Y(T(o).e("closeBtn")),onClick:Se(B,["stop"])},{default:l(()=>[s(T(a))]),_:1},8,["class","onClick"])):V("v-if",true)],46,bo),[[Ue,S.value]])]),_:3},8,["name","onBeforeLeave"]))}});var xo=Je($o,[["__file","message.vue"]]);let ko=1;const Nt=e=>{const n=!e||ze(e)||vt(e)||Ie(e)?{message:e}:e,t={...Z,...n};if(!t.appendTo)t.appendTo=document.body;else if(ze(t.appendTo)){let a=document.querySelector(t.appendTo);xa(a)||(a=document.body),t.appendTo=a}return t},So=e=>{const n=se.indexOf(e);if(n===-1)return;se.splice(n,1);const{handler:t}=e;t.close()},Io=({appendTo:e,...n},t)=>{const a=`message_${ko++}`,o=n.onClose,u=document.createElement("div"),d={...n,id:a,onClose:()=>{o==null||o(),So(f)},onDestroy:()=>{et(null,u)}},v=s(xo,d,Ie(d.message)||vt(d.message)?{default:Ie(d.message)?d.message:()=>d.message}:null);v.appContext=t||ye._context,et(v,u),e.appendChild(u.firstElementChild);const w=v.component,f={id:a,vnode:v,vm:w,handler:{close:()=>{w.exposed.visible.value=false}},props:v.component.props};return f},ye=(e={},n)=>{if(!Fe)return{close:()=>{}};if(we(Le.max)&&se.length>=Le.max)return{close:()=>{}};const t=Nt(e);if(t.grouping&&se.length){const o=se.find(({vnode:u})=>{var d;return((d=u.props)==null?void 0:d.message)===t.message});if(o)return o.props.repeatNum+=1,o.props.type=t.type,o.handler}const a=Io(t,n);return se.push(a),a.handler};Pt.forEach(e=>{ye[e]=(n={},t)=>{const a=Nt(n);return ye({...a,type:e},t)}});function zo(e){for(const n of se)(!e||e===n.props.type)&&n.handler.close()}ye.closeAll=zo;ye._context=null;const F=La(ye,"$message"),To={class:"sidebar"},Vo={class:"sidebar-header"},jo={class:"contest-list"},Po=["onClick","onContextmenu"],No={class:"contest-name"},Oo={class:"contest-cid"},Eo=H({__name:"sidebar",props:{contests:{},activeCid:{}},emits:["select","add","remove","update"],setup(e,{emit:n}){const t=n,a=I(false),o=I(null),u=I(""),d=I(null);async function v(){if(o.value){importLoading.value=true;try{d.value=await L("mahjongpub/search-contests",o.value,u.value||void 0)}catch(m){F.error(`查询失败: ${m}`)}finally{importLoading.value=false}}}async function w(){if(d.value){importLoading.value=true;try{const m={cid:d.value.cid,name:d.value.name,adminPassword:u.value||void 0};await L("mahjongpub/add-managed",m),t("add",m),a.value=false,o.value=null,d.value=null,u.value=""}catch(m){F.error(`添加失败: ${m}`)}finally{importLoading.value=false}}}const S=I(false),f=I(null),b=I("");function _(m,p){f.value=p,b.value=p.adminPassword??"",S.value=true}async function C(){if(f.value)try{await L("mahjongpub/update-managed",f.value.cid,{adminPassword:b.value||void 0}),t("update",f.value.cid,{adminPassword:b.value||void 0}),S.value=false}catch(m){F.error(`保存失败: ${m}`)}}async function O(){if(f.value)try{await L("mahjongpub/remove-managed",f.value.cid),t("remove",f.value.cid),S.value=false}catch(m){F.error(`移除失败: ${m}`)}}return(m,p)=>{const y=k("el-button"),x=k("el-icon"),U=k("el-input"),D=k("el-form-item"),B=k("el-tag"),J=k("el-form"),M=k("el-dialog");return i(),h("div",To,[c("div",Vo,[p[9]||(p[9]=c("span",null,"比赛列表",-1)),s(y,{size:"small",type:"primary",onClick:p[0]||(p[0]=z=>a.value=true)},{default:l(()=>[...p[8]||(p[8]=[$("+ 添加",-1)])]),_:1})]),c("div",jo,[(i(true),h(q,null,Q(e.contests,z=>(i(),h("div",{key:z.cid,class:Y(["contest-item",{active:z.cid===e.activeCid}]),onClick:K=>m.$emit("select",z.cid),onContextmenu:Se(K=>_(K,z),["prevent"])},[c("div",No,N(z.name),1),c("div",Oo,"#"+N(z.cid),1),z.adminPassword?(i(),j(x,{key:0,class:"admin-badge",title:"已配置管理密码"},{default:l(()=>[...p[10]||(p[10]=[c("svg",{viewBox:"0 0 24 24",width:"14",height:"14",fill:"currentColor"},[c("path",{d:"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z"})],-1)])]),_:1})):V("v-if",true)],42,Po))),128))]),V(" Import Dialog "),s(M,{modelValue:a.value,"onUpdate:modelValue":p[4]||(p[4]=z=>a.value=z),title:"添加比赛",width:"420"},{footer:l(()=>[s(y,{onClick:p[3]||(p[3]=z=>a.value=false)},{default:l(()=>[...p[13]||(p[13]=[$("取消",-1)])]),_:1}),s(y,{loading:m.importLoading,onClick:v},{default:l(()=>[...p[14]||(p[14]=[$("查询",-1)])]),_:1},8,["loading"]),s(y,{type:"primary",disabled:!d.value,onClick:w},{default:l(()=>[...p[15]||(p[15]=[$("添加",-1)])]),_:1},8,["disabled"])]),default:l(()=>[s(J,{"label-width":"80px",onSubmit:Se(w,["prevent"])},{default:l(()=>[s(D,{label:"比赛 ID"},{default:l(()=>[s(U,{modelValue:o.value,"onUpdate:modelValue":p[1]||(p[1]=z=>o.value=z),modelModifiers:{number:true},placeholder:"输入大凤林比赛 ID"},null,8,["modelValue"])]),_:1}),d.value?(i(),j(D,{key:0,label:"比赛名称"},{default:l(()=>[c("span",null,N(d.value.name),1)]),_:1})):V("v-if",true),d.value?(i(),j(D,{key:1,label:"当前轮次"},{default:l(()=>[c("span",null,N(d.value.round),1)]),_:1})):V("v-if",true),s(D,{label:"管理密码"},{default:l(()=>[s(U,{modelValue:u.value,"onUpdate:modelValue":p[2]||(p[2]=z=>u.value=z),placeholder:"可选,用于队伍管理","show-password":""},null,8,["modelValue"])]),_:1}),d.value&&u.value?(i(),j(D,{key:2,label:"密码验证"},{default:l(()=>[d.value.adminVerified?(i(),j(B,{key:0,type:"success",size:"small"},{default:l(()=>[...p[11]||(p[11]=[$("密码正确",-1)])]),_:1})):(i(),j(B,{key:1,type:"danger",size:"small"},{default:l(()=>[...p[12]||(p[12]=[$("密码错误",-1)])]),_:1}))]),_:1})):V("v-if",true)]),_:1})]),_:1},8,["modelValue"]),V(" Context Menu (password edit) "),s(M,{modelValue:S.value,"onUpdate:modelValue":p[7]||(p[7]=z=>S.value=z),title:"编辑比赛",width:"400"},{footer:l(()=>[s(y,{type:"danger",onClick:O},{default:l(()=>[...p[16]||(p[16]=[$("移除比赛",-1)])]),_:1}),s(y,{onClick:p[6]||(p[6]=z=>S.value=false)},{default:l(()=>[...p[17]||(p[17]=[$("取消",-1)])]),_:1}),s(y,{type:"primary",onClick:C},{default:l(()=>[...p[18]||(p[18]=[$("保存",-1)])]),_:1})]),default:l(()=>[f.value?(i(),j(J,{key:0,"label-width":"80px"},{default:l(()=>[s(D,{label:"比赛名称"},{default:l(()=>[c("span",null,N(f.value.name)+" (#"+N(f.value.cid)+")",1)]),_:1}),s(D,{label:"管理密码"},{default:l(()=>[s(U,{modelValue:b.value,"onUpdate:modelValue":p[5]||(p[5]=z=>b.value=z),placeholder:"留空则无队伍管理权限","show-password":""},null,8,["modelValue"])]),_:1})]),_:1})):V("v-if",true)]),_:1},8,["modelValue"])])}}}),Mo=ie(Eo,[["__scopeId","data-v-ce82ea9a"]]),Do={class:"cls-header"},Ro={class:"cls-title"},Lo={key:0,class:"error-msg"},Ao={class:"player-list"},Uo={class:"player-info"},Fo={class:"player-name"},Bo={class:"swap-popover"},Ko={key:0,class:"swap-section"},Ho=["onClick"],Go={class:"swap-manual"},Zo={class:"swap-mode-actions"},Jo={class:"player-right"},Yo=["onClick"],qo={key:1,class:"point-edit"},Wo={key:0,class:"no-players"},Xo={class:"cls-actions"},Qo=H({__name:"cls-card",props:{cls:{},status:{},externalCheckResult:{},hasAdmin:{type:Boolean}},emits:["start","stop","check","swap","edit-point"],setup(e,{emit:n}){const t=e,a=n,o=P(()=>t.status.next??t.status.last??[]),u=P(()=>t.status.status==="pending"||t.status.status==="suspended"),d=I(false),v=I(null),w=P(()=>v.value??t.externalCheckResult??null),S=I(""),f=I({});function b(y,x){f.value[y]=x}function _(y){const x=f.value[y];x!==void 0&&a("edit-point",y,x),f.value[y]=void 0}function C(){d.value=true,v.value=null,a("check",y=>{v.value=y,d.value=false})}function O(y,x,U){x!=null&&x.trim()&&(a("swap",y,x.trim(),U),S.value="")}const m=P(()=>{switch(t.status.status){case"pending":return"info";case"running":return"success";case"finished":return"";case"suspended":return"warning";case"error":return"danger"}}),p=P(()=>{switch(t.status.status){case"pending":return"等待中";case"running":return"进行中";case"finished":return"已结束";case"suspended":return"已停止";case"error":return"错误"}});return(y,x)=>{const U=k("el-tag"),D=k("el-button"),B=k("el-divider"),J=k("el-input"),M=k("el-popover"),z=k("el-card");return i(),j(z,{class:Y(["cls-card",`status-${e.status.status}`]),shadow:"hover"},{header:l(()=>[c("div",Do,[c("span",Ro,N(e.cls)+"组 - "+N(e.status.rowi+1),1),s(U,{type:m.value,size:"small",effect:"dark"},{default:l(()=>[$(N(p.value),1)]),_:1},8,["type"])])]),default:l(()=>[e.status.status==="error"&&e.status.msg?(i(),h("div",Lo,N(e.status.msg),1)):V("v-if",true),c("div",Ao,[(i(true),h(q,null,Q(o.value,(K,G)=>{var $e;return i(),h("div",{key:G,class:"player-row"},[c("div",Uo,[w.value?(i(),h("span",{key:0,class:Y(["online-dot",($e=w.value[G])!=null&&$e.online?"online":"offline"])},null,2)):V("v-if",true),c("span",Fo,N(K.player),1),u.value?(i(),j(M,{key:1,trigger:"click",width:220,placement:"right","popper-class":"swap-popover-container"},{reference:l(()=>[s(D,{size:"small",text:"",class:"swap-btn",title:"换人"},{default:l(()=>[...x[3]||(x[3]=[$("✎",-1)])]),_:1})]),default:l(()=>{var ee;return[c("div",Bo,[(ee=K.teammates)!=null&&ee.length?(i(),h("div",Ko,[x[4]||(x[4]=c("div",{class:"swap-title"},"从队伍名单选择",-1)),(i(true),h(q,null,Q(K.teammates,(re,Oe)=>(i(),h("div",{key:Oe,class:Y(["swap-option",{active:re===K.player}]),onClick:g=>O(G,re,false)},N(re),11,Ho))),128))])):V("v-if",true),s(B,{style:{margin:"8px 0"}}),x[7]||(x[7]=c("div",{class:"swap-title"},"手动输入",-1)),c("div",Go,[s(J,{modelValue:S.value,"onUpdate:modelValue":x[0]||(x[0]=re=>S.value=re),size:"small",placeholder:"选手名"},null,8,["modelValue"])]),c("div",Zo,[s(D,{size:"small",onClick:re=>O(G,S.value,false)},{default:l(()=>[...x[5]||(x[5]=[$("临时替换",-1)])]),_:1},8,["onClick"]),e.hasAdmin?(i(),j(D,{key:0,size:"small",type:"primary",onClick:re=>O(G,S.value,true)},{default:l(()=>[...x[6]||(x[6]=[$("修改名单",-1)])]),_:1},8,["onClick"])):V("v-if",true)])])]}),_:2},1024)):V("v-if",true)]),c("div",Jo,[f.value[G]?(i(),h("div",qo,[s(J,{modelValue:f.value[G],"onUpdate:modelValue":ee=>f.value[G]=ee,modelModifiers:{number:true},size:"small",style:{width:"70px"},onKeyup:[De(ee=>_(G),["enter"]),De(ee=>f.value[G]=void 0,["escape"])]},null,8,["modelValue","onUpdate:modelValue","onKeyup"]),s(D,{size:"small",text:"",type:"primary",class:"point-edit-btn",onClick:ee=>_(G)},{default:l(()=>[...x[8]||(x[8]=[$("✓",-1)])]),_:1},8,["onClick"]),s(D,{size:"small",text:"",class:"point-edit-btn",onClick:ee=>f.value[G]=void 0},{default:l(()=>[...x[9]||(x[9]=[$("✕",-1)])]),_:1},8,["onClick"])])):(i(),h("span",{key:0,class:Y(["player-point",{editable:u.value}]),onClick:ee=>u.value&&b(G,K.point)},N(K.point),11,Yo))])])}),128)),o.value.length?V("v-if",true):(i(),h("div",Wo,"-"))]),c("div",Xo,[e.status.status==="pending"||e.status.status==="suspended"?(i(),j(D,{key:0,type:"success",size:"small",onClick:x[1]||(x[1]=K=>y.$emit("start"))},{default:l(()=>[...x[10]||(x[10]=[$(" 开赛 ",-1)])]),_:1})):V("v-if",true),e.status.status==="pending"||e.status.status==="running"?(i(),j(D,{key:1,type:"warning",size:"small",onClick:x[2]||(x[2]=K=>y.$emit("stop"))},{default:l(()=>[...x[11]||(x[11]=[$(" 停止 ",-1)])]),_:1})):V("v-if",true),u.value?(i(),j(D,{key:2,size:"small",loading:d.value,onClick:C},{default:l(()=>[...x[12]||(x[12]=[$(" 检查 ",-1)])]),_:1},8,["loading"])):V("v-if",true)])]),_:1},8,["class"])}}}),el=ie(Qo,[["__scopeId","data-v-559ac705"]]),tl={class:"match-manager"},nl={class:"config-header"},al={class:"schedule-section"},ol={class:"schedule-list"},ll={class:"config-actions"},sl={class:"subscriber-list"},rl={key:0,class:"subscriber-empty"},il={class:"subscriber-add"},ul={class:"schedule-control-header"},dl={class:"schedule-control-list"},cl={class:"schedule-info"},pl={key:0,class:"schedule-time"},ml={key:2,class:"status-section"},fl={class:"status-header"},vl={class:"status-actions"},yl={class:"cls-grid"},gl={key:3,class:"status-placeholder"},hl={class:"log-header"},_l={class:"log-time"},bl={class:"log-msg"},wl={key:0,class:"log-empty"},Cl=H({__name:"match-manager",props:{cid:{},contestInfo:{}},emits:["refresh"],setup(e,{emit:n}){const t=e,a=n,o=I({type:"ssb",round:"",lobby:"",playerIndex:"",ver:"",maxRow:"",schedules:[]}),u=I([]),d=I([]),v=I(),w=I(false),S=I(false),f=Zt({}),b=I("");let _=null;function C(g){if(g===""||g===void 0||g===null)return;const r=Number(g);return isNaN(r)?void 0:r}ce(()=>{var g;return(g=t.contestInfo)==null?void 0:g.extra},g=>{g&&(o.value.type=g.type??"ssb",o.value.round=g.round??"",o.value.lobby=g.lobby??"",o.value.playerIndex=g.playerIndex??"",o.value.ver=g.ver||"",o.value.maxRow=g.maxRow??"",o.value.schedules=(g.schedules??[]).map(r=>({...r,_time:r.startAt?new Date(2e3,0,1,...r.startAt.split(":").map(Number)):void 0})))},{immediate:true});function O(){o.value.schedules.push({maxRow:10,_time:void 0})}async function m(){const g=o.value.schedules.map(r=>({maxRow:r.maxRow,startAt:r._time?`${r._time.getHours().toString().padStart(2,"0")}:${r._time.getMinutes().toString().padStart(2,"0")}`:void 0}));await L("mahjongpub/init",t.cid,{type:o.value.type,round:C(o.value.round),lobby:o.value.lobby||void 0,playerIndex:C(o.value.playerIndex),ver:C(o.value.ver),maxRow:C(o.value.maxRow),schedules:g.length?g:void 0}),a("refresh"),await y()}async function p(){await L("mahjongpub/deinit",t.cid),u.value=[],a("refresh")}async function y(){var g;if(!(!((g=t.contestInfo)!=null&&g.extra)&&!u.value.length))try{u.value=await L("mahjongpub/cls-status",t.cid)}catch(r){console.error("Failed to refresh status:",r)}}async function x(g){await L("mahjongpub/start",t.cid,[g]),setTimeout(y,1e3)}async function U(g){await L("mahjongpub/stop",t.cid,[g]),setTimeout(y,500)}async function D(g,r){try{const A=await L("mahjongpub/check-players",t.cid,g);f[g]=A,r(A)}catch(A){F.error(`检查失败: ${A}`),r([])}}async function B(){S.value=true;const g=[];try{const r=u.value.filter(([,A])=>A.status==="pending"||A.status==="suspended").map(([A,te])=>[A,te]);for(const[A,te]of r)try{const ne=await L("mahjongpub/check-players",t.cid,A);f[A]=ne}catch(ne){g.push(`${A}组: ${ne}`);const ae=te.next??te.last??[];f[A]=ae.map(W=>({player:W.player,online:false}))}g.length&&F.warning(`部分检查失败:
6
+ ${g.join(`
7
+ `)}`)}finally{S.value=false}}async function J(g,r,A,te){try{if(te){const ne=u.value.find(([W])=>W===g);if(!ne)return;const ae=(ne[1].next??ne[1].last??[]).map(W=>W.player);ae[r]=A,await L("mahjongpub/swap-cls-players",t.cid,g,ae),F.success("名单已修改")}else await L("mahjongpub/override-player",t.cid,g,r,A),F.success("临时替换成功");await y()}catch(ne){F.error(`换人失败: ${ne}`)}}async function M(g,r,A){try{await L("mahjongpub/edit-point",t.cid,g,r,A),F.success("分数已修改"),await y()}catch(te){F.error(`修改失败: ${te}`)}}async function z(){const g=b.value.trim();if(g)try{await L("mahjongpub/add-subscriber",t.cid,g),b.value="",a("refresh")}catch(r){F.error(`添加失败: ${r}`)}}async function K(g){try{await L("mahjongpub/remove-subscriber",t.cid,g),a("refresh")}catch(r){F.error(`移除失败: ${r}`)}}async function G(g){try{await L("mahjongpub/apply-schedule",t.cid,g),a("refresh"),setTimeout(y,1e3)}catch(r){F.error(`应用失败: ${r}`)}}async function $e(g){try{await L("mahjongpub/toggle-schedule-pause",t.cid,g),a("refresh")}catch(r){F.error(`操作失败: ${r}`)}}async function ee(){w.value=true;try{await L("mahjongpub/start",t.cid,[])}finally{w.value=false,setTimeout(y,1e3)}}async function re(){await L("mahjongpub/stop",t.cid,[]),setTimeout(y,500)}function Oe(g){const r=new Date,A=`${r.getHours().toString().padStart(2,"0")}:${r.getMinutes().toString().padStart(2,"0")}:${r.getSeconds().toString().padStart(2,"0")}`;d.value.push({time:A,message:g}),d.value.length>200&&d.value.splice(0,d.value.length-200),Yt(()=>{v.value&&(v.value.scrollTop=v.value.scrollHeight)})}return At("mahjongpub/log",g=>{const[r,A]=g;r===t.cid&&Oe(A)}),je(()=>{var g;(g=t.contestInfo)!=null&&g.extra&&y(),_=setInterval(y,3e3)}),Jt(()=>{_&&clearInterval(_)}),(g,r)=>{var Ye,qe,We,Xe,Qe;const A=k("el-tag"),te=k("el-option"),ne=k("el-select"),ae=k("el-form-item"),W=k("el-input"),Ot=k("el-form"),Et=k("el-input-number"),Mt=k("el-time-picker"),oe=k("el-button"),xe=k("el-card"),Dt=k("el-switch");return i(),h("div",tl,[V(" Config Bar "),s(xe,{class:"config-card",shadow:"never"},{header:l(()=>{var R,E;return[c("div",nl,[c("span",null,N((R=e.contestInfo)==null?void 0:R.name)+" — 比赛配置",1),(E=e.contestInfo)!=null&&E.extra?(i(),j(A,{key:0,type:"success",size:"small"},{default:l(()=>[...r[9]||(r[9]=[$("已初始化",-1)])]),_:1})):(i(),j(A,{key:1,type:"info",size:"small"},{default:l(()=>[...r[10]||(r[10]=[$("未初始化",-1)])]),_:1}))])]}),default:l(()=>{var R;return[s(Ot,{inline:true,size:"small","label-width":"70px"},{default:l(()=>[s(ae,{label:"类型"},{default:l(()=>[s(ne,{modelValue:o.value.type,"onUpdate:modelValue":r[0]||(r[0]=E=>o.value.type=E),style:{width:"100px"}},{default:l(()=>[s(te,{label:"掌心 (ti)",value:"ti"}),s(te,{label:"雀魂 (ssb)",value:"ssb"})]),_:1},8,["modelValue"])]),_:1}),s(ae,{label:"轮次"},{default:l(()=>[s(W,{modelValue:o.value.round,"onUpdate:modelValue":r[1]||(r[1]=E=>o.value.round=E),style:{width:"80px"},placeholder:"默认"},null,8,["modelValue"])]),_:1}),s(ae,{label:"比赛场"},{default:l(()=>[s(W,{modelValue:o.value.lobby,"onUpdate:modelValue":r[2]||(r[2]=E=>o.value.lobby=E),style:{width:"120px"},placeholder:"lobby ID"},null,8,["modelValue"])]),_:1}),s(ae,{label:"选手序号"},{default:l(()=>[s(W,{modelValue:o.value.playerIndex,"onUpdate:modelValue":r[3]||(r[3]=E=>o.value.playerIndex=E),style:{width:"60px"},placeholder:"自动"},null,8,["modelValue"])]),_:1}),s(ae,{label:"版本"},{default:l(()=>[s(W,{modelValue:o.value.ver,"onUpdate:modelValue":r[4]||(r[4]=E=>o.value.ver=E),style:{width:"60px"},placeholder:"0"},null,8,["modelValue"])]),_:1}),s(ae,{label:"最大行"},{default:l(()=>[s(W,{modelValue:o.value.maxRow,"onUpdate:modelValue":r[5]||(r[5]=E=>o.value.maxRow=E),style:{width:"60px"},placeholder:"默认"},null,8,["modelValue"])]),_:1})]),_:1}),c("div",al,[r[13]||(r[13]=c("div",{class:"schedule-label"},"定时阶段",-1)),c("div",ol,[(i(true),h(q,null,Q(o.value.schedules,(E,ue)=>(i(),h("div",{key:ue,class:"schedule-row"},[s(Et,{modelValue:E.maxRow,"onUpdate:modelValue":X=>E.maxRow=X,min:1,size:"small","controls-position":"right",style:{width:"80px"},placeholder:"maxRow"},null,8,["modelValue","onUpdate:modelValue"]),s(Mt,{modelValue:E._time,"onUpdate:modelValue":X=>E._time=X,size:"small",format:"HH:mm",style:{width:"120px"},placeholder:"开始时间",clearable:""},null,8,["modelValue","onUpdate:modelValue"]),s(oe,{size:"small",type:"danger",text:"",onClick:X=>o.value.schedules.splice(ue,1)},{default:l(()=>[...r[11]||(r[11]=[$("×",-1)])]),_:1},8,["onClick"])]))),128))]),s(oe,{size:"small",onClick:O},{default:l(()=>[...r[12]||(r[12]=[$("+ 添加阶段",-1)])]),_:1})]),c("div",ll,[s(oe,{type:"primary",size:"small",onClick:m},{default:l(()=>[...r[14]||(r[14]=[$("初始化",-1)])]),_:1}),s(oe,{type:"danger",size:"small",disabled:!((R=e.contestInfo)!=null&&R.extra),onClick:p},{default:l(()=>[...r[15]||(r[15]=[$("反初始化",-1)])]),_:1},8,["disabled"])])]}),_:1}),V(" Subscribers "),(Ye=e.contestInfo)!=null&&Ye.extra?(i(),j(xe,{key:0,class:"subscriber-card",shadow:"never"},{header:l(()=>[...r[16]||(r[16]=[c("div",{class:"subscriber-header"},[c("span",null,"消息订阅")],-1)])]),default:l(()=>{var R;return[c("div",sl,[(i(true),h(q,null,Q(e.contestInfo.extra.subscribers,E=>(i(),j(A,{key:E,closable:"",size:"small",class:"subscriber-tag",onClose:ue=>K(E)},{default:l(()=>[$(N(E),1)]),_:2},1032,["onClose"]))),128)),(R=e.contestInfo.extra.subscribers)!=null&&R.length?V("v-if",true):(i(),h("span",rl,"暂无订阅"))]),c("div",il,[s(W,{modelValue:b.value,"onUpdate:modelValue":r[6]||(r[6]=E=>b.value=E),size:"small",placeholder:"platform:channelId",style:{width:"240px"},onKeyup:De(z,["enter"])},null,8,["modelValue"]),s(oe,{size:"small",type:"primary",onClick:z},{default:l(()=>[...r[17]||(r[17]=[$("添加",-1)])]),_:1})])]}),_:1})):V("v-if",true),V(" Schedule Control (runtime) "),(Xe=(We=(qe=e.contestInfo)==null?void 0:qe.extra)==null?void 0:We.schedules)!=null&&Xe.length?(i(),j(xe,{key:1,class:"schedule-control-card",shadow:"never"},{header:l(()=>[c("div",ul,[c("span",null,"定时控制 (当前 maxRow="+N(e.contestInfo.extra.maxRow??"默认")+")",1),s(Dt,{"model-value":!e.contestInfo.extra.schedulePaused,"active-text":"自动","inactive-text":"暂停",size:"small",onChange:r[7]||(r[7]=R=>$e(!R))},null,8,["model-value"])])]),default:l(()=>[c("div",dl,[(i(true),h(q,null,Q(e.contestInfo.extra.schedules,(R,E)=>(i(),h("div",{key:E,class:"schedule-control-row"},[c("span",cl,[$(" 阶段 "+N(E+1)+":"+N(R.maxRow)+" 行 ",1),R.startAt?(i(),h("span",pl,"@ "+N(R.startAt),1)):V("v-if",true)]),e.contestInfo.extra.maxRow>=R.maxRow?(i(),j(A,{key:0,type:"success",size:"small"},{default:l(()=>[...r[18]||(r[18]=[$("已生效",-1)])]),_:1})):(i(),j(oe,{key:1,size:"small",type:"primary",onClick:ue=>G(R.maxRow)},{default:l(()=>[...r[19]||(r[19]=[$(" 立即生效 ",-1)])]),_:1},8,["onClick"]))]))),128))])]),_:1})):V("v-if",true),V(" Status Cards "),(Qe=e.contestInfo)!=null&&Qe.extra?(i(),h("div",ml,[c("div",fl,[c("span",null,"对局状态 — 第 "+N(e.contestInfo.extra.round??e.contestInfo.totalRounds)+" 轮",1),c("div",vl,[s(oe,{type:"success",size:"small",loading:w.value,onClick:ee},{default:l(()=>[...r[20]||(r[20]=[$("全部开赛",-1)])]),_:1},8,["loading"]),s(oe,{type:"warning",size:"small",onClick:re},{default:l(()=>[...r[21]||(r[21]=[$("全部停止",-1)])]),_:1}),s(oe,{size:"small",loading:S.value,onClick:B},{default:l(()=>[...r[22]||(r[22]=[$("全部检查",-1)])]),_:1},8,["loading"]),s(oe,{size:"small",onClick:y},{default:l(()=>[...r[23]||(r[23]=[$("刷新",-1)])]),_:1})])]),c("div",yl,[(i(true),h(q,null,Q(u.value,([R,E])=>{var ue;return i(),j(el,{key:R,cls:R,status:E,"external-check-result":f[R],"has-admin":(ue=e.contestInfo)==null?void 0:ue.hasAdmin,onStart:X=>x(R),onStop:X=>U(R),onCheck:X=>D(R,X),onSwap:(X,Ee,Rt)=>J(R,X,Ee,Rt),onEditPoint:(X,Ee)=>M(R,X,Ee)},null,8,["cls","status","external-check-result","has-admin","onStart","onStop","onCheck","onSwap","onEditPoint"])}),128))])])):(i(),h("div",gl,[...r[24]||(r[24]=[c("p",null,"请先初始化比赛配置",-1)])])),V(" Log Panel "),s(xe,{class:"log-card",shadow:"never"},{header:l(()=>[c("div",hl,[r[26]||(r[26]=c("span",null,"日志",-1)),s(oe,{size:"small",text:"",onClick:r[8]||(r[8]=R=>d.value=[])},{default:l(()=>[...r[25]||(r[25]=[$("清空",-1)])]),_:1})])]),default:l(()=>[c("div",{ref_key:"logScrollRef",ref:v,class:"log-scroll"},[(i(true),h(q,null,Q(d.value,(R,E)=>(i(),h("div",{key:E,class:"log-line"},[c("span",_l,N(R.time),1),c("span",bl,N(R.message),1)]))),128)),d.value.length?V("v-if",true):(i(),h("div",wl,"暂无日志"))],512)]),_:1})])}}}),$l=ie(Cl,[["__scopeId","data-v-1e81e4ad"]]),xl={class:"team-manager"},kl={class:"team-header"},Sl={class:"team-header-actions"},Il={key:0,class:"inline-edit"},zl={class:"player-index"},Tl={class:"inline-edit-actions"},Vl={key:1,class:"player-display"},jl={key:0,class:"no-players"},Pl=H({__name:"team-manager",props:{cid:{}},setup(e){const n=e,t=I([]),a=I(""),o=I(null),u=I([]),d=I(false),v=P(()=>{if(!a.value)return t.value;const _=a.value.toLowerCase();return t.value.filter(C=>C.name.toLowerCase().includes(_)||C.tid.toString().includes(_)||C.players.some(O=>O.toLowerCase().includes(_)))});async function w(){try{t.value=await L("mahjongpub/list-teams",n.cid)}catch(_){F.error(`加载队伍失败: ${_}`)}}function S(_){o.value=_.tid,u.value=[..._.players]}function f(){o.value=null,u.value=[]}async function b(_){d.value=true;try{const C=u.value.filter(m=>m.trim()),O=await L("mahjongpub/update-team-players",n.cid,_.tid,C);F.success(O||"保存成功"),o.value=null,u.value=[],await w()}catch(C){F.error(`保存失败: ${C}`)}finally{d.value=false}}return je(w),(_,C)=>{const O=k("el-input"),m=k("el-button"),p=k("el-table-column"),y=k("el-tag"),x=k("el-table");return i(),h("div",xl,[c("div",kl,[C[3]||(C[3]=c("span",null,"队伍管理",-1)),c("div",Sl,[s(O,{modelValue:a.value,"onUpdate:modelValue":C[0]||(C[0]=U=>a.value=U),size:"small",placeholder:"搜索队名/选手",clearable:"",style:{width:"200px"}},null,8,["modelValue"]),s(m,{size:"small",onClick:w},{default:l(()=>[...C[2]||(C[2]=[$("刷新",-1)])]),_:1})])]),s(x,{data:v.value,size:"small",border:"",class:"team-table","row-key":"tid"},{default:l(()=>[s(p,{prop:"tid",label:"ID",width:"60",sortable:""}),s(p,{prop:"name",label:"队名",width:"120",sortable:""}),s(p,{label:"选手名单","min-width":"400"},{default:l(({row:U})=>[o.value===U.tid?(i(),h("div",Il,[(i(true),h(q,null,Q(u.value,(D,B)=>(i(),h("div",{key:B,class:"inline-edit-row"},[c("span",zl,N(B+1)+".",1),s(O,{modelValue:u.value[B],"onUpdate:modelValue":J=>u.value[B]=J,size:"small"},null,8,["modelValue","onUpdate:modelValue"]),s(m,{size:"small",type:"danger",text:"",onClick:J=>u.value.splice(B,1)},{default:l(()=>[...C[4]||(C[4]=[$("×",-1)])]),_:1},8,["onClick"])]))),128)),c("div",Tl,[s(m,{size:"small",onClick:C[1]||(C[1]=D=>u.value.push(""))},{default:l(()=>[...C[5]||(C[5]=[$("+ 添加",-1)])]),_:1}),s(m,{size:"small",type:"primary",loading:d.value,onClick:D=>b(U)},{default:l(()=>[...C[6]||(C[6]=[$("保存",-1)])]),_:1},8,["loading","onClick"]),s(m,{size:"small",onClick:f},{default:l(()=>[...C[7]||(C[7]=[$("取消",-1)])]),_:1})])])):(i(),h("div",Vl,[(i(true),h(q,null,Q(U.players,(D,B)=>(i(),j(y,{key:B,size:"small",class:"player-tag"},{default:l(()=>[$(N(D),1)]),_:2},1024))),128)),U.players.length?V("v-if",true):(i(),h("span",jl,"无选手"))]))]),_:1}),s(p,{label:"操作",width:"80",align:"center"},{default:l(({row:U})=>[o.value!==U.tid?(i(),j(m,{key:0,size:"small",text:"",onClick:D=>S(U)},{default:l(()=>[...C[8]||(C[8]=[$(" 编辑 ",-1)])]),_:1},8,["onClick"])):V("v-if",true)]),_:1})]),_:1},8,["data"])])}}}),Nl=ie(Pl,[["__scopeId","data-v-064b204b"]]),Ol={class:"lobby-panel"},El={class:"lobby-config"},Ml={class:"section-header"},Dl={key:1,class:"empty-hint"},Rl={class:"section-header"},Ll={key:0,class:"game-list"},Al={class:"game-header"},Ul=["title"],Fl={class:"game-actions"},Bl={class:"game-players"},Kl={key:1,class:"empty-hint"},Hl=H({__name:"lobby-panel",props:{cid:{},initLobby:{},initType:{}},setup(e){const n=e,t=I(n.initLobby??""),a=I(n.initType??"ssb"),o=I([]),u=I([]),d=I(false);ce(()=>n.initLobby,b=>{b&&(t.value=b)}),ce(()=>n.initType,b=>{b&&(a.value=b)});async function v(){if(t.value){d.value=true;try{const[b,_]=await Promise.all([L("mahjongpub/lobby-players",+t.value,a.value),L("mahjongpub/lobby-games",+t.value,a.value)]);o.value=b,u.value=_}catch(b){F.error(`查询失败: ${b}`)}finally{d.value=false}}}async function w(b){try{await L("mahjongpub/lobby-pause",+t.value,a.value,b),F.success("已暂停")}catch(_){F.error(`暂停失败: ${_}`)}}async function S(b){try{await L("mahjongpub/lobby-resume",+t.value,a.value,b),F.success("已恢复")}catch(_){F.error(`恢复失败: ${_}`)}}async function f(b){try{await L("mahjongpub/lobby-stop",+t.value,a.value,b),F.success("已中止"),await v()}catch(_){F.error(`中止失败: ${_}`)}}return(b,_)=>{const C=k("el-input"),O=k("el-form-item"),m=k("el-option"),p=k("el-select"),y=k("el-button"),x=k("el-form"),U=k("el-table-column"),D=k("el-table"),B=k("el-card"),J=k("el-popconfirm"),M=k("el-tag");return i(),h("div",Ol,[c("div",El,[s(x,{inline:true,size:"small"},{default:l(()=>[s(O,{label:"比赛场 ID"},{default:l(()=>[s(C,{modelValue:t.value,"onUpdate:modelValue":_[0]||(_[0]=z=>t.value=z),placeholder:"lobby ID",style:{width:"140px"}},null,8,["modelValue"])]),_:1}),s(O,{label:"平台"},{default:l(()=>[s(p,{modelValue:a.value,"onUpdate:modelValue":_[1]||(_[1]=z=>a.value=z),style:{width:"120px"}},{default:l(()=>[s(m,{label:"掌心 (ti)",value:"ti"}),s(m,{label:"雀魂 (ssb)",value:"ssb"})]),_:1},8,["modelValue"])]),_:1}),s(O,null,{default:l(()=>[s(y,{size:"small",type:"primary",onClick:v},{default:l(()=>[..._[2]||(_[2]=[$("刷新",-1)])]),_:1})]),_:1})]),_:1})]),V(" Ready Players "),s(B,{shadow:"never",class:"section-card"},{header:l(()=>[c("div",Ml,[c("span",null,"待机选手 ("+N(o.value.length)+")",1)])]),default:l(()=>[o.value.length?(i(),j(D,{key:0,data:o.value,size:"small",border:"","max-height":"300"},{default:l(()=>[s(U,{prop:"nickname",label:"昵称","min-width":"150"}),s(U,{prop:"accountId",label:"ID",width:"120"})]),_:1},8,["data"])):(i(),h("div",Dl,N(d.value?"加载中...":t.value?"暂无待机选手":"请输入比赛场 ID 后查询"),1))]),_:1}),V(" Running Games "),s(B,{shadow:"never",class:"section-card"},{header:l(()=>[c("div",Rl,[c("span",null,"进行中对局 ("+N(u.value.length)+")",1)])]),default:l(()=>[u.value.length?(i(),h("div",Ll,[(i(true),h(q,null,Q(u.value,z=>(i(),j(B,{key:z.id,shadow:"hover",class:"game-card"},{default:l(()=>[c("div",Al,[c("span",{class:"game-id",title:z.id},N(z.id.slice(0,12))+"...",9,Ul),c("div",Fl,[s(y,{size:"small",type:"warning",onClick:K=>w(z.id)},{default:l(()=>[..._[3]||(_[3]=[$("暂停",-1)])]),_:1},8,["onClick"]),s(y,{size:"small",type:"primary",onClick:K=>S(z.id)},{default:l(()=>[..._[4]||(_[4]=[$("恢复",-1)])]),_:1},8,["onClick"]),s(J,{title:"确定中止该对局?",onConfirm:K=>f(z.id)},{reference:l(()=>[s(y,{size:"small",type:"danger"},{default:l(()=>[..._[5]||(_[5]=[$("中止",-1)])]),_:1})]),_:1},8,["onConfirm"])])]),c("div",Bl,[(i(true),h(q,null,Q(z.players,(K,G)=>(i(),j(M,{key:G,size:"small",class:"player-tag"},{default:l(()=>[$(N(K.nickname||`#${K.accountId}`),1)]),_:2},1024))),128))])]),_:2},1024))),128))])):(i(),h("div",Kl,N(d.value?"加载中...":t.value?"暂无进行中对局":"请输入比赛场 ID 后查询"),1))]),_:1})])}}}),Gl=ie(Hl,[["__scopeId","data-v-a21c65dd"]]),Zl={key:0,class:"empty-state"},Jl={key:1,class:"empty-state"},Yl={key:2,class:"contest-panel"},ql={class:"first-tab-label"},Wl={key:1},Xl=H({__name:"contest-panel",props:{cid:{},managed:{},sidebarCollapsed:{type:Boolean}},emits:["toggle-sidebar"],setup(e,{emit:n}){const t=e,a=I("match"),o=I(false),u=I(null);async function d(){o.value=true;try{u.value=await L("mahjongpub/contest-info",t.cid)}catch(v){console.error("Failed to load contest info:",v)}finally{o.value=false}}return ce(()=>t.cid,()=>{a.value="match",d()},{immediate:true}),(v,w)=>{const S=k("el-button"),f=k("el-tab-pane"),b=k("el-tooltip"),_=k("el-tabs");return e.cid?o.value&&!u.value?(i(),h("div",Jl,[...w[3]||(w[3]=[c("p",null,"加载中...",-1)])])):(i(),h("div",Yl,[s(_,{modelValue:a.value,"onUpdate:modelValue":w[1]||(w[1]=C=>a.value=C)},{default:l(()=>{var C;return[s(f,{name:"match"},{label:l(()=>[c("div",ql,[s(S,{class:"sidebar-toggle-btn",size:"small",text:"",title:e.sidebarCollapsed?"展开侧边栏":"收起侧边栏",onClick:w[0]||(w[0]=Se(O=>v.$emit("toggle-sidebar"),["stop"]))},{default:l(()=>[$(N(e.sidebarCollapsed?"▶":"◀"),1)]),_:1},8,["title"]),w[4]||(w[4]=c("span",null,"比赛进程",-1))])]),default:l(()=>[s($l,{cid:e.cid,"contest-info":u.value,onRefresh:d},null,8,["cid","contest-info"])]),_:1}),s(f,{label:"队伍管理",name:"team",disabled:!((C=u.value)!=null&&C.hasAdmin)},{label:l(()=>{var O;return[(O=u.value)!=null&&O.hasAdmin?(i(),h("span",Wl,"队伍管理")):(i(),j(b,{key:0,content:"请先配置管理密码(右键侧边栏比赛项)",placement:"top"},{default:l(()=>[...w[5]||(w[5]=[c("span",null,"队伍管理",-1)])]),_:1}))]}),default:l(()=>{var O;return[(O=u.value)!=null&&O.hasAdmin?(i(),j(Nl,{key:0,cid:e.cid},null,8,["cid"])):V("v-if",true)]}),_:1},8,["disabled"]),s(f,{label:"比赛场",name:"lobby"},{default:l(()=>{var O,m,p,y;return[s(Gl,{cid:e.cid,"init-lobby":(m=(O=u.value)==null?void 0:O.extra)==null?void 0:m.lobby,"init-type":(y=(p=u.value)==null?void 0:p.extra)==null?void 0:y.type},null,8,["cid","init-lobby","init-type"])]}),_:1})]}),_:1},8,["modelValue"])])):(i(),h("div",Zl,[...w[2]||(w[2]=[c("p",null,"请选择比赛",-1)])]))}}}),Ql=ie(Xl,[["__scopeId","data-v-c9a9bbef"]]),es={class:"main-layout"},ts={class:"content-wrapper"},ns={key:1,class:"empty-state"},as=H({__name:"layout",setup(e){const n=I([]),t=I(null),a=I(false),o=P(()=>n.value.find(S=>S.cid===t.value)??null);async function u(){n.value=await L("mahjongpub/list-managed")}async function d(S){await u(),t.value=S.cid}async function v(S){var f;await u(),t.value===S&&(t.value=((f=n.value[0])==null?void 0:f.cid)??null)}async function w(S,f){await u()}return je(u),(S,f)=>{const b=k("k-layout");return i(),j(b,null,{default:l(()=>[c("div",es,[c("div",{class:Y(["sidebar-wrapper",{collapsed:a.value}])},[Ae(s(Mo,{contests:n.value,"active-cid":t.value,onSelect:f[0]||(f[0]=_=>t.value=_),onAdd:d,onRemove:v,onUpdate:w},null,8,["contests","active-cid"]),[[Ue,!a.value]])],2),c("div",ts,[t.value?(i(),j(Ql,{key:t.value,cid:t.value,managed:o.value,"sidebar-collapsed":a.value,onToggleSidebar:f[1]||(f[1]=_=>a.value=!a.value)},null,8,["cid","managed","sidebar-collapsed"])):(i(),h("div",ns,[...f[2]||(f[2]=[c("p",null,"请从左侧选择或添加比赛",-1)])]))])])]),_:1})}}}),os=ie(as,[["__scopeId","data-v-592f974d"]]),is=e=>{e.page({name:"比赛管理",path:"/mahjongpub",icon:"mahjongpub:icon",component:os,authority:3})};export{is as default};
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- .sidebar[data-v-e7b90e50]{height:100%;display:flex;flex-direction:column}.sidebar-header[data-v-e7b90e50]{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid var(--k-color-divider);font-weight:700}.contest-list[data-v-e7b90e50]{flex:1;overflow-y:auto}.contest-item[data-v-e7b90e50]{padding:10px 16px;cursor:pointer;border-bottom:1px solid var(--k-color-divider);position:relative;transition:background-color .2s}.contest-item[data-v-e7b90e50]:hover{background:var(--k-hover-bg, var(--el-fill-color-light))}.contest-item.active[data-v-e7b90e50]{background:var(--k-hover-bg, var(--el-color-primary-light-9));border-left:3px solid var(--el-color-primary)}.contest-name[data-v-e7b90e50]{font-size:14px;font-weight:500}.contest-cid[data-v-e7b90e50]{font-size:12px;color:var(--k-text-light)}.admin-badge[data-v-e7b90e50]{position:absolute;top:10px;right:12px;color:var(--el-color-success)}.cls-card[data-v-559ac705]{border-left:3px solid transparent}.cls-card.status-pending[data-v-559ac705]{border-left-color:var(--el-color-info)}.cls-card.status-running[data-v-559ac705]{border-left-color:var(--el-color-success)}.cls-card.status-finished[data-v-559ac705]{border-left-color:var(--el-color-primary)}.cls-card.status-suspended[data-v-559ac705]{border-left-color:var(--el-color-warning)}.cls-card.status-error[data-v-559ac705]{border-left-color:var(--el-color-danger)}.cls-header[data-v-559ac705]{display:flex;justify-content:space-between;align-items:center}.cls-title[data-v-559ac705]{font-weight:700}.error-msg[data-v-559ac705]{color:var(--el-color-danger);font-size:12px;margin-bottom:8px}.player-list[data-v-559ac705]{display:flex;flex-direction:column;gap:4px}.player-row[data-v-559ac705]{display:flex;justify-content:space-between;align-items:center;font-size:13px;padding:2px 4px;border-radius:2px}.player-row[data-v-559ac705]:nth-child(odd){background:var(--k-hover-bg, var(--el-fill-color))}.player-info[data-v-559ac705]{display:flex;align-items:center;gap:6px;flex:1;min-width:0;overflow:hidden}.online-dot[data-v-559ac705]{width:8px;height:8px;border-radius:50%;flex-shrink:0}.online-dot.online[data-v-559ac705]{background:var(--el-color-success)}.online-dot.offline[data-v-559ac705]{background:var(--el-color-danger)}.player-name[data-v-559ac705]{font-weight:500;color:var(--k-text-normal, var(--el-text-color-primary))}.player-right[data-v-559ac705]{display:flex;align-items:center;gap:4px;flex-shrink:0}.player-point[data-v-559ac705]{color:var(--k-text-light, var(--el-text-color-secondary));font-family:monospace}.player-point.editable[data-v-559ac705]{cursor:pointer;border-bottom:1px dashed var(--el-border-color)}.player-point.editable[data-v-559ac705]:hover{color:var(--el-color-primary)}.point-edit[data-v-559ac705]{display:flex;align-items:center;gap:2px;margin-left:auto}.point-edit-btn[data-v-559ac705]{padding:0 4px;min-width:auto;font-size:13px;margin-left:0!important}.swap-btn[data-v-559ac705]{padding:2px;font-size:13px}.no-players[data-v-559ac705]{text-align:center;color:var(--k-text-light, var(--el-text-color-secondary))}.cls-actions[data-v-559ac705]{margin-top:8px;display:flex;gap:4px;flex-wrap:wrap}.swap-popover-container{padding:8px 4px 8px 12px!important}.swap-popover-container .swap-popover{max-height:240px;overflow-y:auto;padding-right:8px;scrollbar-width:thin;scrollbar-color:var(--el-border-color) transparent}.swap-popover-container .swap-popover::-webkit-scrollbar{width:4px}.swap-popover-container .swap-popover::-webkit-scrollbar-track{background:transparent}.swap-popover-container .swap-popover::-webkit-scrollbar-thumb{background:var(--el-border-color);border-radius:2px}.swap-popover-container .swap-popover::-webkit-scrollbar-thumb:hover{background:var(--el-text-color-placeholder)}.swap-popover-container .swap-title{font-size:12px;color:var(--el-text-color-secondary);margin-bottom:4px}.swap-popover-container .swap-option{padding:4px 8px;cursor:pointer;border-radius:4px;font-size:13px}.swap-popover-container .swap-option:hover{background:var(--el-fill-color-light)}.swap-popover-container .swap-option.active{color:var(--el-color-primary);font-weight:500}.swap-popover-container .swap-manual{display:flex;gap:4px;margin-bottom:8px}.swap-popover-container .swap-mode-actions{display:flex;gap:4px;justify-content:flex-end}.swap-popover-container .swap-section{margin-bottom:4px}.match-manager[data-v-13c91849]{display:flex;flex-direction:column;gap:16px;min-height:100%}.config-header[data-v-13c91849]{display:flex;align-items:center;gap:8px}.config-card[data-v-13c91849] .el-card__body{padding-top:12px;padding-bottom:12px}.config-actions[data-v-13c91849]{margin-top:8px}.status-section[data-v-13c91849]{display:flex;flex-direction:column;gap:12px}.status-header[data-v-13c91849]{display:flex;justify-content:space-between;align-items:center;font-weight:700}.status-actions[data-v-13c91849]{display:flex;gap:8px}.cls-grid[data-v-13c91849]{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px}.status-placeholder[data-v-13c91849]{text-align:center;padding:40px;color:var(--k-text-light)}.log-card[data-v-13c91849]{flex:1;display:flex;flex-direction:column;min-height:200px}.log-card[data-v-13c91849] .el-card__body{padding:0;flex:1;display:flex;flex-direction:column;overflow:hidden}.log-header[data-v-13c91849]{display:flex;justify-content:space-between;align-items:center}.log-scroll[data-v-13c91849]{flex:1;overflow-y:auto;padding:8px 16px;font-family:monospace;font-size:12px;scrollbar-width:thin}.log-scroll[data-v-13c91849]::-webkit-scrollbar{width:6px}.log-scroll[data-v-13c91849]::-webkit-scrollbar-thumb{background:var(--el-border-color);border-radius:3px}.log-scroll[data-v-13c91849]::-webkit-scrollbar-thumb:hover{background:var(--el-border-color-darker, var(--el-text-color-placeholder))}.log-line[data-v-13c91849]{padding:2px 0;line-height:1.5}.log-time[data-v-13c91849]{color:var(--k-text-light);margin-right:8px}.log-empty[data-v-13c91849]{text-align:center;color:var(--k-text-light);padding:20px}.subscriber-card[data-v-13c91849] .el-card__body{padding-top:12px;padding-bottom:12px}.subscriber-header[data-v-13c91849]{font-weight:700}.subscriber-list[data-v-13c91849]{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}.subscriber-tag[data-v-13c91849]{font-family:monospace}.subscriber-empty[data-v-13c91849]{color:var(--k-text-light, var(--el-text-color-secondary));font-size:13px}.subscriber-add[data-v-13c91849]{display:flex;gap:8px;align-items:center}.schedule-section[data-v-13c91849]{margin-top:12px;border-top:1px solid var(--k-color-divider, var(--el-border-color-lighter));padding-top:12px}.schedule-label[data-v-13c91849]{font-size:13px;font-weight:500;margin-bottom:8px}.schedule-list[data-v-13c91849]{display:flex;flex-direction:column;gap:6px;margin-bottom:8px}.schedule-row[data-v-13c91849]{display:flex;gap:8px;align-items:center}.schedule-control-card[data-v-13c91849] .el-card__body{padding-top:12px;padding-bottom:12px}.schedule-control-header[data-v-13c91849]{display:flex;justify-content:space-between;align-items:center;font-weight:700}.schedule-control-list[data-v-13c91849]{display:flex;flex-direction:column;gap:8px}.schedule-control-row[data-v-13c91849]{display:flex;justify-content:space-between;align-items:center;padding:4px 8px;border-radius:4px;background:var(--k-hover-bg, var(--el-fill-color))}.schedule-info[data-v-13c91849]{font-size:13px}.schedule-time[data-v-13c91849]{color:var(--k-text-light, var(--el-text-color-secondary));margin-left:4px}.team-manager[data-v-064b204b]{display:flex;flex-direction:column;gap:12px}.team-header[data-v-064b204b]{display:flex;justify-content:space-between;align-items:center;font-weight:700}.team-header-actions[data-v-064b204b]{display:flex;gap:8px}.player-display[data-v-064b204b]{display:flex;flex-wrap:wrap;gap:4px}.player-tag[data-v-064b204b]{font-size:12px}.no-players[data-v-064b204b]{color:var(--k-text-light, var(--el-text-color-secondary));font-size:12px}.inline-edit[data-v-064b204b]{display:flex;flex-direction:column;gap:4px;padding:4px 0}.inline-edit-row[data-v-064b204b]{display:flex;align-items:center;gap:6px}.player-index[data-v-064b204b]{width:20px;text-align:right;color:var(--k-text-light, var(--el-text-color-secondary));font-size:12px;flex-shrink:0}.inline-edit-actions[data-v-064b204b]{display:flex;gap:6px;margin-top:4px}.lobby-panel[data-v-a21c65dd]{display:flex;flex-direction:column;gap:16px}.lobby-config[data-v-a21c65dd]{margin-bottom:4px}.section-card[data-v-a21c65dd] .el-card__header{padding:12px 16px}.section-header[data-v-a21c65dd]{font-weight:700}.empty-hint[data-v-a21c65dd]{text-align:center;padding:20px;color:var(--k-text-light);font-size:13px}.game-list[data-v-a21c65dd]{display:flex;flex-direction:column;gap:8px}.game-card[data-v-a21c65dd]{border-left:3px solid var(--el-color-success)}.game-card[data-v-a21c65dd] .el-card__body{padding:12px}.game-header[data-v-a21c65dd]{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.game-id[data-v-a21c65dd]{font-family:monospace;font-size:12px;color:var(--k-text-light)}.game-actions[data-v-a21c65dd]{display:flex;gap:4px}.game-players[data-v-a21c65dd]{display:flex;gap:6px;flex-wrap:wrap}.player-tag[data-v-a21c65dd]{font-size:13px}.contest-panel[data-v-c9a9bbef]{height:100%;box-sizing:border-box;display:flex;flex-direction:column;overflow:hidden}.first-tab-label[data-v-c9a9bbef]{display:inline-flex;align-items:center;gap:4px}.sidebar-toggle-btn[data-v-c9a9bbef]{font-size:inherit;padding:0;min-width:auto;height:auto;line-height:inherit;color:var(--el-text-color-primary);font-weight:400}.sidebar-toggle-btn[data-v-c9a9bbef]:hover{color:var(--el-color-primary)}.contest-panel[data-v-c9a9bbef] .el-tabs{display:flex;flex-direction:column;flex:1;overflow:hidden}.contest-panel[data-v-c9a9bbef] .el-tabs__header{padding-left:8px}.contest-panel[data-v-c9a9bbef] .el-tabs__content{flex:1;overflow:hidden;display:flex;flex-direction:column}.contest-panel[data-v-c9a9bbef] .el-tab-pane{flex:1;overflow-y:auto;padding:12px 16px 16px}.empty-state[data-v-c9a9bbef]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:var(--k-text-light)}.main-layout[data-v-592f974d]{display:flex;height:100%;overflow:hidden}.sidebar-wrapper[data-v-592f974d]{position:relative;width:240px;min-width:240px;border-right:1px solid var(--k-color-divider, var(--el-border-color-lighter));transition:width .2s,min-width .2s;display:flex;flex-direction:column}.sidebar-wrapper.collapsed[data-v-592f974d]{width:0;min-width:0;overflow:hidden}.content-wrapper[data-v-592f974d]{flex:1;overflow:hidden;min-width:0}.empty-state[data-v-592f974d]{display:flex;align-items:center;justify-content:center;height:100%;color:var(--k-text-light);font-size:16px}
1
+ .sidebar[data-v-ce82ea9a]{height:100%;display:flex;flex-direction:column}.sidebar-header[data-v-ce82ea9a]{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid var(--k-color-divider);font-weight:700}.contest-list[data-v-ce82ea9a]{flex:1;overflow-y:auto}.contest-item[data-v-ce82ea9a]{padding:10px 16px;cursor:pointer;border-bottom:1px solid var(--k-color-divider);position:relative;transition:background-color .2s}.contest-item[data-v-ce82ea9a]:hover{background:var(--k-hover-bg, var(--el-fill-color-light))}.contest-item.active[data-v-ce82ea9a]{background:var(--k-hover-bg, var(--el-color-primary-light-9));border-left:3px solid var(--el-color-primary)}.contest-name[data-v-ce82ea9a]{font-size:14px;font-weight:500}.contest-cid[data-v-ce82ea9a]{font-size:12px;color:var(--k-text-light)}.admin-badge[data-v-ce82ea9a]{position:absolute;top:10px;right:12px;color:var(--el-color-success)}.cls-card[data-v-559ac705]{border-left:3px solid transparent}.cls-card.status-pending[data-v-559ac705]{border-left-color:var(--el-color-info)}.cls-card.status-running[data-v-559ac705]{border-left-color:var(--el-color-success)}.cls-card.status-finished[data-v-559ac705]{border-left-color:var(--el-color-primary)}.cls-card.status-suspended[data-v-559ac705]{border-left-color:var(--el-color-warning)}.cls-card.status-error[data-v-559ac705]{border-left-color:var(--el-color-danger)}.cls-header[data-v-559ac705]{display:flex;justify-content:space-between;align-items:center}.cls-title[data-v-559ac705]{font-weight:700}.error-msg[data-v-559ac705]{color:var(--el-color-danger);font-size:12px;margin-bottom:8px}.player-list[data-v-559ac705]{display:flex;flex-direction:column;gap:4px}.player-row[data-v-559ac705]{display:flex;justify-content:space-between;align-items:center;font-size:13px;padding:2px 4px;border-radius:2px}.player-row[data-v-559ac705]:nth-child(odd){background:var(--k-hover-bg, var(--el-fill-color))}.player-info[data-v-559ac705]{display:flex;align-items:center;gap:6px;flex:1;min-width:0;overflow:hidden}.online-dot[data-v-559ac705]{width:8px;height:8px;border-radius:50%;flex-shrink:0}.online-dot.online[data-v-559ac705]{background:var(--el-color-success)}.online-dot.offline[data-v-559ac705]{background:var(--el-color-danger)}.player-name[data-v-559ac705]{font-weight:500;color:var(--k-text-normal, var(--el-text-color-primary))}.player-right[data-v-559ac705]{display:flex;align-items:center;gap:4px;flex-shrink:0}.player-point[data-v-559ac705]{color:var(--k-text-light, var(--el-text-color-secondary));font-family:monospace}.player-point.editable[data-v-559ac705]{cursor:pointer;border-bottom:1px dashed var(--el-border-color)}.player-point.editable[data-v-559ac705]:hover{color:var(--el-color-primary)}.point-edit[data-v-559ac705]{display:flex;align-items:center;gap:2px;margin-left:auto}.point-edit-btn[data-v-559ac705]{padding:0 4px;min-width:auto;font-size:13px;margin-left:0!important}.swap-btn[data-v-559ac705]{padding:2px;font-size:13px}.no-players[data-v-559ac705]{text-align:center;color:var(--k-text-light, var(--el-text-color-secondary))}.cls-actions[data-v-559ac705]{margin-top:8px;display:flex;gap:4px;flex-wrap:wrap}.swap-popover-container{padding:8px 4px 8px 12px!important}.swap-popover-container .swap-popover{max-height:240px;overflow-y:auto;padding-right:8px;scrollbar-width:thin;scrollbar-color:var(--el-border-color) transparent}.swap-popover-container .swap-popover::-webkit-scrollbar{width:4px}.swap-popover-container .swap-popover::-webkit-scrollbar-track{background:transparent}.swap-popover-container .swap-popover::-webkit-scrollbar-thumb{background:var(--el-border-color);border-radius:2px}.swap-popover-container .swap-popover::-webkit-scrollbar-thumb:hover{background:var(--el-text-color-placeholder)}.swap-popover-container .swap-title{font-size:12px;color:var(--el-text-color-secondary);margin-bottom:4px}.swap-popover-container .swap-option{padding:4px 8px;cursor:pointer;border-radius:4px;font-size:13px}.swap-popover-container .swap-option:hover{background:var(--el-fill-color-light)}.swap-popover-container .swap-option.active{color:var(--el-color-primary);font-weight:500}.swap-popover-container .swap-manual{display:flex;gap:4px;margin-bottom:8px}.swap-popover-container .swap-mode-actions{display:flex;gap:4px;justify-content:flex-end}.swap-popover-container .swap-section{margin-bottom:4px}.match-manager[data-v-1e81e4ad]{display:flex;flex-direction:column;gap:16px;min-height:100%}.config-header[data-v-1e81e4ad]{display:flex;align-items:center;gap:8px}.config-card[data-v-1e81e4ad] .el-card__body{padding-top:12px;padding-bottom:12px}.config-actions[data-v-1e81e4ad]{margin-top:8px}.status-section[data-v-1e81e4ad]{display:flex;flex-direction:column;gap:12px}.status-header[data-v-1e81e4ad]{display:flex;justify-content:space-between;align-items:center;font-weight:700}.status-actions[data-v-1e81e4ad]{display:flex;gap:8px}.cls-grid[data-v-1e81e4ad]{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px}.status-placeholder[data-v-1e81e4ad]{text-align:center;padding:40px;color:var(--k-text-light)}.log-card[data-v-1e81e4ad]{flex:1;display:flex;flex-direction:column;min-height:200px}.log-card[data-v-1e81e4ad] .el-card__body{padding:0;flex:1;display:flex;flex-direction:column;overflow:hidden}.log-header[data-v-1e81e4ad]{display:flex;justify-content:space-between;align-items:center}.log-scroll[data-v-1e81e4ad]{flex:1;overflow-y:auto;padding:8px 16px;font-family:monospace;font-size:12px;scrollbar-width:thin}.log-scroll[data-v-1e81e4ad]::-webkit-scrollbar{width:6px}.log-scroll[data-v-1e81e4ad]::-webkit-scrollbar-thumb{background:var(--el-border-color);border-radius:3px}.log-scroll[data-v-1e81e4ad]::-webkit-scrollbar-thumb:hover{background:var(--el-border-color-darker, var(--el-text-color-placeholder))}.log-line[data-v-1e81e4ad]{padding:2px 0;line-height:1.5}.log-time[data-v-1e81e4ad]{color:var(--k-text-light);margin-right:8px}.log-empty[data-v-1e81e4ad]{text-align:center;color:var(--k-text-light);padding:20px}.subscriber-card[data-v-1e81e4ad] .el-card__body{padding-top:12px;padding-bottom:12px}.subscriber-header[data-v-1e81e4ad]{font-weight:700}.subscriber-list[data-v-1e81e4ad]{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}.subscriber-tag[data-v-1e81e4ad]{font-family:monospace}.subscriber-empty[data-v-1e81e4ad]{color:var(--k-text-light, var(--el-text-color-secondary));font-size:13px}.subscriber-add[data-v-1e81e4ad]{display:flex;gap:8px;align-items:center}.schedule-section[data-v-1e81e4ad]{margin-top:12px;border-top:1px solid var(--k-color-divider, var(--el-border-color-lighter));padding-top:12px}.schedule-label[data-v-1e81e4ad]{font-size:13px;font-weight:500;margin-bottom:8px}.schedule-list[data-v-1e81e4ad]{display:flex;flex-direction:column;gap:6px;margin-bottom:8px}.schedule-row[data-v-1e81e4ad]{display:flex;gap:8px;align-items:center}.schedule-control-card[data-v-1e81e4ad] .el-card__body{padding-top:12px;padding-bottom:12px}.schedule-control-header[data-v-1e81e4ad]{display:flex;justify-content:space-between;align-items:center;font-weight:700}.schedule-control-list[data-v-1e81e4ad]{display:flex;flex-direction:column;gap:8px}.schedule-control-row[data-v-1e81e4ad]{display:flex;justify-content:space-between;align-items:center;padding:4px 8px;border-radius:4px;background:var(--k-hover-bg, var(--el-fill-color))}.schedule-info[data-v-1e81e4ad]{font-size:13px}.schedule-time[data-v-1e81e4ad]{color:var(--k-text-light, var(--el-text-color-secondary));margin-left:4px}.team-manager[data-v-064b204b]{display:flex;flex-direction:column;gap:12px}.team-header[data-v-064b204b]{display:flex;justify-content:space-between;align-items:center;font-weight:700}.team-header-actions[data-v-064b204b]{display:flex;gap:8px}.player-display[data-v-064b204b]{display:flex;flex-wrap:wrap;gap:4px}.player-tag[data-v-064b204b]{font-size:12px}.no-players[data-v-064b204b]{color:var(--k-text-light, var(--el-text-color-secondary));font-size:12px}.inline-edit[data-v-064b204b]{display:flex;flex-direction:column;gap:4px;padding:4px 0}.inline-edit-row[data-v-064b204b]{display:flex;align-items:center;gap:6px}.player-index[data-v-064b204b]{width:20px;text-align:right;color:var(--k-text-light, var(--el-text-color-secondary));font-size:12px;flex-shrink:0}.inline-edit-actions[data-v-064b204b]{display:flex;gap:6px;margin-top:4px}.lobby-panel[data-v-a21c65dd]{display:flex;flex-direction:column;gap:16px}.lobby-config[data-v-a21c65dd]{margin-bottom:4px}.section-card[data-v-a21c65dd] .el-card__header{padding:12px 16px}.section-header[data-v-a21c65dd]{font-weight:700}.empty-hint[data-v-a21c65dd]{text-align:center;padding:20px;color:var(--k-text-light);font-size:13px}.game-list[data-v-a21c65dd]{display:flex;flex-direction:column;gap:8px}.game-card[data-v-a21c65dd]{border-left:3px solid var(--el-color-success)}.game-card[data-v-a21c65dd] .el-card__body{padding:12px}.game-header[data-v-a21c65dd]{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.game-id[data-v-a21c65dd]{font-family:monospace;font-size:12px;color:var(--k-text-light)}.game-actions[data-v-a21c65dd]{display:flex;gap:4px}.game-players[data-v-a21c65dd]{display:flex;gap:6px;flex-wrap:wrap}.player-tag[data-v-a21c65dd]{font-size:13px}.contest-panel[data-v-c9a9bbef]{height:100%;box-sizing:border-box;display:flex;flex-direction:column;overflow:hidden}.first-tab-label[data-v-c9a9bbef]{display:inline-flex;align-items:center;gap:4px}.sidebar-toggle-btn[data-v-c9a9bbef]{font-size:inherit;padding:0;min-width:auto;height:auto;line-height:inherit;color:var(--el-text-color-primary);font-weight:400}.sidebar-toggle-btn[data-v-c9a9bbef]:hover{color:var(--el-color-primary)}.contest-panel[data-v-c9a9bbef] .el-tabs{display:flex;flex-direction:column;flex:1;overflow:hidden}.contest-panel[data-v-c9a9bbef] .el-tabs__header{padding-left:8px}.contest-panel[data-v-c9a9bbef] .el-tabs__content{flex:1;overflow:hidden;display:flex;flex-direction:column}.contest-panel[data-v-c9a9bbef] .el-tab-pane{flex:1;overflow-y:auto;padding:12px 16px 16px}.empty-state[data-v-c9a9bbef]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:var(--k-text-light)}.main-layout[data-v-592f974d]{display:flex;height:100%;overflow:hidden}.sidebar-wrapper[data-v-592f974d]{position:relative;width:240px;min-width:240px;border-right:1px solid var(--k-color-divider, var(--el-border-color-lighter));transition:width .2s,min-width .2s;display:flex;flex-direction:column}.sidebar-wrapper.collapsed[data-v-592f974d]{width:0;min-width:0;overflow:hidden}.content-wrapper[data-v-592f974d]{flex:1;overflow:hidden;min-width:0}.empty-state[data-v-592f974d]{display:flex;align-items:center;justify-content:center;height:100%;color:var(--k-text-light);font-size:16px}
package/lib/console.d.ts CHANGED
@@ -6,7 +6,7 @@ declare module '@koishijs/console' {
6
6
  'mahjongpub/add-managed'(contest: ConsoleExtension.ManagedContest): Promise<void>;
7
7
  'mahjongpub/update-managed'(cid: number, patch: Partial<ConsoleExtension.ManagedContest>): Promise<void>;
8
8
  'mahjongpub/remove-managed'(cid: number): Promise<void>;
9
- 'mahjongpub/search-contests'(cid: number): Promise<ConsoleExtension.ContestSummary>;
9
+ 'mahjongpub/search-contests'(cid: number, password?: string): Promise<ConsoleExtension.ContestSummary>;
10
10
  'mahjongpub/contest-info'(cid: number): Promise<ConsoleExtension.ContestInfo>;
11
11
  'mahjongpub/cls-status'(cid: number): Promise<[number, ClsStatus][]>;
12
12
  'mahjongpub/init'(cid: number, options: ConsoleExtension.InitOptions): Promise<void>;
@@ -54,6 +54,7 @@ export declare namespace ConsoleExtension {
54
54
  cid: number;
55
55
  name: string;
56
56
  round: number;
57
+ adminVerified?: boolean;
57
58
  }
58
59
  interface ContestInfo {
59
60
  cid: number;
package/lib/index.js CHANGED
@@ -540,7 +540,6 @@ var ContestManager2 = class extends import_koishi2.Service {
540
540
  const cid = +(session.channel["mahjongpub/bind-contest"] || 0);
541
541
  if (!cid) return "Unauthorized.";
542
542
  this.extra[cid] ??= new ContestExtra(ctx);
543
- this.extra[cid].subscribers[session.cid] ||= true;
544
543
  if (options.clear) this.extra[cid].stopCls.clear();
545
544
  if (options.type) this.extra[cid].type = options.type;
546
545
  if (!(0, import_koishi2.isNullable)(options.ver)) this.extra[cid].ver = options.ver;
@@ -551,13 +550,22 @@ var ContestManager2 = class extends import_koishi2.Service {
551
550
  await this.persistExtra(cid);
552
551
  return "Finished.";
553
552
  });
554
- ctx.command("mahjongpub.manager.unsubscribe").channelFields(["mahjongpub/bind-contest"]).option("clear", "-c").action(async ({ session, options }) => {
553
+ ctx.command("mahjongpub.manager.subscribe").channelFields(["mahjongpub/bind-contest"]).action(async ({ session }) => {
555
554
  const cid = +(session.channel["mahjongpub/bind-contest"] || 0);
556
555
  if (!cid) return "Unauthorized.";
557
556
  this.extra[cid] ??= new ContestExtra(ctx);
558
- this.extra[cid].subscribers[session.cid] = false;
557
+ this.extra[cid].subscribers[session.cid] = true;
559
558
  await this.persistExtra(cid);
560
- return "Finished.";
559
+ return "Subscribed.";
560
+ });
561
+ ctx.command("mahjongpub.manager.unsubscribe").channelFields(["mahjongpub/bind-contest"]).action(async ({ session }) => {
562
+ const cid = +(session.channel["mahjongpub/bind-contest"] || 0);
563
+ if (!cid) return "Unauthorized.";
564
+ if (this.extra[cid]) {
565
+ delete this.extra[cid].subscribers[session.cid];
566
+ await this.persistExtra(cid);
567
+ }
568
+ return "Unsubscribed.";
561
569
  });
562
570
  ctx.command("mahjongpub.manager.deinit").channelFields(["mahjongpub/bind-contest"]).option("clear", "-c").action(async ({ session, options }) => {
563
571
  const cid = +(session.channel["mahjongpub/bind-contest"] || 0);
@@ -940,12 +948,22 @@ var ConsoleExtension = class {
940
948
  const contests = await getUserContests(this);
941
949
  await setUserContests(this, contests.filter((c) => c.cid !== cid));
942
950
  });
943
- addListener("mahjongpub/search-contests", async function(cid) {
951
+ addListener("mahjongpub/search-contests", async function(cid, password) {
944
952
  const contest = await that.mahjongpub.getContest(cid);
953
+ let adminVerified = false;
954
+ if (password) {
955
+ try {
956
+ const contestAdmin = new ContestAdmin(that.ctx, cid, password, { endpoint: that.config.endpoint });
957
+ await contestAdmin.read(true);
958
+ adminVerified = true;
959
+ } catch {
960
+ }
961
+ }
945
962
  return {
946
963
  cid: contest.cid,
947
964
  name: contest.c_name,
948
- round: contest.c_round
965
+ round: contest.c_round,
966
+ adminVerified
949
967
  };
950
968
  });
951
969
  addListener("mahjongpub/contest-info", async function(cid) {
@@ -1008,12 +1026,12 @@ var ConsoleExtension = class {
1008
1026
  that.ctx.console.broadcast("mahjongpub/log", [cid, message]);
1009
1027
  return Promise.resolve();
1010
1028
  };
1011
- if (options.type) cextra.type = options.type;
1012
- if (!(0, import_koishi3.isNullable)(options.round)) cextra.round = options.round;
1013
- if (!(0, import_koishi3.isNullable)(options.lobby)) cextra.lobby = options.lobby;
1014
- if (!(0, import_koishi3.isNullable)(options.playerIndex)) cextra.playerIndex = options.playerIndex;
1015
- if (!(0, import_koishi3.isNullable)(options.ver)) cextra.ver = options.ver;
1016
- if (!(0, import_koishi3.isNullable)(options.maxRow)) cextra.maxRow = options.maxRow;
1029
+ cextra.type = options.type ?? cextra.type;
1030
+ cextra.round = options.round;
1031
+ cextra.lobby = options.lobby;
1032
+ cextra.playerIndex = options.playerIndex;
1033
+ cextra.ver = options.ver ?? 0;
1034
+ cextra.maxRow = options.maxRow;
1017
1035
  if (options.schedules) cextra.schedules = options.schedules;
1018
1036
  cextra.stopCls.clear();
1019
1037
  cextra.setupScheduleTimers((maxRow) => {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@hieuzest/koishi-plugin-mahjongpub",
3
3
  "description": "Mahjong.pub API",
4
- "version": "0.3.4",
4
+ "version": "0.3.5",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "files": [