|
@@ -21,13 +21,7 @@
|
|
|
<div class="collapse-btn" @click="togglePanel">
|
|
<div class="collapse-btn" @click="togglePanel">
|
|
|
<div :class="['collapse-icon', { collapsed: panelCollapsed }]"></div>
|
|
<div :class="['collapse-icon', { collapsed: panelCollapsed }]"></div>
|
|
|
</div>
|
|
</div>
|
|
|
- <div
|
|
|
|
|
- class="ai-container"
|
|
|
|
|
- @dragenter="onDragEnter"
|
|
|
|
|
- @dragover="onDragOver"
|
|
|
|
|
- @dragleave="onDragLeave"
|
|
|
|
|
- @drop="onDrop"
|
|
|
|
|
- >
|
|
|
|
|
|
|
+ <div class="ai-container" @dragenter="onDragEnter" @dragover="onDragOver" @dragleave="onDragLeave" @drop="onDrop">
|
|
|
<!-- 拖拽经过时的「可放置」提示。pointer-events: none 不能去掉:遮罩一旦能命中,
|
|
<!-- 拖拽经过时的「可放置」提示。pointer-events: none 不能去掉:遮罩一旦能命中,
|
|
|
它自己会连续触发 dragenter/dragleave,反馈会持续闪断 -->
|
|
它自己会连续触发 dragenter/dragleave,反馈会持续闪断 -->
|
|
|
<div v-if="isDragOver" class="drop-overlay">
|
|
<div v-if="isDragOver" class="drop-overlay">
|
|
@@ -38,7 +32,6 @@
|
|
|
<TaskListPanel
|
|
<TaskListPanel
|
|
|
:taskList="taskList"
|
|
:taskList="taskList"
|
|
|
:currentTaskId="currentTaskId"
|
|
:currentTaskId="currentTaskId"
|
|
|
- :isAdmin="isAdmin"
|
|
|
|
|
@switch-task="switchTask"
|
|
@switch-task="switchTask"
|
|
|
@create-task="createNewTask"
|
|
@create-task="createNewTask"
|
|
|
@delete-task="handleDeleteTask"
|
|
@delete-task="handleDeleteTask"
|
|
@@ -47,9 +40,8 @@
|
|
|
@toggle-sub-agents="toggleSubAgentPanel"
|
|
@toggle-sub-agents="toggleSubAgentPanel"
|
|
|
@toggle-schedules="toggleSchedulePanel"
|
|
@toggle-schedules="toggleSchedulePanel"
|
|
|
/>
|
|
/>
|
|
|
- <!-- [审计-第四轮 M3] 重放自我方 fix/base-agent-token(M1/M2/M3)::isAdmin 透传给左侧任务面板,
|
|
|
|
|
- 由面板内部过滤掉「技能」「子智能体」两个管理入口(按钮渲染在 TaskListPanel 的 optionItems 里)。
|
|
|
|
|
- 注意「定时任务」不属于全局变更,保持对所有人开放。 -->
|
|
|
|
|
|
|
+ <!-- 「技能」「子智能体」两个入口对所有角色都显示:角色差异收敛在面板内部
|
|
|
|
|
+ (非管理员只读:隐藏创建/编辑/删除、禁用启停开关),而不是把入口整个藏掉。 -->
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<!-- 右侧内容区:根据 activePanel 切换显示 -->
|
|
<!-- 右侧内容区:根据 activePanel 切换显示 -->
|
|
@@ -156,14 +148,14 @@
|
|
|
</Transition>
|
|
</Transition>
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
- <!-- 技能面板 -->
|
|
|
|
|
|
|
+ <!-- 技能面板:非管理员只读(面板内部按 isAdmin 隐藏/禁用写操作) -->
|
|
|
<div v-if="activePanel === 'skill'" class="right-panel full">
|
|
<div v-if="activePanel === 'skill'" class="right-panel full">
|
|
|
- <SkillPanel @close="activePanel = 'chat'" />
|
|
|
|
|
|
|
+ <SkillPanel :is-admin="isAdmin" @close="activePanel = 'chat'" />
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
- <!-- 子智能体面板 -->
|
|
|
|
|
|
|
+ <!-- 子智能体面板:非管理员只读 -->
|
|
|
<div v-if="activePanel === 'sub-agents'" class="right-panel full">
|
|
<div v-if="activePanel === 'sub-agents'" class="right-panel full">
|
|
|
- <SubAgentPanel @close="activePanel = 'chat'" />
|
|
|
|
|
|
|
+ <SubAgentPanel :is-admin="isAdmin" @close="activePanel = 'chat'" />
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<!-- 定时任务面板 -->
|
|
<!-- 定时任务面板 -->
|
|
@@ -609,9 +601,7 @@
|
|
|
syncTodoBarFromMessages();
|
|
syncTodoBarFromMessages();
|
|
|
|
|
|
|
|
// 切换任务时检测是否为定时任务会话:自动打开/关闭定时任务详情标签
|
|
// 切换任务时检测是否为定时任务会话:自动打开/关闭定时任务详情标签
|
|
|
- const scheduleItem = newTask.sessionId
|
|
|
|
|
- ? scheduleListForDetail.value.find((s) => s.feedback_session_id === newTask.sessionId)
|
|
|
|
|
- : undefined;
|
|
|
|
|
|
|
+ const scheduleItem = newTask.sessionId ? scheduleListForDetail.value.find((s) => s.feedback_session_id === newTask.sessionId) : undefined;
|
|
|
const panelState = getPanelState(newTask);
|
|
const panelState = getPanelState(newTask);
|
|
|
const existingScheduleTab = panelState.tabs.find((t) => t.type === 'schedule');
|
|
const existingScheduleTab = panelState.tabs.find((t) => t.type === 'schedule');
|
|
|
if (scheduleItem) {
|
|
if (scheduleItem) {
|