完成演示demo
@@ -53,16 +53,16 @@ const cloneNode = (original: FlowNode): FlowNode => {
|
||||
### FlowNode Interface (Existing)
|
||||
```typescript
|
||||
interface FlowNode {
|
||||
id: string; // Unique identifier
|
||||
name: string; // Display name
|
||||
type: string; // Node type category
|
||||
taskId: string; // Task execution identifier
|
||||
icon: string; // Icon name
|
||||
backgroundColor: string;
|
||||
shape: "square" | "circle" | "rounded";
|
||||
textColor: string;
|
||||
category: "控制类" | "设备类" | "媒体类" | "灯光类" | "延时类";
|
||||
config?: Record<string, any>;
|
||||
id: string // Unique identifier
|
||||
name: string // Display name
|
||||
type: string // Node type category
|
||||
taskId: string // Task execution identifier
|
||||
icon: string // Icon name
|
||||
backgroundColor: string
|
||||
shape: "square" | "circle" | "rounded"
|
||||
textColor: string
|
||||
category: "控制类" | "设备类" | "媒体类" | "灯光类" | "延时类"
|
||||
config?: Record<string, any>
|
||||
}
|
||||
```
|
||||
|
||||
|
@@ -97,3 +97,9 @@
|
||||
- Initialize dialog plugin in lib.rs
|
||||
- Remove invalid configuration fields that caused startup errors
|
||||
- _Requirements: 2.1, 3.1_
|
||||
- [x] 8. Fix Tauri 2.0 permissions configuration structure
|
||||
- Move permissions to app section in tauri.conf.json (not root level)
|
||||
- Add dialog plugin to plugins section
|
||||
- Resolve "Additional properties are not allowed" configuration error
|
||||
- Ensure proper Tauri 2.0 configuration format compliance
|
||||
- _Requirements: 2.1, 3.1_
|
||||
|
@@ -1,8 +1,8 @@
|
||||
export default defineAppConfig({
|
||||
app: {
|
||||
name: "Nuxtor",
|
||||
author: "Nicola Spadari",
|
||||
repo: "https://github.com/NicolaSpadari/nuxtor",
|
||||
name: "PlayTool-Demo",
|
||||
author: "Estel",
|
||||
repo: "https://github.com/estel-li",
|
||||
tauriSite: "https://tauri.app",
|
||||
nuxtSite: "https://nuxt.com",
|
||||
nuxtUiSite: "https://ui.nuxt.dev"
|
||||
|
@@ -237,6 +237,8 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import type { FlowNode } from "~/components/flow-nodes/nodes";
|
||||
import { open, save } from "@tauri-apps/plugin-dialog";
|
||||
import { readTextFile, writeTextFile } from "@tauri-apps/plugin-fs";
|
||||
import {
|
||||
ArrowLeft,
|
||||
Clock,
|
||||
@@ -266,8 +268,8 @@
|
||||
getNodesByCategory,
|
||||
nodeDefinitions
|
||||
} from "~/components/flow-nodes/nodes";
|
||||
import { save, open } from '@tauri-apps/plugin-dialog';
|
||||
import { writeTextFile, readTextFile } from '@tauri-apps/plugin-fs';
|
||||
// import { toast } from "#build/ui";
|
||||
const toast = useToast();
|
||||
|
||||
const router = useRouter();
|
||||
const workflowNodes = ref<FlowNode[]>([]);
|
||||
@@ -377,6 +379,11 @@
|
||||
const startTask = () => {
|
||||
if (workflowNodes.value.length === 0) {
|
||||
console.log("请先添加任务节点");
|
||||
toast.add({
|
||||
title: "任务异常",
|
||||
description: "当前任务清单并无任何节点,请先添加节点。",
|
||||
color: "warning"
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -399,6 +406,11 @@
|
||||
console.log("完整JSON数据:");
|
||||
console.log(JSON.stringify(taskData, null, 2));
|
||||
console.log("=== 执行完成 ===");
|
||||
toast.add({
|
||||
title: "任务执行成功",
|
||||
description: `总共执行了 ${taskData.nodes.length} 个节点。`,
|
||||
color: "success"
|
||||
});
|
||||
};
|
||||
|
||||
const saveTask = async () => {
|
||||
@@ -423,8 +435,8 @@
|
||||
try {
|
||||
const filePath = await save({
|
||||
filters: [{
|
||||
name: 'JSON',
|
||||
extensions: ['json']
|
||||
name: "JSON",
|
||||
extensions: ["json"]
|
||||
}],
|
||||
defaultPath: `workflow_${Date.now()}.json`
|
||||
});
|
||||
@@ -447,8 +459,8 @@
|
||||
const selected = await open({
|
||||
multiple: false,
|
||||
filters: [{
|
||||
name: 'JSON',
|
||||
extensions: ['json']
|
||||
name: "JSON",
|
||||
extensions: ["json"]
|
||||
}]
|
||||
});
|
||||
|
||||
@@ -460,7 +472,7 @@
|
||||
// 验证并重建节点
|
||||
const importedNodes = data.nodes.map((node: any) => {
|
||||
// 提取原始节点ID(去除时间戳后缀)
|
||||
const originalId = node.id.replace(/-\d+-[a-z0-9]+$/, '');
|
||||
const originalId = node.id.replace(/-\d+-[a-z0-9]+$/, "");
|
||||
const definition = nodeDefinitions[originalId];
|
||||
|
||||
if (!definition) {
|
||||
|
@@ -1,9 +1,6 @@
|
||||
<template>
|
||||
<div>
|
||||
<SiteNavbar class="fixed w-full" />
|
||||
<SiteSidebar />
|
||||
|
||||
<div class="relative overflow-hidden px-6 lg:px-8">
|
||||
<div>
|
||||
<DesignTopBlob />
|
||||
<DesignBottomBlob />
|
||||
|
||||
|
@@ -3,50 +3,11 @@
|
||||
<div class="grid size-full place-content-center gap-y-8">
|
||||
<SvgoLogo :filled="true" :font-controlled="false" class="mx-auto size-40" />
|
||||
|
||||
<div class="flex flex-col items-center gap-y-3">
|
||||
<h1 class="animate-pulse text-3xl sm:text-4xl text-pretty font-bold font-heading md:mb-5">
|
||||
{{ app.name.toUpperCase() }}
|
||||
</h1>
|
||||
<p class="leading-7 text-pretty">
|
||||
Powered by
|
||||
</p>
|
||||
|
||||
<div class="flex flex-wrap justify-center gap-1 md:gap-3">
|
||||
<UButton
|
||||
variant="ghost"
|
||||
size="xl"
|
||||
:to="app.nuxtSite"
|
||||
target="_blank"
|
||||
external
|
||||
>
|
||||
Nuxt 4
|
||||
</UButton>
|
||||
<UButton
|
||||
variant="ghost"
|
||||
size="xl"
|
||||
:to="app.tauriSite"
|
||||
target="_blank"
|
||||
external
|
||||
>
|
||||
Tauri 2
|
||||
</UButton>
|
||||
<UButton
|
||||
variant="ghost"
|
||||
size="xl"
|
||||
:to="app.nuxtUiSite"
|
||||
target="_blank"
|
||||
external
|
||||
>
|
||||
NuxtUI 3
|
||||
</UButton>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex justify-center">
|
||||
<UButton
|
||||
to="/workflows"
|
||||
>
|
||||
Star on GitHub
|
||||
开始演示
|
||||
</UButton>
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -25,7 +25,7 @@
|
||||
"dependencies": {
|
||||
"@nuxt/ui-pro": "^3.2.0",
|
||||
"@tauri-apps/api": "^2.6.0",
|
||||
"@tauri-apps/plugin-dialog": "^2.3.0",
|
||||
"@tauri-apps/plugin-dialog": "~2",
|
||||
"@tauri-apps/plugin-fs": "^2.4.0",
|
||||
"@tauri-apps/plugin-notification": "^2.3.0",
|
||||
"@tauri-apps/plugin-os": "^2.3.0",
|
||||
|
2
pnpm-lock.yaml
generated
@@ -18,7 +18,7 @@ importers:
|
||||
specifier: ^2.6.0
|
||||
version: 2.6.0
|
||||
'@tauri-apps/plugin-dialog':
|
||||
specifier: ^2.3.0
|
||||
specifier: ~2
|
||||
version: 2.3.3
|
||||
'@tauri-apps/plugin-fs':
|
||||
specifier: ^2.4.0
|
||||
|
@@ -24,7 +24,7 @@ tauri-plugin-shell = "2.3.0"
|
||||
tauri-plugin-notification = "2.3.0"
|
||||
tauri-plugin-os = "2.3.0"
|
||||
tauri-plugin-fs = "2.4.0"
|
||||
tauri-plugin-dialog = "2.3.0"
|
||||
tauri-plugin-dialog = "2"
|
||||
tauri-plugin-store = "2.3.0"
|
||||
serde_json = "1"
|
||||
|
||||
|
@@ -41,6 +41,9 @@
|
||||
"fs:allow-document-write",
|
||||
"store:default",
|
||||
"core:webview:allow-create-webview",
|
||||
"core:webview:allow-create-webview-window"
|
||||
"core:webview:allow-create-webview-window",
|
||||
"dialog:default",
|
||||
"dialog:default",
|
||||
"dialog:default"
|
||||
]
|
||||
}
|
||||
|
@@ -1 +1 @@
|
||||
{"main":{"identifier":"main","description":"Capabilities for the app window","local":true,"windows":["main","secondary"],"permissions":["core:path:default","core:event:default","core:window:default","core:app:default","core:resources:default","core:menu:default","core:tray:default","shell:allow-open",{"identifier":"shell:allow-execute","allow":[{"args":["-c",{"validator":"\\S+"}],"cmd":"sh","name":"exec-sh","sidecar":false}]},"notification:default","os:allow-platform","os:allow-arch","os:allow-family","os:allow-version","os:allow-locale","fs:allow-document-read","fs:allow-document-write","store:default","core:webview:allow-create-webview","core:webview:allow-create-webview-window"]}}
|
||||
{"main":{"identifier":"main","description":"Capabilities for the app window","local":true,"windows":["main","secondary"],"permissions":["core:path:default","core:event:default","core:window:default","core:app:default","core:resources:default","core:menu:default","core:tray:default","shell:allow-open",{"identifier":"shell:allow-execute","allow":[{"args":["-c",{"validator":"\\S+"}],"cmd":"sh","name":"exec-sh","sidecar":false}]},"notification:default","os:allow-platform","os:allow-arch","os:allow-family","os:allow-version","os:allow-locale","fs:allow-document-read","fs:allow-document-write","store:default","core:webview:allow-create-webview","core:webview:allow-create-webview-window","dialog:default","dialog:default","dialog:default"]}}
|
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 372 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 128 KiB |
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 14 KiB |
@@ -41,9 +41,9 @@
|
||||
"title": "Nuxtor",
|
||||
"width": 1366,
|
||||
"height": 768,
|
||||
"minWidth": 375,
|
||||
"minHeight": 812,
|
||||
"resizable": false,
|
||||
"minWidth": 800,
|
||||
"minHeight": 600,
|
||||
"resizable": true,
|
||||
"fullscreen": false
|
||||
}
|
||||
],
|
||||
|