fix: menu-badge color not correct (#4089)

pull/48/MERGE
Li Kui 2024-08-09 10:52:47 +08:00 committed by GitHub
parent 3f04f6b01f
commit de90b07b6f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 43 additions and 8 deletions

View File

@ -1,6 +1,11 @@
import { describe, expect, it } from 'vitest'; import { describe, expect, it } from 'vitest';
import { convertToHsl, convertToHslCssVar, convertToRgb } from './convert'; import {
convertToHsl,
convertToHslCssVar,
convertToRgb,
isValidColor,
} from './convert';
describe('color conversion functions', () => { describe('color conversion functions', () => {
it('should correctly convert color to HSL format', () => { it('should correctly convert color to HSL format', () => {
@ -39,3 +44,15 @@ describe('color conversion functions', () => {
expect(convertToRgb(color)).toEqual(expectedRgba); expect(convertToRgb(color)).toEqual(expectedRgba);
}); });
}); });
describe('isValidColor', () => {
it('isValidColor function', () => {
// 测试有效颜色
expect(isValidColor('blue')).toBe(true);
expect(isValidColor('#000000')).toBe(true);
// 测试无效颜色
expect(isValidColor('invalid color')).toBe(false);
expect(isValidColor()).toBe(false);
});
});

View File

@ -41,4 +41,22 @@ function convertToRgb(str: string): string {
return new TinyColor(str.replaceAll(/deg|grad|rad|turn/g, '')).toRgbString(); return new TinyColor(str.replaceAll(/deg|grad|rad|turn/g, '')).toRgbString();
} }
export { convertToHsl, convertToHslCssVar, convertToRgb, TinyColor }; /**
*
* @param {string} color -
* truefalse
*/
function isValidColor(color?: string) {
if (!color) {
return false;
}
return new TinyColor(color).isValid;
}
export {
convertToHsl,
convertToHslCssVar,
convertToRgb,
isValidColor,
TinyColor,
};

View File

@ -3,7 +3,7 @@ import type { MenuRecordBadgeRaw } from '@vben-core/typings';
import { computed } from 'vue'; import { computed } from 'vue';
import { convertToRgb } from '@vben-core/shared'; import { isValidColor } from '@vben-core/shared';
import BadgeDot from './menu-badge-dot.vue'; import BadgeDot from './menu-badge-dot.vue';
@ -15,10 +15,10 @@ const props = withDefaults(defineProps<Props>(), {});
const variantsMap: Record<string, string> = { const variantsMap: Record<string, string> = {
default: 'bg-green-500', default: 'bg-green-500',
destructive: ' bg-destructive', destructive: 'bg-destructive',
primary: 'bg-primary', primary: 'bg-primary',
success: ' bg-green-500', success: 'bg-green-500',
warning: ' bg-yellow-500', warning: 'bg-yellow-500',
}; };
const isDot = computed(() => props.badgeType === 'dot'); const isDot = computed(() => props.badgeType === 'dot');
@ -34,9 +34,9 @@ const badgeClass = computed(() => {
}); });
const badgeStyle = computed(() => { const badgeStyle = computed(() => {
if (badgeClass.value) { if (badgeClass.value && isValidColor(badgeClass.value)) {
return { return {
backgroundColor: convertToRgb(badgeClass.value), backgroundColor: badgeClass.value,
}; };
} }
return {}; return {};