linkis-web-next/src/pages/globalHistoryManagement/drawer/index.vue (160 lines of code) (raw):
<!--
~ Licensed to the Apache Software Foundation (ASF) under one or more
~ contributor license agreements. See the NOTICE file distributed with
~ this work for additional information regarding copyright ownership.
~ The ASF licenses this file to You under the Apache License, Version 2.0
~ (the "License"); you may not use this file except in compliance with
~ the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<template>
<FDrawer
ref="drawerRef"
v-model:show="show"
placement="bottom"
@ok="show = false"
:closable="false"
:height="drawerHeight"
contentClass="history-management-drawer-content"
>
<template #title>
<div class="drawer-title">
<div class="buttons">
<div class="button" @click="expandDrawer" v-if="!isFullScreen">
{{ $t('message.common.fullScreen') }}
</div>
<div class="button" @click="foldDrawer" v-else>
{{ $t('message.linkis.fold') }}
</div>
<div class="delimiter"></div>
<div class="button" @click="show = false">
{{ $t('message.linkis.close') }}
</div>
</div>
<div class="title-text">
{{ $t('message.linkis.jobId') }}:{{ tableRawData?.taskID }}
</div>
<FTabs @change="onDrawerTabChange" class="drawer-tabs" v-model="activeDrawerTabPane">
<template v-for="tab in tabs" :key="tab.name">
<FTabPane :name="t(tab.name)" :value="tab.value" />
</template>
</FTabs>
</div>
</template>
<template #default>
<task-logs v-if="activeDrawerTabPane === 1" :task="task" :isFullScreen="isFullScreen" />
<task-results v-if="activeDrawerTabPane === 2" :task="task" :isFullScreen="isFullScreen" />
<task-details v-if="activeDrawerTabPane === 3" :task="task" :params="params" :isFullScreen="isFullScreen" />
</template>
</FDrawer>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { useI18n } from 'vue-i18n';
import TaskLogs from './taskLogs.vue';
import TaskDetails from './taskDetails.vue';
import TaskResults from './taskResults.vue';
import api from '@/service/api';
const { t } = useI18n();
enum TAB_PANE_VALUE {
'TASK_LOG' = 1,
'TASK_RESULT' = 2,
'ENGINE_LOG' = 3,
}
const tabs = [
{ name: 'message.linkis.log', value: TAB_PANE_VALUE.TASK_LOG },
{ name: 'message.linkis.result', value: TAB_PANE_VALUE.TASK_RESULT },
{ name: 'message.linkis.detail', value: TAB_PANE_VALUE.ENGINE_LOG },
];
const activeDrawerTabPane = ref(TAB_PANE_VALUE.TASK_LOG);
const show = ref(false);
const tableRawData = ref<Record<string, string | number>>();
const drawerHeight = ref(520);
const drawerRef = ref();
const task = ref();
const params = ref();
const isFullScreen = ref(false);
const formatDate = (date: Date) => {
const year = date.getFullYear();
const month = (date.getMonth() + 1).toString().padStart(2, '0');
const day = date.getDate().toString().padStart(2, '0');
const hours = date.getHours().toString().padStart(2, '0');
const minutes = date.getMinutes().toString().padStart(2, '0');
const seconds = date.getSeconds().toString().padStart(2, '0');
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}
const open = async (rawData: Record<string, string | number>) => {
tableRawData.value = rawData;
try {
const jobhistory = await api.fetch(`/jobhistory/${tableRawData.value.taskID}/get`, 'get')
task.value = jobhistory.task;
let url = '/linkisManager/ecinfo/ecrHistoryList?';
const endDate = new Date();
const startDate = new Date();
startDate.setMonth(startDate.getMonth() - 3);
url += `instance=${task.value.engineInstance}&startDate=${formatDate(startDate)}&endDate=${formatDate(endDate)}`;
const rst = await api.fetch(url,'get');
params.value = rst.engineList[0];
} catch (errorMsg) {
window.console.error(errorMsg)
}
activeDrawerTabPane.value = TAB_PANE_VALUE.TASK_LOG;
show.value = true;
};
const expandDrawer = () => {
drawerHeight.value = document.body.clientHeight;
isFullScreen.value = true;
};
const foldDrawer = () => {
drawerHeight.value = 520;
isFullScreen.value = false;
};
const onDrawerTabChange = (value: TAB_PANE_VALUE) => {
activeDrawerTabPane.value = value;
};
defineExpose({
open,
});
</script>
<style lang="less">
.history-management-drawer-content {
.fes-drawer-header {
padding: 0;
.fes-tabs-tab-pane-wrapper {
display: none;
}
}
.fes-scrollbar-container {
padding: 0;
}
}
</style>
<style scoped lang="less">
.drawer-title {
width: 100%;
position: relative;
.buttons {
position: absolute;
right: 16px;
top: 5px;
display: flex;
gap: 12px;
font-size: 14px;
color: #63656f;
line-height: 22px;
font-weight: 400;
.delimiter {
width: 1px;
height: 16px;
background: #e3e8ee;
transform: translateY(3px);
}
.button {
cursor: pointer;
}
}
.title-text {
height: 32px;
padding: 6px 20px;
font-family: PingFangSC-Medium;
font-size: 14px;
color: #0f1222;
font-weight: bold;
}
.drawer-tabs {
background-color: #f8f9fc;
padding-left: 4px;
}
}
</style>