Files
bw-mini-app/src/pages/index/index.tsx
imeepos cef1c697a5 refactor: 将结果预览重构为独立页面
- 创建新的pages/result页面用于图片预览
- 修改index页面改用页面跳转替换组件调用
- 通过URL参数传递图片数据
- 在app.config.ts中注册新页面路由
- 删除ImageResultViewer组件,功能迁移至result页面
- 优化页面状态管理,简化index页面逻辑
2025-09-01 18:57:52 +08:00

74 lines
2.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { View } from '@tarojs/components'
import { useState } from 'react'
import { navigateTo } from '@tarojs/taro'
import './index.css'
import { useSdk } from '../../hooks/index'
import UploadButton from '../../components/UploadButton'
import LoadingOverlay from '../../components/LoadingOverlay'
import ErrorOverlay from '../../components/ErrorOverlay'
type PageStep = 'upload' | 'loading' | 'error'
interface AppState {
step: PageStep;
error: string | null;
}
export default function Index() {
const sdk = useSdk()
const [state, setState] = useState<AppState>({
step: 'upload',
error: null
})
const chooseAndGenerateImage = async () => {
try {
// 选择图片选择完成后会自动触发loading状态
const task_id = await sdk.chooseAndGenerateImage({
onImageSelected: () => {
// 选择图片完成后立即显示loading
setState({ step: 'loading', error: null })
}
})
// 等待生成完成
await new Promise((resolve) => setTimeout(resolve, 5000))
const urls = await sdk.getTaskStatus(task_id)
// 跳转到结果页面
navigateTo({
url: `/pages/result/index?images=${encodeURIComponent(JSON.stringify(urls))}`
})
// 重置状态
setState({ step: 'upload', error: null })
} catch (error) {
const errorMsg = error instanceof Error ? error.message : '生成失败'
setState({ step: 'error', error: errorMsg })
}
}
const resetToUpload = () => {
setState({ step: 'upload', error: null })
}
const renderCurrentStep = () => {
switch (state.step) {
case 'upload':
return <UploadButton onUpload={chooseAndGenerateImage} />
case 'loading':
return <LoadingOverlay />
case 'error':
return <ErrorOverlay onRetry={resetToUpload} />
default:
return <UploadButton onUpload={chooseAndGenerateImage} />
}
}
return (
<View className='index'>
{renderCurrentStep()}
</View>
)
}