This commit is contained in:
Mrx
2026-05-21 12:00:38 +08:00
parent 19a11516ec
commit 6137c69034
13 changed files with 2080 additions and 1036 deletions

View File

@@ -329,120 +329,160 @@ onUnmounted(() => {
<view class="page-root">
<scroll-view scroll-y class="scrollarea">
<view class="page">
<view class="banner mine-banner">
<view class="banner-text">
<view class="banner-title">
买车先查车况更安心
</view>
<view class="banner-sub">
减少隐蔽事故车泡水车调表车风险
</view>
</view>
<view class="banner-illustration">
<view class="car-illus" />
</view>
</view>
<view class="card mine-user">
<view class="mine-user-main" @tap="handleUserTap">
<view class="mine-avatar-placeholder" />
<view class="mine-user-text">
<view class="mine-user-name">
{{ isLogin ? nickname : '您还没有登录,立即登录' }}
</view>
<view class="mine-user-desc">
{{ isLogin ? userDesc : '登录后可同步历史报告与收藏' }}
<!-- 区块1: 个人信息栏 -->
<view class="profile-card">
<view class="profile-bg" />
<view class="profile-content" @tap="handleUserTap">
<view class="profile-avatar">
<view class="avatar-inner">
<view class="avatar-icon i-carbon-user" />
</view>
</view>
</view>
<!-- #ifdef MP-WEIXIN -->
<view v-if="isLogin && !hasBoundMobile" class="mine-user-extra">
<text class="extra-link" @tap.stop="syncWxNickname">同步微信昵称</text>
<text class="extra-dot">·</text>
<text class="extra-hint">绑定手机后优先显示手机号</text>
</view>
<!-- #endif -->
<view
v-if="isLogin && !hasBoundMobile"
class="mine-bind-row"
@tap.stop="openBindModal"
>
<text class="mine-bind-text">绑定手机号</text>
<text class="mine-bind-arrow"></text>
</view>
</view>
<view class="card">
<view class="grid-4">
<view class="grid-item" @tap="goHistoryReport">
<view class="icon-tool i-carbon-document" />
<view class="grid-text">
历史报告
</view>
<view class="profile-info">
<text class="profile-name">{{ isLogin ? nickname : '点击登录' }}</text>
<text class="profile-desc">{{ isLogin ? userDesc : '登录后可同步历史报告与收藏' }}</text>
</view>
<view class="grid-item" @tap="goFreeValuation">
<view class="icon-tool i-carbon-chart-line" />
<view class="grid-text">
免费估值
</view>
<view class="profile-arrow">
<view class="i-carbon-chevron-right" />
</view>
</view>
<!-- 已登录未绑定手机 -->
<view v-if="isLogin && !hasBoundMobile" class="profile-actions">
<view class="action-btn" @tap.stop="openBindModal">
<view class="action-icon i-carbon-phone" />
<text class="action-text">绑定手机号</text>
</view>
<!-- #ifdef MP-WEIXIN -->
<button class="grid-item grid-item-btn" open-type="share" hover-class="grid-item-hover">
<view class="icon-tool i-carbon-share" />
<view class="grid-text">
分享好友
<view class="action-btn" @tap.stop="syncWxNickname">
<view class="action-icon i-carbon-edit" />
<text class="action-text">同步昵称</text>
</view>
<!-- #endif -->
</view>
</view>
<!-- 区块2: 快捷功能4宫格 -->
<view class="section">
<view class="section-title">快捷功能</view>
<view class="quick-grid">
<view class="quick-item" @tap="goHistoryReport">
<view class="quick-icon-wrap" style="background: rgba(23,104,255,0.08)">
<view class="quick-icon i-carbon-document" style="color: #1768ff" />
</view>
<text class="quick-name">历史报告</text>
</view>
<view class="quick-item" @tap="goFreeValuation">
<view class="quick-icon-wrap" style="background: rgba(250,140,22,0.08)">
<view class="quick-icon i-carbon-chart-line" style="color: #fa8c16" />
</view>
<text class="quick-name">免费估值</text>
</view>
<!-- #ifdef MP-WEIXIN -->
<button class="quick-item quick-item-btn" open-type="share" hover-class="quick-item-hover">
<view class="quick-icon-wrap" style="background: rgba(19,194,94,0.08)">
<view class="quick-icon i-carbon-share" style="color: #13c25e" />
</view>
<text class="quick-name">分享好友</text>
</button>
<!-- #endif -->
<!-- #ifndef MP-WEIXIN -->
<view class="grid-item" @tap="goShareFallback">
<view class="icon-tool i-carbon-share" />
<view class="grid-text">
分享好友
<view class="quick-item" @tap="goShareFallback">
<view class="quick-icon-wrap" style="background: rgba(19,194,94,0.08)">
<view class="quick-icon i-carbon-share" style="color: #13c25e" />
</view>
<text class="quick-name">分享好友</text>
</view>
<!-- #endif -->
<view class="grid-item" @tap="openCoopModal">
<view class="icon-tool i-carbon-enterprise" />
<view class="grid-text">
商务合作
<view class="quick-item" @tap="openCoopModal">
<view class="quick-icon-wrap" style="background: rgba(114,46,209,0.08)">
<view class="quick-icon i-carbon-enterprise" style="color: #722ed1" />
</view>
<text class="quick-name">商务合作</text>
</view>
</view>
</view>
<view class="card list-card">
<view class="list-item" @tap="goLegalUserAgreement">
<view class="list-icon i-carbon-document-blank" />
<text class="list-text">用户协议</text>
</view>
<view class="list-item" @tap="goLegalPrivacyPolicy">
<view class="list-icon i-carbon-security" />
<text class="list-text">隐私政策</text>
</view>
<view class="list-item" @tap="goLegalAuthorization">
<view class="list-icon i-carbon-certificate" />
<text class="list-text">授权书</text>
</view>
<view class="list-item" @tap="goHelp">
<view class="list-icon i-carbon-help" />
<text class="list-text">帮助中心</text>
</view>
<button
class="list-item list-item-contact no-border"
open-type="contact"
hover-class="list-item-contact-hover"
>
<view class="list-icon i-carbon-chat" />
<view class="service-row">
<text class="list-text">在线客服</text>
<text class="service-time">人工客服 周一至周日 9:00-20:00</text>
<!-- 区块3: 常用工具 -->
<view class="section">
<view class="section-title">常用工具</view>
<view class="tool-list">
<view class="tool-row" @tap="goOilPrice">
<view class="tool-row-icon-wrap" style="background: rgba(23,104,255,0.08)">
<view class="tool-row-icon i-carbon-gas-station" style="color: #1768ff" />
</view>
<text class="tool-row-name">实时油价查询</text>
<text class="tool-row-arrow"></text>
</view>
</button>
<view class="tool-row" @tap="goIllegalCode">
<view class="tool-row-icon-wrap" style="background: rgba(250,140,22,0.08)">
<view class="tool-row-icon i-carbon-search" style="color: #fa8c16" />
</view>
<text class="tool-row-name">违章代码查询</text>
<text class="tool-row-arrow"></text>
</view>
</view>
</view>
<!-- 区块4: 服务与支持 -->
<view class="section">
<view class="section-title">服务与支持</view>
<view class="tool-list">
<button class="tool-row tool-row-btn no-border" open-type="contact" hover-class="tool-row-hover">
<view class="tool-row-icon-wrap" style="background: rgba(19,194,94,0.08)">
<view class="tool-row-icon i-carbon-chat" style="color: #13c25e" />
</view>
<view class="tool-row-text">
<text class="tool-row-name">在线客服</text>
<text class="tool-row-sub">周一至周日 9:00-20:00</text>
</view>
</button>
<view class="tool-row" @tap="goHelp">
<view class="tool-row-icon-wrap" style="background: rgba(114,46,209,0.08)">
<view class="tool-row-icon i-carbon-help" style="color: #722ed1" />
</view>
<text class="tool-row-name">帮助中心</text>
<text class="tool-row-arrow"></text>
</view>
<view class="tool-row" @tap="goAbout">
<view class="tool-row-icon-wrap" style="background: rgba(78,89,105,0.08)">
<view class="tool-row-icon i-carbon-information" style="color: #4e5969" />
</view>
<text class="tool-row-name">关于我们</text>
<text class="tool-row-arrow"></text>
</view>
</view>
</view>
<!-- 区块5: 法律条款 -->
<view class="section">
<view class="section-title">法律条款</view>
<view class="tool-list">
<view class="tool-row" @tap="goLegalUserAgreement">
<view class="tool-row-icon-wrap" style="background: rgba(78,89,105,0.06)">
<view class="tool-row-icon i-carbon-document-blank" style="color: #86909c" />
</view>
<text class="tool-row-name">用户协议</text>
<text class="tool-row-arrow"></text>
</view>
<view class="tool-row" @tap="goLegalPrivacyPolicy">
<view class="tool-row-icon-wrap" style="background: rgba(78,89,105,0.06)">
<view class="tool-row-icon i-carbon-security" style="color: #86909c" />
</view>
<text class="tool-row-name">隐私政策</text>
<text class="tool-row-arrow"></text>
</view>
<view class="tool-row no-border" @tap="goLegalAuthorization">
<view class="tool-row-icon-wrap" style="background: rgba(78,89,105,0.06)">
<view class="tool-row-icon i-carbon-certificate" style="color: #86909c" />
</view>
<text class="tool-row-name">授权书</text>
<text class="tool-row-arrow"></text>
</view>
</view>
</view>
<view style="height: 40rpx" />
</view>
</scroll-view>
@@ -531,7 +571,7 @@ onUnmounted(() => {
height: 100vh;
display: flex;
flex-direction: column;
background: linear-gradient(180deg, #f8faff 0%, #f3f5fb 100%);
background: linear-gradient(180deg, #f0f5ff 0%, #f5f7fa 30%, #f3f5fb 100%);
}
.scrollarea {
@@ -541,143 +581,355 @@ onUnmounted(() => {
}
.page {
padding: 24rpx 24rpx 40rpx;
padding: 0 24rpx 40rpx;
box-sizing: border-box;
}
.banner {
display: flex;
padding: 32rpx 28rpx;
/* ═══ 区块1: 个人信息栏 ═══ */
.profile-card {
position: relative;
border-radius: 0 0 32rpx 32rpx;
overflow: hidden;
margin-bottom: 24rpx;
background: linear-gradient(135deg, #fff7f0 0%, #ffffff 100%);
border-radius: 24rpx;
box-shadow:
0 18rpx 40rpx rgba(15, 35, 52, 0.05),
0 0 0 1rpx rgba(226, 229, 239, 0.9);
}
.banner-text {
flex: 1;
.profile-bg {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
background: linear-gradient(135deg, #1768ff 0%, #4d94ff 60%, #7bb8ff 100%);
}
.banner-title {
font-size: 32rpx;
font-weight: 600;
color: #1d2129;
margin-bottom: 8rpx;
}
.banner-sub {
font-size: 24rpx;
color: #4e5969;
}
.banner-illustration {
width: 180rpx;
.profile-content {
position: relative;
display: flex;
align-items: center;
justify-content: center;
padding: 48rpx 32rpx 32rpx;
gap: 20rpx;
}
.car-illus {
width: 160rpx;
height: 120rpx;
border-radius: 16rpx;
background: linear-gradient(145deg, #ffe8dc 0%, #ffc9a8 100%);
opacity: 0.95;
}
.card {
background: linear-gradient(145deg, #ffffff 0%, #f7f8ff 100%);
border-radius: 24rpx;
padding: 24rpx 24rpx 20rpx;
margin-bottom: 24rpx;
border: 1rpx solid #e5e6f0;
box-shadow:
0 16rpx 40rpx rgba(15, 35, 52, 0.04),
0 0 0 1rpx rgba(255, 255, 255, 0.5) inset;
}
.mine-user {
display: flex;
flex-direction: column;
align-items: stretch;
}
.mine-user-main {
display: flex;
align-items: center;
}
.mine-avatar-placeholder {
width: 80rpx;
height: 80rpx;
border-radius: 50%;
background-color: #f2f3f5;
margin-right: 20rpx;
.profile-avatar {
flex-shrink: 0;
}
.mine-user-text {
.avatar-inner {
width: 96rpx;
height: 96rpx;
border-radius: 50%;
background: rgba(255, 255, 255, 0.2);
display: flex;
align-items: center;
justify-content: center;
border: 3rpx solid rgba(255, 255, 255, 0.4);
}
.avatar-icon {
font-size: 44rpx;
color: #fff;
}
.profile-info {
flex: 1;
min-width: 0;
}
.mine-user-name {
.profile-name {
display: block;
font-size: 32rpx;
font-weight: 600;
color: #fff;
margin-bottom: 6rpx;
}
.profile-desc {
display: block;
font-size: 22rpx;
color: rgba(255, 255, 255, 0.8);
}
.profile-arrow {
flex-shrink: 0;
color: rgba(255, 255, 255, 0.6);
font-size: 28rpx;
}
.profile-actions {
position: relative;
display: flex;
gap: 24rpx;
padding: 0 32rpx 28rpx;
}
.action-btn {
display: flex;
align-items: center;
gap: 8rpx;
padding: 10rpx 24rpx;
border-radius: 24rpx;
background: rgba(255, 255, 255, 0.18);
}
.action-icon {
font-size: 24rpx;
color: #fff;
}
.action-text {
font-size: 22rpx;
color: #fff;
}
/* ═══ 区块通用 ═══ */
.section {
background: #fff;
border-radius: 24rpx;
padding: 28rpx 24rpx 8rpx;
margin-bottom: 24rpx;
box-shadow: 0 4rpx 16rpx rgba(15, 35, 52, 0.03);
}
.section-title {
font-size: 26rpx;
font-weight: 600;
color: #1d2129;
margin-bottom: 4rpx;
margin-bottom: 20rpx;
padding-left: 4rpx;
}
.mine-user-desc {
font-size: 22rpx;
color: #86909c;
}
.mine-user-extra {
margin-top: 16rpx;
padding-top: 16rpx;
border-top: 1rpx solid #f0f0f0;
font-size: 22rpx;
color: #86909c;
/* ═══ 区块2: 快捷功能4宫格 ═══ */
.quick-grid {
display: flex;
flex-wrap: wrap;
padding-bottom: 16rpx;
}
.quick-item {
width: 25%;
display: flex;
flex-direction: column;
align-items: center;
padding: 12rpx 0;
}
.extra-link {
color: #1768ff;
.quick-item-btn {
margin: 0;
padding: 12rpx 0;
border: none;
background: transparent;
line-height: normal;
font-size: inherit;
color: inherit;
box-sizing: border-box;
}
.extra-dot {
margin: 0 8rpx;
.quick-item-btn::after {
display: none;
}
.quick-item-hover {
opacity: 0.7;
}
.quick-icon-wrap {
width: 80rpx;
height: 80rpx;
border-radius: 24rpx;
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 10rpx;
}
.quick-icon {
font-size: 36rpx;
}
.quick-name {
font-size: 22rpx;
color: #4e5969;
text-align: center;
}
/* ═══ 区块3/4/5: 列表行 ═══ */
.tool-list {
padding-bottom: 8rpx;
}
.tool-row {
display: flex;
align-items: center;
padding: 20rpx 4rpx;
border-bottom: 1rpx solid #f5f5f5;
}
.tool-row:last-child {
border-bottom: none;
}
.tool-row:active {
background: #fafbfc;
border-radius: 12rpx;
}
.tool-row-btn {
margin: 0;
padding: 20rpx 4rpx;
border: none;
border-radius: 0;
background: transparent;
text-align: left;
line-height: inherit;
font-size: inherit;
color: inherit;
box-sizing: border-box;
width: 100%;
border-bottom: 1rpx solid #f5f5f5;
}
.tool-row-btn::after {
display: none;
}
.tool-row-hover {
background: rgba(23, 104, 255, 0.04);
}
.tool-row-icon-wrap {
width: 56rpx;
height: 56rpx;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
margin-right: 16rpx;
flex-shrink: 0;
}
.tool-row-icon {
font-size: 28rpx;
}
.tool-row-text {
flex: 1;
min-width: 0;
}
.tool-row-name {
flex: 1;
font-size: 26rpx;
color: #1d2129;
}
.tool-row-sub {
display: block;
font-size: 20rpx;
color: #ffb020;
margin-top: 2rpx;
}
.tool-row-arrow {
font-size: 28rpx;
color: #c9cdd4;
flex-shrink: 0;
margin-left: 8rpx;
}
.no-border {
border-bottom: none !important;
}
/* ═══ 弹窗样式 ═══ */
.coop-mask {
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.5);
z-index: 1001;
display: flex;
align-items: center;
justify-content: center;
padding: 48rpx;
box-sizing: border-box;
}
.coop-dialog {
width: 100%;
max-width: 600rpx;
background: #fff;
border-radius: 24rpx;
padding: 36rpx 32rpx 28rpx;
box-sizing: border-box;
}
.coop-title {
font-size: 32rpx;
font-weight: 600;
color: #1d2129;
text-align: center;
margin-bottom: 12rpx;
}
.coop-hint {
font-size: 24rpx;
color: #86909c;
text-align: center;
margin-bottom: 28rpx;
line-height: 1.5;
}
.coop-qr {
display: block;
width: 360rpx;
height: 360rpx;
margin: 0 auto 28rpx;
border-radius: 12rpx;
background: #f7f8fa;
}
.coop-qr-placeholder {
width: 360rpx;
height: 360rpx;
margin: 0 auto 28rpx;
border-radius: 12rpx;
border: 2rpx dashed #dcdfe6;
background: #fafbfc;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 24rpx;
box-sizing: border-box;
gap: 12rpx;
}
.coop-qr-placeholder-text {
font-size: 22rpx;
color: #86909c;
line-height: 1.6;
text-align: center;
}
.coop-qr-placeholder-sub {
font-size: 20rpx;
color: #c9cdd4;
}
.extra-hint {
color: #86909c;
}
.mine-bind-row {
margin-top: 12rpx;
padding: 16rpx 0 4rpx;
display: flex;
align-items: center;
justify-content: space-between;
}
.mine-bind-text {
font-size: 26rpx;
color: #1768ff;
font-weight: 500;
}
.mine-bind-arrow {
font-size: 36rpx;
color: #1768ff;
line-height: 1;
.coop-close {
height: 80rpx;
line-height: 80rpx;
text-align: center;
background: linear-gradient(90deg, #1768ff 0%, #4d94ff 100%);
color: #fff;
font-size: 28rpx;
font-weight: 600;
border-radius: 40rpx;
}
/* ═══ 绑定手机弹窗 ═══ */
.bind-mask {
position: fixed;
left: 0;
@@ -785,198 +1037,4 @@ onUnmounted(() => {
color: #86909c;
padding: 12rpx;
}
.grid-4 {
display: flex;
justify-content: space-between;
}
.grid-item {
width: 25%;
display: flex;
flex-direction: column;
align-items: center;
padding-top: 8rpx;
}
.grid-item-btn {
margin: 0;
padding: 8rpx 0 0;
border: none;
background: transparent;
line-height: normal;
font-size: inherit;
color: inherit;
box-sizing: border-box;
}
.grid-item-btn::after {
display: none;
}
.grid-item-hover {
opacity: 0.88;
}
.coop-mask {
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.5);
z-index: 1001;
display: flex;
align-items: center;
justify-content: center;
padding: 48rpx;
box-sizing: border-box;
}
.coop-dialog {
width: 100%;
max-width: 600rpx;
background: #fff;
border-radius: 24rpx;
padding: 36rpx 32rpx 28rpx;
box-sizing: border-box;
}
.coop-title {
font-size: 32rpx;
font-weight: 600;
color: #1d2129;
text-align: center;
margin-bottom: 12rpx;
}
.coop-hint {
font-size: 24rpx;
color: #86909c;
text-align: center;
margin-bottom: 28rpx;
line-height: 1.5;
}
.coop-qr {
display: block;
width: 360rpx;
height: 360rpx;
margin: 0 auto 28rpx;
border-radius: 12rpx;
background: #f7f8fa;
}
.coop-qr-placeholder {
width: 360rpx;
height: 360rpx;
margin: 0 auto 28rpx;
border-radius: 12rpx;
border: 2rpx dashed #dcdfe6;
background: #fafbfc;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 24rpx;
box-sizing: border-box;
gap: 12rpx;
}
.coop-qr-placeholder-text {
font-size: 22rpx;
color: #86909c;
line-height: 1.6;
text-align: center;
}
.coop-qr-placeholder-sub {
font-size: 20rpx;
color: #c9cdd4;
}
.coop-close {
height: 80rpx;
line-height: 80rpx;
text-align: center;
background: linear-gradient(90deg, #1768ff 0%, #4d94ff 100%);
color: #fff;
font-size: 28rpx;
font-weight: 600;
border-radius: 40rpx;
}
.icon-tool {
width: 48rpx;
height: 48rpx;
margin-bottom: 8rpx;
color: #1768ff;
}
.grid-text {
font-size: 24rpx;
color: #4e5969;
}
.list-card {
padding: 0 24rpx;
}
.list-item {
height: 96rpx;
display: flex;
align-items: center;
border-bottom: 1rpx solid #f0f0f0;
}
.list-item-contact {
width: 100%;
margin: 0;
padding: 0;
border: none;
border-radius: 0;
background: transparent;
text-align: left;
line-height: inherit;
font-size: inherit;
color: inherit;
box-sizing: border-box;
}
.list-item-contact::after {
display: none;
}
.list-item-contact-hover {
background: rgba(23, 104, 255, 0.06);
}
.list-icon {
width: 40rpx;
height: 40rpx;
margin-right: 20rpx;
flex-shrink: 0;
color: #1768ff;
}
.no-border {
border-bottom-width: 0;
}
.list-text {
font-size: 26rpx;
color: #1d2129;
}
.service-row {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
}
.service-time {
font-size: 22rpx;
color: #ffb020;
}
</style>