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 @@
基本用法
-
-
-
+
+
+
半星
+
自定义 icon
-
-
-
+
自定义数量
-
-
-
+
自定义颜色
-
-
-
+
禁用状态
-
-
-
+
只读状态
-
-
-
+
绑定事件,{{ state.result }}
-
-
-
-
自定义尺寸
-
-
-
+
+
自定义尺寸 35px
+
-
+
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"
+ />
+