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 @@ 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 @@ - +