<script setup lang="ts">import Settings from './components/Settings.vue'import Monitor from './components/Monitor.vue'import Analysis from './components/Analysis.vue'import Logger from './components/Logger.vue'import { useDark, useToggle } from '@vueuse/core'import { Sunny, Moon,VideoPlay,VideoPause,CircleClose } from '@element-plus/icons-vue'import { userStore } from '@/stores/counter'import api from '@/api/index'import { ref } from 'vue'import { ElMessage } from 'element-plus'const isDark = useDark()const users = userStore()isDark.value = users.dark// const toggleDark = useToggle(isDark)const logo = ref("logo")const value = ref(100)// 获取页面高度function init_page_height(){var h = document.getElementById('main')?.scrollHeight;users.pages_lo[0] =98var all_h = 2for(var i=1;i<users.pages_lo.length;i++){var r = (document.getElementById('page'+i)?.scrollHeight) / h;users.pages_lo[i] =100-(parseInt(r*100) + all_h)all_h += parseInt(r*100)}}// 初始化页面进度条const marks = ref({})function reload_marks(){marks.value = {}// console.log(users.pages_lo)for(var i=0;i<users.pages_title.length;i++){marks.value[users.pages_lo[i]] = users.pages_title[i]}// console.log(marks.value)formatTooltip(1)}import { onMounted,onBeforeUnmount,watch } from 'vue'// 定时器let timer: number | undefined;onMounted(() => {// 页面加载完成后的操作console.log('页面加载完成')init_page_height()reload_marks()get_run_state()})// 清理定时器onBeforeUnmount(() => {clearInterval(timer)})const formatTooltip = (val: number) => {var target_key = '10'for (var key in marks.value){if (val < parseInt(key)+10){target_key = key;break;}}for (var key in marks.value){if (marks.value[key].constructor == Object){marks.value[key] = marks.value[key]['label'];break;}}var label_text = marks.value[target_key]marks.value[target_key] = {style: {color: '#1989FA','font-weight': 'bold',},label: marks.value[target_key],}return label_text}function show_logo(){users.dark = isDark.valueif (isDark.value){logo.value = "logo_dark"}else{logo.value = "logo"}}function scroll_tab(event: any){var top = event.target.scrollTop;var h = event.target.scrollHeight;value.value = parseInt(100 * (h-top) / h)}// 监听元素高度变化const old_height = ref(document.getElementById('main')?.scrollHeight)function heightChange(){setTimeout(() => {var new_height = document.getElementById('main')?.scrollHeightif (old_height.value == new_height){return}else{// console.log(new_height)old_height.value = new_heightinit_page_height()reload_marks()}}, 350);}function changeTab(){var v = value.valuefor(var i=0;i<users.pages_lo.length;i++){var vv = users.pages_lo[i]if (v<vv + 6 && v> vv - 6){console.log(i)document.getElementById('page'+(i+1))?.scrollIntoView({behavior: 'smooth', // 滚动动画效果block: 'start', // 滚动到元素顶部对齐})break}}}// 开始测试const start_btn_state = ref(true)const start_btn_text = ref('开始执行')const stop_btn_state = ref(true)const stop_btn_text = ref('已停止...')const settings = ref(null);const analysis = ref(null);function start(){start_btn_state.value = truestart_btn_text.value = '启动中...'console.log(settings)settings.value.submitForm(get_run_state)analysis.value.analysis_data.filepath = settings.value.settings_data.logpathsetTimeout(() => {get_run_state()}, 1000);}function get_run_state(){api.get('/api/runner/getrun').then((response: any) => {// 请求成功处理// ...if (response.data.code == 1){ElMessage.success(response.data.msg)start_btn_state.value = truestart_btn_text.value = '正在执行'stop_btn_state.value = falsestop_btn_text.value = '停止测试'monitor.value.auto_clear_func()timer = setInterval(() => {get_monitor()}, 1000) // 每1秒调用一次接口// 开始监控document.getElementById('page'+(2))?.scrollIntoView({behavior: 'smooth', // 滚动动画效果block: 'start', // 滚动到元素顶部对齐})}else{if (response.data.code > 1){ElMessage.warning(response.data.msg)}start_btn_state.value = falsestart_btn_text.value = '开始执行'stop_btn_state.value = truestop_btn_text.value = '已停止...'}}).catch((error: any) => {// 请求失败处理// ...console.log(error)start_btn_state.value = truestart_btn_text.value = '开始执行'stop_btn_state.value = truestop_btn_text.value = '已停止...'});}const monitor = ref(null);function get_monitor(){api.get('/api/monitor/getmonitor').then((response: any) => {// 请求成功处理// ...if (response.data.code == 1){console.log(response.data.data)if (response.data.data){monitor.value.cpu_data.push(response.data.data[0])monitor.value.mem_data.push(response.data.data[1])monitor.value.refresh()}}else{if (response.data.data){monitor.value.cpu_data.push(response.data.data[0])monitor.value.mem_data.push(response.data.data[1])monitor.value.refresh()clearInterval(timer)stop()}}}).catch((error: any) => {// 请求失败处理// ...console.log(error)});}function stop(){stop_btn_state.value = trueapi.get('/api/runner/stop').then((response: any) => {// 请求成功处理// ...console.log(response)start_btn_state.value = falsestart_btn_text.value = '开始执行'stop_btn_state.value = truestop_btn_text.value = '已停止...'clearInterval(timer)ElMessage.success('执行完成')}).catch((error: any) => {// 请求失败处理// ...stop_btn_state.value = falseconsole.log(error)});}window.onresize = function(e) {setTimeout(() => {monitor.value.refresh_dom()}, 100);}</script><template><el-container style="height: 100%;"><el-header style="line-height:50px;height: 50px;border-bottom: 1px solid #dcdbdb;"><img style="height: 45px; float: left;" :src="'/src/assets/'+logo+'.png'"/><!-- <img style="height: 45px; float: left;" src='@/assets/logo.png'/> --><div class="opt" style="float: right;"><el-button type="primary" :loading="start_btn_state" plain @click="start()" :icon="VideoPlay">{{start_btn_text}}</el-button><el-button type="danger" :disabled="stop_btn_state" plain @click="stop()" :icon="CircleClose">{{stop_btn_text}}</el-button><el-switchv-model="isDark"inline-prompt:active-icon="Moon":inactive-icon="Sunny"@change="show_logo"/></div></el-header><el-container><el-aside width="100px" style="padding-left: 1%;"><div style="height: 97%; padding-top: 15px;"><el-slider v-model="value" :marks="marks" vertical :format-tooltip="formatTooltip" @change="changeTab"/></div></el-aside><el-main id="main" style="height: calc(100vh - 60px);width: 100%;" @scroll="scroll_tab" @click="heightChange()"><Settings ref="settings" id="page1"/><br><Monitor ref="monitor" id="page2"/><br><Analysis ref="analysis" id="page3"/><br><Logger ref="logger" id="page4"/></el-main></el-container></el-container></template><style scoped >.logo {display: block;margin: 0 auto 2rem;}@media (min-width: 1024px) {.logo {margin: 0 2rem 0 0;}}.dark header{border-bottom: 1px solid #5c5c5c !important;}.dark aside{border-right: 1px solid #5c5c5c !important;}::-webkit-scrollbar {width: 8px;border-radius: 5px;}::-webkit-scrollbar-thumb {background-color: rgb(67, 161, 255);border-radius: 5px;}.opt button{margin-right: 20px;}.el-button>span{font-weight: bold !important;}</style><style deep>.el-button>span{font-weight: 600;}</style>
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。