wip: 增加StatusSwitch组件

This commit is contained in:
dhb52 2024-04-25 16:35:10 +08:00
parent af2e9ae12a
commit 620553d32e
2 changed files with 62 additions and 18 deletions

View File

@ -0,0 +1,39 @@
<script setup lang="ts">
import { ref } from 'vue';
defineOptions({
name: 'StatusSwitch'
});
interface Emits {
(e: 'update:value', value: Api.Common.EnableStatusNumber): void;
}
const emit = defineEmits<Emits>();
const value = defineModel<Api.Common.EnableStatusNumber>('value', {
required: true
});
const loading = ref(false);
const setLoading = (val: boolean) => {
loading.value = val;
};
defineExpose({
setLoading
});
</script>
<template>
<NSwitch
v-model:value="value"
:loading="loading"
:checked-value="1"
:unchecked-value="0"
@update:value="emit('update:value', value)"
></NSwitch>
</template>
<style scoped></style>

View File

@ -1,16 +1,16 @@
<script setup lang="tsx"> <script setup lang="tsx">
import { ref } from 'vue'; import { ref } from 'vue';
import { NButton, NPopconfirm, NSwitch, NTag } from 'naive-ui'; import { NButton, NPopconfirm, NTag } from 'naive-ui';
import { fetchGetJobPage, fetchUpdateJobStatus } from '@/service/api'; import { fetchGetJobPage, fetchUpdateJobStatus } 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 { blockStrategyRecord, taskTypeRecord, triggerTypeRecord } from '@/constants/business'; import { blockStrategyRecord, taskTypeRecord, triggerTypeRecord } from '@/constants/business';
import StatusSwitch from '@/components/common/status-switch.vue';
import JobTaskOperateDrawer from './modules/job-task-operate-drawer.vue'; import JobTaskOperateDrawer from './modules/job-task-operate-drawer.vue';
import JobTaskSearch from './modules/job-task-search.vue'; import JobTaskSearch from './modules/job-task-search.vue';
const appStore = useAppStore(); const appStore = useAppStore();
const statusSwithLoading = ref(false);
const { columns, columnChecks, data, getData, loading, mobilePagination, searchParams, resetSearchParams } = useTable({ const { columns, columnChecks, data, getData, loading, mobilePagination, searchParams, resetSearchParams } = useTable({
apiFn: fetchGetJobPage, apiFn: fetchGetJobPage,
@ -57,14 +57,29 @@ const { columns, columnChecks, data, getData, loading, mobilePagination, searchP
align: 'center', align: 'center',
minWidth: 120, minWidth: 120,
render: row => { render: row => {
const switchRef = ref<InstanceType<typeof StatusSwitch>>();
const handleUpdateValue = async (id: string, jobStatus: Api.Common.EnableStatusNumber) => {
switchRef.value?.setLoading(true);
try {
await fetchUpdateJobStatus({ id, jobStatus });
window.$message?.success($t('common.updateSuccess'));
} catch {
window.$message?.error($t('common.updateFailed'));
} finally {
switchRef.value?.setLoading(false);
await getData();
}
};
return ( return (
<NSwitch // eslint-disable-next-line @typescript-eslint/ban-ts-comment
/* @ts-expect-error */
<StatusSwitch
v-model:value={row.jobStatus} v-model:value={row.jobStatus}
v-model:loading={statusSwithLoading.value} ref={switchRef}
checkedValue={1} on-update:value={(status: Api.Common.EnableStatusNumber) => handleUpdateValue(row.id!, status)}
uncheckedValue={0} ></StatusSwitch>
onUpdateValue={() => handleUpdateValue(row)}
></NSwitch>
); );
} }
}, },
@ -198,16 +213,6 @@ function handleDelete(id: string) {
function edit(id: string) { function edit(id: string) {
handleEdit(id); handleEdit(id);
} }
async function handleUpdateValue(job: Api.Job.Job) {
statusSwithLoading.value = true;
try {
await fetchUpdateJobStatus({ id: job.id!, jobStatus: job.jobStatus });
} finally {
await getData();
statusSwithLoading.value = false;
}
}
</script> </script>
<template> <template>