refactor: 大规模代码整理与功能优化

1. 重构后端API路由、CRUD与模块结构,整合日志管理,移除废弃demo代码
2. 优化前端组件类型定义、样式与路由配置,修复权限判断逻辑
3. 调整默认排序规则、滚动条样式与工具类函数,更新依赖与配置文件
4. 修复多处类型不匹配与默认值问题,完善表单与菜单验证逻辑
This commit is contained in:
zhangtao
2026-06-17 01:56:31 +08:00
parent 17b3cd0a4c
commit 73f2823692
500 changed files with 40763 additions and 26616 deletions
@@ -136,7 +136,7 @@
</template>
</FaTableHeader>
<div v-loading="jobLoading" class="job-cards-container mt-3 min-h-0 flex-1 overflow-auto">
<ElScrollbar v-loading="jobLoading" class="job-cards-container mt-3 min-h-0 flex-1">
<ElEmpty
v-if="!jobLoading && (!jobList || jobList.length === 0)"
:image-size="80"
@@ -241,7 +241,7 @@
</ElCard>
</ElCol>
</ElRow>
</div>
</ElScrollbar>
</ElCard>
<FaDialog v-model="consoleVisible" title="调度器控制台" width="900px">
@@ -352,7 +352,7 @@ import FaTableHeaderLeft from "@/components/tables/fa-table-header-left/index.vu
import FaJsonPretty from "@/components/others/fa-json-pretty/index.vue";
import { useTable } from "@/hooks/core/useTable";
import type { ColumnOption } from "@/types/component";
import { ElDivider, ElMessage, ElMessageBox, ElTag } from "element-plus";
import { ElDivider, ElMessageBox, ElTag } from "element-plus";
import { computed, h, nextTick, onMounted, ref } from "vue";
import { Terminal, TerminalApi } from "vue-web-terminal";
@@ -591,8 +591,8 @@ const {
label: "状态",
minWidth: 80,
formatter: (row) =>
h(ElTag, { type: getLogStatusType(row.status), size: "small" }, () =>
getLogStatusLabel(row.status)
h(ElTag, { type: getLogStatusType(String(row.status)), size: "small" }, () =>
getLogStatusLabel(String(row.status))
),
},
{
@@ -654,7 +654,6 @@ async function deleteLogRow(id: number | undefined) {
type: "warning",
});
await JobAPI.deleteJobLog([id]);
ElMessage.success("删除成功");
logfaTableRef.value?.elTableRef?.clearSelection();
await refreshLogRemove();
} catch {
@@ -673,7 +672,6 @@ async function handleLogBatchDelete() {
});
logBatchDeleting.value = true;
await JobAPI.deleteJobLog(ids);
ElMessage.success("删除成功");
logSelectedRows.value = [];
await refreshLogRemove();
} catch {
@@ -367,7 +367,6 @@ async function deleteNodeRow(id: number | undefined) {
type: "warning",
});
await NodeAPI.deleteNode([id]);
ElMessage.success("删除成功");
faTableRef.value?.elTableRef?.clearSelection();
await refreshRemove();
} catch {
@@ -427,7 +426,6 @@ async function handleBatchDelete() {
});
batchDeleting.value = true;
await NodeAPI.deleteNode(ids);
ElMessage.success("删除成功");
selectedRows.value = [];
await refreshRemove();
} catch {
@@ -780,7 +778,7 @@ const initialFormData: Partial<NodeForm> = {
async function resetForm() {
dataFormRef.value?.resetFields();
dataFormRef.value?.clearValidate();
Object.assign(formData, initialFormData);
Object.assign(formData.value, initialFormData);
argsList.value = [];
kwargsList.value = [];
}
@@ -795,7 +793,7 @@ async function handleOpenDialog(type: "create" | "update", id?: number) {
if (id) {
const response = await NodeAPI.detailNode(id);
dialogVisible.title = "修改节点";
Object.assign(formData, response.data.data);
Object.assign(formData.value, response.data.data);
const data = response.data.data;
argsList.value = data.args ? data.args.split(",").map((v: string) => v.trim()) : [];
kwargsList.value = data.kwargs
@@ -50,11 +50,13 @@
import { ref, computed } from "vue";
import { Handle, Position } from "@vue-flow/core";
const props = defineProps({
id: String,
data: Object,
nodeStatus: String,
});
interface Props {
id?: string;
data?: Record<string, any>;
nodeStatus?: string;
}
const props = withDefaults(defineProps<Props>(), {});
const showHandles = ref(false);
@@ -35,15 +35,16 @@
<script setup lang="ts">
import { ref, watch, computed } from "vue";
import { ElButton, ElColorPicker, ElMessage, ElIcon } from "element-plus";
import { ElButton, ElColorPicker, ElIcon } from "element-plus";
import { Close } from "@element-plus/icons-vue";
import FaForm from "@/components/forms/fa-form/index.vue";
const props = defineProps({
edge: {
type: Object,
default: () => ({}),
},
interface Props {
edge?: Record<string, any>;
}
const props = withDefaults(defineProps<Props>(), {
edge: () => ({}),
});
const emit = defineEmits(["close", "save", "delete"]);
@@ -148,7 +149,6 @@ function handleClose() {
function handleSave() {
emit("save", formData.value);
ElMessage.success("保存成功");
}
function handleDelete() {
@@ -65,11 +65,12 @@ import WorkflowNodeTypeAPI, {
type WorkflowNodeTypeOption,
} from "@/api/module_task/workflow/node-type";
const props = defineProps({
node: {
type: Object,
default: () => ({}),
},
interface Props {
node?: Record<string, any>;
}
const props = withDefaults(defineProps<Props>(), {
node: () => ({}),
});
const emit = defineEmits(["close", "save", "delete"]);
@@ -159,7 +160,7 @@ watch(
}
}
Object.assign(formData, {
Object.assign(formData.value, {
type: newNode.type || "",
label: newNode.data?.label || "",
args: newNode.data?.args || "",
@@ -192,7 +193,6 @@ function handleSave() {
kwargs: formData.value.kwargsStr,
description: formData.value.description,
});
ElMessage.success("保存成功");
}
function handleDelete() {
@@ -214,15 +214,14 @@ defineOptions({
inheritAttrs: false,
});
const props = defineProps({
visible: {
type: Boolean,
default: false,
},
workflow: {
type: Object as () => WorkflowTable | undefined,
default: undefined,
},
interface Props {
visible?: boolean;
workflow?: WorkflowTable;
}
const props = withDefaults(defineProps<Props>(), {
visible: false,
workflow: undefined,
});
const emit = defineEmits(["update:visible", "refresh"]);
@@ -677,7 +676,6 @@ function handleDeleteNode() {
type: "warning",
});
deleteNode(nodeId, getNodes, setNodes, getEdges, setEdges);
ElMessage.success("节点删除成功");
handleClosePanel();
saveToHistory(nodes.value as Node[], edges.value as Edge[]);
} catch {
@@ -706,7 +704,6 @@ function handleDeleteEdge() {
type: "warning",
});
deleteEdge(edgeId, getEdges, setEdges);
ElMessage.success("连线删除成功");
handleClosePanel();
saveToHistory(nodes.value as Node[], edges.value as Edge[]);
} catch {
@@ -743,7 +740,7 @@ watch(
() => props.workflow,
(newWorkflow) => {
if (newWorkflow) {
Object.assign(formData, {
Object.assign(formData.value, {
code: newWorkflow.code,
name: newWorkflow.name,
description: newWorkflow.description,
@@ -752,7 +749,7 @@ watch(
nodes.value = newWorkflow.nodes || [];
edges.value = newWorkflow.edges || [];
} else {
Object.assign(formData, {
Object.assign(formData.value, {
code: "",
name: "",
description: "",
@@ -211,7 +211,6 @@ async function deleteWorkflowRow(id: number | undefined) {
type: "warning",
});
await WorkflowDefinitionAPI.deleteWorkflow([id]);
ElMessage.success("删除成功");
faTableRef.value?.elTableRef?.clearSelection();
await refreshRemove();
} catch {
@@ -230,7 +229,6 @@ async function handleBatchDelete() {
});
batchDeleting.value = true;
await WorkflowDefinitionAPI.deleteWorkflow(ids);
ElMessage.success("删除成功");
selectedRows.value = [];
await refreshRemove();
} catch {
@@ -306,8 +304,8 @@ const {
minWidth: 100,
align: "center",
formatter: (row) =>
h(ElTag, { type: getStatusType(row.status ?? "") }, () =>
getStatusText(row.status ?? "")
h(ElTag, { type: getStatusType(String(row.status ?? "")) }, () =>
getStatusText(String(row.status ?? ""))
),
},
{
@@ -379,7 +377,6 @@ async function handlePublish(record: WorkflowTable) {
return;
}
await WorkflowDefinitionAPI.publishWorkflow(record.id, {});
ElMessage.success("发布成功");
await refreshUpdate();
} catch {
ElMessage.error("发布失败");
@@ -222,7 +222,6 @@ async function deleteNodeTypeRow(id: number | undefined) {
type: "warning",
});
await WorkflowNodeTypeAPI.deleteWorkflowNodeType([id]);
ElMessage.success("删除成功");
faTableRef.value?.elTableRef?.clearSelection();
await refreshRemove();
} catch {
@@ -241,7 +240,6 @@ async function handleBatchDelete() {
});
batchDeleting.value = true;
await WorkflowNodeTypeAPI.deleteWorkflowNodeType(ids);
ElMessage.success("删除成功");
selectedRows.value = [];
await refreshRemove();
} catch {
@@ -504,12 +502,10 @@ async function submitForm() {
try {
if (editingId.value) {
await WorkflowNodeTypeAPI.updateWorkflowNodeType(editingId.value, formData.value);
ElMessage.success("更新成功");
dialogVisible.value = false;
await refreshUpdate();
} else {
await WorkflowNodeTypeAPI.createWorkflowNodeType(formData.value);
ElMessage.success("创建成功");
dialogVisible.value = false;
await refreshCreate();
}