diff --git a/web/static/css/style.css b/web/static/css/style.css index 615268e6..e4cefcee 100644 --- a/web/static/css/style.css +++ b/web/static/css/style.css @@ -22376,13 +22376,76 @@ body.projects-modal-open { .chat-project-panel { width: 280px; } +/* 列表 + 底部按钮共用同一内容宽度,避免滚动条缩进导致左右不齐 */ +.chat-project-panel-body { + display: flex; + flex-direction: column; + flex: 1; + min-height: 0; + width: 100%; +} +.chat-project-panel .role-selection-list-main { + flex: 1; + min-height: 0; + max-height: min(360px, 50vh); + padding-right: 0; + margin: 0; + width: 100%; +} +.chat-project-panel .role-selection-item-main { + width: 100%; + min-width: 0; +} .chat-project-panel-loading, .chat-project-panel-empty { - padding: 16px 14px; + padding: 16px 0; font-size: 0.8125rem; color: #64748b; text-align: center; } +.chat-project-panel-footer { + flex-shrink: 0; + margin-top: 6px; + padding-top: 10px; + border-top: 1px solid rgba(0, 0, 0, 0.06); + width: 100%; +} +.chat-project-panel .role-selection-item-main.chat-project-panel-create-btn { + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + gap: 8px; + width: 100%; + min-width: 0; + padding: 12px; + border: 1.5px dashed rgba(99, 102, 241, 0.45); + border-radius: 12px; + background: rgba(99, 102, 241, 0.06); + color: #4f46e5; + font-size: 0.8125rem; + font-weight: 600; + box-shadow: none; + transform: none; +} +.chat-project-panel .role-selection-item-main.chat-project-panel-create-btn:hover, +.chat-project-panel .role-selection-item-main.chat-project-panel-create-btn:focus-visible, +.chat-project-panel .role-selection-item-main.chat-project-panel-create-btn:active { + background: rgba(99, 102, 241, 0.12); + border-color: rgba(99, 102, 241, 0.65); + color: #4338ca; + box-shadow: none; + transform: none; +} +.chat-project-panel-create-icon { + flex-shrink: 0; + font-size: 1.125rem; + line-height: 1; + font-weight: 500; +} +.chat-project-panel-create-label { + line-height: 1.4; +} @media (max-width: 900px) { #page-projects .page-content.projects-page-layout { flex-direction: column; diff --git a/web/static/js/projects.js b/web/static/js/projects.js index b7e5e0ff..533e6657 100644 --- a/web/static/js/projects.js +++ b/web/static/js/projects.js @@ -906,6 +906,13 @@ function showNewProjectModal() { openProjectsOverlay('project-modal'); } +/** 从对话区「选择项目」面板打开新建项目,创建成功后自动绑定当前对话 */ +function showNewProjectModalFromChat() { + closeChatProjectPanel(); + window._projectModalFromChat = true; + showNewProjectModal(); +} + async function saveProjectModal() { const name = document.getElementById('project-modal-name').value.trim(); if (!name) return alert('请输入项目名称'); @@ -922,13 +929,22 @@ async function saveProjectModal() { alert(err.error || '保存失败'); return; } + const fromChat = !!window._projectModalFromChat; + window._projectModalFromChat = false; closeProjectModal(); const saved = await res.json(); await loadProjectsList(); - if (saved.id) await selectProject(saved.id); + if (saved.id) { + if (fromChat && !editId) { + await applyChatProjectSelection(saved.id); + } else { + await selectProject(saved.id); + } + } } function closeProjectModal() { + window._projectModalFromChat = false; closeProjectsOverlay('project-modal'); } @@ -1259,7 +1275,7 @@ function renderChatProjectPanelList() { const activeProjects = projectsCache.filter((p) => p.status !== 'archived'); const items = [{ id: '', name: '无项目', description: '不绑定项目黑板' }, ...activeProjects]; if (!items.length) { - list.innerHTML = '