feat: save session with name prompt
- Save button now prompts for session name - Uses same rename dialog with different labels - confirmSaveSession saves messages to MarkBase SQLite - Session appears in history list after save
This commit is contained in:
@@ -57,11 +57,11 @@
|
|||||||
</div>
|
</div>
|
||||||
<div v-if="renamingSession" class="rename-overlay" @click.self="cancelRename">
|
<div v-if="renamingSession" class="rename-overlay" @click.self="cancelRename">
|
||||||
<div class="rename-dialog">
|
<div class="rename-dialog">
|
||||||
<div class="rename-label">Rename conversation</div>
|
<div class="rename-label">{{ currentSession?.id === renamingSession?.id ? 'Save Session' : 'Rename Session' }}</div>
|
||||||
<input class="rename-input" v-model="renameValue" @keyup.enter="confirmRename" ref="renameInputEl" />
|
<input class="rename-input" v-model="renameValue" @keyup.enter="currentSession?.id === renamingSession?.id ? confirmSaveSession() : confirmRename()" ref="renameInputEl" />
|
||||||
<div class="rename-actions">
|
<div class="rename-actions">
|
||||||
<button class="rename-cancel" @click="cancelRename">Cancel</button>
|
<button class="rename-cancel" @click="cancelRename">Cancel</button>
|
||||||
<button class="rename-confirm" @click="confirmRename">Save</button>
|
<button class="rename-confirm" @click="currentSession?.id === renamingSession?.id ? confirmSaveSession() : confirmRename()">{{ currentSession?.id === renamingSession?.id ? 'Save' : 'Rename' }}</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -755,39 +755,52 @@ async function saveCurrentSession() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// If no current session, create one
|
// If no current session, create one with temp name
|
||||||
if (!currentSession.value) {
|
if (!currentSession.value) {
|
||||||
const now = new Date()
|
const newSession = await createSession('未命名', mode.value)
|
||||||
const timeStr = `${now.getFullYear()}/${(now.getMonth()+1).toString().padStart(2,'0')}/${now.getDate().toString().padStart(2,'0')} ${now.getHours().toString().padStart(2,'0')}:${now.getMinutes().toString().padStart(2,'0')}`
|
|
||||||
const newSession = await createSession(timeStr, mode.value)
|
|
||||||
if (newSession) {
|
if (newSession) {
|
||||||
setCurrentSession(newSession)
|
setCurrentSession(newSession)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save all messages to current session
|
// Show rename dialog for session name
|
||||||
if (currentSession.value) {
|
if (currentSession.value) {
|
||||||
for (const msg of messages.value) {
|
renamingSession.value = currentSession.value
|
||||||
if (msg.role === 'user' && msg.query) {
|
renameValue.value = currentSession.value.title === '未命名' ? '' : currentSession.value.title
|
||||||
await saveMessage(currentSession.value.id, {
|
nextTick(() => renameInputEl.value?.focus())
|
||||||
role: 'user',
|
|
||||||
content: msg.query,
|
|
||||||
mode: msg.mode || mode.value
|
|
||||||
})
|
|
||||||
} else if (msg.role === 'assistant') {
|
|
||||||
await saveMessage(currentSession.value.id, {
|
|
||||||
role: 'assistant',
|
|
||||||
content: msg.message || msg.answer || '',
|
|
||||||
mode: msg.mode || mode.value,
|
|
||||||
results: msg.results
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
await loadSessions()
|
|
||||||
alert('Session saved!')
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function confirmSaveSession() {
|
||||||
|
if (!renamingSession.value) return
|
||||||
|
|
||||||
|
// Update session title
|
||||||
|
const title = renameValue.value || `Session ${new Date().toLocaleString()}`
|
||||||
|
await renameSession(renamingSession.value.id, title)
|
||||||
|
|
||||||
|
// Save all messages to current session
|
||||||
|
for (const msg of messages.value) {
|
||||||
|
if (msg.role === 'user' && msg.query) {
|
||||||
|
await saveMessage(renamingSession.value.id, {
|
||||||
|
role: 'user',
|
||||||
|
content: msg.query,
|
||||||
|
mode: msg.mode || mode.value
|
||||||
|
})
|
||||||
|
} else if (msg.role === 'assistant') {
|
||||||
|
await saveMessage(renamingSession.value.id, {
|
||||||
|
role: 'assistant',
|
||||||
|
content: msg.message || msg.answer || '',
|
||||||
|
mode: msg.mode || mode.value,
|
||||||
|
results: msg.results
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
renamingSession.value = null
|
||||||
|
renameValue.value = ''
|
||||||
|
await loadSessions()
|
||||||
|
}
|
||||||
|
|
||||||
function toggleSessionMenu(id: string) {
|
function toggleSessionMenu(id: string) {
|
||||||
activeSessionMenu.value = activeSessionMenu.value === id ? null : id
|
activeSessionMenu.value = activeSessionMenu.value === id ? null : id
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user