From 6de5d36126c49fbab5c508b146050feabce69fcf Mon Sep 17 00:00:00 2001
From: h_mo <596417202@qq.com>
Date: Sun, 2 Oct 2022 20:29:07 +0800
Subject: [PATCH] feat: FontAwesomeIcon counter
---
src/components/FontAwesomeIcon/index.vue | 38 ++++++++++++++++++++--
src/components/FontAwesomeIcon/props.ts | 21 ++++++++++++
src/demo/example/fontAwesomeIcon/index.vue | 6 ++--
3 files changed, 59 insertions(+), 6 deletions(-)
diff --git a/src/components/FontAwesomeIcon/index.vue b/src/components/FontAwesomeIcon/index.vue
index 7aae758..d9c5fd7 100644
--- a/src/components/FontAwesomeIcon/index.vue
+++ b/src/components/FontAwesomeIcon/index.vue
@@ -18,7 +18,8 @@
const singleBeat = props.beat && !props.fade;
const singleFade = !props.beat && props.fade;
- const BeatFade = props.beat && props.fade;
+ const beatFade = props.beat && props.fade;
+ const count = props.counter > props.counterMax ? `${props.counterMax}+` : props.counter;
const wrapClassObject = [
props.float ? `fa-pull-${props.float}` : '',
props.border ? 'fa-border' : '',
@@ -26,7 +27,7 @@
props.rotateFlip ? `fa-flip-${props.rotateFlip}` : '',
singleBeat ? `fa-beat` : '',
singleFade ? `fa-fade` : '',
- BeatFade ? `fa-beat-fade` : '',
+ beatFade ? `fa-beat-fade` : '',
props.bounce ? 'fa-bounce' : '',
props.flip ? 'fa-flip' : '',
props.shake ? 'fa-shake' : '',
@@ -36,6 +37,7 @@
props.stack ? 'fa-stack' : '',
props.stackChild ? `fa-stack-${props.stackX}x` : '',
props.stackInverse ? 'fa-inverse' : '',
+ props.counter ? 'layers' : '',
];
const wrapStyleObject = Object.assign(
@@ -46,7 +48,7 @@
props.rotate ? { '--fa-rotate-angle': `${props.rotate}deg` } : {},
singleBeat ? { '--fa-beat-scale': `${props.scale}` } : {},
singleFade ? { '--fa-fade-opacity': `${props.opacity}` } : {},
- BeatFade
+ beatFade
? { '--fa-beat-fade-scale': `${props.scale}`, '--fa-beat-fade-opacity': `${props.opacity}` }
: {},
props.bounce
@@ -113,6 +115,10 @@
'font-size': props.size ? `${props.size}rpx` : false,
});
+ const counterStyleObject = {
+ '--fa-counter-background-color': props.counterMgColor,
+ };
+
const onClick = () => {
emit('click');
};
@@ -121,20 +127,46 @@
+ {{ count }}
+ {{ count }}
diff --git a/src/components/FontAwesomeIcon/props.ts b/src/components/FontAwesomeIcon/props.ts
index 142f6d3..74f0445 100644
--- a/src/components/FontAwesomeIcon/props.ts
+++ b/src/components/FontAwesomeIcon/props.ts
@@ -324,4 +324,25 @@ export const FontAwesomeIconProps = {
type: String,
default: '#fff',
},
+ /** icon counter
+ * @description 角标计数
+ */
+ counter: {
+ type: [String, Number, Boolean],
+ default: false,
+ },
+ /** icon counterMax
+ * @description 角标计数最大值
+ */
+ counterMax: {
+ type: Number,
+ default: 99,
+ },
+ /** icon counterMax
+ * @description 角标计数背景色
+ */
+ counterMgColor: {
+ type: String,
+ default: '#ff253a',
+ },
};
diff --git a/src/demo/example/fontAwesomeIcon/index.vue b/src/demo/example/fontAwesomeIcon/index.vue
index 0973e88..9eed43a 100644
--- a/src/demo/example/fontAwesomeIcon/index.vue
+++ b/src/demo/example/fontAwesomeIcon/index.vue
@@ -5,13 +5,13 @@
mode-不同风格
- solid
+ solid
regular
light
thin
duotone
sharp-直角图标
- sharp
+ sharp
mode(brands)-品牌logo
bilibili
@@ -136,7 +136,7 @@
-
+