diff --git a/src/locales/langs/en-us.ts b/src/locales/langs/en-us.ts
index 96dbb16..694e36d 100644
--- a/src/locales/langs/en-us.ts
+++ b/src/locales/langs/en-us.ts
@@ -302,6 +302,7 @@ const local: App.I18n.Schema = {
404: 'Page Not Found',
500: 'Server Error',
'iframe-page': 'Iframe',
+ log: 'Log',
home: 'Home',
about: 'About',
pods: 'Online Machine',
diff --git a/src/locales/langs/zh-cn.ts b/src/locales/langs/zh-cn.ts
index 391267d..81ff133 100644
--- a/src/locales/langs/zh-cn.ts
+++ b/src/locales/langs/zh-cn.ts
@@ -302,6 +302,7 @@ const local: App.I18n.Schema = {
404: '页面不存在',
500: '服务器错误',
'iframe-page': '外链页面',
+ log: '日志',
home: '首页',
about: '关于',
pods: '在线机器',
diff --git a/src/router/elegant/imports.ts b/src/router/elegant/imports.ts
index 953936a..484da15 100644
--- a/src/router/elegant/imports.ts
+++ b/src/router/elegant/imports.ts
@@ -19,6 +19,7 @@ export const views: Record Promise import("@/views/_builtin/404/index.vue"),
500: () => import("@/views/_builtin/500/index.vue"),
"iframe-page": () => import("@/views/_builtin/iframe-page/[url].vue"),
+ log: () => import("@/views/_builtin/log/index.vue"),
login: () => import("@/views/_builtin/login/index.vue"),
about: () => import("@/views/about/index.vue"),
group: () => import("@/views/group/index.vue"),
diff --git a/src/router/elegant/routes.ts b/src/router/elegant/routes.ts
index f518d7a..1f51a26 100644
--- a/src/router/elegant/routes.ts
+++ b/src/router/elegant/routes.ts
@@ -120,6 +120,17 @@ export const generatedRoutes: GeneratedRoute[] = [
}
]
},
+ {
+ name: 'log',
+ path: '/log',
+ component: 'layout.blank$view.log',
+ meta: {
+ title: 'log',
+ i18nKey: 'route.log',
+ icon: 'carbon:batch-job',
+ hideInMenu: true
+ }
+ },
{
name: 'login',
path: '/login/:module(pwd-login)?',
diff --git a/src/store/modules/log/index.ts b/src/store/modules/log/index.ts
new file mode 100644
index 0000000..7838896
--- /dev/null
+++ b/src/store/modules/log/index.ts
@@ -0,0 +1,40 @@
+import { defineStore } from 'pinia';
+import { ref } from 'vue';
+import { localStg } from '@/utils/storage';
+
+export const useLogStore = defineStore('log', () => {
+ const taskName = ref();
+ const taskBatchId = ref();
+ const data = ref([]);
+
+ function setTaskInfo(name: string, id: string) {
+ taskName.value = name;
+ taskBatchId.value = id;
+ }
+
+ function setData(value: Api.JobLog.JobMessage[]) {
+ data.value = value;
+ localStg.set('log', { taskName: taskName.value!, taskBatchId: taskBatchId.value!, data: data.value });
+ }
+
+ function clear() {
+ taskName.value = undefined;
+ taskBatchId.value = undefined;
+ data.value = [];
+ localStg.remove('log');
+ }
+
+ function getLogStg() {
+ return localStg.get('log');
+ }
+
+ return {
+ taskName,
+ taskBatchId,
+ data,
+ clear,
+ setTaskInfo,
+ setData,
+ getLogStg
+ };
+});
diff --git a/src/typings/storage.d.ts b/src/typings/storage.d.ts
index a2e363b..0929db7 100644
--- a/src/typings/storage.d.ts
+++ b/src/typings/storage.d.ts
@@ -44,5 +44,10 @@ declare namespace StorageType {
layout: UnionKey.ThemeLayoutMode;
siderCollapse: boolean;
};
+ log: {
+ taskName: string;
+ taskBatchId: string;
+ data: Api.JobLog.JobMessage[];
+ };
}
}
diff --git a/src/views/_builtin/log/index.vue b/src/views/_builtin/log/index.vue
new file mode 100644
index 0000000..3fa72d1
--- /dev/null
+++ b/src/views/_builtin/log/index.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/views/job/batch/index.vue b/src/views/job/batch/index.vue
index 6f5ea6c..9811910 100644
--- a/src/views/job/batch/index.vue
+++ b/src/views/job/batch/index.vue
@@ -20,6 +20,7 @@ const route = useRoute();
const detailData = ref();
/** 详情页可见状态 */
const { bool: detailVisible, setTrue: openDetail } = useBoolean(false);
+const { bool: detailLog, setBool: setDetailLog } = useBoolean(false);
const { columnChecks, columns, data, getData, loading, mobilePagination, searchParams, resetSearchParams } = useTable({
apiFn: fetchGetJobBatchList,
@@ -55,6 +56,7 @@ const { columnChecks, columns, data, getData, loading, mobilePagination, searchP
render: row => {
function showDetailDrawer() {
detailData.value = row;
+ setDetailLog(false);
openDetail();
}
@@ -152,6 +154,9 @@ const { columnChecks, columns, data, getData, loading, mobilePagination, searchP
width: 130,
render: row => (
+
+ {$t('common.log')}
+
{row.taskBatchStatus === 1 || row.taskBatchStatus === 2 ? (
handleStopJob(row.id!)}>
{{
@@ -186,6 +191,11 @@ const { columnChecks, columns, data, getData, loading, mobilePagination, searchP
]
});
+function handleLog() {
+ setDetailLog(true);
+ openDetail();
+}
+
async function handleRetryJob(id: string) {
const { error } = await fetchJobBatchRetry(id);
if (!error) {
@@ -269,7 +279,12 @@ initParams();
class="sm:h-full"
/>
-
+
diff --git a/src/views/job/batch/modules/job-batch-detail-drawer.vue b/src/views/job/batch/modules/job-batch-detail-drawer.vue
index 6f172a6..f3a7584 100644
--- a/src/views/job/batch/modules/job-batch-detail-drawer.vue
+++ b/src/views/job/batch/modules/job-batch-detail-drawer.vue
@@ -4,6 +4,7 @@ import { executorTypeRecord, operationReasonRecord, taskBatchStatusRecord } from
import { $t } from '@/locales';
import { tagColor } from '@/utils/common';
import { fetchJobLogList } from '@/service/api/log';
+import { useLogStore } from '@/store/modules/log';
import JobTaskListTable from './job-task-list-table.vue';
defineOptions({
@@ -13,20 +14,24 @@ defineOptions({
interface Props {
/** row data */
rowData?: Api.JobBatch.JobBatch | null;
+ log?: boolean;
}
-defineProps();
+const props = withDefaults(defineProps(), {
+ log: false,
+ rowData: null
+});
const visible = defineModel('visible', {
default: false
});
const taskData = ref();
-const logShow = defineModel('logShow', {
- default: false
-});
+const logShow = ref(false);
+const store = useLogStore();
async function openLog(row: Api.Job.JobTask) {
+ store.setTaskInfo(props.rowData!.jobName, row.taskBatchId);
logShow.value = true;
taskData.value = row;
await getLogList();
@@ -77,7 +82,7 @@ onBeforeUnmount(() => {
-
+
{{ rowData?.groupName }}
diff --git a/src/views/job/batch/modules/job-task-list-table.vue b/src/views/job/batch/modules/job-task-list-table.vue
index 46f3939..b462c45 100644
--- a/src/views/job/batch/modules/job-task-list-table.vue
+++ b/src/views/job/batch/modules/job-task-list-table.vue
@@ -48,7 +48,7 @@ const { columns, data, loading, mobilePagination } = useTable({
key: 'id',
title: $t('page.jobBatch.jobTask.id'),
align: 'left',
- minWidth: 100,
+ width: 100,
ellipsis: {
tooltip: true
}