uv-ui
Version:
基于vue3的移动端组件库
65 lines (64 loc) • 2.03 kB
JavaScript
import { computed as f, watch as w, openBlock as v, createElementBlock as B, renderSlot as x, unref as m, createTextVNode as C, toDisplayString as N } from "vue";
import { useCountDown as b } from "../../hooks/useCountDown.js";
import "./count-down.vue_vue_type_style_index_0_lang.js";
const k = { class: "uv-count-down" }, F = {
name: "UvCountDown"
}, E = /* @__PURE__ */ Object.assign(F, {
props: {
autoStart: {
type: Boolean,
default: !0
},
time: {
type: [Number, String],
default: 0
},
format: {
type: String,
default: "HH:mm:ss"
},
millisecond: {
type: Boolean,
default: !1
}
},
emits: ["change", "finish"],
setup(h, { expose: _, emit: d }) {
const t = h;
function n(e, i = 2) {
let s = e + "";
for (; s.length < i; )
s = "0" + s;
return s;
}
function g(e, i) {
const { days: s } = i;
let { hours: l, minutes: c, seconds: u, milliseconds: S } = i;
if (e.includes("DD") ? e = e.replace("DD", n(s)) : l += s * 24, e.includes("HH") ? e = e.replace("HH", n(l)) : c += l * 60, e.includes("mm") ? e = e.replace("mm", n(c)) : u += c * 60, e.includes("ss") ? e = e.replace("ss", n(u)) : S += u * 1e3, e.includes("S")) {
const o = n(S, 3);
e.includes("SSS") ? e = e.replace("SSS", o) : e.includes("SS") ? e = e.replace("SS", o.slice(0, 2)) : e = e.replace("S", o.charAt(0));
}
return e;
}
const { start: p, pause: D, reset: y, current: r } = b({
time: +t.time,
millisecond: t.millisecond,
onChange: (e) => d("change", e),
onFinish: () => d("finish")
}), H = f(() => g(t.format, r.value)), a = () => {
y(+t.time), t.autoStart && p();
};
return w(() => t.time, a, { immediate: !0 }), _({
start: p,
pause: D,
reset: a
}), (e, i) => (v(), B("div", k, [
x(e.$slots, "default", { timeData: m(r) }, () => [
C(N(m(H)), 1)
])
]));
}
});
export {
E as default
};