refactor: ScriptView 删除 read 模式,剧本入口直接进对话流
This commit is contained in:
@@ -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', {
|
||||||
|
|||||||
Reference in New Issue
Block a user