- 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
252 lines
9.9 KiB
TypeScript
252 lines
9.9 KiB
TypeScript
// 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' }}>
|
||
支持 PDF、Word、PPT、TXT、Markdown
|
||
</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;
|