From 3696830fbaf2fd97d98020087abf20917e491bdc Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期四, 23 四月 2026 20:06:35 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 app/pages/mine/mine.vue |  437 ++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 358 insertions(+), 79 deletions(-)

diff --git a/app/pages/mine/mine.vue b/app/pages/mine/mine.vue
index 123f636..fdb3a46 100644
--- a/app/pages/mine/mine.vue
+++ b/app/pages/mine/mine.vue
@@ -1,56 +1,143 @@
 <template>
-	<view class="index">
-		<view class="index_list">
-			<view class="index_list_item">
-				<view class="index_list_item_info">
-					<text>SHE浜嬩欢涓婃姤</text>
-					<text>FAC/NM</text>
-				</view>
-				<image src="/static/bg_a.png" mode="widthFix"></image>
+	<view class="mine-page">
+		<view class="mine-page__nav" :style="{ paddingTop: statusBarHeight + 'px' }">
+			<view class="mine-page__nav-inner">
+				<text class="mine-page__nav-title">鎴戠殑</text>
 			</view>
-			<view class="index_list_item">
-				<view class="index_list_item_info">
-					<text>璺岀粖婊戦闄╀笂鎶�</text>
-					<text>TAG</text>
+		</view>
+
+		<scroll-view class="mine-page__body" scroll-y :style="bodyStyle">
+			<view class="mine-page__content">
+				<view class="mine-page__profile">
+					<image class="mine-page__avatar" src="/static/image/ic_pic@2x.png" mode="aspectFill"></image>
+					<view class="mine-page__profile-info">
+						<view class="mine-page__name-row">
+							<text class="mine-page__name">{{ currentProfile.name }}</text>
+							<view v-if="currentProfile.levelTag" class="mine-page__level-tag">
+								<!-- <text class="mine-page__level-dot"></text> -->
+								<image src="/static/image/ic_jiangpai@2x.png" mode="widthFix" class="mine-page__level-dot"></image>
+								<text class="mine-page__level-text">{{ currentProfile.levelTag }}</text>
+							</view>
+						</view>
+						<text class="mine-page__phone">{{ currentProfile.phone }}</text>
+					</view>
 				</view>
-				<image src="/static/bg_b.png" mode="widthFix"></image>
+
+				<view class="income-card">
+					<view class="income-card__left">
+						<text class="income-card__label">绱浣i噾(鍏�)</text>
+						<text class="income-card__value">{{ currentProfile.totalIncome }}</text>
+					</view>
+					<view class="income-card__right">
+						<view class="income-card__stat">
+							<text class="income-card__stat-label">寰呯粨绠�(鍏�)锛�</text>
+							<text class="income-card__stat-value">{{ currentProfile.pendingIncome }}</text>
+						</view>
+						<view class="income-card__stat">
+							<text class="income-card__stat-label">璁㈠崟鎬绘暟锛�</text>
+							<text class="income-card__stat-value">{{ currentProfile.orderCount }}</text>
+						</view>
+					</view>
+				</view>
+
+				<view class="menu-panel">
+					<view v-for="item in menuList" :key="item.title" class="menu-panel__item" @click="jump(item)">
+						<text class="menu-panel__title">{{ item.title }}</text>
+						<view class="menu-panel__right">
+							<template v-if="item.key === 'wallet'">
+								<text class="menu-panel__sub menu-panel__sub--muted">浣欓锛歿{ currentProfile.walletBalance }}</text>
+							</template>
+							<template v-else-if="item.key === 'driver' && !currentProfile.verified">
+								<text class="menu-panel__sub menu-panel__sub--danger">瀹屾垚璁よ瘉鍚庡嵆鍙帴鍗�</text>
+							</template>
+							<template v-else-if="item.key === 'driver' && currentProfile.verified">
+								<text class="menu-panel__sub menu-panel__sub--warning">瀹℃牳涓�</text>
+								<text class="menu-panel__sub menu-panel__sub--primary">宸茶璇�</text>
+							</template>
+							<template v-else-if="item.key === 'setting'">
+								<text class="menu-panel__sub menu-panel__sub--muted">褰撳墠鐗堟湰V1.0.0</text>
+							</template>
+							<view class="menu-panel__arrow">
+								<image src="/static/image/mine_ar2@2x.png" mode="widthFix"></image>
+							</view>
+						</view>
+					</view>
+				</view>
 			</view>
+		</scroll-view>
+
+		<view class="mine-page__footer">
+			<button class="mine-page__logout" hover-class="mine-page__logout--hover">閫�鍑虹櫥褰�</button>
 		</view>
 	</view>
 </template>
 
 <script>
-	import { mapState } from 'vuex'
 	export default {
-		computed: {
-			...mapState(['userInfo'])
-		},
 		data() {
 			return {
-				title: 'Hello'
+				statusBarHeight: 0,
+				navHeight: 0,
+				useVerifiedState: true,
+				menuList: [
+					{ key: 'wallet', title: '鎴戠殑閽卞寘' },
+					{ key: 'driver', title: '鍙告満璁よ瘉' },
+					{ key: 'guide', title: '瑙勮寖椤荤煡' },
+					{ key: 'help', title: '甯姪涓庡鏈�' },
+					{ key: 'setting', title: '璁剧疆' }
+				],
+				profileStates: {
+					guest: {
+						name: '姹ゅ瓙鏂�',
+						phone: '18166565677',
+						levelTag: '',
+						totalIncome: '-',
+						pendingIncome: '-',
+						orderCount: '-',
+						walletBalance: '楼0',
+						verified: false
+					},
+					verified: {
+						name: '姹ゅ瓙鏂�',
+						phone: '18166565677锛堢殩BD23189锛�',
+						levelTag: 'S绾�',
+						totalIncome: '8,314.90',
+						pendingIncome: '2000.00',
+						orderCount: '329',
+						walletBalance: '楼1500.00',
+						verified: true
+					}
+				}
+			}
+		},
+		computed: {
+			currentProfile() {
+				return this.useVerifiedState ? this.profileStates.verified : this.profileStates.guest
+			},
+			bodyStyle() {
+				const footerHeight = uni.upx2px(124)
+				return {
+					marginTop: this.navHeight + 'px',
+					height: `calc(100vh - ${this.navHeight + footerHeight}px)`
+				}
 			}
 		},
 		onLoad() {
-
+			const systemInfo = uni.getSystemInfoSync()
+			this.statusBarHeight = systemInfo.statusBarHeight || 0
+			this.navHeight = this.statusBarHeight + uni.upx2px(88)
 		},
 		methods: {
-			jump(type) {
-				switch (type) {
-					case 1:
-						uni.navigateTo({
-							url: '/pages/reporting_she/reporting_she'
-						})
-						break;
-					case 2:
-						uni.navigateTo({
-							url: '/pages/riskReporting/riskReporting'
-						})
-						break;
-					case 3:
-						uni.navigateTo({
-							url: '/pages/report_dca/report_dca'
-						})
-						break;
+			jump(item) {
+				console.log(item)
+				if (item.key === 'setting') {
+					uni.navigateTo({
+						url: '/pages/settings/settings'
+					})
+				} else if (item.key === 'driver') {
+					uni.navigateTo({
+						url: '/pages/certification-details/certification-details'
+					})
 				}
 			}
 		}
@@ -58,53 +145,245 @@
 </script>
 
 <style lang="scss" scoped>
-	.index {
-		width: 100vw;
-		padding: 30rpx;
+	.mine-page {
+		height: 100vh;
+		background: #f6f8fc;
+		overflow: hidden;
+
+		&__nav {
+			position: fixed;
+			left: 0;
+			top: 0;
+			right: 0;
+			z-index: 10;
+			background: #ffffff;
+		}
+
+		&__nav-inner {
+			height: 88rpx;
+			display: flex;
+			align-items: center;
+			padding: 0 26rpx;
+		}
+
+		&__nav-title {
+			font-size: 36rpx;
+			font-weight: 700;
+			color: #2b3139;
+		}
+
+		&__body {
+			box-sizing: border-box;
+		}
+
+		&__content {
+			padding: 28rpx 20rpx 20rpx;
+		}
+
+		&__profile {
+			display: flex;
+			align-items: center;
+			gap: 20rpx;
+			padding: 8rpx 0 24rpx;
+		}
+
+		&__avatar {
+			width: 92rpx;
+			height: 92rpx;
+			border-radius: 50%;
+			background: #e8f1ff;
+			flex-shrink: 0;
+		}
+
+		&__profile-info {
+			flex: 1;
+			min-width: 0;
+		}
+
+		&__name-row {
+			display: flex;
+			align-items: center;
+			gap: 12rpx;
+		}
+
+		&__name {
+			font-size: 40rpx;
+			font-weight: 700;
+			color: #2b3139;
+		}
+
+		&__level-tag {
+			display: flex;
+			align-items: center;
+			gap: 6rpx;
+			padding: 4rpx 10rpx;
+			border-radius: 999rpx;
+			background: linear-gradient(180deg, #ff9e68 0%, #ff7d34 100%);
+		}
+
+		&__level-dot {
+			width: 20rpx;
+			height: 24rpx;
+		}
+		
+		&__level-text {
+			font-size: 22rpx;
+			font-weight: 700;
+			color: #ffffff;
+		}
+
+		&__phone {
+			display: block;
+			margin-top: 10rpx;
+			font-size: 28rpx;
+			color: #8f96a3;
+		}
+
+		&__footer {
+			position: fixed;
+			left: 0;
+			right: 0;
+			bottom: 0;
+			padding: 16rpx 0 calc(env(safe-area-inset-bottom) + 20rpx);
+			background: #f6f8fc;
+			display: flex;
+			justify-content: center;
+		}
+
+		&__logout {
+			width: 186rpx;
+			height: 70rpx;
+			line-height: 70rpx;
+			border-radius: 999rpx;
+			background: #ffffff;
+			border: 1rpx solid #d8dde5;
+			font-size: 28rpx;
+			font-weight: 500;
+			color: #7e8794;
+			padding: 0;
+
+			&::after {
+				border: 0;
+			}
+
+			&--hover {
+				opacity: 0.92;
+			}
+		}
+	}
+
+	.income-card {
+		position: relative;
+		display: flex;
+		justify-content: space-between;
+		gap: 20rpx;
+		padding: 10rpx 30rpx 40rpx 30rpx;
 		box-sizing: border-box;
-		height: calc(100vh - 44px - 50px);
-		background: linear-gradient( 180deg, #B5D2FF 0%, #FFFFFF 100%);
-		.index_list {
-			width: 100%;
+		background-image: url('../../static/image/ming_bg@2x.png');
+		background-repeat: no-repeat;
+		background-size: 100% 100%;
+		overflow: hidden;
+
+		&__left,
+		&__right {
+			position: relative;
+			z-index: 1;
+		}
+
+		&__left {
+			flex: 1;
+		}
+
+		&__label,
+		&__stat-label,
+		&__stat-value {
+			font-size: 24rpx;
+			color: rgba(255, 255, 255, 0.78);
+		}
+
+		&__value {
+			display: block;
+			margin-top: 20rpx;
+			font-size: 52rpx;
+			line-height: 1;
+			font-weight: normal;
+			color: #ffffff;
+		}
+
+		&__right {
 			display: flex;
 			flex-direction: column;
-			margin-top: 12rpx;
-			.index_list_item {
+			align-items: flex-end;
+			justify-content: flex-end;
+			gap: 18rpx;
+			padding-top: 12rpx;
+		}
+
+		&__stat {
+			display: flex;
+			align-items: center;
+			gap: 10rpx;
+		}
+	}
+
+	.menu-panel {
+		margin-top: 20rpx;
+		border-radius: 22rpx;
+		background: #ffffff;
+		overflow: hidden;
+
+		&__item {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			height: 102rpx;
+			padding: 0 24rpx;
+			box-sizing: border-box;
+			border-bottom: 1rpx solid #eef1f5;
+
+			&:last-child {
+				border-bottom: 0;
+			}
+		}
+
+		&__title {
+			font-size: 34rpx;
+			font-weight: 600;
+			color: #2b3139;
+		}
+
+		&__right {
+			display: flex;
+			align-items: flex-start;
+			gap: 10rpx;
+		}
+
+		&__sub {
+			font-size: 26rpx;
+			white-space: nowrap;
+
+			&--muted {
+				color: #b2b8c1;
+			}
+
+			&--danger {
+				color: #ff5a4f;
+			}
+
+			&--warning {
+				color: #ff7b38;
+			}
+
+			&--primary {
+				color: #2b7cff;
+			}
+		}
+
+		&__arrow {
+			width: 16rpx;
+			height: 28rpx;
+			image {
 				width: 100%;
-				height: 200rpx;
-				margin-bottom: 30rpx;
-				position: relative;
-				.index_list_item_info {
-					width: 100%;
-					height: 100%;
-					padding: 0 48rpx;
-					box-sizing: border-box;
-					display: flex;
-					justify-content: center;
-					flex-direction: column;
-					position: relative;
-					z-index: 99;
-					text {
-						&:nth-child(1) {
-							font-weight: bold;
-							font-size: 34rpx;
-							color: #FFFFFF;
-						}
-						&:nth-child(2) {
-							font-weight: 400;
-							font-size: 26rpx;
-							color: rgba(255,255,255,0.6);
-							margin-top: 10rpx;
-						}
-					}
-				}
-				image {
-					width: 100%;
-					height: 100%;
-					position: absolute;
-					top: 0;
-					left: 0;
-				}
 			}
 		}
 	}

--
Gitblit v1.9.3