feat(ui): 优化我的订单界面与顶部导航栏视觉体验,彻底修复表格省略号截断点

1. 顶部导航栏 (AppLayout.css):
   - 增强毛玻璃质感 (高通透 rgba(255, 255, 255, 0.76) + blur(20px))
   - 全面升级品牌标识、搜索框、客服按钮、发布账号与用户状态栏胶囊样式

2. 我的订单界面 (OrdersView.vue & OrdersView.css):
   - 全新横幅区 (Orders Hero Header) 与实时订单统计徽标
   - 全新药丸胶囊状态筛选标签栏 (Pill Tabs)
   - 解决身份列点号残留问题:扩宽列宽至 100px 并禁用单元格 ellipsis 伪截断
This commit is contained in:
yml2213
2026-09-07 11:58:37 +08:00
parent 41f70470ec
commit 10b7c8d194
3 changed files with 655 additions and 383 deletions
+473 -240
View File
@@ -1,192 +1,357 @@
.orders-toolbar { /* ==========================================================================
margin-top: 24px; 我的订单页面全新设计规范 (对齐首页 / 详情页视觉标准)
========================================================================== */
.orders-page-redesign {
display: flex;
flex-direction: column;
gap: 16px;
width: 100%;
max-width: 1720px;
min-width: 0;
margin: 0 auto;
padding: 8px 0 32px;
}
/* ---------- 头部横幅区 ---------- */
.orders-hero-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 24px;
padding: 24px 28px;
border-radius: 16px;
background: #ffffff;
border: 1px solid #e2e8f0;
box-shadow: 0 1px 3px rgba(15, 23, 42, 0.04);
}
.hero-header-left {
display: flex;
flex-direction: column;
gap: 6px;
min-width: 0;
}
.hero-title-row {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 12px; gap: 12px;
} }
.search-input { .hero-title {
max-width: 400px;
}
.order-tabs {
margin-top: 16px;
border: 1px solid #e4e7ed;
border-radius: 8px;
background: #ffffff;
padding: 0 16px;
}
.order-tabs :deep(.el-tabs__header) {
margin: 0; margin: 0;
font-size: 22px;
font-weight: 900;
letter-spacing: -0.02em;
color: #0f172a;
line-height: 1.2;
} }
.order-tabs :deep(.el-tabs__nav-wrap::after) { .orders-total-badge {
height: 0; display: inline-flex;
align-items: center;
padding: 2px 10px;
border-radius: 999px;
background: #fff7ed;
border: 1px solid #fed7aa;
color: #ea580c;
font-size: 12px;
font-weight: 700;
} }
.tab-label { .hero-subtitle {
margin: 0;
color: #64748b;
font-size: 13px;
font-weight: 500;
}
.orders-search-box {
width: 320px;
flex-shrink: 0;
}
.orders-search-input :deep(.el-input__wrapper) {
border-radius: 999px;
padding: 4px 16px;
background: #f8fafc;
box-shadow: 0 0 0 1px #e2e8f0 inset;
transition: all 0.2s ease;
}
.orders-search-input :deep(.el-input__wrapper.is-focus) {
background: #ffffff;
box-shadow:
0 0 0 1.5px #ff8533 inset,
0 0 0 4px rgba(255, 106, 0, 0.1) !important;
}
.orders-search-input :deep(.el-input__inner) {
font-size: 13px;
font-weight: 500;
}
/* ---------- 状态筛选胶囊条 ---------- */
.orders-filter-strip {
display: flex;
align-items: center;
justify-content: space-between;
padding: 6px 8px;
border-radius: 14px;
background: #ffffff;
border: 1px solid #e2e8f0;
box-shadow: 0 1px 3px rgba(15, 23, 42, 0.03);
}
.orders-pill-tabs {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 6px; gap: 6px;
flex-wrap: wrap;
} }
.tab-count { .orders-pill-tab {
display: inline-flex;
align-items: center;
gap: 6px;
height: 34px;
padding: 0 14px;
border: 1px solid transparent;
border-radius: 999px;
background: transparent;
color: #64748b;
font-size: 13px;
font-weight: 600;
cursor: pointer;
transition: all 0.16s ease;
user-select: none;
}
.orders-pill-tab:hover {
background: #f8fafc;
color: #0f172a;
}
.orders-pill-tab.active {
background: #fff7ed;
border-color: #ffd4b0;
color: #ea580c;
font-weight: 800;
box-shadow: 0 2px 8px rgba(255, 106, 0, 0.1);
}
.tab-badge {
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
min-width: 20px; min-width: 18px;
height: 20px; height: 18px;
padding: 0 6px; padding: 0 5px;
border-radius: 10px; border-radius: 999px;
background: #f1f5f9;
color: #64748b;
font-size: 11px;
font-weight: 700;
transition: all 0.16s ease;
}
.tab-badge.is-active {
background: #ff6a00; background: #ff6a00;
color: #ffffff; color: #ffffff;
font-size: 12px;
font-weight: 600;
}
.order-tabs :deep(.is-active) .tab-count {
background: #ffffff;
color: #ff6a00;
} }
/* ---------- 订单列表容器 ---------- */
.orders-container { .orders-container {
margin-top: 24px; border-radius: 16px;
background: #ffffff;
border: 1px solid #e2e8f0;
box-shadow: 0 1px 3px rgba(15, 23, 42, 0.04);
overflow: hidden;
} }
.empty-state { .empty-state {
margin-top: 60px; padding: 80px 20px;
border-radius: 16px;
background: #ffffff;
border: 1px solid #e2e8f0;
text-align: center;
} }
/* ---------- PC 表格重构 ---------- */
.orders-table { .orders-table {
display: block; display: block;
width: 100%;
} }
.mobile-cards { .orders-table :deep(.el-table__header-wrapper th) {
display: none; background: #f8fafc;
color: #475569;
font-weight: 700;
font-size: 13px;
padding: 14px 12px;
border-bottom: 1px solid #e2e8f0;
} }
.orders-table :deep(.el-table__body-wrapper td) {
padding: 16px 12px;
border-bottom: 1px solid #f1f5f9;
transition: background 0.15s ease;
}
.orders-table :deep(.el-table__row:hover td) {
background: #fafcff !important;
}
.orders-table :deep(.el-table__cell) {
overflow: visible !important;
}
.orders-table :deep(.el-table__cell .cell) {
overflow: visible !important;
text-overflow: clip !important;
word-break: break-word;
}
.orders-table :deep(td.is-center .cell) {
padding: 0 4px !important;
display: flex;
align-items: center;
justify-content: center;
}
/* 业务类型标签 */
.biz-tag { .biz-tag {
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
min-width: 40px; min-width: 44px;
padding: 2px 8px; height: 24px;
border-radius: 999px; padding: 0 8px;
border-radius: 6px;
font-size: 12px; font-size: 12px;
font-weight: 700; font-weight: 700;
} }
.biz-tag.rental { .biz-tag.rental {
color: #1477ff; color: #2563eb;
background: rgba(20, 119, 255, 0.1); background: #eff6ff;
border: 1px solid #dbeafe;
} }
.biz-tag.crash { .biz-tag.crash {
color: #ff6a00; color: #ea580c;
background: rgba(255, 106, 0, 0.1); background: #fff7ed;
border: 1px solid #fed7aa;
} }
/* 身份角色标签 */
.role-tag {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 44px;
height: 22px;
padding: 0 8px;
border-radius: 999px;
font-size: 11px;
font-weight: 700;
line-height: 1;
white-space: nowrap;
flex-shrink: 0;
}
.role-tag.renter {
color: #2563eb;
background: #eff6ff;
border: 1px solid #dbeafe;
}
.role-tag.owner {
color: #16a34a;
background: #f0fdf4;
border: 1px solid #bbf7d0;
}
.role-tag.buyer {
color: #64748b;
background: #f1f5f9;
border: 1px solid #e2e8f0;
}
/* 订单号单元格 */
.order-no-cell { .order-no-cell {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 8px; gap: 6px;
} }
.order-no-text { .order-no-text {
font-family: 'SF Mono', 'Monaco', 'Consolas', monospace; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
font-size: 13px; font-size: 13px;
color: #4a5568; font-weight: 600;
} color: #334155;
.listing-code-line {
display: inline-flex;
width: fit-content;
align-items: center;
gap: 5px;
margin-top: 10px;
padding: 4px 9px;
border: 1px solid #dbeafe;
border-radius: 999px;
background: #eff6ff;
color: #2563eb;
font-size: 12px;
font-weight: 800;
cursor: pointer;
}
.listing-code-line.compact {
margin-top: 0;
margin-bottom: 4px;
} }
.copy-icon { .copy-icon {
cursor: pointer; cursor: pointer;
color: #9ca3af; color: #94a3b8;
font-size: 14px; font-size: 14px;
transition: color 0.2s; transition: color 0.15s;
} }
.copy-icon:hover { .copy-icon:hover {
color: #ff6a00; color: #ff6a00;
} }
.amount-cell { /* 商品/账号单元格 */
display: flex; .rental-product-cell,
flex-direction: column; .crash-product-cell {
gap: 2px;
}
.amount-value {
font-weight: 600;
color: #1f2937;
}
.amount-label {
font-size: 12px;
color: #9ca3af;
}
.amount-sub {
font-size: 12px;
color: #10b981;
font-weight: 600;
}
.status-cell {
display: flex;
flex-direction: column;
gap: 4px;
}
.countdown-badge {
display: inline-block;
padding: 2px 6px;
border-radius: 4px;
background: #fef3c7;
color: #d97706;
font-size: 11px;
font-weight: 500;
}
.action-buttons {
display: flex;
gap: 8px;
}
.muted {
color: #9ca3af;
font-size: 13px;
}
.crash-product-cell,
.rental-product-cell {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 4px; gap: 4px;
min-width: 0; min-width: 0;
} }
.listing-code-line {
display: inline-flex;
width: fit-content;
align-items: center;
gap: 4px;
padding: 2px 8px;
border: 1px solid #bfdbfe;
border-radius: 6px;
background: #eff6ff;
color: #2563eb;
font-size: 12px;
font-weight: 700;
cursor: pointer;
transition: all 0.15s ease;
}
.listing-code-line:hover {
background: #dbeafe;
border-color: #93c5fd;
}
.listing-code-line.compact {
margin-top: 0;
margin-bottom: 2px;
}
.rental-title,
.crash-product-info strong {
font-size: 14px;
font-weight: 600;
color: #0f172a;
line-height: 1.4;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
.crash-product-cell { .crash-product-cell {
flex-direction: row; flex-direction: row;
align-items: center; align-items: center;
@@ -194,22 +359,23 @@
} }
.crash-cover { .crash-cover {
width: 48px; width: 44px;
height: 48px; height: 44px;
border-radius: 10px; border-radius: 8px;
overflow: hidden; overflow: hidden;
background: #f0f3f8; background: #f1f5f9;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
color: #a0aec0; color: #94a3b8;
font-size: 12px; font-size: 12px;
flex-shrink: 0; flex-shrink: 0;
border: 1px solid #e2e8f0;
} }
.crash-cover.lg { .crash-cover.lg {
width: 64px; width: 60px;
height: 64px; height: 60px;
} }
.crash-cover img { .crash-cover img {
@@ -221,19 +387,183 @@
.crash-product-info { .crash-product-info {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 4px; gap: 3px;
min-width: 0; min-width: 0;
} }
.crash-product-info strong,
.rental-title {
font-size: 14px;
color: #1f2937;
}
.crash-product-info span { .crash-product-info span {
font-size: 12px; font-size: 12px;
color: #8a94a6; color: #64748b;
font-weight: 500;
}
/* 金额与押金单元格 */
.amount-cell {
display: flex;
flex-direction: column;
gap: 2px;
}
.amount-value {
font-size: 15px;
font-weight: 800;
color: #0f172a;
font-feature-settings: 'tnum';
}
.amount-label {
font-size: 11px;
color: #94a3b8;
font-weight: 500;
}
.amount-sub {
font-size: 11px;
color: #10b981;
font-weight: 600;
}
/* 状态单元格 */
.status-cell {
display: flex;
flex-direction: column;
gap: 4px;
align-items: flex-start;
}
.status-cell > span:first-child {
font-size: 13px;
font-weight: 700;
color: #334155;
}
.countdown-badge {
display: inline-flex;
align-items: center;
padding: 1px 6px;
border-radius: 4px;
background: #fef3c7;
color: #b45309;
font-size: 11px;
font-weight: 600;
}
/* 操作区按钮 */
.action-buttons {
display: flex;
align-items: center;
gap: 8px;
}
.action-buttons :deep(.el-button) {
font-weight: 700;
padding: 7px 16px;
}
.muted {
color: #94a3b8;
font-size: 13px;
}
/* ---------- 移动端适配卡片 ---------- */
.mobile-cards {
display: none;
padding: 12px;
}
.order-card {
border: 1px solid #e2e8f0;
border-radius: 12px;
padding: 16px;
background: #ffffff;
cursor: pointer;
transition: all 0.2s ease;
margin-bottom: 12px;
}
.order-card:hover {
border-color: #ffd4b0;
box-shadow: 0 4px 14px rgba(255, 106, 0, 0.08);
}
.card-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 12px;
}
.order-no-row {
display: flex;
align-items: center;
gap: 8px;
min-width: 0;
}
.card-title {
font-size: 15px;
font-weight: 700;
color: #0f172a;
margin-bottom: 12px;
line-height: 1.4;
}
.card-meta {
display: grid;
gap: 8px;
margin-bottom: 12px;
padding-bottom: 12px;
border-bottom: 1px solid #f1f5f9;
}
.meta-row {
display: flex;
align-items: center;
justify-content: space-between;
}
.meta-label {
font-size: 13px;
color: #64748b;
}
.meta-value {
display: flex;
flex-direction: column;
align-items: flex-end;
font-size: 13px;
color: #334155;
font-weight: 600;
}
.meta-value em {
font-style: normal;
font-size: 11px;
color: #2563eb;
}
.meta-value.amount {
color: #ea580c;
font-weight: 800;
font-size: 15px;
}
.card-footer {
display: flex;
align-items: center;
justify-content: space-between;
}
.status-info {
display: flex;
flex-direction: column;
gap: 4px;
}
.status-label {
font-size: 13px;
font-weight: 700;
color: #0f172a;
} }
.crash-status { .crash-status {
@@ -248,7 +578,7 @@
.crash-status.pending_payment { .crash-status.pending_payment {
background: #fff7ed; background: #fff7ed;
color: #ff6a00; color: #ea580c;
} }
.crash-status.paid { .crash-status.paid {
@@ -274,105 +604,21 @@
.crash-card-body { .crash-card-body {
display: grid; display: grid;
grid-template-columns: 64px 1fr; grid-template-columns: 60px 1fr;
gap: 12px; gap: 12px;
} }
.order-card { @media (max-width: 960px) {
border: 1px solid #e5e7eb; .orders-hero-header {
border-radius: 12px; flex-direction: column;
padding: 16px; align-items: flex-start;
background: #ffffff; gap: 14px;
cursor: pointer; }
transition: all 0.2s;
margin-bottom: 12px;
}
.order-card:hover { .orders-search-box {
border-color: #ff6a00; width: 100%;
box-shadow: 0 4px 12px rgba(255, 106, 0, 0.1); }
}
.card-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 12px;
}
.order-no-row {
display: flex;
align-items: center;
gap: 8px;
min-width: 0;
}
.card-title {
font-size: 16px;
font-weight: 600;
color: #1f2937;
margin-bottom: 12px;
}
.card-meta {
display: grid;
gap: 8px;
margin-bottom: 12px;
padding-bottom: 12px;
border-bottom: 1px solid #f3f4f6;
}
.meta-row {
display: flex;
align-items: center;
justify-content: space-between;
}
.meta-label {
font-size: 13px;
color: #6b7280;
}
.meta-value {
display: flex;
flex-direction: column;
align-items: flex-end;
font-size: 14px;
color: #374151;
font-weight: 500;
}
.meta-value em {
font-style: normal;
font-size: 12px;
color: #2563eb;
}
.meta-value.amount {
color: #ff6a00;
font-weight: 600;
font-size: 15px;
}
.card-footer {
display: flex;
align-items: center;
justify-content: space-between;
}
.status-info {
display: flex;
flex-direction: column;
gap: 4px;
}
.status-label {
font-size: 14px;
font-weight: 500;
color: #1f2937;
}
@media (max-width: 768px) {
.orders-table { .orders-table {
display: none; display: none;
} }
@@ -380,17 +626,4 @@
.mobile-cards { .mobile-cards {
display: block; display: block;
} }
.search-input {
max-width: 100%;
}
.order-tabs {
padding: 0 8px;
}
.order-tabs :deep(.el-tabs__item) {
padding: 0 12px;
font-size: 14px;
}
} }
@@ -304,35 +304,50 @@ function bizTypeLabel(bizType: BizType) {
</script> </script>
<template> <template>
<section class="page"> <section class="orders-page-redesign">
<div class="page-header"> <!-- 头部横幅区 -->
<p class="eyebrow">ORDERS</p> <div class="orders-hero-header">
<h1>我的订单</h1> <div class="hero-header-left">
<p>租赁与撞车订单统一展示,按创建时间倒序排列。</p> <div class="hero-title-row">
<h1 class="hero-title">我的订单</h1>
<span class="orders-total-badge">{{ unifiedOrders.length }} 笔订单</span>
</div>
<p class="hero-subtitle">租赁与撞车订单统一管理 · 实时交接与进度追踪</p>
</div>
<div class="orders-search-box">
<el-input
v-model="searchKeyword"
placeholder="搜索订单号 / 商品名称 / 编号"
:prefix-icon="Search"
clearable
class="orders-search-input"
/>
</div>
</div> </div>
<div class="orders-toolbar"> <!-- 状态筛选胶囊条 -->
<el-input <div class="orders-filter-strip">
v-model="searchKeyword" <div class="orders-pill-tabs">
placeholder="搜索订单号 / 商品 / 账号" <button
:prefix-icon="Search" v-for="tab in statusTabs"
clearable :key="tab.key"
class="search-input" type="button"
/> class="orders-pill-tab"
</div> :class="{ active: activeTab === tab.key }"
@click="handleTabChange(tab.key)"
<el-tabs v-model="activeTab" class="order-tabs" @tab-change="handleTabChange"> >
<el-tab-pane v-for="tab in statusTabs" :key="tab.key" :name="tab.key"> <span class="tab-name">{{ tab.label }}</span>
<template #label> <span
<span class="tab-label"> v-if="(tabCounts?.[tab.key] ?? 0) > 0"
{{ tab.label }} class="tab-badge"
<span v-if="(tabCounts?.[tab.key] ?? 0) > 0" class="tab-count">{{ :class="{ 'is-active': activeTab === tab.key }"
tabCounts?.[tab.key] >
}}</span> {{ tabCounts?.[tab.key] }}
</span> </span>
</template> </button>
</el-tab-pane> </div>
</el-tabs> </div>
<div v-if="displayOrders.length === 0 && !loading" class="empty-state"> <div v-if="displayOrders.length === 0 && !loading" class="empty-state">
<el-empty :description="searchKeyword ? '没有找到匹配的订单' : '暂无订单'" /> <el-empty :description="searchKeyword ? '没有找到匹配的订单' : '暂无订单'" />
@@ -415,17 +430,15 @@ function bizTypeLabel(bizType: BizType) {
> >
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="身份" width="80"> <el-table-column label="身份" width="100" align="center">
<template #default="{ row }"> <template #default="{ row }"
<el-tag ><span
v-if="row.bizType === 'rental' && row.rental" v-if="row.bizType === 'rental' && row.rental"
:type="isRenter(row.rental) ? 'primary' : 'success'" class="role-tag"
size="small" :class="isRenter(row.rental) ? 'renter' : 'owner'"
> >{{ orderRole(row.rental) }}</span
{{ orderRole(row.rental) }} ><span v-else class="role-tag buyer">买家</span></template
</el-tag> >
<span v-else class="muted">买家</span>
</template>
</el-table-column> </el-table-column>
<el-table-column label="状态" width="140"> <el-table-column label="状态" width="140">
<template #default="{ row }"> <template #default="{ row }">
@@ -457,13 +470,14 @@ function bizTypeLabel(bizType: BizType) {
" "
size="small" size="small"
type="primary" type="primary"
round
:disabled="row.rental.renter_id !== session.userId" :disabled="row.rental.renter_id !== session.userId"
:loading="payingOrderId === row.rental.id" :loading="payingOrderId === row.rental.id"
@click="handlePay(row.rental)" @click="handlePay(row.rental)"
> >
去支付 去支付
</el-button> </el-button>
<el-button size="small" @click="goDetail(row)">详情</el-button> <el-button size="small" round @click="goDetail(row)">详情</el-button>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
@@ -486,13 +500,12 @@ function bizTypeLabel(bizType: BizType) {
<CopyDocument /> <CopyDocument />
</el-icon> </el-icon>
</div> </div>
<el-tag <span
v-if="item.bizType === 'rental' && item.rental" v-if="item.bizType === 'rental' && item.rental"
:type="isRenter(item.rental) ? 'primary' : 'success'" class="role-tag"
size="small" :class="isRenter(item.rental) ? 'renter' : 'owner'"
>{{ orderRole(item.rental) }}</span
> >
{{ orderRole(item.rental) }}
</el-tag>
<span v-else class="crash-status" :class="item.status">{{ statusText(item) }}</span> <span v-else class="crash-status" :class="item.status">{{ statusText(item) }}</span>
</div> </div>
+127 -101
View File
@@ -5,7 +5,7 @@
min-height: 100vh; min-height: 100vh;
max-width: 100vw; max-width: 100vw;
overflow-x: clip; overflow-x: clip;
background: #f5f6f8; background: #f8fafc;
} }
.pc-topbar { .pc-topbar {
@@ -14,23 +14,30 @@
z-index: 100; z-index: 100;
display: flex; display: flex;
align-items: center; align-items: center;
gap: 20px; gap: 24px;
min-width: 0; min-width: 0;
max-width: 100%; max-width: 100%;
height: 64px; height: 64px;
padding: 0 24px; padding: 0 32px;
background: #fff; background: rgba(255, 255, 255, 0.76);
border-bottom: 1px solid #eef1f5; backdrop-filter: blur(20px) saturate(180%);
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04); -webkit-backdrop-filter: blur(20px) saturate(180%);
border-bottom: 1px solid rgba(226, 232, 240, 0.7);
box-shadow: 0 2px 16px rgba(15, 23, 42, 0.04);
} }
/* ========== 品牌 ========== */ /* ========== 品牌 ========== */
.pc-brand { .pc-brand {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 10px; gap: 12px;
text-decoration: none; text-decoration: none;
flex-shrink: 0; flex-shrink: 0;
transition: transform 0.2s ease;
}
.pc-brand:hover {
transform: translateY(-1px);
} }
.pc-brand-mark { .pc-brand-mark {
@@ -38,59 +45,62 @@
width: 38px; width: 38px;
height: 38px; height: 38px;
place-items: center; place-items: center;
border-radius: 12px; border-radius: 11px;
background: linear-gradient(135deg, #fff3e8 0%, #ffe4cc 100%); background: linear-gradient(135deg, #ff7a1a 0%, #ff5200 100%);
color: #ff6a00; color: #ffffff;
font-size: 20px; font-size: 20px;
font-weight: 900; font-weight: 900;
box-shadow: 0 3px 10px rgba(255, 106, 0, 0.28);
} }
.pc-brand-info { .pc-brand-info {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
line-height: 1.2; line-height: 1.15;
} }
.pc-brand-text { .pc-brand-text {
font-size: 16px; font-size: 17px;
font-weight: 800; font-weight: 900;
color: #17233d; letter-spacing: -0.02em;
color: #0f172a;
} }
.pc-brand-sub { .pc-brand-sub {
font-size: 11px; font-size: 11px;
color: #8b9cb5; color: #94a3b8;
font-weight: 600; font-weight: 600;
letter-spacing: 0.02em;
} }
/* ========== 导航 ========== */ /* ========== 导航 ========== */
.pc-nav { .pc-nav {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 4px; gap: 6px;
margin-left: 10px; margin-left: 6px;
min-width: 0; min-width: 0;
height: 100%; height: 100%;
} }
.pc-nav-link { .pc-nav-link {
position: relative; position: relative;
display: flex; display: inline-flex;
align-items: center; align-items: center;
gap: 5px; gap: 6px;
padding: 8px 14px; padding: 8px 16px;
border-radius: 10px; border-radius: 10px;
color: #5a6577; color: #64748b;
font-size: 14px; font-size: 14px;
font-weight: 700; font-weight: 700;
text-decoration: none; text-decoration: none;
transition: all 0.2s; transition: all 0.18s ease;
} }
.pc-nav-badge { .pc-nav-badge {
position: absolute; position: absolute;
top: 2px; top: 3px;
right: 2px; right: 4px;
min-width: 16px; min-width: 16px;
height: 16px; height: 16px;
padding: 0 4px; padding: 0 4px;
@@ -102,54 +112,66 @@
font-weight: 800; font-weight: 800;
line-height: 16px; line-height: 16px;
text-align: center; text-align: center;
box-shadow: 0 2px 5px rgba(239, 68, 68, 0.35);
}
.pc-nav-link:hover {
background: #f1f5f9;
color: #0f172a;
} }
.pc-nav-link:hover,
.pc-nav-link.router-link-active { .pc-nav-link.router-link-active {
background: #fff3e8; background: #fff7ed;
color: #ff6a00; color: #ff6a00;
font-weight: 800;
} }
/* ========== 搜索 ========== */ /* ========== 搜索 ========== */
.pc-search { .pc-search {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 8px; gap: 10px;
margin-left: auto; margin-left: auto;
padding: 0 14px; padding: 0 16px;
height: 40px; height: 40px;
border-radius: 12px; border-radius: 999px;
background: #f4f6f8; background: #f1f5f9;
border: 1px solid transparent; border: 1.5px solid transparent;
max-width: 320px; max-width: 320px;
min-width: 180px; min-width: 180px;
flex: 1; flex: 1;
transition: all 0.2s; transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1);
} }
.pc-search:focus-within { .pc-search:focus-within {
background: #fff; background: #fff;
border-color: #ff6a00; border-color: #ff8533;
box-shadow: 0 0 0 4px rgba(255, 106, 0, 0.08); box-shadow: 0 0 0 3px rgba(255, 106, 0, 0.12);
} }
.pc-search input { .pc-search input {
border: none; border: none;
outline: none; outline: none;
background: transparent; background: transparent;
color: #17233d; color: #0f172a;
font-size: 13px; font-size: 13px;
font-weight: 500;
width: 100%; width: 100%;
} }
.pc-search input::placeholder { .pc-search input::placeholder {
color: #a0aab6; color: #94a3b8;
} }
.pc-search .el-icon { .pc-search .el-icon {
color: #a0aab6; color: #94a3b8;
font-size: 16px; font-size: 16px;
flex-shrink: 0; flex-shrink: 0;
transition: color 0.2s;
}
.pc-search:focus-within .el-icon {
color: #ff6a00;
} }
/* ========== 用户操作区 ========== */ /* ========== 用户操作区 ========== */
@@ -157,7 +179,6 @@
display: flex; display: flex;
align-items: center; align-items: center;
gap: 12px; gap: 12px;
margin-left: 12px;
min-width: 0; min-width: 0;
flex-shrink: 0; flex-shrink: 0;
height: 100%; height: 100%;
@@ -166,52 +187,52 @@
.pc-icon-link { .pc-icon-link {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 10px; gap: 6px;
padding: 0 22px; padding: 0 16px;
height: 40px; height: 38px;
border-radius: 12px; border-radius: 999px;
border: 1px solid #eef1f5; border: 1px solid #e2e8f0;
background: #ffffff; background: #ffffff;
color: #5a6577; color: #475569;
font-size: 14px; font-size: 13px;
font-weight: 700; font-weight: 700;
text-decoration: none; text-decoration: none;
cursor: pointer; cursor: pointer;
transition: all 0.2s; transition: all 0.2s ease;
white-space: nowrap; white-space: nowrap;
} }
.pc-icon-link:hover { .pc-icon-link:hover {
background: #fff3e8; background: #fff7ed;
border-color: #ff6a00; border-color: #ffd4b0;
color: #ff6a00; color: #ff6a00;
box-shadow: 0 4px 12px rgba(255, 106, 0, 0.05); box-shadow: 0 2px 8px rgba(255, 106, 0, 0.08);
} }
.service-link { .service-link {
gap: 7px; gap: 6px;
min-width: 92px; min-width: 82px;
justify-content: center; justify-content: center;
padding: 0 18px; padding: 0 16px;
border-color: rgba(255, 106, 0, 0.32); border-color: #fed7aa;
border-radius: 10px; border-radius: 999px;
background: #fff8f2; background: #fff7ed;
color: #ff6a00; color: #ea580c;
font-size: 14px; font-size: 13px;
font-weight: 800; font-weight: 700;
} }
.service-link .el-icon { .service-link .el-icon {
width: 18px; width: 16px;
height: 18px; height: 16px;
font-size: 18px; font-size: 16px;
stroke-width: 2.2;
} }
.service-link:hover { .service-link:hover {
background: #fff3e8; background: #ffedd5;
border-color: #ff6a00; border-color: #fdba74;
box-shadow: 0 6px 16px rgba(255, 106, 0, 0.1); color: #c2410c;
box-shadow: 0 3px 10px rgba(234, 88, 12, 0.12);
transform: translateY(-1px); transform: translateY(-1px);
} }
@@ -219,19 +240,20 @@
display: flex; display: flex;
align-items: center; align-items: center;
gap: 6px; gap: 6px;
padding: 0 16px; padding: 0 18px;
height: 40px; height: 38px;
border-radius: 10px; border-radius: 999px;
background: #f4f6f8; background: #f1f5f9;
color: #17233d; color: #1e293b;
font-size: 13px; font-size: 13px;
font-weight: 700; font-weight: 700;
text-decoration: none; text-decoration: none;
transition: all 0.2s; transition: all 0.2s ease;
} }
.pc-login-link:hover { .pc-login-link:hover {
background: #eaeff5; background: #e2e8f0;
color: #0f172a;
} }
.pc-post-link { .pc-post-link {
@@ -239,19 +261,20 @@
align-items: center; align-items: center;
gap: 6px; gap: 6px;
padding: 0 18px; padding: 0 18px;
height: 40px; height: 38px;
border-radius: 10px; border-radius: 999px;
background: #ff6a00; background: linear-gradient(135deg, #ff7a1a 0%, #ff5200 100%);
color: #fff; color: #ffffff;
font-size: 14px; font-size: 13px;
font-weight: 800; font-weight: 800;
text-decoration: none; text-decoration: none;
box-shadow: 0 6px 16px rgba(255, 106, 0, 0.2); box-shadow: 0 3px 10px rgba(255, 106, 0, 0.24);
transition: all 0.2s; transition: all 0.2s ease;
} }
.pc-post-link:hover { .pc-post-link:hover {
background: #e55d00; background: linear-gradient(135deg, #ff8533 0%, #ff6214 100%);
box-shadow: 0 5px 14px rgba(255, 106, 0, 0.32);
transform: translateY(-1px); transform: translateY(-1px);
} }
@@ -267,28 +290,31 @@
display: flex; display: flex;
align-items: center; align-items: center;
gap: 8px; gap: 8px;
padding: 4px 10px 4px 4px; padding: 3px 12px 3px 3px;
height: 36px; height: 38px;
border: none; border: 1px solid #e2e8f0;
border-radius: 999px; border-radius: 999px;
background: #f4f6f8; background: #ffffff;
cursor: pointer; cursor: pointer;
transition: all 0.2s; box-shadow: 0 1px 3px rgba(15, 23, 42, 0.04);
transition: all 0.2s ease;
} }
.pc-user-trigger:hover, .pc-user-trigger:hover,
.pc-user-trigger.active { .pc-user-trigger.active {
background: #eaeff5; background: #fffaf5;
border-color: #ffd4b0;
box-shadow: 0 3px 10px rgba(255, 106, 0, 0.08);
} }
.pc-avatar-chip { .pc-avatar-chip {
display: grid; display: grid;
width: 28px; width: 30px;
height: 28px; height: 30px;
place-items: center; place-items: center;
border-radius: 50%; border-radius: 50%;
overflow: hidden; overflow: hidden;
background: linear-gradient(135deg, #ff6a00 0%, #e55d00 100%); background: linear-gradient(135deg, #ff7a1a 0%, #ff5200 100%);
color: #fff; color: #fff;
font-size: 13px; font-size: 13px;
font-weight: 800; font-weight: 800;
@@ -308,8 +334,8 @@
.pc-user-name { .pc-user-name {
max-width: 100px; max-width: 100px;
overflow: hidden; overflow: hidden;
color: #17233d; color: #0f172a;
font-size: 14px; font-size: 13px;
font-weight: 700; font-weight: 700;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
@@ -319,12 +345,12 @@
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
min-width: 48px; min-width: 44px;
height: 22px; height: 20px;
padding: 0 8px; padding: 0 7px;
border-radius: 999px; border-radius: 999px;
font-size: 12px; font-size: 11px;
font-weight: 800; font-weight: 700;
line-height: 1; line-height: 1;
white-space: nowrap; white-space: nowrap;
} }
@@ -333,12 +359,12 @@
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
min-width: 42px; min-width: 38px;
height: 22px; height: 20px;
padding: 0 8px; padding: 0 7px;
border-radius: 999px; border-radius: 999px;
font-size: 12px; font-size: 11px;
font-weight: 900; font-weight: 800;
line-height: 1; line-height: 1;
white-space: nowrap; white-space: nowrap;
} }