feat(chat): 会话状态机重塑——空白草稿态 + draftProject 重命名 + 空态提示
This commit is contained in:
@@ -446,11 +446,14 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
let sid = null;
|
let sid = null;
|
||||||
let currentProject = null;
|
let draftProject = null; // 下一空白会话将绑定/已绑的项目(原 currentProject)
|
||||||
let activeProject = null;
|
let activeProject = null; // 当前已落库会话绑定的项目(来自后端)
|
||||||
let projects = [];
|
let projects = [];
|
||||||
let drawerOpen = false;
|
let drawerOpen = false;
|
||||||
let drawerSelected = null; // 当前抽屉中编辑的项目名(null = 新建模式)
|
let drawerSelected = null; // 当前抽屉中编辑的项目名(null = 新建模式)
|
||||||
|
let lastTriggerEl = null; // 打开抽屉/下拉前的焦点元素(C1)
|
||||||
|
let drawerDirty = false; // 抽屉表单是否有未保存改动(B6)
|
||||||
|
let drawerSnapshot = null; // loadDrawerForm 时的字段快照(B6)
|
||||||
|
|
||||||
const chatEl = document.getElementById('chat');
|
const chatEl = document.getElementById('chat');
|
||||||
const inputEl = document.getElementById('input');
|
const inputEl = document.getElementById('input');
|
||||||
@@ -702,19 +705,28 @@ function updateUploadBar() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ---------- 空态/欢迎渲染 ----------
|
||||||
|
function renderEmptyOrWelcome() {
|
||||||
|
chatEl.innerHTML = '';
|
||||||
|
if (draftProject === null) {
|
||||||
|
addMsg('assistant', '请新建项目或者选择项目');
|
||||||
|
} else {
|
||||||
|
addMsg('assistant', '你好!我是 Genesis 概要设计书生成 Agent。<br>请先在上方📎上传<strong>要件定义 xlsx</strong>'
|
||||||
|
+ (draftProject ? '(模板/规则/代码库已由项目「' + esc(draftProject) + '」提供)' : '与<strong>模板 docx</strong>')
|
||||||
|
+ ',然后告诉我:<br>· 「生成概要设计书」(自动解析→影响→生成→QA)<br>· 「用中文生成」 / 「现在什么状态?」');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ---------- 会话创建/加载 ----------
|
// ---------- 会话创建/加载 ----------
|
||||||
async function newSession() {
|
async function newSession() {
|
||||||
const d = await api('POST', '/api/sessions', { user_id: 'default', project: currentProject || null });
|
sid = null;
|
||||||
sid = d.session_id;
|
activeProject = null;
|
||||||
activeProject = d.project || null;
|
try { localStorage.removeItem('genesis_session'); } catch (e) { /* 忽略 */ }
|
||||||
badge.textContent = '会话: ' + (d.name || '新会话');
|
|
||||||
chatEl.innerHTML = '';
|
chatEl.innerHTML = '';
|
||||||
|
badge.textContent = '未创建会话';
|
||||||
updateUploadBar();
|
updateUploadBar();
|
||||||
await refreshSessions();
|
await refreshSessions();
|
||||||
try { localStorage.setItem('genesis_session', sid); } catch (e) { /* 忽略 */ }
|
renderEmptyOrWelcome();
|
||||||
addMsg('assistant', '你好!我是 Genesis 概要设计书生成 Agent。<br>请先在上方📎上传<strong>要件定义 xlsx</strong>'
|
|
||||||
+ (activeProject ? '(模板/规则/代码库已由项目「' + esc(activeProject) + '」提供)' : '与<strong>模板 docx</strong>')
|
|
||||||
+ ',然后告诉我:<br>· 「生成概要设计书」(自动解析→影响→生成→QA)<br>· 「用中文生成」 / 「现在什么状态?」');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function loadSession(id) {
|
async function loadSession(id) {
|
||||||
@@ -722,6 +734,8 @@ async function loadSession(id) {
|
|||||||
const rec = await api('GET', '/api/sessions/' + id);
|
const rec = await api('GET', '/api/sessions/' + id);
|
||||||
sid = id;
|
sid = id;
|
||||||
activeProject = rec.project || null;
|
activeProject = rec.project || null;
|
||||||
|
draftProject = rec.project || null; // 载入既有会话时,顶栏与侧边栏过滤对齐该会话项目
|
||||||
|
applyProjectContext();
|
||||||
badge.textContent = '会话: ' + (rec.name || '新会话');
|
badge.textContent = '会话: ' + (rec.name || '新会话');
|
||||||
const msgs = await api('GET', '/api/chat/' + id + '/messages');
|
const msgs = await api('GET', '/api/chat/' + id + '/messages');
|
||||||
chatEl.innerHTML = '';
|
chatEl.innerHTML = '';
|
||||||
|
|||||||
Reference in New Issue
Block a user