@farris/ui-vue
Version:
Farris Vue, a Farris Design based Vue3 component library.
169 lines (168 loc) • 5.61 kB
JavaScript
import { defineComponent as q, ref as l, computed as M, watch as L, createVNode as s, withModifiers as S, createTextVNode as C } from "vue";
import { withInstall as G } from "../common/index.esm.js";
const J = ["很不满意", "不满意", "一般", "满意", "非常满意"], K = {
/** 星星大小 */
size: { type: String, default: "large" },
/** 启用半颗星模式 */
enableHalf: { type: Boolean, default: !1 },
/** 启用再次点击后清除 */
enableClear: { type: Boolean, default: !1 },
/** 只读 */
disabled: { type: Boolean, default: !1 },
/** 分制 */
pointSystem: { type: Number, default: 5 },
/** 星星亮色 */
lightColor: { type: String, default: "" },
/** 星星暗色(底色) */
darkColor: { type: String, default: "" },
/** 图案样式 */
iconClass: { type: String, default: "f-icon-star" },
/** 星星个数 */
numOfStar: { type: Number, default: 5 },
/** 禁用单个星星的文字提示 */
toolTipDisabled: { type: Boolean, default: !0 },
/** 默认的满意度文案 */
toolTipContents: { type: Array, default: J },
/** 启用评分 */
enableScore: { type: Boolean, default: !0 },
/** 启用满意度 */
enableSatisfaction: { type: Boolean, default: !1 },
/**
* 绑定值
*/
modelValue: { type: Number, default: 0 }
}, Q = /* @__PURE__ */ q({
name: "FRate",
props: K,
emits: ["selectedValue", "update:modelValue"],
setup(a, v) {
const t = l(a.size), k = l(a.enableHalf), V = l(a.enableClear), x = l(a.disabled), w = l(a.pointSystem), A = l(a.lightColor), W = l(a.darkColor), T = l(a.iconClass), y = l(a.numOfStar), z = l(a.toolTipDisabled), N = l(a.toolTipContents), D = l(a.enableScore), O = l(a.enableSatisfaction);
let r;
const i = l(0), d = l(0), o = l(0), u = l(a.modelValue);
let f = 1, c, m, g;
const p = 4;
function F() {
const e = y.value;
g = [];
for (let n = 1; n <= e; n++)
g.push({
id: n
});
}
function B() {
let e;
k.value ? e = Math.ceil(u.value / f) : e = u.value, d.value = (r * u.value + Math.floor(u.value) * p) / f, c = N.value[e - 1];
}
function H() {
switch (t.value) {
case "small":
r = 14;
break;
case "middle":
r = 16;
break;
case "large":
r = 18;
break;
case "extraLarge":
r = 24;
break;
}
F(), y.value && (f = w.value / y.value), u.value && B();
}
H();
function I(e) {
return e.className.indexOf("f-icon") !== -1;
}
function j() {
return u.value === o.value && V.value && d.value !== 0 ? (d.value = 0, u.value = 0, m = null, i.value = 0, o.value = 0, v.emit("selectedValue", u.value), v.emit("update:modelValue", u.value), !0) : !1;
}
function R(e, n, b) {
if (!x.value && ((e.movementX || e.movementY) && (O.value && (c = N.value[n - 1]), e.offsetX < r / 2 && k.value === !0 ? (i.value = r * n - r / 2 + p * (n - 1), o.value = f * n - f / 2) : (i.value = r * n + p * (n - 1), o.value = f * n)), b === !0)) {
if (j())
return;
u.value = o.value, d.value = i.value, m = c, v.emit("update:modelValue", u.value), v.emit("selectedValue", u.value);
}
}
function h(e, n) {
var b;
if (I(e.target) && e.target) {
const Y = parseInt((b = e.target) == null ? void 0 : b.id);
R(e, Y, n);
}
}
const X = M(() => o.value ? o.value + "分" : u.value + "分"), E = M(() => ({
width: (i.value || d.value) + "px"
}));
function P() {
i.value = 0, o.value = u.value;
}
return L(() => a.modelValue, (e) => {
o.value = e, u.value = e, B();
}), L(() => [a.disabled, a.enableClear], ([e, n]) => {
x.value = e, V.value = n;
}), () => s("div", {
class: "farris-star-rating",
onMouseover: S((e) => h(e, !1), ["prevent"]),
onMousemove: S((e) => h(e, !1), ["prevent"]),
onMouseleave: S((e) => P(), ["prevent"]),
onClick: S((e) => h(e, !0), ["prevent"])
}, [s("div", {
class: "star-light-area",
style: E.value
}, [g.map((e) => s("span", {
class: ["f-icon default-light-color ", T.value, {
"f-star-sm": t.value === "small"
}, {
"f-star-md": t.value === "middle"
}, {
"f-star-lg": t.value === "large"
}, {
"f-star-exlarge": t.value === "extraLarge"
}, {
disabled: z.value
}],
id: e.id,
style: {
color: A.value
}
}, null))]), s("div", {
class: ["star-dark-area", {
small: t.value === "small"
}, {
middle: t.value === "middle"
}, {
large: t.value === "large"
}]
}, [g.map((e) => s("span", {
class: ["f-icon default-dark-color", T.value, {
"f-star-sm": t.value === "small"
}, {
"f-star-md": t.value === "middle"
}, {
"f-star-lg": t.value === "large"
}, {
"f-star-exlarge": t.value === "extraLarge"
}],
id: e.id,
style: {
color: W.value
}
}, null))]), s("div", {
class: ["f-utils-fill", {
"font-small": t.value === "small"
}, {
"font-middle": t.value === "middle"
}, {
"font-large": t.value === "large"
}, {
"font-exlarge": t.value === "extraLarge"
}]
}, [D.value && s("span", null, [C(" "), X.value, C(" ")]), O.value && (m || c) && s("span", null, [C(" "), c || m])])]);
}
}), _ = G(Q);
export {
Q as FRate,
_ as default,
K as rateProps
};