164 lines
4.9 KiB
JavaScript
164 lines
4.9 KiB
JavaScript
import { useRef } from 'react';
|
||
import { useNavigate } from 'react-router-dom';
|
||
import {
|
||
RightOutlined,
|
||
LeftOutlined,
|
||
AppstoreOutlined,
|
||
NotificationOutlined,
|
||
PlayCircleOutlined,
|
||
CompassOutlined,
|
||
GiftOutlined,
|
||
FileTextOutlined,
|
||
RiseOutlined,
|
||
CoffeeOutlined,
|
||
} from '@ant-design/icons';
|
||
import { Button } from 'antd';
|
||
import './Categories.css';
|
||
|
||
const categories = [
|
||
{
|
||
name: '活动',
|
||
count: '408131',
|
||
description: '促销、开业、发布会等高频营销场景素材。',
|
||
tag: '热点',
|
||
gradient: 'linear-gradient(135deg, #ffb38a 0%, #ef6a5b 100%)',
|
||
icon: <NotificationOutlined />,
|
||
},
|
||
{
|
||
name: '中式',
|
||
count: '105545',
|
||
description: '国风、红金、传统节令与典雅视觉方向。',
|
||
tag: '质感',
|
||
gradient: 'linear-gradient(135deg, #7d2f2f 0%, #d98f5f 100%)',
|
||
icon: <AppstoreOutlined />,
|
||
},
|
||
{
|
||
name: '直播',
|
||
count: '35429',
|
||
description: '口播封面、预告海报和直播场景包装。',
|
||
tag: '转化',
|
||
gradient: 'linear-gradient(135deg, #4a8ee8 0%, #57d3e2 100%)',
|
||
icon: <PlayCircleOutlined />,
|
||
},
|
||
{
|
||
name: '旅游',
|
||
count: '97826',
|
||
description: '景区、民宿、出行路线和旅行氛围图。',
|
||
tag: '场景',
|
||
gradient: 'linear-gradient(135deg, #2f8f73 0%, #7bdcb5 100%)',
|
||
icon: <CompassOutlined />,
|
||
},
|
||
{
|
||
name: '周年庆',
|
||
count: '15868',
|
||
description: '品牌纪念日、店庆和阶段性节点专题。',
|
||
tag: '品牌',
|
||
gradient: 'linear-gradient(135deg, #e17baa 0%, #f7c46c 100%)',
|
||
icon: <GiftOutlined />,
|
||
},
|
||
{
|
||
name: '长图',
|
||
count: '130856',
|
||
description: '卖点拆解、流程展示和信息编排型视觉。',
|
||
tag: '信息流',
|
||
gradient: 'linear-gradient(135deg, #5767c8 0%, #8c77dc 100%)',
|
||
icon: <FileTextOutlined />,
|
||
},
|
||
{
|
||
name: '价值点',
|
||
count: '214448',
|
||
description: '优势提炼、卖点表达和产品力沟通模板。',
|
||
tag: '卖点',
|
||
gradient: 'linear-gradient(135deg, #2b5775 0%, #6da4c9 100%)',
|
||
icon: <RiseOutlined />,
|
||
},
|
||
{
|
||
name: '酒吧',
|
||
count: '36397',
|
||
description: '夜场、派对、餐酒主题和情绪化海报。',
|
||
tag: '氛围',
|
||
gradient: 'linear-gradient(135deg, #8c4b2e 0%, #d78c52 100%)',
|
||
icon: <CoffeeOutlined />,
|
||
},
|
||
];
|
||
|
||
const Categories = () => {
|
||
const scrollRef = useRef(null);
|
||
const navigate = useNavigate();
|
||
|
||
const scroll = (direction) => {
|
||
if (scrollRef.current) {
|
||
const scrollAmount = direction === 'left' ? -320 : 320;
|
||
scrollRef.current.scrollBy({ left: scrollAmount, behavior: 'smooth' });
|
||
}
|
||
};
|
||
|
||
return (
|
||
<section className="categories">
|
||
<div className="categories-panel">
|
||
<div className="categories-header">
|
||
<div className="categories-copy">
|
||
<span className="categories-kicker">快速浏览</span>
|
||
<h2>把高频需求先整理好,用户会更容易继续点下去</h2>
|
||
<p>
|
||
分类区不只是导航,更是首页的第二层承接。让用户在首屏之后,立刻看到更清楚的行业和场景入口。
|
||
</p>
|
||
</div>
|
||
|
||
<div className="categories-actions">
|
||
<span className="categories-summary">{categories.length} 个主分类</span>
|
||
<div className="categories-controls">
|
||
<Button
|
||
className="scroll-btn"
|
||
shape="circle"
|
||
icon={<LeftOutlined />}
|
||
onClick={() => scroll('left')}
|
||
/>
|
||
<Button
|
||
className="scroll-btn"
|
||
shape="circle"
|
||
icon={<RightOutlined />}
|
||
onClick={() => scroll('right')}
|
||
/>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div className="categories-scroll" ref={scrollRef}>
|
||
{categories.map((cat, index) => (
|
||
<button
|
||
key={cat.name}
|
||
type="button"
|
||
className="category-card"
|
||
style={{ '--delay': `${index * 0.06}s` }}
|
||
onClick={() => navigate(`/category/${cat.name}`)}
|
||
>
|
||
<div className="category-card-top" style={{ background: cat.gradient }}>
|
||
<div className="category-icon-wrap">{cat.icon}</div>
|
||
<span className="category-pill">{cat.tag}</span>
|
||
</div>
|
||
|
||
<div className="category-body">
|
||
<div>
|
||
<h3 className="category-name">{cat.name}</h3>
|
||
<p className="category-description">{cat.description}</p>
|
||
</div>
|
||
|
||
<div className="category-footer">
|
||
<span className="category-count">{cat.count} 张</span>
|
||
<span className="category-link">
|
||
查看分类
|
||
<RightOutlined />
|
||
</span>
|
||
</div>
|
||
</div>
|
||
</button>
|
||
))}
|
||
</div>
|
||
</div>
|
||
</section>
|
||
);
|
||
};
|
||
|
||
export default Categories;
|