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