feat: chat 模式传 messageType/versionLabel/新 emits 给 MessageCard
This commit is contained in:
@@ -221,18 +221,28 @@
|
||||
>
|
||||
<MessageCard
|
||||
v-if="message.sender === 'assistant' || message.type === 'script'"
|
||||
message-type="script"
|
||||
:version-label="formatVersionLabel(message)"
|
||||
:has-children="messageHasChildren(message)"
|
||||
:can-delete="message.id !== currentVersionMessageId && message.parentMessageId !== null"
|
||||
:can-rewrite="true"
|
||||
:can-continue="true"
|
||||
:content="message.content"
|
||||
:collapsed="isMessageCollapsed(message)"
|
||||
:content-length="message.content.length"
|
||||
:is-short-message="message.content.length < 100"
|
||||
:is-short-message="false"
|
||||
:tts-icon="ttsPlayer.playing.value ? 'Ⅱ' : '▶'"
|
||||
:tts-text="ttsPlayer.playing.value ? '暂停' : '播放'"
|
||||
@toggle-collapse="toggleMessageCollapse(message)"
|
||||
@copy="copyMessageContent(message)"
|
||||
@rewrite="rewriteMessage(message)"
|
||||
@continue-script="continueMessage(message)"
|
||||
@view-versions="viewMessageVersions(message)"
|
||||
@delete-version="removeVersion(message)"
|
||||
@play-tts="playMessageTts(message)"
|
||||
@change-direction="changeDirection"
|
||||
@not-like-me="notLikeMe"
|
||||
@continue="continueMessage(message)"
|
||||
@play-tts="playMessageTts(message)"
|
||||
/>
|
||||
<view v-else class="chat-bubble user">
|
||||
<text>{{ message.content }}</text>
|
||||
@@ -719,6 +729,66 @@ const initializeFirstAIMessage = async () => {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 格式化版本标签,显示在 MessageCard 上
|
||||
*/
|
||||
const formatVersionLabel = (message) => {
|
||||
if (message.type !== 'script') return ''
|
||||
const versionNum = message.versionNumber || 1
|
||||
const isCurrent = message.id === currentVersionMessageId.value
|
||||
return isCurrent ? `V${versionNum} (当前)` : `V${versionNum}`
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断消息是否有子版本
|
||||
*/
|
||||
const messageHasChildren = (message) => {
|
||||
if (!message || message.type !== 'script') return false
|
||||
// 通过 versions 列表判断是否有子版本
|
||||
return versions.value.some(v => v.parentMessageId === message.id)
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看消息的版本历史
|
||||
*/
|
||||
const viewMessageVersions = async (message) => {
|
||||
try {
|
||||
const res = await listMessageVersions(message.id)
|
||||
const versionList = res.data || []
|
||||
if (versionList.length === 0) {
|
||||
uni.showToast({ title: '暂无历史版本', icon: 'none' })
|
||||
return
|
||||
}
|
||||
|
||||
const items = versionList.map(v => {
|
||||
const isCurrent = v.id === currentVersionMessageId.value
|
||||
return `${isCurrent ? '★ ' : ''}V${v.versionNumber || '-'}`
|
||||
})
|
||||
|
||||
uni.showActionSheet({
|
||||
itemList: items,
|
||||
success: async (actionRes) => {
|
||||
const selected = versionList[actionRes.tapIndex]
|
||||
if (!selected) return
|
||||
if (selected.id === currentVersionMessageId.value) {
|
||||
uni.showToast({ title: '已是当前版本', icon: 'none' })
|
||||
return
|
||||
}
|
||||
try {
|
||||
await switchVersion({ scriptId: scriptId.value, messageId: selected.id })
|
||||
currentVersionMessageId.value = selected.id
|
||||
await loadMessages()
|
||||
uni.showToast({ title: `已切换到 V${selected.versionNumber}`, icon: 'success' })
|
||||
} catch (switchErr) {
|
||||
uni.showToast({ title: switchErr.message || '切换失败', icon: 'none' })
|
||||
}
|
||||
}
|
||||
})
|
||||
} catch (error) {
|
||||
uni.showToast({ title: error.message || '加载版本失败', icon: 'none' })
|
||||
}
|
||||
}
|
||||
|
||||
const sendChat = async () => {
|
||||
if (!chatInput.value.trim() || generating.value) return
|
||||
const content = chatInput.value.trim()
|
||||
|
||||
Reference in New Issue
Block a user