Explorar el Código

修改 我的页面 修复部分bug

XSXS hace 2 semanas
padre
commit
dfbb0c7f82
Se han modificado 40 ficheros con 755 adiciones y 546 borrados
  1. 2 1
      pages.json
  2. 1 1
      pages/crowdFunding/components/productSpecifications/productSpecifications.vue
  3. 23 10
      pages/crowdFunding/crowdfundingDetails.vue
  4. 81 11
      pages/crowdFunding/customerService.vue
  5. 2 2
      pages/crowdFunding/discussionArea.vue
  6. 1 1
      pages/crowdFunding/orderList.vue
  7. 1 1
      pages/crowdFunding/projectUpdateDetails.vue
  8. 193 183
      pages/my/creativeExpert.vue
  9. 234 266
      pages/my/my.scss
  10. 128 70
      pages/my/my.vue
  11. 51 0
      pages/my/setting.vue
  12. BIN
      static/home/crowdFunding.png
  13. BIN
      static/icon/level_0.png
  14. BIN
      static/icon/level_1.png
  15. BIN
      static/icon/level_2.png
  16. BIN
      static/icon/level_3.png
  17. BIN
      static/icon/level_4.png
  18. BIN
      static/icon/level_5.png
  19. BIN
      static/image/1080x1882.9.png
  20. BIN
      static/me/InitiateCrowdfunding.png
  21. BIN
      static/me/box-bg-1.png
  22. BIN
      static/me/box-bg-2.png
  23. BIN
      static/me/box-bg-3.png
  24. BIN
      static/me/creativeExpert (2).png
  25. BIN
      static/me/creativeExpert (5).png
  26. BIN
      static/me/creativeExpert _vip.png
  27. BIN
      static/me/creativeExpert-text.png
  28. BIN
      static/me/creativeExpert_top_bg.png
  29. BIN
      static/me/fenxiang.png
  30. BIN
      static/me/shezhi.png
  31. BIN
      static/me/theme1.jpg
  32. BIN
      static/me/theme2.jpg
  33. BIN
      static/me/theme3.jpg
  34. BIN
      static/me/theme4.jpg
  35. BIN
      static/me/theme5.jpg
  36. BIN
      static/me/vip-box.png
  37. BIN
      static/me/wallet-box (2).png
  38. BIN
      static/me/wallet-box1.png
  39. BIN
      static/me/xiugai.png
  40. 38 0
      utils/copy.js

+ 2 - 1
pages.json

@@ -533,7 +533,8 @@
 			"path" : "pages/my/creativeExpert",
 			"style" : 
 			{
-				"navigationBarTitleText" : ""
+				"navigationBarTitleText" : "",
+				"navigationStyle": "custom"
 			}
 		}
 	],

+ 1 - 1
pages/crowdFunding/components/productSpecifications/productSpecifications.vue

@@ -271,7 +271,7 @@ export default {
       }
 
       .spec-list {
-        display: flex;
+        display: grid;
         flex-direction: row;
         gap: 18rpx;
 

+ 23 - 10
pages/crowdFunding/crowdfundingDetails.vue

@@ -37,9 +37,11 @@
 			<view class="section project-card">
 				<view class="project-title">{{ detail.title }}</view>
 				<view class="progress-bar-wrap">
-					<uv-line-progress height="8rpx" :showText="false" :percentage="detail.progress"
+					<uv-line-progress height="8rpx" :showText="false"
+						:percentage="(detail.current_amount / detail.goal_amount * 100).toFixed(2)"
 						inactiveColor="#F0F0F0" activeColor="#ACF934"></uv-line-progress>
-					<view class="progress-percent">{{ detail.progress + '%' }}</view>
+					<view class="progress-percent">{{ (detail.current_amount / detail.goal_amount * 100).toFixed(2) + '%'
+						}}</view>
 				</view>
 				<view class="project-stats">
 					<view class="stat-block">
@@ -130,17 +132,20 @@
 
 			<!-- 风险说明 -->
 			<view class="section risk-section">
-				<view class="risk-row">
+				<view class="risk-row"  @click="goWeb('https://e.zhichao.art/web/refund.php', '退款说明')">
 					<view class="risk-title">退款政策</view>
 					<view class="risk-more  ">查看更多
 						<image src="@/static/crowdFunding/right.png" class="risk-more-icon" />
 					</view>
 				</view>
 				<view class="risk-desc">众筹结束前最后1个小时无法申请退款</view>
-				<view class="risk-row risk-row-border">
+				<view class="risk-row risk-row-border"  @click="goWeb('https://e.zhichao.art/web/crowdtips.php', '风险提示')">
 					<view class="risk-title">风险提示</view>
+					<view class="risk-more  ">查看更多
+						<image src="@/static/crowdFunding/right.png" class="risk-more-icon" />
+					</view>
 				</view>
-				<view class="risk-content">
+				<view class="risk-content" >
 					<view>1. 您参与众筹是支持将创意变为现实的过程,而不是直接的商品交易,因此存在一定风险。请您根据自己的判断选择,支持众筹项目。</view>
 					<view>2. 众筹存在于发起人与支持者之间,摩点作为第三方平台,提供网络空间、技术支持等服务。众筹的回报产品和承诺由发起人负责。</view>
 				</view>
@@ -276,7 +281,7 @@ export default {
 		onSpecConfirm(selectedSpec) {
 			uni.navigateTo({
 				url: '/pages/crowdFunding/orderConfirm',
-				success: function(res) {
+				success: function (res) {
 					// 通过 eventChannel 向被打开页面传送数据
 					res.eventChannel.emit('acceptDataFromOpener', { selectedSpec: selectedSpec, detail: this.detail });
 				}.bind(this)
@@ -414,8 +419,13 @@ export default {
 					this.commentList = [];
 				}
 			});
-
+			
 		},
+		goWeb(url, title) {
+		uni.navigateTo({
+			url: `/pages/webview/index?url=${encodeURIComponent(url)}&title=${encodeURIComponent(title)}`
+		})
+	},
 		processingDataDetails(data) {
 			this.detail = data;
 			// 确保 image_list 始终是一个数组
@@ -426,7 +436,7 @@ export default {
 				poster: data.main_image,
 				src: data.video_url,
 			}] : [];
-
+			
 			const imageItems = data.image_list.map(v => ({
 				type: 'image',
 				src: v
@@ -454,7 +464,9 @@ export default {
 				this.detail.daysRemaining = 0;
 			}
 			// 计算进度
-			this.detail.progress = data.current_amount / data.goal_amount
+			this.detail.progress = (data.current_amount / data.goal_amount * 100).toFixed(2)
+			console.log(this.detail.progress, "进度");
+
 			if (Number.isNaN) this.detail.progress = 0
 			this.mediaList = [...videoItem, ...imageItems];
 
@@ -487,7 +499,8 @@ export default {
 		// 获取id
 		this.projectId = options.id || null;
 		this.getDetail();
-	}
+	},
+	
 }
 </script>
 

+ 81 - 11
pages/crowdFunding/customerService.vue

@@ -25,7 +25,7 @@
 		<scroll-view class="cs-chat-list" :scroll-y="true" :scroll-with-animation="true"
 			:scroll-into-view="scrollToView" :style="{
 				paddingBottom: (keyboardHeight ? keyboardHeight + 100 : 100) + 'rpx',
-			}">
+			}" @refresherrefresh="loadMoreHistory" :refresher-enabled="true" :refresher-triggered="triggered" enable-back-to-top ref="scrollView">
 			<view v-for="(msg, idx) in chatList" :key="msg.id">
 				<template v-if="msg.message_type == 1 || msg.message_type == 2 || msg.message_type == 3 || msg.message_type == 4 || msg.message_type == 5 ">
 
@@ -184,15 +184,19 @@ export default {
 			orderCardHeight: 260,
 			showEmojiPanel: false,
 			showDropdown: false,
-			emojiList: ["😀", "😁", "😂", "🤣", "😃", "😄", "😅", "😆", "😉", "😊", "😋", "😎", "😍", "😘", "🥰", "😗", "😙", "😚", "🙂", "🤗", "🤩", "🤔", "🤨", "😐", "😑", "😶", "🙄", "😏", "😣", "😥", "😮", "🤐", "😯", "😪", "😫", "🥱", "😴", "😌", "😛", "😜", "😝", "🤤", "😒", "😓", "😔", "😕", "🙃", "🤑", "😲", "☹️", "🙁", "😖", "😞", "😟", "😤", "😢", "😭", "😦", "😧", "😨", "😩", "🤯", "😬", "😰", "😱", "🥵", "🥶", "😳", "🤪", "😵", "😡", "😠", "🤬", "😷", "🤒", "🤕", "🤢", "🤮", "🥴", "😇", "🥳", "🥺", "🤠", "😈", "👿", "👹", "👺", "💀", "👻", "👽", "🤖", "💩", "😺", "😸", "😹", "😻", "😼", "😽", "🙀", "😿", "😾", "🙈", "🙉", "🙊", "💋", "💌", "💘", "💝", "💖", "💗", "💓", "💞", "💕", "💟", "❣️", "💔", "❤️", "🧡", "💛", "💚", "💙", "💜", "🤎", "🖤", "🤍", "💯", "💢", "💥", "💫", "💦", "💨", "🕳️", "💣", "💬", "👋", "🤚", "🖐️", "✋", "🖖", "👌", "🤏", "✌️", "🤞", "🤟", "🤘", "🤙", "👈", "👉", "👆", "🖕", "👇", "☝️", "👍", "👎", "✊", "👊", "🤛", "🤜", "👏", "🙌", "👐", "🤲", "🙏", "✍️", "💅", "🤳", "💪", "🦾", "🦵", "🦶", "👂", "👃", "🧠", "🦷", "🦴", "��", "👁️", "👅", "👄"],
+			emojiList: ["😀", "😁", "😂", "🤣", "😃", "😄", "😅", "😆", "😉", "😊", "😋", "😎", "😍", "😘", "🥰", "😗", "😙", "😚", "🙂", "🤗", "🤩", "🤔", "🤨", "😐", "😑", "😶", "🙄", "😏", "😣", "😥", "😮", "🤐", "😯", "😪", "😫", "🥱", "😴", "😌", "😛", "😜", "😝", "🤤", "😒", "😓", "😔", "😕", "🙃", "🤑", "😲", "☹️", "🙁", "😖", "😞", "😟", "😤", "😢", "😭", "😦", "😧", "😨", "😩", "🤯", "😬", "😰", "😱", "🥵", "🥶", "😳", "🤪", "😵", "😡", "😠", "🤬", "😷", "🤒", "🤕", "🤢", "🤮", "🥴", "😇", "🥳", "🥺", "🤠", "😈", "👿", "👹", "👺", "💀", "👻", "👽", "🤖", "💩", "😺", "😸", "😹", "😻", "😼", "😽", "🙀", "😿", "😾", "🙈", "🙉", "🙊", "💋", "💌", "💘", "💝", "💖", "💗", "💓", "💞", "💕", "💟", "❣️", "💔", "❤️", "🧡", "💛", "💚", "💙", "💜", "🤎", "🖤", "🤍", "💯", "💢", "💥", "💫", "💦", "💨", "🕳️", "💣", "💬", "👋", "🤚", "🖐️", "✋", "🖖", "👌", "🤏", "✌️", "🤞", "🤟", "🤘", "🤙", "👈", "👉", "👆", "🖕", "👇", "☝️", "👍", "👎", "✊", "👊", "🤛", "🤜", "👏", "🙌", "👐", "🤲", "🙏", "✍️", "💅", "🤳", "💪", "🦾", "🦵", "🦶", "👂", "👃", "🧠", "🦷", "🦴", "", "👁️", "👅", "👄"],
 			conversationId: 0,
 			creatorId: 0,
 			zcId: 0,
 			lastMsgId: 0,
-			pageSize: 20,
+			pageSize: 5,
 			userInfo: {},
 			showRealInput: false, // 控制显示真输入框还是假输入框
 			orderCardData: {},
+			page: 1, // 当前页码
+			hasMoreHistory: true, // 是否还有更多历史消息
+			triggered: false, // 是否触发下拉刷新
+			messageIds: new Set(), // 保存已查询到的消息 ID
 		};
 	},
 	onLoad(options) {
@@ -215,8 +219,8 @@ export default {
 		// 轮询获取消息
 		startPolling() {
 			this.clearPolling();
-			this.pollTimer = setInterval(() => this.fetchMessages(false), 5000);
-			this.fetchMessages(false);
+			this.pollTimer = setInterval(() => this.fetchMessages(false), 5 * 1000);
+			// this.fetchMessages(false);
 		},
 		clearPolling() {
 			if (this.pollTimer) {
@@ -236,7 +240,7 @@ export default {
 					conversation_id: this.conversationId,
 					last_id: isAppend ? this.lastMsgId : 0,
 					page_size: this.pageSize,
-					// page_size: 40,
+					page: 1,
 					zc_id: this.zcId
 				},
 				success: (res) => {
@@ -267,7 +271,10 @@ export default {
 						const tempMsgs = this.chatList.filter(m => m.uploading);
 						let newList;
 						if (isAppend) {
-							newList = [...msgList, ...this.chatList.filter(m => !m.uploading), ...tempMsgs];
+							// 轮询时只追加新消息,不覆盖历史消息
+							const newMsgs = msgList.filter(msg => !this.messageIds.has(msg.id));
+							newMsgs.forEach(msg => this.messageIds.add(msg.id));
+							newList = [...this.chatList.filter(m => !m.uploading), ...newMsgs, ...tempMsgs];
 						} else {
 							newList = [...msgList, ...tempMsgs];
 						}
@@ -290,6 +297,69 @@ export default {
 				}
 			});
 		},
+		// 加载更多历史消息
+		loadMoreHistory() {
+			// 立即开启动画,防止动画失效
+			this.triggered = true;
+			if (!this.hasMoreHistory) {
+				this.triggered = false;
+				return;
+			}
+			this.page++;
+			uni.request({
+				url: this.$apiHost + '/App/kefuGetMessages',
+				method: 'GET',
+				data: {
+					uuid: getApp().globalData.uuid,
+					skey: getApp().globalData.skey,
+					creator_id: this.creatorId,
+					conversation_id: this.conversationId,
+					page_size: this.pageSize,
+					page: this.page,
+					zc_id: this.zcId
+				},
+				success: (res) => {
+					if (res.data && res.data.success === 'yes' && res.data.data) {
+						const { messages } = res.data.data;
+						if (messages && messages.length > 0) {
+							const msgList = messages.map(msg => {
+								let returnValue = {
+									id: msg.id,
+									content: msg.content,
+									type: msg.from_type === 1 ? 'user' : 'customerService',
+									avatar: msg.from_type === 1 ? (this.userInfo.avatar || '/static/makedetail/characterProfilePicture.png') : '/static/home/avator.png',
+									time: msg.create_time,
+									message_type: msg.message_type,
+									media_url: msg.media_url,
+									progress: msg.progress,
+									uploading: msg.uploading
+								}
+								if (msg.message_type == 5) {
+									returnValue.order = JSON.parse(msg.content);
+								}
+								return returnValue;
+							});
+							msgList.forEach(msg => this.messageIds.add(msg.id));
+							this.chatList = [...msgList, ...this.chatList];
+						} else {
+							this.hasMoreHistory = false;
+						}
+					} else {
+						this.hasMoreHistory = false;
+					}
+					// 数据渲染后再关闭动画
+					this.$nextTick(() => {
+						this.triggered = false;
+					});
+				},
+				fail: () => {
+					uni.showToast({ title: '加载历史消息失败', icon: 'none' });
+					this.$nextTick(() => {
+						this.triggered = false;
+					});
+				}
+			});
+		},
 		// 发送消息
 		sendMsg(message_type) {
 
@@ -453,13 +523,13 @@ export default {
 					try {
 						if (sourceType === 'camera') {
 							hasPermission = await permission.request(permission.PermissionType.CAMERA, {
-								title: '“萌创星球”想访问你的相机',
-								describe: '萌创星球想访问您的摄像头,便于拍摄获取图片来与其他用户进行交流'
+								title: '"萌创星球"想访问你的相机',
+								describe: '"萌创星球"想访问您的摄像头,便于拍摄获取图片来与其他用户进行交流'
 							});
 						} else {
 							hasPermission = await permission.request(permission.PermissionType.PHOTO_LIBRARY, {
-								title: '“萌创星球”想访问你的照片图库',
-								describe: '萌创星球想访问您本地照片图库,便于获取图片来与其他用户进行交流'
+								title: '"萌创星球"想访问你的照片图库',
+								describe: '"萌创星球"想访问您本地照片图库,便于获取图片来与其他用户进行交流'
 							});
 						}
 						if (!hasPermission) {

+ 2 - 2
pages/crowdFunding/discussionArea.vue

@@ -5,9 +5,9 @@
 
 		<!-- 项目卡片 -->
 		<view class="project-card">
-			<image class="project-img" src="@/static/crowdFunding/top-img.png" />
+			<image class="project-img" :src="articleInfo.main_image" />
 			<view class="project-info">
-				<view class="project-title two-omit">【Woh】灯塔 塔罗牌 治愈风泛伟特系伟特系伟特系</view>
+				<view class="project-title two-omit">{{ articleInfo.title }}</view>
 			</view>
 		</view>
 		<view class="tabs">

+ 1 - 1
pages/crowdFunding/orderList.vue

@@ -7,7 +7,7 @@
       </view>
       <view class="navbar-center">
         <view class="navbar-title one-omit">
-          时间是一种解药时间是一种解药时间是一种解药时间是一种解药时间是一种解药
+        订单
         </view>
       </view>
       <view class="navbar-right" @click="showActionSheet">

+ 1 - 1
pages/crowdFunding/projectUpdateDetails.vue

@@ -11,7 +11,7 @@
         <image src="@/static/crowdFunding/share.png" mode="widthFix"></image>
       </view>
     </view>
-    <image class="top-img" src="@/static/crowdFunding/top-img.png" mode="widthFix"></image>
+    <image class="top-img" :src="datails.image" mode="widthFix"></image>
     <view class="update-info">
       <view class="update-title-row">
         <text class="update-title">· 第{{ datails.numb }}次更新</text>

+ 193 - 183
pages/my/creativeExpert.vue

@@ -1,205 +1,215 @@
 <template>
 	<view class="creative-expert-page">
-		<!-- 等级进度 -->
-		<view class="level-progress-section">
-			<view class="current-level">
-				<image class="level-icon" src="/static/creative/level1.png" />
-				<text class="level-text">Lv.1</text>
-			</view>
-			<view class="exp-bar-wrap">
-				<view class="exp-bar-bg">
-					<view class="exp-bar" :style="{ width: '20%' }"></view>
-				</view>
-				<view class="exp-info">
-					升级到下个等级还需
-					<text class="exp-num">280</text>点经验
-				</view>
+		<div class="navbar">
+			<view class="navbar-left">
+				<image @click="goBack()" class="back" src="../../static/vip/hy_icon_jiantou.png"></image>
+
 			</view>
-			<view class="level-labels">
-				<text class="level-label">Lv.1</text>
-				<text class="level-label next">Lv.2</text>
+			<view class="navbar-center">
+				创意达人值说明
 			</view>
-			<view class="join-btn">会员加速中</view>
-		</view>
+			<view class="navbar-right">
 
-		<!-- 创意达人值说明 -->
-		<view class="section-title">创意达人值说明</view>
-		<view class="desc-block">
-			创意达人值是萌创星球给用户提供的一个创意设计等级认证说明,代表着用户运营型社团创作能力的直观体现。
-			<view class="desc-tip">在达标属于摸索力和创造力的环节上,每一个闪光的方案都值得被看见,每一次大胆的尝试都值得被徽章收藏。</view>
-			星球的星灵们会根据您的作品数量、作品点赞数、作品评论数、未展示及在作一作品的数量等多维度作为创意达人值的考核标准。
-			创意达人值越高,创意达人等级也会越高,不同的创意达人等级会获得专属徽标和权益。每个等级都有自己的专属徽标和权益。
-		</view>
-
-		<!-- 等级表格 -->
-		<view class="section-title">创意达人等级专属徽标&等级</view>
-		<view class="level-table">
-			<view class="table-header">
-				<view class="th">对应展示</view>
-				<view class="th">等级</view>
-				<view class="th">活跃值</view>
 			</view>
-			<view class="table-row" v-for="row in levelRows" :key="row.level">
-				<view class="td">
-					<image :src="row.icon" class="level-table-icon" />
+		</div>
+		<view class="progress-box">
+			<view class="progress-box-title">
+				我的当前等级
+			</view>
+			<view class="progress-box-level">
+				<image v-if="myinfo.my_level || myinfo.my_level == 0"
+					:src="`../../static/icon/level_${myinfo.my_level}.png`" class="level-icon" />
+			</view>
+			<view class="progress-box-title" style="text-align: center;">
+				升级到下个等级还需{{ myinfo.level_remaining }}点经验
+			</view>
+			<view class="progress-box-level-progress">
+				<view class="progress-bg">
+					<view class="progress-bar" :style="{ width: myinfo.level_progress + '%' }"></view>
 				</view>
-				<view class="td">{{ row.level }}</view>
-				<view class="td">{{ row.active }}</view>
+			</view>
+			<view class="progress-box-vip">
+				<view>
+					Lv{{ myinfo.my_level }}
+				</view>
+				<image v-if="myinfo.is_vip || true" src="../../static/me/creativeExpert _vip.png" mode="widthFix"
+					class="creativeExpert_vip" />
+				<view>
+					Lv{{ myinfo.my_level + 1 }}
+				</view>
+
 			</view>
 		</view>
+		<image src="../../static/me/creativeExpert-text.png" mode="widthFix" class="creativeExpert-text" />
 	</view>
 </template>
 
 <script>
-	export default {
-		data() {
-			return {
-				levelRows: [
-					{ icon: '/static/creative/level1.png', level: 'Lv.1', active: '未解锁' },
-					{ icon: '/static/creative/level2.png', level: 'Lv.2', active: '未解锁' },
-					{ icon: '/static/creative/level3.png', level: 'Lv.3', active: '未解锁' },
-					{ icon: '/static/creative/level4.png', level: 'Lv.4', active: '未解锁' },
-					{ icon: '/static/creative/level5.png', level: 'Lv.5', active: '未解锁' },
-				]
-			}
-		},
-		methods: {
-			
+export default {
+	data() {
+		return {
+			myinfo: {
+				level_remaining: 0,
+				level_total: 0,
+				level_progress: 0
+			},
+			grade: [[0, 99], [100, 799], [800, 1999], [2000, 3999], [4000, 8999], [9000, 9999999]]
+
+		}
+	},
+	onLoad() {
+		this.getData()
+	},
+	methods: {
+		getData() {
+			uni.request({
+				url: this.$apiHost + "/User/getinfo",
+				data: {
+					uuid: getApp().globalData.uuid,
+					skey: getApp().globalData.skey,
+				},
+				header: {
+					"content-type": "application/json",
+					sign: getApp().globalData.headerSign,
+				},
+				success: (res) => {
+					if (res.data) {
+						// this.myinfo = res.data;
+						let level_data = this.grade[res.data.my_level]
+						this.myinfo.is_vip = res.data.is_vip
+						this.myinfo.my_level = res.data.my_level
+						this.myinfo.level_remaining = level_data[1] - res.data.num_jinyan
+						this.myinfo.level_total = level_data[1] - level_data[0]
+						this.myinfo.level_progress = ((res.data.num_jinyan - level_data[0]) / this.myinfo.level_total).toFixed(4) * 100
+					}
+				},
+				complete: (com) => {
+				},
+				fail: (e) => {
+					console.log("----e:", e);
+				},
+			});
 		}
 	}
+}
 </script>
 
-<style scoped>
+<style scoped lang="scss">
 .creative-expert-page {
-	background: #181a1f;
+	background: url('../../static/me/creativeExpert_top_bg.png') top center / 100% auto no-repeat #1f1f1f;
 	min-height: 100vh;
 	color: #fff;
-	padding-bottom: 40rpx;
-}
-.level-progress-section {
-	background: #23242a;
-	border-radius: 0 0 32rpx 32rpx;
-	padding: 48rpx 32rpx 32rpx 32rpx;
-	text-align: center;
-	position: relative;
-}
-.current-level {
-	display: flex;
-	align-items: center;
-	justify-content: center;
-	margin-bottom: 16rpx;
-}
-.level-icon {
-	width: 80rpx;
-	height: 80rpx;
-	margin-right: 12rpx;
-}
-.level-text {
-	font-size: 36rpx;
-	font-weight: bold;
-	color: #ffb86c;
-}
-.exp-bar-wrap {
-	margin: 24rpx 0 8rpx 0;
-}
-.exp-bar-bg {
-	width: 100%;
-	height: 16rpx;
-	background: #2d2e36;
-	border-radius: 8rpx;
-	overflow: hidden;
-}
-.exp-bar {
-	height: 100%;
-	background: linear-gradient(90deg, #ffb86c 0%, #ffe7b2 100%);
-	border-radius: 8rpx;
-}
-.exp-info {
-	font-size: 24rpx;
-	color: #fff;
-	margin-top: 8rpx;
-}
-.exp-num {
-	color: #ffb86c;
-	font-weight: bold;
-}
-.level-labels {
-	display: flex;
-	justify-content: space-between;
-	margin-top: 8rpx;
-}
-.level-label {
-	font-size: 24rpx;
-	color: #ffb86c;
-}
-.level-label.next {
-	color: #fff;
-}
-.join-btn {
-	margin: 24rpx auto 0 auto;
-	width: 320rpx;
-	height: 56rpx;
-	background: linear-gradient(90deg, #ffb86c 0%, #ffe7b2 100%);
-	color: #23242a;
-	border-radius: 32rpx;
-	font-size: 28rpx;
-	font-weight: bold;
-	display: flex;
-	align-items: center;
-	justify-content: center;
-}
-.section-title {
-	font-size: 30rpx;
-	font-weight: bold;
-	color: #ffb86c;
-	margin: 40rpx 0 16rpx 32rpx;
-}
-.desc-block {
-	background: #23242a;
-	border-radius: 24rpx;
-	margin: 0 32rpx;
-	padding: 32rpx 24rpx;
-	font-size: 26rpx;
-	color: #fff;
-	line-height: 1.8;
-}
-.desc-tip {
-	color: #ffe7b2;
-	margin: 16rpx 0;
-	font-size: 26rpx;
-}
-.level-table {
-	background: #23242a;
-	border-radius: 24rpx;
-	margin: 0 32rpx;
-	margin-top: 24rpx;
-	padding: 24rpx 0;
-}
-.table-header, .table-row {
-	display: flex;
-	align-items: center;
-	padding: 0 24rpx;
-}
-.table-header {
-	font-size: 26rpx;
-	color: #ffe7b2;
-	font-weight: bold;
-	border-bottom: 2rpx solid #2d2e36;
-	height: 60rpx;
-}
-.th, .td {
-	flex: 1;
-	text-align: center;
-}
-.level-table-icon {
-	width: 56rpx;
-	height: 56rpx;
-	vertical-align: middle;
-}
-.table-row {
-	font-size: 26rpx;
-	color: #fff;
-	height: 72rpx;
-	border-bottom: 1rpx solid #23242a;
+	padding: 0 28rpx;
+	width: 100vw;
+	box-sizing: border-box;
+
+	.navbar {
+		width: calc(100vw - 60rpx);
+		height: 100rpx;
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		padding: 0;
+		z-index: 99;
+		padding-top: var(--status-bar-height);
+
+		.navbar-center {
+			font-size: 36rpx;
+			font-weight: bold;
+			color: #fff;
+		}
+
+		// z-index: 99;
+		// padding-top: var(--status-bar-height);
+		.navbar-left {
+			width: 50rpx;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+
+			.back {
+				width: 32rpx;
+				height: 32rpx;
+				opacity: 0.9;
+			}
+
+		}
+
+		.navbar-right {
+			width: 50rpx;
+			height: 20rpx;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+
+		}
+	}
+
+	.progress-box {
+		height: 350rpx;
+		width: 100%;
+		padding: 0 18rpx;
+		padding-top: 42rpx;
+		padding-bottom: 26rpx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		flex-direction: column;
+
+		.progress-box-title {
+			width: 100%;
+		}
+
+
+
+		.creativeExpert_vip {
+			width: 234rpx;
+			height: 52rpx;
+		}
+
+		.progress-box-level-progress {
+			padding: 28rpx 22rpx 18rpx 22rpx;
+			width: 100%;
+		}
+
+		.progress-bg {
+			width: 100%;
+			height: 10rpx;
+			background: rgba(255, 255, 255, 0.3);
+			border-radius: 86rpx;
+
+			.progress-bar {
+				height: 10rpx;
+				background: #ACF934;
+				border-radius: 86rpx;
+				transition: width 0.6s ease-in-out;
+			}
+		}
+
+		.progress-box-vip {
+			display: flex;
+			align-items: flex-start;
+			justify-content: space-between;
+			width: 100%;
+			padding: 0 22rpx;
+			font-size: 24rpx;
+			color: #ACF934;
+		}
+	}
+
+	.progress-box-level {
+		padding-top: 28rpx;
+		padding-bottom: 56rpx;
+	}
+
+	.level-icon {
+		width: 180rpx;
+		height: 80rpx;
+
+	}
+
+	.creativeExpert-text {
+		width: 100%;
+	}
 }
 </style>

+ 234 - 266
pages/my/my.scss

@@ -13,222 +13,20 @@ page {
 .topBody {
   width: 750rpx;
 }
-.header1 {
-  display: flex;
-  flex-direction: row;
-  justify-content: flex-start;
-  align-items: flex-start;
-  width: 750rpx;
-  height: 420rpx;
-  position: relative;
-  z-index: 10;
-  position: relative;
-  .topBg {
-    width: 750rpx;
-    height: 250rpx;
-    background: #90d369;
-    border-radius: 0 0 50% 50% / 0 0 20% 20%;
-    z-index: 0;
-    position: absolute;
-  }
-  /* 新增设置按钮 */
-  .settingBtn {
-    position: absolute;
-    top: 24rpx;
-    right: 30rpx;
-    z-index: 11;
-    width: 48rpx;
-    height: 48rpx;
-    /* 新增点击态 */
-    &:active {
-      opacity: 0.7;
-      transform: scale(0.95);
-    }
-    image {
-      width: 100%;
-      height: 100%;
-    }
-  }
-  .top_num {
-    position: absolute;
-    top: 24rpx; // 垂直对齐设置按钮
-    right: 98rpx; // 30+48+20=98 预留按钮空间
-    display: flex;
-    flex-direction: row;
-    justify-content: flex-end;
-    align-items: center;
-    z-index: 10;
-    .num_1,
-    .num_2 {
-      display: flex;
-      flex-direction: row;
-      align-items: center;
-      justify-content: center;
-      background: rgba(255, 255, 255, 0.8);
-      border-radius: 30rpx;
-      padding: 10rpx 20rpx;
-      margin-left: 20rpx;
-      .num_1,
-      .num_2 {
-        margin-left: 10rpx; // 缩小间距
-        padding: 8rpx 16rpx; // 调整内边距
-      }
-      text:first-child {
-        font-size: 24rpx;
-        line-height: 32rpx;
-        color: #666;
-      }
-      text:last-child {
-        font-size: 32rpx;
-        line-height: 32rpx;
-        font-weight: bold;
-        color: #333;
-      }
-    }
-  }
-  .infoBg {
-    display: flex;
-    flex-direction: column;
-    justify-content: flex-start;
-    align-items: stretch;
-    width: 690rpx;
-    height: 320rpx;
-    margin: 20rpx 30rpx;
-    margin-top: 90rpx;
-    background: rgba(255, 255, 255, 0.95);
-    backdrop-filter: blur(10px);
-    border-radius: 24rpx;
-    padding-top: calc(var(--status-bar-height) + 0rpx);
-    box-shadow: 0 8rpx 20rpx rgba(0, 0, 0, 0.1);
-    .top_row {
-      display: flex;
-      flex-direction: row;
-      justify-content: space-between;
-      align-items: flex-start;
-      padding: 20rpx 0;
-      .left {
-        padding-left: 30rpx;
-        padding-right: 0rpx;
-        width: 200rpx;
-        image {
-          width: 136rpx;
-          height: 136rpx;
-          border-radius: 100rpx;
-          border: solid 4rpx #fff;
-        }
-        .level {
-          display: flex;
-          flex-direction: row;
-          justify-content: center;
-          align-items: center;
-          height: 32rpx;
-          padding: 0 12rpx;
-          margin-left: 10rpx;
-          border-radius: 12rpx;
-          background: linear-gradient(90deg, #ff5869 0%, #f83881 100%);
-          font-size: 20rpx;
-          color: #fff;
-          font-weight: normal;
-        }
-      }
-      .right {
-        color: #333;
-        width: 500rpx;
-        font-size: 40rpx;
-        padding-top: 20rpx;
-        .nickname {
-          font-weight: bold;
-          margin-bottom: 0rpx;
-          display: flex;
-          flex-direction: row;
-          justify-content: flex-start;
-          align-items: center;
-          image {
-            width: 36rpx;
-            margin-left: 8rpx;
-            margin-right: 10rpx;
-          }
-          .level {
-            font-weight: normal;
-            font-size: 32rpx;
-          }
-        }
-        .tags_list {
-          .tag {
-            margin-right: 8rpx;
-          }
-        }
-        .join_date {
-          display: flex;
-          flex-direction: row;
-          justify-content: flex-start;
-          align-items: center;
-          font-size: 28rpx;
-          color: #333;
-          image {
-            width: 32rpx;
-            height: 32rpx;
-            margin-left: 6rpx;
-          }
-        }
-        .follow_info {
-          display: none;
-        }
-      }
-    }
-    .bottom_row {
-      padding: 20rpx 50rpx;
-      .intro_row {
-        display: flex;
-        flex-direction: row;
-        align-items: center;
-        margin-bottom: 20rpx;
-        .intro_text {
-          color: #999;
-          font-size: 28rpx;
-        }
-        .add_icon {
-          width: 28rpx;
-          margin-left: 10rpx;
-        }
-      }
-      .follow_info {
-        display: flex;
-        flex-direction: row;
-        align-items: center;
-        justify-content: flex-start;
-        .num {
-          font-size: 36rpx;
-          font-weight: bold;
-          color: #333;
-          margin-right: 8rpx;
-        }
-        .label {
-          font-size: 28rpx;
-          color: #999;
-        }
-        .separator {
-          width: 2rpx;
-          height: 24rpx;
-          background-color: #e5e5e5;
-          margin: 0 30rpx;
-        }
-      }
-    }
-  }
-  .title {
-    font-size: 34rpx;
-  }
-}
 
 .header {
-  padding: 20rpx;
-  padding-top: 48rpx;
-  background: linear-gradient(225deg, #cdff9f 0%, #acff5f 30%, #d0ffa5 100%);
-  min-height: 620rpx;
+  background-position: center;
+  background-size: auto 100%;
+  min-height: 800rpx;
   margin-bottom: calc(-60rpx + var(--status-bar-height));
-  &.header-isvip {
-    margin-bottom: calc(-240rpx + var(--status-bar-height));
+  .header-box {
+    width: 100%;
+    height: 100%;
+    min-height: 800rpx;
+    padding: 20rpx;
+    padding-top: 48rpx;
+    background-position: center bottom;
+    background-size: 100% auto;
   }
   .card-box {
     width: 100%;
@@ -257,8 +55,8 @@ page {
         // padding-top: 8rpx;
         background: url("../../static/me/car-top-bg-center.png") top center/
           146rpx 50rpx no-repeat;
-          padding-right: 24rpx;
-          padding-left: 24rpx;
+        padding-right: 24rpx;
+        padding-left: 24rpx;
         .hello-box {
           font-family: "CustomFont" !important;
           font-size: 36rpx;
@@ -338,7 +136,7 @@ page {
         }
       }
       .intro_row {
-        width: 100%; 
+        width: 100%;
         display: flex;
         align-items: center;
         padding-right: 24rpx;
@@ -351,7 +149,7 @@ page {
           font-family: "PingFang SC-Bold";
           font-weight: 400;
           padding-right: 0rpx;
-          ::v-deep.uv-text__value{
+          ::v-deep.uv-text__value {
             font-size: 26rpx !important;
           }
         }
@@ -360,11 +158,11 @@ page {
           margin-left: 10rpx;
         }
       }
-      .line{
+      .line {
         width: 100%;
         height: 2rpx;
-        background-color: #F2F6F2;
-        margin:10rpx 0;
+        background-color: #f2f6f2;
+        margin: 10rpx 0;
         margin-bottom: 20rpx;
       }
       .bom {
@@ -426,58 +224,228 @@ page {
             }
           }
         }
-        
       }
 
       .follow_info {
         // display: none;
       }
     }
+  }
 
-    .card-bom {
-      width: 100%;
-      height: 104rpx;
-      background: url("../../static/me/my-card-bom-bg.png") top center / 100%
-        auto;
-      position: absolute;
-      bottom: 0%;
-      left: 0;
-      padding: 0 28rpx;
-      padding-top: 20rpx;
-      box-sizing: border-box;
+  .benner-box {
+    .setUp-box {
       display: flex;
       align-items: center;
       justify-content: space-between;
-      transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-      box-shadow: 0 -2rpx 8rpx rgba(0, 0, 0, 0.05);
-      
-      &:active {
-        transform: scale(0.98);
-        box-shadow: 0 -1rpx 4rpx rgba(0, 0, 0, 0.05);
+      .my-box {
+        font-family: "CustomFont" !important;
+        font-size: 36rpx;
+        font-weight: 700;
+        color: #fff;
       }
+      .settingBtn-box {
+        width: 148rpx;
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
 
-      > image {
-        width: 44rpx;
-        height: 44rpx;
-        transition: all 0.3s ease;
+        image {
+          width: 64rpx;
+          height: 64rpx;
+        }
+      }
+    }
+    .profilePicture-box {
+      display: flex;
+      align-items: center;
+      justify-content: flex-start;
+      padding-top: 60rpx;
+      padding-bottom: 28rpx;
+      .avator {
+        width: 156rpx;
+        height: 156rpx;
+        margin-right: 16rpx;
+      }
+      .one-omit {
+        max-width: 400rpx;
+        font-size: 40rpx;
+        font-family: "PingFang SC-Bold";
+        font-weight: 400;
+        color: #fff;
+      }
+      .profilePicture-box-right{
+        image{
+          width: 80rpx; 
+          height: 38rpx;
+          margin-top: 10rpx;
+        }
       }
-      .content-box {
-        height: 100%;
+    }
+    .intro_row {
+      width: 100%;
+      display: flex;
+      align-items: center;
+      padding-right: 24rpx;
+      padding-left: 24rpx;
+      padding-top: 12rpx;
+      padding-bottom: 12rpx;
+      color: #fff;
+      .intro_text {
+        color: #fff;
+        font-size: 24rpx;
+        font-family: "PingFang SC-Bold";
+        font-weight: 400;
+        padding-right: 0rpx;
+        ::v-deep.uv-text__value {
+          font-size: 26rpx !important;
+        }
+      }
+      .add_icon {
+        width: 28rpx;
+        margin-left: 10rpx;
+      }
+    }
+    .label-box {
+      display: flex;
+      align-items: center;
+      .label-item {
+        background: rgba(255, 255, 255, 0.1);
+        border-radius: 12rpx;
+        border: 2rpx solid rgba(255, 255, 255, 0.1);
+        display: inline-block;
+        color: #fff;
+        font-size: 24rpx;
+        font-family: "PingFang SC-Bold";
+        font-weight: 400;
+        padding: 6rpx 16rpx;
+        margin-right: 10rpx;
+        image {
+          width: 30rpx;
+        }
+        &.sex-item {
+          border-radius: 50%;
+          width: 40rpx;
+          height: 40rpx;
+          display: inline-flex;
+          align-items: center;
+          justify-content: center;
+          padding: 0;
+          margin-right: 0;
+          margin-bottom: 0;
+          margin-right: 10rpx;
+        }
+      }
+    }
+
+    .follow_info {
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      max-width: 300rpx;
+      padding-bottom: 28rpx;
+      padding-top: 28rpx;
+      .follow-box {
         display: flex;
+        flex-direction: column;
         align-items: center;
-        color: #acf934;
-        transition: all 0.3s ease;
-        
-        image {
-          width: 34rpx;
-          height: 34rpx;
-          margin-right: 8rpx;
-          transition: all 0.3s ease;
+        justify-content: center;
+        text-align: center;
+      }
+      .num {
+        width: 100%;
+        font-size: 36rpx;
+        font-weight: bold;
+        color: #fff;
+      }
+      .label {
+        width: 100%;
+        font-size: 24rpx;
+        color: rgba(255, 255, 255, 0.5);
+      }
+      .separator {
+        width: 2rpx;
+        height: 24rpx;
+        background-color: #e5e5e5;
+        margin: 0 30rpx;
+      }
+    }
+    .bom-box {
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      .bom-item {
+        width: 218rpx;
+        height: 96rpx; 
+        border-radius: 16rpx;
+        border: 2rpx solid rgba(255, 255, 255, 0.1);
+        padding: 10rpx 18rpx;
+        background: url("../../static/me/box-bg-1.png") center center / 100% 100%;
+        &.bom-item2{
+          background: url("../../static/me/box-bg-2.png") center center / 100% 100%;
+        }
+        &.bom-item3{
+          background: url("../../static/me/box-bg-3.png") center center / 100% 100%;
+        }
+        .bom-item-title {
+          font-size: 24rpx;
+          color: #fff;
+        }
+        .bom-item-subtitle {
+          font-size: 20rpx;
+          color: rgba(255, 255, 255, 0.5);
         }
       }
     }
   }
 }
+
+.vip-box {
+  width: 100%;
+  height: 96rpx;
+  background: url("../../static/me/vip-box.png") center center / 100% auto;
+  padding: 0 28rpx;
+  box-sizing: border-box;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+  box-shadow: 0 -2rpx 8rpx rgba(0, 0, 0, 0.05);
+  margin-bottom: 20rpx;
+  &:active {
+    transform: scale(0.98);
+    box-shadow: 0 -1rpx 4rpx rgba(0, 0, 0, 0.05);
+  }
+  .vip-btn {
+    width: 122rpx;
+    height: 48rpx;
+    background: linear-gradient(354deg, #acf934 0%, #e8ffc3 100%);
+    border-radius: 28rpx;
+    font-size: 24rpx;
+    color: #1f1f1f;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+  }
+  > image {
+    width: 44rpx;
+    height: 44rpx;
+    transition: all 0.3s ease;
+  }
+  .content-box {
+    height: 100%;
+    display: flex;
+    align-items: center;
+    color: #acf934;
+    transition: all 0.3s ease;
+
+    image {
+      width: 34rpx;
+      height: 34rpx;
+      margin-right: 8rpx;
+      transition: all 0.3s ease;
+    }
+  }
+}
 .thread {
   height: 210rpx;
   padding: 50rpx;
@@ -532,11 +500,11 @@ page {
       border-radius: 30rpx;
       position: relative;
       left: 0;
-      top: 0; 
+      top: 0;
       line-height: 1;
       transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
       // box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.05);
-      
+
       &:active {
         transform: scale(0.95);
         // box-shadow: 0 1rpx 4rpx rgba(0, 0, 0, 0.05);
@@ -559,7 +527,7 @@ page {
         background: #acf934;
         font-family: "CustomFont" !important;
         box-shadow: 0 4rpx 12rpx rgba(172, 249, 52, 0.3);
-        
+
         .indicator-triangle {
           display: block;
           transform: translateX(-50%) scale(1.2);
@@ -611,11 +579,11 @@ page {
       left: 0;
       top: 0;
       transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-      
+
       &.clickable {
         cursor: pointer;
         box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.05);
-        
+
         &:active {
           transform: scale(0.98);
           box-shadow: 0 1rpx 4rpx rgba(0, 0, 0, 0.05);
@@ -629,9 +597,9 @@ page {
         width: 346rpx;
         height: 520rpx;
         transition: all 0.3s ease;
-         border-radius: 16rpx;
+        border-radius: 16rpx;
       }
-      
+
       .incomplete-bg2 {
         position: absolute;
         left: 0;
@@ -639,9 +607,9 @@ page {
         width: 346rpx;
         transform: translateY(-50%);
         transition: all 0.3s ease;
-         border-radius: 16rpx;
+        border-radius: 16rpx;
       }
-      
+
       .maskLayer {
         background: rgba(0, 0, 0, 0.4);
         position: absolute;
@@ -650,9 +618,9 @@ page {
         width: 346rpx;
         height: 520rpx;
         transition: all 0.3s ease;
-         border-radius: 16rpx;
+        border-radius: 16rpx;
       }
-      
+
       .queue-status {
         position: absolute;
         left: 0;
@@ -661,7 +629,7 @@ page {
         height: 520rpx;
         color: #fff;
         transition: all 0.3s ease;
-        
+
         .status-text {
           position: absolute;
           left: 0;
@@ -684,7 +652,7 @@ page {
           }
         }
       }
-      
+
       .name {
         transition: all 0.3s ease;
       }
@@ -722,5 +690,5 @@ page {
 }
 .reserveASeatBom {
   width: 100%;
-  height: calc(var(--window-bottom) + 200rpx); 
+  height: calc(var(--window-bottom) + 200rpx);
 }

+ 128 - 70
pages/my/my.vue

@@ -2,96 +2,151 @@
 	<view class="page">
 		<view class="topBody">
 			<!-- <view class="header" :class="{ 'header-isvip': !isRecharge }"> -->
-			<view class="header">
-				<view class="reserveASeat"></view>
-				<view class="card-box">
-					<view class="card-top">
-						<view class="top-box">
-							<view class="hello-box"> Hello! </view>
+			<view class="header" style="background-image: url('../../static/me/theme3.jpg');">
+				<view class="header-box"
+					style="background: linear-gradient( 360deg, #16210E 0%, rgba(55,73,36,0) 100%);">
+					<view class="reserveASeat"></view>
+					<view class="benner-box">
+						<view class="setUp-box">
+							<view class="my-box">我的</view>
 							<view class="settingBtn-box">
-								<image @click="clickShare()" src="@/static/me/wd_icon_fenxian.png" mode=""></image>
-								<image src="@/static/me/wd_icon_shezhi.png" mode="" @click="navigateToSettings"></image>
+								<image @click="clickShare()" src="@/static/me/fenxiang.png" mode=""></image>
+								<image src="@/static/me/shezhi.png" mode="" @click="navigateToSettings">
+								</image>
 							</view>
 						</view>
-						<view class="userinfo-box" @click="goPage('/pages/my/editInfo')">
-							<view class="userinfo-left">
-								<CircleAvatar class="avator" :src="myinfo.avator"></CircleAvatar>
-							</view>
-							<view class="userinfo-right">
-								<view class="nickname">
-									<text class="one-omit">{{ myinfo.nickname }}</text>
-									<image src="../../static/icon/wd_icon_nan.png" mode="widthFix"
-										v-if="myinfo.sex_id == 1"></image>
-									<image src="../../static/icon/wd_icon_nv.png" mode="widthFix"
-										v-else-if="myinfo.sex_id == 2"></image>
-									<view class="level">Lv{{ myinfo.my_level }}</view>
-								</view>
-								<view class="label">
-									<view v-for="(item, index) in aihao_tags" :key="index + item">
-										{{ item }}
-									</view>
-								</view>
+						<view class="profilePicture-box"  >
+							<CircleAvatar class="avator" :src="myinfo.avator"></CircleAvatar>
+							<view class="profilePicture-box-right" @click="goPage('/pages/my/creativeExpert')">
+								<view class="one-omit">{{ myinfo.nickname }}</view>
+								<image v-if="myinfo.my_level||myinfo.my_level==0" :src="`../../static/icon/level_${myinfo.my_level}.png`" mode="widthFix" class="level-icon" />
 							</view>
 						</view>
+
 						<view class="intro_row" @click="goPage('/pages/my/editInfo')">
 							<block v-if="myinfo.content == ''">
 								<text class="intro_text two-omit">添加简介</text>
-								<image src="@/static/icon/wd_icon_edit.png" mode="widthFix" class="add_icon"></image>
+								<image src="@/static/me/xiugai.png" mode="widthFix" class="add_icon">
+								</image>
 							</block>
-							<uv-text v-else :text="formatText( myinfo.content)" class="intro_text two-omit">
+							<uv-text color="#fff" v-else :text="formatText(myinfo.content)" class="intro_text two-omit">
 
 							</uv-text>
 						</view>
-						<view class="line"></view>
-						<view class="bom">
-							<view class="follow_info" @click="navigateToFollow">
-								<view class="follow-box">
-									<view class="num">{{scientificCounting( myinfo.num_attention) }}</view>
-									<view class="label">关注</view>
-								</view>
-								<view class="separator"></view>
-								<view class="follow-box">
-									<view class="num">{{scientificCounting( myinfo.num_fans) }}</view>
-									<view class="label">粉丝</view>
+
+
+						<view class="label-box">
+							<view class="label-item sex-item">
+								<image src="../../static/icon/wd_icon_nan.png" mode="widthFix"
+									v-if="myinfo.sex_id == 1"></image>
+								<image src="../../static/icon/wd_icon_nv.png" mode="widthFix"
+									v-else-if="myinfo.sex_id == 2"></image>
+							</view>
+							<view class="label-item" v-for="(item, index) in aihao_tags" :key="index + item">
+								{{ item }}
+							</view>
+						</view>
+
+						<view class="follow_info" @click="navigateToFollow">
+							<view class="follow-box">
+								<view class="num">{{ scientificCounting(myinfo.num_attention) }}</view>
+								<view class="label">关注</view>
+							</view>
+							<!-- <view class="separator"></view> -->
+							<view class="follow-box">
+								<view class="num">{{ scientificCounting(myinfo.num_fans) }}</view>
+								<view class="label">粉丝</view>
+							</view>
+							<!-- <view class="separator"></view> -->
+							<view class="follow-box">
+								<view class="num">{{ scientificCounting(myinfo.num_like) }}</view>
+								<view class="label">获赞</view>
+							</view>
+						</view>
+						<view class="bom-box">
+							<view class="bom-item bom-item1 scale-tap">
+								<view class="bom-item-title">钱包</view>
+								<view class="bom-item-subtitle">查看我的钱包</view>
+							</view>
+							<view class="bom-item bom-item2 scale-tap">
+								<view class="bom-item-title">发起募集</view>
+								<view class="bom-item-subtitle">查看我的众筹</view>
+							</view>
+							<view class="bom-item bom-item3 scale-tap" @click="goPage('/pages/crowdFunding/orderList')">
+								<view class="bom-item-title">订单</view>
+								<view class="bom-item-subtitle">查看我的订单</view>
+							</view>
+							 
+						</view>
+					</view>
+
+					<view class="card-box" v-if="false">
+						<view class="card-top">
+							<view class="top-box">
+								1
+							</view>
+							<view class="userinfo-box" @click="goPage('/pages/my/editInfo')">
+								<view class="userinfo-left">
+									<CircleAvatar class="avator" :src="myinfo.avator"></CircleAvatar>
 								</view>
-								<view class="separator"></view>
-								<view class="follow-box">
-									<view class="num">{{scientificCounting( myinfo.num_like) }}</view>
-									<view class="label">获赞</view>
+								<view class="userinfo-right">
+									<view class="nickname">
+										<text class="one-omit">{{ myinfo.nickname }}</text>
+
+										<view class="level">Lv{{ myinfo.my_level }}</view>
+									</view>
+									<view class="label">
+
+									</view>
 								</view>
 							</view>
-							<view class="points-box">
-								<view class="points" @click="isRecharge ? goPage('/pages/vip/M_purchase') : ''">
-									<image src="@/static/icon/wd_icon_coin.png" mode=""></image>
-									<text>{{ myinfo.num_gmm | formatNumberToK }}</text>
-										<image class="money-add" v-if="isRecharge" src="/static/icon/coin_add.png" mode="aspectFit"></image>
-								</view>
-								<view class="points" @click="isRecharge ? goPage('/pages/my/job?type=recharge') : ''">
-									<image src="@/static/icon/coin_cd.png" mode=""></image>
-									<text>{{ myinfo.num_gmd | formatNumberToK }}</text>
-										<image class="money-add" v-if="isRecharge" src="/static/icon/coin_add.png" mode="aspectFit"></image>
+
+							<view class="line"></view>
+							<view class="bom">
+
+								<view class="points-box">
+									<view class="points" @click="isRecharge ? goPage('/pages/vip/M_purchase') : ''">
+										<image src="@/static/icon/wd_icon_coin.png" mode=""></image>
+										<text>{{ myinfo.num_gmm | formatNumberToK }}</text>
+										<image class="money-add" v-if="isRecharge" src="/static/icon/coin_add.png"
+											mode="aspectFit"></image>
+									</view>
+									<view class="points"
+										@click="isRecharge ? goPage('/pages/my/job?type=recharge') : ''">
+										<image src="@/static/icon/coin_cd.png" mode=""></image>
+										<text>{{ myinfo.num_gmd | formatNumberToK }}</text>
+										<image class="money-add" v-if="isRecharge" src="/static/icon/coin_add.png"
+											mode="aspectFit"></image>
+									</view>
 								</view>
 							</view>
 						</view>
-					</view>
-					<!-- <view class="card-bom" v-if="isRecharge" @click="goPage('/pages/vip/index')"> -->
-					<view class="card-bom" @click="isRecharge ? goPage('/pages/vip/index') : ''">
-						<view class="content-box">
-							<image v-if="false" src="@/static/me/icon-vip2.png" mode=""></image>
-							<image v-else-if="0" src="@/static/me/icon-vip1.png" mode=""></image>
-							<image v-else src="@/static/me/icon-vip0.png" mode=""></image>
-							<text v-if="myinfo.is_vip == 0">开启专属会员权益</text>
-							<text v-else style="font-size: 28rpx;">会员权益生效中   <text style="font-size: 24rpx; color: rgba(172 ,249 ,52, .5);"> ({{myinfo.vip_date}})  </text>  </text>
-						</view>
-						<!-- <view class=""> -->
-						
-						<image v-if="isRecharge" src="@/static/me/wd_icon_jiantou.png" mode="aspectFit"></image>
-						<!-- </view> -->
+						<!-- <view class="card-bom" v-if="isRecharge" @click="goPage('/pages/vip/index')"> -->
+
 					</view>
 				</view>
 			</view>
 
 			<view class="myinfo">
+				<view class="vip-box" @click="isRecharge ? goPage('/pages/vip/index') : ''">
+					<view class="content-box">
+						<image v-if="false" src="@/static/me/icon-vip2.png" mode=""></image>
+						<image v-else-if="0" src="@/static/me/icon-vip1.png" mode=""></image>
+						<image v-else src="@/static/me/icon-vip0.png" mode=""></image>
+						<text v-if="myinfo.is_vip == 0">开启专属会员权益</text>
+						<text v-else style="font-size: 28rpx;">会员权益生效中 <text
+								style="font-size: 24rpx; color: rgba(172 ,249 ,52, .5);"> ({{ myinfo.vip_date }})
+							</text>
+						</text>
+					</view>
+					<!-- <view class=""> -->
+
+					<!-- <image v-if="isRecharge" src="@/static/me/wd_icon_jiantou.png" mode="aspectFit"></image> -->
+					<view class="vip-btn">
+						会员中心
+					</view>
+					<!-- </view> -->
+				</view>
 				<!-- <view class="line"></view> -->
 				<view class="tablist">
 					<view class="item" :class="{ active: firstLevelNavActive === 0 }"
@@ -126,8 +181,10 @@
 						</view>
 					</view>
 					<view class="numlist2" v-if="activeTab === 1" style="margin-top: 15rpx">
-						<view class="item" v-for="(item, index) in worksList" :key="index" style="margin-bottom: 28rpx;">
-							<view class="num" @click="goWork(item)" :class="{'clickable': item.status !== 3 && item.status !== 4}">
+						<view class="item" v-for="(item, index) in worksList" :key="index"
+							style="margin-bottom: 28rpx;">
+							<view class="num" @click="goWork(item)"
+								:class="{ 'clickable': item.status !== 3 && item.status !== 4 }">
 								<WorkItem :item="item" style="margin-bottom: 12rpx" />
 
 								<image class="incomplete-bg" v-if="item.status != 9"
@@ -186,7 +243,8 @@
 				<template v-else>
 					<view class="numlist2" style="margin-top: 30rpx">
 						<view class="item" v-for="(item, index) in worksList" :key="index" style="margin-bottom: 15rpx">
-							<view class="num" @click="goWork2(item)" :class="{'clickable': item.status !== 3 && item.status !== 4}">
+							<view class="num" @click="goWork2(item)"
+								:class="{ 'clickable': item.status !== 3 && item.status !== 4 }">
 								<WorkItem :item="item" style="margin-bottom: 20rpx" />
 
 								<view class="incomplete-bg" style="background: #f8f9fa"></view>

+ 51 - 0
pages/my/setting.vue

@@ -101,6 +101,13 @@ export default {
         },
       ],
       moreSettings: [
+        {
+          name: "发起众筹",
+          desc: "",
+          path: "InitiateCrowdfunding",
+          icon: "../../static/me/InitiateCrowdfunding.png",
+          propup: "",
+        },
         {
           name: "通知设置",
           desc: "",
@@ -215,6 +222,33 @@ export default {
         // });
         // // #endif
         this.openCustomPopup();
+      }else if (page == "InitiateCrowdfunding") {
+        uni.showModal({
+          title: "温馨提示",
+          content: "请使用电脑端登录,认证后发起众筹",
+          paratext: "(复制下方链接,电脑登录)",
+          cancelText: "取消",
+          confirmText: "复制链接",
+          success: (res) => {
+            if (res.confirm) {
+              uni.setClipboardData({
+                data: 'https://zhichao.art/zc/',
+                success: () => {
+                  uni.showToast({
+                    title: '链接已复制',
+                    icon: 'success'
+                  })
+                },
+                fail: () => {
+                  uni.showToast({
+                    title: '复制失败',
+                    icon: 'none'
+                  })
+                }
+              })
+            }
+          }
+        });
       } else if (page == "pushSet") {
         // #ifdef APP-PLUS
         if (uni.getSystemInfoSync().platform === 'android') {
@@ -395,6 +429,23 @@ export default {
           });
         });
     },
+    copyText(text) {
+        uni.setClipboardData({
+            data: text,
+            success: () => {
+                uni.showToast({
+                    title: '复制成功',
+                    icon: 'success'
+                })
+            },
+            fail: () => {
+                uni.showToast({
+                    title: '复制失败',
+                    icon: 'none'
+                })
+            }
+        })
+    },
   },
 };
 </script>

BIN
static/home/crowdFunding.png


BIN
static/icon/level_0.png


BIN
static/icon/level_1.png


BIN
static/icon/level_2.png


BIN
static/icon/level_3.png


BIN
static/icon/level_4.png


BIN
static/icon/level_5.png


BIN
static/image/1080x1882.9.png


BIN
static/me/InitiateCrowdfunding.png


BIN
static/me/box-bg-1.png


BIN
static/me/box-bg-2.png


BIN
static/me/box-bg-3.png


BIN
static/me/creativeExpert (2).png


BIN
static/me/creativeExpert (5).png


BIN
static/me/creativeExpert _vip.png


BIN
static/me/creativeExpert-text.png


BIN
static/me/creativeExpert_top_bg.png


BIN
static/me/fenxiang.png


BIN
static/me/shezhi.png


BIN
static/me/theme1.jpg


BIN
static/me/theme2.jpg


BIN
static/me/theme3.jpg


BIN
static/me/theme4.jpg


BIN
static/me/theme5.jpg


BIN
static/me/vip-box.png


BIN
static/me/wallet-box (2).png


BIN
static/me/wallet-box1.png


BIN
static/me/xiugai.png


+ 38 - 0
utils/copy.js

@@ -0,0 +1,38 @@
+/**
+ * 复制文本到剪贴板
+ * @param {string} text - 要复制的文本内容
+ * @param {string} successMsg - 复制成功时的提示信息
+ * @param {string} failMsg - 复制失败时的提示信息
+ */
+export const copyToClipboard = (text, successMsg = '复制成功', failMsg = '复制失败') => {
+  // #ifdef H5
+  const input = document.createElement('input')
+  input.value = text
+  document.body.appendChild(input)
+  input.select()
+  document.execCommand('copy')
+  document.body.removeChild(input)
+  uni.showToast({
+    title: successMsg,
+    icon: 'success'
+  })
+  // #endif
+
+  // #ifdef APP-PLUS || MP
+  uni.setClipboardData({
+    data: text,
+    success: () => {
+      uni.showToast({
+        title: successMsg,
+        icon: 'success'
+      })
+    },
+    fail: () => {
+      uni.showToast({
+        title: failMsg,
+        icon: 'none'
+      })
+    }
+  })
+  // #endif
+}