main.ts 2.8 KB

12345678910111213141516171819202122232425262728293031
  1. import { createApp, defineComponent, h, ref } from 'vue'
  2. import WorkspaceMessageTimeline from '@/components/workspace/WorkspaceMessageTimeline.vue'
  3. import MessageTimeline from '@/components/messages/MessageTimeline.vue'
  4. import type { UiMessage } from '@/components/messages/types'
  5. import { useChatAppearance } from '@/stores/chatAppearance'
  6. import '@/styles/tokens.css'
  7. import '@/styles/global.css'
  8. const query = new URLSearchParams(location.search)
  9. document.documentElement.classList.toggle('dark', query.has('dark'))
  10. // Isolated fixture only: the product keeps the user's saved appearance.
  11. useChatAppearance().selectPreset('grok')
  12. const mobile = query.has('mobile')
  13. const imageUrl = location.origin + '/tests/fixtures/message-media/bamboo.png'
  14. const messages: UiMessage[] = [
  15. { id: 'u1', role: 'user', content: '随便发个文件给我看看' },
  16. { id: 'a1', role: 'assistant', content: '随便拿了一个小文本给你试打开。', attachments: [{ id: 'file', name: 'bamboo-sample.txt', size: 134, kind: 'file', url: '/tests/fixtures/message-media/bamboo-sample.txt' }] },
  17. { id: 'u2', role: 'user', content: '图片发一个' },
  18. { id: 'a2', role: 'assistant', content: `发一张试传。\n\n![竹叶](${imageUrl})` },
  19. { id: 'u3', role: 'user', content: '提示信息是什么样的?' },
  20. { id: 'a3', role: 'assistant', content: '提示会居中显示,点开可看详情。' },
  21. { id: 'notice', role: 'system', content: '任务已有新结果', taskReference: { conversationId: 'team', taskId: 'task' } },
  22. ]
  23. if (query.has('order')) messages.splice(0, messages.length, { id:'order',role:'assistant',content:`第一段。\n\n![竹叶](${imageUrl})\n\n图片下面的文字。\n\n[bamboo-sample.txt](/api/app/files/file/download)\n\n最后一段。`,attachments:[{id:'file',name:'bamboo-sample.txt',size:134,kind:'file',url:'/api/app/files/file/download'}]})
  24. createApp(defineComponent({ setup() {
  25. const opened = ref('')
  26. return () => h('main', { style: `height:100dvh;display:flex;flex-direction:column;${mobile ? 'max-width:390px;margin:auto;border-inline:1px solid var(--line)' : ''}` }, [
  27. h(query.has('ordinary') ? MessageTimeline : WorkspaceMessageTimeline, { identity:'media-preview',title:'竹儿',showAssistantIdentity:false,messages,onPreview:(file:any)=>opened.value=file.name,onPreviewFile:(file:any)=>opened.value=file.name }),
  28. h('footer', {style:'padding:12px 24px;border-top:1px solid var(--line);color:var(--text-muted)'}, '向竹儿提问'),
  29. opened.value ? h('dialog',{open:true,style:'position:fixed;inset:20% auto auto 50%;transform:translateX(-50%);border:1px solid var(--line);border-radius:20px;padding:24px;background:var(--surface);color:var(--text-primary)'},[h('p',opened.value), h('button',{onClick:()=>opened.value=''},'关闭预览')]) : null,
  30. ])
  31. } })).mount('#app')