Add files via upload

This commit is contained in:
公明
2026-07-03 16:54:18 +08:00
committed by GitHub
parent 625ac4358f
commit 07439bce6e
7 changed files with 1680 additions and 13 deletions
+114
View File
@@ -201,6 +201,16 @@
<span data-i18n="nav.tasks">任务管理</span>
</div>
</div>
<div class="nav-item" data-page="workflows">
<div class="nav-item-content" data-title="图编排" onclick="switchPage('workflows')">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<rect x="3" y="3" width="8" height="8" rx="2"/>
<path d="M7 11v4a2 2 0 0 0 2 2h4"/>
<rect x="13" y="13" width="8" height="8" rx="2"/>
</svg>
<span>图编排</span>
</div>
</div>
<div class="nav-item" data-page="projects">
<div class="nav-item-content" data-title="项目管理" onclick="switchPage('projects')" data-i18n="nav.projects" data-i18n-attr="data-title" data-i18n-skip-text="true">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
@@ -2537,6 +2547,95 @@
</div>
</div>
<!-- 图编排页面 -->
<div id="page-workflows" class="page">
<div class="page-header">
<h2>图编排</h2>
<div class="page-header-actions">
<button class="btn-secondary" onclick="refreshWorkflows()">刷新</button>
<button class="btn-primary" onclick="newWorkflowDraft()">新建图</button>
</div>
</div>
<div class="page-content workflow-page-content">
<aside class="workflow-sidebar">
<div class="workflow-panel">
<div class="workflow-panel-header">
<h3>流程库</h3>
</div>
<div id="workflow-list" class="workflow-list">
<div class="loading-spinner">加载中...</div>
</div>
</div>
<div class="workflow-panel">
<div class="workflow-panel-header">
<h3>节点库</h3>
</div>
<div class="workflow-node-palette">
<button type="button" draggable="true" data-node-type="start" ondragstart="workflowPaletteDragStart(event)" onclick="addWorkflowNodeFromPalette('start')">开始</button>
<button type="button" draggable="true" data-node-type="tool" ondragstart="workflowPaletteDragStart(event)" onclick="addWorkflowNodeFromPalette('tool')">工具</button>
<button type="button" draggable="true" data-node-type="agent" ondragstart="workflowPaletteDragStart(event)" onclick="addWorkflowNodeFromPalette('agent')">Agent</button>
<button type="button" draggable="true" data-node-type="condition" ondragstart="workflowPaletteDragStart(event)" onclick="addWorkflowNodeFromPalette('condition')">条件</button>
<button type="button" draggable="true" data-node-type="hitl" ondragstart="workflowPaletteDragStart(event)" onclick="addWorkflowNodeFromPalette('hitl')">审批</button>
<button type="button" draggable="true" data-node-type="output" ondragstart="workflowPaletteDragStart(event)" onclick="addWorkflowNodeFromPalette('output')">输出</button>
<button type="button" draggable="true" data-node-type="end" ondragstart="workflowPaletteDragStart(event)" onclick="addWorkflowNodeFromPalette('end')">结束</button>
</div>
</div>
</aside>
<main class="workflow-main">
<section class="workflow-meta-bar">
<div class="workflow-meta-fields">
<label>ID <input type="text" id="workflow-id" placeholder="web-scan-basic" autocomplete="off"></label>
<label>名称 <input type="text" id="workflow-name" placeholder="基础 Web 扫描" autocomplete="off"></label>
<label>描述 <input type="text" id="workflow-description" placeholder="可选" autocomplete="off"></label>
<label class="workflow-enabled-toggle"><input type="checkbox" id="workflow-enabled" checked> 启用</label>
</div>
<div class="workflow-toolbar">
<button class="btn-secondary btn-small" type="button" onclick="toggleWorkflowConnectMode()" id="workflow-connect-btn">连线</button>
<button class="btn-secondary btn-small" type="button" onclick="deleteWorkflowSelection()">删除选中</button>
<button class="btn-secondary btn-small" type="button" onclick="layoutWorkflowGraph()">自动布局</button>
<button class="btn-secondary btn-small" onclick="deleteCurrentWorkflow()">删除</button>
<button class="btn-primary btn-small" onclick="saveWorkflowDraft()">保存</button>
</div>
</section>
<section class="workflow-canvas-wrap" ondragover="workflowCanvasDragOver(event)" ondrop="workflowCanvasDrop(event)">
<div id="workflow-canvas"></div>
<div id="workflow-canvas-empty" class="workflow-canvas-empty">从左侧拖拽节点到画布,或点击节点按钮快速添加</div>
</section>
</main>
<aside class="workflow-properties">
<div class="workflow-panel-header">
<h3 id="workflow-property-title">属性</h3>
<button type="button" id="workflow-property-delete-btn" class="btn-secondary btn-small" onclick="deleteWorkflowSelection()" hidden>删除</button>
</div>
<div id="workflow-property-empty" class="workflow-property-empty">选择一个节点或连线后编辑属性</div>
<div id="workflow-property-form" class="workflow-property-form" hidden>
<div class="form-group">
<label for="workflow-prop-label">名称</label>
<input type="text" id="workflow-prop-label" class="form-input" oninput="updateWorkflowSelectedProperty()">
</div>
<div class="form-group" id="workflow-prop-type-wrap">
<label for="workflow-prop-type">类型</label>
<select id="workflow-prop-type" onchange="updateWorkflowSelectedProperty()">
<option value="start">开始</option>
<option value="tool">工具</option>
<option value="agent">Agent</option>
<option value="condition">条件</option>
<option value="hitl">审批</option>
<option value="output">输出</option>
<option value="end">结束</option>
</select>
</div>
<div id="workflow-typed-config" class="workflow-typed-config"></div>
<div class="workflow-custom-fields-head">
<span>自定义字段</span>
<button type="button" class="btn-secondary btn-small" onclick="addWorkflowCustomField()">添加字段</button>
</div>
<div id="workflow-custom-fields" class="workflow-custom-fields"></div>
</div>
</aside>
</div>
</div>
<!-- 角色管理页面 -->
<div id="page-roles-management" class="page">
<div class="page-header">
@@ -4561,6 +4660,20 @@
<textarea id="role-user-prompt" rows="10" data-i18n="roleModal.userPromptPlaceholder" data-i18n-attr="placeholder" placeholder="输入用户提示词,会在用户消息前追加此提示词..."></textarea>
<small class="form-hint" data-i18n="roleModal.userPromptHint">此提示词会追加到用户消息前,用于指导AI的行为。注意:这不会修改系统提示词。</small>
</div>
<div class="form-group">
<label for="role-workflow-id">绑定图编排流程</label>
<select id="role-workflow-id">
<option value="">不绑定流程</option>
</select>
<small class="form-hint">选中流程后,对话页使用该角色会自动触发绑定图;流程字段由图定义 JSON 自由配置。</small>
</div>
<div class="form-group">
<label for="role-workflow-policy">流程触发策略</label>
<select id="role-workflow-policy">
<option value="auto">自动触发</option>
<option value="off">关闭</option>
</select>
</div>
<div class="form-group" id="role-tools-section">
<label data-i18n="roleModal.relatedTools">关联的工具(可选)</label>
<div id="role-tools-default-hint" class="role-tools-default-hint" style="display: none;">
@@ -4779,6 +4892,7 @@
<script src="/static/js/webshell.js"></script>
<script src="/static/js/chat-files.js"></script>
<script src="/static/js/tasks.js"></script>
<script src="/static/js/workflows.js"></script>
<script src="/static/js/roles.js"></script>
<script src="/static/js/c2.js"></script>
</body>