fix(web): 恢复与旧版一致的布局与组件参数

- 布局:Layout 使用 contained(1380)+gutter20+siderWidth240+gap20、solid 60px 页头、整屏内部滚动
- 搜索框恢复悬浮居中;侧栏与内容恢复 52/88px 顶部偏移
- 新增并使用 @stash/ui 的 Cover(海报 2:3 / 图文 4:3 / 宽图)替换手写封面
- 头像恢复 64px 品牌底色;正文恢复 14/1.9;详情标题、标签、引用、统计、跳转按原版还原
- 分区卡 padding 20、分区标题 16、网格间距 12/16 对齐原值
This commit is contained in:
stash
2026-10-28 18:12:14 +08:00
parent 64f1fbf906
commit 1bdcca025b
20 changed files with 319 additions and 196 deletions
@@ -1,4 +1,4 @@
import { Button, Card, Icon, IconButton, Paragraph, Space, Tag, Text, Title } from '@stash/ui'
import { Card, Icon, IconButton, Paragraph, Space, Tag, Text, Title } from '@stash/ui'
import type { ItemDetailModel } from '../../data/detail'
import type { RelatedItem } from '../../data/types'
import { RelatedList } from './RelatedList'
@@ -27,23 +27,25 @@ export function ItemDetailView({
}: ItemDetailViewProps) {
return (
<div className="detail-view item-view">
<Card padding="sm">
<Card padding="none" className="detail-nav">
<Space justify="between" wrap>
<Button variant="ghost" size="sm" onClick={onBack}>
<button type="button" className="detail-back" onClick={onBack}>
返回
</Button>
<Text size="sm" tone="sub">
{breadcrumb}
</Text>
</button>
<span className="detail-breadcrumb">
<Text size="xs" tone="muted">
{breadcrumb}
</Text>
</span>
</Space>
</Card>
<Card padding="lg">
<Title level={2}>
<Card padding="none" className="item-card">
<Title level={2} className="item-title">
{model.title}
<Button variant="ghost" size="sm" disabled className="item-edit">
编辑
</Button>
<button type="button" className="item-edit" disabled title="编辑功能待接入">
[编辑]
</button>
</Title>
<div className={`item-cover item-cover--${model.shape}`}>
@@ -57,7 +59,7 @@ export function ItemDetailView({
{model.tags.length > 0 && (
<Space gap="sm" wrap>
{model.tags.map((tag) => (
<Tag key={tag} shape="rounded">
<Tag key={tag} tone="primary">
{tag}
</Tag>
))}
@@ -65,9 +67,12 @@ export function ItemDetailView({
)}
{model.comment !== undefined && (
<Paragraph tone="secondary" className="item-quote">
{model.comment}
</Paragraph>
<p className="item-quote">
<span className="item-quote-mark" aria-hidden="true">
“
</span>
<span className="item-quote-text">{model.comment}</span>
</p>
)}
{model.paragraphs.map((paragraph, index) => (
@@ -76,36 +81,36 @@ export function ItemDetailView({
</Paragraph>
))}
<Space justify="between" wrap className="item-actions">
<Space gap="lg">
<div className="item-actions">
<Space gap="sm">
<Space gap="xs" className="item-stat">
<Icon name="eye_line" />
<Text size="sm" tone="sub">
<Text size="xs" tone="sub">
{model.views}
</Text>
</Space>
<Space gap="xs" className="item-stat">
<Icon name="thumb_up_2_line" />
<Text size="sm" tone="sub">
<Text size="xs" tone="sub">
{model.likes}
</Text>
</Space>
<IconButton label="分享(待接入)" size="xs" icon={<Icon name="share_3_line" />} />
<IconButton label="分享(待接入)" size="sm" icon={<Icon name="share_3_line" />} />
</Space>
{/* 占位数据没有真实地址时,按钮置灰而不是打开空白页 */}
{model.href === '#' ? (
<Button size="sm" disabled>
<button type="button" className="item-jump" disabled title="暂无跳转地址">
跳转到
<Icon name="a-external_link_line1" />
</Button>
</button>
) : (
<a className="link-button" href={model.href} target="_blank" rel="noreferrer">
<a className="item-jump" href={model.href} target="_blank" rel="noreferrer">
跳转到
<Icon name="a-external_link_line1" />
</a>
)}
</Space>
</div>
{model.banner !== undefined && (
<img className="item-banner" src={model.banner} alt="" loading="lazy" />