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 class="result-scroll-content">
<view id="result-scroll-top" class="result-scroll-top"></view> <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="conversation compact">
<view class="chat-bubble user"> <view class="chat-bubble user">
<text>{{ wishText }}</text> <text>{{ wishText }}</text>
@@ -466,11 +423,10 @@ const remainingCount = ref(3)
const style = ref('career') const style = ref('career')
const randomRecommendations = ref([]) const randomRecommendations = ref([])
const useSocialInsights = ref(true) const useSocialInsights = ref(true)
const viewMode = ref('read') const viewMode = ref('chat')
const scriptId = ref('') const scriptId = ref('')
const conversationId = ref('') const conversationId = ref('')
const currentVersionMessageId = ref('') const currentVersionMessageId = ref('')
const selectedVersionMessageId = ref('')
const messages = ref([]) const messages = ref([])
const versions = ref([]) const versions = ref([])
const chatInput = ref('') const chatInput = ref('')
@@ -617,7 +573,7 @@ const resultHasScriptReplies = computed(() => {
}) })
const currentScriptContent = 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') const targetMessage = messages.value.find(m => m.id === targetId && m.type === 'script')
let result let result
if (!targetMessage || !targetMessage.metadata) { if (!targetMessage || !targetMessage.metadata) {
@@ -650,37 +606,6 @@ const currentScriptContent = computed(() => {
const displayMessages = computed(() => messages.value) 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 () => { const loadMessages = async () => {
if (!conversationId.value) return if (!conversationId.value) return
@@ -952,10 +877,17 @@ const showVersions = async (msg) => {
const items = list.map(v => `V${v.versionNumber} ${v.id === currentVersionMessageId.value ? '(当前)' : ''}`) const items = list.map(v => `V${v.versionNumber} ${v.id === currentVersionMessageId.value ? '(当前)' : ''}`)
uni.showActionSheet({ uni.showActionSheet({
itemList: items, itemList: items,
success: (res) => { success: async (res) => {
const selected = list[res.tapIndex] 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 scriptId.value = script.id
conversationId.value = script.conversationId || '' conversationId.value = script.conversationId || ''
currentVersionMessageId.value = script.currentVersionMessageId || '' currentVersionMessageId.value = script.currentVersionMessageId || ''
selectedVersionMessageId.value = script.currentVersionMessageId || ''
wishText.value = script.theme || script.prompt || script.title || '继续修改这个人生剧本' wishText.value = script.theme || script.prompt || script.title || '继续修改这个人生剧本'
currentMessageTime.value = formatMessageTime() currentMessageTime.value = formatMessageTime()
currentResultTime.value = script.updateTime || script.updatedAt || script.createTime || script.createdAt || formatMessageTime() currentResultTime.value = script.updateTime || script.updatedAt || script.createTime || script.createdAt || formatMessageTime()
viewMode.value = 'read' viewMode.value = 'chat'
viewState.value = 'result' viewState.value = 'result'
if (conversationId.value) { if (conversationId.value) {
await loadMessages() await loadMessages()
@@ -1772,7 +1703,6 @@ const runGeneration = async ({ prompt, displayText, source = 'text', saveTheme }
scriptId.value = data.scriptId scriptId.value = data.scriptId
conversationId.value = data.conversationId conversationId.value = data.conversationId
currentVersionMessageId.value = data.currentVersionMessageId currentVersionMessageId.value = data.currentVersionMessageId
selectedVersionMessageId.value = data.currentVersionMessageId
currentResult.value = { currentResult.value = {
id: data.scriptId, id: data.scriptId,
@@ -1787,7 +1717,7 @@ const runGeneration = async ({ prompt, displayText, source = 'text', saveTheme }
} }
await loadMessages() await loadMessages()
viewMode.value = 'read' viewMode.value = 'chat'
viewState.value = 'result' viewState.value = 'result'
analytics.track('script_generate_success', { analytics.track('script_generate_success', {