ios-projects/react/src/pages/ImportPage.tsx
WangDL c10e299dc0 feat: add React UI prototype for iOS UX reference
- 22-page high-fidelity design gallery
- shadcn/ui + Tailwind CSS + Vite
- iPhone frame wrapper for realistic preview
- Bottom tab bar component
- All pages match ZhiXi app screens
2026-05-09 11:21:05 +08:00

252 lines
9.9 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.

// Page 20: Import Page - 导入资料页
import { ArrowLeftIcon, UploadIcon, LinkIcon, FileTextIcon, FileIcon, CheckCircleIcon, SparklesIcon } from 'lucide-react';
const recentImports = [
{ name: `CS229 Lecture Notes.pdf`, size: `2.4 MB`, items: 12, status: 'done' },
{ name: `统计学基础.docx`, size: `1.1 MB`, items: 8, status: 'done' },
{ name: `attention_is_all_you_need.pdf`, size: `3.8 MB`, items: 0, status: 'processing' },
];
const ImportPage = () => {
return (
<div
data-cmp="ImportPage"
className="absolute inset-0 flex flex-col"
style={{ background: '#0F0F1A', paddingTop: '44px' }}
>
{/* Nav */}
<div className="flex items-center justify-between px-4 py-3"
style={{ borderBottom: '1px solid rgba(255,255,255,0.06)' }}
>
<button
style={{
width: '36px', height: '36px', borderRadius: '10px',
background: 'rgba(255,255,255,0.05)',
border: '1px solid rgba(255,255,255,0.08)',
display: 'flex', alignItems: 'center', justifyContent: 'center',
}}
>
<ArrowLeftIcon size={18} style={{ color: 'rgba(240,240,255,0.7)' }} />
</button>
<p style={{ fontSize: '15px', fontWeight: '700', color: '#F0F0FF' }}></p>
<div style={{ width: '36px' }} />
</div>
<div className="flex-1 overflow-y-auto px-5 py-5">
{/* Target library */}
<div
className="flex items-center gap-3 px-4 py-3 mb-5"
style={{
background: 'rgba(255,255,255,0.04)',
border: '1px solid rgba(255,255,255,0.08)',
borderRadius: '14px',
}}
>
<span style={{ fontSize: '16px' }}>🤖</span>
<span style={{ flex: 1, fontSize: '13px', color: 'rgba(240,240,255,0.6)' }}>
<span style={{ color: '#F0F0FF', fontWeight: '700' }}></span>
</span>
<span style={{ fontSize: '12px', color: '#7C6EFA' }}></span>
</div>
{/* Import methods */}
<div className="flex flex-col gap-4 mb-6">
{/* Upload file */}
<div
style={{
background: 'rgba(124,110,250,0.08)',
border: '2px dashed rgba(124,110,250,0.3)',
borderRadius: '20px',
padding: '24px',
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
gap: '8px',
}}
>
<div
style={{
width: '52px', height: '52px', borderRadius: '16px',
background: 'rgba(124,110,250,0.2)',
display: 'flex', alignItems: 'center', justifyContent: 'center',
marginBottom: '4px',
}}
>
<UploadIcon size={24} style={{ color: '#7C6EFA' }} />
</div>
<p style={{ fontSize: '15px', fontWeight: '700', color: '#F0F0FF' }}></p>
<p style={{ fontSize: '12px', color: 'rgba(240,240,255,0.4)', textAlign: 'center', lineHeight: '1.6' }}>
PDFWordPPTTXTMarkdown
</p>
<button
style={{
marginTop: '4px',
padding: '10px 24px',
background: 'linear-gradient(135deg, #7C6EFA, #9B8BFF)',
borderRadius: '12px',
fontSize: '13px', fontWeight: '700', color: 'white',
boxShadow: '0 4px 12px rgba(124,110,250,0.25)',
}}
>
</button>
</div>
{/* Row: Paste text + Link */}
<div className="flex gap-3">
{/* Paste text */}
<div
className="flex-1 flex flex-col items-center gap-2 py-5"
style={{
background: 'rgba(45,212,191,0.07)',
border: '1px solid rgba(45,212,191,0.2)',
borderRadius: '16px',
}}
>
<div
style={{
width: '44px', height: '44px', borderRadius: '14px',
background: 'rgba(45,212,191,0.15)',
display: 'flex', alignItems: 'center', justifyContent: 'center',
}}
>
<FileTextIcon size={20} style={{ color: '#2DD4BF' }} />
</div>
<p style={{ fontSize: '13px', fontWeight: '700', color: '#F0F0FF' }}></p>
<p style={{ fontSize: '11px', color: 'rgba(240,240,255,0.35)', textAlign: 'center', padding: '0 8px', lineHeight: '1.5' }}>
</p>
</div>
{/* URL import */}
<div
className="flex-1 flex flex-col items-center gap-2 py-5"
style={{
background: 'rgba(249,115,22,0.07)',
border: '1px solid rgba(249,115,22,0.2)',
borderRadius: '16px',
}}
>
<div
style={{
width: '44px', height: '44px', borderRadius: '14px',
background: 'rgba(249,115,22,0.15)',
display: 'flex', alignItems: 'center', justifyContent: 'center',
}}
>
<LinkIcon size={20} style={{ color: '#F97316' }} />
</div>
<p style={{ fontSize: '13px', fontWeight: '700', color: '#F0F0FF' }}></p>
<p style={{ fontSize: '11px', color: 'rgba(240,240,255,0.35)', textAlign: 'center', padding: '0 8px', lineHeight: '1.5' }}>
arXiv 线
</p>
</div>
</div>
</div>
{/* AI Processing Info */}
<div
className="mb-6 px-4 py-4"
style={{
background: 'rgba(124,110,250,0.07)',
border: '1px solid rgba(124,110,250,0.18)',
borderRadius: '16px',
}}
>
<div className="flex items-center gap-2 mb-3">
<SparklesIcon size={15} style={{ color: '#A78BFA' }} />
<p style={{ fontSize: '13px', fontWeight: '700', color: '#F0F0FF' }}>AI </p>
</div>
<div className="flex flex-col gap-2">
{[
'解析文档内容,提取核心知识点',
'自动分类并补充背景信息',
'生成费曼测试题和间隔复习计划',
'识别关联已有知识,建立知识网络',
].map((step, i) => (
<div key={i} className="flex items-start gap-3">
<div
style={{
width: '18px', height: '18px', borderRadius: '50%',
background: 'rgba(124,110,250,0.2)',
border: '1px solid rgba(124,110,250,0.3)',
display: 'flex', alignItems: 'center', justifyContent: 'center',
fontSize: '9px', fontWeight: '700',
color: '#A78BFA',
flexShrink: 0, marginTop: '1px',
}}
>
{i + 1}
</div>
<span style={{ fontSize: '12px', color: 'rgba(240,240,255,0.55)', lineHeight: '1.6' }}>{step}</span>
</div>
))}
</div>
</div>
{/* Recent imports */}
<div>
<h2 style={{ fontSize: '14px', fontWeight: '700', color: '#F0F0FF', marginBottom: '12px' }}></h2>
<div className="flex flex-col gap-3">
{recentImports.map((file, i) => (
<div
key={i}
className="flex items-center gap-3 px-4 py-3"
style={{
background: 'rgba(255,255,255,0.04)',
border: '1px solid rgba(255,255,255,0.07)',
borderRadius: '14px',
}}
>
<div
style={{
width: '40px', height: '40px', borderRadius: '12px',
background: 'rgba(255,255,255,0.07)',
display: 'flex', alignItems: 'center', justifyContent: 'center',
flexShrink: 0,
}}
>
<FileIcon size={18} style={{ color: 'rgba(240,240,255,0.4)' }} />
</div>
<div className="flex-1 min-w-0">
<p
style={{
fontSize: '13px', fontWeight: '600', color: '#F0F0FF',
overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap',
}}
>
{file.name}
</p>
<p style={{ fontSize: '11px', color: 'rgba(240,240,255,0.35)', marginTop: '2px' }}>
{file.size}
</p>
</div>
{file.status === 'done' ? (
<div className="flex items-center gap-1">
<CheckCircleIcon size={14} style={{ color: '#34D399' }} />
<span style={{ fontSize: '11px', color: '#34D399' }}>{file.items} </span>
</div>
) : (
<div className="flex items-center gap-2">
<div
style={{
width: '16px', height: '16px', borderRadius: '50%',
border: '2px solid rgba(124,110,250,0.3)',
borderTopColor: '#7C6EFA',
animation: 'spin 1s linear infinite',
}}
/>
<span style={{ fontSize: '11px', color: '#A78BFA' }}></span>
</div>
)}
</div>
))}
</div>
</div>
</div>
</div>
);
};
export default ImportPage;