diff --git a/src/api/v1/schedulers.ts b/src/api/v1/schedulers.ts new file mode 100644 index 0000000..8da33ab --- /dev/null +++ b/src/api/v1/schedulers.ts @@ -0,0 +1,22 @@ +import { http } from '@/api/service/request'; +import type { BaseResult, ResultTable } from '@/api/service/types'; + +/** Schedulers视图---获取Schedulers视图列表 */ +export const fetchGetSchedulersList = (data: any) => { + return http.request>('get', `schedulers/getSchedulersList/${data.currentPage}/${data.pageSize}`, { params: data }); +}; + +/** Schedulers视图---添加Schedulers视图 */ +export const fetchAddSchedulers = (data: any) => { + return http.request>('post', 'schedulers/addSchedulers', { data }); +}; + +/** Schedulers视图---更新Schedulers视图 */ +export const fetchUpdateSchedulers = (data: any) => { + return http.request>('put', 'schedulers/updateSchedulers', { data }); +}; + +/** Schedulers视图---删除Schedulers视图 */ +export const fetchDeleteSchedulers = (data: any) => { + return http.request>('delete', 'schedulers/deleteSchedulers', { data }); +}; diff --git a/src/store/monitor/schedulers.ts b/src/store/monitor/schedulers.ts new file mode 100644 index 0000000..911d964 --- /dev/null +++ b/src/store/monitor/schedulers.ts @@ -0,0 +1,77 @@ +import { defineStore } from 'pinia'; +import { fetchAddSchedulers, fetchDeleteSchedulers, fetchGetSchedulersList, fetchUpdateSchedulers } from '@/api/v1/schedulers'; +import { pageSizes } from '@/enums/baseConstant'; +import { storeMessage } from '@/utils/message'; +import { storePagination } from '@/store/useStorePagination'; + +/** + * Schedulers视图 Store + */ +export const useSchedulersStore = defineStore('schedulersStore', { + state() { + return { + // Schedulers视图列表 + datalist: [], + // 查询表单 + form: { + // 任务名称 + jobName: undefined, + // 任务分组 + jobGroup: undefined, + // 任务详情 + description: undefined, + // 任务类名称 + jobClassName: undefined, + // 触发器名称 + triggerName: undefined, + // triggerState触发器状态 + triggerState: undefined, + }, + // 分页查询结果 + pagination: { + currentPage: 1, + pageSize: 150, + total: 100, + pageSizes, + }, + // 加载 + loading: false, + }; + }, + getters: {}, + actions: { + /** 获取Schedulers视图 */ + async getSchedulersList() { + // 整理请求参数 + const data = { ...this.pagination, ...this.form }; + delete data.pageSizes; + delete data.total; + delete data.background; + + // 获取Schedulers视图列表 + const result = await fetchGetSchedulersList(data); + + // 公共页面函数hook + const pagination = storePagination.bind(this); + return pagination(result); + }, + + /** 添加Schedulers视图 */ + async addSchedulers(data: any) { + const result = await fetchAddSchedulers(data); + return storeMessage(result); + }, + + /** 修改Schedulers视图 */ + async updateSchedulers(data: any) { + const result = await fetchUpdateSchedulers(data); + return storeMessage(result); + }, + + /** 删除Schedulers视图 */ + async deleteSchedulers(data: any) { + const result = await fetchDeleteSchedulers(data); + return storeMessage(result); + }, + }, +}); diff --git a/src/views/monitor/schedulers/index.vue b/src/views/monitor/schedulers/index.vue new file mode 100644 index 0000000..75434cd --- /dev/null +++ b/src/views/monitor/schedulers/index.vue @@ -0,0 +1,129 @@ + + + diff --git a/src/views/monitor/schedulers/schedulers-dialog.vue b/src/views/monitor/schedulers/schedulers-dialog.vue new file mode 100644 index 0000000..9826aa1 --- /dev/null +++ b/src/views/monitor/schedulers/schedulers-dialog.vue @@ -0,0 +1,57 @@ + + + diff --git a/src/views/monitor/schedulers/utils/columns.ts b/src/views/monitor/schedulers/utils/columns.ts new file mode 100644 index 0000000..c1fb22f --- /dev/null +++ b/src/views/monitor/schedulers/utils/columns.ts @@ -0,0 +1,41 @@ +import { reactive } from 'vue'; +import { $t } from '@/plugins/i18n'; + +// 表格列 +export const columns: TableColumnList = [ + { type: 'index', index: (index: number) => index + 1, label: '序号', width: 60 }, + // 任务名称 + { label: $t('schedulers_jobName'), prop: 'jobName' }, + // 任务分组 + { label: $t('schedulers_jobGroup'), prop: 'jobGroup' }, + // 任务详情 + { label: $t('description'), prop: 'description' }, + // 任务类名称 + { label: $t('schedulers_jobClassName'), prop: 'jobClassName' }, + // corn表达式 + { label: $t('schedulers_cronExpression'), prop: 'cronExpression' }, + // 触发器名称 + { label: $t('schedulers_triggerName'), prop: 'triggerName' }, + // triggerState触发器状态 + { label: $t('schedulers_triggerState'), prop: 'triggerState' }, + // 操作 + { label: $t('table.operation'), fixed: 'right', width: 210, slot: 'operation' }, +]; + +// 添加规则 +export const rules = reactive({ + // 任务名称 + jobName: [{ required: true, message: `${$t('input')}${$t('schedulers_jobName')}`, trigger: 'blur' }], + // 任务分组 + jobGroup: [{ required: true, message: `${$t('input')}${$t('schedulers_jobGroup')}`, trigger: 'blur' }], + // 任务详情 + description: [{ required: true, message: `${$t('input')}${$t('description')}`, trigger: 'blur' }], + // 任务类名称 + jobClassName: [{ required: true, message: `${$t('input')}${$t('schedulers_jobClassName')}`, trigger: 'blur' }], + // corn表达式 + cronExpression: [{ required: true, message: `${$t('input')}${$t('schedulers_cronExpression')}`, trigger: 'blur' }], + // 触发器名称 + triggerName: [{ required: true, message: `${$t('input')}${$t('schedulers_triggerName')}`, trigger: 'blur' }], + // triggerState触发器状态 + triggerState: [{ required: true, message: `${$t('input')}${$t('schedulers_triggerState')}`, trigger: 'blur' }], +}); diff --git a/src/views/monitor/schedulers/utils/hooks.ts b/src/views/monitor/schedulers/utils/hooks.ts new file mode 100644 index 0000000..0043503 --- /dev/null +++ b/src/views/monitor/schedulers/utils/hooks.ts @@ -0,0 +1,112 @@ +import { addDialog } from '@/components/BaseDialog/index'; +import SchedulersDialog from '@/views/monitor/schedulers/schedulers-dialog.vue'; +import { useSchedulersStore } from '@/store/monitor/schedulers.ts'; +import { h, ref } from 'vue'; +import { messageBox } from '@/utils/message'; +import type { FormItemProps } from '@/views/monitor/schedulers/utils/types'; +import { $t } from '@/plugins/i18n'; + +export const formRef = ref(); +const schedulersStore = useSchedulersStore(); + +/** + * * 搜索初始化Schedulers视图 + */ +export async function onSearch() { + schedulersStore.loading = true; + await schedulersStore.getSchedulersList(); + schedulersStore.loading = false; +} + +/** + * * 添加Schedulers视图 + */ +export function onAdd() { + addDialog({ + title: `${$t('add_new')}${$t('schedulers')}`, + width: '30%', + props: { + formInline: { + jobName: undefined, + jobGroup: undefined, + description: undefined, + jobClassName: undefined, + cronExpression: undefined, + triggerName: undefined, + triggerState: undefined, + }, + }, + draggable: true, + fullscreenIcon: true, + closeOnClickModal: false, + contentRenderer: () => h(SchedulersDialog, { ref: formRef }), + beforeSure: (done, { options }) => { + const form = options.props.formInline as FormItemProps; + formRef.value.formRef.validate(async (valid: any) => { + if (!valid) return; + + const result = await schedulersStore.addSchedulers(form); + if (!result) return; + done(); + await onSearch(); + }); + }, + }); +} + +/** + * * 更新Schedulers视图 + * @param row + */ +export function onUpdate(row: any) { + addDialog({ + title: `${$t('modify')}${$t('schedulers')}`, + width: '30%', + props: { + formInline: { + jobName: row.jobName, + jobGroup: row.jobGroup, + description: row.description, + jobClassName: row.jobClassName, + cronExpression: row.cronExpression, + triggerName: row.triggerName, + triggerState: row.triggerState, + }, + }, + draggable: true, + fullscreenIcon: true, + closeOnClickModal: false, + contentRenderer: () => h(SchedulersDialog, { ref: formRef }), + beforeSure: (done, { options }) => { + const form = options.props.formInline as FormItemProps; + formRef.value.formRef.validate(async (valid: any) => { + if (!valid) return; + + const result = await schedulersStore.updateSchedulers({ ...form, id: row.id }); + if (!result) return; + done(); + await onSearch(); + }); + }, + }); +} + +/** + * * 删除Schedulers视图 + */ +export const onDelete = async (row: any) => { + const id = row.id; + + // 是否确认删除 + const result = await messageBox({ + title: $t('confirm_delete'), + showMessage: false, + confirmMessage: undefined, + cancelMessage: $t('cancel_delete'), + }); + if (!result) return; + + // 删除数据 + await schedulersStore.deleteSchedulers([id]); + await onSearch(); +}; diff --git a/src/views/monitor/schedulers/utils/types.ts b/src/views/monitor/schedulers/utils/types.ts new file mode 100644 index 0000000..b50d43b --- /dev/null +++ b/src/views/monitor/schedulers/utils/types.ts @@ -0,0 +1,22 @@ +// 添加或者修改表单元素 +export interface FormItemProps { + // 任务名称 + jobName: string; + // 任务分组 + jobGroup: string; + // 任务详情 + description: string; + // 任务类名称 + jobClassName: string; + // corn表达式 + cronExpression: string; + // 触发器名称 + triggerName: string; + // triggerState触发器状态 + triggerState: string; +} + +// 添加或修改表单Props +export interface FormProps { + formInline: FormItemProps; +}