Quellcode durchsuchen

红娘端样式及功能补充

YH_0525 vor 1 Monat
Ursprung
Commit
89397fb988

+ 58 - 17
LiangZhiYUMao/components/butlogin.vue

@@ -4,12 +4,23 @@
 		<view class="zheshow" >
 			<view class="cen_ter">
 				<view class="box_At">
-					<view class="box_At_text">获取您的手机号</view>
-					<view class="box_At_co">获取手机号信息,主要用于完善个人资料,向用户提供更好使用体验</view>
+					<view class="box_At_text">获取您的昵称、头像、手机号</view>
+					<view class="box_At_co">获取用户头像、昵称、手机号信息,主要用于完善个人资料,向用户提供更好使用体验</view>
+					<view class="box_B" style="border-top:1px solid #f3f3f3 ;">
+						<view class="acvter">头像</view>
+						<button v-if="!active" class="acvter_all"  open-type="chooseAvatar" @chooseavatar="onChooseAvatar">
+							<view class="mast">请选择头像</view>
+						</button>
+						<view v-if="active" class="img"><image :src="active" ></image></view>
+					</view>
+					<view class="box_B">
+						<view class="acvter">昵称</view>
+						<input class="acvter_all"  type="nickname" :value="nickname" @blur="bindblur" placeholder="请输入昵称" />
+					</view>
 					<view class="Brn_S">
-						<button class="btn_btns" @click="colse">取消</button>
+						<view class="btn_btns" @click="colse">取消</view>
 						<button  class="btn" open-type="getPhoneNumber" @getphonenumber="btns" >
-							登录
+							<view class="btn">保存</view>
 						</button>
 					</view>
 				</view>
@@ -25,7 +36,9 @@
 		data() {
 			return {
 				on_zheshows:false,
-				zheshow1:false
+				zheshow1:false,
+				active:'',
+				nickname:''
 			}
 		},
 		watch:{
@@ -33,8 +46,23 @@
 				this.$refs.popup.open('bottom')
 			},
 		},
-		methods: { 	
-			colse(){this.$refs.popup.close()},
+		methods: {	
+			colse(){
+				this.$refs.popup.close()
+			},
+			onChooseAvatar(e) {
+				let that = this
+				uni.getFileSystemManager().readFile({
+					filePath: e.detail.avatarUrl, //选择图片返回的相对路径
+					encoding: "base64", 
+					success: (res) => {
+						let base64s = "data:image/jpeg;base64," + res.data
+						that.active = base64s
+					},
+					fail: (res) => reject(res.errMsg),	                
+				});
+			},
+			bindblur(e){this.nickname = e.detail.value},
 			btns(e){
 				console.log(e,'e.detail.code换取手机号')
 				console.log('微信返回详情:', e.detail)
@@ -65,6 +93,15 @@
 					return
 				}
 				
+				if(this.active==''){
+					uni.showToast({title:'请选择上传头像',icon:'none'})
+					return
+				}
+				if(this.nickname==''){
+					uni.showToast({title:'请填写昵称',icon:'none'})
+					return
+				}
+				
 				// 成功获取到code,继续登录
 				this.proceedLogin(e.detail.code)
 			},
@@ -73,6 +110,8 @@
 			proceedLogin(code) {
 				// 将微信返回的手机号 code 一并传递给父组件
 				this.$parent.loset({
+					nickname: this.nickname,
+					active: this.active,
 					code: code || 'mock_dev_code' // 如果没有code,使用mock
 				})
 			}
@@ -85,23 +124,25 @@
 		 width: 100%;height: 100%;background-color: rgba(0,0,0,0.3);position: fixed;top: 0;left: 0;
 		 display: flex;align-items: center;align-items: flex-end;
 		.mast{margin-top: 6rpx;}
-		.Brn_S{width: 100%;height: 100rpx;display: flex;align-items: center;justify-content: space-around;margin: 20rpx 0;}
-		.btn_btns, .btn{width: 45%;max-width: 300rpx;height: 80rpx;display: flex;align-items: center;
-		 justify-content: center; border-radius: 10rpx;font-size: 30rpx;margin: 0 !important;box-sizing: border-box;}
-		.btn_btns{background-color:  #fafafa;color: #39B54A;}
-		.btn{background-color: #39B54A;color: #FFFFFF;}
+		.Brn_S{width: 70%;height: 100rpx;display: flex;align-items: center;justify-content: space-between;margin: 10rpx auto;}
+		.btn_btns{width: 300rpx;height: 80rpx;background: antiquewhite; display: flex;align-items: center;
+		 justify-content: center; border-radius: 10rpx; margin-right: 70rpx;background-color:  #fafafa;color: #39B54A;}
 		.imgs{position: absolute;right: 6%;width: 32rpx;height: 32rpx;}
 		.img{width: 90rpx;height: 90rpx;border-radius: 50%;margin-left: 80rpx;image{width: 100%;height: 100%;border-radius: 50%;}}
 		.cen_ter{
-			width: 100%;min-height: 300rpx;border-top-left-radius: 30rpx;border-top-right-radius: 30rpx;background-color: #FFFFFF;
+			width: 100%;height: 600rpx;border-top-left-radius: 30rpx;border-top-right-radius: 30rpx;background-color: #FFFFFF;
 			display: flex;align-items: center;justify-content: center;
-			.box_At{width: 90%;padding: 40rpx 0;display: flex;flex-direction: column;.box_At_text{font-weight: bold;font-size: 30rpx}
+			.box_At{width: 90%;height: 92%;margin-top: 20rpx;display: flex;flex-direction: column;.box_At_text{font-weight: bold;font-size: 30rpx}
 			.box_At_co{font-size: 28rpx;color: #ababab;margin-top: 24rpx;}
-			}}
+			.box_B{width: 100%;height: 120rpx;border-bottom: 1px solid #f3f3f3;display: flex;align-items: center;
+			 margin-top: 12rpx;.acvter_all{font-size: 28rpx;color: #ababab;margin-left: 80rpx;}}
+			.btn{width:300rpx;margin: 35rpx auto;height: 80rpx;display: flex;align-items: center;justify-content: center;
+			 background-color: #39B54A;color: #FFFFFF;border-radius: 10rpx;font-size: 30rpx;}
+		}}
 	}
 	button {
-		border-radius: 10rpx;height: 80rpx !important;padding-left: 0!important ;
-		padding-right: 0!important ;font-family: PingFang SC !important;
+		border-radius: 30rpx;height: 80rpx !important;padding-left: 0!important ;
+		padding-right: 0!important ; background-color: rgba(0,0,0,0) !important;color: #ababab !important;font-family: PingFang SC !important;
 	}
 	button:after {
 	    top: 0;left: 0; border: 1px solid rgba(0,0,0,0) !important; -webkit-transform: scale(.5);

+ 28 - 0
LiangZhiYUMao/pages.json

@@ -70,6 +70,34 @@
 				"navigationStyle": "custom"
 			}
 		},
+		{
+			"path": "pages/matchmaker-workbench/sign-in",
+			"style": {
+				"navigationBarTitleText": "签到",
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/matchmaker-workbench/add-resource",
+			"style": {
+				"navigationBarTitleText": "信息录入",
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/matchmaker-workbench/account-settings",
+			"style": {
+				"navigationBarTitleText": "账户设置",
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/matchmaker-workbench/edit-profile",
+			"style": {
+				"navigationBarTitleText": "编辑资料",
+				"navigationStyle": "custom"
+			}
+		},
 		{
 			"path": "pages/page3/page3",
 			"style": {

+ 1 - 0
LiangZhiYUMao/pages/index/index.vue

@@ -246,6 +246,7 @@
 	import { DEFAULT_IMAGES, ACTIVITY_TYPES } from '@/config/index.js'
 	
 	export default {
+		components: {},
 		data() {
 			return {
 				// 用户信息

+ 431 - 247
LiangZhiYUMao/pages/matchmaker-workbench/client-detail.vue

@@ -1,5 +1,5 @@
 <template>
-	<view class="client-detail">
+	<view class="client-detail" :class="{ 'dark-mode': isDarkTheme }">
 		<!-- 顶部导航栏 -->
 		<view class="header">
 			<view class="back-icon" @click="handleBack"></view>
@@ -73,7 +73,7 @@
 		<view class="tabs-section">
 			<text class="tab" :class="{ active: activeTab === 'details' }" @click="switchTab('details')">详细信息</text>
 			<text class="tab" :class="{ active: activeTab === 'follow' }" @click="switchTab('follow')">跟进</text>
-	</view>
+		</view>
 
 		<!-- 详细信息 -->
 		<scroll-view scroll-y class="details-section" v-if="activeTab === 'details'">
@@ -85,15 +85,15 @@
 				<text class="detail-value">{{ clientInfo.details.maritalStatus }}</text>
 			</view>
 			<view class="detail-item">
-				<text class="detail-label">学		历:</text>
+				<text class="detail-label">学历:</text>
 				<text class="detail-value">{{ clientInfo.details.education }}</text>
 			</view>
 			<view class="detail-item">
-				<text class="detail-label">职		业:</text>
+				<text class="detail-label">职业:</text>
 				<text class="detail-value">{{ clientInfo.details.occupation }}</text>
 			</view>
 			<view class="detail-item">
-				<text class="detail-label">收		入:</text>
+				<text class="detail-label">收入:</text>
 				<text class="detail-value">{{ clientInfo.details.income }}</text>
 			</view>
 			<view class="detail-item">
@@ -132,9 +132,61 @@
 		</scroll-view>
 
 		<!-- 跟进信息 -->
-		<view class="follow-section" v-else>
-			<text class="follow-placeholder">跟进信息正在开发中...</text>
-		</view>
+		<scroll-view scroll-y class="follow-section" v-else>
+			<!-- 跟进方式 -->
+			<view class="follow-group">
+				<text class="group-label">跟进方式</text>
+				<view class="follow-type-options">
+					<view class="follow-type-item" :class="{ active: followForm.type === 'phone' }" @click="followForm.type = 'phone'">
+						<text class="radio-circle"></text>
+						<text class="option-text">电话</text>
+					</view>
+					<view class="follow-type-item" :class="{ active: followForm.type === 'meet' }" @click="followForm.type = 'meet'">
+						<text class="radio-circle"></text>
+						<text class="option-text">面谈</text>
+					</view>
+					<view class="follow-type-item" :class="{ active: followForm.type === 'other' }" @click="followForm.type = 'other'">
+						<text class="radio-circle"></text>
+						<text class="option-text">其他</text>
+					</view>
+				</view>
+			</view>
+
+			<!-- 跟进进度 -->
+			<view class="follow-group">
+				<text class="group-label">跟进进度</text>
+				<view class="status-tags-row">
+					<view class="status-tag" :class="{ active: followForm.progress === 'matched' }" @click="followForm.progress = 'matched'">已匹配</view>
+					<view class="status-tag" :class="{ active: followForm.progress === 'notMet' }" @click="followForm.progress = 'notMet'">未见面</view>
+					<view class="status-tag" :class="{ active: followForm.progress === 'communicating' }" @click="followForm.progress = 'communicating'">沟通中</view>
+				</view>
+			</view>
+
+			<!-- 邀约状态 -->
+			<view class="follow-group">
+				<text class="group-label">邀约状态</text>
+				<view class="input-like">{{ followForm.inviteStatus || '未邀约' }}</view>
+			</view>
+
+			<!-- 邀约时间 -->
+			<view class="follow-group">
+				<text class="group-label">邀约时间</text>
+				<view class="input-like">
+					<picker mode="date" :value="followForm.inviteDate" @change="onInviteDateChange">
+						<view class="picker-inner">{{ followForm.inviteDate || '请选择日期' }}</view>
+					</picker>
+				</view>
+			</view>
+
+			<!-- 跟进备注 -->
+			<view class="follow-group">
+				<text class="group-label">跟进备注</text>
+				<textarea class="textarea" v-model="followForm.remark" placeholder="请输入跟进备注详细信息..." placeholder-style="color:#C5A4D8" />
+			</view>
+
+			<!-- 提交按钮(预留) -->
+			<view class="follow-submit-btn" @click="handleSubmitFollow">保存跟进</view>
+		</scroll-view>
 	</view>
 </template>
 
@@ -144,6 +196,13 @@ export default {
 	data() {
 		return {
 			activeTab: 'details',
+			followForm: {
+				type: 'phone',
+				progress: 'matched',
+				inviteStatus: '未邀约',
+				inviteDate: '',
+				remark: ''
+			},
 			clientInfo: {
 				id: 1,
 				name: '小明',
@@ -174,7 +233,14 @@ export default {
 						other: '外貌或者性格'
 					}
 				}
-			}
+			},
+			isDarkTheme: false
+		}
+	},
+	onShow() {
+		const stored = uni.getStorageSync('matchmakerDarkMode')
+		if (stored === true || stored === false) {
+			this.isDarkTheme = stored
 		}
 	},
 	onLoad(options) {
@@ -213,6 +279,17 @@ export default {
 				icon: 'none'
 			})
 		},
+		// 邀约日期变更
+		onInviteDateChange(e) {
+			this.followForm.inviteDate = e.detail.value
+		},
+		// 提交跟进(暂时仅提示)
+		handleSubmitFollow() {
+			uni.showToast({
+				title: '跟进已保存',
+				icon: 'success'
+			})
+		},
 		// 从API加载客户信息
 		async loadClientInfo(id) {
 			try {
@@ -232,319 +309,426 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-	.client-detail {
-		min-height: 100vh;
-		background-color: #FFF9F9;
-		padding-top: 90rpx;
+.client-detail {
+	min-height: 100vh;
+	background-color: #FFF9F9;
+	padding-top: 90rpx;
+}
+
+/* 顶部导航栏 */
+.header {
+	position: fixed;
+	top: 0;
+	left: 0;
+	right: 0;
+	height: 90rpx;
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+	padding: 0 20rpx;
+	background: linear-gradient(135deg, #FCE4EC 0%, #F8BBD0 100%);
+	z-index: 999;
+
+	.back-icon {
+		width: 44rpx;
+		height: 44rpx;
+		background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23333"><path d="M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z"/></svg>');
+		background-size: contain;
+		background-repeat: no-repeat;
+		background-position: center;
 	}
 
-	/* 顶部导航栏 */
-	.header {
-		position: fixed;
-		top: 0;
-		left: 0;
-		right: 0;
-		height: 90rpx;
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		padding: 0 20rpx;
-		background: linear-gradient(135deg, #FCE4EC 0%, #F8BBD0 100%);
-		z-index: 999;
-
-		.back-icon {
-			width: 44rpx;
-			height: 44rpx;
-			background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23333"><path d="M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z"/></svg>');
-			background-size: contain;
-			background-repeat: no-repeat;
-			background-position: center;
-		}
+	.header-title {
+		font-size: 38rpx;
+		font-weight: bold;
+		color: #333;
+	}
+
+	.header-right {
+		width: 44rpx;
+	}
+}
 
-		.header-title {
-			font-size: 38rpx;
+/* 客户基本信息 */
+.client-basic-info {
+	display: flex;
+	align-items: flex-start;
+	padding: 30rpx;
+	background-color: #FFFFFF;
+	margin: 20rpx;
+	border-radius: 20rpx;
+	box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.08);
+
+	.client-avatar {
+		width: 160rpx;
+		height: 160rpx;
+		border-radius: 50%;
+		margin-right: 30rpx;
+		background-color: #F5F5F5;
+	}
+
+	.basic-info {
+		flex: 1;
+
+		.client-name {
+			font-size: 36rpx;
 			font-weight: bold;
 			color: #333;
+			margin-bottom: 10rpx;
+		}
+
+		.client-status {
+			font-size: 28rpx;
+			color: #FF6B8A;
+			margin-bottom: 15rpx;
+			display: inline-block;
 		}
 
-		.header-right {
-			width: 44rpx;
+		.client-tags {
+			display: flex;
+			flex-wrap: wrap;
+			gap: 10rpx;
+
+			.tag {
+				padding: 8rpx 20rpx;
+				background-color: #F3E5F5;
+				color: #9C27B0;
+				border-radius: 20rpx;
+				font-size: 24rpx;
+				font-weight: bold;
+			}
 		}
 	}
+}
+
+/* 择偶要求 */
+.requirement-section {
+	padding: 30rpx;
+	background-color: #FFFFFF;
+	margin: 0 20rpx 20rpx;
+	border-radius: 20rpx;
+	box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.08);
 
-	/* 客户基本信息 */
-	.client-basic-info {
+	.section-title {
 		display: flex;
-		align-items: flex-start;
-		padding: 30rpx;
-		background-color: #FFFFFF;
-		margin: 20rpx;
-		border-radius: 20rpx;
-		box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.08);
+		align-items: center;
+		margin-bottom: 20rpx;
 
-		.client-avatar {
-			width: 160rpx;
-			height: 160rpx;
-			border-radius: 50%;
-			margin-right: 30rpx;
-			background-color: #F5F5F5;
+		.title-icon {
+			font-size: 28rpx;
+			margin-right: 10rpx;
 		}
 
-		.basic-info {
-			flex: 1;
+		.title-text {
+			font-size: 28rpx;
+			font-weight: bold;
+			color: #333;
+		}
+	}
 
-			.client-name {
-				font-size: 36rpx;
-				font-weight: bold;
-				color: #333;
-				margin-bottom: 10rpx;
-			}
+	.requirement-content {
+		font-size: 28rpx;
+		color: #666;
+		line-height: 1.5;
+	}
+}
 
-			.client-status {
-				font-size: 28rpx;
-				color: #FF6B8A;
-				margin-bottom: 15rpx;
-				display: inline-block;
-			}
+/* 联系方式 */
+.contact-section {
+	padding: 30rpx;
+	background-color: #FFFFFF;
+	margin: 0 20rpx 20rpx;
+	border-radius: 20rpx;
+	box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.08);
 
-			.client-tags {
-				display: flex;
-				flex-wrap: wrap;
-				gap: 10rpx;
-
-				.tag {
-					padding: 8rpx 20rpx;
-					background-color: #F3E5F5;
-					color: #9C27B0;
-					border-radius: 20rpx;
-					font-size: 24rpx;
-					font-weight: bold;
-				}
-			}
+	.contact-item {
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		margin-bottom: 25rpx;
+
+		&:last-child {
+			margin-bottom: 0;
 		}
-	}
 
-	/* 择偶要求 */
-	.requirement-section {
-		padding: 30rpx;
-		background-color: #FFFFFF;
-		margin: 0 20rpx 20rpx;
-		border-radius: 20rpx;
-		box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.08);
+		.contact-label {
+			font-size: 28rpx;
+			color: #333;
+		}
 
-		.section-title {
+		.contact-value {
 			display: flex;
 			align-items: center;
-			margin-bottom: 20rpx;
+			gap: 20rpx;
 
-			.title-icon {
+			.contact-number {
 				font-size: 28rpx;
-				margin-right: 10rpx;
+				color: #666;
 			}
 
-			.title-text {
-				font-size: 28rpx;
+			.copy-btn {
+				padding: 8rpx 20rpx;
+				background-color: #F3E5F5;
+				color: #9C27B0;
+				border-radius: 20rpx;
+				font-size: 24rpx;
 				font-weight: bold;
-				color: #333;
 			}
 		}
+	}
+}
 
-		.requirement-content {
-			font-size: 28rpx;
-			color: #666;
-			line-height: 1.5;
-		}
+/* 跟进统计 */
+.stats-section {
+	padding: 30rpx;
+	background-color: #FFFFFF;
+	margin: 0 20rpx 20rpx;
+	border-radius: 20rpx;
+	box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.08);
+
+	.stats-title {
+		font-size: 28rpx;
+		font-weight: bold;
+		color: #333;
+		margin-bottom: 25rpx;
 	}
 
-	/* 联系方式 */
-	.contact-section {
-		padding: 30rpx;
-		background-color: #FFFFFF;
-		margin: 0 20rpx 20rpx;
-		border-radius: 20rpx;
-		box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.08);
+	.stats-grid {
+		display: grid;
+		grid-template-columns: repeat(4, 1fr);
+		gap: 20rpx;
 
-		.contact-item {
+		.stat-item {
 			display: flex;
-			justify-content: space-between;
+			flex-direction: column;
 			align-items: center;
-			margin-bottom: 25rpx;
+			justify-content: center;
+			padding: 20rpx;
+			background-color: #FFF3F5;
+			border-radius: 15rpx;
 
-			&:last-child {
-				margin-bottom: 0;
+			.stat-value {
+				font-size: 48rpx;
+				font-weight: bold;
+				color: #FF6B8A;
+				margin-bottom: 10rpx;
 			}
 
-			.contact-label {
-				font-size: 28rpx;
-				color: #333;
+			.stat-label {
+				font-size: 22rpx;
+				color: #666;
 			}
+		}
+	}
+}
 
-			.contact-value {
-				display: flex;
-				align-items: center;
-				gap: 20rpx;
-
-				.contact-number {
-					font-size: 28rpx;
-					color: #666;
-				}
-
-				.copy-btn {
-					padding: 8rpx 20rpx;
-					background-color: #F3E5F5;
-					color: #9C27B0;
-					border-radius: 20rpx;
-					font-size: 24rpx;
-					font-weight: bold;
-				}
-			}
+/* 标签切换 */
+.tabs-section {
+	display: flex;
+	padding: 0 20rpx;
+	background-color: #FFFFFF;
+	margin: 0 20rpx 20rpx;
+	border-radius: 20rpx;
+	box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.08);
+
+	.tab {
+		flex: 1;
+		text-align: center;
+		padding: 20rpx 0;
+		font-size: 28rpx;
+		color: #666;
+		font-weight: bold;
+		transition: all 0.3s;
+
+		&.active {
+			color: #9C27B0;
+			border-bottom: 4rpx solid #9C27B0;
 		}
 	}
+}
 
-	/* 跟进统计 */
-	.stats-section {
-		padding: 30rpx;
-		background-color: #FFFFFF;
-		margin: 0 20rpx 20rpx;
+/* 详细信息滚动区域 */
+.details-section {
+	padding: 30rpx 20rpx 100rpx;
+	background-color: #FFFFFF;
+	margin: 0 20rpx 20rpx;
+	border-radius: 20rpx;
+	box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.08);
+	box-sizing: border-box;
+
+	.edit-btn {
+		position: absolute;
+		top: 20rpx;
+		right: 30rpx;
+		padding: 8rpx 25rpx;
+		background-color: #F3E5F5;
+		color: #9C27B0;
 		border-radius: 20rpx;
-		box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.08);
+		font-size: 24rpx;
+		font-weight: bold;
+	}
 
-		.stats-title {
+	.detail-item {
+		display: flex;
+		margin-bottom: 25rpx;
+
+		.detail-label {
+			width: 180rpx;
 			font-size: 28rpx;
-			font-weight: bold;
 			color: #333;
-			margin-bottom: 25rpx;
-		}
-
-		.stats-grid {
-			display: grid;
-			grid-template-columns: repeat(4, 1fr);
-			gap: 20rpx;
-
-			.stat-item {
-				display: flex;
-				flex-direction: column;
-				align-items: center;
-				justify-content: center;
-				padding: 20rpx;
-				background-color: #FFF3F5;
-				border-radius: 15rpx;
-
-				.stat-value {
-					font-size: 48rpx;
-					font-weight: bold;
-					color: #FF6B8A;
-					margin-bottom: 10rpx;
-				}
-
-				.stat-label {
-					font-size: 22rpx;
-					color: #666;
-				}
-			}
+			font-weight: bold;
 		}
-	}
-
-	/* 标签切换 */
-	.tabs-section {
-		display: flex;
-		padding: 0 20rpx;
-		background-color: #FFFFFF;
-		margin: 0 20rpx 20rpx;
-		border-radius: 20rpx;
-		box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.08);
 
-		.tab {
+		.detail-value {
 			flex: 1;
-			text-align: center;
-			padding: 20rpx 0;
 			font-size: 28rpx;
 			color: #666;
-			font-weight: bold;
-			transition: all 0.3s;
-
-			&.active {
-				color: #9C27B0;
-				border-bottom: 4rpx solid #9C27B0;
-			}
 		}
 	}
 
-	/* 详细信息 */
-	.details-section {
-		padding: 30rpx 20rpx 100rpx;
-		background-color: #FFFFFF;
-		margin: 0 20rpx 20rpx;
-		border-radius: 20rpx;
-		box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.08);
+	.sub-section-title {
+		font-size: 30rpx;
+		font-weight: bold;
+		color: #333;
+		margin: 30rpx 0 20rpx;
+		padding-bottom: 10rpx;
+		border-bottom: 2rpx solid #F0F0F0;
+	}
+
+	.client-tags {
+		display: flex;
+		flex-wrap: wrap;
+		gap: 10rpx;
 
-		.edit-btn {
-			position: absolute;
-			top: 20rpx;
-			right: 30rpx;
-			padding: 8rpx 25rpx;
+		.tag {
+			padding: 8rpx 20rpx;
 			background-color: #F3E5F5;
 			color: #9C27B0;
 			border-radius: 20rpx;
 			font-size: 24rpx;
 			font-weight: bold;
 		}
+	}
+}
 
-		.detail-item {
-			display: flex;
-			margin-bottom: 25rpx;
+/* 跟进信息 */
+.follow-section {
+	background-color: #FFFFFF;
+	margin: 0 20rpx 20rpx;
+	border-radius: 20rpx;
+	box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.08);
+	padding: 30rpx 20rpx 40rpx;
+	max-height: 700rpx;
+	box-sizing: border-box;
+}
 
-			.detail-label {
-				width: 180rpx;
-				font-size: 28rpx;
-				color: #333;
-				font-weight: bold;
-			}
+.follow-group {
+	margin-bottom: 30rpx;
 
-			.detail-value {
-				flex: 1;
-				font-size: 28rpx;
-				color: #666;
-			}
-		}
+	.group-label {
+		font-size: 28rpx;
+		color: #333;
+		font-weight: bold;
+		margin-bottom: 16rpx;
+		display: block;
+	}
+}
 
-		.sub-section-title {
-			font-size: 30rpx;
-			font-weight: bold;
-			color: #333;
-			margin: 30rpx 0 20rpx;
-			padding-bottom: 10rpx;
-			border-bottom: 2rpx solid #F0F0F0;
-		}
+/* 跟进方式单选 */
+.follow-type-options {
+	display: flex;
+	align-items: center;
+	gap: 30rpx;
 
-		.client-tags {
+	.follow-type-item {
 		display: flex;
-		flex-wrap: wrap;
+		align-items: center;
 		gap: 10rpx;
+		font-size: 26rpx;
+		color: #666;
 
-			.tag {
-				padding: 8rpx 20rpx;
-				background-color: #F3E5F5;
-				color: #9C27B0;
-				border-radius: 20rpx;
-				font-size: 24rpx;
-				font-weight: bold;
+		.radio-circle {
+			width: 26rpx;
+			height: 26rpx;
+			border-radius: 50%;
+			border: 2rpx solid #C5A4D8;
+			box-sizing: border-box;
+		}
+
+		&.active {
+			color: #D81B60;
+
+			.radio-circle {
+				background-color: #D81B60;
+				border-color: #D81B60;
 			}
 		}
 	}
+}
 
-	/* 跟进信息 */
-	.follow-section {
-		padding: 100rpx 20rpx;
-		background-color: #FFFFFF;
-		margin: 0 20rpx 20rpx;
-		border-radius: 20rpx;
-		box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.08);
+/* 跟进进度标签 */
+.status-tags-row {
+	display: flex;
+	flex-wrap: wrap;
+	gap: 16rpx;
 
-		.follow-placeholder {
-			text-align: center;
-			font-size: 32rpx;
-			color: #999;
+	.status-tag {
+		min-width: 140rpx;
+		text-align: center;
+		padding: 14rpx 20rpx;
+		border-radius: 20rpx;
+		border: 2rpx solid #E1BEE7;
+		font-size: 26rpx;
+		color: #9C27B0;
+		background-color: #FAF5FF;
+		box-sizing: border-box;
+
+		&.active {
+			background-color: #F8BBD0;
+			border-color: #F06292;
+			color: #FFFFFF;
 		}
 	}
+}
+
+/* 邀约状态/时间 等输入类展示 */
+.input-like {
+	width: 100%;
+	padding: 18rpx 22rpx;
+	border-radius: 16rpx;
+	background-color: #FAF5FF;
+	font-size: 26rpx;
+	color: #666;
+	box-sizing: border-box;
+}
+
+.picker-inner {
+	font-size: 26rpx;
+	color: #666;
+}
+
+/* 备注输入框 */
+.textarea {
+	width: 100%;
+	min-height: 160rpx;
+	padding: 18rpx 22rpx;
+	border-radius: 16rpx;
+	background-color: #FAF5FF;
+	font-size: 26rpx;
+	color: #333;
+	box-sizing: border-box;
+}
+
+/* 保存按钮 */
+.follow-submit-btn {
+	margin-top: 10rpx;
+	width: 100%;
+	padding: 22rpx 0;
+	text-align: center;
+	border-radius: 26rpx;
+	background: linear-gradient(135deg, #F48FB1 0%, #EC407A 100%);
+	color: #FFFFFF;
+	font-size: 30rpx;
+	font-weight: bold;
+}
 </style>

+ 11 - 112
LiangZhiYUMao/pages/matchmaker-workbench/index.vue

@@ -98,19 +98,6 @@
 			</view>
 		</scroll-view>
 
-		<!-- 退出红娘工作台弹框 -->
-		<uni-popup ref="exitPopup" type="dialog">
-			<uni-popup-dialog
-				type="confirm"
-				title="退出工作台"
-				content="确定要退出红娘工作台吗?"
-				confirmText="确定"
-				cancelText="取消"
-				@confirm="exitWorkbench"
-				@cancel="closeExitPopup">
-			</uni-popup-dialog>
-		</uni-popup>
-
 		<!-- 底部导航 -->
 		<view class="tabbar">
 			<view class="tabbar-item active" @click="navigateToWorkbench">
@@ -170,27 +157,9 @@ export default {
 			handleSearch() {
 				// 实现搜索功能
 			},
-			// 打开退出工作台弹框
-			openExitPopup() {
-				if (this.$refs.exitPopup) {
-					this.$refs.exitPopup.open()
-				}
-			},
-			// 关闭退出工作台弹框
-			closeExitPopup() {
-				if (this.$refs.exitPopup) {
-					this.$refs.exitPopup.close()
-				}
-			},
-			// 退出红娘工作台
-			exitWorkbench() {
-				if (this.$refs.exitPopup) {
-					this.$refs.exitPopup.close()
-				}
-				// 返回用户首页
-				uni.redirectTo({
-					url: '/pages/index/index'
-				})
+			// 设置
+			handleSettings() {
+				// 实现设置功能
 			},
 			// 公告点击
 			handleAnnouncement() {
@@ -282,90 +251,20 @@ export default {
 			gap: 20rpx;
 
 			.search-icon,
-			.exit-workbench-btn {
-				width: 68rpx;
-				height: 68rpx;
-				display: flex;
-				align-items: center;
-				justify-content: center;
+			.settings-icon {
+				width: 44rpx;
+				height: 44rpx;
+				background-size: contain;
+				background-repeat: no-repeat;
+				background-position: center;
 			}
 
 			.search-icon {
 				background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23999"><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg>');
-				background-size: 44rpx 44rpx;
-				background-repeat: no-repeat;
-				background-position: center;
 			}
 
-			/* 退出工作台按钮样式 */
-			.exit-workbench-btn {
-				background: transparent;
-				border-radius: 4rpx;
-				transition: all 0.2s ease;
-				
-				&:active {
-					opacity: 0.6;
-					transform: scale(0.95);
-				}
-
-				.arrow-container {
-					display: flex;
-					flex-direction: column;
-					align-items: center;
-					gap: 4rpx;
-					width: 60rpx;
-				}
-
-				.arrow {
-					position: relative;
-					width: 64rpx;
-					height: 22rpx;
-				}
-
-				.arrow::before,
-				.arrow::after {
-					content: '';
-					position: absolute;
-					transition: all 0.2s ease;
-				}
-
-				/* 上方箭头 - 向右 */
-				.arrow-top::before {
-					top: 8rpx;
-					left: 0;
-					width: 40rpx;
-					height: 6rpx;
-					background: #333;
-				}
-
-				.arrow-top::after {
-					top: 0;
-					right: 0;
-					width: 0;
-					height: 0;
-					border-top: 11rpx solid transparent;
-					border-bottom: 11rpx solid transparent;
-					border-left: 24rpx solid #333;
-				}
-
-				/* 下方箭头 - 向左 */
-				.arrow-bottom::before {
-					top: 8rpx;
-					right: 0;
-					width: 40rpx;
-					height: 6rpx;
-					background: #333;
-				}
-
-				.arrow-bottom::after {
-					top: 0;
-					left: 0;
-					width: 0;
-					height: 0;
-					border-top: 11rpx solid transparent;
-					border-bottom: 11rpx solid transparent;
-					border-right: 24rpx solid #333;
-				}
+			.settings-icon {
+				background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23999"><path d="M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"/></svg>');
 			}
 		}
 	}

+ 30 - 65
LiangZhiYUMao/pages/matchmaker-workbench/message.vue

@@ -75,26 +75,27 @@
 		<!-- 底部导航 -->
 		<view class="tabbar">
 			<view class="tabbar-item" @click="navigateToWorkbench">
-				<view class="tabbar-icon home"></view>
-				<text class="tabbar-text">工作台</text>
+				<text class="tab-icon">🏠</text>
+				<text class="tab-text">工作台</text>
 			</view>
 			<view class="tabbar-item" @click="navigateToMyResources">
-				<view class="tabbar-icon resources"></view>
-				<text class="tabbar-text">我的资源</text>
+				<text class="tab-icon">📋</text>
+				<text class="tab-text">我的资源</text>
 			</view>
 			<view class="tabbar-item" @click="navigateToRanking">
-				<view class="tabbar-icon trophy"></view>
-				<text class="tabbar-text">排行榜</text>
+				<text class="tab-icon">🏆</text>
+				<text class="tab-text">排行榜</text>
 			</view>
 			<view class="tabbar-item active" @click="navigateToMessage">
-				<view class="tabbar-icon message">
+				<view class="tab-icon-wrapper">
+					<text class="tab-icon">💬</text>
 					<view class="badge">3</view>
 				</view>
-				<text class="tabbar-text">消息</text>
+				<text class="tab-text">消息</text>
 			</view>
 			<view class="tabbar-item" @click="navigateToMine">
-				<view class="tabbar-icon mine"></view>
-				<text class="tabbar-text">我的</text>
+				<text class="tab-icon">👤</text>
+				<text class="tab-text">我的</text>
 			</view>
 		</view>
 	</view>
@@ -156,19 +157,19 @@
 			},
 			// 导航到工作台
 			navigateToWorkbench() {
-				uni.navigateTo({
+				uni.redirectTo({
 					url: '/pages/matchmaker-workbench/index'
 				})
 			},
 			// 导航到我的资源
 			navigateToMyResources() {
-				uni.navigateTo({
+				uni.redirectTo({
 					url: '/pages/matchmaker-workbench/my-resources'
 				})
 			},
 			// 导航到排行榜
 			navigateToRanking() {
-				uni.navigateTo({
+				uni.redirectTo({
 					url: '/pages/matchmaker-workbench/ranking'
 				})
 			},
@@ -178,7 +179,7 @@
 			},
 			// 导航到我的
 			navigateToMine() {
-				uni.navigateTo({
+				uni.redirectTo({
 					url: '/pages/matchmaker-workbench/mine'
 				})
 			}
@@ -398,7 +399,7 @@
 		bottom: 0;
 		left: 0;
 		right: 0;
-		height: 100rpx;
+		height: 110rpx;
 		background: #FFFFFF;
 		border-top: 1rpx solid #F0F0F0;
 		display: flex;
@@ -410,81 +411,45 @@
 			display: flex;
 			flex-direction: column;
 			align-items: center;
-			gap: 8rpx;
+			gap: 6rpx;
 			padding: 10rpx 0;
 
-			.tabbar-icon {
-				width: 44rpx;
-				height: 44rpx;
-				background-size: contain;
-				background-repeat: no-repeat;
-				background-position: center;
+			.tab-icon-wrapper {
 				position: relative;
 
 				.badge {
 					position: absolute;
 					top: -8rpx;
-					right: -8rpx;
+					right: -12rpx;
 					background: #FF4444;
 					color: #FFFFFF;
-					font-size: 20rpx;
+					font-size: 18rpx;
 					font-weight: bold;
-					width: 32rpx;
-					height: 32rpx;
+					min-width: 28rpx;
+					height: 28rpx;
+					padding: 0 6rpx;
+					border-radius: 14rpx;
 					display: flex;
 					align-items: center;
 					justify-content: center;
-					border-radius: 16rpx;
 				}
 			}
 
-			.tabbar-text {
+			.tab-icon {
+				font-size: 36rpx;
+			}
+
+			.tab-text {
 				font-size: 20rpx;
 				color: #999;
 			}
 
 			&.active {
-				.tabbar-text {
+				.tab-text {
 					color: #9C27B0;
 					font-weight: bold;
 				}
 			}
-
-			&.home .tabbar-icon {
-				background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23999"><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/></svg>');
-			}
-
-			&.active.home .tabbar-icon {
-				background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%239C27B0"><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/></svg>');
-			}
-
-			&.resources .tabbar-icon {
-				background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23999"><path d="M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z"/></svg>');
-			}
-
-			&.active.resources .tabbar-icon {
-				background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%239C27B0"><path d="M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z"/></svg>');
-			}
-
-			&.trophy .tabbar-icon {
-				background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23999"><path d="M18 6l-1.42 1.42-1.59-1.59L13 8.17l-1.42-1.42L9 8.17l-1.59-1.59L6 6l3 3V18c0 1.1.9 2 2 2h4c1.1 0 2-.9 2-2V9l3-3zm-4 12H8v-7.5l4-4 4 4V18z"/></svg>');
-			}
-
-			&.active.trophy .tabbar-icon {
-				background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%239C27B0"><path d="M18 6l-1.42 1.42-1.59-1.59L13 8.17l-1.42-1.42L9 8.17l-1.59-1.59L6 6l3 3V18c0 1.1.9 2 2 2h4c1.1 0 2-.9 2-2V9l3-3zm-4 12H8v-7.5l4-4 4 4V18z"/></svg>');
-			}
-
-			&.message .tabbar-icon {
-				background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%239C27B0"><path d="M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2zm0 14H6l-2 2V4h16v12z"/></svg>');
-			}
-
-			&.mine .tabbar-icon {
-				background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23999"><path d="M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"/></svg>');
-			}
-
-			&.active.mine .tabbar-icon {
-				background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%239C27B0"><path d="M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"/></svg>');
-			}
 		}
 	}
 </style>

+ 6 - 4
LiangZhiYUMao/pages/matchmaker-workbench/mine.vue

@@ -154,8 +154,10 @@
 			},
 			// 积分商城
 			handlePointsMall() {
-				uni.navigateTo({
-					url: '/pages/matchmaker-workbench/points-mall'
+				console.log('积分商城')
+				uni.showToast({
+					title: '积分商城开发中',
+					icon: 'none'
 				})
 			},
 			// 编辑资料
@@ -184,8 +186,8 @@
 							// 清除本地存储
 							uni.removeStorageSync('token')
 							uni.removeStorageSync('userInfo')
-							// 跳转到登录页,使用redirectTo确保无法返回
-							uni.redirectTo({
+							// 跳转到登录页
+							uni.navigateTo({
 								url: '/pages/page3/page3'
 							})
 						}

+ 491 - 501
LiangZhiYUMao/pages/matchmaker-workbench/my-resources.vue

@@ -1,625 +1,615 @@
 <template>
-	<view class="my-resources">
+	<view class="my-resources" :class="{ 'dark-mode': isDarkTheme }">
 		<!-- 顶部导航栏 -->
 		<view class="header">
 			<text class="header-title">我的资源</text>
 			<view class="header-right">
-				<view class="filter-icon" @click="handleFilter"></view>
+				<text class="dropdown-icon">▼</text>
 			</view>
 		</view>
 
 		<!-- 搜索栏 -->
 		<view class="search-bar">
 			<view class="search-input-wrapper">
-				<view class="search-icon-small"></view>
-				<input type="text" class="search-input" placeholder="请输入搜索关键词" v-model="searchKeyword" @input="handleSearch" />
+				<text class="search-icon">🔍</text>
+				<input type="text" class="search-input" placeholder="请输入搜索关键词" v-model="searchKeyword" @input="handleSearch" />
 			</view>
 		</view>
-
+	
 		<scroll-view scroll-y class="content">
 			<!-- 资源列表 -->
-			<view class="resource-item" v-for="(item, index) in resources" :key="index" @click="handleClientClick(item.id)">
+			<view class="resource-item" v-for="(item, index) in resources" :key="index" @click="handleViewUserDetail(item)">
+				<!-- 优质资源标签 -->
+				<view class="quality-tag" v-if="item.isQuality">优质资源</view>
+
+				<!-- 头部:头像 + 名字/性别 + 审核状态 -->
 				<view class="resource-header">
-					<image :src="item.avatar" mode="aspectFill" class="resource-avatar"></image>
-					<view class="resource-basic-info">
-						<view class="name-gender">
+					<image v-if="item.avatar" :src="item.avatar" mode="aspectFill" class="resource-avatar"></image>
+					<view v-else class="resource-avatar-placeholder"></view>
+					
+					<view class="resource-info">
+						<view class="name-gender-row">
 							<text class="resource-name">{{ item.name }}</text>
 							<text class="resource-gender">{{ item.gender }}</text>
-						</view>
-						<view class="tags">
-							<text class="tag" :class="{ 'approved': item.status === '已审核', 'pending': item.status === '待审核' }">{{ item.status }}</text>
-							<text class="tag plus" v-if="item.isPlus">+5</text>
+							<text class="status-tag" :class="{ 'approved': item.status === '已审核', 'pending': item.status === '待审核' }">{{ item.status }}</text>
 						</view>
 					</view>
-				</view>
 
-				<view class="resource-details">
-					<view class="labels">
-						<text class="label" v-for="(label, idx) in item.labels" :key="idx">{{ label }}</text>
+					<!-- 右侧点赞/加号 -->
+					<view class="right-action" v-if="item.isPlus">
+						<text class="heart-icon">💗</text>
 					</view>
+				</view>
 
-					<view class="requirement">
-						<text class="requirement-label">择偶要求:</text>
-						<text class="requirement-content">{{ item.requirement }}</text>
-					</view>
+				<!-- 标签 -->
+				<view class="labels-section">
+					<text class="label" v-for="(label, idx) in item.labels" :key="idx">{{ label }}</text>
+				</view>
 
-					<view class="contact-info">
-						<text class="contact-label">联系方式:</text>
-						<text class="contact-number">{{ item.contact }}</text>
-						<text class="copy-btn" @click="handleCopy(item.contact)">复制</text>
-					</view>
+				<!-- 择偶要求 -->
+				<view class="requirement-section">
+					<text class="requirement-text">择偶要求: {{ item.requirement }}</text>
+				</view>
 
-					<view class="action-buttons">
-						<text class="delete-btn" @click="handleDelete(item.id)">删除</text>
-						<text class="match-btn" @click="handleMatch(item.id)">精准匹配</text>
-					</view>
+				<!-- 联系方式 -->
+				<view class="contact-section">
+					<text class="contact-label">联系方式:</text>
+					<text class="contact-number">{{ item.contact }}</text>
+					<text class="copy-btn" @click.stop="handleCopy(item.contact)">复制</text>
 				</view>
 
-				<!-- 优质资源标签 -->
-				<view class="quality-tag" v-if="item.isQuality">优质资源</view>
+				<!-- 底部按钮 -->
+				<view class="action-buttons">
+					<text class="delete-btn" @click.stop="handleDelete(item.id)">删除</text>
+					<text class="match-btn" @click.stop="handleMatch(item.id)">精准匹配</text>
+				</view>
 			</view>
 		</scroll-view>
-
+	
+		<!-- 底部优质资源按钮 -->
+		<view class="quality-resources-section fixed-bottom">
+			<view class="quality-resources-btn" @click="navigateToQualityResources">
+				<text class="btn-icon">⭐</text>
+				<text class="btn-text">优质资源</text>
+			</view>
+		</view>
+	
 		<!-- 底部添加按钮 -->
 		<view class="add-button" @click="handleAdd">
 			<text class="add-button-icon">+</text>
 		</view>
-
+	
 		<!-- 底部导航 -->
 		<view class="tabbar">
 			<view class="tabbar-item" @click="navigateToWorkbench">
-				<view class="tabbar-icon home"></view>
-				<text class="tabbar-text">工作台</text>
+				<text class="tab-icon">🏠</text>
+				<text class="tab-text">工作台</text>
 			</view>
 			<view class="tabbar-item active" @click="navigateToMyResources">
-				<view class="tabbar-icon resources"></view>
-				<text class="tabbar-text">我的资源</text>
+				<text class="tab-icon">📋</text>
+				<text class="tab-text">我的资源</text>
 			</view>
 			<view class="tabbar-item" @click="navigateToRanking">
-				<view class="tabbar-icon trophy"></view>
-				<text class="tabbar-text">排行榜</text>
+				<text class="tab-icon">🏆</text>
+				<text class="tab-text">排行榜</text>
 			</view>
 			<view class="tabbar-item" @click="navigateToMessage">
-				<view class="tabbar-icon message">
-					<view class="badge">3</view>
+				<view class="tab-icon-wrapper">
+					<text class="tab-icon">💬</text>
+					<view class="badge" v-if="unreadCount > 0">{{ unreadCount }}</view>
 				</view>
-				<text class="tabbar-text">消息</text>
+				<text class="tab-text">消息</text>
 			</view>
 			<view class="tabbar-item" @click="navigateToMine">
-				<view class="tabbar-icon mine"></view>
-				<text class="tabbar-text">我的</text>
+				<text class="tab-icon">👤</text>
+				<text class="tab-text">我的</text>
 			</view>
 		</view>
 	</view>
 </template>
 
 <script>
-	import api from '@/utils/api.js'
-	
+import api from '@/utils/api.js'
+
 export default {
-		data() {
-			return {
-				searchKeyword: '',
-				resources: [
-					{
-						id: 1,
-						avatar: 'https://example.com/avatar1.jpg',
-						name: '小高',
-						gender: '男',
-						status: '已审核',
-						isPlus: true,
-						labels: ['气质男', '小清新'],
-						requirement: '165+ 本科',
-						contact: '123****8912',
-						isQuality: false
-					},
-					{
-						id: 2,
-						avatar: 'https://example.com/avatar2.jpg',
-						name: '小美',
-						gender: '女',
-						status: '已审核',
-						isPlus: true,
-						labels: ['温柔', '知性', '爱读书'],
-						requirement: '175+ 硕士 有房',
-						contact: '138****6543',
-						isQuality: false
-					},
-					{
-						id: 3,
-						avatar: 'https://example.com/avatar3.jpg',
-						name: '阿强',
-						gender: '男',
-						status: '待审核',
-						isPlus: false,
-						labels: ['阳光', '运动型'],
-						requirement: '160+ 大专以上',
-						contact: '159****2234',
-						isQuality: true
-					}
-				]
+	data() {
+		return {
+			searchKeyword: '',
+			unreadCount: 3,
+			resources: [
+				{
+					id: 1,
+					avatar: '',
+					name: '小高',
+					gender: '男',
+					status: '已审核',
+					isPlus: false,
+					labels: ['气质男', '小清新'],
+					requirement: '165+ 本科',
+					contact: '123****8912',
+					isQuality: false
+				},
+				{
+					id: 2,
+					avatar: '',
+					name: '小美',
+					gender: '女',
+					status: '已审核',
+					isPlus: true,
+					labels: ['温柔', '知性', '爱读书'],
+					requirement: '175+ 硕士 有房',
+					contact: '138****6543',
+					isQuality: false
+				},
+				{
+					id: 3,
+					avatar: '',
+					name: '阿强',
+					gender: '男',
+					status: '待审核',
+					isPlus: false,
+					labels: ['阳光', '运动型'],
+					requirement: '160+ 大专以上',
+					contact: '159****2234',
+					isQuality: true
+				}
+			],
+			isDarkTheme: false
+		}
+	},
+	onShow() {
+		const stored = uni.getStorageSync('matchmakerDarkMode')
+		if (stored === true || stored === false) {
+			this.isDarkTheme = stored
+		}
+	},
+	onLoad() {
+		// 加载我的资源数据
+		this.loadMyResources()
+	},
+	methods: {
+		async loadMyResources() {
+			try {
+				const res = await api.matchmaker.getMyResources()
+				if (res && res.data && res.data.length > 0) {
+					this.resources = res.data
+				}
+			} catch (e) {
+				console.error('加载资源数据失败:', e)
 			}
 		},
-		onLoad() {
-			// 加载我的资源数据
-			this.loadMyResources()
+		handleSearch() {
+			console.log('搜索关键词:', this.searchKeyword)
 		},
-		methods: {
-			// 加载我的资源数据
-			async loadMyResources() {
-				try {
-					const res = await api.matchmaker.getMyResources()
-					if (res.data) {
-						this.resources = res.data
-					}
-				} catch (e) {
-					console.error('加载资源数据失败:', e)
+		handleCopy(contact) {
+			uni.setClipboardData({
+				data: contact.replace(/\*+/g, ''),
+				success: () => {
+					uni.showToast({
+						title: '复制成功',
+						icon: 'success'
+					})
 				}
-			},
-			// 搜索
-			handleSearch() {
-				// 实现搜索功能
-				console.log('搜索关键词:', this.searchKeyword)
-			},
-			// 筛选
-			handleFilter() {
-				// 实现筛选功能
-				console.log('打开筛选')
-			},
-			// 复制联系方式
-			handleCopy(contact) {
-				uni.setClipboardData({
-					data: contact.replace(/\*+/g, ''),
-					success: () => {
+			})
+		},
+		handleDelete(id) {
+			uni.showModal({
+				title: '删除确认',
+				content: '确定要删除该资源吗?',
+				success: (res) => {
+					if (res.confirm) {
+						console.log('删除资源:', id)
 						uni.showToast({
-							title: '复制成功',
+							title: '删除成功',
 							icon: 'success'
 						})
 					}
-				})
-			},
-			// 删除资源
-			handleDelete(id) {
-				uni.showModal({
-					title: '删除确认',
-					content: '确定要删除该资源吗?',
-					success: (res) => {
-						if (res.confirm) {
-							// 实现删除功能
-							console.log('删除资源:', id)
-							uni.showToast({
-								title: '删除成功',
-								icon: 'success'
-							})
-						}
-					}
-				})
-			},
-			// 精准匹配
-			handleMatch(id) {
-				// 实现精准匹配功能
-				console.log('精准匹配:', id)
-				uni.navigateTo({
-					url: `/pages/matchmaker-workbench/precise-match?id=${id}`
-				})
-			},
-			// 客户点击事件,跳转到客户详情页面
-			handleClientClick(id) {
-				uni.navigateTo({
-					url: `/pages/matchmaker-workbench/client-detail?id=${id}`
-				})
-			},
-			// 添加资源
-			handleAdd() {
-				// 实现添加资源功能
-				console.log('添加资源')
-			},
-			// 导航到工作台
-			navigateToWorkbench() {
-				uni.navigateTo({
-					url: '/pages/matchmaker-workbench/index'
-				})
-			},
-			// 导航到我的资源
-			navigateToMyResources() {
-				// 已在我的资源页面,无需跳转
-			},
-			// 导航到排行榜
-			navigateToRanking() {
-				uni.navigateTo({
-					url: '/pages/matchmaker-workbench/ranking'
-				})
-			},
-			// 导航到消息
-			navigateToMessage() {
-				uni.navigateTo({
-					url: '/pages/matchmaker-workbench/message'
-				})
-			},
-			// 导航到我的
-			navigateToMine() {
-				uni.navigateTo({
-					url: '/pages/matchmaker-workbench/mine'
-				})
-			}
+				}
+			})
+		},
+		handleMatch(id) {
+			console.log('精准匹配:', id)
+			uni.navigateTo({
+				url: `/pages/matchmaker-workbench/precise-match?id=${id}`
+			})
+		},
+		handleAdd() {
+			uni.navigateTo({
+				url: '/pages/matchmaker-workbench/add-resource'
+			})
+		},
+		navigateToWorkbench() {
+			uni.redirectTo({
+				url: '/pages/matchmaker-workbench/index'
+			})
+		},
+		navigateToMyResources() {
+			// 已在我的资源页面,无需跳转
+		},
+		navigateToRanking() {
+			uni.redirectTo({
+				url: '/pages/matchmaker-workbench/ranking'
+			})
+		},
+		navigateToMessage() {
+			uni.redirectTo({
+				url: '/pages/matchmaker-workbench/message'
+			})
+		},
+		navigateToMine() {
+			uni.redirectTo({
+				url: '/pages/matchmaker-workbench/mine'
+			})
+		},
+		navigateToQualityResources() {
+			uni.navigateTo({
+				url: '/pages/matchmaker-workbench/quality-resources'
+			})
+		},
+		handleViewUserDetail(item) {
+			// 跳转到客户详情页面,传递用户ID
+			uni.navigateTo({
+				url: `/pages/matchmaker-workbench/client-detail?id=${item.id}`
+			})
 		}
 	}
+}
 </script>
 
 <style lang="scss" scoped>
-	.my-resources {
-		min-height: 100vh;
-		background: #FFF9F9;
-		display: flex;
-		flex-direction: column;
+.my-resources {
+	min-height: 100vh;
+	background: #FFF9F9;
+	display: flex;
+	flex-direction: column;
+}
+
+/* 顶部导航栏 */
+.header {
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+	padding: 20rpx 30rpx;
+	padding-top: calc(20rpx + env(safe-area-inset-top));
+	background: #FFF9F9;
+
+	.header-title {
+		font-size: 36rpx;
+		font-weight: bold;
+		color: #9C27B0;
+	}
+
+	.header-right {
+		.dropdown-icon {
+			font-size: 24rpx;
+			color: #9C27B0;
+		}
 	}
+}
 
-	/* 顶部导航栏 */
-	.header {
+/* 搜索栏 */
+.search-bar {
+	padding: 15rpx 20rpx;
+	background: #FFF9F9;
+
+	.search-input-wrapper {
 		display: flex;
 		align-items: center;
-		justify-content: space-between;
-		padding: 25rpx 30rpx;
-		padding-top: calc(25rpx + env(safe-area-inset-top));
-		background: #FFF9F9;
-		border-bottom: 1rpx solid #F0F0F0;
+		background: #FFFFFF;
+		border-radius: 25rpx;
+		padding: 12rpx 20rpx;
+		box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.05);
 
-		.header-title {
-			font-size: 38rpx;
-			font-weight: bold;
-			color: #9C27B0;
+		.search-icon {
+			font-size: 28rpx;
+			margin-right: 12rpx;
 		}
 
-		.header-right {
-			.filter-icon {
-				width: 44rpx;
-				height: 44rpx;
-				background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23999"><path d="M3 4h18v2H3V4zm0 3h18v2H3V7zm0 3h18v2H3v-2zm15 3h3v2h-3v-2zm0 3h3v2h-3v-2z"/></svg>');
-				background-size: contain;
-				background-repeat: no-repeat;
-				background-position: center;
+		.search-input {
+			flex: 1;
+			font-size: 26rpx;
+			color: #333;
+			border: none;
+			outline: none;
+			background: transparent;
+
+			&::placeholder {
+				color: #999;
 			}
 		}
 	}
+}
+
+.content {
+	flex: 1;
+	overflow-y: auto;
+	padding: 15rpx 20rpx 20rpx;
+}
+
+/* 优质资源按钮(紧贴加号按钮上方,稍微缩小) */
+.quality-resources-section {
+	position: fixed;
+	right: 30rpx; /* 与加号按钮右边对齐 */
+	bottom: 240rpx; /* 在加号按钮正上方留一点间距 */
+	z-index: 999;
+
+	.quality-resources-btn {
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		gap: 8rpx;
+		padding: 14rpx 22rpx; /* 比之前的 20rpx 略小 */
+		background: linear-gradient(135deg, #FFF3E0 0%, #FFE0B2 100%);
+		border-radius: 18rpx;
+		border: 2rpx solid #FFB74D;
+
+		.btn-icon {
+			font-size: 28rpx; /* 略小 */
+		}
 
-	/* 搜索栏 */
-	.search-bar {
-		padding: 20rpx;
-		background: #FFF9F9;
-
-		.search-input-wrapper {
-			display: flex;
-			align-items: center;
-			background: #FFFFFF;
-			border-radius: 30rpx;
-			padding: 15rpx 25rpx;
-			box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05);
-
-			.search-icon-small {
-				width: 32rpx;
-				height: 32rpx;
-				background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23999"><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg>');
-				background-size: contain;
-				background-repeat: no-repeat;
-				background-position: center;
-				margin-right: 15rpx;
-			}
-
-			.search-input {
-				flex: 1;
-				font-size: 28rpx;
-				color: #333;
-				border: none;
-				outline: none;
-				background: transparent;
-
-				&::placeholder {
-					color: #999;
-				}
-			}
+		.btn-text {
+			font-size: 24rpx; /* 略小 */
+			font-weight: bold;
+			color: #FF9800;
 		}
 	}
-
-	.content {
-		flex: 1;
-		padding: 0 20rpx 140rpx;
+}
+
+/* 资源卡片 */
+.resource-item {
+	background: #FFFFFF;
+	border-radius: 16rpx;
+	margin-bottom: 15rpx;
+	padding: 20rpx;
+	position: relative;
+	box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.05);
+
+	/* 优质资源标签 */
+	.quality-tag {
+		position: absolute;
+		top: 15rpx;
+		right: 15rpx;
+		background: linear-gradient(135deg, #FFD700 0%, #FFA000 100%);
+		color: #FFFFFF;
+		font-size: 20rpx;
+		font-weight: bold;
+		padding: 6rpx 14rpx;
+		border-radius: 12rpx;
 	}
 
-	/* 资源列表 */
-	.resource-item {
-		background: #FFFFFF;
-		border-radius: 20rpx;
-		margin-bottom: 20rpx;
-		padding: 25rpx;
-		position: relative;
-		box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05);
-
-		.resource-header {
-			display: flex;
-			align-items: center;
-			margin-bottom: 20rpx;
-
-			.resource-avatar {
-				width: 120rpx;
-				height: 120rpx;
-				border-radius: 50%;
-				margin-right: 20rpx;
-			}
-
-			.resource-basic-info {
-				flex: 1;
-
-				.name-gender {
-					display: flex;
-					align-items: center;
-					gap: 15rpx;
-					margin-bottom: 10rpx;
-
-					.resource-name {
-						font-size: 32rpx;
-						font-weight: bold;
-						color: #333;
-					}
-
-					.resource-gender {
-						font-size: 26rpx;
-						color: #666;
-					}
-				}
-
-				.tags {
-					display: flex;
-					align-items: center;
-					gap: 10rpx;
-
-					.tag {
-						display: inline-block;
-						padding: 6rpx 16rpx;
-						border-radius: 15rpx;
-						font-size: 22rpx;
-						font-weight: bold;
-
-						&.approved {
-							background: #E8F5E8;
-							color: #4CAF50;
-						}
-
-						&.pending {
-							background: #FFF3E0;
-							color: #FF9800;
-						}
-
-						&.plus {
-							background: #F8BBD0;
-							color: #E91E63;
-						}
-					}
-				}
-			}
+	/* 头部:头像 + 名字/性别 + 审核状态 */
+	.resource-header {
+		display: flex;
+		align-items: center;
+		margin-bottom: 15rpx;
+		gap: 15rpx;
+
+		.resource-avatar {
+			width: 80rpx;
+			height: 80rpx;
+			border-radius: 50%;
+			flex-shrink: 0;
+			background: #E8E8E8;
 		}
 
-		.resource-details {
-			.labels {
-				display: flex;
-				flex-wrap: wrap;
-				gap: 10rpx;
-				margin-bottom: 15rpx;
+		.resource-avatar-placeholder {
+			width: 80rpx;
+			height: 80rpx;
+			border-radius: 50%;
+			flex-shrink: 0;
+			background: linear-gradient(135deg, #E0E0E0, #BDBDBD);
+		}
 
-				.label {
-					display: inline-block;
-					padding: 6rpx 16rpx;
-					background: #F5F5F5;
-					color: #666;
-					border-radius: 15rpx;
-					font-size: 24rpx;
-				}
-			}
+		.resource-info {
+			flex: 1;
 
-			.requirement {
+			.name-gender-row {
 				display: flex;
-				align-items: flex-start;
-				margin-bottom: 15rpx;
+				align-items: center;
+				gap: 10rpx;
 
-				.requirement-label {
-					font-size: 26rpx;
-					color: #333;
+				.resource-name {
+					font-size: 28rpx;
 					font-weight: bold;
-					margin-right: 10rpx;
-					margin-top: 2rpx;
+					color: #333;
 				}
 
-				.requirement-content {
-					flex: 1;
-					font-size: 26rpx;
+				.resource-gender {
+					font-size: 24rpx;
 					color: #666;
-					line-height: 1.4;
-					background: #F8F8F8;
-					padding: 15rpx;
-					border-radius: 10rpx;
 				}
-			}
-
-			.contact-info {
-				display: flex;
-				align-items: center;
-				margin-bottom: 25rpx;
 
-				.contact-label {
-					font-size: 26rpx;
-					color: #333;
+				.status-tag {
+					display: inline-block;
+					padding: 4rpx 12rpx;
+					border-radius: 12rpx;
+					font-size: 20rpx;
 					font-weight: bold;
-					margin-right: 10rpx;
-				}
 
-				.contact-number {
-					flex: 1;
-					font-size: 26rpx;
-					color: #333;
-				}
+					&.approved {
+						background: #E8F5E8;
+						color: #4CAF50;
+					}
 
-				.copy-btn {
-					font-size: 24rpx;
-					color: #9C27B0;
-					font-weight: bold;
+					&.pending {
+						background: #FFF3E0;
+						color: #FF9800;
+					}
 				}
 			}
+		}
 
-			.action-buttons {
-				display: flex;
-				justify-content: space-between;
-				align-items: center;
-
-				.delete-btn {
-					padding: 12rpx 30rpx;
-					background: #FFEBEE;
-					color: #E91E63;
-					border-radius: 25rpx;
-					font-size: 26rpx;
-					font-weight: bold;
-				}
-
-				.match-btn {
-					padding: 12rpx 45rpx;
-					background: linear-gradient(135deg, #9C27B0 0%, #BA68C8 100%);
-					color: #FFFFFF;
-					border-radius: 25rpx;
-					font-size: 26rpx;
-					font-weight: bold;
-				}
+		.right-action {
+			.heart-icon {
+				font-size: 28rpx;
 			}
 		}
+	}
 
-		/* 优质资源标签 */
-		.quality-tag {
-			position: absolute;
-			top: 25rpx;
-			right: 25rpx;
-			background: linear-gradient(135deg, #FFD700 0%, #FFA000 100%);
-			color: #FFFFFF;
+	/* 标签 */
+	.labels-section {
+		display: flex;
+		flex-wrap: wrap;
+		gap: 8rpx;
+		margin-bottom: 12rpx;
+
+		.label {
+			display: inline-block;
+			padding: 5rpx 14rpx;
+			background: #F5F5F5;
+			color: #666;
+			border-radius: 12rpx;
 			font-size: 22rpx;
-			font-weight: bold;
-			padding: 8rpx 16rpx;
-			border-radius: 15rpx;
-			box-shadow: 0 2rpx 8rpx rgba(255, 215, 0, 0.3);
 		}
 	}
 
-	/* 添加按钮 */
-	.add-button {
-		position: fixed;
-		bottom: 130rpx;
-		right: 40rpx;
-		width: 100rpx;
-		height: 100rpx;
-		border-radius: 50%;
-		background: linear-gradient(135deg, #9C27B0 0%, #BA68C8 100%);
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		box-shadow: 0 4rpx 20rpx rgba(156, 39, 176, 0.4);
-		z-index: 999;
+	/* 择偶要求 */
+	.requirement-section {
+		margin-bottom: 12rpx;
 
-		.add-button-icon {
-			font-size: 60rpx;
-			color: #FFFFFF;
-			line-height: 1;
-			font-weight: bold;
+		.requirement-text {
+			font-size: 24rpx;
+			color: #666;
+			line-height: 1.4;
 		}
 	}
 
-	/* 底部导航 */
-	.tabbar {
-		position: fixed;
-		bottom: 0;
-		left: 0;
-		right: 0;
-		height: 100rpx;
-		background: #FFFFFF;
-		border-top: 1rpx solid #F0F0F0;
+	/* 联系方式 */
+	.contact-section {
 		display: flex;
-		justify-content: space-around;
 		align-items: center;
-		padding-bottom: env(safe-area-inset-bottom);
-
-		.tabbar-item {
-			display: flex;
-			flex-direction: column;
-			align-items: center;
-			gap: 8rpx;
-			padding: 10rpx 0;
-
-			.tabbar-icon {
-				width: 44rpx;
-				height: 44rpx;
-				background-size: contain;
-				background-repeat: no-repeat;
-				background-position: center;
-				position: relative;
-
-				.badge {
-					position: absolute;
-					top: -8rpx;
-					right: -8rpx;
-					background: #FF4444;
-					color: #FFFFFF;
-					font-size: 20rpx;
-					font-weight: bold;
-					width: 32rpx;
-					height: 32rpx;
-					display: flex;
-					align-items: center;
-					justify-content: center;
-					border-radius: 16rpx;
-				}
-			}
-
-			.tabbar-text {
-				font-size: 20rpx;
-				color: #999;
-			}
-
-			&.active {
-				.tabbar-text {
-					color: #9C27B0;
-					font-weight: bold;
-				}
-			}
-
-			&.home .tabbar-icon {
-				background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23999"><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/></svg>');
-			}
+		margin-bottom: 15rpx;
+		gap: 8rpx;
 
-			&.active.home .tabbar-icon {
-				background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%239C27B0"><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/></svg>');
-			}
+		.contact-label {
+			font-size: 24rpx;
+			color: #333;
+			font-weight: bold;
+		}
 
-			&.resources .tabbar-icon {
-				background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%239C27B0"><path d="M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z"/></svg>');
-			}
+		.contact-number {
+			flex: 1;
+			font-size: 24rpx;
+			color: #9C27B0;
+		}
 
-			&.trophy .tabbar-icon {
-				background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23999"><path d="M18 6l-1.42 1.42-1.59-1.59L13 8.17l-1.42-1.42L9 8.17l-1.59-1.59L6 6l3 3V18c0 1.1.9 2 2 2h4c1.1 0 2-.9 2-2V9l3-3zm-4 12H8v-7.5l4-4 4 4V18z"/></svg>');
-			}
+		.copy-btn {
+			font-size: 22rpx;
+			color: #9C27B0;
+			font-weight: bold;
+		}
+	}
 
-			&.active.trophy .tabbar-icon {
-				background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%239C27B0"><path d="M18 6l-1.42 1.42-1.59-1.59L13 8.17l-1.42-1.42L9 8.17l-1.59-1.59L6 6l3 3V18c0 1.1.9 2 2 2h4c1.1 0 2-.9 2-2V9l3-3zm-4 12H8v-7.5l4-4 4 4V18z"/></svg>');
-			}
+	/* 底部按钮 */
+	.action-buttons {
+		display: flex;
+		justify-content: space-between;
+		gap: 12rpx;
+
+		.delete-btn {
+			flex: 1;
+			padding: 10rpx 20rpx;
+			background: #FFEBEE;
+			color: #E91E63;
+			border-radius: 20rpx;
+			font-size: 24rpx;
+			font-weight: bold;
+			text-align: center;
+		}
 
-			&.message .tabbar-icon {
-				background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23999"><path d="M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H6l-2 2V4h16v12z"/></svg>');
+		.match-btn {
+			flex: 1;
+			padding: 10rpx 20rpx;
+			background: linear-gradient(135deg, #9C27B0 0%, #BA68C8 100%);
+			color: #FFFFFF;
+			border-radius: 20rpx;
+			font-size: 24rpx;
+			font-weight: bold;
+			text-align: center;
+		}
+	}
+}
+
+/* 添加按钮 */
+.add-button {
+	position: fixed;
+	bottom: 130rpx;
+	right: 30rpx;
+	width: 90rpx;
+	height: 90rpx;
+	border-radius: 50%;
+	background: linear-gradient(135deg, #9C27B0 0%, #BA68C8 100%);
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	box-shadow: 0 4rpx 16rpx rgba(156, 39, 176, 0.3);
+	z-index: 1000;
+
+	.add-button-icon {
+		font-size: 50rpx;
+		color: #FFFFFF;
+		line-height: 1;
+		font-weight: bold;
+	}
+}
+
+/* 底部导航 */
+.tabbar {
+	position: fixed;
+	bottom: 0;
+	left: 0;
+	right: 0;
+	height: 110rpx;
+	background: #FFFFFF;
+	border-top: 1rpx solid #F0F0F0;
+	display: flex;
+	justify-content: space-around;
+	align-items: center;
+	padding-bottom: env(safe-area-inset-bottom);
+
+	.tabbar-item {
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		gap: 6rpx;
+		padding: 10rpx 0;
+
+		.tab-icon-wrapper {
+			position: relative;
+
+			.badge {
+				position: absolute;
+				top: -8rpx;
+				right: -12rpx;
+				background: #FF4444;
+				color: #FFFFFF;
+				font-size: 18rpx;
+				font-weight: bold;
+				min-width: 28rpx;
+				height: 28rpx;
+				padding: 0 6rpx;
+				border-radius: 14rpx;
+				display: flex;
+				align-items: center;
+				justify-content: center;
 			}
+		}
 
-			&.active.message .tabbar-icon {
-				background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%239C27B0"><path d="M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H6l-2 2V4h16v12z"/></svg>');
-			}
+		.tab-icon {
+			font-size: 36rpx;
+		}
 
-			&.mine .tabbar-icon {
-				background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23999"><path d="M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"/></svg>');
-			}
+		.tab-text {
+			font-size: 20rpx;
+			color: #999;
+		}
 
-			&.active.mine .tabbar-icon {
-				background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%239C27B0"><path d="M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"/></svg>');
+		&.active {
+			.tab-text {
+				color: #9C27B0;
+				font-weight: bold;
 			}
 		}
 	}
+}
 </style>

+ 247 - 169
LiangZhiYUMao/pages/matchmaker-workbench/points-mall.vue

@@ -7,7 +7,7 @@
       <view class="header-right">
         <view class="search-icon"></view>
         <view class="cart-icon">
-          <text class="cart-badge">8</text>
+          <text class="cart-badge">{{ cartCount }}</text>
         </view>
       </view>
     </view>
@@ -16,8 +16,8 @@
     <view class="points-section">
       <view class="points-header">
         <text class="points-label">我的积分</text>
-        <text class="points-value">5,000</text>
-        <text class="points-icon">📦</text>
+        <text class="points-value">{{ userPoints }}</text>
+        <text class="points-icon">💰</text>
       </view>
       <view class="points-actions">
         <view class="action-btn" @click="handlePointsDetail">积分明细</view>
@@ -25,10 +25,54 @@
       </view>
     </view>
 
-    <!-- 商品区域占位符 -->
-    <view class="products-placeholder">
-      <text class="placeholder-text">商品区域正在开发中...</text>
+    <!-- 分类标签 -->
+    <view class="category-tabs">
+      <view 
+        v-for="(category, index) in categories" 
+        :key="index"
+        class="category-tab"
+        :class="{ active: activeCategory === index }"
+        @click="activeCategory = index"
+      >
+        {{ category }}
+      </view>
     </view>
+
+    <!-- 推荐商品区域 -->
+    <scroll-view scroll-y class="products-container">
+      <!-- 推荐商品标题 -->
+      <view class="section-header">
+        <text class="section-title">推荐商品</text>
+        <view class="view-more" @click="handleViewMore">
+          <text class="view-more-text">查看更多</text>
+          <text class="arrow">›</text>
+        </view>
+      </view>
+
+      <!-- 商品网格 -->
+      <view class="products-grid">
+        <view 
+          v-for="(product, index) in recommendedProducts" 
+          :key="index"
+          class="product-card"
+          @click="handleProductClick(product)"
+        >
+          <view class="product-image">
+            <image :src="product.image" mode="aspectFill"></image>
+          </view>
+          <view class="product-info">
+            <text class="product-name">{{ product.name }}</text>
+            <view class="product-price">
+              <text class="price-value">{{ product.points }}</text>
+              <text class="price-unit">💰</text>
+            </view>
+          </view>
+        </view>
+      </view>
+
+      <!-- 底部空白 -->
+      <view class="bottom-spacer"></view>
+    </scroll-view>
   </view>
 </template>
 
@@ -36,7 +80,38 @@
 export default {
   name: 'points-mall',
   data() {
-    return {}
+    return {
+      userPoints: 5000,
+      cartCount: 0,
+      activeCategory: 0,
+      categories: ['全部', '优惠券', '实物商品', '虚拟商品'],
+      recommendedProducts: [
+        {
+          id: 1,
+          name: '清风原色无尘纸',
+          points: 1000,
+          image: 'https://via.placeholder.com/200x200?text=纸巾'
+        },
+        {
+          id: 2,
+          name: 'OPPO Enco Air2耳机',
+          points: 7000,
+          image: 'https://via.placeholder.com/200x200?text=耳机'
+        },
+        {
+          id: 3,
+          name: '五常大米',
+          points: 3000,
+          image: 'https://via.placeholder.com/200x200?text=大米'
+        },
+        {
+          id: 4,
+          name: '脸盆',
+          points: 30,
+          image: 'https://via.placeholder.com/200x200?text=脸盆'
+        }
+      ]
+    }
   },
   methods: {
     // 返回上一页
@@ -56,6 +131,21 @@ export default {
         title: '赚取积分',
         icon: 'none'
       })
+    },
+    // 查看更多
+    handleViewMore() {
+      uni.showToast({
+        title: '查看更多商品',
+        icon: 'none'
+      })
+    },
+    // 商品点击
+    handleProductClick(product) {
+      uni.showToast({
+        title: `已添加 ${product.name} 到购物车`,
+        icon: 'success'
+      })
+      this.cartCount++
     }
   }
 }
@@ -82,16 +172,21 @@ export default {
   .back-icon {
     width: 44rpx;
     height: 44rpx;
-    background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%239C27B0"><path d="M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z"/></svg>');
-    background-size: contain;
-    background-repeat: no-repeat;
-    background-position: center;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    font-size: 32rpx;
+    color: #333;
+
+    &::before {
+      content: '‹';
+    }
   }
 
   .header-title {
     font-size: 38rpx;
     font-weight: bold;
-    color: #9C27B0;
+    color: #333;
   }
 
   .header-right {
@@ -102,21 +197,31 @@ export default {
     .search-icon {
       width: 44rpx;
       height: 44rpx;
-      background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23999"><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg>');
-      background-size: contain;
-      background-repeat: no-repeat;
-      background-position: center;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      font-size: 32rpx;
+      color: #999;
+
+      &::before {
+        content: '🔍';
+      }
     }
 
     .cart-icon {
       width: 44rpx;
       height: 44rpx;
-      background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23999"><path d="M7 18c-1.1 0-1.99.9-1.99 2S5.9 22 7 22s2-.9 2-2-.9-2-2-2zM1 2v2h2l3.6 7.59-1.35 2.45c-.16.28-.25.61-.25.96 0 1.1.9 2 2 2h12v-2H7.42c-.14 0-.25-.11-.25-.25l.03-.12.9-1.63h7.45c.75 0 1.41-.41 1.75-1.03l3.58-6.49c.08-.14.12-.31.12-.48 0-.55-.45-1-1-1H5.21l-.94-2H1zm16 16c-1.1 0-1.99.9-1.99 2s.89 2 1.99 2 2-.9 2-2-.9-2-2-2z"/></svg>');
-      background-size: contain;
-      background-repeat: no-repeat;
-      background-position: center;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      font-size: 32rpx;
+      color: #999;
       position: relative;
 
+      &::before {
+        content: '🛒';
+      }
+
       .cart-badge {
         position: absolute;
         top: -8rpx;
@@ -185,162 +290,135 @@ export default {
   }
 }
 
-/* 商品区域占位符 */
-.products-placeholder {
+/* 分类标签 */
+.category-tabs {
+  display: flex;
+  gap: 20rpx;
+  padding: 20rpx 30rpx;
+  background: #FFFFFF;
+  overflow-x: auto;
+  white-space: nowrap;
+
+  .category-tab {
+    padding: 12rpx 24rpx;
+    background: #F5F5F5;
+    color: #666;
+    border-radius: 20rpx;
+    font-size: 26rpx;
+    white-space: nowrap;
+    transition: all 0.3s;
+
+    &.active {
+      background: #9C27B0;
+      color: #FFFFFF;
+      font-weight: bold;
+    }
+  }
+}
+
+/* 商品容器 */
+.products-container {
   flex: 1;
+  background: #FFFFFF;
+  padding: 20rpx 30rpx;
+}
+
+/* 分类标题 */
+.section-header {
   display: flex;
   align-items: center;
-  justify-content: center;
-  background-color: #FFFFFF;
-  margin: 20rpx;
-  border-radius: 20rpx;
-  box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.08);
+  justify-content: space-between;
+  margin-bottom: 20rpx;
 
-  .placeholder-text {
+  .section-title {
     font-size: 32rpx;
-    color: #999999;
+    font-weight: bold;
+    color: #333;
+  }
+
+  .view-more {
+    display: flex;
+    align-items: center;
+    gap: 5rpx;
+
+    .view-more-text {
+      font-size: 24rpx;
+      color: #9C27B0;
+    }
+
+    .arrow {
+      font-size: 28rpx;
+      color: #9C27B0;
+    }
   }
 }
 
+/* 商品网格 */
+.products-grid {
+  display: grid;
+  grid-template-columns: repeat(2, 1fr);
+  gap: 20rpx;
+  margin-bottom: 20rpx;
+
+  .product-card {
+    background: #FFFFFF;
+    border-radius: 16rpx;
+    overflow: hidden;
+    box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.08);
+    transition: all 0.3s;
+
+    &:active {
+      transform: translateY(-4rpx);
+      box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.12);
+    }
+
+    .product-image {
+      width: 100%;
+      height: 200rpx;
+      background: #F5F5F5;
+      overflow: hidden;
+
+      image {
+        width: 100%;
+        height: 100%;
+        object-fit: cover;
+      }
+    }
+
+    .product-info {
+      padding: 15rpx;
 
-//<style lang="scss" scoped>
-//.points-mall {
-//	min-height: 100vh;
-//	background: #FFF9F9;
-//	display: flex;
-//	flex-direction: column;
-//}
-//
-///* 顶部导航栏 */
-//.header {
-//	display: flex;
-//	align-items: center;
-//	justify-content: space-between;
-//	padding: 25rpx 30rpx;
-//	padding-top: calc(25rpx + env(safe-area-inset-top));
-//	background: #FFF9F9;
-//	border-bottom: 1rpx solid #F0F0F0;
-//
-//	.back-icon {
-//		width: 44rpx;
-//		height: 44rpx;
-//		background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%239C27B0"><path d="M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z"/></svg>');
-//		background-size: contain;
-//		background-repeat: no-repeat;
-//		background-position: center;
-//	}
-//
-//	.header-title {
-//		font-size: 38rpx;
-//		font-weight: bold;
-//		color: #9C27B0;
-//	}
-//
-//	.header-right {
-//		display: flex;
-//		align-items: center;
-//		gap: 20rpx;
-//
-//		.search-icon {
-//			width: 44rpx;
-//			height: 44rpx;
-//			background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23999"><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg>');
-//			background-size: contain;
-//			background-repeat: no-repeat;
-//			background-position: center;
-//		}
-//
-//		.cart-icon {
-//			width: 44rpx;
-//			height: 44rpx;
-//			background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23999"><path d="M7 18c-1.1 0-1.99.9-1.99 2S5.9 22 7 22s2-.9 2-2-.9-2-2-2zM1 2v2h2l3.6 7.59-1.35 2.45c-.16.28-.25.61-.25.96 0 1.1.9 2 2 2h12v-2H7.42c-.14 0-.25-.11-.25-.25l.03-.12.9-1.63h7.45c.75 0 1.41-.41 1.75-1.03l3.58-6.49c.08-.14.12-.31.12-.48 0-.55-.45-1-1-1H5.21l-.94-2H1zm16 16c-1.1 0-1.99.9-1.99 2s.89 2 1.99 2 2-.9 2-2-.9-2-2-2z"/></svg>');
-//			background-size: contain;
-//			background-repeat: no-repeat;
-//			background-position: center;
-//			position: relative;
-//
-//			.cart-badge {
-//				position: absolute;
-//				top: -8rpx;
-//				right: -8rpx;
-//				width: 32rpx;
-//				height: 32rpx;
-//				display: flex;
-//				align-items: center;
-//				justify-content: center;
-//				background-color: #FF4444;
-//				color: #FFFFFF;
-//				font-size: 20rpx;
-//				font-weight: bold;
-//				border-radius: 50%;
-//			}
-//		}
-//		}
-//	}
-//
-//	/* 积分显示区域 */
-//	.points-section {
-//		background: linear-gradient(135deg, #FCE4EC 0%, #F8BBD0 100%);
-//		padding: 40rpx 30rpx;
-//		border-radius: 0 0 30rpx 30rpx;
-//
-//		.points-header {
-//			display: flex;
-//			align-items: center;
-//			justify-content: center;
-//			gap: 20rpx;
-//			margin-bottom: 30rpx;
-//
-//			.points-label {
-//				font-size: 28rpx;
-//				color: #666666;
-//			}
-//
-//			.points-value {
-//				font-size: 64rpx;
-//				font-weight: bold;
-//				color: #333333;
-//			}
-//
-//			.points-icon {
-//				font-size: 48rpx;
-//			}
-//		}
-//
-//		.points-actions {
-//			display: flex;
-//			justify-content: space-around;
-//
-//			.action-btn {
-//				padding: 15rpx 40rpx;
-//				background-color: rgba(255, 255, 255, 0.8);
-//				color: #9C27B0;
-//				border-radius: 30rpx;
-//				font-size: 28rpx;
-//				font-weight: bold;
-//				transition: all 0.3s;
-//
-//				&:active {
-//					background-color: rgba(255, 255, 255, 1);
-//				}
-//			}
-//		}
-//	}
-//
-//	/* 商品区域占位符 */
-//	.products-placeholder {
-//		flex: 1;
-//		display: flex;
-//		align-items: center;
-//		justify-content: center;
-//		background-color: #FFFFFF;
-//		margin: 20rpx;
-//		border-radius: 20rpx;
-//		box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.08);
-//
-//		.placeholder-text {
-//			font-size: 32rpx;
-//			color: #999999;
-//		}
-//	}
+      .product-name {
+        display: block;
+        font-size: 24rpx;
+        color: #333;
+        margin-bottom: 10rpx;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+      }
+
+      .product-price {
+        display: flex;
+        align-items: center;
+        gap: 5rpx;
+
+        .price-value {
+          font-size: 28rpx;
+          font-weight: bold;
+          color: #9C27B0;
+        }
+
+        .price-unit {
+          font-size: 24rpx;
+        }
+      }
+    }
+  }
+}
+
+/* 底部空白 */
+.bottom-spacer {
+  height: 40rpx;
+}
 </style>

+ 30 - 65
LiangZhiYUMao/pages/matchmaker-workbench/ranking.vue

@@ -70,26 +70,27 @@
 		<!-- 底部导航 -->
 		<view class="tabbar">
 			<view class="tabbar-item" @click="navigateToWorkbench">
-				<view class="tabbar-icon home"></view>
-				<text class="tabbar-text">工作台</text>
+				<text class="tab-icon">🏠</text>
+				<text class="tab-text">工作台</text>
 			</view>
 			<view class="tabbar-item" @click="navigateToMyResources">
-				<view class="tabbar-icon resources"></view>
-				<text class="tabbar-text">我的资源</text>
+				<text class="tab-icon">📋</text>
+				<text class="tab-text">我的资源</text>
 			</view>
 			<view class="tabbar-item active" @click="navigateToRanking">
-				<view class="tabbar-icon trophy"></view>
-				<text class="tabbar-text">排行榜</text>
+				<text class="tab-icon">🏆</text>
+				<text class="tab-text">排行榜</text>
 			</view>
 			<view class="tabbar-item" @click="navigateToMessage">
-				<view class="tabbar-icon message">
+				<view class="tab-icon-wrapper">
+					<text class="tab-icon">💬</text>
 					<view class="badge">3</view>
 				</view>
-				<text class="tabbar-text">消息</text>
+				<text class="tab-text">消息</text>
 			</view>
 			<view class="tabbar-item" @click="navigateToMine">
-				<view class="tabbar-icon mine"></view>
-				<text class="tabbar-text">我的</text>
+				<text class="tab-icon">👤</text>
+				<text class="tab-text">我的</text>
 			</view>
 		</view>
 	</view>
@@ -156,13 +157,13 @@ export default {
 			},
 			// 导航到工作台
 			navigateToWorkbench() {
-				uni.navigateTo({
+				uni.redirectTo({
 					url: '/pages/matchmaker-workbench/index'
 				})
 			},
 			// 导航到我的资源
 			navigateToMyResources() {
-				uni.navigateTo({
+				uni.redirectTo({
 					url: '/pages/matchmaker-workbench/my-resources'
 				})
 			},
@@ -172,13 +173,13 @@ export default {
 			},
 			// 导航到消息
 			navigateToMessage() {
-				uni.navigateTo({
+				uni.redirectTo({
 					url: '/pages/matchmaker-workbench/message'
 				})
 			},
 			// 导航到我的
 			navigateToMine() {
-				uni.navigateTo({
+				uni.redirectTo({
 					url: '/pages/matchmaker-workbench/mine'
 				})
 			}
@@ -434,7 +435,7 @@ export default {
 		bottom: 0;
 		left: 0;
 		right: 0;
-		height: 100rpx;
+		height: 110rpx;
 		background: #FFFFFF;
 		border-top: 1rpx solid #F0F0F0;
 		display: flex;
@@ -446,81 +447,45 @@ export default {
 			display: flex;
 			flex-direction: column;
 			align-items: center;
-			gap: 8rpx;
+			gap: 6rpx;
 			padding: 10rpx 0;
 
-			.tabbar-icon {
-				width: 44rpx;
-				height: 44rpx;
-				background-size: contain;
-				background-repeat: no-repeat;
-				background-position: center;
+			.tab-icon-wrapper {
 				position: relative;
 
 				.badge {
 					position: absolute;
 					top: -8rpx;
-					right: -8rpx;
+					right: -12rpx;
 					background: #FF4444;
 					color: #FFFFFF;
-					font-size: 20rpx;
+					font-size: 18rpx;
 					font-weight: bold;
-					width: 32rpx;
-					height: 32rpx;
+					min-width: 28rpx;
+					height: 28rpx;
+					padding: 0 6rpx;
+					border-radius: 14rpx;
 					display: flex;
 					align-items: center;
 					justify-content: center;
-					border-radius: 16rpx;
 				}
 			}
 
-			.tabbar-text {
+			.tab-icon {
+				font-size: 36rpx;
+			}
+
+			.tab-text {
 				font-size: 20rpx;
 				color: #999;
 			}
 
 			&.active {
-				.tabbar-text {
+				.tab-text {
 					color: #9C27B0;
 					font-weight: bold;
 				}
 			}
-
-			&.home .tabbar-icon {
-				background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23999"><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/></svg>');
-			}
-
-			&.active.home .tabbar-icon {
-				background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%239C27B0"><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/></svg>');
-			}
-
-			&.resources .tabbar-icon {
-				background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23999"><path d="M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z"/></svg>');
-			}
-
-			&.active.resources .tabbar-icon {
-				background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%239C27B0"><path d="M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z"/></svg>');
-			}
-
-			&.trophy .tabbar-icon {
-				background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%239C27B0"><path d="M18 6l-1.42 1.42-1.59-1.59L13 8.17l-1.42-1.42L9 8.17l-1.59-1.59L6 6l3 3V18c0 1.1.9 2 2 2h4c1.1 0 2-.9 2-2V9l3-3zm-4 12H8v-7.5l4-4 4 4V18z"/></svg>');
-			}
-
-			&.message .tabbar-icon {
-				background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23999"><path d="M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H6l-2 2V4h16v12z"/></svg>');
-			}
-
-			&.active.message .tabbar-icon {
-				background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%239C27B0"><path d="M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H6l-2 2V4h16v12z"/></svg>');
-			}
-
-			&.mine .tabbar-icon {
-				background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23999"><path d="M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"/></svg>');
-			}
-
-			&.active.mine .tabbar-icon {
-				background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%239C27B0"><path d="M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"/></svg>');
-			}
 		}
 	}
 </style>

+ 42 - 118
LiangZhiYUMao/pages/page3/page3.vue

@@ -3,23 +3,18 @@
     <!-- 背景图片 -->
     <image class="bg-image" src="/static/login-bg.png" mode="aspectFill"></image>
 
-
     <!-- 顶部标题区域 -->
     <view class="header-section">
-      <!-- <view class="app-logo">🪶🪶</view> -->
       <image class="app-logo" src="/static/logo.png" mode="widthFix"></image>
-      <!-- <view class="app-name">青鸾之恋</view> -->
       <view class="app-slogan">真诚相遇 · 携手一生</view>
     </view>
 
     <!-- 登录框 -->
     <view class="login-box">
-      <!-- 微信一键登录 -->
       <button class="wechat-login-btn" @click="login_zheshow">
         <image class="wechat-icon" src="/static/wechat-icon.png" mode="aspectFit"></image>
         <text>微信一键登录</text>
       </button>
-
     </view>
 
     <!-- 底部提示 -->
@@ -28,18 +23,20 @@
       <text class="tip-text">遇见对的人,不再孤单</text>
     </view>
 
-    <btnlogin :zheshow='zheshow'/>
+    <butlogin :zheshow='zheshow'/>
   </view>
 </template>
 
 <script>
-import btnlogin from '@/components/butlogin';
+import butlogin from '@/components/butlogin'
 import api from '@/utils/api.js'
 import userAuth from '@/utils/userAuth.js'
+import timManager from '@/utils/tim-manager.js'
+import timPresenceManager from '@/utils/tim-presence-manager.js'
 
 export default {
   components: {
-    btnlogin
+    butlogin
   },
   data() {
     return {
@@ -47,113 +44,78 @@ export default {
       redirectUrl: '' // 登录成功后跳转地址(可选)
     }
   },
-
+  
   onLoad(options) {
     // 处理跳转参数
     this.redirectUrl = options && options.redirect ? decodeURIComponent(options.redirect) : ''
   },
-
+  
   methods: {
     login_zheshow() {
       this.zheshow = !this.zheshow
     },
+
     loset(Logon_Credentials) {
       console.log('=== 开始微信登录流程 ===')
-      console.log('用户登录信息:', Logon_Credentials)
+      console.log('用户输入信息:', Logon_Credentials)
 
       // 获取微信登录code
       uni.login({
         provider: 'weixin',
         success: async (loginRes) => {
-          // ✅ 获取手机号code
-          const phoneCode = (Logon_Credentials && Logon_Credentials.code && String(Logon_Credentials.code).trim())
+          const loginParams = {
+            code: loginRes.code.trim(), // 必需:微信登录code
+            nickname: Logon_Credentials.nickname?.trim() || '', // 可选:用户昵称
+            avatarUrl: Logon_Credentials.active?.trim() || '',  // 可选:用户头像
+            phoneCode: Logon_Credentials.code?.trim() || ''     // 可选:手机号授权code
+          };
+          uni.showLoading({ title: '登录中...' })
+          try {
+            // ✅ 获取手机号code
+            const phoneCode = (Logon_Credentials && Logon_Credentials.code && String(Logon_Credentials.code).trim())
               ? String(Logon_Credentials.code).trim()
               : null;
 
-          console.log('微信登录code:', loginRes.code)
-          console.log('手机号code:', phoneCode || '未提供')
+            console.log('微信登录code:', loginRes.code)
+            console.log('用户昵称:', Logon_Credentials.nickname)
+            console.log('用户头像:', Logon_Credentials.active ? '已提供' : '未提供')
+            console.log('手机号code:', phoneCode || '未提供')
 
-          // ✅ 一次性调用微信登录接口,无需用户提供头像和昵称
-          const loginParams = {
-            code: loginRes.code,
-            phoneCode: phoneCode
-          };
-          
-          uni.showLoading({title: '登录中...'})
-          try {
-            const wechatLoginResult = await api.auth.wechatLogin(loginParams);
+            // ✅ 一次性调用微信登录接口,传入所有信息
+            const wechatLoginResult = await api.auth.wechatLogin({
+              code: loginRes.code,
+              nickname: Logon_Credentials.nickname || '微信用户',
+              avatarUrl: Logon_Credentials.active || null,
+              phoneCode: phoneCode
+            });
 
             const token = wechatLoginResult?.token || wechatLoginResult?.data?.token
             const user = wechatLoginResult?.user || wechatLoginResult?.data?.user
-
+            
             if (!token || !user) {
               throw new Error('微信登录返回数据异常')
             }
-
+            
             console.log('✅ 微信登录成功,用户ID:', user.userId)
+            uni.setStorageSync("userId", user.userId);
+
+            console.log('📱 使用phoneCode:', phoneCode)
             console.log('✅ 微信登录成功')
             console.log('用户ID:', user.userId)
             console.log('昵称:', user.nickname)
             console.log('头像:', user.avatarUrl ? '已设置' : '未设置')
             console.log('手机号:', user.phone || '未设置')
-            
-            uni.setStorageSync("userId", user.userId);
 
             // ✅ 保存登录信息(后端已返回完整信息,直接保存)
             userAuth.saveLoginInfo(token, user)
-
-            uni.hideLoading()
-            uni.showToast({title: '登录成功', icon: 'success'})
-
-            // ✅ 初始化 TIM 和 WebSocket
-            console.log('🚀 登录成功,开始初始化 TIM 和 WebSocket...')
             
-            // 延迟一下,确保全局方法已挂载
-            await new Promise(resolve => setTimeout(resolve, 200))
+            uni.hideLoading()
+            uni.showToast({ title: '登录成功', icon: 'success' })
             
-            try {
-              const app = getApp()
-              if (app && app.globalData && app.globalData.initGlobalTIM) {
-                await app.globalData.initGlobalTIM()
-                console.log('✅ TIM 和 WebSocket 初始化完成')
-              } else {
-                console.warn('⚠️ 全局 initGlobalTIM 方法不存在,尝试直接导入')
-                // 如果全局方法不存在,直接导入 tim-manager
-                const timManager = require('@/utils/tim-manager.js').default
-                const timPresenceManager = require('@/utils/tim-presence-manager.js').default
-                
-                // 初始化 TIM
-                if (!timManager.isLogin) {
-                  const SDKAppID = 1600109674
-                  if (!timManager.tim) {
-                    timManager.init(SDKAppID)
-                    console.log('✅ TIM SDK 初始化完成')
-                  }
-                  
-                  const res = await uni.request({
-                    url: `http://localhost:8083/api/im/getUserSig?userId=${user.userId}`,
-                    method: 'GET'
-                  })
-                  
-                  if (res[1].data.code === 200) {
-                    const userSig = res[1].data.data.userSig
-                    await timManager.login(String(user.userId), userSig)
-                    console.log('✅ TIM 登录成功')
-                    
-                    // 初始化 WebSocket
-                    await timPresenceManager.init(String(user.userId))
-                    console.log('✅ WebSocket 初始化完成')
-                  }
-                }
-              }
-            } catch (error) {
-              console.error('❌ 初始化 TIM 失败:', error)
-            }
-
             // ✅ 跳转首页
             setTimeout(() => {
               const target = this.redirectUrl || '/pages/index/index'
-              uni.reLaunch({url: target})
+              uni.reLaunch({ url: target })
             }, 500)
           } catch (error) {
             console.error('❌ 微信登录失败:', error)
@@ -167,7 +129,7 @@ export default {
         },
         fail: (err) => {
           console.error('获取微信code失败:', err)
-          uni.showToast({title: '微信登录失败', icon: 'none'})
+          uni.showToast({ title: '微信登录失败', icon: 'none' })
         }
       })
     }
@@ -192,7 +154,6 @@ export default {
     pointer-events: none;
   }
 
-  // 添加装饰性元素
   &::before {
     content: '❤️';
     position: absolute;
@@ -232,16 +193,6 @@ export default {
   .app-logo {
     font-size: 120rpx;
     margin-bottom: 20rpx;
-    // animation: heartbeat 1s infinite;
-  }
-
-  .app-name {
-    font-size: 48rpx;
-    font-weight: bold;
-    background: linear-gradient(135deg, #ff6b9d 0%, #ff8fab 100%);
-    -webkit-background-clip: text;
-    -webkit-text-fill-color: transparent;
-    margin-bottom: 15rpx;
   }
 
   .app-slogan {
@@ -264,35 +215,9 @@ export default {
   position: relative;
   z-index: 1;
 
-  // 	.wechat-login-btn {
-  // 	width: 100%;
-  // 	height: 90rpx;
-  // 		background: #FFFFFF;
-  // 		color: #ff6b9d;
-  // 	border-radius: 50rpx;
-  // 	font-size: 30rpx;
-  // 	font-weight: bold;
-  // 	display: flex;
-  // 	align-items: center;
-  // 	justify-content: center;
-  // 		border: 2rpx solid #ff6b9d;
-  // 		box-shadow: 0 8rpx 20rpx rgba(255, 107, 157, 0.2);
-
-  // 	.wechat-icon {
-  // 		width: 40rpx;
-  // 		height: 40rpx;
-  // 		margin-right: 10rpx;
-  // 	}
-
-  // 	&:active {
-  // 		opacity: 0.9;
-  // 		transform: translateY(2rpx);
-  // 	}
-  // }
   .wechat-login-btn {
     width: 100%;
     height: 96rpx;
-    // 渐变背景+光泽叠加
     background: linear-gradient(90deg, #9d40e9 0%, #5a35f7 100%),
     radial-gradient(circle at 30% 30%, rgba(255, 255, 255, 0.15), transparent 50%);
     background-blend-mode: overlay;
@@ -304,12 +229,11 @@ export default {
     align-items: center;
     justify-content: center;
     border: none;
-    // 多层光影:外层投影+内高光+内阴影
     box-shadow: 0 6rpx 16rpx rgba(90, 53, 247, 0.4),
     0 3rpx 8rpx rgba(90, 53, 247, 0.2),
     inset 0 2rpx 3rpx rgba(255, 255, 255, 0.25),
     inset 0 -2rpx 3rpx rgba(0, 0, 0, 0.15);
-    transition: all 0.2s ease; // 动画过渡,更自然
+    transition: all 0.2s ease;
   }
 
   .wechat-login-btn:active {
@@ -324,7 +248,7 @@ export default {
     width: 45rpx;
     height: 45rpx;
     margin-right: 15rpx;
-    filter: drop-shadow(0 1rpx 2rpx rgba(0, 0, 0, 0.1)); // 给图标加轻微阴影,更立体
+    filter: drop-shadow(0 1rpx 2rpx rgba(0, 0, 0, 0.1));
   }
 }
 
@@ -355,4 +279,4 @@ button {
     border: none;
   }
 }
-</style>
+</style>

+ 29 - 113
LiangZhiYUMao/pages/recommend/user-detail.vue

@@ -13,7 +13,7 @@
 			<!-- 用户头像和基本信息 -->
 			<view class="user-header">
 				<image 
-					:src="userInfo.avatar || userInfo.avatarUrl || 'http://115.190.125.125:9001/static-images/close.png'" 
+					:src="userInfo.avatar || userInfo.avatarUrl || '/static/close.png'" 
 					class="user-avatar" 
 					mode="aspectFill"
 					@error="onAvatarError"
@@ -84,9 +84,9 @@
 			<view class="dynamic-section">
 				<view class="section-header">
 					<text class="section-title">动态</text>
-					<view class="section-more" @tap.stop="viewAllDynamics" v-if="dynamicList.length > 0">
-						<text>查看全部({{ totalDynamics }}) ></text>
-					</view>
+					<text class="section-more" @click="viewAllDynamics" v-if="dynamicList.length > 0">
+						查看全部({{ totalDynamics }}) >
+					</text>
 				</view>
 				
 				<!-- 动态列表 -->
@@ -102,7 +102,7 @@
 						v-for="(item, index) in dynamicList" 
 						:key="item.dynamicId || index" 
 						class="dynamic-item"
-						@tap.stop="viewDynamicDetail(item, index)"
+						@click="viewDynamicDetail(item)"
 					>
 						<!-- 动态内容 -->
 						<view class="dynamic-content" v-if="item.content">
@@ -118,6 +118,7 @@
 									:src="url" 
 									class="media-image"
 									mode="aspectFill"
+									@click.stop="previewMedia(item.mediaUrls, idx)"
 								/>
 							</view>
 						</view>
@@ -127,8 +128,8 @@
 							<text class="dynamic-time">{{ formatTime(item.createdAt) }}</text>
 							<view class="dynamic-stats">
 								<text class="stat-item">❤️ {{ item.likeCount || 0 }}</text>
+								<text class="stat-item comment-stat" @click.stop="viewDynamicComments(item)">💬 {{ item.commentCount || 0 }}</text>
 								<text class="stat-item">💬 {{ item.commentCount || 0 }}</text>
-								<text class="stat-item">⭐ {{ item.favoriteCount || 0 }}</text>
 							</view>
 						</view>
 					</view>
@@ -156,7 +157,7 @@ export default {
 			loadingDynamics: false,
 			totalDynamics: 0,
 			pageNum: 1,
-			pageSize: 3
+			pageSize: 6
 		}
 	},
 	
@@ -264,14 +265,6 @@ export default {
 				
 				// 处理mediaUrls字段(可能是字符串需要解析)
 				list = list.map(item => {
-					// 确保 dynamicId 存在
-					if (!item.dynamicId && item.id) {
-						item.dynamicId = item.id
-					}
-					if (!item.dynamicId && item.dynamic_id) {
-						item.dynamicId = item.dynamic_id
-					}
-					
 					if (item.mediaUrls && typeof item.mediaUrls === 'string') {
 						try {
 							item.mediaUrls = JSON.parse(item.mediaUrls)
@@ -283,21 +276,12 @@ export default {
 					if (!item.mediaUrls || !Array.isArray(item.mediaUrls)) {
 						item.mediaUrls = []
 					}
-					
-					console.log('处理后的动态项:', {
-						dynamicId: item.dynamicId,
-						content: item.content,
-						hasMedia: item.mediaUrls && item.mediaUrls.length > 0
-					})
-					
 					return item
-				})
+ 				})
 				
-				// 最多只显示3条动态
-				this.dynamicList = list.slice(0, 3)
+				this.dynamicList = list
 				this.totalDynamics = total
 				console.log('处理后的动态列表:', this.dynamicList)
-				console.log('动态列表中的 dynamicId:', this.dynamicList.map(item => item.dynamicId))
 			} catch (e) {
 				console.error('获取用户动态失败:', e)
 				uni.showToast({
@@ -311,87 +295,41 @@ export default {
 		
 		// 查看全部动态
 		viewAllDynamics() {
-			console.log('=== 点击查看全部动态 ===')
-			console.log('userId:', this.userId)
-			if (!this.userId) {
-				uni.showToast({
-					title: '用户ID无效',
-					icon: 'none'
-				})
-				return
-			}
-			const url = `/pages/recommend/user-dynamics?userId=${this.userId}`
-			console.log('准备跳转, url:', url)
 			uni.navigateTo({
-				url: url,
-				success: (res) => {
-					console.log('跳转成功:', res)
-				},
-				fail: (err) => {
-					console.error('跳转失败:', err)
-					uni.showToast({
-						title: '跳转失败',
-						icon: 'none',
-						duration: 2000
-					})
-				}
+				url: `/pages/recommend/user-dynamics?userId=${this.userId}`
 			})
 		},
 		
 		// 查看动态详情
-		viewDynamicDetail(item, index) {
-			console.log('=== 点击动态详情 ===')
-			console.log('传入的 item:', item)
-			console.log('传入的 index:', index)
-			console.log('dynamicList:', this.dynamicList)
-			
-			// 如果 item 无效,尝试从列表中根据索引获取
-			if (!item && typeof index === 'number' && this.dynamicList && this.dynamicList[index]) {
-				item = this.dynamicList[index]
-				console.log('从列表中获取 item:', item)
-			}
-			
-			if (!item) {
-				console.error('动态项为空,无法获取')
+		viewDynamicDetail(item) {
+			if (!item || !item.dynamicId) {
+				console.error('动态项无效:', item)
 				uni.showToast({
-					title: '动态信息为空',
+					title: '动态信息无效',
 					icon: 'none'
 				})
 				return
 			}
-			
-			// 尝试多种可能的字段名
-			const dynamicId = item.dynamicId || item.id || item.dynamic_id
-			console.log('提取的 dynamicId:', dynamicId)
-			console.log('完整的 item 对象:', JSON.stringify(item))
-			
-			if (!dynamicId) {
-				console.error('动态ID无效,item 内容:', item)
+			uni.navigateTo({
+				url: `/pages/plaza/detail?dynamicId=${item.dynamicId}`
+			})
+		},
+		
+		// 查看动态评论
+		viewDynamicComments(item) {
+			if (!item || !item.dynamicId) {
+				console.error('动态项无效:', item)
 				uni.showToast({
-					title: '动态ID无效',
+					title: '动态信息无效',
 					icon: 'none'
 				})
 				return
 			}
-			
-			const url = `/pages/plaza/detail?dynamicId=${dynamicId}`
-			console.log('准备跳转, url:', url)
 			uni.navigateTo({
-				url: url,
-				success: (res) => {
-					console.log('跳转成功:', res)
-				},
-				fail: (err) => {
-					console.error('跳转失败:', err)
-					uni.showToast({
-						title: '跳转失败: ' + (err.errMsg || '未知错误'),
-						icon: 'none',
-						duration: 2000
-					})
-				}
+				url: `/pages/plaza/detail?dynamicId=${item.dynamicId}&scrollToComment=true`
 			})
 		},
-		
+
 		// 预览媒体
 		previewMedia(urls, index) {
 			if (!urls || urls.length === 0) return
@@ -444,8 +382,8 @@ export default {
 		// 头像加载错误
 		onAvatarError() {
 			if (this.userInfo) {
-				this.userInfo.avatar = 'http://115.190.125.125:9001/static-images/close.png'
-				this.userInfo.avatarUrl = 'http://115.190.125.125:9001/static-images/close.png'
+				this.userInfo.avatar = '/static/close.png'
+				this.userInfo.avatarUrl = '/static/close.png'
 			}
 		},
 		
@@ -648,15 +586,6 @@ export default {
 .section-more {
 	font-size: 24rpx;
 	color: #E91E63;
-	cursor: pointer;
-	transition: opacity 0.2s;
-	padding: 8rpx 12rpx;
-	-webkit-tap-highlight-color: transparent;
-	user-select: none;
-}
-
-.section-more:active {
-	opacity: 0.6;
 }
 
 .dynamic-list {
@@ -670,16 +599,6 @@ export default {
 	background: #F8F9FA;
 	border-radius: 12rpx;
 	border: 1rpx solid #E0E0E0;
-	cursor: pointer;
-	transition: background-color 0.2s;
-	position: relative;
-	z-index: 1;
-	-webkit-tap-highlight-color: transparent;
-}
-
-.dynamic-item:active {
-	background: #E8E8E8;
-	opacity: 0.8;
 }
 
 .dynamic-content {
@@ -722,9 +641,6 @@ export default {
 	height: 200rpx;
 	border-radius: 8rpx;
 	background: #F5F5F5;
-	pointer-events: none;
-	-webkit-user-select: none;
-	user-select: none;
 }
 
 .dynamic-info {

+ 17 - 53
LiangZhiYUMao/pages/settings/index.vue

@@ -5,61 +5,21 @@
 			<view class="back-btn" @click="goBack">
 				<text class="back-icon">←</text>
 			</view>
-			<text class="header-title">设置</text>
+			<text class="header-title">账户设置</text>
 			<view class="placeholder"></view>
 		</view>
 
 		<scroll-view scroll-y class="content">
-			<!-- 设置列表 -->
-			<view class="settings-list">
-			<view class="setting-item" @click="goToPage('bindPhone')">
-				<view class="item-left">
-					<text class="item-icon">📱</text>
-					<text class="item-text">绑定手机号</text>
-				</view>
-				<view class="item-right">
-					<text class="item-value">{{ phoneNumber }}</text>
-					<!-- <text class="item-arrow">›</text> -->
-				</view>
-			</view>
-
-			<view class="setting-item" @click="goToPage('bindIdCard')">
-				<view class="item-left">
-					<text class="item-icon">🪪</text>
-					<text class="item-text">绑定身份证号</text>
-				</view>
-				<view class="item-right">
-					<text class="item-value">{{ idCardNumber }}</text>
-					<text class="item-arrow">›</text>
-				</view>
-			</view>
-
-			<view class="setting-item" @click="goToPage('educationVerify')">
-				<view class="item-left">
-					<text class="item-icon">🎓</text>
-					<text class="item-text">学历认证</text>
-				</view>
-				<view class="item-right">
-					<text class="item-value">{{ educationStatus }}</text>
-					<text class="item-arrow">›</text>
-				</view>
-			</view>
-
-<!--			<view class="setting-item" @click="goToPage('accountSecurity')">-->
-<!--					<view class="item-left">-->
-<!--						<text class="item-icon">🛡️</text>-->
-<!--						<text class="item-text">账号与安全</text>-->
-<!--					</view>-->
-<!--					<view class="item-right">-->
-<!--						<text class="item-value">已保护</text>-->
-<!--						<text class="item-arrow">›</text>-->
-<!--					</view>-->
-<!--				</view>-->
-
-<!--				<view class="setting-item" @click="goToPage('privacy')">-->
-<!--					<view class="item-left">-->
-<!--						<text class="item-icon">🔒</text>-->
-<!--						<text class="item-text">隐私设置</text>-->
+			<!-- 账号安全分组 -->
+			<view class="group-block">
+				<text class="group-title">账户安全</text>
+				<view class="card">
+					<view class="setting-item" @click="goToPage('changePassword')">
+						<view class="item-left">
+							<text class="item-icon shield">🛡️</text>
+							<text class="item-text">修改密码</text>
+						</view>
+						<text class="item-arrow">›</text>
 <!--					</view>-->
 <!--					<text class="item-arrow">›</text>-->
 <!--				</view>-->
@@ -90,7 +50,11 @@
 			return {
 				phoneNumber: '未绑定',
 				idCardNumber: '未绑定',
-				educationStatus: '未认证'
+				educationStatus: '未认证',
+				notifyNewMessage: true,
+				notifyMatchSuccess: true,
+				notifySystem: true,
+				darkMode: false
 			}
 		},
 		onLoad() {
@@ -137,7 +101,7 @@
 				return idCard.substring(0, 6) + '********' + idCard.substring(idCard.length - 4)
 			},
 			
-		goToPage(page) {
+			goToPage(page) {
 			console.log('跳转页面:', page)
 			
 			if (page === 'bindIdCard') {