1
This commit is contained in:
1
package/component/es/rate/index.css
Normal file
1
package/component/es/rate/index.css
Normal file
@@ -0,0 +1 @@
|
||||
.layui-rate,.layui-rate *{display:inline-block;vertical-align:middle}.layui-rate{padding:10px 5px 10px 0;font-size:0}.layui-rate li i.layui-icon{font-size:20px;color:#ffb800;margin-right:5px;transition:all .3s;-webkit-transition:all .3s}.layui-rate li i:hover{cursor:pointer;transform:scale(1.12);-webkit-transform:scale(1.12)}.layui-rate[readonly] li i:hover{cursor:default;transform:scale(1)}.layui-rate-clear-icon{display:inline-block;color:#c6c6c6;padding-top:3px;font-size:18px;vertical-align:middle}.layui-rate-clear-icon:hover{cursor:pointer;color:#ff4949}
|
||||
119
package/component/es/rate/index.js
Normal file
119
package/component/es/rate/index.js
Normal file
@@ -0,0 +1,119 @@
|
||||
import { w as withInstall } from "../badge/index2.js";
|
||||
import { defineComponent, ref, computed, watch, openBlock, createElementBlock, normalizeClass, createElementVNode, Fragment, renderList, unref, normalizeStyle, renderSlot, createTextVNode, toDisplayString, createCommentVNode } from "vue";
|
||||
var index = /* @__PURE__ */ (() => ".layui-rate,.layui-rate *{display:inline-block;vertical-align:middle}.layui-rate{padding:10px 5px 10px 0;font-size:0}.layui-rate li i.layui-icon{font-size:20px;color:#ffb800;margin-right:5px;transition:all .3s;-webkit-transition:all .3s}.layui-rate li i:hover{cursor:pointer;transform:scale(1.12);-webkit-transform:scale(1.12)}.layui-rate[readonly] li i:hover{cursor:default;transform:scale(1)}.layui-rate-clear-icon{display:inline-block;color:#c6c6c6;padding-top:3px;font-size:18px;vertical-align:middle}.layui-rate-clear-icon:hover{cursor:pointer;color:#ff4949}\n")();
|
||||
const _hoisted_1 = ["onMousemove", "onClick"];
|
||||
const _hoisted_2 = {
|
||||
key: 0,
|
||||
class: "layui-inline"
|
||||
};
|
||||
const __default__ = {
|
||||
name: "LayRate"
|
||||
};
|
||||
const _sfc_main = defineComponent({
|
||||
...__default__,
|
||||
props: {
|
||||
theme: null,
|
||||
length: { default: 5 },
|
||||
modelValue: { default: 0 },
|
||||
readonly: { type: [Boolean, String], default: false },
|
||||
half: { type: Boolean, default: false },
|
||||
text: { type: Boolean, default: false },
|
||||
isBlock: { type: Boolean, default: false },
|
||||
allowClear: { type: Boolean, default: false },
|
||||
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(__props, { emit }) {
|
||||
const props = __props;
|
||||
const currentValue = ref(props.modelValue);
|
||||
const tempValue = ref(currentValue.value);
|
||||
const isHalf = computed(() => props.half && Math.round(currentValue.value) !== currentValue.value);
|
||||
watch(() => props.modelValue, () => {
|
||||
currentValue.value = props.modelValue;
|
||||
tempValue.value = props.modelValue;
|
||||
});
|
||||
const getValue = function(index2, event) {
|
||||
if (!props.half) {
|
||||
return index2;
|
||||
}
|
||||
return index2 - (event.offsetX <= event.target.offsetWidth / 2 ? 0.5 : 0);
|
||||
};
|
||||
const mousemove = function(index2, event) {
|
||||
if (props.readonly) {
|
||||
return false;
|
||||
}
|
||||
currentValue.value = getValue(index2, event);
|
||||
};
|
||||
const mouseleave = function() {
|
||||
if (props.readonly) {
|
||||
return false;
|
||||
}
|
||||
currentValue.value = tempValue.value;
|
||||
};
|
||||
const action = function(index2, event) {
|
||||
if (props.readonly) {
|
||||
return false;
|
||||
}
|
||||
currentValue.value = getValue(index2, event);
|
||||
tempValue.value = currentValue.value;
|
||||
emit("update:modelValue", currentValue.value);
|
||||
emit("select", currentValue.value);
|
||||
};
|
||||
const showClearIcon = computed(() => !props.readonly && props.allowClear);
|
||||
const clearRate = function() {
|
||||
tempValue.value = 0;
|
||||
currentValue.value = 0;
|
||||
emit("clear", currentValue.value);
|
||||
};
|
||||
return (_ctx, _cache) => {
|
||||
return openBlock(), createElementBlock("div", {
|
||||
class: normalizeClass(__props.isBlock ? "layui-block" : "layui-inline")
|
||||
}, [
|
||||
createElementVNode("ul", {
|
||||
class: "layui-rate",
|
||||
onMouseleave: mouseleave
|
||||
}, [
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(__props.length, (index2) => {
|
||||
return openBlock(), createElementBlock("li", {
|
||||
key: index2,
|
||||
class: "layui-inline",
|
||||
onMousemove: ($event) => mousemove(index2, $event),
|
||||
onClick: ($event) => action(index2, $event)
|
||||
}, [
|
||||
index2 <= Math.ceil(currentValue.value) ? (openBlock(), createElementBlock("i", {
|
||||
key: 0,
|
||||
class: normalizeClass([
|
||||
"layui-icon",
|
||||
`${__props.icons[__props.icons.length - (unref(isHalf) && index2 === Math.ceil(currentValue.value) ? 2 : 1)]}`
|
||||
]),
|
||||
style: normalizeStyle({ color: __props.theme })
|
||||
}, null, 6)) : (openBlock(), createElementBlock("i", {
|
||||
key: 1,
|
||||
class: normalizeClass(["layui-icon"].concat(__props.icons[0])),
|
||||
style: normalizeStyle({ color: __props.theme })
|
||||
}, null, 6))
|
||||
], 40, _hoisted_1);
|
||||
}), 128))
|
||||
], 32),
|
||||
__props.text ? (openBlock(), createElementBlock("span", _hoisted_2, [
|
||||
renderSlot(_ctx.$slots, "default", { value: currentValue.value }, () => [
|
||||
createTextVNode(toDisplayString(currentValue.value + "\u661F"), 1)
|
||||
])
|
||||
])) : createCommentVNode("", true),
|
||||
unref(showClearIcon) ? (openBlock(), createElementBlock("i", {
|
||||
key: 1,
|
||||
class: normalizeClass(["layui-icon", "layui-rate-clear-icon", __props.clearIcon]),
|
||||
onClick: clearRate,
|
||||
title: "\u6E05\u9664\u8BC4\u5206"
|
||||
}, null, 2)) : createCommentVNode("", true)
|
||||
], 2);
|
||||
};
|
||||
}
|
||||
});
|
||||
const component = withInstall(_sfc_main);
|
||||
export { component as default };
|
||||
Reference in New Issue
Block a user