vue-devui
Version:
DevUI components based on Vite and Vue3
2 lines (1 loc) • 3.07 kB
JavaScript
(function(c,u){typeof exports=="object"&&typeof module!="undefined"?u(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],u):(c=typeof globalThis!="undefined"?globalThis:c||self,u(c.index={},c.Vue))})(this,function(c,u){"use strict";const S={value:{type:Number,required:!0},format:{type:String,default:"HH:mm:ss"},prefix:{type:String,default:""},suffix:{type:String,default:""},valueStyle:{type:Object,default:()=>({})}},M=e=>{const n=new Map([["Y",0],["M",0],["D",0],["H",0],["m",0],["s",0],["S",0]]),t=Math.floor(e/(365*24*60*60*1e3)),o=Math.floor(e/(30*24*60*60*1e3)%12),s=Math.floor(e/(24*60*60*1e3)%30),a=Math.floor(e/(60*60*1e3)%24),d=Math.floor(e/(60*1e3)%60),l=Math.floor(e/1e3%60),w=e%1e3;return n.set("Y",t),n.set("M",o),n.set("D",s),n.set("H",a),n.set("m",d),n.set("s",l),n.set("S",w),n},p=(e,n)=>{const t=new Map([["Y",0],["M",0],["D",0],["H",0],["m",0],["s",0],["S",0]]),o=new Map([["Y",12],["M",30],["D",24],["H",60],["m",60],["s",1e3],["S",1]]);let s=0;for(const a of t.keys())e.has(a)?(t.set(a,(n.get(a)||0)+s),s=0):s+=(n.get(a)||0)*(o.get(a)||0);return!e.has("S")&&(n.get("S")||0)>500&&t.set("s",(t.get("s")||0)+1),t},y=e=>{const n=new Set(["Y","M","D","H","m","s","S"]),t=[];for(let o=0;o<e.length;o++){const s=e[o];t.length===0||t[t.length-1].k!==s||!n.has(s)?t.push({k:s,n:1}):t[t.length-1].n++}return t},T=e=>{const n=new Set(["Y","M","D","H","m","s","S"]),t=new Set;for(let o=0;o<e.length;o++){const s=e[o];n.has(s)&&t.add(s)}return t},D=(e,n)=>{const t=10**n-1;if(e>=t)return e;{const o=n-e.toString().length;let s="";for(let a=0;a<o;a++)s+="0";return s+e}},v=(e,n=0)=>{let t=1,o;const s=Date.now();function a(){const d=Date.now(),l=s+t*n;o=setTimeout(a,n-(d-l)),t+=1,e()}return o=setTimeout(a,n),()=>{clearTimeout(o)}};var k="",h=u.defineComponent({name:"DCountdown",props:S,emits:["onChange","onFinish"],setup(e,n){const t=u.ref(),o=T(e.format),s=y(e.format),a=u.ref(""),d=i=>{const r=new Set(["Y","M","D","H","m","s","S"]),m=s.reduce((f,g)=>r.has(g.k)?f+D(i.get(g.k)||0,g.n):f+g.k,"");a.value=m},l=()=>{const i=new Date(e.value).getTime(),r=i>new Date().getTime()?i-new Date().getTime():0,m=M(r),f=p(o,m);return!n.slots.default&&d(f),n.emit("onChange",{leftTime:r,formatTime:m,legalTime:f}),r},w=()=>{l(),!t.value&&(t.value=v(()=>{var r;l()===0&&(n.emit("onFinish"),(r=t.value)==null||r.call(t),t.value=null)},o.has("S")?100:1e3))};return u.onMounted(()=>{w()}),u.onUnmounted(()=>{var i;(i=t.value)==null||i.call(t)}),()=>u.createVNode("div",{class:"devui-countdown"},[n.slots.default?n.slots.default():u.createVNode("div",{class:"countdown-content",style:e.valueStyle},[u.createVNode("span",{class:"countdown-prefix"},[e.prefix]),u.createVNode("span",{class:"countdown-value"},[a.value]),u.createVNode("span",{class:"countdown-suffix"},[e.suffix])])])}}),H={title:"Countdown \u5012\u8BA1\u65F6",category:"\u6570\u636E\u5C55\u793A",status:"100%",install(e){e.component(h.name,h)}};c.Countdown=h,c.countdownProps=S,c.default=H,Object.defineProperty(c,"__esModule",{value:!0}),c[Symbol.toStringTag]="Module"});