feat(sj_1.0.0): 定义job状态和操作原因

This commit is contained in:
opensnail 2024-04-24 22:42:07 +08:00
parent 559003f9dc
commit 5ddc9ae69e
3 changed files with 36 additions and 11 deletions

View File

@ -35,3 +35,11 @@ export function fetchEditRetryScene(data: Api.RetryScene.Scene) {
data data
}); });
} }
/** update retry scene status */
export function fetchUpdateSceneStatus(id: number, status: number) {
return request<boolean>({
url: `/scene-config/${id}/status/${status}`,
method: 'put'
});
}

View File

@ -91,8 +91,10 @@ declare module 'vue' {
NTooltip: typeof import('naive-ui')['NTooltip'] NTooltip: typeof import('naive-ui')['NTooltip']
NTree: typeof import('naive-ui')['NTree'] NTree: typeof import('naive-ui')['NTree']
OperateDrawer: typeof import('./../components/common/operate-drawer.vue')['default'] OperateDrawer: typeof import('./../components/common/operate-drawer.vue')['default']
OperationReason: typeof import('./../components/common/operation-reason.vue')['default']
PinToggler: typeof import('./../components/common/pin-toggler.vue')['default'] PinToggler: typeof import('./../components/common/pin-toggler.vue')['default']
ReloadButton: typeof import('./../components/common/reload-button.vue')['default'] ReloadButton: typeof import('./../components/common/reload-button.vue')['default']
RouteKey: typeof import('./../components/common/route-key.vue')['default']
RouterLink: typeof import('vue-router')['RouterLink'] RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView'] RouterView: typeof import('vue-router')['RouterView']
Search: typeof import('../components/common/search-form.vue')['default'] Search: typeof import('../components/common/search-form.vue')['default']
@ -104,6 +106,7 @@ declare module 'vue' {
SystemLogo: typeof import('./../components/common/system-logo.vue')['default'] SystemLogo: typeof import('./../components/common/system-logo.vue')['default']
TableColumnSetting: typeof import('./../components/advanced/table-column-setting.vue')['default'] TableColumnSetting: typeof import('./../components/advanced/table-column-setting.vue')['default']
TableHeaderOperation: typeof import('./../components/advanced/table-header-operation.vue')['default'] TableHeaderOperation: typeof import('./../components/advanced/table-header-operation.vue')['default']
TaskBatchStatus: typeof import('./../components/common/task-batch-status.vue')['default']
ThemeSchemaSwitch: typeof import('./../components/common/theme-schema-switch.vue')['default'] ThemeSchemaSwitch: typeof import('./../components/common/theme-schema-switch.vue')['default']
WaveBg: typeof import('./../components/custom/wave-bg.vue')['default'] WaveBg: typeof import('./../components/custom/wave-bg.vue')['default']
} }

View File

@ -1,14 +1,17 @@
<script setup lang="tsx"> <script setup lang="tsx">
import { NButton, NPopconfirm, NTag } from 'naive-ui'; import { NButton, NPopconfirm, NSwitch, NTag } from 'naive-ui';
import { fetchGetRetryScenePageList } from '@/service/api'; import { ref } from 'vue';
import { fetchGetRetryScenePageList, fetchUpdateSceneStatus } from '@/service/api';
import { $t } from '@/locales'; import { $t } from '@/locales';
import { useAppStore } from '@/store/modules/app'; import { useAppStore } from '@/store/modules/app';
import { useTable, useTableOperate } from '@/hooks/common/table'; import { useTable, useTableOperate } from '@/hooks/common/table';
import { backOffRecord, enableStatusNumberRecord, routeKeyRecord } from '@/constants/business'; import { backOffRecord, routeKeyRecord } from '@/constants/business';
import SceneOperateDrawer from './modules/scene-operate-drawer.vue'; import SceneOperateDrawer from './modules/scene-operate-drawer.vue';
import SceneSearch from './modules/scene-search.vue'; import SceneSearch from './modules/scene-search.vue';
const appStore = useAppStore(); const appStore = useAppStore();
/** 组状态 Switch 的 loading 状态 */
const statusSwitchLoading = ref(false);
const { columns, columnChecks, data, getData, loading, mobilePagination, searchParams, resetSearchParams } = useTable({ const { columns, columnChecks, data, getData, loading, mobilePagination, searchParams, resetSearchParams } = useTable({
apiFn: fetchGetRetryScenePageList, apiFn: fetchGetRetryScenePageList,
@ -27,12 +30,6 @@ const { columns, columnChecks, data, getData, loading, mobilePagination, searchP
align: 'center', align: 'center',
width: 48 width: 48
}, },
{
key: 'index',
title: $t('common.index'),
align: 'center',
width: 64
},
{ {
key: 'groupName', key: 'groupName',
title: $t('page.retryScene.groupName'), title: $t('page.retryScene.groupName'),
@ -51,8 +48,15 @@ const { columns, columnChecks, data, getData, loading, mobilePagination, searchP
align: 'left', align: 'left',
minWidth: 120, minWidth: 120,
render: row => { render: row => {
const label = $t(enableStatusNumberRecord[row.sceneStatus!]); return (
return <NTag type="primary">{label}</NTag>; <NSwitch
v-model:value={row.sceneStatus}
v-model:loading={statusSwitchLoading.value}
checkedValue={1}
uncheckedValue={0}
onUpdateValue={() => handleUpdateValue(row)}
></NSwitch>
);
} }
}, },
{ {
@ -164,6 +168,16 @@ function handleDelete(id: string) {
function edit(id: string) { function edit(id: string) {
handleEdit(id); handleEdit(id);
} }
async function handleUpdateValue(scene: Api.RetryScene.Scene) {
statusSwitchLoading.value = true;
try {
await fetchUpdateSceneStatus(scene.id as any, scene.sceneStatus);
} finally {
await getData();
statusSwitchLoading.value = false;
}
}
</script> </script>
<template> <template>