9 changed files with 345 additions and 45 deletions
			
			
		| @ -0,0 +1,69 @@ | |||
| <template> | |||
|     <span v-if="isNum" ref="output">{{ output }}</span> <span v-if="isNum">{{ unit }}</span> | |||
|     <span v-else>{{ value }}</span> | |||
| </template> | |||
| 
 | |||
| <script> | |||
| 
 | |||
| import {sleep} from "../../server/util"; | |||
| 
 | |||
| export default { | |||
| 
 | |||
|     props: { | |||
|         value: [String, Number], | |||
|         time: { | |||
|             Number, | |||
|             default: 0.3, | |||
|         }, | |||
|         unit: { | |||
|             String, | |||
|             default: "ms", | |||
|         } | |||
|     }, | |||
| 
 | |||
|     mounted() { | |||
|         this.output = this.value; | |||
|     }, | |||
| 
 | |||
|     data() { | |||
|         return { | |||
|             output: "", | |||
|             frameDuration: 30, | |||
|         } | |||
|     }, | |||
| 
 | |||
|     methods: { | |||
| 
 | |||
|     }, | |||
| 
 | |||
|     computed: { | |||
|         isNum() { | |||
|             return typeof this.value === 'number' | |||
|         } | |||
|     }, | |||
| 
 | |||
|     watch: { | |||
|         async value(from, to) { | |||
|             let diff = to - from; | |||
|             let frames = 12; | |||
|             let step = Math.floor(diff / frames); | |||
| 
 | |||
|             if ((diff > 0 && step < 1) || (diff < 0 && step > 1) || diff === 0) { | |||
|                 // Lazy to NOT this condition, hahaha. | |||
|             } else { | |||
|                 for (let i = 1; i < frames; i++) { | |||
|                     this.output += step; | |||
|                     await sleep(15) | |||
|                 } | |||
|             } | |||
| 
 | |||
|             this.output = this.value; | |||
|         }, | |||
|     }, | |||
| 
 | |||
| } | |||
| </script> | |||
| 
 | |||
| <style scoped> | |||
| 
 | |||
| </style> | |||
| @ -0,0 +1,25 @@ | |||
| <template> | |||
|     <span>{{ displayText }}</span> | |||
| </template> | |||
| 
 | |||
| <script> | |||
| import dayjs from "dayjs"; | |||
| import relativeTime  from "dayjs/plugin/relativeTime" | |||
| dayjs.extend(relativeTime) | |||
| 
 | |||
| export default { | |||
|     props: { | |||
|         value: String, | |||
|     }, | |||
| 
 | |||
|     computed: { | |||
|         displayText() { | |||
|             return this.value | |||
|         }, | |||
|     } | |||
| } | |||
| </script> | |||
| 
 | |||
| <style scoped> | |||
| 
 | |||
| </style> | |||
| @ -0,0 +1,39 @@ | |||
| <template> | |||
|     <span class="badge rounded-pill" :class=" 'bg-' + color ">{{ text }}</span> | |||
| </template> | |||
| 
 | |||
| <script> | |||
| export default { | |||
|     props: { | |||
|         status: Number | |||
|     }, | |||
| 
 | |||
|     computed: { | |||
|         color() { | |||
|             if (this.status === 0) { | |||
|                 return "danger" | |||
|             } else if (this.status === 1) { | |||
|                 return "primary" | |||
|             } else { | |||
|                 return "secondary" | |||
|             } | |||
|         }, | |||
| 
 | |||
|         text() { | |||
|             if (this.status === 0) { | |||
|                 return "Down" | |||
|             } else if (this.status === 1) { | |||
|                 return "Up" | |||
|             } else { | |||
|                 return "Unknown" | |||
|             } | |||
|         }, | |||
|     } | |||
| } | |||
| </script> | |||
| 
 | |||
| <style scoped> | |||
|     span { | |||
|         width: 45px; | |||
|     } | |||
| </style> | |||
					Loading…
					
					
				
		Reference in new issue