refactor: ScriptView 删除 read 模式,剧本入口直接进对话流

This commit is contained in:
2026-07-01 07:59:48 +08:00
parent 3bb6716e0f
commit 6aeb5319e3
+15 -85
View File
@@ -158,51 +158,8 @@
<view class="result-scroll-content">
<view id="result-scroll-top" class="result-scroll-top"></view>
<!-- 阅读模式 -->
<view v-if="viewMode === 'read'">
<view class="version-bar">
<view
v-for="v in versions"
:key="v.id"
class="version-tag"
:class="{ active: selectedVersionMessageId === v.id, current: currentVersionMessageId === v.id }"
@click="onSelectVersion(v.id)"
>
<text>V{{ v.versionNumber }}</text>
<text v-if="currentVersionMessageId === v.id" class="version-current-label">(当前)</text>
</view>
</view>
<view class="script-read-content">
<view class="script-title">{{ currentScriptContent.title }}</view>
<view v-if="currentScriptContent.plotIntro" class="script-section">
<view class="script-section-title">序幕低谷回响</view>
<view class="script-section-body">{{ currentScriptContent.plotIntro }}</view>
</view>
<view v-if="currentScriptContent.plotTurning" class="script-section">
<view class="script-section-title">转折契机出现</view>
<view class="script-section-body">{{ currentScriptContent.plotTurning }}</view>
</view>
<view v-if="currentScriptContent.plotClimax" class="script-section">
<view class="script-section-title">高潮命运抉择</view>
<view class="script-section-body">{{ currentScriptContent.plotClimax }}</view>
</view>
<view v-if="currentScriptContent.plotEnding" class="script-section">
<view class="script-section-title">结局新的开始</view>
<view class="script-section-body">{{ currentScriptContent.plotEnding }}</view>
</view>
</view>
<view class="read-action-bar">
<view class="read-action-btn" @click="enterChatMode">进入对话修改</view>
<view class="read-action-btn secondary" @click="rewriteCurrentVersion">改写当前版本</view>
<view class="read-action-btn secondary" @click="continueCurrentVersion">续写当前版本</view>
<view v-if="selectedVersionMessageId && selectedVersionMessageId !== currentVersionMessageId" class="read-action-btn primary" @click="setAsCurrentVersion">设为当前版本</view>
</view>
</view>
<!-- 聊天模式 -->
<view v-else-if="viewMode === 'chat'">
<view v-else>
<view class="conversation compact">
<view class="chat-bubble user">
<text>{{ wishText }}</text>
@@ -466,11 +423,10 @@ const remainingCount = ref(3)
const style = ref('career')
const randomRecommendations = ref([])
const useSocialInsights = ref(true)
const viewMode = ref('read')
const viewMode = ref('chat')
const scriptId = ref('')
const conversationId = ref('')
const currentVersionMessageId = ref('')
const selectedVersionMessageId = ref('')
const messages = ref([])
const versions = ref([])
const chatInput = ref('')
@@ -617,7 +573,7 @@ const resultHasScriptReplies = computed(() => {
})
const currentScriptContent = computed(() => {
const targetId = selectedVersionMessageId.value || currentVersionMessageId.value
const targetId = currentVersionMessageId.value
const targetMessage = messages.value.find(m => m.id === targetId && m.type === 'script')
let result
if (!targetMessage || !targetMessage.metadata) {
@@ -650,37 +606,6 @@ const currentScriptContent = computed(() => {
const displayMessages = computed(() => messages.value)
const onSelectVersion = (messageId) => {
selectedVersionMessageId.value = messageId
}
const setAsCurrentVersion = async () => {
try {
await switchVersion({ scriptId: scriptId.value, messageId: selectedVersionMessageId.value })
currentVersionMessageId.value = selectedVersionMessageId.value
uni.showToast({ title: '已设为当前版本', icon: 'success' })
} catch (error) {
uni.showToast({ title: error.message || '切换失败', icon: 'none' })
}
}
const enterChatMode = () => {
viewMode.value = 'chat'
loadMessages()
}
const rewriteCurrentVersion = () => {
selectedVersionMessageId.value = currentVersionMessageId.value
viewMode.value = 'chat'
loadMessages()
}
const continueCurrentVersion = () => {
selectedVersionMessageId.value = currentVersionMessageId.value
viewMode.value = 'chat'
loadMessages()
}
const loadMessages = async () => {
if (!conversationId.value) return
@@ -952,10 +877,17 @@ const showVersions = async (msg) => {
const items = list.map(v => `V${v.versionNumber} ${v.id === currentVersionMessageId.value ? '(当前)' : ''}`)
uni.showActionSheet({
itemList: items,
success: (res) => {
success: async (res) => {
const selected = list[res.tapIndex]
selectedVersionMessageId.value = selected.id
viewMode.value = 'read'
// 切换到选中的版本
try {
await switchVersion({ scriptId: scriptId.value, messageId: selected.id })
currentVersionMessageId.value = selected.id
await loadMessages()
uni.showToast({ title: `已切换到 V${selected.versionNumber}`, icon: 'success' })
} catch (error) {
uni.showToast({ title: error.message || '切换失败', icon: 'none' })
}
}
})
}
@@ -1598,11 +1530,10 @@ const openScriptChat = async (payload = {}) => {
scriptId.value = script.id
conversationId.value = script.conversationId || ''
currentVersionMessageId.value = script.currentVersionMessageId || ''
selectedVersionMessageId.value = script.currentVersionMessageId || ''
wishText.value = script.theme || script.prompt || script.title || '继续修改这个人生剧本'
currentMessageTime.value = formatMessageTime()
currentResultTime.value = script.updateTime || script.updatedAt || script.createTime || script.createdAt || formatMessageTime()
viewMode.value = 'read'
viewMode.value = 'chat'
viewState.value = 'result'
if (conversationId.value) {
await loadMessages()
@@ -1772,7 +1703,6 @@ const runGeneration = async ({ prompt, displayText, source = 'text', saveTheme }
scriptId.value = data.scriptId
conversationId.value = data.conversationId
currentVersionMessageId.value = data.currentVersionMessageId
selectedVersionMessageId.value = data.currentVersionMessageId
currentResult.value = {
id: data.scriptId,
@@ -1787,7 +1717,7 @@ const runGeneration = async ({ prompt, displayText, source = 'text', saveTheme }
}
await loadMessages()
viewMode.value = 'read'
viewMode.value = 'chat'
viewState.value = 'result'
analytics.track('script_generate_success', {