From d36322b62a52c280934db93bdaaa1021dad30cdb Mon Sep 17 00:00:00 2001 From: richard1015 <51844712@qq.com> Date: Fri, 19 Mar 2021 17:30:05 +0800 Subject: [PATCH] refactor: rate --- src/packages/rate/demo.vue | 68 +++++++++------------- src/packages/rate/doc.md | 110 ++++++++++++++++------------------- src/packages/rate/index.scss | 32 ++++------ src/packages/rate/index.vue | 75 ++++++++++++------------ 4 files changed, 125 insertions(+), 160 deletions(-) diff --git a/src/packages/rate/demo.vue b/src/packages/rate/demo.vue index 94b74c832..f3dc40453 100644 --- a/src/packages/rate/demo.vue +++ b/src/packages/rate/demo.vue @@ -1,58 +1,49 @@ - + diff --git a/src/packages/rate/doc.md b/src/packages/rate/doc.md index f769ce4a0..cd4947ce6 100644 --- a/src/packages/rate/doc.md +++ b/src/packages/rate/doc.md @@ -18,98 +18,86 @@ app.use(Rate); ### 基础用法 -```html - - +``` html + +``` + +``` javascript +import { ref } from 'vue'; +setup() { + const value = ref(3); + return { value } +} ``` ### 自定义icon -```html - - +``` html + ``` ### 自定义数量 -```html - - +``` html + ``` ### 自定义颜色 -```html - - +``` html + ``` ### 禁用状态 -```html - - +``` html + ``` ### 只读 -```html - - +``` html + ``` - - ### 绑定事件 -```html - - +``` html + +``` +``` javascript +import { ref } from 'vue'; +setup() { + const value = ref(3); + const onChange = (val)=>{ + Toast.text(val); + } + return { value } +} ``` - ### 自定义尺寸 -```html - - +``` html + ``` ## Prop -| 字段 | 说明 | 类型 | 默认值 -| ----- | ----- | ----- | ----- -| total | star 总数 | Number | 5 -| value | 当前 star 数,可使用 v-model 双向绑定数据 | Number | 0 -| size | star 大小 | Number | 25 -| spacing | 两个star的间距 | Number | 20 -| read-only | 是否只读 | Boolean | false -| unchecked-icon | 使用图标(未选中) | String | - -| checked-icon | 使用图标(选中) | String | - +| 字段 | 说明 | 类型 | 默认值 | +|----------------|-------------------------------------------|---------|-------------| +| count | star 总数 | Number | 5 | +| v-model | 当前 star 数,可使用 v-model 双向绑定数据 | Number | - | +| icon-size | star 大小 | Number | 18 | +| active-color | 自定义图标颜色 | String | #FA200C | +| unchecked-icon | 使用图标(未选中) | String | star-n | +| checked-icon | 使用图标(选中) | String | star-fill-n | +| allow-half | 是否半星 | Boolean | false | +| readonly | 是否只读 | Boolean | false | +| disabled | 是否禁用 | Boolean | false | +| spacing | 间距 | Number | 20 | ## Event -| 字段 | 说明 | 回调参数 -|----- | ----- | ----- -| click | 点击star时触发 | star的index \ No newline at end of file +| 字段 | 说明 | 回调参数 | +|--------|----------------------------|----------| +| change | 当前分值修改时时触发的事件 | 当前值 | \ No newline at end of file diff --git a/src/packages/rate/index.scss b/src/packages/rate/index.scss index 34d27b72d..e97e77519 100644 --- a/src/packages/rate/index.scss +++ b/src/packages/rate/index.scss @@ -1,27 +1,19 @@ -@function toRGB($color) { - @return 'rgb(' + red($color) + ', ' + green($color) + ', ' + blue($color) + - ')'; -} - -@mixin nut-rate-bg($color) { - $svgColor: toRGB($color); - background: url("data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='16' height='16' viewBox='0 0 16 16'%3E %3Cpath fill='#{$svgColor}' d='M16 6.204l-5.528-0.803-2.472-5.009-2.472 5.009-5.528 0.803 4 3.899-0.944 5.505 4.944-2.599 4.944 2.599-0.944-5.505 4-3.899zM8 11.773l-3.492 1.836 0.667-3.888-2.825-2.753 3.904-0.567 1.746-3.537 1.746 3.537 3.904 0.567-2.825 2.753 0.667 3.888-3.492-1.836z'%3E%3C/path%3E %3C/svg%3E") - center no-repeat; -} - -@mixin nut-rate-active-bg($color) { - $svgColor: toRGB($color); - background-image: url("data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='16' height='16' viewBox='0 0 16 16'%3E %3Cpath fill='#{$svgColor}' d='M16 6.204l-5.528-0.803-2.472-5.009-2.472 5.009-5.528 0.803 4 3.899-0.944 5.505 4.944-2.599 4.944 2.599-0.944-5.505 4-3.899z'%3E%3C/path%3E %3C/svg%3E"); -} - .nut-rate { - .nut-rate-item { - display: inline-block; - vertical-align: bottom; - margin-right: 15px; + display: flex; + &-item { + flex-shrink: 0; + position: relative; background-size: cover; &:last-child { margin-right: 0; } + + &__icon-half { + position: absolute; + width: 50%; + left: 0; + top: 0; + overflow: hidden; + } } } diff --git a/src/packages/rate/index.vue b/src/packages/rate/index.vue index 6c8f506b7..0d91e247f 100644 --- a/src/packages/rate/index.vue +++ b/src/packages/rate/index.vue @@ -2,40 +2,43 @@ - + :size="iconSize" + :color="n <= modelValue ? (disabled ? '#ccc' : activeColor) : '#ccc'" + :name="n <= modelValue ? checkedIcon : uncheckedIcon" + /> +