48 lines
		
	
	
		
			809 B
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			809 B
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | |
| <span class="ceaaebcd" :class="{ isPlus, isMinus, isZero }">
 | |
| 	<slot name="before"></slot>{{ isPlus ? '+' : '' }}{{ number(value) }}<slot name="after"></slot>
 | |
| </span>
 | |
| </template>
 | |
| 
 | |
| <script lang="ts">
 | |
| import { computed, defineComponent } from 'vue';
 | |
| import number from '@/filters/number';
 | |
| 
 | |
| export default defineComponent({
 | |
| 	props: {
 | |
| 		value: {
 | |
| 			type: Number,
 | |
| 			required: true,
 | |
| 		},
 | |
| 	},
 | |
| 
 | |
| 	setup(props) {
 | |
| 		const isPlus = computed(() => props.value > 0);
 | |
| 		const isMinus = computed(() => props.value < 0);
 | |
| 		const isZero = computed(() => props.value === 0);
 | |
| 		return {
 | |
| 			isPlus,
 | |
| 			isMinus,
 | |
| 			isZero,
 | |
| 			number,
 | |
| 		};
 | |
| 	},
 | |
| });
 | |
| </script>
 | |
| 
 | |
| <style lang="scss" scoped>
 | |
| .ceaaebcd {
 | |
| 	&.isPlus {
 | |
| 		color: var(--success);
 | |
| 	}
 | |
| 
 | |
| 	&.isMinus {
 | |
| 		color: var(--error);
 | |
| 	}
 | |
| 
 | |
| 	&.isZero {
 | |
| 		opacity: 0.5;
 | |
| 	}
 | |
| }
 | |
| </style>
 | 
