@layui/layui-vue
Version:
a component library for Vue 3 base on layui-vue
30 lines (29 loc) • 2.64 kB
JavaScript
import { defineComponent as x, ref as m, computed as v, watch as w, openBlock as o, createElementBlock as t, normalizeClass as s, createElementVNode as S, Fragment as I, renderList as N, normalizeStyle as p, renderSlot as z, createTextVNode as E, toDisplayString as L, createCommentVNode as h } from "vue";
/* empty css */
const _ = ["onMousemove", "onClick"], $ = { key: 0 }, F = x({ name: "LayRate", __name: "index", props: { theme: {}, length: { default: 5 }, modelValue: { default: 0 }, readonly: { type: [Boolean, String], default: !1 }, half: { type: Boolean, default: !1 }, text: { type: Boolean, default: !1 }, isBlock: { type: Boolean, default: !1 }, allowClear: { type: Boolean, default: !1 }, clearIcon: { default: "layui-icon-close-fill" }, icons: { default: () => ["layui-icon-rate", "layui-icon-rate-half", "layui-icon-rate-solid"] } }, emits: ["update:modelValue", "select", "clear"], setup(k, { emit: V }) {
const a = k, n = V, e = m(a.modelValue), i = m(e.value), B = v(() => a.half && Math.round(e.value) !== e.value);
w(() => a.modelValue, () => {
e.value = a.modelValue, i.value = a.modelValue;
});
const y = function(l, c) {
return a.half ? l - (c.offsetX <= c.target.offsetWidth / 2 ? 0.5 : 0) : l;
}, C = function() {
if (a.readonly)
return !1;
e.value = i.value;
}, g = v(() => !a.readonly && a.allowClear), M = function() {
i.value = 0, e.value = 0, n("update:modelValue", 0), n("clear", e.value);
};
return (l, c) => (o(), t("div", { class: s(l.isBlock ? "layui-block" : "layui-inline") }, [S("ul", { class: "layui-rate", onMouseleave: C }, [(o(!0), t(I, null, N(l.length, (u) => (o(), t("li", { key: u, onMousemove: (r) => function(d, f) {
if (a.readonly)
return !1;
e.value = y(d, f);
}(u, r), onClick: (r) => function(d, f) {
if (a.readonly)
return !1;
e.value = y(d, f), i.value = e.value, n("update:modelValue", e.value), n("select", e.value);
}(u, r) }, [u <= Math.ceil(e.value) ? (o(), t("i", { key: 0, class: s(["layui-icon", `${l.icons[l.icons.length - (B.value && u === Math.ceil(e.value) ? 2 : 1)]}`]), style: p({ color: l.theme }) }, null, 6)) : (o(), t("i", { key: 1, class: s(["layui-icon"].concat(l.icons[0])), style: p({ color: l.theme }) }, null, 6))], 40, _))), 128))], 32), l.text ? (o(), t("span", $, [z(l.$slots, "default", { value: e.value }, () => [E(L(e.value + "星"), 1)])])) : h("", !0), g.value && a.modelValue > 0 ? (o(), t("i", { key: 1, class: s(["layui-icon", "layui-rate-clear-icon", l.clearIcon]), onClick: M, title: "清除评分" }, null, 2)) : h("", !0)], 2));
} });
export {
F as default
};