mirror of
https://github.com/fastapiadmin/FastapiAdmin.git
synced 2026-09-28 23:27:10 +00:00
refactor: 大规模代码整理与功能优化
1. 重构后端API路由、CRUD与模块结构,整合日志管理,移除废弃demo代码 2. 优化前端组件类型定义、样式与路由配置,修复权限判断逻辑 3. 调整默认排序规则、滚动条样式与工具类函数,更新依赖与配置文件 4. 修复多处类型不匹配与默认值问题,完善表单与菜单验证逻辑
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
+7
-7
@@ -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() {
|
||||
|
||||
+7
-7
@@ -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() {
|
||||
|
||||
+10
-13
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user