vue实现支持文本视频声音图片链接等节点拖拽连线生成修改的ai智能画布流水线代码
代码语言:html
所属分类:布局界面
代码描述:vue实现支持文本视频声音图片链接等节点拖拽连线生成修改的ai智能画布流水线代码,可配置多个节点下一步操作的按钮列表及apiurl,形成一个强大的多节点ai生成与编辑智能智慧画布代码,支持拖拽选择文件,支持缩放,非常强大。
代码标签: vue 支持 文本 视频 声音 图片 链接 节点 拖拽 连线 生成 修改 ai 智能 画布 流水线
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<title>Flow Canvas · Vue CDN 节点画布(多类型节点可继续流水线)</title>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/vue.global.prod.3.5.21.js"></script>
<style>
:root{
--bg0:#0b1020;
--panel: rgba(255,255,255,.06);
--stroke: rgba(255,255,255,.12);
--stroke2: rgba(255,255,255,.16);
--text: #eaf0ff;
--muted: rgba(234,240,255,.72);
--shadow: 0 18px 60px rgba(0,0,0,.45);
--shadow2: 0 10px 30px rgba(0,0,0,.35);
--radius: 14px;
--blue:#4aa3ff;
--pink:#ff6fae;
--purple:#b983ff;
--green:#58d68d;
--amber:#f5c542;
--cyan:#48c9b0;
--red:#ff5a66;
}
*{ box-sizing:border-box; }
html,body{
height:100%; margin:0; overflow:hidden;
background: radial-gradient(1200px 900px at 10% 10%, #17215a 0%, var(--bg0) 55%) fixed;
color:var(--text);
}
body{ font-family: ui-sans-serif, system-ui, -apple-system, "PingFang SC","Microsoft YaHei", Segoe UI, Roboto, Arial; }
.topbar{
position:fixed; left:0; top:0; right:0; height:58px; z-index:50;
display:flex; align-items:center; justify-content:space-between;
padding: 0 14px;
background: linear-gradient(180deg, rgba(10,14,30,.78) 0%, rgba(10,14,30,.55) 100%);
border-bottom: 1px solid var(--stroke);
backdrop-filter: blur(10px);
}
.brand{ display:flex; align-items:center; gap:10px; min-width: 260px; }
.logo{
width:34px; height:34px; border-radius: 11px;
background: linear-gradient(135deg, rgba(74,163,255,.95), rgba(185,131,255,.9));
box-shadow: 0 10px 30px rgba(74,163,255,.18);
position:relative;
}
.logo:before{
content:"";
position:absolute; inset:9px;
border-radius: 8px;
border: 2px solid rgba(255,255,255,.75);
transform: rotate(12deg);
opacity:.9;
}
.brand .title{ font-weight:800; letter-spacing:.2px; font-size:14px; }
.brand .sub{ font-size:12px; color:var(--muted); margin-top:2px; }
.bar-group{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; justify-content:flex-end; }
.pill{
display:flex; align-items:center; gap:10px;
padding: 8px 10px;
border-radius: 999px;
background: var(--panel);
border: 1px solid var(--stroke);
box-shadow: 0 10px 30px rgba(0,0,0,.18);
}
select, button, input[type="text"]{
color: var(--text);
background: rgba(255,255,255,.06);
border: 1px solid var(--stroke2);
border-radius: 10px;
padding: 8px 10px;
outline: none;
font-size: 13px;
}
select{ padding-right: 32px; }
button{
cursor:pointer;
font-weight:650;
transition: transform .06s ease, background .2s ease, border-color .2s ease;
}
button:hover{ background: rgba(255,255,255,.09); border-color: rgba(255,255,255,.20); }
button:active{ transform: translateY(1px); }
button.primary{
background: linear-gradient(135deg, rgba(74,163,255,.28), rgba(185,131,255,.22));
border-color: rgba(74,163,255,.35);
}
button.danger{
background: rgba(255,90,102,.12);
border-color: rgba(255,90,102,.35);
}
button.ghost{
background: transparent;
border-color: var(--stroke);
}
.layout{
position:fixed; left:0; top:58px; right:0; bottom:0;
display:grid;
grid-template-columns: 1fr 360px;
gap: 12px;
padding: 12px;
}
.stage{
position:relative;
border-radius: var(--radius);
border: 1px solid var(--stroke);
background:
radial-gradient(circle at 1px 1px, rgba(255,255,255,.07) 1px, transparent 1px) 0 0 / 24px 24px,
linear-gradient(180deg, rgba(255,255,255,.03) 0%, rgba(255,255,255,.02) 100%);
box-shadow: var(--shadow);
overflow:hidden;
user-select:none;
touch-action:none;
}
.stage:after{
content:"";
position:absolute; inset:0;
pointer-events:none;
background: radial-gradient(900px 700px at 65% 40%, rgba(72,201,176,.10) 0%, transparent 55%),
radial-gradient(900px 700px at 25% 70%, rgba(245,197,66,.10) 0%, transparent 55%);
opacity:.9;
}
.edges{ position:absolute; inset:0; z-index: 2; pointer-events:none; }
.viewport{ position:absolute; left:0; top:0; transform-origin: 0 0; z-index: 3; }
.drop-hint{
position:absolute; inset:16px;
border-radius: 16px;
border: 1px dashed rgba(255,255,255,.24);
background: rgba(10,14,30,.35);
display:flex; align-items:center; justify-content:center;
color: rgba(234,240,255,.82);
font-weight:650;
letter-spacing:.2px;
z-index: 20;
pointer-events:none;
backdrop-filter: blur(6px);
}
aside{
border-radius: var(--radius);
border: 1px solid var(--stroke);
background: rgba(10,14,30,.55);
backdrop-filter: blur(10px);
box-shadow: var(--shadow);
overflow:hidden;
display:flex;
flex-direction:column;
min-width: 320px;
}
.panel-header{
padding: 12px 12px 10px 12px;
border-bottom: 1px solid var(--stroke);
display:flex; align-items:flex-start; justify-content:space-between; gap:10px;
}
.panel-header .h{ font-weight:800; font-size:14px; }
.panel-header .d{
margin-top:4px;
font-size:12px; color:var(--muted);
line-height:1.35;
}
.panel-body{ padding: 12px; overflow:auto; }
.section{
background: rgba(255,255,255,.05);
border: 1px solid var(--stroke);
border-radius: 14px;
padding: 12px;
margin-bottom: 12px;
}
.section .stitle{
display:flex; align-items:center; justify-content:space-between; gap:10px;
font-weight:800; font-size:13px;
margin-bottom: 10px;
}
.meta{
font-size:12px; color:var(--muted);
line-height:1.5;
white-space: pre-wrap;
word-break: break-word;
}
.form-row{ margin: 10px 0; }
.form-row label{
display:block; font-size:12px; color: rgba(234,240,255,.78);
margin-bottom: 6px;
}
.form-row input[type="text"], .form-row input[type="number"], .form-row textarea, .form-row select{
width:100%;
border-radius: 12px;
padding: 10px 10px;
background: rgba(255,255,255,.06);
border: 1px solid rgba(255,255,255,.14);
color: var(--text);
font-size: 13px;
}
.form-row textarea{ min-height: 88px; resize: vertical; }
.radio-row{ display:flex; gap:10px; flex-wrap:wrap; }
.radio{
display:flex; align-items:center; gap:8px;
padding: 8px 10px;
border-radius: 999px;
background: rgba(255,255,255,.05);
border: 1px solid rgba(255,255,255,.12);
cursor:pointer;
font-size: 13px;
}
.radio input{ accent-color: #7fb7ff; }
.divider{ height:1px; background: var(--stroke); margin: 12px 0; }
.node{
position:absolute;
width: 280px;
border-radius: 16px;
border: 1px solid rgba(255,255,255,.12);
background: linear-gradient(180deg, rgba(255,255,255,.07) 0%, rgba(255,255,255,.05) 100%);
box-shadow: var(--shadow2);
backdrop-filter: blur(8px);
overflow:hidden;
color: var(--text);
}
.node.selected{
border-color: rgba(74,163,255,.55);
box-shadow: 0 18px 60px rgba(74,163,255,.20);
}
.node-header{
padding: 10px 12px;
display:flex;
align-items:center;
justify-content:space-between;
gap:10px;
border-bottom: 1px solid rgba(255,255,255,.10);
cursor: grab;
}
.node-header:active{ cursor: grabbing; }
.........完整代码请登录后点击上方下载按钮下载查看
















网友评论0