<template>
|
<div class="dashboard-item-wrapper">
|
<div class="dashboard-item-title-wrapper">
|
<img class="dashboard-item-title-icon" :src="icon" />
|
<div class="dashboard-item-title">{{ title }}</div>
|
</div>
|
<div class="dashboard-item-value-wrapper">
|
<div class="dashboard-item-symbol" v-if="needSymbol" v-html="showSymbol"></div>
|
<div class="dashboard-item-value">{{ value }}</div>
|
</div>
|
</div>
|
</template>
|
|
<script setup lang="ts">
|
import { computed } from 'vue';
|
|
defineOptions({
|
name: 'DashboardItem',
|
});
|
|
type Props = {
|
icon?: string;
|
title?: string;
|
value?: string | number;
|
needSymbol?: boolean;
|
symbol?: string;
|
};
|
|
const props = withDefaults(defineProps<Props>(), {
|
needSymbol: false,
|
symbol: '¥',
|
});
|
|
const replaceSpecialChar = (url: string) => {
|
url = url.replace(/"/g, '"');
|
url = url.replace(/&/g, '&');
|
url = url.replace(/</g, '<');
|
url = url.replace(/>/g, '>');
|
url = url.replace(/ /g, ' ');
|
url = url.replace(/¥/g, '¥');
|
return url;
|
};
|
|
const showSymbol = computed(() => {
|
const symbol = props.needSymbol ? replaceSpecialChar(props.symbol) : '';
|
return symbol;
|
});
|
</script>
|