|
|
@@ -35,6 +35,9 @@
|
|
|
@toggle-sub-agents="toggleSubAgentPanel"
|
|
|
@toggle-schedules="toggleSchedulePanel"
|
|
|
/>
|
|
|
+ <!-- 【改动 M3】isAdmin 透传给左侧任务面板:由面板内部过滤掉「技能」「子智能体」两个管理入口
|
|
|
+ (这两个入口的按钮实际渲染在 TaskListPanel 的 optionItems 里,不是本文件第 33/34 行的监听上)。
|
|
|
+ 注意「定时任务」不属于全局变更,保持对所有人开放。 -->
|
|
|
</div>
|
|
|
|
|
|
<!-- 右侧内容区:根据 activePanel 切换显示 -->
|
|
|
@@ -76,6 +79,8 @@
|
|
|
<TodoListBar v-if="showTodoBar" :todos="currentTodos" />
|
|
|
|
|
|
<!-- 输入区域 -->
|
|
|
+ <!-- 【改动 M3】:isAdmin 透传给输入区,由输入区隐藏「思考级别」切换控件;
|
|
|
+ 注意只隐藏"切换",思考级别的读取(getModelMsg)对所有人保持开放 -->
|
|
|
<ChatInputArea
|
|
|
ref="chatInputRef"
|
|
|
v-model="inputMessage"
|
|
|
@@ -150,7 +155,7 @@
|
|
|
</template>
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
- import { ref, nextTick, watch, computed, onBeforeUnmount } from 'vue';
|
|
|
+ import { ref, nextTick, watch, computed, onBeforeUnmount, onMounted } from 'vue';
|
|
|
import dayjs from 'dayjs';
|
|
|
import {
|
|
|
unifiedStream,
|
|
|
@@ -310,9 +315,12 @@
|
|
|
const contextMax = ref(1000000);
|
|
|
const contextPercent = ref(0);
|
|
|
const thinkLevel = ref('off');
|
|
|
- // 是否具备“全局变更”管理权限(TfAgents 的 is_admin);取不到一律按非管理员处理(保守)
|
|
|
+ // 【改动 M3】是否具备「全局变更」管理权限(来自 TfAgents 的 is_admin)。
|
|
|
+ // 初值刻意取 false:在接口返回之前先按非管理员渲染,避免管理入口「闪现」给非管理员。
|
|
|
+ // 取不到(未登录 / 接口未上线 / 令牌失效)也一律停留在 false —— 保守失败,宁可不显示。
|
|
|
const isAdmin = ref(false);
|
|
|
- // 管理员白名单是否已在服务端配置;false 时可提示管理员未配置
|
|
|
+ // 服务端管理员白名单是否已配置(TfAgents 的 admin_configured)。
|
|
|
+ // 预留:false 时可在面板处提示「管理员未配置,管理功能暂不可用」,避免运维误判为故障。
|
|
|
const adminConfigured = ref(true);
|
|
|
const editMode = ref('full');
|
|
|
const contextBreakdown = ref({ messages: 0, mcp: 0, skills: 0, system_prompt: 0, other: 0 });
|
|
|
@@ -1349,6 +1357,16 @@
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+ /**
|
|
|
+ * 拉取当前登录用户的权限信息(TfAgents 的 GET /ventAI/api/me)。
|
|
|
+ *
|
|
|
+ * 为什么需要:TfAgents 已把「技能上传/启停、子智能体增删改、思考级别切换」等全局变更端点收归管理员
|
|
|
+ * (见 docs/基座(mky-vent-base)配合改动清单.md 的 M3,用户已定案方案 B)。基座据此隐藏对应入口,
|
|
|
+ * 避免非管理员点了才被 403。
|
|
|
+ *
|
|
|
+ * 安全语义(保守失败):任何异常(未登录 401 / 接口未上线 404 / 网络失败)一律按「非管理员」处理,
|
|
|
+ * 隐藏管理入口。注意这只是界面可见性,真正的拦截仍在 TfAgents 后端——前端隐藏不等于安全。
|
|
|
+ */
|
|
|
const fetchMe = async () => {
|
|
|
try {
|
|
|
const me = await getMe();
|
|
|
@@ -1362,6 +1380,13 @@
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+ // 必须挂载即拉取一次:本组件有两种用法——① 由页面在打开时才置 visible=true(watch 能捕获变化);
|
|
|
+ // ② 直接以 visible=true 挂载(如 aix 首页/嵌入式场景),此时 watch 不会触发,若不在此处拉取,
|
|
|
+ // isAdmin 将永远停留在 false,管理员也会看不到管理入口(浏览器验收实测确认过该缺陷)。
|
|
|
+ onMounted(() => {
|
|
|
+ fetchMe();
|
|
|
+ });
|
|
|
+
|
|
|
const fetchSessionMode = async (sessionId: string) => {
|
|
|
try {
|
|
|
const res = await getSessionMode(sessionId);
|
|
|
@@ -1931,7 +1956,7 @@
|
|
|
} else {
|
|
|
await fetchSessionList();
|
|
|
fetchModelMsg();
|
|
|
- fetchMe();
|
|
|
+ fetchMe(); // 【改动 M3】每次打开时刷新权限(管理员名单可能在服务端 .env 变更)
|
|
|
fetchScheduleListForDetail();
|
|
|
fetchTodayUsage();
|
|
|
|