cyrus 7 months ago
parent
commit
65d5ced263

+ 2 - 0
docker-compose.yml

@@ -209,6 +209,8 @@ services:
       RAG_RETRIEVAL_SCORE_THRESHOLD: ${RAG_RETRIEVAL_SCORE_THRESHOLD:-0.3}
     extra_hosts:
       - "host.docker.internal:host-gateway"
+    volumes:
+      - ./backend/config:/app/config
     depends_on:
       mysql:
         condition: service_healthy

+ 1 - 1
frontend/src/components/Sidebar.vue

@@ -154,7 +154,7 @@ const userInitial = computed(() => user.username?.[0]?.toUpperCase() || '?');
 const normalizedRole = computed(() => (user.role || '').toUpperCase());
 const isAdmin = computed(() => normalizedRole.value === 'ADMIN');
 const canAccessTaskBuild = computed(() => ['ADMIN', 'DEVELOPER', 'ANALYST'].includes(normalizedRole.value));
-const canAccessResourceOps = computed(() => ['ADMIN', 'DEVELOPER', 'ANALYST'].includes(normalizedRole.value));
+const canAccessResourceOps = computed(() => ['ADMIN', 'DEVELOPER'].includes(normalizedRole.value));
 const showMenu = ref(false);
 const userProfileRef = ref(null);
 const mobileMenuOpen = ref(false);

+ 8 - 8
frontend/src/router/index.js

@@ -74,49 +74,49 @@ const routes = [
     path: '/resource/clusters',
     name: 'Clusters',
     component: ClusterPage,
-    meta: { roles: ['ADMIN', 'DEVELOPER', 'ANALYST'] }
+    meta: { roles: ['ADMIN', 'DEVELOPER'] }
   },
   {
     path: '/resource/clusters/:clusterId',
     name: 'ClusterConsole',
     component: ClusterConsolePage,
-    meta: { roles: ['ADMIN', 'DEVELOPER', 'ANALYST'] }
+    meta: { roles: ['ADMIN', 'DEVELOPER'] }
   },
   {
     path: '/ops/audit-log',
     name: 'AuditLog',
     component: AuditLogPage,
-    meta: { roles: ['ADMIN', 'DEVELOPER', 'ANALYST'] }
+    meta: { roles: ['ADMIN', 'DEVELOPER'] }
   },
   {
     path: '/ops/alerts',
     name: 'AlertRules',
     component: AlertRulePage,
-    meta: { roles: ['ADMIN', 'DEVELOPER', 'ANALYST'] }
+    meta: { roles: ['ADMIN', 'DEVELOPER'] }
   },
   {
     path: '/ops/alerts/events',
     name: 'AlertEvents',
     component: AlertEventPage,
-    meta: { roles: ['ADMIN', 'DEVELOPER', 'ANALYST'] }
+    meta: { roles: ['ADMIN', 'DEVELOPER'] }
   },
   {
     path: '/resource/stocks',
     name: 'Stocks',
     component: StockPage,
-    meta: { roles: ['ADMIN', 'DEVELOPER', 'ANALYST'] }
+    meta: { roles: ['ADMIN', 'DEVELOPER'] }
   },
   {
     path: '/resource/stocks/:machineId/console',
     name: 'StockConsole',
     component: StockConsolePage,
-    meta: { roles: ['ADMIN', 'DEVELOPER', 'ANALYST'] }
+    meta: { roles: ['ADMIN', 'DEVELOPER'] }
   },
   {
     path: '/settings',
     name: 'Settings',
     component: SettingsPage,
-    meta: { roles: ['ADMIN', 'DEVELOPER'] }
+    meta: { roles: ['ADMIN', 'DEVELOPER', 'ANALYST'] }
   },
   {
     path: '/settings/members',

+ 5 - 4
frontend/src/views/task-build/DialogTaskBuildPage.vue

@@ -683,7 +683,7 @@ onMounted(async () => {
 .hint-tag { background: #f0f2f5; padding: 7px 14px; border-radius: 20px; font-size: 13px; cursor: pointer; transition: background 0.2s; }
 .hint-tag:hover { background: var(--accent-soft); color: var(--accent); }
 .chat-input-container.centered-input { width: min(820px, calc(100% - 48px)); border-top: none; padding: 0; margin-top: 16px; }
-.chat-input-container.centered-input .chat-input { min-height: 72px; }
+.chat-input-container.centered-input .chat-input { min-height: 24px; }
 .message-row { display: flex; width: 100%; }
 .message-row.user { justify-content: flex-end; }
 .message-wrapper { display: flex; flex-direction: column; min-width: 0; }
@@ -734,9 +734,10 @@ onMounted(async () => {
 .stat-num { font-size: 16px; font-weight: 700; color: var(--accent); }
 .stat-label { font-size: 11px; color: var(--text-muted); }
 .chat-input-container { padding: 16px max(24px, calc((100% - 820px) / 2)); }
-.input-wrapper { display: flex; align-items: flex-end; gap: 10px; background: #fff; border: 1px solid var(--border-color); border-radius: 16px; padding: 10px 14px; box-shadow: 0 8px 24px rgba(15,23,42,0.07); transition: border-color 0.2s, box-shadow 0.2s; }
-.input-wrapper:focus-within { border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft), 0 8px 24px rgba(15,23,42,0.07); }
-.chat-input { flex: 1; border: none; background: transparent; padding: 6px 0; font-family: inherit; font-size: 15px; line-height: 1.6; color: var(--text-main); outline: none; resize: none; max-height: 200px; }
+.input-wrapper { display: flex; align-items: center; gap: 10px; background: #fff; border: 1px solid var(--border-color); border-radius: 16px; padding: 10px 14px; box-shadow: 0 8px 24px rgba(15,23,42,0.07); transition: border-color 0.2s, box-shadow 0.2s; }
+.input-wrapper:focus-within { border-color: var(--accent); box-shadow: 0 8px 24px rgba(15,23,42,0.07); }
+.chat-input { flex: 1; border: none; background: transparent; min-height: 24px; height: 24px; max-height: 200px; padding: 0; font-family: inherit; font-size: 15px; line-height: 24px; color: var(--text-main); outline: none; resize: none; overflow-y: auto; }
+.chat-input:focus { border: none !important; outline: none !important; box-shadow: none !important; }
 .send-btn { background: var(--accent); color: #fff; border: none; width: 34px; height: 34px; border-radius: 8px; display: flex; align-items: center; justify-content: center; cursor: pointer; flex-shrink: 0; transition: opacity 0.2s; }
 .send-btn:disabled { opacity: 0.4; cursor: not-allowed; }
 .send-icon { width: 18px; height: 18px; fill: currentColor; }