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;
align-items: center;
gap: 12px;
}
.search-input {
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) {
.hero-title {
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) {
height: 0;
.orders-total-badge {
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;
align-items: center;
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;
align-items: center;
justify-content: center;
min-width: 20px;
height: 20px;
padding: 0 6px;
border-radius: 10px;
min-width: 18px;
height: 18px;
padding: 0 5px;
border-radius: 999px;
background: #f1f5f9;
color: #64748b;
font-size: 11px;
font-weight: 700;
transition: all 0.16s ease;
}
.tab-badge.is-active {
background: #ff6a00;
color: #ffffff;
font-size: 12px;
font-weight: 600;
}
.order-tabs :deep(.is-active) .tab-count {
background: #ffffff;
color: #ff6a00;
}
/* ---------- 订单列表容器 ---------- */
.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 {
margin-top: 60px;
padding: 80px 20px;
border-radius: 16px;
background: #ffffff;
border: 1px solid #e2e8f0;
text-align: center;
}
/* ---------- PC 表格重构 ---------- */
.orders-table {
display: block;
width: 100%;
}
.mobile-cards {
display: none;
.orders-table :deep(.el-table__header-wrapper th) {
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 {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 40px;
padding: 2px 8px;
border-radius: 999px;
min-width: 44px;
height: 24px;
padding: 0 8px;
border-radius: 6px;
font-size: 12px;
font-weight: 700;
}
.biz-tag.rental {
color: #1477ff;
background: rgba(20, 119, 255, 0.1);
color: #2563eb;
background: #eff6ff;
border: 1px solid #dbeafe;
}
.biz-tag.crash {
color: #ff6a00;
background: rgba(255, 106, 0, 0.1);
color: #ea580c;
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 {
display: flex;
align-items: center;
gap: 8px;
gap: 6px;
}
.order-no-text {
font-family: 'SF Mono', 'Monaco', 'Consolas', monospace;
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
font-size: 13px;
color: #4a5568;
}
.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;
font-weight: 600;
color: #334155;
}
.copy-icon {
cursor: pointer;
color: #9ca3af;
color: #94a3b8;
font-size: 14px;
transition: color 0.2s;
transition: color 0.15s;
}
.copy-icon:hover {
color: #ff6a00;
}
.amount-cell {
display: flex;
flex-direction: column;
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 {
/* 商品/账号单元格 */
.rental-product-cell,
.crash-product-cell {
display: flex;
flex-direction: column;
gap: 4px;
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 {
flex-direction: row;
align-items: center;
@@ -194,22 +359,23 @@
}
.crash-cover {
width: 48px;
height: 48px;
border-radius: 10px;
width: 44px;
height: 44px;
border-radius: 8px;
overflow: hidden;
background: #f0f3f8;
background: #f1f5f9;
display: flex;
align-items: center;
justify-content: center;
color: #a0aec0;
color: #94a3b8;
font-size: 12px;
flex-shrink: 0;
border: 1px solid #e2e8f0;
}
.crash-cover.lg {
width: 64px;
height: 64px;
width: 60px;
height: 60px;
}
.crash-cover img {
@@ -221,19 +387,183 @@
.crash-product-info {
display: flex;
flex-direction: column;
gap: 4px;
gap: 3px;
min-width: 0;
}
.crash-product-info strong,
.rental-title {
font-size: 14px;
color: #1f2937;
}
.crash-product-info span {
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 {
@@ -248,7 +578,7 @@
.crash-status.pending_payment {
background: #fff7ed;
color: #ff6a00;
color: #ea580c;
}
.crash-status.paid {
@@ -274,105 +604,21 @@
.crash-card-body {
display: grid;
grid-template-columns: 64px 1fr;
grid-template-columns: 60px 1fr;
gap: 12px;
}
.order-card {
border: 1px solid #e5e7eb;
border-radius: 12px;
padding: 16px;
background: #ffffff;
cursor: pointer;
transition: all 0.2s;
margin-bottom: 12px;
}
@media (max-width: 960px) {
.orders-hero-header {
flex-direction: column;
align-items: flex-start;
gap: 14px;
}
.order-card:hover {
border-color: #ff6a00;
box-shadow: 0 4px 12px rgba(255, 106, 0, 0.1);
}
.orders-search-box {
width: 100%;
}
.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 {
display: none;
}
@@ -380,17 +626,4 @@
.mobile-cards {
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>
<template>
<section class="page">
<div class="page-header">
<p class="eyebrow">ORDERS</p>
<h1>我的订单</h1>
<p>租赁与撞车订单统一展示,按创建时间倒序排列。</p>
<section class="orders-page-redesign">
<!-- 头部横幅区 -->
<div class="orders-hero-header">
<div class="hero-header-left">
<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 class="orders-toolbar">
<el-input
v-model="searchKeyword"
placeholder="搜索订单号 / 商品 / 账号"
:prefix-icon="Search"
clearable
class="search-input"
/>
</div>
<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">
<template #label>
<span class="tab-label">
{{ tab.label }}
<span v-if="(tabCounts?.[tab.key] ?? 0) > 0" class="tab-count">{{
tabCounts?.[tab.key]
}}</span>
<!-- 状态筛选胶囊条 -->
<div class="orders-filter-strip">
<div class="orders-pill-tabs">
<button
v-for="tab in statusTabs"
:key="tab.key"
type="button"
class="orders-pill-tab"
:class="{ active: activeTab === tab.key }"
@click="handleTabChange(tab.key)"
>
<span class="tab-name">{{ tab.label }}</span>
<span
v-if="(tabCounts?.[tab.key] ?? 0) > 0"
class="tab-badge"
:class="{ 'is-active': activeTab === tab.key }"
>
{{ tabCounts?.[tab.key] }}
</span>
</template>
</el-tab-pane>
</el-tabs>
</button>
</div>
</div>
<div v-if="displayOrders.length === 0 && !loading" class="empty-state">
<el-empty :description="searchKeyword ? '没有找到匹配的订单' : '暂无订单'" />
@@ -415,17 +430,15 @@ function bizTypeLabel(bizType: BizType) {
>
</template>
</el-table-column>
<el-table-column label="身份" width="80">
<template #default="{ row }">
<el-tag
<el-table-column label="身份" width="100" align="center">
<template #default="{ row }"
><span
v-if="row.bizType === 'rental' && row.rental"
:type="isRenter(row.rental) ? 'primary' : 'success'"
size="small"
>
{{ orderRole(row.rental) }}
</el-tag>
<span v-else class="muted">买家</span>
</template>
class="role-tag"
:class="isRenter(row.rental) ? 'renter' : 'owner'"
>{{ orderRole(row.rental) }}</span
><span v-else class="role-tag buyer">买家</span></template
>
</el-table-column>
<el-table-column label="状态" width="140">
<template #default="{ row }">
@@ -457,13 +470,14 @@ function bizTypeLabel(bizType: BizType) {
"
size="small"
type="primary"
round
:disabled="row.rental.renter_id !== session.userId"
:loading="payingOrderId === row.rental.id"
@click="handlePay(row.rental)"
>
去支付
</el-button>
<el-button size="small" @click="goDetail(row)">详情</el-button>
<el-button size="small" round @click="goDetail(row)">详情</el-button>
</div>
</template>
</el-table-column>
@@ -486,13 +500,12 @@ function bizTypeLabel(bizType: BizType) {
<CopyDocument />
</el-icon>
</div>
<el-tag
<span
v-if="item.bizType === 'rental' && item.rental"
:type="isRenter(item.rental) ? 'primary' : 'success'"
size="small"
class="role-tag"
: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>
</div>
+127 -101
View File
@@ -5,7 +5,7 @@
min-height: 100vh;
max-width: 100vw;
overflow-x: clip;
background: #f5f6f8;
background: #f8fafc;
}
.pc-topbar {
@@ -14,23 +14,30 @@
z-index: 100;
display: flex;
align-items: center;
gap: 20px;
gap: 24px;
min-width: 0;
max-width: 100%;
height: 64px;
padding: 0 24px;
background: #fff;
border-bottom: 1px solid #eef1f5;
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04);
padding: 0 32px;
background: rgba(255, 255, 255, 0.76);
backdrop-filter: blur(20px) saturate(180%);
-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 {
display: flex;
align-items: center;
gap: 10px;
gap: 12px;
text-decoration: none;
flex-shrink: 0;
transition: transform 0.2s ease;
}
.pc-brand:hover {
transform: translateY(-1px);
}
.pc-brand-mark {
@@ -38,59 +45,62 @@
width: 38px;
height: 38px;
place-items: center;
border-radius: 12px;
background: linear-gradient(135deg, #fff3e8 0%, #ffe4cc 100%);
color: #ff6a00;
border-radius: 11px;
background: linear-gradient(135deg, #ff7a1a 0%, #ff5200 100%);
color: #ffffff;
font-size: 20px;
font-weight: 900;
box-shadow: 0 3px 10px rgba(255, 106, 0, 0.28);
}
.pc-brand-info {
display: flex;
flex-direction: column;
line-height: 1.2;
line-height: 1.15;
}
.pc-brand-text {
font-size: 16px;
font-weight: 800;
color: #17233d;
font-size: 17px;
font-weight: 900;
letter-spacing: -0.02em;
color: #0f172a;
}
.pc-brand-sub {
font-size: 11px;
color: #8b9cb5;
color: #94a3b8;
font-weight: 600;
letter-spacing: 0.02em;
}
/* ========== 导航 ========== */
.pc-nav {
display: flex;
align-items: center;
gap: 4px;
margin-left: 10px;
gap: 6px;
margin-left: 6px;
min-width: 0;
height: 100%;
}
.pc-nav-link {
position: relative;
display: flex;
display: inline-flex;
align-items: center;
gap: 5px;
padding: 8px 14px;
gap: 6px;
padding: 8px 16px;
border-radius: 10px;
color: #5a6577;
color: #64748b;
font-size: 14px;
font-weight: 700;
text-decoration: none;
transition: all 0.2s;
transition: all 0.18s ease;
}
.pc-nav-badge {
position: absolute;
top: 2px;
right: 2px;
top: 3px;
right: 4px;
min-width: 16px;
height: 16px;
padding: 0 4px;
@@ -102,54 +112,66 @@
font-weight: 800;
line-height: 16px;
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 {
background: #fff3e8;
background: #fff7ed;
color: #ff6a00;
font-weight: 800;
}
/* ========== 搜索 ========== */
.pc-search {
display: flex;
align-items: center;
gap: 8px;
gap: 10px;
margin-left: auto;
padding: 0 14px;
padding: 0 16px;
height: 40px;
border-radius: 12px;
background: #f4f6f8;
border: 1px solid transparent;
border-radius: 999px;
background: #f1f5f9;
border: 1.5px solid transparent;
max-width: 320px;
min-width: 180px;
flex: 1;
transition: all 0.2s;
transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1);
}
.pc-search:focus-within {
background: #fff;
border-color: #ff6a00;
box-shadow: 0 0 0 4px rgba(255, 106, 0, 0.08);
border-color: #ff8533;
box-shadow: 0 0 0 3px rgba(255, 106, 0, 0.12);
}
.pc-search input {
border: none;
outline: none;
background: transparent;
color: #17233d;
color: #0f172a;
font-size: 13px;
font-weight: 500;
width: 100%;
}
.pc-search input::placeholder {
color: #a0aab6;
color: #94a3b8;
}
.pc-search .el-icon {
color: #a0aab6;
color: #94a3b8;
font-size: 16px;
flex-shrink: 0;
transition: color 0.2s;
}
.pc-search:focus-within .el-icon {
color: #ff6a00;
}
/* ========== 用户操作区 ========== */
@@ -157,7 +179,6 @@
display: flex;
align-items: center;
gap: 12px;
margin-left: 12px;
min-width: 0;
flex-shrink: 0;
height: 100%;
@@ -166,52 +187,52 @@
.pc-icon-link {
display: flex;
align-items: center;
gap: 10px;
padding: 0 22px;
height: 40px;
border-radius: 12px;
border: 1px solid #eef1f5;
gap: 6px;
padding: 0 16px;
height: 38px;
border-radius: 999px;
border: 1px solid #e2e8f0;
background: #ffffff;
color: #5a6577;
font-size: 14px;
color: #475569;
font-size: 13px;
font-weight: 700;
text-decoration: none;
cursor: pointer;
transition: all 0.2s;
transition: all 0.2s ease;
white-space: nowrap;
}
.pc-icon-link:hover {
background: #fff3e8;
border-color: #ff6a00;
background: #fff7ed;
border-color: #ffd4b0;
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 {
gap: 7px;
min-width: 92px;
gap: 6px;
min-width: 82px;
justify-content: center;
padding: 0 18px;
border-color: rgba(255, 106, 0, 0.32);
border-radius: 10px;
background: #fff8f2;
color: #ff6a00;
font-size: 14px;
font-weight: 800;
padding: 0 16px;
border-color: #fed7aa;
border-radius: 999px;
background: #fff7ed;
color: #ea580c;
font-size: 13px;
font-weight: 700;
}
.service-link .el-icon {
width: 18px;
height: 18px;
font-size: 18px;
stroke-width: 2.2;
width: 16px;
height: 16px;
font-size: 16px;
}
.service-link:hover {
background: #fff3e8;
border-color: #ff6a00;
box-shadow: 0 6px 16px rgba(255, 106, 0, 0.1);
background: #ffedd5;
border-color: #fdba74;
color: #c2410c;
box-shadow: 0 3px 10px rgba(234, 88, 12, 0.12);
transform: translateY(-1px);
}
@@ -219,19 +240,20 @@
display: flex;
align-items: center;
gap: 6px;
padding: 0 16px;
height: 40px;
border-radius: 10px;
background: #f4f6f8;
color: #17233d;
padding: 0 18px;
height: 38px;
border-radius: 999px;
background: #f1f5f9;
color: #1e293b;
font-size: 13px;
font-weight: 700;
text-decoration: none;
transition: all 0.2s;
transition: all 0.2s ease;
}
.pc-login-link:hover {
background: #eaeff5;
background: #e2e8f0;
color: #0f172a;
}
.pc-post-link {
@@ -239,19 +261,20 @@
align-items: center;
gap: 6px;
padding: 0 18px;
height: 40px;
border-radius: 10px;
background: #ff6a00;
color: #fff;
font-size: 14px;
height: 38px;
border-radius: 999px;
background: linear-gradient(135deg, #ff7a1a 0%, #ff5200 100%);
color: #ffffff;
font-size: 13px;
font-weight: 800;
text-decoration: none;
box-shadow: 0 6px 16px rgba(255, 106, 0, 0.2);
transition: all 0.2s;
box-shadow: 0 3px 10px rgba(255, 106, 0, 0.24);
transition: all 0.2s ease;
}
.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);
}
@@ -267,28 +290,31 @@
display: flex;
align-items: center;
gap: 8px;
padding: 4px 10px 4px 4px;
height: 36px;
border: none;
padding: 3px 12px 3px 3px;
height: 38px;
border: 1px solid #e2e8f0;
border-radius: 999px;
background: #f4f6f8;
background: #ffffff;
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.active {
background: #eaeff5;
background: #fffaf5;
border-color: #ffd4b0;
box-shadow: 0 3px 10px rgba(255, 106, 0, 0.08);
}
.pc-avatar-chip {
display: grid;
width: 28px;
height: 28px;
width: 30px;
height: 30px;
place-items: center;
border-radius: 50%;
overflow: hidden;
background: linear-gradient(135deg, #ff6a00 0%, #e55d00 100%);
background: linear-gradient(135deg, #ff7a1a 0%, #ff5200 100%);
color: #fff;
font-size: 13px;
font-weight: 800;
@@ -308,8 +334,8 @@
.pc-user-name {
max-width: 100px;
overflow: hidden;
color: #17233d;
font-size: 14px;
color: #0f172a;
font-size: 13px;
font-weight: 700;
text-overflow: ellipsis;
white-space: nowrap;
@@ -319,12 +345,12 @@
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 48px;
height: 22px;
padding: 0 8px;
min-width: 44px;
height: 20px;
padding: 0 7px;
border-radius: 999px;
font-size: 12px;
font-weight: 800;
font-size: 11px;
font-weight: 700;
line-height: 1;
white-space: nowrap;
}
@@ -333,12 +359,12 @@
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 42px;
height: 22px;
padding: 0 8px;
min-width: 38px;
height: 20px;
padding: 0 7px;
border-radius: 999px;
font-size: 12px;
font-weight: 900;
font-size: 11px;
font-weight: 800;
line-height: 1;
white-space: nowrap;
}