liujiaxin hace 1 semana
padre
commit
c2db75f5ba
Se han modificado 100 ficheros con 7424 adiciones y 5063 borrados
  1. 3 2
      App.vue
  2. 16 1
      api/index.js
  3. 32 1
      api/life.js
  4. 5 0
      api/living.js
  5. 3 3
      api/order.js
  6. 5 2
      api/product.js
  7. 6 1
      api/search.js
  8. 9 4
      api/storeOrder.js
  9. 14 5
      api/user.js
  10. 4 4
      assets/css/common.less
  11. 0 0
      check_content.js
  12. 1 1
      components/Menu.vue
  13. 1 1
      components/StarRating.vue
  14. 1 1
      components/cartIcon.vue
  15. 166 219
      components/channel.vue
  16. 1 1
      components/chengpeng-audio/free-audio.vue
  17. 75 62
      components/coupon-popup/coupon-popup.vue
  18. 1 1
      components/evan-switch/evan-switch.vue
  19. 13 15
      components/likeProduct.vue
  20. 7 6
      components/product-spec-popup/product-spec-popup.vue
  21. 77 0
      components/public/cart-badge.vue
  22. 65 148
      components/public/product-nav-bar.vue
  23. 0 106
      components/public/scs-helang-waterfall.vue
  24. 64 31
      components/public/top-nav-bar.vue
  25. 292 306
      components/px-popup-bottom/px-popup-bottom.vue
  26. 34 0
      custom-tab-bar/index.js
  27. 4 0
      custom-tab-bar/index.json
  28. 86 0
      custom-tab-bar/index.vue
  29. 7 0
      custom-tab-bar/index.wxml
  30. 33 0
      custom-tab-bar/index.wxss
  31. 6 2
      package.json
  32. 130 22
      pages.json
  33. 18 21
      pages/auth/login.vue
  34. 1 1
      pages/common/launch.vue
  35. 1 1
      pages/doctor/doctorQr.vue
  36. 6 6
      pages/healthy/detail.vue
  37. 4 4
      pages/healthy/index.vue
  38. 163 48
      pages/home/cert.vue
  39. 146 19
      pages/home/components/home-discount.vue
  40. 294 118
      pages/home/components/home-goods-item.vue
  41. 138 35
      pages/home/components/home-hot.vue
  42. 100 59
      pages/home/components/home-menu.vue
  43. 3 3
      pages/home/components/home-more-item.vue
  44. 92 13
      pages/home/components/home-play.vue
  45. 224 33
      pages/home/components/home-product.vue
  46. 107 23
      pages/home/components/home-search.vue
  47. 258 0
      pages/home/components/sales-ranking.vue
  48. 2 2
      pages/home/doctorCase.vue
  49. 88 88
      pages/home/index copy.vue
  50. 422 428
      pages/home/index.vue
  51. 2 2
      pages/home/productList.vue
  52. 582 318
      pages/home/productSearch.vue
  53. 755 529
      pages/life/life.vue
  54. 17 17
      pages/live/list.vue
  55. 352 296
      pages/shopping/cart.vue
  56. 273 132
      pages/shopping/index.vue
  57. 945 810
      pages/user/index.vue
  58. 1 1
      pages_company/alipayImg.vue
  59. 1 1
      pages_company/auth/login.vue
  60. 1 1
      pages_company/card.vue
  61. 85 57
      pages_company/coupon.vue
  62. 8 8
      pages_company/couponDetails.vue
  63. 20 20
      pages_company/index.vue
  64. 2 2
      pages_company/order/cart.vue
  65. 2 2
      pages_company/order/confirmCompanyOrder.vue
  66. 5 5
      pages_company/order/confirmOrder.vue
  67. 12 12
      pages_company/order/coupon.vue
  68. 6 6
      pages_company/order/productDetails.vue
  69. 2 2
      pages_company/order/productList.vue
  70. 3 3
      pages_company/order/productShowDetails.vue
  71. 5 5
      pages_company/shareLive.vue
  72. 118 118
      pages_company/storeOrder.vue
  73. 89 54
      pages_company/storeOrderDetail.vue
  74. 77 77
      pages_company/storeProductPackage.vue
  75. 9 9
      pages_company/storeProductPackageDetails.vue
  76. 2 2
      pages_course/becomeVIP.vue
  77. 9 9
      pages_course/components/Invitation.vue
  78. 2 2
      pages_course/components/ThreeItemSwiper.vue
  79. 1 1
      pages_course/components/chatInput.vue
  80. 6 6
      pages_course/components/commentBox.vue
  81. 4 4
      pages_course/components/descInfo.vue
  82. 8 8
      pages_course/components/descInfoNav.vue
  83. 1 1
      pages_course/components/giftPopup.vue
  84. 1 1
      pages_course/components/like.vue
  85. 5 5
      pages_course/components/liveGoods.vue
  86. 12 12
      pages_course/components/liveVideo.vue
  87. 4 4
      pages_course/components/lotteryPopup.vue
  88. 4 4
      pages_course/components/ques.vue
  89. 9 9
      pages_course/components/shopPopup.vue
  90. 4 4
      pages_course/components/viewer.vue
  91. 1 1
      pages_course/components/winningPopup.vue
  92. 2 2
      pages_course/courseCover.vue
  93. 1 1
      pages_course/feedback.vue
  94. 15 15
      pages_course/integral.vue
  95. 33 33
      pages_course/living.vue
  96. 3 3
      pages_course/reward.vue
  97. 24 24
      pages_course/video.vue
  98. 1 1
      pages_life/applyExpert.vue
  99. 485 480
      pages_life/expert.vue
  100. 187 97
      pages_life/myExpert.vue

+ 3 - 2
App.vue

@@ -158,7 +158,7 @@
 	@import "@/uni_modules/uview-ui/index.scss";
 	@import '@/assets/css/commonTheme.css';
 	@import '@/assets/css/common.scss';
-	@import '@/assets/style/global.scss';
+	// @import '@/assets/style/global.scss';
 	@import '@/assets/style/index.scss';
 </style>
 <style lang="less">
@@ -169,6 +169,7 @@
 
 	page {
 		background-color: #f6f6f6;
+		font-size: 36rpx;
 	}
 
 	::-webkit-scrollbar {
@@ -205,4 +206,4 @@
 	}
 
 	/* #endif */
-</style>
+</style>

+ 16 - 1
api/index.js

@@ -39,6 +39,13 @@ export function productWaterfall(data) {
 export function recommendProduct(data) {
 	return request(`/app/product/getRecommendProduct?recommendType=${data}`, null, 'GET');
 }
+// 兼容式:获取首页推荐商品(接受对象或字符串)
+export function getRecommendProduct(data) {
+	const type = typeof data === 'string'
+		? data
+		: (data && (data.recommendType || data.type)) ? (data.recommendType || data.type) : 'recommend';
+	return request(`/app/product/getRecommendProduct?recommendType=${type}`, null, 'GET');
+}
 // 添加购物车
 export function addCart(data) {
 	return request('/app/product/addCart', data, 'POST');
@@ -86,4 +93,12 @@ export function getProductCateIndex() {
 // 根据一级分类获取子分类
 export function getProductCateByPid(data) {
 	return request(`/app/product/getProductCateByPid?pid=${data}`, data, 'GET');
-}
+}
+// 获取精选广告
+export function selectedAdv() {
+	return request('/app/product/selectedAdv', null, 'GET');
+}
+// 全部频道
+export function getProductAllCate() {
+	return request('/app/product/getProductAllCate', null, 'GET');
+}

+ 32 - 1
api/life.js

@@ -85,4 +85,35 @@ export function summary(storeId) {
 //达人排行榜
 export function listCreatorRank(data) {
 	return request('/app/store/life/listCreatorRank', data, 'POST');
-}
+}
+
+//生活号内容分类
+export function lifeCategory(data) {
+	return request('/app/store/life/lifeCategory', data, 'POST', 'application/json;charset=UTF-8');
+}
+//普通用户申请成为达人
+export function applyExpert(data) {
+	return request('/app/store/life/applyExpert', data, 'POST', 'application/json;charset=UTF-8');
+}
+//查询达人申请状态
+export function applyExpertStatus(data) {
+	return request('/app/store/life/applyExpertStatus', data, 'POST', 'application/json;charset=UTF-8');
+}
+//编辑达人信息
+export function editProfile(data) {
+	return request('/app/store/life/editProfile', data, 'POST', 'application/json;charset=UTF-8');
+}
+
+//添加视频
+export function addVideo(data) {
+	return request('/app/store/life/content/add', data, 'POST', 'application/json;charset=UTF-8');
+}
+
+//查询我的评论
+export function getMyComments(data) {
+	return request('/app/store/life/getMyComments', data, 'POST');
+}
+//查询我的收藏
+export function getMyCollection(data) {
+	return request('/app/store/life/getMyCollection', data, 'POST');
+}

+ 5 - 0
api/living.js

@@ -195,3 +195,8 @@ export function myLottery(data) {
 // 	return request('/app/live/liveMsg/myList', data, 'GET', 'application/json;charset=UTF-8');
 // }
 
+
+// 直播间配置
+export function liveConfiguration(data) {
+	return request('/app/live/liveConfiguration', data, 'GET', 'application/json;charset=UTF-8');
+}

+ 3 - 3
api/order.js

@@ -272,8 +272,8 @@ export function myStoreOrderById() {
 	return request('/app/storeOrder/getMyStoreOrderById', null, 'GET', 'application/json;charset=UTF-8');
 }
 // 获取我的订单列表
-export function myStoreOrderList() {
-	return request('/app/storeOrder/getMyStoreOrderList', null, 'GET', 'application/json;charset=UTF-8');
+export function myStoreOrderList(data) {
+	return request('/app/storeOrder/getMyStoreOrderList', data, 'POST', 'application/json;charset=UTF-8');
 }
 // 获取订单总数
 export function orderCount() {
@@ -281,7 +281,7 @@ export function orderCount() {
 }
 // 获取订单
 export function storeOrderById() {
-	return request('/app/storeOrder/getStoreOrderById', null, 'GET', 'application/json;charset=UTF-8');
+	return request('/app/storeOrder/getMyStoreOrderById', null, 'GET', 'application/json;charset=UTF-8');
 }
 
 

+ 5 - 2
api/product.js

@@ -52,7 +52,7 @@ let request = new Request().http
 
  //查询当前商品最近的购买记录10条
  export function productHistoryOrderList(data) {
- 	 return request(`/app/product/productHistoryOrderList/${data}`,data,'POST');
+ 	 return request('/app/product/productHistoryOrderList',data,'POST');
  }
   // 商品好评榜单
  export function productGoodProductList(data) {
@@ -115,7 +115,10 @@ let request = new Request().http
  	 return request(`/app/store/store/getStoreQualification/${data}`,data,'GET');
  }
  
-
+  //店铺评分
+ export function getStoreRating(data) {
+ 	 return request(`/app/store/store/getStore/${data}`,data,'POST');
+ }
  
  
  

+ 6 - 1
api/search.js

@@ -17,11 +17,16 @@ export function deleteSearchHistory(data) {
 }
  export function list() {
  	 return request('/app/search/history/list',null,'GET');
+ }
+  // 历史搜索
+ export function storeHistorySearch() {
+ 	 return request('/app/search/history/list',null,'GET');
  }
   // 热门搜索
  export function storeHotSearch() {
- 	 return request(' /app/store/storeHotSearch/list',null,'GET');
+ 	 return request('/app/store/storeHotSearch/list',null,'GET');
  }
+
  
 
  

+ 9 - 4
api/storeOrder.js

@@ -3,18 +3,18 @@ let request = new Request().http
 
  
  export function getMyStoreOrderList(data) {
- 	 return request('/app/storeOrder/getMyStoreOrderList',data,'GET');
+ 	 return request('/app/storeOrder/getMyStoreOrderList',data,'POST','application/json;charset=UTF-8');
  } 
  export function getCompanyStoreOrderList(data) {
- 	 return request('/app/storeOrder/getCompanyStoreOrderList',data,'GET');
+ 	 return request('/app/storeOrder/getCompanyStoreOrderList',data,'POST','application/json;charset=UTF-8');
  } 
  export function getMyStoreOrderById(data) {
- 	 return request('/app/storeOrder/getMyStoreOrderById',data,'GET');
+ 	 return request('/app/storeOrder/getMyStoreOrderById',data,'GET','application/json;charset=UTF-8');
  } 
  
  
  export function getStoreOrderById(data) {
- 	 return request('/app/storeOrder/getStoreOrderById',data,'GET');
+ 	 return request('/app/storeOrder/getMyStoreOrderById',data,'GET');
  } 
  
  
@@ -81,6 +81,11 @@ let request = new Request().http
  export function userCancelPay(data) {
  	 return request('/app/storeOrder/cancelPay',data,'POST','application/json;charset=UTF-8');
  } 
+
+ //查询用户支付订单详情
+ export function getMyPayStoreOrderById(data) {
+ 	 return request('/app/storeOrder/getMyPayStoreOrderById',data,'GET','application/json;charset=UTF-8');
+ }
  
  
  

+ 14 - 5
api/user.js

@@ -64,11 +64,11 @@ export function getUserShareList(data) {
 }
 //隐私保护
 export function getyingsi(data) {
-	return request('/h5/privacyPolicyNew', data, 'GET');
+	return request('/h5/privacyPolicy', data, 'GET');
 }
 //用户协议
 export function getxieyi(data) {
-	return request('/h5/userAgreementNew', data, 'GET');
+	return request('/h5/userAgreement', data, 'GET');
 }
 export function getConfigByKey(data) {
 	return request('/app/common/getConfigByKey', data, 'GET');
@@ -91,10 +91,19 @@ export function getMyEnableCouponList(data) {
 	return request(`/app/coupon/getMyEnableCouponList?couponType=${data}&packageCateId=${data.packageCateId}&useMinPrice=${data.useMinPrice}&userId=${data.userId}`, null, 'GET');
 }
 
+// 获取个人中心 芳华币 券等数量
+export function getMyCouponCount(data) {
+	return request('/app/coupon/getMyCouponCount', data, 'GET');
+}
 
 
+// 添加评论
+export function addProductComment(data) {
+	return request('/app/store/productComment/add', data, 'POST', 'application/json;charset=UTF-8');
+}
 
-
-
-
+// 系统通知接口
+export function getNoticeList(data) {
+	return request('/app/notice/list', data, 'GET');
+}
 

+ 4 - 4
assets/css/common.less

@@ -183,8 +183,8 @@ radio .wx-radio-input{
 }
 /* 选中后的 背景样式  */
 radio .wx-radio-input.wx-radio-input-checked{
-	background: linear-gradient(135deg, #2BC7B9 0%, #60CDC3 100%);
-	border: 1px solid #2BC7B9;
+	background: linear-gradient(90deg, #38D97D 0%, #02B176 100%);
+	border: 1px solid #02B176;
 }
 /* 选中后的 对勾样式 (白色对勾) */
 radio .wx-radio-input.wx-radio-input-checked::before{
@@ -197,8 +197,8 @@ checkbox .wx-checkbox-input{
 	border-radius: 50%;
 }
 checkbox .wx-checkbox-input.wx-checkbox-input-checked {
-	background: linear-gradient(135deg, #2BC7B9 0%, #60CDC3 100%);
-	border: 1px solid #2BC7B9;
+	background: linear-gradient(90deg, #38D97D 0%, #02B176 100%);
+	border: 1px solid #02B176;
 	border-radius: 50%;
 }
 checkbox .wx-checkbox-input.wx-checkbox-input-checked::before {

+ 0 - 0
check_content.js


+ 1 - 1
components/Menu.vue

@@ -139,7 +139,7 @@ export default {
 		.dot-active {
 			width: 40rpx;
 			height: 3rpx;
-			background: #2BC7B9;
+			background: linear-gradient(136deg, #38D97D 0%, #02B176 100%);
 			margin-right: 10rpx;
 		}
 	}

+ 1 - 1
components/StarRating.vue

@@ -37,7 +37,7 @@ export default {
     // 当前评分值(支持小数)
     value: {
       type: Number,
-      default: 0
+      default: 5
     },
     // 星星总数
     count: {

+ 1 - 1
components/cartIcon.vue

@@ -19,7 +19,7 @@ export default {
 	},
 	methods: {
 		goToShoppingCart() {
-			uni.navigateTo({
+			uni.switchTab({
 				url: '/pages/shopping/cart'
 			});
 		},

+ 166 - 219
components/channel.vue

@@ -16,16 +16,16 @@
 						:style="{ width: itemWidth + 'px' }" @touchstart="handleTouchStart(index, $event)"
 						@touchmove="(e) => handleMove(e, index)" @touchend="handleEnd" @touchcancel="handleEnd">
 						<!-- 拖拽中的元素特殊样式 -->
-						<view class="channel-content" :class="{ 
-					      'drag-item': isDragging && dragIndex === index 
-					    }" :style="{
-					      transform: isDragging && dragIndex === index 
-					        ? `translate(${dragOffsetX}px, ${dragOffsetY}px) scale(1.05)` 
-					        : 'none',
-					      zIndex: isDragging && dragIndex === index ? 999 : 1,
-					      opacity: isDragging && dragIndex === index ? 0.9 : 1,
-					      transition: isDragging && dragIndex === index ? 'none' : 'all 0.15s ease-out'
-					    }" @tap="handleChannelTap(item)">
+						<view class="channel-content" :class="{
+						  'drag-item': isDragging && dragIndex === index
+						}" :style="{
+						  transform: isDragging && dragIndex === index
+							? `translate(${dragOffsetX}px, ${dragOffsetY}px) scale(1.05)`
+							: 'none',
+						  zIndex: isDragging && dragIndex === index ? 999 : 1,
+						  opacity: isDragging && dragIndex === index ? 0.9 : 1,
+						  transition: isDragging && dragIndex === index ? 'none' : 'all 0.15s ease-out'
+						}" @tap="handleChannelTap(item)">
 							<text>{{ item.name }}</text>
 							<image v-if="index !== 0" class="delete-icon" src="https://cdn.his.cdwjyyh.com/images/remove_icon.png"
 								@tap.stop="removeFromMyChannels(index)"/>
@@ -62,8 +62,10 @@
 <script>
 	import {
 		getMyProductCate,
+		getProductCateIndex,
 		channelAdd,
-		channelDelete
+		channelDelete,
+		getProductAllCate
 	} from "@/api/index.js"
 	export default {
 		props: {
@@ -90,33 +92,31 @@
 		},
 		data() {
 			return {
-				// show: true,
 				myChannels: [],
 				allChannels: [],
 				activeChannel: '',
 				isDragging: false,
-				dragIndex: -1, // 正在拖拽的索引
-				placeholderIndex: -1, // 占位符索引
-				startX: 0, // 触摸初始X
-				startY: 0, // 触摸初始Y
-				elementLeft: 0, // 元素初始左坐标
-				elementTop: 0, // 元素初始上坐标
-				dragOffsetX: 0, // 拖拽偏移X
-				dragOffsetY: 0, // 拖拽偏移Y
-				itemHeight: 60, // 频道项高度
-				colCount: 0, // 每行显示列数
-				itemRects: [], // 所有频道项的位置信息
-				dragThreshold: 3, // 降低触发阈值,更灵敏
-				lastSwapTime: 0, // 防抖:记录上次交换时间
-				touchStartTime: 0, // 触摸开始时间
-				rectTimer: null // 计算位置的定时器
+				dragIndex: -1,
+				placeholderIndex: -1,
+				startX: 0,
+				startY: 0,
+				elementLeft: 0,
+				elementTop: 0,
+				dragOffsetX: 0,
+				dragOffsetY: 0,
+				itemHeight: 60,
+				colCount: 0,
+				itemRects: [],
+				dragThreshold: 3,
+				lastSwapTime: 0,
+				touchStartTime: 0,
+				rectTimer: null
 			};
 		},
-		watch: { // 监听 show 属性的变化
+		watch: {
 			show: {
 				immediate: true,
 				handler(newVal) {
-					// 如果需要,可以在这里处理显示/隐藏的逻辑
 				}
 			},
 			activeChannelId: {
@@ -141,38 +141,26 @@
 		},
 		mounted() {
 			this.$nextTick(() => this.calcItemRects());
-			// 组件挂载时获取我的频道
 			this.getMyChannels();
 		},
 		methods: {
-			// 获取我的频道
 			getMyChannels() {
 				getMyProductCate().then(
 					res => {
 						if (res.code == 200) {
-							console.log("获取我的频道", res.data);
-							// 更新我的频道列表
+							// console.log("获取我的频道", res.data);
 							if (res.data && res.data.length > 0) {
-								// 将返回的数据转换为频道需要的格式
-								const channels = res.data.map(item => ({
+								// 显示所有频道,因为接口返回的 isSelect 都是 0
+								const myChannels = res.data.map(item => ({
 									id: item.cateId,
 									name: item.cateName,
 									pic: item.pic,
 									isSelect: item.isSelect
 								}));
-								// 更新全部频道列表
-								this.allChannels = channels;
-								// 保持我的频道列表不变,使用父组件传递的初始值
-								// 或者根据 isSelect 字段过滤我的频道
-								const myChannels = channels.filter(item => item.isSelect === 1);
 								if (myChannels.length > 0) {
 									this.myChannels = myChannels;
 								}
 								this.$nextTick(() => this.calcItemRects());
-								this.$emit('channels-change', {
-									myChannels: this.myChannels,
-									allChannels: this.allChannels
-								});
 							}
 						}
 					},
@@ -180,17 +168,33 @@
 						console.error("获取我的频道失败", rej);
 					}
 				);
+
+				getProductAllCate().then(
+					res => {
+						if (res.code == 200) {
+							// console.log("获取全部频道", res.data);
+							if (res.data && res.data.length > 0) {
+								const allChannels = res.data.map(item => ({
+									id: item.cateId,
+									name: item.cateName,
+									pic: item.pic
+								}));
+								this.allChannels = allChannels;
+							}
+						}
+					},
+					rej => {
+						console.error("获取全部频道失败", rej);
+					}
+				);
 			},
-			// 计算所有频道项的位置信息(保留原有逻辑,优化计算精度)
 			calcItemRects() {
 				if (!this.myChannels.length) return;
 
 				const query = uni.createSelectorQuery().in(this);
 				query.select('#channelList').boundingClientRect(rect => {
 					if (!rect) return;
-					// 计算每行列数(考虑容器内边距)
 					this.colCount = Math.floor((rect.width - 40) / this.itemWidth);
-					// 预计算每个项的位置
 					this.itemRects = this.myChannels.map((_, index) => {
 						const row = Math.floor(index / this.colCount);
 						const col = index % this.colCount;
@@ -205,17 +209,12 @@
 					});
 				}).exec();
 			},
-
-			// 判断频道是否已在我的列表中(保留原有功能)
 			isChannelInMyList(channelId) {
 				return this.myChannels.some(item => item.id === channelId);
 			},
-
-			// 添加频道到我的频道(保留原有功能)
 			addToMyChannels(channel) {
 				if (this.isChannelInMyList(channel.id)) return;
 
-				// 调用添加频道API
 				channelAdd(channel.id).then(
 					res => {
 						if (res.code == 200) {
@@ -243,13 +242,10 @@
 					}
 				);
 			},
-
-			// 从我的频道中移除(保留原有功能)
 			removeFromMyChannels(index) {
 				if (index === 0 || this.isDragging) return;
 
 				const channel = this.myChannels[index];
-				// 调用删除频道API
 				channelDelete(channel.id).then(
 					res => {
 						if (res.code == 200) {
@@ -277,25 +273,18 @@
 					}
 				);
 			},
-
-			// 点击频道(保留原有功能)
 			handleChannelTap(channel) {
 				if (this.isDragging) return;
 				this.activeChannel = channel.id;
 				this.$emit('channel-tap', channel);
 			},
-
-			// ========== 以下是拖拽功能的核心优化 ==========
-			// 触摸开始:记录初始信息,替代原longpress
 			handleTouchStart(index, e) {
-				// 第一个频道不能拖拽
 				if (index === 0) return;
 				this.touchStartTime = Date.now();
 				const touch = e.touches[0];
 				this.startX = touch.clientX;
 				this.startY = touch.clientY;
 
-				// 获取当前元素的初始位置
 				const query = uni.createSelectorQuery().in(this);
 				query.selectAll('.channel-item').boundingClientRect(rects => {
 					const currentRect = rects[index];
@@ -305,12 +294,9 @@
 					}
 				}).exec();
 			},
-
-			// 拖拽移动:优化跟随流畅度和交换逻辑
 			handleMove(e, index) {
 				if (index === 0) return;
 
-				// 阻止页面滚动和默认行为
 				e.stopPropagation();
 				if (e.preventDefault) e.preventDefault();
 				else e.returnValue = false;
@@ -319,64 +305,48 @@
 				const currentX = touch.clientX;
 				const currentY = touch.clientY;
 
-				// 未进入拖拽状态:判断是否触发拖拽(移动距离+触摸时间)
 				if (!this.isDragging) {
 					const moveDistance = Math.hypot(currentX - this.startX, currentY - this.startY);
 					const touchTime = Date.now() - this.touchStartTime;
-					// 移动超过阈值+触摸时间>80ms,触发拖拽(避免误触)
 					if (moveDistance >= this.dragThreshold && touchTime > 80) {
 						this.isDragging = true;
 						this.dragIndex = index;
 						this.placeholderIndex = index;
 						this.lastSwapTime = Date.now();
-						// 实时计算位置
 						this.calcItemRects();
 					} else {
 						return;
 					}
 				}
 
-				// 计算偏移量:基于元素初始位置,跟随更丝滑
 				this.dragOffsetX = currentX - this.elementLeft;
 				this.dragOffsetY = currentY - this.elementTop;
 
-				// 防抖交换:15ms内只交换一次,避免卡顿
 				const now = Date.now();
 				if (now - this.lastSwapTime > 15) {
 					this.swapChannelItem(currentX, currentY);
 					this.lastSwapTime = now;
 				}
 			},
-
-			// 交换频道项:优化碰撞检测,精准交换
 			swapChannelItem(x, y) {
 				if (this.itemRects.length === 0) return;
 
-				// 找到当前触摸点对应的目标项
 				let targetIndex = -1;
 				for (let i = 1; i < this.myChannels.length; i++) {
 					const rect = this.itemRects[i];
-					// 扩大检测范围,更容易触发交换
 					if (x >= rect.left - 5 && x <= rect.right + 5 && y >= rect.top - 5 && y <= rect.bottom + 5) {
 						targetIndex = i;
 						break;
 					}
 				}
 
-				// 交换逻辑:只在目标不同时执行
 				if (targetIndex !== -1 && targetIndex !== this.placeholderIndex) {
-					// 交换数组元素
-					[this.myChannels[this.dragIndex], this.myChannels[targetIndex]] = [this.myChannels[targetIndex], this
-						.myChannels[this.dragIndex]
-					];
-					// 更新占位符和拖拽索引
+					[this.myChannels[this.dragIndex], this.myChannels[targetIndex]] = [this.myChannels[targetIndex], this.myChannels[this.dragIndex]];
 					this.placeholderIndex = targetIndex;
 					this.dragIndex = targetIndex;
-					// 更新元素初始位置,让拖拽跟随更准确
 					this.elementLeft = this.itemRects[targetIndex].left;
 					this.elementTop = this.itemRects[targetIndex].top;
 
-					// 延迟计算位置,避免频繁DOM查询
 					if (!this.rectTimer) {
 						this.rectTimer = setTimeout(() => {
 							this.calcItemRects();
@@ -386,18 +356,14 @@
 					}
 				}
 			},
-
-			// 拖拽结束/取消:重置状态(保留原有逻辑,优化定时器清理)
 			handleEnd() {
 				if (!this.isDragging) return;
 
-				// 清理定时器
 				if (this.rectTimer) {
 					clearTimeout(this.rectTimer);
 					this.rectTimer = null;
 				}
 
-				// 重置拖拽状态
 				this.isDragging = false;
 				this.dragIndex = -1;
 				this.placeholderIndex = -1;
@@ -408,11 +374,8 @@
 				this.elementLeft = 0;
 				this.elementTop = 0;
 
-				// 保存顺序
 				this.saveChannelOrder();
 			},
-
-			// 保存频道顺序(保留原有功能)
 			saveChannelOrder() {
 				this.$emit('order-change', JSON.parse(JSON.stringify(this.myChannels)));
 				this.$emit('channels-change', {
@@ -420,175 +383,159 @@
 					allChannels: this.allChannels
 				});
 			},
-
-			// 关闭弹窗(保留原有功能)
 			handleClose() {
-				this.$emit('update:show', false); // 通知父组件关闭
+				this.$emit('update:show', false);
 				this.$emit('close');
+				this.$emit('close-refresh'); // 通知父组件刷新频道数据
 			}
 		}
 	};
 </script>
 
 <style scoped lang="scss">
-	// 保留你所有的样式,仅优化拖拽相关的样式
-	.channel-container {
-		border-radius: 32rpx 32rpx 0rpx 0rpx;
-		padding: 24rpx;
-		background-color: #fff;
-		max-height: 60vh;
-		overflow-y: auto;
-		box-sizing: border-box;
-
-		.channel-section {
-			margin-bottom: 40rpx;
-			border-radius: 10rpx;
-			overflow: hidden;
-
-			.section-header {
-				display: flex;
-				align-items: center;
-				justify-content: space-between;
-				height: 80rpx;
-				margin-bottom: 20rpx;
-
-				.left {
-					.section-title {
-						font-weight: 500;
-						font-size: 32rpx;
-						color: #333333;
-					}
-
-					.txt {
-						font-size: 24rpx;
-						color: #999999;
-						margin-left: 18rpx;
-					}
-
+.channel-container {
+	border-radius: 32rpx 32rpx 0rpx 0rpx;
+	padding: 24rpx;
+	background-color: #fff;
+	max-height: 60vh;
+	overflow-y: auto;
+	box-sizing: border-box;
+
+	.channel-section {
+		margin-bottom: 40rpx;
+		border-radius: 10rpx;
+		overflow: hidden;
+
+		.section-header {
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			height: 80rpx;
+			margin-bottom: 20rpx;
+
+			.left {
+				.section-title {
+					font-weight: 500;
+					font-size: 32rpx;
+					color: #333333;
 				}
 
 				.txt {
 					font-size: 24rpx;
-					color: #999;
+					color: #999999;
+					margin-left: 18rpx;
 				}
 			}
 
-			.channel-list {
-				display: flex;
-				flex-wrap: wrap;
+			.txt {
+				font-size: 24rpx;
+				color: #999;
+			}
+		}
+
+		.channel-list {
+			display: flex;
+			flex-wrap: wrap;
+			position: relative;
+
+			.channel-item {
 				position: relative;
+				box-sizing: border-box;
+				margin-bottom: 10rpx;
+				margin-right: 18rpx;
+
+				&:last-child {
+					margin-right: 0;
+				}
 
-				.channel-item {
+				.channel-content {
+					width: 162rpx;
+					height: 88rpx;
+					background: #F5F7FA;
+					border-radius: 12rpx 12rpx 12rpx 12rpx;
 					position: relative;
-					box-sizing: border-box;
-					margin-bottom: 10rpx;
-					margin-right: 18rpx;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					transition: all 0.15s ease-out;
+					color: #333333;
 
-					&:last-child {
-						margin-right: 0;
+					&.active {
+						color: #999999;
 					}
 
-					.channel-content {
-						width: 162rpx;
-						height: 88rpx;
-						background: #F5F7FA;
-						border-radius: 12rpx 12rpx 12rpx 12rpx;
+					&.drag-item {
 						position: relative;
+						box-shadow: 0 8rpx 20rpx rgba(0, 0, 0, 0.15);
+						opacity: 0.8;
+						background-color: #fff;
+					}
+
+					.add-icon,
+					.delete-icon,
+					.added-mark {
+						position: absolute;
+						right: -10rpx;
+						top: -10rpx;
+						width: 32rpx;
+						height: 32rpx;
+						border-radius: 50%;
 						display: flex;
 						align-items: center;
 						justify-content: center;
-						transition: all 0.15s ease-out;
-						color: #333333;
-
-						&.active {
-							color: #999999;
-						}
-
-						// 拖拽中的元素 - 优化阴影和透明度
-						&.drag-item {
-							position: relative;
-							// 增强阴影效果:增大阴影范围、提高不透明度,让阴影更明显
-							box-shadow: 0 8rpx 20rpx rgba(0, 0, 0, 0.15);
-							// 降低透明度,让拖拽元素有半透明效果(0.8比0.9更明显)
-							opacity: 0.8;
-							background-color: #fff; // 增加白色背景,让半透明效果更自然
-						}
+						z-index: 2;
+					}
 
-						// 图标样式 - 完全保留
-						.add-icon,
-						.delete-icon,
-						.added-mark {
-							position: absolute;
-							right: -10rpx;
-							top: -10rpx;
-							width: 32rpx;
-							height: 32rpx;
-							border-radius: 50%;
-							display: flex;
-							align-items: center;
-							justify-content: center;
-							z-index: 2;
+					.add-icon {
+						.icon-plus {
+							font-size: 30rpx;
+							color: #fff;
+							line-height: 1;
 						}
+					}
 
-						.add-icon {
-							.icon-plus {
-								font-size: 30rpx;
-								color: #fff;
-								line-height: 1;
-							}
+					.delete-icon {
+						.icon-minus {
+							font-size: 36rpx;
+							color: #fff;
+							line-height: 1;
+							margin-top: -2rpx;
 						}
+					}
 
-						.delete-icon {
-							.icon-minus {
-								font-size: 36rpx;
-								color: #fff;
-								line-height: 1;
-								margin-top: -2rpx;
-							}
-						}
+					.added-mark {
+						background-color: #d9d9d9;
+						color: #999;
 
-						.added-mark {
-							background-color: #d9d9d9;
+						.icon-check {
+							font-size: 26rpx;
 							color: #999;
-
-							.icon-check {
-								font-size: 26rpx;
-								color: #999;
-								line-height: 1;
-							}
+							line-height: 1;
 						}
 					}
-
-					// 拖拽占位符 - 优化背景色,更贴近UI
-					// .channel-placeholder {
-					// 	width: 100%;
-					// 	height: 60rpx;
-					// 	border-radius: 30rpx;
-					// 	box-sizing: border-box;
-					// 	background-color: #E8EBF0;
-					// }
 				}
 			}
 		}
-
-		.success {
-			width: 100%;
-			height: 88rpx;
-			line-height: 88rpx;
-			background: linear-gradient(136deg, #38D97D 0%, #02B176 100%);
-			border-radius: 44rpx 44rpx 44rpx 44rpx;
-			font-weight: 600;
-			font-size: 32rpx;
-			color: #FFFFFF;
-			text-align: center;
-		}
 	}
 
-	.w40 {
-		width: 40rpx;
+	.success {
+		width: 100%;
+		height: 88rpx;
+		line-height: 88rpx;
+		background: linear-gradient(136deg, #38D97D 0%, #02B176 100%);
+		border-radius: 44rpx 44rpx 44rpx 44rpx;
+		font-weight: 600;
+		font-size: 32rpx;
+		color: #FFFFFF;
+		text-align: center;
 	}
+}
 
-	.h40 {
-		height: 40rpx;
-	}
+.w40 {
+	width: 40rpx;
+}
+
+.h40 {
+	height: 40rpx;
+}
 </style>

+ 1 - 1
components/chengpeng-audio/free-audio.vue

@@ -15,7 +15,7 @@
 				:step='0.1'
 				backgroundColor="#E9F0F0"
 				:block-size='14'
-				block-color='#2BC7B9'>
+				block-color='#02B176'>
 			</slider>
 		</view>
 		<view class='ml-3'>{{getTime(Math.round(currentTime))}}</view>

+ 75 - 62
components/coupon-popup/coupon-popup.vue

@@ -8,7 +8,7 @@
 			<view class="coupon-popup-content">
 				<view v-if="couponsList.length > 0" class="tui-coupon-list">
 					<view class="tui-coupon-item" v-for="(item, index) in couponsList" :key="index">
-						<view class="tui-coupon-container" :class="{ 'tui-coupon-disabled': item.status == 1 }">
+						<view class="tui-coupon-container" :class="{ 'tui-coupon-disabled': item.couponStatus != 0 }">
 							<!-- 左侧价格区域 -->
 							<view class="tui-coupon-left">
 								<view class="tui-coupon-price-wrapper">
@@ -40,17 +40,17 @@
 							<view class="tui-coupon-action">
 								<view 
 									class="tui-btn" 
-									:class="{ 'tui-btn-received': item.status == 1 }"
+									:class="{ 'tui-btn-received': item.couponStatus != 0 }"
 									@click="getCouponIssueById(item)"
 								>
-									{{ item.status == 1 ? '已领取' : '立即领取' }}
+									{{ getCouponStatusText(item.couponStatus) }}
 								</view>
 							</view>
 						</view>
 					</view>
 				</view>
 				<view v-else class="no-data-box">
-					<image src="/static/images/no_data.png" mode="aspectFit"></image>
+					<image src="https://cdn.his.cdwjyyh.com/images/no_data.png" mode="aspectFit"></image>
 					<view class="empty-title">暂无优惠券</view>
 					<view class="empty-desc">更多优惠敬请期待</view>
 				</view>
@@ -60,7 +60,7 @@
 </template>
 
 <script>
-import { getCompanyCouponIssueList, receive, getCouponIssueById as apiGetCouponIssueById } from '@/api/coupon'
+import { getCouponIssueList, receive, getCouponIssueById as apiGetCouponIssueById } from '@/api/coupon'
 
 export default {
 	name: 'CouponPopup',
@@ -107,7 +107,7 @@ export default {
 		getCouponsList() {
 			if (this.loadend) return
 			this.loading = true
-			getCompanyCouponIssueList().then(res => {
+			getCouponIssueList().then(res => {
 				this.loading = false
 				if (res.code == 200) {
 					this.couponsList.push.apply(this.couponsList, res.data.list)
@@ -121,67 +121,80 @@ export default {
 		},
 		
 	// 获取销售可用套餐卷
-		getCouponIssueById(item) {
-			console.log('获取销售可用套餐卷item:', item)
-			if (this.loading) return
-			if (item.status == 1) return
-			this.loading = true
-			// 调用接口获取优惠券信息
-			const data = { id: item.id };
-			console.log('API参数:', data)
-			apiGetCouponIssueById(data).then(res => {
-				this.loading = false
-				console.log('获取销售可用套餐卷接口返回:', res)
-				if (res && (res.code == 200 || res.msg == "success")) {
-					console.log('获取销售可用套餐卷成功,准备调用领取方法')
-					// 调用领取优惠券方法,传递完整的item对象
-					this.receiveCoupon(item, res.code)
-				} else {
-					console.error('获取销售可用套餐卷失败:', res.message || '接口返回错误')
+			getCouponIssueById(item) {
+				console.log('获取销售可用套餐卷item:', item)
+				if (this.loading) return
+				if (item.couponStatus != 0) return
+				this.loading = true
+				// 调用接口获取优惠券信息
+				const data = { id: item.id };
+				console.log('API参数:', data)
+				apiGetCouponIssueById(data).then(res => {
+					this.loading = false
+					console.log('获取销售可用套餐卷接口返回:', res)
+					if (res && (res.code == 200 || res.msg == "success")) {
+						console.log('获取销售可用套餐卷成功,准备调用领取方法')
+						// 调用领取优惠券方法,传递完整的item对象
+						this.receiveCoupon(item, res.code)
+					} else {
+						console.error('获取销售可用套餐卷失败:', res.message || '接口返回错误')
+						uni.showToast({
+							title: res.message || '获取优惠券信息失败',
+							icon: 'none'
+						})
+					}
+				}).catch(err => {
+					this.loading = false
+					console.error('获取销售可用套餐卷异常:', err)
 					uni.showToast({
-						title: res.message || '获取优惠券信息失败',
+						title: '获取优惠券信息失败',
 						icon: 'none'
 					})
-				}
-			}).catch(err => {
-				this.loading = false
-				console.error('获取销售可用套餐卷异常:', err)
-				uni.showToast({
-					title: '获取优惠券信息失败',
-					icon: 'none'
 				})
-			})
-		},
-		// 领取优惠券
-		receiveCoupon(item, code) {
-			console.log('领取优惠券item:', item)
-			if (!item) {
-				console.error('领取优惠券失败:item 参数未定义')
-				return
-			}
-			if (item.status == 1) return
-			receive({ id: item.id, code: code }).then(res => {
-				if (res.code == 200) {
-					uni.showToast({
-						title: '领取成功',
-						icon: 'success'
-					})
-					// 更新优惠券状态
-					item.status = 1
-				} else {
-					uni.showToast({
-						title: res.message || '领取失败',
-						icon: 'none'
-					})
+			},
+		// 获取优惠券状态文本
+			getCouponStatusText(status) {
+				switch (status) {
+					case 0:
+						return '待领券'
+					case 1:
+						return '已领券'
+					case 2:
+						return '已失效'
+					case 3:
+						return '已使用'
+					default:
+						return '待领券'
 				}
-			}).catch(err => {
-				console.error('领取优惠券失败:', err)
-				uni.showToast({
-					title: '领取失败',
-					icon: 'none'
+			},
+			// 领取优惠券
+			receiveCoupon(item, code) {
+				console.log('领取优惠券item:', item)
+				if (!item) {
+					console.error('领取优惠券失败:item 参数未定义')
+					return
+				}
+				if (item.couponStatus != 0) return
+				receive({ id: item.id, code: code }).then(res => {
+					if (res.code == 200) {
+						uni.showToast({
+							title: res.msg,
+							icon: 'success'
+						})
+						// 更新优惠券状态
+						item.couponStatus = 1
+						this.getCouponsList();
+					} else {
+						uni.showToast({
+							title: res.msg || '领取失败',
+							icon: 'none'
+						})
+					}
+				}).catch(err => {
+					console.error('领取优惠券失败:', err)
+					
 				})
-			})
-		}
+			}
 	}
 }
 </script>
@@ -432,7 +445,7 @@ export default {
 	box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
 	
 	&:not(.tui-btn-received) {
-		background: linear-gradient(135deg, #4ECDC4 0%, #45B7AA 100%);
+		background: linear-gradient( 136deg, #38D97D 0%, #02B176 100%);
 		color: #FFFFFF;
 		
 		&:hover {

+ 1 - 1
components/evan-switch/evan-switch.vue

@@ -112,7 +112,7 @@
 		transition: background-color 0.3s;
 		width: 100upx;
 		height: 36upx;
-		background: #2BC7B9;
+		background: linear-gradient(136deg, #38D97D 0%, #02B176 100%);
 		border-radius: 18upx;
 		/* #ifndef APP-NVUE */
 		box-sizing: content-box;

+ 13 - 15
components/likeProduct.vue

@@ -12,7 +12,7 @@
 				<view class="info-box">
 					<view class="title ellipsis2">{{item.productName || item.title}}</view>
 					<view class="intro ellipsis">{{item.productInfo || item.intro}}</view>
-					<view class="sale">已售 {{item.sales || 0}} | 惊艳度{{item.amazingDegree || 0}}%</view>
+					<view class="sale">已售 {{item.sales || 0}} | 好评率{{item.amazingDegree || 0}}%</view>
 					<view class="lable-group">
 						<view class="lable-item" v-if="item.otPrice && item.price && parseFloat(item.otPrice) > parseFloat(item.price)">
 							{{Math.round((1 - parseFloat(item.price) / parseFloat(item.otPrice)) * 10 * 10) / 10}}折</view>
@@ -192,14 +192,14 @@
 		display: flex;
 		align-items: center;
 		justify-content: center;
-		padding: 30upx 0;
+		padding: 30rpx 0;
 		image{
-			width: 37upx;
-			height: 37upx;
-			margin-right: 20upx;
+			width: 37rpx;
+			height: 37rpx;
+			margin-right: 20rpx;
 		}
 		.text{
-			font-size: 36upx;
+			font-size: 36rpx;
 			font-family: PingFang SC;
 			font-weight: bold;
 			color: #111111;
@@ -241,7 +241,7 @@
 				flex: 1;
 
 				.title {
-					font-size: 26rpx;
+					font-size: 30rpx;
 					font-family: PingFang SC;
 					font-weight: 500;
 					color: #111111;
@@ -250,13 +250,13 @@
 
 				.intro {
 					font-weight: 400;
-					font-size: 22rpx;
+					font-size: 26rpx;
 					color: #D46C0D;
 					margin-bottom: 8rpx;
 				}
 
 				.sale {
-					font-size: 21rpx;
+					font-size: 26rpx;
 					color: #999999;
 				}
 
@@ -266,7 +266,6 @@
 
 					.lable-item {
 						margin-right: 8rpx;
-						height: 30rpx;
 						padding: 0 8rpx;
 						border-radius: 4rpx 4rpx 4rpx 4rpx;
 						border: 1rpx solid #FFA599;
@@ -279,20 +278,19 @@
 					display: flex;
 					align-items: center;
 					justify-content: space-between;
-					margin-top: 8upx;
+					margin-top: 8rpx;
 
 					.price {
 						font-weight: 600;
-						font-size: 26rpx;
+						font-size: 30rpx;
 						color: #FA341E;
-						font-size: 26rpx;
 
 						.unit {
-							font-size: 20upx;
+							font-size: 24rpx;
 						}
 
 						.bold {
-							font-size: 36upx;
+							font-size: 40rpx;
 						}
 					}
 					

+ 7 - 6
components/product-spec-popup/product-spec-popup.vue

@@ -17,7 +17,7 @@
 					</view>
 					<view class="desc-box">
 						<text class="text">月售{{product.sales || '0'}}件</text>
-						<text v-if="selectedSpec" class="text">库存{{selectedSpec.stock || 0}}件</text>
+						<!-- <text v-if="selectedSpec" class="text">库存{{selectedSpec.stock || 0}}件</text> -->
 					</view>
 				</view>
 			</view>
@@ -158,10 +158,12 @@ export default {
 		},
 		// 分割价格
 		splitPrice(price) {
-			const priceStr = parseFloat(price).toFixed(2).toString()
+			const safePrice = Number(price || 0)
+			const priceStr = safePrice.toFixed(2).toString()
+			const priceParts = priceStr.split('.')
 			return {
-				integer: priceStr.split('.')[0],
-				decimal: priceStr.split('.')[1]
+				integer: priceParts[0] || '0',
+				decimal: priceParts[1] || '00'
 			}
 		},
 		// 显示图片
@@ -251,7 +253,6 @@ export default {
 
 <style lang="scss" scoped>
 	.product-spec {
-		padding: 40rpx 30rpx;
 		.pro-info {
 			display: flex;
 			align-items: center;
@@ -423,7 +424,7 @@ export default {
 			margin-top: 30rpx;
 			background: linear-gradient(136deg, #38D97D 0%, #02B176 100%);
 			border: none;
-			
+			margin-bottom: 88rpx;
 			&.btnsel {
 				opacity: 0.6;
 			}

+ 77 - 0
components/public/cart-badge.vue

@@ -0,0 +1,77 @@
+<template>
+  <view class="cart-badge" @click="handleClick">
+    <image class="icon" src="https://cdn.his.cdwjyyh.com/images/shopping_car_icon.png" mode="aspectFit"></image>
+    <view v-if="displayCount > 0" class="badge">{{ displayCount }}</view>
+  </view>
+  </template>
+  
+  <script>
+  export default {
+    name: 'CartBadge',
+    props: {
+      count: {
+        type: Number,
+        default: 0
+      },
+      to: {
+        type: String,
+        default: ''
+      },
+      max: {
+        type: Number,
+        default: 99
+      }
+    },
+    computed: {
+      displayCount() {
+        if (typeof this.count !== 'number') return 0
+        return this.count > this.max ? this.max : this.count
+      }
+    },
+    methods: {
+      handleClick() {
+        this.utils.isLogin().then(res => {
+				if (this.to) {
+          uni.navigateTo({ url: this.to })
+        }
+			})
+        
+      }
+    }
+  }
+  </script>
+  
+  <style lang="scss" scoped>
+  .cart-badge {
+    position: relative;
+    width: 64rpx;
+    height: 64rpx;
+    left: 50rpx;
+    background: #FFFFFF;
+    border-radius: 50%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    box-shadow: 0 4rpx 10rpx rgba(0,0,0,0.06);
+  }
+  .icon {
+    width: 40rpx;
+    height: 40rpx;
+  }
+  .badge {
+    position: absolute;
+    right: -6rpx;
+    top: -6rpx;
+    min-width: 28rpx;
+    height: 28rpx;
+    padding: 0 6rpx;
+    box-sizing: border-box;
+    border-radius: 16rpx;
+    background: #F56C6C;
+    color: #fff;
+    font-size: 18rpx;
+    line-height: 28rpx;
+    text-align: center;
+  }
+  </style>
+  

+ 65 - 148
components/public/product-nav-bar.vue

@@ -6,15 +6,17 @@
  * @Description: 商品分类导航栏组件
 -->
 <template>
-  <scroll-view class="product-nav-bar" scroll-x :scroll-left="scrollLeft" scroll-with-animation="true">
-    <view v-for="(item, index) in processedTabsData" :key="index" class="nav-item"
-      :class="index === tabCurrentIndex ? 'act-current' : ''" @tap="tabChange(index)" :id="'item-' + index">
-      <view class="item-title" :style="{ 'color': index === tabCurrentIndex ? activeColor : textColor }">
-        {{ item[nameKey] }}
+  <view class="product-nav-bar">
+    <view class="nav-container">
+      <view v-for="(item, index) in processedTabsData" :key="index" class="nav-item"
+        :class="index === tabCurrentIndex ? 'act-current' : ''" @tap="tabChange(index)" :id="'item-' + index">
+        <view class="item-title" :style="{ 'color': index === tabCurrentIndex ? activeColor : textColor }">
+          {{ item[nameKey] }}
+        </view>
+        <image class="nav-underline" src="https://fs-1319721001.cos.ap-chongqing.myqcloud.com/images/tab_hover.png"/>
       </view>
     </view>
-    <view class="nav-underline" :style="underlineStyle"></view>
-  </scroll-view>
+  </view>
 </template>
 
 <script>
@@ -36,17 +38,7 @@ export default {
     // 导航项名称键名
     nameKey: {
       type: String,
-      default: 'name',
-    },
-    // 导航项左侧间距px
-    calcLeft: {
-      type: Number,
-      default: 12,
-    },
-    // 是否需要滚动
-    isScroll: {
-      type: Boolean,
-      default: true,
+      default: 'recommendName',
     },
     // 选中导航项的字体颜色
     activeColor: {
@@ -62,9 +54,6 @@ export default {
   data() {
     return {
       scrollLeft: 0,
-      widthList: [],
-      screenWidth: 0,
-      itemPositions: [], // 存储每个导航项的位置信息
     };
   },
   computed: {
@@ -78,159 +67,87 @@ export default {
       }
       return [];
     },
-    // 计算下划线的样式
-    underlineStyle() {
-      if (this.itemPositions.length === 0 || this.tabCurrentIndex >= this.itemPositions.length) {
-        return {};
-      }
-      const position = this.itemPositions[this.tabCurrentIndex];
-      const left = position.left + position.width / 2;
-      const leftRpx = Math.round(left * 2);
-      const widthRpx = Math.round(position.width * 2);
-      return {
-        width: `${widthRpx}rpx`,
-        left: `${leftRpx}rpx`,
-        opacity: 1,
-        transform: 'translateX(-50%)',
-        backgroundColor: '#02B176'
-      };
-    },
   },
   watch: {
     tabCurrentIndex: function (val) {
       if (!this.isScroll) return
-      this.tabScroll(val);
-    },
-    processedTabsData: function (val) {
-      this.init();
+      // 滚动逻辑可以根据需要保留或修改
     },
   },
   methods: {
     // 导航栏点击
-    tabChange(index) {
+    tabChange(index, cateId) {
+      console.log("点击一级分类", index, cateId);
       let self = this;
-      self.$emit('tabChange', index);
-    },
-    // 导航栏滚动
-    tabScroll(index) {
-      var widthArr = this.widthList;
-      var scrollWidth = 0;
-      for (var i = 0; i < index + 1; i++) {
-        scrollWidth += widthArr[i];
-      }
-      let currentWidth = widthArr[index];
-      // scrollView 居中算法
-      // 减去固定宽度位移
-      // 减去选中的bar的宽度的一半
-      scrollWidth -= this.screenWidth / 2;
-      scrollWidth -= currentWidth / 2;
-      this.scrollLeft = scrollWidth;
-    },
-    //滚动左侧
-    tabScrollLeft() {
-      this.scrollLeft = 0.5;
-      setTimeout(() => {
-        this.scrollLeft = 0;
-      }, 500);
-    },
-    // 计算导航项宽度
-    calculateItemWidth() {
-      let widthArr = [];
-      let positions = [];
-      Promise.all(
-        this.processedTabsData.map((_, index) =>
-          new Promise((resolve) => {
-            uni
-              .createSelectorQuery()
-              .in(this)
-              .select(`#item-${index}`)
-              .boundingClientRect((data) => {
-                if (data) {
-                  widthArr.push(data.width);
-                  positions.push({ left: data.left - this.calcLeft, width: data.width });
-                } else {
-                  // 兜底默认宽度
-                  widthArr.push(100);
-                  positions.push({ left: index * 100, width: 100 });
-                }
-                resolve();
-              })
-              .exec();
-          })
-        )
-      ).then(() => {
-        // 所有节点查询完毕,一次性赋值
-        this.widthList = widthArr;
-        this.itemPositions = positions;
-      });
-    },
-    // 计算窗口宽度
-    calculateWindowWidth() {
-      var info = uni.getSystemInfoSync();
-      this.screenWidth = info.screenWidth;
+      self.$emit('tabChange', index, cateId);
     },
-    init() {
-      const that = this;
-      this.calculateWindowWidth();
-      setTimeout(function () {
-        that.calculateItemWidth();
-      }, 1000);
-    },
-  },
-  created() {
-    this.init();
   },
 };
 </script>
 <style lang="scss" scoped>
-::v-deep.uni-scroll-view::-webkit-scrollbar {
+::v-deep.nav-container::-webkit-scrollbar {
   display: none;
 }
-
 .product-nav-bar {
   width: 100%;
-  // height: 110rpx;
-  white-space: nowrap;
-  flex: 1;
-  min-width: 0;
+  height: 110rpx;
   position: relative;
+  display: flex;
+  padding-bottom: 28rpx;
+  margin-top: 20rpx;
+  align-items: center;
+  justify-content: center;
+  border-radius: 16rpx 16rpx 16rpx 16rpx;
 
-  .nav-item {
-    height: 100%;
-    text-align: center;
-    display: inline-block;
-    position: relative;
-    font-size: 30rpx;
-    margin-right: 32rpx;
-    flex-shrink: 0;
+  .nav-container {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    flex-wrap: nowrap;
+    overflow-x: auto;
+    width: 100%;
+    padding: 0 20rpx;
+
+    .nav-item {
+      height: 100%;
+      text-align: center;
+      display: flex;
+      align-items: center;
+      position: relative;
+      font-size: 38rpx;
+      margin: 0 16rpx;
+      flex-shrink: 0;
 
-    &:last-child {
-      margin-right: 0;
+      .item-title {
+        line-height: 110rpx;
+        display: inline-block;
+        position: relative;
+        z-index: 10;
+      }
     }
+  }
 
+  .nav-item {
+    position: relative;
 
-    .item-title {
-      line-height: 90rpx;
-      display: inline-block;
-      position: relative;
-      z-index: 10;
+      .nav-underline {
+      position: absolute;
+      bottom: 0;
+      left: 50%;
+      transform: translateX(-50%);
+        width: 44rpx;
+        height: 14rpx;
+      opacity: 0;
+      transition: all 0.3s ease;
     }
-  }
 
-  .act-current {
-    // font-size: 40rpx;
-    font-weight: bold;
-  }
+    &.act-current {
+      font-weight: bold;
 
-  .nav-underline {
-    position: absolute;
-    height: 12rpx;
-    border-radius: 8rpx;
-    top: 60rpx;
-    left: 10px;
-    width: 0;
-    visibility: visible;
-    transition: all 0.3s ease;
+      .nav-underline {
+        opacity: 1;
+      }
+    }
   }
 }
-</style>
+</style>

+ 0 - 106
components/public/scs-helang-waterfall.vue

@@ -1,106 +0,0 @@
-<template>
-    <!--
- * @Author: jmy
- * @Date: 2026-01-09 12:02:41
- * @LastEditors: Please set LastEditors
- * @LastEditTime: 2026-01-09 15:02:20
- * @Description: helang瀑布流组件
--->
-    <view class="px-12 mt-14 flex  justify-between gap-11">
-        <view class="flex-1" :style="{ gap: gapValue + 'px' }" v-for="(column, columnIndex) in columnCount"
-            :key="columnIndex">
-            <view v-for="(item, index) in getColumnwaterfallList(columnIndex)" :key="item.id || index"
-                class="w-all relative rounded-8 overflow-hidden prodoct-item mb-11">
-                <slot name="special"></slot>
-                <view class="w-all h-171 relative rounded-t-8 overflow-hidden">
-                    <image class="w-all h-171 bg-img" :src="item.image" lazy-load @load="handleImageLoad(item.id)"
-                        :class="{ 'opacity-10': isImageLoaded(item.id), 'opacity-0': !isImageLoaded(item.id) }"
-                        mode="aspectFill"></image>
-                    <!-- 加载中显示占位符 -->
-                    <view v-if="!isImageLoaded(item.id)"
-                        class="w-all h-171 absolute top-0 left-0 flex items-center justify-center bg-gray-100">
-                        <text class="scroll-loading scroll-rotate"></text>
-                    </view>
-                </view>
-                <slot name="default" :item="item"></slot>
-            </view>
-        </view>
-    </view>
-</template>
-
-<script>
-export default {
-    props: {
-        waterfallList: {
-            type: Array,
-            default: () => [
-                {
-                    id: 1,
-                    image: 'https://img1.baidu.com/it/u=2172818577,3783888802&fm=253&app=138&f=JPEG?w=800&h=1422',
-                    title: '云南白药EGER每瓶重50g保险液每测试',
-                },
-                {
-                    id: 2,
-                    image: 'https://img1.baidu.com/it/u=2172818577,3783888802&fm=253&app=138&f=JPEG?w=800&h=1422',
-                    title: '云南白药EGER每瓶重50g保险液每测试',
-                },
-            ]
-        },
-        calcGap: {
-            type: Number,
-            default: 11
-        },
-        columnCount: {
-            type: Number,
-            default: 2
-        }
-    },
-    data() {
-        return {
-            // 默认示例数据
-            defaultwaterfallList: [
-
-            ],
-            // 图片加载状态管理
-            imageLoadingStatus: {}
-        }
-    },
-    computed: {
-        gapValue() {
-            return this.calcGap / this.columnCount
-        }
-    },
-    methods: {
-        // 检查图片是否已加载
-        isImageLoaded(id) {
-            // 特殊项(本地图片)默认已加载
-            if (!id) return true;
-            return this.imageLoadingStatus[id] === true;
-        },
-
-        // 处理图片加载完成事件
-        handleImageLoad(id) {
-            if (id) {
-                this.$set(this.imageLoadingStatus, id, true);
-            }
-        },
-
-        // 按列分配数据项
-        getColumnwaterfallList(columnIndex) {
-            const waterfallList = [];
-            const columnCount = 2;
-
-            // 将数据项分配到不同列
-            this.waterfallList.forEach((item, index) => {
-                if (index % columnCount === columnIndex) {
-                    waterfallList.push(item);
-                }
-            });
-
-            return waterfallList;
-        }
-    }
-}
-</script>
-
-<style lang="scss" scoped></style>

+ 64 - 31
components/public/top-nav-bar.vue

@@ -6,14 +6,14 @@
  * @Description: 顶部导航栏组件
 -->
 <template>
-  <scroll-view class="top-nav-bar" scroll-x :scroll-left="scrollLeft" scroll-with-animation="true">
+  <scroll-view class="top-nav-bar" scroll-x :scroll-left="scrollLeft" scroll-with-animation="true" :style="{ '--underline-width': underlineWidth + 'rpx', '--underline-left': underlineLeft + 'rpx', '--underline-opacity': underlineOpacity }">
     <view v-for="(item, index) in processedTabsData" :key="index" class="nav-item"
-      :class="index === tabCurrentIndex ? 'act-current' : ''" @tap="tabChange(item.cateId)" :id="'item-' + index">
+      :class="index === tabCurrentIndex ? 'act-current' : ''" @tap="onItemTap(index,item)" :id="'item-' + index">
       <view class="item-title" :style="{ 'color': index === tabCurrentIndex ? activeColor : textColor }">
         {{ item[nameKey] }}
       </view>
     </view>
-    <view class="nav-underline" :style="underlineStyle"></view>
+    <view class="nav-underline"></view>
   </scroll-view>
 </template>
 
@@ -72,28 +72,39 @@ export default {
     processedTabsData() {
       if (!this.tabsData) return [];
       if (Array.isArray(this.tabsData)) {
-        return this.tabsData;
+        const base = this.tabsData || [];
+        const cherry = { [this.nameKey]: '精选', cateId: null, _isCherry: true };
+        return [cherry, ...base];
       } else if (this.tabsData.data && Array.isArray(this.tabsData.data)) {
-        return this.tabsData.data;
+        const base = this.tabsData.data || [];
+        const cherry = { [this.nameKey]: '精选', cateId: null, _isCherry: true };
+        return [cherry, ...base];
       }
       return [];
     },
-    // 计算下划线的样式
-    underlineStyle() {
+    // 计算下划线的宽度
+    underlineWidth() {
       if (this.itemPositions.length === 0 || this.tabCurrentIndex >= this.itemPositions.length) {
-        return {};
+        return 0;
+      }
+      const position = this.itemPositions[this.tabCurrentIndex];
+      return Math.round(position.width * 2);
+    },
+    // 计算下划线的左侧位置
+    underlineLeft() {
+      if (this.itemPositions.length === 0 || this.tabCurrentIndex >= this.itemPositions.length) {
+        return 0;
       }
       const position = this.itemPositions[this.tabCurrentIndex];
       const left = position.left + position.width / 2;
-      const leftRpx = Math.round(left * 2);
-      const widthRpx = Math.round(position.width * 2);
-      return {
-        width: `${widthRpx}rpx`,
-        left: `${leftRpx}rpx`,
-        opacity: 1,
-        transform: 'translateX(-50%)',
-        backgroundColor: '#02B176'
-      };
+      return Math.round(left * 2);
+    },
+    // 计算下划线的透明度
+    underlineOpacity() {
+      if (this.itemPositions.length === 0 || this.tabCurrentIndex >= this.itemPositions.length) {
+        return 0;
+      }
+      return 1;
     },
   },
   watch: {
@@ -106,11 +117,24 @@ export default {
     },
   },
   methods: {
+    //精选:不在此发请求,改为通知父层/其他组件处理
+    cherryPick() {
+      this.$emit('cherryPick')
+    },
+    // 统一处理点击:普通项触发tabChange,精选触发cherryPick并保持切换效果
+    onItemTap(index, item) {
+      console.log('点击导航项:', index, item);
+      if (item && item._isCherry) {
+        this.cherryPick(index);
+      }
+      this.tabChange(index, item ? item.cateId : undefined);
+    },
+    
     // 导航栏点击
-    tabChange(index) {
-      console.log("点击一级分类", index);
+    tabChange(index, cateId) {
+      console.log("点击一级分类", index, cateId);
       let self = this;
-      self.$emit('tabChange', index);
+      self.$emit('tabChange', index, cateId);
     },
     // 导航栏滚动
     tabScroll(index) {
@@ -138,6 +162,11 @@ export default {
     calculateItemWidth() {
       let widthArr = [];
       let positions = [];
+      // 确保 processedTabsData 有数据
+      if (this.processedTabsData.length === 0) {
+        console.log('No tabs data available');
+        return;
+      }
       Promise.all(
         this.processedTabsData.map((_, index) =>
           new Promise((resolve) => {
@@ -163,13 +192,15 @@ export default {
         // 所有节点查询完毕,一次性赋值
         this.widthList = widthArr;
         this.itemPositions = positions;
+        // console.log('Calculated item positions:', this.itemPositions);
+        // console.log('Calculated width list:', this.widthList);
       });
     },
     // 计算窗口宽度
-    calculateWindowWidth() {
-      var info = uni.getSystemInfoSync();
-      this.screenWidth = info.screenWidth;
-    },
+		calculateWindowWidth() {
+			var info = uni.getWindowInfo();
+			this.screenWidth = info.screenWidth;
+		},
     init() {
       const that = this;
       this.calculateWindowWidth();
@@ -201,7 +232,7 @@ export default {
     text-align: center;
     display: inline-block;
     position: relative;
-    font-size: 30rpx;
+    font-size: 34rpx;
     margin-right: 32rpx;
     flex-shrink: 0;
 
@@ -219,19 +250,21 @@ export default {
   }
 
   .act-current {
-    // font-size: 40rpx;
     font-weight: bold;
   }
 
   .nav-underline {
     position: absolute;
-    height: 12rpx;
-    border-radius: 8rpx;
+    height: 14rpx;
+    border-radius: 6rpx;
     top: 60rpx;
-    left: 10px;
-    width: 0;
+    width: var(--underline-width, 0);
+    left: var(--underline-left, 0);
+    opacity: var(--underline-opacity, 0);
     visibility: visible;
     transition: all 0.3s ease;
+    background: linear-gradient( 90deg, rgba(56,217,125,0.5) 0%, rgba(56,217,125,0) 100%);
+    transform: translateX(-50%);
   }
 }
-</style>
+</style>

+ 292 - 306
components/px-popup-bottom/px-popup-bottom.vue

@@ -1,315 +1,301 @@
 <template>
-	<view :class="['popup',{'popup-show':show}]" @mousewheel.prevent.stop @touchmove.stop.prevent
-		:style="{'z-index':zindex}">
-		<view class="mask" :style="{'z-index':maskZindex,bottom:bottom+'rpx'}" v-show="show" @click.stop="onClose"
-			@touchmove.prevent.stop></view>
-		<view :class="['content',{show}]" @click.stop @touchmove.prevent.stop :style="{'background-color':bgColor,height:`${height*2}rpx`,maxHeight:show ? cotMaxHeight:0,'border-top-right-radius':cotRadius,
-			'border-top-left-radius':cotRadius,transition: `all ${animaTime}s ease-in`,bottom:bottom+'rpx','z-index':zindex}">
-			<view id="title-bar" class="title-bar" v-show="title">
-				<view class="title" :style="{fontWeight:fontweight}">{{title}}</view>
-				<view class="close-wrap" @click.stop="onClose">
-					<image class="close-icon" :src="closeIcon" mode="widthFix"></image>
-				</view>
-			</view>
-			<view class="scroll-wrap">
-				<scroll-view :class="{'scroll-view':isAnimaStart}" scroll-y="true" style="height:100%;"
-					@scrolltolower="onScrollToLower">
-					<view id="popup_content" class="popup_content">
-						<slot></slot>
-					</view>
-				</scroll-view>
-			</view>
-		</view>
-	</view>
+  <view :class="['popup',{'popup-show':show}]"
+    @mousewheel.prevent.stop
+    @touchmove.stop.prevent
+    :style="{ zIndex: zindex }">
+    <view class="mask"
+      :style="{ zIndex: maskZindex, bottom: bottom + 'rpx' }"
+      v-show="show"
+      @click.stop="onClose"
+      @touchmove.prevent.stop>
+    </view>
+
+    <view :class="['content', { show }]"
+      @click.stop
+      @touchmove.prevent.stop
+      :style="{
+        backgroundColor: bgColor,
+        maxHeight: cotMaxHeight,
+        borderTopRightRadius: cotRadius + 'px',
+        borderTopLeftRadius: cotRadius + 'px',
+        transition: `all ${animaTime}s ease-in`,
+        bottom: bottom + 'rpx',
+        zIndex: zindex
+      }">
+      <view id="title-bar" class="title-bar" v-show="title">
+        <view class="title" :style="{ fontWeight: fontweight }">{{title}}</view>
+        <view class="close-wrap" @click.stop="onClose">
+          <image class="close-icon" :src="closeIcon" mode="widthFix"></image>
+        </view>
+      </view>
+
+      <view class="scroll-wrap">
+        <scroll-view class="scroll-view"
+          scroll-y
+          style="height:100%"
+          @scrolltolower="onScrollToLower">
+          <view id="popup_content" class="popup_content">
+            <slot></slot>
+          </view>
+        </scroll-view>
+      </view>
+    </view>
+  </view>
 </template>
 
+
 <script>
 	export default {
-		props: {
-			title: { //标题
-				type: String,
-				default: ''
-			},
-			fontweight: {
-				type: [String, Number],
-				default: 'normal'
-			},
-			visible: { //隐藏显示标识
-				type: Boolean,
-				default: false
-			},
-			maxHeight: { //内容区域最大高度
-				type: [String, Number],
-				default: '75%'
-			},
-			radius: { //顶部圆角
-				type: [String, Number],
-				default: '0'
-			},
-			animaTime: { //弹窗动画时间
-				type: Number,
-				default: 0.2
-			},
-			bottom: { //离底部距离
-				type: [String, Number],
-				default: 0
-			},
-			bgColor: {
-				type: [String],
-				default: '#ffffff'
-			},
-			zindex: {
-				type: [String, Number],
-				default: 1000
-			},
-			maskZindex: {
-				type: [String, Number],
-				default: 999
-			},
-			always: { //是否每次打开都重新计算内容高度
-				type: Boolean,
-				default: false
-			},
-
-		},
-		data() {
-			return {
-				show: false,
-				height: 0,
-				PopHeight: 0,
-				cotMaxHeight: '',
-				isAnimaStart: false,
-				rpxRate: "",
-				cotRadius: 0,
-				closeIcon: 'https://cdn.his.cdwjyyh.com/images/close40.png'
-			}
-		},
-		watch: {
-			visible(newval) {
-				this.isAnimaStart = true;
-				setTimeout(() => {
-					this.isAnimaStart = false;
-				}, this.animaTime * 1000)
-
-				if (newval && this.height === 0) {
-					if (this.PopHeight === 0 || this.always) {
-						this.setContViewHeight();
-
-					} else {
-						this.height = this.PopHeight
-					}
-
-					// #ifdef H5 
-					this.setBodyOverFlow('hidden') //阻止滚动穿透
-					//#endif
-					this.$emit('open')
-
-				} else {
-					this.height = 0;
-					// #ifdef H5 
-					this.setBodyOverFlow('visible')
-					//#endif
-
-				}
-
-				this.show = newval
-
-			},
-			maxHeight: {
-				handler(newval) {
-					this.cotMaxHeight = this.unitCheck(newval);
-
-				},
-				immediate: true
-			},
-			radius: {
-				handler(newval) {
-					this.cotRadius = this.unitCheck(newval);
-
-				},
-				immediate: true
-			}
-		},
-		created() {
-			this.rpxRate = this.getRpxRate()
-		},
-		mounted() {
-			this.$nextTick(() => {
-				// #ifdef H5
-				this.preventTouch(document.querySelector(
-					'.scroll-wrap .uni-scroll-view .uni-scroll-view')); //防止浏览器报错
-				//#endif
-			})
-		},
-		methods: {
-			onClose() {
-				console.log("关闭弹窗");
-				this.$emit("update:visible", false);
-				this.$emit('close')
-			},
-			//触底
-			onScrollToLower(e) {
-				this.$emit("reachBottom");
-			},
-			getRpxRate() {
-				let res = uni.getSystemInfoSync();
-				let width = res.windowWidth;
-				let rate = 750.00 / width;
-				return rate
-			},
-			unitCheck(value) {
-				const val = String(value);
-				if (!val.includes('px') && !val.includes('%')) {
-					return `${val}rpx`;
-				}
-				return val;
-
-			},
-			preventTouch(el) {
-				el.addEventListener('touchmove', function(e) {
-					e.stopPropagation();
-
-				}, {
-					passive: false
-				});
-			},
-			setBodyOverFlow(val) {
-				document.body.style.overflow = val
-			},
-
-			//设置内容区域高度
-			async setContViewHeight() {
-				let data = await this.computeHeight();
-				this.height = data.height + (this.title ? 100 / parseFloat(this.rpxRate) : 0);
-				this.PopHeight = this.height;
-			},
-			//计算内容区域高度
-			computeHeight() {
-				return new Promise(resolve => {
-					this.$nextTick(() => {
-						const query = uni.createSelectorQuery().in(this);
-						query.select('#popup_content').boundingClientRect(data => {
-							resolve(data)
-						}).exec();
-					})
-				})
-			}
-
-		}
-
+  props: {
+    title: {
+      type: String,
+      default: ''
+    },
+    fontweight: {
+      type: [String, Number],
+      default: 'normal'
+    },
+    visible: {
+      type: Boolean,
+      default: false
+    },
+    maxHeight: {
+      type: [String, Number],
+      default: '75%'
+    },
+    radius: {
+      type: [String, Number],
+      default: '0'
+    },
+    animaTime: {
+      type: Number,
+      default: 0.2
+    },
+    bottom: {
+      type: [String, Number],
+      default: 0
+    },
+    bgColor: {
+      type: [String],
+      default: '#ffffff'
+    },
+    zindex: {
+      type: [String, Number],
+      default: 1000
+    },
+    maskZindex: {
+      type: [String, Number],
+      default: 999
+    },
+    always: {
+      type: Boolean,
+      default: false
+    },
+  },
+  data() {
+    return {
+      show: false,
+      height: 0,
+      PopHeight: 0,
+      cotMaxHeight: '',
+      isAnimaStart: false,
+      rpxRate: 1, // 初始化
+      cotRadius: 0,
+      closeIcon: 'https://cdn.his.cdwjyyh.com/images/close40.png'
+    }
+  },
+  watch: {
+    visible(newVal) {
+      this.isAnimaStart = true
+      setTimeout(() => {
+        this.isAnimaStart = false
+      }, this.animaTime * 1000)
+
+      if (newVal) {
+        this.show = true
+        // 延迟再算高度(iOS 关键修复)
+        setTimeout(async () => {
+          if (this.PopHeight === 0 || this.always) {
+            await this.setContViewHeight()
+          } else {
+            this.height = this.PopHeight
+            this.cotMaxHeight = this.height + 'px'
+          }
+        }, 100) // iOS 必须加延迟,增加到100ms确保渲染完成
+
+        // #ifdef H5
+        this.setBodyOverFlow('hidden')
+        // #endif
+        this.$emit('open')
+      } else {
+        this.height = 0
+        this.cotMaxHeight = '0px'
+        this.show = false
+        // #ifdef H5
+        this.setBodyOverFlow('visible')
+        // #endif
+        this.$emit('close')
+      }
+    }
+  },
+  created() {
+    // 初始化 rpx 比例(关键修复)
+    const sys = uni.getSystemInfoSync()
+    this.rpxRate = sys.windowWidth / 750
+    this.cotRadius = this.radius * this.rpxRate
+  },
+  methods: {
+    onClose() {
+      this.$emit('update:visible', false)
+    },
+    onScrollToLower() {
+      this.$emit('scrolltolower')
+    },
+    setBodyOverFlow(val) {
+      // #ifdef H5
+      if (document && document.body) {
+        document.body.style.overflow = val
+      }
+      // #endif
+    },
+    async setContViewHeight() {
+      // 二次延迟确保 iOS 渲染完成
+      await new Promise(r => setTimeout(r, 50))
+      const data = await this.computeHeight()
+      // 标题高度:80rpx 转换为px(根据实际标题高度调整)
+      const titleH = this.title ? Math.ceil(80 * this.rpxRate) : 0
+      // 内容高度 + 标题高度 + 底部安全边距
+      const contentHeight = data.height + titleH + Math.ceil(20 * this.rpxRate)
+      const maxHeight = this.getMaxHeightPx()
+      this.height = Math.min(contentHeight, maxHeight)
+      this.PopHeight = this.height
+      this.cotMaxHeight = this.height + 'px'
+    },
+    computeHeight() {
+      return new Promise((resolve) => {
+        // 使用更长的延迟确保iOS渲染完成
+        setTimeout(() => {
+          const query = uni.createSelectorQuery().in(this)
+          query.select('#popup_content')
+            .boundingClientRect((data) => {
+              // iOS 兜底:拿不到就给更大的最小高度
+              const height = data && data.height > 0 ? data.height : 300
+              resolve({ height })
+            }).exec()
+        }, 50)
+      })
+    },
+    // 最大高度转 px
+    getMaxHeightPx() {
+      const sys = uni.getSystemInfoSync()
+      if (typeof this.maxHeight === 'string' && this.maxHeight.includes('%')) {
+        return sys.windowHeight * parseFloat(this.maxHeight) / 100
+      }
+      return Number(this.maxHeight) * this.rpxRate
+    }
+  }
+}
 
-	}
 </script>
 
 <style lang="scss" scoped>
-	.popup {
-
-		&.popup-show {
-			position: fixed;
-			top: 0;
-			right: 0;
-			left: 0;
-			bottom: 0;
-			overflow: hidden;
-			z-index: 999;
-		}
-
-		.mask {
-			position: fixed;
-			top: 0;
-			right: 0;
-			bottom: 0;
-			left: 0;
-			background-color: rgba($color: #000000, $alpha: 0.5);
-			z-index: 999;
-		}
-
-		.content {
-			position: fixed;
-			bottom: 0;
-			left: 0;
-			right: 0;
-			height: 0;
-			height: auto;
-			background-color: #ffffff;
-			transition: all 0.2s ease-in;
-			z-index: 1000;
-			display: flex;
-			flex-direction: column;
-			align-items: center;
-			overflow: hidden;
-
-			.title-bar {
-				width: 100%;
-				flex-shrink: 0;
-				text-align: center;
-				position: relative;
-				padding: 10rpx 70rpx 0;
-				box-sizing: border-box;
-				height: 80rpx;
-
-				.title {
-					font-size: 34upx;
-					font-family: PingFang SC;
-					font-weight: bold !important;
-					color: #111111;
-					width: 100%;
-					overflow: hidden;
-					text-overflow: ellipsis;
-					white-space: nowrap;
-				}
-
-				.close-wrap {
-					position: absolute;
-					top: 20rpx;
-					right: 10rpx;
-					padding: 10rpx 20rpx;
-					box-sizing: border-box;
-				}
-
-				.close-icon {
-					width: 40rpx;
-					height: 40rpx;
-				}
-			}
-
-			.scroll-wrap {
-				flex: 1;
-				height: 0;
-				width: 100%;
-			}
-
-			&.visible {
-				max-height: 75%;
-				overflow-y: hidden;
-				height: auto;
-
-			}
-		}
-	}
-
-	.scroll-view ::-webkit-scrollbar {
-		display: none !important;
-		width: 0 !important;
-		height: 0 !important;
-		-webkit-appearance: none;
-		background: transparent;
-
-	}
-
-	.popup_content {
-		width: 100%;
-		padding: 0rpx 30rpx;
-		box-sizing: border-box;
-
-		&::after {
-			display: block;
-			width: 100%;
-			content: "\00A0";
-			overflow: hidden;
-			opacity: 0;
-			height: 1rpx;
-		}
-
-	}
-</style>
+.popup {
+  &.popup-show {
+    position: fixed;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    overflow: hidden;
+    z-index: 999;
+  }
+
+  .mask {
+    position: fixed;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    background-color: rgba(0, 0, 0, 0.5);
+    z-index: 999;
+  }
+
+  .content {
+    position: fixed;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    /* 关键:不要同时写 height:0 + auto */
+    height: auto;
+    max-height: 0; /* 用 max-height 做动画 */
+    background-color: #fff;
+    transition: all 0.2s ease-in-out;
+    z-index: 1000;
+    display: flex;
+    flex-direction: column;
+    overflow: hidden;
+
+    &.show {
+      /* 高度由 JS 控制 */
+      max-height: 75vh;
+    }
+
+    .title-bar {
+      width: 100%;
+      flex-shrink: 0;
+      text-align: center;
+      position: relative;
+      padding: 20rpx 70rpx;
+      box-sizing: border-box;
+      min-height: 80rpx;
+
+      .title {
+        font-size: 34rpx;
+        font-family: PingFang SC, sans-serif;
+        font-weight: bold;
+        color: #111;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+      }
+
+      .close-wrap {
+        position: absolute;
+        top: 20rpx;
+        right: 20rpx;
+        padding: 10rpx;
+      }
+
+      .close-icon {
+        width: 40rpx;
+        height: 40rpx;
+      }
+    }
+
+    .scroll-wrap {
+      flex: 1;
+      width: 100%;
+      min-height: 0; /* iOS 必须加 */
+      position: relative;
+    }
+
+    .scroll-view {
+      height: 100%;
+      width: 100%;
+    }
+  }
+}
+
+.popup_content {
+  width: 100%;
+  padding: 0 30rpx 20rpx;
+  box-sizing: border-box;
+}
+
+/* 隐藏滚动条 */
+.scroll-view::-webkit-scrollbar {
+  display: none;
+  width: 0;
+  height: 0;
+}
+</style>

+ 34 - 0
custom-tab-bar/index.js

@@ -0,0 +1,34 @@
+Component({
+  data: {
+    selected: 0,
+    color: '#333333',
+    selectedColor: '#02B176',
+    list: [
+      { pagePath: '/pages/home/index', text: '首页', iconPath: 'https://cdn.his.cdwjyyh.com/images/home.png', selectedIconPath: 'https://cdn.his.cdwjyyh.com/images/home_sel.png' },
+      { pagePath: '/pages/life/life', text: '生活号', iconPath: 'https://cdn.his.cdwjyyh.com/images/life.png', selectedIconPath: 'https://cdn.his.cdwjyyh.com/images/life_sel.png' },
+      { pagePath: '/pages/user/index', text: '我的', iconPath: 'https://cdn.his.cdwjyyh.com/images/my.png', selectedIconPath: 'https://cdn.his.cdwjyyh.com/images/my_sel.png' }
+    ]
+  },
+  lifetimes: {
+    attached() {
+      // 初始化选中态
+      try {
+        const pages = getCurrentPages()
+        const route = pages && pages.length ? '/' + pages[pages.length - 1].route : ''
+        const idx = this.data.list.findIndex(t => t.pagePath === route)
+        this.setData({ selected: idx >= 0 ? idx : 0 })
+      } catch(e){}
+    }
+  },
+  methods: {
+    switchTab(e) {
+      const idx = e.currentTarget.dataset.index
+      const url = this.data.list[idx].pagePath
+      wx.switchTab({ url })
+      this.setData({ selected: idx })
+    },
+    setSelected(index) {
+      this.setData({ selected: index })
+    }
+  }
+})

+ 4 - 0
custom-tab-bar/index.json

@@ -0,0 +1,4 @@
+{
+  "component": true,
+  "usingComponents": {}
+}

+ 86 - 0
custom-tab-bar/index.vue

@@ -0,0 +1,86 @@
+<template>
+  <view class="tabbar">
+    <view class="tabbar-item" v-for="(item, idx) in tabs" :key="idx" @tap="switchTab(item, idx)">
+      <image class="icon" :src="current===idx ? item.selectedIconPath : item.iconPath" mode="aspectFit"></image>
+      <text class="label" :class="{active: current===idx}">{{ item.text }}</text>
+    </view>
+  </view>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      current: 0,
+      tabs: [
+        { pagePath: '/pages/home/index', text: '首页', iconPath: 'https://cdn.his.cdwjyyh.com/images/home.png', selectedIconPath: 'https://cdn.his.cdwjyyh.com/images/home_sel.png' },
+        { pagePath: '/pages/life/life', text: '生活号', iconPath: 'https://cdn.his.cdwjyyh.com/images/life.png', selectedIconPath: 'https://cdn.his.cdwjyyh.com/images/life_sel.png' },
+        { pagePath: '/pages/user/index', text: '我的', iconPath: 'https://cdn.his.cdwjyyh.com/images/my.png', selectedIconPath: 'https://cdn.his.cdwjyyh.com/images/my_sel.png' },
+      ]
+    }
+  },
+  created() {
+    this.syncSelected()
+  },
+  mounted() {
+    this.syncSelected()
+  },
+  methods: {
+    syncSelected() {
+      try {
+        const pages = getCurrentPages()
+        const route = pages && pages.length ? '/' + pages[pages.length - 1].route : ''
+        const idx = this.tabs.findIndex(t => t.pagePath === route)
+        this.current = idx >= 0 ? idx : 0
+      } catch(e){}
+    },
+    switchTab(item, idx) {
+      if (this.current === idx) return
+      this.current = idx
+      uni.switchTab({ url: item.pagePath })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.tabbar {
+  position: fixed;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  padding-top: 10rpx;
+  // height: 120rpx;
+  background: #ffffff;
+  display: flex;
+  align-items: center;
+  justify-content: space-around;
+  box-shadow: 0 -6rpx 20rpx rgba(0,0,0,0.06);
+  z-index: 999;
+  padding-bottom: constant(safe-area-inset-bottom);
+  padding-bottom: env(safe-area-inset-bottom);
+}
+.tabbar-item {
+  flex: 1;
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+}
+.icon {
+  width: 56rpx;
+  height: 56rpx;
+  flex-shrink: 0;
+}
+.label {
+  margin-top: 6rpx;
+  font-size: 28rpx;
+  color: #333333;
+}
+.label.active {
+  color: #02B176;
+  font-weight: 600;
+}
+</style>
+

+ 7 - 0
custom-tab-bar/index.wxml

@@ -0,0 +1,7 @@
+<view class="tabbar">
+  <view class="tabbar-item" wx:for="{{list}}" wx:key="index" data-index="{{index}}" bindtap="switchTab">
+    <image class="icon" src="{{selected===index ? item.selectedIconPath : item.iconPath}}"></image>
+    <text class="label" style="color: {{selected===index?selectedColor:color}}">{{ item.text }}</text>
+  </view>
+</view>
+

+ 33 - 0
custom-tab-bar/index.wxss

@@ -0,0 +1,33 @@
+.tabbar{
+  position: fixed;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  padding-top:10rpx;
+  background: #ffffff;
+  display: flex;
+  align-items: center;
+  justify-content: space-around;
+  box-shadow: 0 -6rpx 20rpx rgba(0,0,0,0.06);
+  z-index: 999;
+  padding-bottom: constant(safe-area-inset-bottom);
+  padding-bottom: env(safe-area-inset-bottom);
+}
+.tabbar-item{
+  flex: 1;
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+}
+.icon{
+  width: 64rpx;
+  height: 64rpx;
+  flex-shrink: 0;
+}
+.label{
+  margin-top: 6rpx;
+  font-size: 30rpx;
+}
+

+ 6 - 2
package.json

@@ -11,7 +11,9 @@
         "dayjs": "^1.11.18",
         "hls": "0.0.1",
         "tim-wx-sdk": "^2.17.0",
-        "vuex": "^4.1.0",
+        "vuex": "^3.6.2"
+    },
+    "devDependencies": {
         "@dcloudio/uni-cli-service": "^2.0.0",
         "@dcloudio/uni-app": "^2.0.0"
     },
@@ -19,7 +21,9 @@
     "scripts": {
         "test": "echo \"Error: no test specified\" && exit 1",
         "dev:h5": "npx @dcloudio/uni-cli-service dev --platform h5",
-        "build:h5": "npx @dcloudio/uni-cli-service build --platform h5"
+        "build:h5": "npx @dcloudio/uni-cli-service build --platform h5",
+        "dev:mp-weixin": "npx @dcloudio/uni-cli-service dev --platform mp-weixin",
+        "build:mp-weixin": "npx @dcloudio/uni-cli-service build --platform mp-weixin"
     },
     "author": "",
     "license": "ISC"

+ 130 - 22
pages.json

@@ -186,7 +186,17 @@
 	],
 	"subPackages": [{
 			"root": "pages_user",
-			"pages": [{
+			"pages": [
+				{
+					"path": "user/saveComment",
+					"style": {
+						"navigationBarTitleText": "收藏评论",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
 					"path": "user/addPatient",
 					"style": {
 						"navigationBarTitleText": "创建就诊人",
@@ -482,6 +492,14 @@
 
 					}
 
+				},
+				{
+					"path": "user/productComment",
+					"style": {
+						"navigationBarTitleText": "商品评价",
+						"enablePullDownRefresh": false
+					}
+
 				}
 
 			]
@@ -792,7 +810,7 @@
 				{
 					"path": "live/complaintList",
 					"style": {
-						"navigationBarTitleText": "反馈与投诉",
+						"navigationBarTitleText": "投诉建议",
 						"navigationBarTextStyle": "black",
 						"app-plus": {
 							"bounce": "none"
@@ -814,7 +832,6 @@
 					}
 
 				},
-
 				{
 					"path": "live/order",
 					"style": {
@@ -919,8 +936,21 @@
 						}
 					}
 				},
-				{
-					"path": "live/expert",
+			{
+					// 今日热卖榜
+					"path": "live/todayRanking",
+					"style": {
+						"navigationBarTitleText": "",
+						"navigationStyle": "custom",
+						"scrollIndicator": "none",
+						"navigationBarTextStyle": "black",
+						"app-plus": {
+							"bounce": "none"
+						}
+					}
+				},{
+					// 新品榜
+					"path": "live/newRanking",
 					"style": {
 						"navigationBarTitleText": "",
 						"navigationStyle": "custom",
@@ -931,7 +961,8 @@
 						}
 					}
 				},
-			
+
+				
 				{
 					// 实时销售榜
 					"path": "live/salesRanking",
@@ -944,7 +975,20 @@
 							"bounce": "none"
 						}
 					}
+				},{
+					// 首单优惠
+					"path": "live/firstOrder",
+					"style": {
+						"navigationBarTitleText": "",
+						"navigationStyle": "custom",
+						"scrollIndicator": "none",
+						"navigationBarTextStyle": "black",
+						"app-plus": {
+							"bounce": "none"
+						}
+					}
 				},
+				
 
 				{
 					"path": "live/trailer",
@@ -966,9 +1010,36 @@
 						}
 					}
 				},
+				 {
+					// 店铺
+					"path": "live/shop",
+					"style": {
+						"navigationBarTitleText": "",
+						"navigationStyle": "custom",
+						"scrollIndicator": "none",
+						"navigationBarTextStyle": "black",
+						"app-plus": {
+							"bounce": "none"
+						}
+					}
+				}
+
+
+			]
+		},{
+			"root": "pages_life",
+			"pages": [
 				{
-					// 生活号文章
-					"path": "live/article",
+					"path": "uploadVideo",
+					"style": {
+					"navigationBarTitleText": "发布视频",
+						"navigationBarTextStyle": "black",
+						"app-plus": {
+							"bounce": "none"
+						}
+					}
+				},{
+					"path": "video",
 					"style": {
 						"navigationBarTitleText": "",
 						"navigationStyle": "custom",
@@ -979,8 +1050,18 @@
 						}
 					}
 				},{
-					// 申请达人
-					"path": "live/applyExpert",
+					"path": "expert",
+					"style": {
+						"navigationBarTitleText": "",
+						"navigationStyle": "custom",
+						"scrollIndicator": "none",
+						"navigationBarTextStyle": "black",
+						"app-plus": {
+							"bounce": "none"
+						}
+					}
+				},{
+					"path": "myExpert",
 					"style": {
 						"navigationBarTitleText": "",
 						"navigationStyle": "custom",
@@ -990,9 +1071,28 @@
 							"bounce": "none"
 						}
 					}
+				},{
+					"path": "reviewDetails",
+					"style": {
+						"navigationBarTitleText": "审核详情",
+						"enablePullDownRefresh": false
+					}
+
 				},  {
-					// 店铺
-					"path": "live/shop",
+					// 申请达人
+					"path": "applyExpert",
+					"style": {
+						"navigationBarTitleText": "",
+						"navigationStyle": "custom",
+						"scrollIndicator": "none",
+						"navigationBarTextStyle": "black",
+						"app-plus": {
+							"bounce": "none"
+						}
+					}
+				}, {
+					// 生活号文章
+					"path": "article",
 					"style": {
 						"navigationBarTitleText": "",
 						"navigationStyle": "custom",
@@ -1004,7 +1104,6 @@
 					}
 				}
 
-
 			]
 		},
 		{
@@ -1139,8 +1238,8 @@
 		"borderStyle": "white",
 		"backgroundColor": "#ffffff",
 		"height": "64px",
-		"fontSize": "12px",
-		"iconWidth": "18px",
+		"fontSize": "16px",
+		"iconWidth": "22px",
 		"spacing": "4px",
 		"list": [{
 				"pagePath": "pages/home/index",
@@ -1153,17 +1252,26 @@
 				"iconPath": "/static/images/life.png",
 				"selectedIconPath": "/static/images/life_sel.png",
 				"text": "生活号"
-			},{"pagePath": "pages/live/list",
-				"iconPath": "/static/images/live.png",
-				"selectedIconPath": "/static/images/live_sel.png",
-				"text": "直播"
-			},
+			}
+			// ,{"pagePath": "pages/live/list",
+			// 	"iconPath": "/static/images/live.png",
+			// 	"selectedIconPath": "/static/images/live_sel.png",
+			// 	"text": "直播"
+			// }
+			,
+			{
+				"pagePath": "pages/shopping/cart",
+				"iconPath": "/static/images/cart.png",
+				"selectedIconPath": "/static/images/cart_sel.png",
+				"text": "购物车"
+			}
+			,
 			{
 				"pagePath": "pages/user/index",
 				"iconPath": "/static/images/my.png",
 				"selectedIconPath": "/static/images/my_sel.png",
-				"text": "个人中心"
+				"text": "我的"
 			}
 		]
 	}
-}
+}

+ 18 - 21
pages/auth/login.vue

@@ -349,7 +349,7 @@
 
 				.title {
 					margin-top: 20rpx;
-					font-size: 35rpx;
+					font-size: 39rpx;
 					font-family: PingFang SC;
 					font-weight: bold;
 					color: #000;
@@ -358,7 +358,7 @@
 			}
 
 			.login-notice {
-				font-size: 28rpx;
+				font-size: 32rpx;
 				font-family: PingFang SC;
 				font-weight: 400;
 				color: #000;
@@ -378,11 +378,10 @@
 					position: absolute;
 					width: 630rpx;
 					height: 80rpx;
-					background: linear-gradient(to right, #2BC7B9 0%, #2aa7B9 100%);
-					background: -moz-linear-gradient(to right, #2BC7B9 0%, #2aa7B9 100%);
+					background: linear-gradient(90deg, #38D97D 0%, #02B176 100%);
 					// box-shadow: 0px 7rpx 6rpx 0px rgba(229, 138, 0, 0.22);
 					border-radius: 40rpx;
-					font-size: 30rpx;
+					font-size: 34rpx;
 					font-family: PingFang SC;
 					font-weight: 500;
 					color: rgba(255, 255, 255, 1);
@@ -394,11 +393,10 @@
 				// position: absolute;
 				width: 630rpx;
 				height: 80rpx;
-				background: linear-gradient(to right, #2BC7B9 0%, #2aa7B9 100%);
-				background: -moz-linear-gradient(to right, #2BC7B9 0%, #2aa7B9 100%);
+				background: linear-gradient(90deg, #38D97D 0%, #02B176 100%);
 				// box-shadow: 0px 7rpx 6rpx 0px rgba(229, 138, 0, 0.22);
 				border-radius: 40rpx;
-				font-size: 30rpx;
+				font-size: 34rpx;
 				font-family: PingFang SC;
 				font-weight: 500;
 				color: rgba(255, 255, 255, 1);
@@ -407,11 +405,10 @@
 			.author-btn {
 				width: 630rpx;
 				height: 80rpx;
-				background: linear-gradient(to right, #2BC7B9 0%, #2aa7B9 100%);
-				background: -moz-linear-gradient(to right, #2BC7B9 0%, #2aa7B9 100%);
+				background: linear-gradient(90deg, #38D97D 0%, #02B176 100%);
 				// box-shadow: 0px 7rpx 6rpx 0px rgba(229, 138, 0, 0.22);
 				border-radius: 40rpx;
-				font-size: 30rpx;
+				font-size: 34rpx;
 				font-family: PingFang SC;
 				font-weight: 500;
 				color: rgba(255, 255, 255, 1);
@@ -422,12 +419,12 @@
 				height: 80rpx;
 				margin-top: 30rpx;
 				border-radius: 40rpx;
-				border: 2rpx solid #2BC7B9;
+				border: 2rpx solid #02B176;
 				background: none;
-				font-size: 30rpx;
+				font-size: 34rpx;
 				font-family: PingFang SC;
 				font-weight: 500;
-				color: #2BC7B9;
+				color: #02B176;
 			}
 		}
 	}
@@ -437,13 +434,13 @@
 		display: flex;
 		justify-content: center;
 		align-items: center;
-		font-size: 28rpx;
+		font-size: 32rpx;
 		color: #000;
 
 		checkbox {}
 
 		.btn {
-			color: #2BC7B9;
+			color: #02B176;
 		}
 	}
 
@@ -496,8 +493,8 @@
 					width: 50%;
 					height: 80rpx;
 					border-radius: 5rpx;
-					background-color: #2BC7B9;
-					font-size: 30rpx;
+					background-color: #02B176;
+					font-size: 34rpx;
 					font-family: PingFang SC;
 					font-weight: 500;
 					color: #fff;
@@ -509,12 +506,12 @@
 					width: 50%;
 					height: 80rpx;
 					border-radius: 5rpx;
-					border: 2rpx solid #2BC7B9;
+					border: 2rpx solid #02B176;
 					background: none;
-					font-size: 30rpx;
+					font-size: 34rpx;
 					font-family: PingFang SC;
 					font-weight: 500;
-					color: #2BC7B9;
+					color: #02B176;
 				}
 			}
 		}

+ 1 - 1
pages/common/launch.vue

@@ -77,7 +77,7 @@
 			height:120rpx;
 		}
 		.text{
-			font-size: 28rpx;
+			font-size: 32rpx;
 			margin-top: 20rpx;
 		}
 	}

+ 1 - 1
pages/doctor/doctorQr.vue

@@ -83,7 +83,7 @@
 				border-radius: 60rpx;
 				background-color: red;
 				color: #fff;
-				font-size: 30rpx;
+				font-size: 34rpx;
 				font-family: 'PingFangTC-Regular';
 				font-weight: 600;
 			}

+ 6 - 6
pages/healthy/detail.vue

@@ -18,14 +18,14 @@
 				<view class="peop-box" @click="showUsers">
 					<view class="head-box">
 						<view class="head" v-for="(subitem,j) in views" :key="j">
-							<image :src="subitem.avatar==null?'/static/images/detault_head.jpg':subitem.avatar" mode=""></image>
+							<image :src="subitem.avatar==null?'https://cdn.his.cdwjyyh.com/images/detault_head.jpg':subitem.avatar" mode=""></image>
 						</view>
 					</view>
-					<image class="arrow" src="/static/images/arrow_gray.png" mode=""></image>
+					<image class="arrow" src="https://cdn.his.cdwjyyh.com/images/arrow_gray.png" mode=""></image>
 				</view>
 			</view>
 			<view class="share-btn">
-				<image src="/static/images/share.png" mode=""></image>
+				<image src="https://cdn.his.cdwjyyh.com/images/share.png" mode=""></image>
 				<text>分享</text>
 				<button  class="share" data-name="shareBtn" open-type="share">分享</button>
 			</view>
@@ -33,7 +33,7 @@
 		<!-- 咨询按钮 -->
 		<view class="inquiry">
 			<view class="content">
-				<image src="/static/images/consult.png" mode=""></image>
+				<image src="https://cdn.his.cdwjyyh.com/images/consult.png" mode=""></image>
 				<text class="text">咨询</text>
 				<button class="contact-btn" open-type="contact"></button>
 			</view>
@@ -195,7 +195,7 @@
 			font-family: PingFang SC;
 			font-weight: 500;
 			color: #FFFFFF;
-			background: #2BC7B9;
+			background: linear-gradient(136deg, #38D97D 0%, #02B176 100%);
 			border-radius: 40upx;
 			display: flex;
 			align-items: center;
@@ -240,7 +240,7 @@
 				font-size: 22upx;
 				font-family: PingFang SC;
 				font-weight: bold;
-				color: #2BC7B9;
+				color: #02B176;
 				line-height: 1;
 			}
 			 

+ 4 - 4
pages/healthy/index.vue

@@ -8,7 +8,7 @@
 			<view class="search-cont">
 				<view class="inner">
 					<image class="icon-search" src="https://cdn.his.cdwjyyh.com/images/search.png" mode=""></image>
-					<input type="text" v-model="searchValue" placeholder="输入关键字搜索" confirm-type="search" @confirm="doSearch" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
+					<input type="text" v-model="searchValue" placeholder="输入关键字搜索" confirm-type="search" @confirm="doSearch" placeholder-style="font-size:32rpx;color:#BBBBBB;font-family: PingFang SC;" />
 				</view>
 			</view>
 			<view class="keyword-list">
@@ -246,15 +246,15 @@
 			font-size: 28upx;
 			font-family: PingFang SC;
 			font-weight: 500;
-			color: #2BC7B9;
+			color: #02B176;
 			background: #F5FFFE;
 			border: 1px solid #8AD5CE;
 			border-radius: 32upx;
 			margin: 0 20upx 20upx 0;
 			&.active{
 				color: #FFFFFF;
-				background: #2BC7B9;
-				border: 1px solid #2BC7B9;
+				background: linear-gradient(136deg, #38D97D 0%, #02B176 100%);
+				border: 1px solid #02B176;
 			}
 		}
 	}

+ 163 - 48
pages/home/cert.vue

@@ -1,72 +1,187 @@
 <template>
-	<view class="my-content">
-		<view class="item" v-for="item in certs">
-			<image @click="showImg(item)" :src="item"></image>
+	<view class="cert-container">
+		<!-- 加载状态 -->
+		<view v-if="loading" class="loading-container">
+			<view class="loading-spinner"></view>
+			<text class="loading-text">加载中...</text>
 		</view>
 		
+		<!-- 错误状态 -->
+		<view v-else-if="error" class="error-container">
+			<text class="error-text">{{ error }}</text>
+			<button class="retry-button" @click="getStoreConfig">重新加载</button>
+		</view>
+		
+		<!-- 证书列表 -->
+		<view v-else class="cert-list">
+			<view class="cert-item" v-for="(cert, index) in certs" :key="index">
+				<image 
+					@click="showImg(cert, index)" 
+					:src="cert"
+					class="cert-image"
+					mode="aspectFit"
+				/>
+			</view>
+			
+			<!-- 空状态 -->
+			<view v-if="certs.length === 0" class="empty-container">
+				<text class="empty-text">暂无证书信息</text>
+			</view>
+		</view>
 	</view>
 </template>
 
 <script>
- 
- export default {
- 	data() {
- 		return {
-			 certs:[
-			 ]
- 		}
- 	},
-	onLoad(val) {
-		 var config=JSON.parse(uni.getStorageSync('config'));
-		 this.certs=config.certs.split(",");
-		 console.log(this.certs)
+import { getStoreConfig } from '@/api/common'
+export default {
+	data() {
+		return {
+			certs: [],
+			loading: true,
+			error: ''
+		}
+	},
+	onLoad() {
+		this.getStoreConfig();
 	},
 	methods: {
-		showImg(item) {
-			 //预览图片
-			 var urls=[];
-			 urls.push(item)
-			 console.log(urls)
-			 console.log(item)
-			 uni.previewImage({
-			 	urls: urls,
-			 	current: 0
-			 });
+		getStoreConfig() {
+			this.loading = true;
+			this.error = '';
+			
+			getStoreConfig().then(res => {
+				this.loading = false;
+				if (res.code === 200 && res.data && res.data.certs) {
+					this.certs = res.data.certs.split(",").filter(item => item.trim());
+				} else {
+					this.error = '获取证书信息失败';
+				}
+			}).catch(err => {
+				this.loading = false;
+				this.error = '网络错误,请重试';
+			});
+		},
+		showImg(cert, index) {
+			// 预览图片,使用完整的证书数组
+			uni.previewImage({
+				urls: this.certs,
+				current: index
+			});
 		},
 	}
-	
-	
- 	 
- }
- 
- 
+}
 </script>
 
-
 <style scoped lang="scss">
-page{
+page {
 	height: 100%;
+	background-color: #f5f5f5;
 }
-.my-content{
+
+.cert-container {
 	width: 100%;
+	min-height: 100vh;
+	padding: 24rpx;
+	box-sizing: border-box;
+}
+
+/* 加载状态 */
+.loading-container {
 	display: flex;
 	flex-direction: column;
+	align-items: center;
 	justify-content: center;
+	height: 80vh;
+}
+
+.loading-spinner {
+	width: 60rpx;
+	height: 60rpx;
+	border: 4rpx solid #e0e0e0;
+	border-top: 4rpx solid #02B176;
+	border-radius: 50%;
+	animation: spin 1s linear infinite;
+	margin-bottom: 20rpx;
+}
+
+@keyframes spin {
+	0% { transform: rotate(0deg); }
+	100% { transform: rotate(360deg); }
+}
+
+.loading-text {
+	font-size: 28rpx;
+	color: #666;
+}
+
+/* 错误状态 */
+.error-container {
+	display: flex;
+	flex-direction: column;
 	align-items: center;
-	.item{
-		display: flex;
-		flex-direction: row;
-		justify-content: center;
-		align-items: center;
-		margin: 30rpx;
-		width: 100%;
-		image{
-			
-			
-		}
-	}
-	
+	justify-content: center;
+	height: 80vh;
+	gap: 24rpx;
+}
+
+.error-text {
+	font-size: 32rpx;
+	color: #ff3b30;
+	text-align: center;
+}
+
+.retry-button {
+	padding: 12rpx 48rpx;
+	background-color: #02B176;
+	color: white;
+	border: none;
+	border-radius: 32rpx;
+	font-size: 28rpx;
+}
+
+/* 证书列表 */
+.cert-list {
+	display: flex;
+	flex-direction: column;
+	gap: 24rpx;
 }
- 
 
+.cert-item {
+	width: 100%;
+	background-color: white;
+	border-radius: 16rpx;
+	padding: 20rpx;
+	box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.08);
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	overflow: hidden;
+}
+
+.cert-image {
+	width: 100%;
+	max-height: 500rpx;
+	border-radius: 8rpx;
+	transition: transform 0.3s ease;
+}
+
+.cert-image:active {
+	transform: scale(0.98);
+}
+
+/* 空状态 */
+.empty-container {
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	height: 400rpx;
+	background-color: white;
+	border-radius: 16rpx;
+	box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.08);
+}
+
+.empty-text {
+	font-size: 32rpx;
+	color: #999;
+}
 </style>

+ 146 - 19
pages/home/components/home-discount.vue

@@ -6,34 +6,35 @@
  * @Description: 自定义轮播图组件
 -->
 <template>
-	<view class="w-all relative zi-2 mt-4">
-		<swiper class="w-all" :style="{ height: height * 2 + 'rpx' }" :circular="circular"
+	<view class="home-discount-container">
+		<swiper class="home-discount-swiper" :style="{ height: height * 2 + 'rpx' }" :circular="circular"
 			:indicator-dots="indicatorDots" indicator-active-color="#02B176" indicator-color="#EEEEEE"
 			:autoplay="autoplay" :interval="interval" :duration="duration" :current="current"
-			:display-multiple-items="displayMultipleItems" :next-margin="nextMargin" @change="change"
+			:display-multiple-items="safeDisplayMultipleItems" :next-margin="nextMargin" @change="change"
 			@transition="transition" @animationfinish="animationfinish">
-			<swiper-item class="flex flex-wrap h-all" v-for="(item, index) in list" :key="index">
-				<view class="w-74 h-82 bg-white flex items-center justify-center" @click="handleNavTo(item)">
-					<view class="w-64 h-82 flex flex-column items-center justify-center">
-						<image :src="item.image || 'https://cdn.his.cdwjyyh.com/images/img.png'" class="w-35 h-44" />
-						<view class="h-15 text-ellipsis fw-400 fs-11 my-3">{{ item.productName || '商品名称' }}</view>
-						<view class="w-54 h-16 rounded-16 bg-FA341E text-white text-center fs-9 relative">
-							¥<text class="fs-13">{{ splitPrice(item.price).integer || '00' }}</text>
-							<text class="fs-9">{{ splitPrice(item.price).decimal || '00' }}</text>
+			<swiper-item class="home-discount-item" v-for="(item, index) in list" :key="index">
+				<view class="home-discount-product" @click.stop="handleNavTo(item)">
+					<view class="home-discount-product-content">
+						<image :src="item.image || 'https://cdn.his.cdwjyyh.com/images/img.png'" class="home-discount-product-image" />
+						<view class="home-discount-product-name">{{ item.productName || '商品名称' }}</view>
+						<view class="home-discount-product-price">
+							¥<text class="home-discount-product-price-integer">{{ splitPrice(item.price).integer || '00' }}</text>
+							<text class="home-discount-product-price-decimal">.{{ splitPrice(item.price).decimal || '00' }}</text>
 							<image src="https://cdn.his.cdwjyyh.com/images/sdyhzq_arrow_icon.png"
-								class="w-16 h-16 absolute top-0 left--6 zi-10" />
+								class="home-discount-product-arrow" />
 						</view>
 					</view>
 				</view>
 			</swiper-item>
 		</swiper>
-		<view class="flex items-center justify-center w-all gap-6 mt-11" v-if="isCustomDot">
-			<view v-for="(item, index) in list" :key="index" class="w-10 h-2 rounded-1"
-				:class="index == current ? 'bg-02B176' : 'bg-EEEEEE'"></view>
+		<view class="home-discount-dots" v-if="isCustomDot">
+			<view v-for="(item, index) in list" :key="index" class="home-discount-dot"
+				:class="index == current ? 'home-discount-dot-active' : ''"></view>
 		</view>
 	</view>
 </template>
 <script>
+import { getRecommendProduct } from '@/api/index.js'
 export default {
 	props: {
 		swiperList: {
@@ -87,13 +88,37 @@ export default {
 			currentDot: 0
 		}
 	},
+	computed: {
+		safeDisplayMultipleItems() {
+			// 确保display-multiple-items不大于swiper-item数量
+			return Math.min(this.displayMultipleItems, this.list.length || 1);
+		}
+	},
 	mounted() {
-		console.log("首单优惠专区", this.swiperList);
+		// console.log("首单优惠专区", this.swiperList);
 		// 添加存在性检查
-		this.list = this.swiperList && this.swiperList[0] && this.swiperList[0].productList ? this.swiperList[0].productList : [];
-		console.log("数据", this.swiperList);
+		this.getRecommendProduct();
+
+		// this.list = this.swiperList && this.swiperList[0] && this.swiperList[0].productList ? this.swiperList[0].productList : [];
+		// console.log("数据", this.swiperList);
 	},
 	methods: {
+		getRecommendProduct() {
+			getRecommendProduct({
+				recommendType: 'shelf'
+			}).then(res => {
+				console.log("首单优惠专区推荐商品", res);
+				if (res.code == 200) {
+					const arr = Array.isArray(res.data) ? res.data[0].productList : [];
+					this.list = arr.map(p => ({
+						image: p.image || p.firstImage || p.recommendImage || 'https://cdn.his.cdwjyyh.com/images/img.png',
+						productName: p.productName || p.title || '',
+						price: p.price || p.minPrice || 0,
+						productId: p.productId || p.id
+					}));
+				}
+			})
+		},
 		// handleNavTo(item) {
 		// 	console.log('跳转搜索',item)
 		// 	// 防护检查:确保 value 和 value.menuName 存在
@@ -142,4 +167,106 @@ export default {
 };
 </script>
 <style lang="scss" scoped>
-</style>
+.home-discount-container {
+    width: 100%;
+    position: relative;
+    z-index: 2;
+    margin-top: 8rpx;
+}
+
+.home-discount-swiper {
+    width: 100%;
+}
+
+.home-discount-item {
+    display: flex;
+    flex-wrap: wrap;
+    height: 100%;
+}
+
+.home-discount-product {
+    width: 148rpx;
+    height: 164rpx;
+    background-color: white;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+}
+
+.home-discount-product-content {
+    width: 128rpx;
+    height: 100%;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+    gap: 8rpx;
+}
+
+.home-discount-product-image {
+    width: 70rpx;
+    height: 88rpx;
+}
+
+.home-discount-product-name {
+    height: 30rpx;
+    text-overflow: ellipsis;
+    font-weight: 400;
+    font-size: 22rpx;
+    margin: 6rpx 0;
+    text-align: center;
+    overflow: hidden;
+    white-space: nowrap;
+}
+
+.home-discount-product-price {
+    width: 108rpx;
+    height: 32rpx;
+    border-radius: 32rpx;
+    background-color: #FA341E;
+    color: white;
+    text-align: center;
+    font-size: 18rpx;
+    position: relative;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+}
+
+.home-discount-product-price-integer {
+    font-size: 26rpx;
+}
+
+.home-discount-product-price-decimal {
+    font-size: 18rpx;
+}
+
+.home-discount-product-arrow {
+    width: 32rpx;
+    height: 32rpx;
+    position: absolute;
+    top: 0;
+    left: -12rpx;
+    z-index: 10;
+}
+
+.home-discount-dots {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    width: 100%;
+    gap: 12rpx;
+    margin-top: 22rpx;
+}
+
+.home-discount-dot {
+    width: 20rpx;
+    height: 4rpx;
+    border-radius: 2rpx;
+    background-color: #EEEEEE;
+}
+
+.home-discount-dot-active {
+    background-color: #02B176;
+}
+</style>

+ 294 - 118
pages/home/components/home-goods-item.vue

@@ -1,158 +1,334 @@
 <template>
-	<view class=" mt-14 m24">
+	<view class="goods-list-container">
 		<view v-if="productList.length > 0">
-			<view v-for="(product, index) in productList" :key="index" class="bg-white pb-10 rounded-8 overflow-hidden mb-14" @click="toDetail(product)">
-				<image class="w-all h-195" :src="(product.recommendImage || product.image) || 'https://cdn.his.cdwjyyh.com/images/img.png'"></image>
-				<view class="goods-count px-12 flex items-center justify-between text-white w-all h-32 rounded-6 mt--15 zi-2 relative">
-					<view class="fw-500 fs-18">热卖爆品</view>
-					<view class="fw-400 fs-13">已售{{ product.sales || '0' }}件</view>
+			<view v-for="(product, index) in productList" :key="index" class="goods-card" @click="toDetail(product)">
+				<view class="goods-image">
+					<image mode="widthFix"
+						:src="(product.recommendImage || product.image) || 'https://cdn.his.cdwjyyh.com/images/img.png'">
+					</image>
 				</view>
-				<view class="fw-500 fs-13 text-333333 mt-11 px-12">
-					{{ (product.productName || product.title) || '产品名称' }}
+				<view class="goods-badge">
+					<view class="badge-title">热卖爆品</view>
+					<view class="badge-sales">已售{{ product.sales || '0' }}件</view>
 				</view>
-				<view class="fw-400 fs-12 text-D46C0D mt-7 px-12">
-					处方药须凭处方在药师指导下购买和使用
+				<view class="goods-name">
+					{{product.productName|| '产品名称' }}
 				</view>
-				<view class="flex items-center justify-between mt-7 px-12">
-					<view class="flex items-center gap-4 text-FF4B33 fs-11" >
-						<view class="lable">9.5折</view>
-						<view class="lable">限购一份</view>
+				<view class="goods-warning">
+					{{product.productInfo|| '产品信息' }}
+				</view>
+				<view class="goods-tags-row">
+					<view class="tags-group">
+						<!-- <view class="tag">9.5折</view>
+						<view class="tag">限购一份</view> -->
 					</view>
-					<view class="flex items-center gap-2" @click.stop="showCouponPopup">
-						<view class="fs-12 text-FA341E fw-400">领券</view>
-						<image class="w-12 h-12" src="https://cdn.his.cdwjyyh.com/images/right_red.png"></image>
+					<view class="coupon-link" @click.stop="showCouponPopup">
+						<view class="coupon-text">领券</view>
+						<image class="coupon-arrow" src="https://cdn.his.cdwjyyh.com/images/right_red.png"></image>
 					</view>
 				</view>
-				<view class="flex items-center justify-between mt-8 px-12">
-					<view class="flex items-end gap-8">
-						<view class="text-FA341E">
-							<text class="fs-12 fw-600">¥</text>
-							<text class="fs-24 fw-600">{{ splitPrice(product.price).integer || '0' }}</text>
-							<text class="fs-15 fw-600">.{{ splitPrice(product.price).decimal || '0' }}</text>
+				<view class="goods-price-row">
+					<view class="price-group">
+						<view class="current-price">
+							<text class="price-symbol">¥</text>
+							<text class="price-integer">{{ splitPrice(product.price).integer || '0' }}</text>
+							<text class="price-decimal">.{{ splitPrice(product.price).decimal || '0' }}</text>
 						</view>
-						<view class="text-999999 fs-13 fw-400 text-line-through pb-3 line-through" v-if="product.otPrice">
+						<view class="original-price" v-if="product.otPrice">
 							¥{{ product.otPrice }}
 						</view>
 					</view>
-					<view class="flex items-center w-110 h-34 rounded-34 overflow-hidden">
-						<view class="w-44 h-all flex items-center justify-center bg-38D97D" @click.stop="addToCart(product)">
-							<image class="w-20 h-20" src="https://cdn.his.cdwjyyh.com/images/shopping_white.png"></image>
+					<view class="action-buttons">
+						<view class="cart-btn" @click.stop="addToCart(product)">
+							<image class="cart-icon" src="https://cdn.his.cdwjyyh.com/images/shopping_white.png">
+							</image>
 						</view>
-						<view class="flex-1 h-all flex items-center justify-center bg-02B176 fw-500 text-white fs-14" @click.stop="goToBuy(product)">
+						<view class="buy-btn" @click.stop="goToBuy(product)">
 							去购买
 						</view>
 					</view>
 				</view>
 			</view>
 		</view>
-		<view v-else class="bg-white pb-10 rounded-8 overflow-hidden mb-14 p-12">
-			<view class="fw-500 fs-13 text-333333">暂无商品数据</view>
+		<view v-else class="empty-goods-card">
+			<view class="empty-text">暂无商品数据</view>
 		</view>
 
 		<!-- 优惠券弹窗组件 -->
 		<CouponPopup v-model="showCoupon" />
 	</view>
 </template>
+
 <script>
-import{addCart} from "@/api/product.js"
-import CouponPopup from '@/components/coupon-popup/coupon-popup.vue'
-
-export default {
-	name: 'HomeGoodsItem',
-	components: {
-		CouponPopup
-	},
-	props: {
-		productList: {
-			type: Array,
-			default: () => []
-		}
-	},
-	data() {
-		return {
-			showCoupon: false
-		}
-	},
-	mounted() {
-		console.log("商品列表22", this.productList);
-		console.log("商品列表长度", this.productList.length);
-	},
-	watch: {
-		productList: {
-			immediate: true,
-			handler(newVal) {
-				console.log("商品列表变化", newVal);
-				console.log("商品列表长度变化", newVal.length);
+	import CouponPopup from '@/components/coupon-popup/coupon-popup.vue'
+
+	export default {
+		name: 'HomeGoodsItem',
+		components: {
+			CouponPopup
+		},
+		props: {
+			productList: {
+				type: Array,
+				default: () => []
+			}
+		},
+		data() {
+			return {
+				showCoupon: false,
+				_clickingCart: false,
+				_clickingBuy: false
 			}
-		}
-	},
-	methods: {
-		toDetail(product){
-			uni.navigateTo({
-				url: '/pages_shopping/shopping/productDetails?productId=' + product.productId
-			});
 		},
-		addCart() {
-				addCart(data).then(
-					res => {
-						if (res.code == 200) {
-							console.log("加购物车", res);
-						} else {
+		methods: {
+			toDetail(product) {
+				uni.navigateTo({
+					url: '/pages_shopping/shopping/productDetails?productId=' + product.productId
+				});
+			},
+			// 分割价格
+			splitPrice(price) {
+				if (!price || isNaN(parseFloat(price))) {
+					return {
+						integer: '0',
+						decimal: '00'
+					};
+				}
+				const priceStr = parseFloat(price).toFixed(2).toString();
+				return {
+					integer: priceStr.split('.')[0],
+					decimal: priceStr.split('.')[1]
+				};
+			},
+
+			// 添加到购物车
+			addToCart(product) {
+				if (this._clickingCart) return;
+				this._clickingCart = true;
+				// 触发父组件的添加购物车事件
+				this.$emit('addToCart', product);
+				setTimeout(() => {
+					this._clickingCart = false;
+				}, 400);
+			},
 
-						}
+			// 去购买
 
-					},
-					rej => {
 
+			goToBuy(product) {
+				if (this._clickingBuy) return;
+				this._clickingBuy = true;
+				// 触发父组件的去购买事件
+				this.utils.isLogin().then(res => {
+					if (res) {
+						this.$emit('goToBuy', product);
+						setTimeout(() => {
+							this._clickingBuy = false;
+						}, 400);
 					}
-				);
+				})
 			},
-		// 分割价格
-		splitPrice(price) {
-			if (!price || isNaN(parseFloat(price))) {
-				return {
-					integer: '0',
-					decimal: '00'
-				};
+
+			// 显示优惠券弹窗
+			showCouponPopup() {
+				this.showCoupon = true;
 			}
-			const priceStr = parseFloat(price).toFixed(2).toString();
-			return {
-				integer: priceStr.split('.')[0],
-				decimal: priceStr.split('.')[1]
-			};
-		},
+		}
+	};
+</script>
 
-		// 添加到购物车
-		addToCart(product) {
-			console.log('添加到购物车:', product);
-			// 触发父组件的添加购物车事件
-			this.$emit('addToCart', product);
-		},
+<style scoped lang="scss">
+	.goods-list-container {
+		padding: 0 24rpx;
+	}
 
-		// 去购买
-		goToBuy(product) {
-			console.log('去购买:', product);
-			// 触发父组件的去购买事件
-			this.$emit('goToBuy', product);
-		},
+	.goods-card {
+		background-color: #ffffff;
+		padding-bottom: 20rpx;
+		border-radius: 16rpx;
+		overflow: hidden;
+		margin-bottom: 28rpx;
+	}
 
-		// 显示优惠券弹窗
-		showCouponPopup() {
-			this.showCoupon = true;
+	.goods-image {
+		width: 100%;
+		height: 394rpx;
+		overflow: hidden;
+
+		image {
+			width: 100%;
+			height: 100%;
 		}
 	}
-};
-</script>
-<style scoped lang="scss">
-.goods-count {
-	background: linear-gradient(to right, #FA341E, #F4A007);
-}
-.lable{
-	border-radius: 4rpx 4rpx 4rpx 4rpx;
-border: 1rpx solid #FFA599;
-padding: 2rpx 8rpx;
-}
-.through{
-	text-decoration: line-through;
-}
+
+	.goods-badge {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		color: #ffffff;
+		// width: 100%;
+		height: 64rpx;
+		padding: 0 24rpx;
+		border-radius: 12rpx;
+		margin-top: -30rpx;
+		position: relative;
+		z-index: 2;
+		background: linear-gradient(to right, #FA341E, #F4A007);
+	}
+
+	.badge-title {
+		font-weight: 500;
+		font-size: 40rpx;
+	}
+
+	.badge-sales {
+		font-weight: 400;
+		font-size: 30rpx;
+	}
+
+	.goods-name {
+		font-weight: 500;
+		font-size: 30rpx;
+		color: #333333;
+		margin-top: 22rpx;
+		padding: 0 24rpx;
+	}
+
+	.goods-warning {
+		font-weight: 400;
+		font-size: 28rpx;
+		color: #D46C0D;
+		margin-top: 14rpx;
+		padding: 0 24rpx;
+	}
+
+	.goods-tags-row {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		margin-top: 14rpx;
+		padding: 0 24rpx;
+	}
+
+	.tags-group {
+		display: flex;
+		align-items: center;
+		gap: 8rpx;
+		color: #FF4B33;
+		font-size: 26rpx;
+	}
+
+	.tag {
+		border-radius: 8rpx;
+		border: 1rpx solid #FFA599;
+		padding: 4rpx 16rpx;
+	}
+
+	.coupon-link {
+		display: flex;
+		align-items: center;
+		gap: 4rpx;
+	}
+
+	.coupon-text {
+		font-size: 28rpx;
+		color: #FA341E;
+		font-weight: 400;
+	}
+
+	.coupon-arrow {
+		width: 28rpx;
+		height: 28rpx;
+	}
+
+	.goods-price-row {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		margin-top: 16rpx;
+		padding: 0 24rpx;
+	}
+
+	.price-group {
+		display: flex;
+		align-items: flex-end;
+		gap: 16rpx;
+	}
+
+	.current-price {
+		color: #FA341E;
+	}
+
+	.price-symbol {
+		font-size: 28rpx;
+		font-weight: 600;
+	}
+
+	.price-integer {
+		font-size: 52rpx;
+		font-weight: 600;
+	}
+
+	.price-decimal {
+		font-size: 34rpx;
+		font-weight: 600;
+	}
+
+	.original-price {
+		color: #999999;
+		font-size: 30rpx;
+		font-weight: 400;
+		text-decoration: line-through;
+		padding-bottom: 6rpx;
+	}
+
+	.action-buttons {
+		display: flex;
+		align-items: center;
+		width: 220rpx;
+		height: 68rpx;
+		border-radius: 68rpx;
+		overflow: hidden;
+	}
+
+	.cart-btn {
+		width: 88rpx;
+		height: 100%;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		background-color: #38D97D;
+	}
+
+	.cart-icon {
+		width: 44rpx;
+		height: 44rpx;
+	}
+
+	.buy-btn {
+		flex: 1;
+		height: 100%;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		background-color: #02B176;
+		font-weight: 500;
+		color: #ffffff;
+		font-size: 32rpx;
+	}
+
+	.empty-goods-card {
+		background-color: #ffffff;
+		padding-bottom: 20rpx;
+		border-radius: 16rpx;
+		overflow: hidden;
+		margin-bottom: 28rpx;
+		padding: 24rpx;
+	}
+
+	.empty-text {
+		font-weight: 500;
+		font-size: 30rpx;
+		color: #333333;
+	}
 </style>

+ 138 - 35
pages/home/components/home-hot.vue

@@ -6,38 +6,36 @@
  * @Description: 自定义轮播图组件
 -->
 <template>
-    <view class="w-all relative zi-2  mt-4">
-        <swiper class="w-all" :style="{ height: height * 2 + 'rpx', }" :circular="circular"
+    <view class="home-hot-container" @click="toHot()">
+        <swiper class="home-hot-swiper" :style="{ height: height * 2 + 'rpx', }" :circular="circular"
             :indicator-dots="indicatorDots" indicator-active-color="#02B176 " indicator-color="#EEEEEE"
             :autoplay="autoplay" :interval="interval" :duration="duration" :current="current"
             :display-multiple-items='displayMultipleItems' :next-margin="nextMargin" @change="change"
             @transition="transition" @animationfinish="animationfinish">
-            <swiper-item class="flex flex-wrap h-all " v-for="(item, index) in swiperList" :key="index">
-                <view class="w-74 h-82 bg-white flex items-center justify-center">
-                    <view class="w-64 h-82 flex flex-column items-center  justify-center">
-                            <view class="box">
-
-                        <image style="border: 1px solid #ffffff;"
-                            :src="item.imageUrl || item.img || 'https://img1.baidu.com/it/u=2172818577,3783888802&fm=253&app=138&f=JPEG?w=800&h=1422'"
-                            class="image" />
-                                </view>
-
-                        <view class="fs20 fw-500 text-D46C0D mt14">{{ item.rankText || '营养保健Top1' }}</view>
-                        <view class="w-54 h-16 rounded-16  text-D46C0D text-center fs-10 fw-400 relative">
+            <swiper-item class="home-hot-item" v-for="(item, index) in swiperList" :key="index">
+                <view class="home-hot-product">
+                    <view class="home-hot-product-content">
+                        <view class="home-hot-product-image-container">
+                            <image style="border: 1px solid #ffffff;"
+                                :src="item.imageUrl || item.img || 'https://img1.baidu.com/it/u=2172818577,3783888802&fm=253&app=138&f=JPEG?w=800&h=1422'"
+                                class="home-hot-product-image" />
+                        </view>
+                        <view class="home-hot-product-title">{{ item.rankText || '营养保健Top1' }}</view>
+                        <view class="home-hot-product-sales">
                             热销{{ item.sales || '0' }}件
                             <image src="https://cdn.his.cdwjyyh.com/images/hot_selling_list_img.png"
-                                class="w-8 h-12 absolute top-0 left--4 zi-10 rotateY-180" />
+                                class="home-hot-product-sales-arrow home-hot-product-sales-arrow-left" />
                             <image src="https://cdn.his.cdwjyyh.com/images/hot_selling_list_img.png"
-                                class="w-8 h-12  absolute top-0 right--4 zi-10" />
-
+                                class="home-hot-product-sales-arrow home-hot-product-sales-arrow-right" />
                         </view>
                     </view>
                 </view>
             </swiper-item>
         </swiper>
-        <view class="flex items-center justify-center w-all gap-6 mt-11" v-if="isCustomDot">
-            <view v-for="(item, index) in swiperList" :key="index" class="w-10 h-2  rounded-1"
-                :class="index == current ? 'bg-02B176' : 'bg-EEEEEE'"></view>
+        <view class="home-hot-dots" v-if="isCustomDot">
+            <view v-for="(item, index) in swiperList" :key="index" class="home-hot-dot"
+                :class="index == current ? 'home-hot-dot-active' : ''"
+            ></view>
         </view>
     </view>
 </template>
@@ -106,6 +104,11 @@ export default {
         }
     },
     methods: {
+        toHot(){
+            uni.navigateTo({
+                url: '/pages_shopping/live/salesRanking'
+            })
+        },
         // current 改变时会触发 change 事件
         change(e) {
             this.$emit('change', e.detail.current)
@@ -128,20 +131,120 @@ export default {
 }
 </script>
 <style lang="scss" scoped>
-	.image{
-		width: 92rpx;
-		height: 92rpx;
-		flex-shrink: 0;
-	}
-    .box{
-        width: 96rpx;
-height: 96rpx;
-background: #FFFFFF;
-box-shadow: 0rpx 0rpx 13rpx 0rpx rgba(0,0,0,0.1);
-border-radius: 12rpx 12rpx 12rpx 12rpx;
-border: 2rpx solid #FFFFFF;
-overflow: hidden;
+.home-hot-container {
+    width: 100%;
+    position: relative;
+    z-index: 2;
+    margin-top: 8rpx;
+}
 
-    }
-	
+.home-hot-swiper {
+    width: 100%;
+}
+
+.home-hot-item {
+    display: flex;
+    flex-wrap: wrap;
+    height: 100%;
+}
+
+.home-hot-product {
+    width: 148rpx;
+    height: 164rpx;
+    background-color: white;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+}
+
+.home-hot-product-content {
+    width: 128rpx;
+    height: 164rpx;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+}
+
+.home-hot-product-image-container {
+    width: 96rpx;
+    height: 96rpx;
+    background: #FFFFFF;
+    box-shadow: 0rpx 0rpx 13rpx 0rpx rgba(0,0,0,0.1);
+    border-radius: 12rpx;
+    border: 2rpx solid #FFFFFF;
+    overflow: hidden;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+}
+
+.home-hot-product-image {
+    width: 92rpx;
+    height: 92rpx;
+    flex-shrink: 0;
+}
+
+.home-hot-product-title {
+    font-size: 20rpx;
+    font-weight: 500;
+    color: #D46C0D;
+    margin-top: 14rpx;
+    text-align: center;
+    overflow: hidden;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+    width: 100%;
+}
+
+.home-hot-product-sales {
+    width: 108rpx;
+    height: 32rpx;
+    border-radius: 32rpx;
+    color: #D46C0D;
+    text-align: center;
+    font-size: 20rpx;
+    font-weight: 400;
+    position: relative;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+}
+
+.home-hot-product-sales-arrow {
+    width: 16rpx;
+    height: 24rpx;
+    position: absolute;
+    top: 0;
+    z-index: 10;
+}
+
+.home-hot-product-sales-arrow-left {
+    left: -8rpx;
+    transform: rotateY(180deg);
+}
+
+.home-hot-product-sales-arrow-right {
+    right: -8rpx;
+}
+
+.home-hot-dots {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    width: 100%;
+    gap: 12rpx;
+    margin-top: 22rpx;
+}
+
+.home-hot-dot {
+    width: 20rpx;
+    height: 4rpx;
+    border-radius: 2rpx;
+    background-color: #EEEEEE;
+}
+
+.home-hot-dot-active {
+    background-color: #02B176;
+}
 </style>

+ 100 - 59
pages/home/components/home-menu.vue

@@ -9,7 +9,7 @@
     <!-- 核心修改:swiper 外层包容器,去掉冲突的 overflow-x -->
     <view class="swiper-container" :style="{ height: height * 2 + 'rpx' }">
         <swiper 
-            v-if="(swiperList || []).length > 0" 
+            v-if="(localSwiperList || []).length > 0" 
             class="menu-swiper" 
             :circular="circular"
             :indicator-dots="indicatorDots" 
@@ -19,7 +19,7 @@
             :interval="interval" 
             :duration="duration" 
             :current="current"
-            :display-multiple-items="displayMultipleItems" 
+            :display-multiple-items="1" 
             :next-margin="nextMargin" 
             @change="change"
             @transition="transition" 
@@ -27,12 +27,13 @@
            
             :touchable="true"
         >
-            <!-- 核心修改:每个 swiper-item 放单个 menu 项,或按列数分组 -->
-            <!-- 方案1:单item单menu(适合逐列滑动) -->
-            <swiper-item class="menu-swiper__item" v-for="(item, i) in swiperList " :key="i">
-                <view class="menu-item" @click="toSearch(item)">
-                    <image class="menu-item__icon" :src="item.icon || ''" mode="aspectFill"> </image>
-                    <view class="menu-item__name">{{ item.menuName || '' }}</view>
+            <!-- 核心修改:每个 swiper-item 放一行 menu 项 -->
+            <swiper-item v-for="(row, rowIndex) in menuRows" :key="rowIndex">
+                <view class="menu-row">
+                    <view class="menu-item" v-for="(item, i) in row" :key="i" @click="toSearch(item)">
+                        <image class="menu-item__icon" :src="item.pic || ''" mode="aspectFill"> </image>
+                        <view class="menu-item__name">{{ item.cateName || '' }}</view>
+                    </view>
                 </view>
             </swiper-item>
         </swiper>
@@ -41,13 +42,13 @@
 </template>
 
 <script>
-import { getProductCateIndex,getProductCateByPid } from '@/api/index'
+import { getProductCateByPid, selectedAdv } from '@/api/index'
 export default {
     props: {
-        // swiperList: {
-        //     type: Array,
-        //     default: () => []
-        // },
+        swiperList: {
+            type: Array,
+            default: () => []
+        },
         height: {
             type: Number,
             default: 76
@@ -75,50 +76,98 @@ export default {
         // 核心:每页显示的列数(关键参数)
         displayMultipleItems: {
             type: Number,
-            default: 5 // 建议设为5,和样式里的 nth-child(5n) 匹配
+            default: 4 // 设为4,每行显示4个菜单项,每个占25%宽度
         },
         // 下一个项的外边距(露一点剩余项,提示可滑动)
         nextMargin: {
             type: String,
-            default: '20rpx' // 改为20rpx,能看到右侧剩余
+            default: '0rpx' // 设为0,一行刚好显示4个菜单
         },
         current: {
             type: Number,
             default: 0
         },
+        // 父组件传递的分类ID
+        pid: {
+            type: [String, Number],
+            default: ''
+        },
+    },
+    data() {
+        return {
+            localSwiperList: []
+        }
     },
     computed: {
-        // 方案2专用:按 displayMultipleItems 分组(如5个一组)
-        menuGroups() {
-            const list = this.swiperList || [];
-            const groups = [];
-            // 按每页显示列数分组
-            for (let i = 0; i < list.length; i += this.displayMultipleItems) {
-                groups.push(list.slice(i, i + this.displayMultipleItems));
+        // 动态计算display-multiple-items,确保不大于swiper-item数量
+        safeDisplayMultipleItems() {
+            return Math.min(this.displayMultipleItems, this.localSwiperList.length || 1);
+        },
+        // 分组菜单数据为行,每行displayMultipleItems个
+        menuRows() {
+            const rows = [];
+            const items = this.localSwiperList || [];
+            for (let i = 0; i < items.length; i += this.displayMultipleItems) {
+                rows.push(items.slice(i, i + this.displayMultipleItems));
             }
-            return groups;
+            return rows;
         }
     },
     mounted() {
-        this.getProductCateIndex();//获取首页频道分类
+        this.localSwiperList = [...this.swiperList];
+            this.triggerCherryPick();
+    },
+    // 页面显示时重新获取数据
+    onShow() {
+            this.triggerCherryPick();
+    },
+    watch: {
+        swiperList: {
+            handler(newList) {
+                this.localSwiperList = [...newList];
+            },
+            immediate: true
+        },
+        // 监听pid变化,自动调用getProductCateByPid
+        pid: {
+            handler(newPid) {
+                this.getProductCateByPid(newPid);
+            },
+            immediate: true
+        }
     },
     methods: {
-        // 获取首页频道分类
-        getProductCateIndex() {
-            getProductCateIndex().then(
-                res => {
-                    if (res.code === 200) {
-                        this.swiperList = res.data || [];
-                    }
+        // 供父层触发的“精选”处理:请求接口并跳转到返回的 linkUrl
+        triggerCherryPick() {
+            selectedAdv().then(res => {
+                if (res && res.code === 200 && Array.isArray(res.data)) {
+                    const arr = res.data
+                      .filter(it => it && it.isShow == 1)
+                      .sort((a,b)=>(a.sort||0)-(b.sort||0))
+                      .map(it => ({
+                          // 适配本组件显示字段
+                          pic: (it.icon ? String(it.icon).replace(/`/g,'').trim() : ''),
+                          cateName: it.menuName || '',
+                          // 保留原字段以备后续使用
+                          linkUrl: it.linkUrl ? String(it.linkUrl).replace(/`/g,'').trim() : '',
+                          raw: it
+                      }));
+                    this.localSwiperList = arr;
+                    return;
                 }
-            )
+                uni.showToast({ title: '暂无精选数据', icon: 'none' })
+            }).catch(()=>{ uni.showToast({ title: '请求失败', icon: 'none' }) })
         },
+      
         // 根据一级分类获取子分类
         getProductCateByPid(pid) {
+            if (!pid) {
+                return;
+            }
             getProductCateByPid(pid).then(
                 res => {
                     if (res.code === 200) {
-                        this.swiperList = res.data || [];
+                        this.localSwiperList = res.data || [];
                     }
                 }
             )
@@ -133,13 +182,11 @@ export default {
             this.$emit('animationfinish', e.detail.current)
         },
         toSearch(item) {
-            console.log('跳转搜索', item)
-            if (!item || !item.menuName) {
-                console.error('导航失败:菜单数据不完整', item);
+            if (!item || !item.cateName) {
                 return;
             }
             uni.navigateTo({
-                url: `/pages/home/productSearch?value=${encodeURIComponent(item.menuName)}`
+                url: `/pages/home/productSearch?value=${encodeURIComponent(item.cateName)}`
             })
         }
     }
@@ -158,17 +205,22 @@ export default {
     height: 100%; // 高度由外层容器控制
     // 移除 overflow-x: auto,避免和swiper滑动冲突
     .menu-swiper__item {
+        width: 100%;
+        height: 100%;
+    }
+    .menu-row {
         display: flex;
         flex-wrap: nowrap;
-        justify-content: space-around; // 项均匀分布
         align-items: center;
         height: 100%;
-        // 方案2专用:分组布局
-        .menu-group {
-            display: flex;
-            width: 100%;
-            justify-content: space-around;
-        }
+        // 确保左对齐,不使用space-between
+        justify-content: flex-start;
+    }
+    .menu-item {
+        flex: 0 0 25%; // 每个菜单项占25%宽度
+        display: flex;
+        flex-direction: column;
+        align-items: center;
     }
 }
 
@@ -178,24 +230,13 @@ export default {
 }
 
 .menu-item {
-    // 关键:去掉固定宽度,改为按列数自适应
-    // width: 104rpx; 
-    flex: 1; // 均分宽度
-    margin: 0 10rpx; // 调整间距,避免挤在一起
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-    // 去掉 nth-child(5n) 外边距(分组后不需要)
-    // &:nth-child(5n) {
-    //     margin-right: 0;
-    // }
     .menu-item__icon {
-        width: 88rpx;
-        height: 88rpx;
+        width: 104rpx;
+        height: 104rpx;
         border-radius: 50%;
     }
     .menu-item__name {
-        font-size: 26rpx;
+        font-size: 30rpx;
         font-weight: 400;
         color: #333333;
         text-overflow: ellipsis;
@@ -203,4 +244,4 @@ export default {
         margin-top: 8rpx;
     }
 }
-</style>
+</style>

+ 3 - 3
pages/home/components/home-more-item.vue

@@ -5,11 +5,11 @@
         <view class="fw-400 fs-11 text-999999 flex items-center gap-5 mt-4">
             <text>已售 5485</text>
             <text class="inline-block w-1 h-9 bg-CCCCCC"></text>
-            <text>惊艳度 98%</text>
+            <text>好评率 98%</text>
         </view>
         <view class="flex items-center gap-4 text-FF4B33 fs-11 mt-5">
-            <view class="px-4 ph-2 border border-FFA599 rounded-2 ">9.5折</view>
-            <view class="px-4 ph-2 border border-FFA599 rounded-2 ">限购1份</view>
+           <!-- <view class="px-4 ph-2 border border-FFA599 rounded-2 ">9.5折</view>
+            <view class="px-4 ph-2 border border-FFA599 rounded-2 ">限购1份</view> -->
         </view>
         <view class="flex items-center justify-between mt-8">
             <view class="text-FA341E">

+ 92 - 13
pages/home/components/home-play.vue

@@ -6,26 +6,26 @@
  * @Description: 自定义轮播图组件
 -->
 <template>
-    <view class="w-all relative zi-2" :style="{ height: height * 2 + 30 + 'rpx', }">
-        <swiper class="w-all  mt-5 rounded-8 overflow-hidden" :style="{ height: height * 2 + 'rpx', }"
+    <view class="home-play-container" :style="{ height: height * 2 + 30 + 'rpx', }">
+        <swiper class="home-play-swiper" :style="{ height: height * 2 + 'rpx', }"
             :circular="circular" :class="isDotStyle ? 'dotStyle' : ''" :indicator-dots="indicatorDots"
             indicator-active-color="#02B176 " indicator-color="#EEEEEE" :autoplay="autoplay" :interval="interval"
-            :duration="duration" :current="current" :display-multiple-items='displayMultipleItems'
+            :duration="duration" :current="current" :display-multiple-items='safeDisplayMultipleItems'
             :next-margin="nextMargin" @change="change" @transition="transition" @animationfinish="animationfinish">
-            <swiper-item class="flex flex-wrap h-all w-all bg-light relative" v-for="(item, index) in swiperList"
+            <swiper-item class="home-play-item" v-for="(item, index) in swiperList"
                 :key="index">
                 <image :src="item.imageUrl || item.img || 'https://img1.baidu.com/it/u=2172818577,3783888802&fm=253&app=138&f=JPEG?w=800&h=1422'"
-                    class="w-all h-all" />
+                    class="home-play-image" />
 
-                <view class="flex items-center h-30 fw-400 fs-10 rounded-6 overflow-hidden absolute top-8 left-8">
-                    <view class="h-all left-box text-white px-4 lh-30">{{ item.status || '预约中' }}</view>
-                    <view class="h-all px-4 text-white bg-000000 opacity-6 lh-30">{{ item.reserveCount || '1800' }}人已预约</view>
-                </view>
+                <!-- <view class="home-play-status">
+                    <view class="home-play-status-left">{{ item.status || '预约中' }}</view>
+                    <view class="home-play-status-right">{{ item.reserveCount || '1800' }}人已预约</view>
+                </view> -->
             </swiper-item>
         </swiper>
-        <view class="flex items-center justify-center w-all gap-1 mt-11">
-            <view v-for="(item, index) in swiperList" :key="index" class="w-10 h-2  rounded-1"
-                :class="index == current ? 'bg-02B176' : 'bg-EEEEEE'"></view>
+        <view class="home-play-dots">
+            <view v-for="(item, index) in swiperList" :key="index" class="home-play-dot"
+                :class="index == current ? 'home-play-dot-active' : ''"></view>
         </view>
     </view>
 </template>
@@ -93,6 +93,12 @@ export default {
             currentDot: 0,
         }
     },
+    computed: {
+        safeDisplayMultipleItems() {
+            // 确保display-multiple-items不大于swiper-item数量
+            return Math.min(this.displayMultipleItems, this.swiperList.length || 1);
+        }
+    },
     methods: {
         // current 改变时会触发 change 事件
         change(e) {
@@ -116,7 +122,80 @@ export default {
 }
 </script>
 <style lang="scss" scoped>
-.left-box {
+.home-play-container {
+    width: 100%;
+    position: relative;
+    z-index: 2;
+}
+
+.home-play-swiper {
+    width: 100%;
+    margin-top: 10rpx;
+    border-radius: 16rpx;
+    overflow: hidden;
+}
+
+.home-play-item {
+    display: flex;
+    flex-wrap: wrap;
+    height: 100%;
+    width: 100%;
+    background-color: #f5f5f5;
+    position: relative;
+}
+
+.home-play-image {
+    width: 100%;
+    height: 100%;
+}
+
+.home-play-status {
+    display: flex;
+    align-items: center;
+    height: 60rpx;
+    font-weight: 400;
+    font-size: 20rpx;
+    border-radius: 12rpx;
+    overflow: hidden;
+    position: absolute;
+    top: 16rpx;
+    left: 16rpx;
+}
+
+.home-play-status-left {
+    height: 100%;
     background: linear-gradient(136deg, #38D97D 0%, #02B176 100%);
+    color: white;
+    padding: 0 8rpx;
+    line-height: 60rpx;
+}
+
+.home-play-status-right {
+    height: 100%;
+    padding: 0 8rpx;
+    color: white;
+    background-color: #000000;
+    opacity: 0.6;
+    line-height: 60rpx;
+}
+
+.home-play-dots {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    width: 100%;
+    gap: 2rpx;
+    margin-top: 22rpx;
+}
+
+.home-play-dot {
+    width: 20rpx;
+    height: 4rpx;
+    border-radius: 2rpx;
+    background-color: #EEEEEE;
+}
+
+.home-play-dot-active {
+    background-color: #02B176;
 }
 </style>

+ 224 - 33
pages/home/components/home-product.vue

@@ -1,69 +1,260 @@
 <template>
-    <view class="flex justify-between px-12 mt-21">
-        <view class="w-170 h-265 relative px-11 rounded-8 overflow-hidden">
-            <image class="w-all h-all absolute top-0 left-0 bg-white zi-1" src="https://cdn.his.cdwjyyh.com/images/zbgc_bg.png">
-            </image>
-            <view class="flex justify-between items-center h-20 relative zi-2 mt-13">
-                <image class="w-64 h-15" src="https://cdn.his.cdwjyyh.com/images/live_square_title.png"></image>
-                <view class="fs-12 fw-400 text-666666 flex items-center">
-                    全部 <image class="w-12 h-12" src="https://fs-1319721001.cos.ap-chongqing.myqcloud.com/images/jb_arrow_right_icon.png"></image>
+    <view class="home-product-container">
+        <!-- <view class="live-section">
+            <image class="live-bg" src="https://cdn.his.cdwjyyh.com/images/zbgc_bg.png"></image>
+            <view class="live-header">
+                <image class="live-title" src="https://cdn.his.cdwjyyh.com/images/live_square_title.png"></image>
+                <view class="live-more">
+                    全部 <image class="arrow-icon"
+                        src="https://fs-1319721001.cos.ap-chongqing.myqcloud.com/images/jb_arrow_right_icon.png">
+                    </image>
                 </view>
-
             </view>
-            <HomePlay :swiperList="recommendList" :current="swiperCurrent"
+            <HomePlay :swiperList="livePlayList" :current="swiperCurrent"
                 @change="swiperCurrent = $event" />
-        </view>
-        <view class="w-171 h-265 flex flex-column justify-between">
-            <view class="w-all h-128 bg-white relative p-11 rounded-8 overflow-hidden">
-                <image class="w-all h-all absolute top-0 left-0 zi-1" src="https://cdn.his.cdwjyyh.com/images/sdyhzq_bg.png">
-                </image>
-                <view class="relative zi-2">
-                    <image class="w-95 h-18 " src="https://cdn.his.cdwjyyh.com/images/sdyhzq_title.png"></image>
-                    <HomeDiscount  :swiperList="recommendList"  />
+        </view> -->
+          <SalesRanking :salesRankList="salesRankList" :totalSales="totalSales" @goToBuy="goToBuy"
+                @addToCart="addToCart" />
+        <view class="right-section">
+            <view class="discount-section" @click="toDiscount">
+                <image class="discount-bg" src="https://cdn.his.cdwjyyh.com/images/sdyhzq_bg.png"></image>
+                <view class="discount-content">
+                    <image class="discount-title" src="https://cdn.his.cdwjyyh.com/images/special_txt.png"></image>
+                    <!-- <image class="discount-title" src="https://cdn.his.cdwjyyh.com/images/sdyhzq_title.png"></image> -->
+
+                    <HomeDiscount :swiperList="recommendList" />
                 </view>
             </view>
-            <view class="w-all h-128 bg-white relative p-11 rounded-8 overflow-hidden">
-                <image class="w-all h-all absolute top-0 left-0 " src="https://cdn.his.cdwjyyh.com/images/jrrm_bg@2x.png"></image>
-                <view class="relative zi-2">
-                    <image class="w-64 h-18 " src="https://cdn.his.cdwjyyh.com/images/jrrm_title.png"></image>
-                    <HomeHot :swiperList="recommendList"/>
+            <view class="hot-section" @click="toRank">
+                <image class="hot-bg" src="https://cdn.his.cdwjyyh.com/images/jrrm_bg@2x.png"></image>
+                <view class="hot-content">
+                    <image class="hot-title" src="https://cdn.his.cdwjyyh.com/images/jrrm_title.png"></image>
+                    <HomeHot :swiperList="hotList" />
                 </view>
             </view>
         </view>
     </view>
-
 </template>
+
 <script>
 import HomePlay from './home-play.vue';
 import HomeDiscount from './home-discount.vue'
 import HomeHot from './home-hot.vue'
+import SalesRanking from './sales-ranking.vue'
 export default {
     components: {
         HomePlay,
         HomeDiscount,
         HomeHot,
+        SalesRanking,
     },
     props: {
         recommendList: {
             type: Array,
             default: () => []
         },
+        salesRankList: {
+            type: Array,
+            default: () => []
+        },
+        totalSales: {
+            type: [Number, String],
+            default: 0
+        },
+        liveConfig: {
+            type: [Object, Array],
+            default: () => { }
+        },
     },
     data() {
         return {
             swiperCurrent: 0,
         }
     },
-    mounted() {
-        console.log("首单-组件挂载时",this.recommendList);
-    },
-    watch: {
-        recommendList: {
-            immediate: true,
-            handler(newVal) {
-                console.log("首单-recommendList变化", newVal);
+    computed: {
+        hotList() {
+            if (Array.isArray(this.salesRankList) && this.salesRankList.length) {
+                return this.salesRankList.map((it, idx) => ({
+                    imageUrl: it.image || it.firstImage || '',
+                    rankText: it.productName || `热销Top${idx + 1}`,
+                    sales: it.sales || 0
+                }))
+            }
+            // 兜底回退到推荐列表
+            return (this.recommendList || []).slice(0, 3).map((it, idx) => ({
+                imageUrl: it.image || it.firstImage || '',
+                rankText: it.productName || it.recommendName || `热销Top${idx + 1}`,
+                sales: it.sales || 0
+            }))
+        },
+        // 转换liveConfig数据为HomePlay组件需要的格式
+        livePlayList() {
+            if (this.liveConfig && this.liveConfig.imgUrl) {
+                // 如果liveConfig是单个对象,转换为数组
+                return [{
+                    imageUrl: this.liveConfig.imgUrl,
+                    status: '直播中',
+                    reserveCount: 0
+                }];
+            } else if (Array.isArray(this.liveConfig) && this.liveConfig.length > 0) {
+                // 如果liveConfig是数组,转换每个元素
+                return this.liveConfig.map(item => ({
+                    imageUrl: item.imgUrl || item.imageUrl || '',
+                    status: '直播中',
+                    reserveCount: 0
+                }));
             }
+            // 兜底回退到推荐列表
+            return (this.recommendList || []).slice(0, 1).map(item => ({
+                imageUrl: item.image || item.firstImage || '',
+                status: '直播中',
+                reserveCount: 0
+            }));
+        }
+    },
+    methods: {
+        toDiscount() {
+            uni.navigateTo({
+                url: '/pages_shopping/live/firstOrder'
+            })
+        },
+        toRank() {
+            uni.navigateTo({
+                url: '/pages_shopping/live/salesRanking'
+            })
+        },
+        goToBuy(item) {
+            this.$emit('goToBuy', item)
+        },
+        addToCart(item) {
+            this.$emit('addToCart', item)
         }
     }
 }
-</script>
+</script>
+
+<style lang="scss" scoped>
+.home-product-container {
+    display: flex;
+    justify-content: space-between;
+    padding: 0 24rpx;
+    margin-top: 42rpx;
+    gap: 16rpx;
+}
+
+.live-section {
+    flex: 1;
+    max-width: 340rpx;
+    position: relative;
+    padding: 22rpx;
+    border-radius: 16rpx;
+    overflow: hidden;
+}
+
+.live-bg {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background-color: #ffffff;
+    z-index: 1;
+}
+
+.live-header {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    height: 40rpx;
+    position: relative;
+    z-index: 2;
+    // margin-top: 26rpx;
+}
+
+.live-title {
+    width: 132rpx;
+    height: 34rpx;
+}
+
+.live-more {
+    font-size: 28rpx;
+    font-weight: 400;
+    color: #666666;
+    display: flex;
+    align-items: center;
+}
+
+.arrow-icon {
+    width: 28rpx;
+    height: 28rpx;
+}
+
+.right-section {
+    flex: 1;
+    max-width: 342rpx;
+    height: 530rpx;
+    display: flex;
+    flex-direction: column;
+    gap: 16rpx;
+}
+
+.discount-section {
+    // width: 100%;
+    flex: 1;
+    background-color: #ffffff;
+    position: relative;
+    padding: 22rpx;
+    border-radius: 16rpx;
+    overflow: hidden;
+}
+
+.discount-bg {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    z-index: 1;
+}
+
+.discount-content {
+    position: relative;
+    z-index: 2;
+}
+
+.discount-title {
+    width: 132rpx;
+    // width: 194rpx;
+
+    height: 40rpx;
+}
+
+.hot-section {
+    // width: 100%;
+    flex: 1;
+    background-color: #ffffff;
+    position: relative;
+    padding: 22rpx;
+    border-radius: 16rpx;
+    overflow: hidden;
+}
+
+.hot-bg {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    z-index: 1;
+}
+
+.hot-content {
+    position: relative;
+    z-index: 2;
+}
+
+.hot-title {
+    width: 132rpx;
+    height: 40rpx;
+}
+</style>

+ 107 - 23
pages/home/components/home-search.vue

@@ -1,37 +1,121 @@
 <template>
-    <view class="flex items-center justify-between px-12 mt-11 relative zi-10 mb-10">
-        <view class="scs-search w-283 h-34">
+    <view class="home-search-container">
+        <view class="search-box">
             <view class="search-input" @click="onSearchClick">
-                <image class="icon-search" src="https://cdn.his.cdwjyyh.com/images/search.png" mode="aspectFit"></image>
-                <input class="input-value" type="text" v-model="keyword" placeholder="搜索商品" confirm-type="search"
+                <image class="search-icon" src="https://cdn.his.cdwjyyh.com/images/search.png" mode="aspectFit"></image>
+                <input class="search-text" type="text" v-model="keyword" placeholder="搜索商品" confirm-type="search"
                     @confirm="onSearch" />
-                <button class="w-60 h-30 rounded-15 fs-14 colorf lh-30" @click.stop="onSearch">搜索</button>
+                <button class="search-button" @click.stop="onSearch">搜索</button>
             </view>
         </view>
-        <view class="w-24 h-24 relative">
-            <image class="w-all h-all" src="https://cdn.his.cdwjyyh.com/images/share_icon.png" mode=""></image>
-            <button class="w-all h-all absolute top-0 left-0 opacity-0" open-type="share"></button>
+        <view class="action-button share-button">
+            <image class="button-icon" src="https://cdn.his.cdwjyyh.com/images/share_icon.png" mode=""></image>
+            <button class="button-overlay" open-type="share"></button>
         </view>
-        <view class="w-24 h-24 relative">
-            <image class="w-all h-all" src="https://cdn.his.cdwjyyh.com/images/new_hall_icon.png" mode=""></image>
-            <button class="w-all h-all absolute top-0 left-0 opacity-0" open-type="contact"></button>
+        <view class="action-button service-button">
+            <image class="button-icon" src="https://cdn.his.cdwjyyh.com/images/customer_service.png" mode=""></image>
+            <button class="button-overlay" open-type="contact"></button>
         </view>
     </view>
 </template>
 <script>
-    export default {
-        data() {
-            return {
-                keyword: '',
-            }
+export default {
+    data() {
+        return {
+            keyword: '',
+        }
+    },
+    methods: {
+        onSearch() {
+            this.$emit('onSearch', this.keyword)
         },
-        methods: {
-            onSearch() {
-               this.$emit('onSearch', this.keyword)
-            },
-            onSearchClick() {
-                this.$emit('onSearchClick')
+        onSearchClick() {
+            this.$emit('onSearchClick')
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.home-search-container {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    padding: 0 24rpx;
+    margin-top: 22rpx;
+    margin-bottom: 20rpx;
+    position: relative;
+    z-index: 10;
+
+    .search-box {
+        width: 566rpx;
+        height: 68rpx;
+
+        .search-input {
+            display: flex;
+            align-items: center;
+            background-color: #ffffff;
+            border-radius: 34rpx;
+            padding: 0 4rpx 0 24rpx;
+            height: 100%;
+            border: 2rpx solid #02B176;
+
+            .search-icon {
+                width: 24rpx;
+                height: 24rpx;
+                margin-right: 12rpx;
+            }
+
+            .search-text {
+                flex: 1;
+                height: 100%;
+                font-size: 28rpx;
+                color: #333;
+                background: transparent;
+            }
+
+            .search-button {
+                width: 120rpx;
+                height: 60rpx;
+                background-color: #02B176;
+                color: #fff;
+                border-radius: 30rpx;
+                font-size: 28rpx;
+                line-height: 60rpx;
+                text-align: center;
+                border: none;
             }
         }
     }
-</script>
+
+    .action-button {
+        width: 48rpx;
+        height: 48rpx;
+        position: relative;
+
+        .button-icon {
+            width: 100%;
+            height: 100%;
+        }
+
+        .button-overlay {
+            width: 100%;
+            height: 100%;
+            position: absolute;
+            top: 0;
+            left: 0;
+            opacity: 0;
+            border: none;
+            background: transparent;
+        }
+
+        &.share-button {
+            margin-left: 16rpx;
+        }
+
+        &.service-button {
+            margin-left: 16rpx;
+        }
+    }
+}
+</style>

+ 258 - 0
pages/home/components/sales-ranking.vue

@@ -0,0 +1,258 @@
+<!--
+ * @Author: jmy
+ * @Date: 2026-01-06 12:02:41
+ * @LastEditors: Please set LastEditors
+ * @LastEditTime: 2026-01-06 15:02:20
+ * @Description: 实时销量榜组件
+-->
+<template>
+	<view class="sales-ranking">
+		<image class="bg"
+			src="https://fs-1319721001.cos.ap-chongqing.myqcloud.com/images/sales_ranking_bg.png"
+			mode="aspectFill"></image>
+		<view class="sales-ranking-content">
+			<view class="sales-ranking-title" @click="goToRanking">
+				<text>实时销量榜</text>
+				<image
+					src="https://fs-1319721001.cos.ap-chongqing.myqcloud.com/images/sales_ranking_arrow_right_icon.png">
+				</image>
+			</view>
+			<view class="sales-ranking-total">
+				今日销量{{ formatSales(totalSales) }}件
+			</view>
+			<view class="sales-ranking-list" v-if="salesRankList && salesRankList.length > 0">
+				<view class="sales-ranking-item" v-for="(item, index) in salesRankList" :key="index"
+					@click="handleGoToBuy(item)">
+					<view class="sales-ranking-item-img">
+						<image
+							:src="item.image || 'https://fs-1319721001.cos.ap-chongqing.myqcloud.com/images/img.png'">
+						</image>
+						<view class="sales-ranking-item-rank" :class="'rank-' + (index + 1)">
+							{{ index + 1 }}
+						</view>
+					</view>
+					<view class="sales-ranking-item-info">
+						<view class="sales-ranking-item-name">{{ item.productName || '商品名称' }}
+						</view>
+						<view class="sales-ranking-item-price">
+							<view>
+								<text>¥</text>
+								<text>{{ item.price || 0 }}</text>
+							</view>
+							<image @click.stop="handleAddToCart(item)" class="sales-ranking-item-cart"
+								src="https://fs-1319721001.cos.ap-chongqing.myqcloud.com/images/add_car_icon.png">
+							</image>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	name: 'SalesRanking',
+	props: {
+		salesRankList: {
+			type: Array,
+			default: () => []
+		},
+		totalSales: {
+			type: [Number, String],
+			default: 0
+		}
+	},
+	data() {
+		return {}
+	},
+	methods: {
+		// 跳转到销量榜页面
+		goToRanking() {
+			uni.navigateTo({
+				url: '/pages_shopping/live/salesRanking'
+			})
+		},
+
+		// 格式化销量数据
+		formatSales(sales) {
+			const salesNum = Number(sales) || 0;
+			if (salesNum >= 10000) {
+				return (salesNum / 10000).toFixed(1) + '万';
+			}
+			return salesNum.toString();
+		},
+
+		// 处理购买商品
+		handleGoToBuy(item) {
+			this.$emit('goToBuy', item)
+		},
+
+		// 处理添加到购物车
+		handleAddToCart(item) {
+			this.$emit('addToCart', item)
+		}
+	}
+}
+</script>
+
+<style lang="scss" scoped>
+.sales-ranking {
+	// width: 100%;
+	// height: 500rpx;
+	width: 380rpx;
+	height: 530rpx;
+	margin-bottom: 22rpx;
+	border-radius: 8rpx;
+	overflow: hidden;
+	position: relative;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+
+	.bg {
+		position: absolute;
+		width: 100%;
+		height: 100%;
+	}
+
+	.sales-ranking-content {
+		position: relative;
+		width: 100%;
+		height: 100%;
+		z-index: 10;
+		display: flex;
+		flex-direction: column;
+		padding: 0 20rpx;
+
+		.sales-ranking-title {
+			display: flex;
+			align-items: center;
+			margin-top: 18rpx;
+
+			text {
+				font-weight: 500;
+				font-size: 36rpx;
+				color: #333333;
+			}
+
+			image {
+				width: 28rpx;
+				height: 28rpx;
+				margin-top: 4rpx;
+				margin-left: 4rpx;
+			}
+		}
+
+		.sales-ranking-total {
+			margin-top: 6rpx;
+			font-weight: 400;
+			font-size: 26rpx;
+			color: #D46C0D;
+		}
+
+		.sales-ranking-list {
+			padding: 16rpx;
+			border-radius: 16rpx;
+			background-color: white;
+			margin-top: 14rpx;
+			display: flex;
+			flex-direction: column;
+			max-width: 334rpx;
+
+			.sales-ranking-item {
+				display: flex;
+				margin-bottom: 20rpx;
+				align-items: center;
+
+				&:last-child {
+					margin-bottom: 0rpx;
+				}
+
+				.sales-ranking-item-img {
+					margin-right: 12rpx;
+					width: 100rpx;
+					height: 100rpx;
+					border-radius: 8rpx;
+					overflow: hidden;
+					position: relative;
+
+					image {
+						width: 100%;
+						height: 100%;
+					}
+
+					.sales-ranking-item-rank {
+						width: 28rpx;
+						height: 28rpx;
+						border-radius: 8rpx;
+						position: absolute;
+						top: 0;
+						left: 0;
+						display: flex;
+						align-items: center;
+						justify-content: center;
+						color: white;
+						font-size: 24rpx;
+						background-color: #999999;
+					}
+
+					.rank-1 {
+						background-color: #FF4A3D;
+					}
+
+					.rank-2 {
+						background-color: #FF8800;
+					}
+
+					.rank-3 {
+						background-color: #FFB800;
+					}
+				}
+
+				.sales-ranking-item-info {
+					flex: 1;
+					display: flex;
+					flex-direction: column;
+					justify-content: space-between;
+
+					.sales-ranking-item-name {
+						font-size: 24rpx;
+						color: #333333;
+						font-weight: 400;
+						overflow: hidden;
+						text-overflow: ellipsis;
+						white-space: nowrap;
+					}
+
+					.sales-ranking-item-price {
+						display: flex;
+						align-items: center;
+						justify-content: space-between;
+						margin-top: 8rpx;
+
+						view {
+							color: #FA341E;
+
+							text:first-child {
+								font-size: 24rpx;
+								font-weight: 600;
+							}
+
+							text:last-child {
+								font-size: 40rpx;
+								font-weight: 600;
+							}
+						}
+
+						.sales-ranking-item-cart {
+							width: 44rpx;
+							height: 44rpx;
+						}
+					}
+				}
+			}
+		}
+	}
+}
+</style>

+ 2 - 2
pages/home/doctorCase.vue

@@ -5,7 +5,7 @@
 			<view class="search-cont">
 				<view class="inner">
 					<image class="icon-search" src="https://cdn.his.cdwjyyh.com/images/search.png" mode=""></image>
-					<input type="text"  v-model="searchVal" placeholder="输入关键字搜索"  confirm-type="搜索" @confirm="goSearch" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
+					<input type="text"  v-model="searchVal" placeholder="输入关键字搜索"  confirm-type="搜索" @confirm="goSearch" placeholder-style="font-size:32rpx;color:#BBBBBB;font-family: PingFang SC;" />
 				</view>
 			</view>
 			<!-- tab切换 -->
@@ -58,7 +58,7 @@
 							<free-audio 
 								startPic='https://cdn.his.cdwjyyh.com/images/play.png' 
 								endPic='https://cdn.his.cdwjyyh.com/images/pause.png'
-								activeColor="#2BC7B9"
+								activeColor="#02B176"
 								:audioId="'audio'+index"
 								:url='item.replyAudioUrl'
 							></free-audio>

+ 88 - 88
pages/home/index copy.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="content">
 		<!-- 背景图片 -->
-		<image class="bg" src="../../static/images/yuexuan_home_top_bg.png" mode=""></image>
+		<image class="bg" src="../..https://cdn.his.cdwjyyh.com/images/yuexuan_home_top_bg.png" mode=""></image>
 		<view>
 			<view class="top-inner">
 				<view class="fixed-top-box" :style="{ background: bg }">
@@ -9,7 +9,7 @@
 					<view class="status_bar" :style="{height: statusBarHeight}"></view>
 					<view class="shop-block">
 						<view class="shop">
-							<image class="w40 h40" src="/static/images/shopping_car_icon.png"></image>
+							<image class="w40 h40" src="https://cdn.his.cdwjyyh.com/images/shopping_car_icon.png"></image>
 						</view>
 					</view>
 					<view class="top-title">
@@ -19,25 +19,25 @@
 					<!-- 搜索框、购物车、客服 -->
 					<view class="func-cont">
 						<view class="search-cont">
-							<image class="icon-search" src="../../static/images/search.png" mode=""></image>
+							<image class="icon-search" src="../..https://cdn.his.cdwjyyh.com/images/search.png" mode=""></image>
 							<input type="text" disabled value="" placeholder="搜索商品"
-								placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;"
+								placeholder-style="font-size:32rpx;color:#BBBBBB;font-family: PingFang SC;"
 								@click="toSearch" />
 							<view class="search-button">搜索</view>
 						</view>
 						<!-- 购物车 -->
 						<!-- <uni-badge size="small" :text="cartCount" absolute="rightTop" type="error">
 							<view class="img-item" @click="goAuthUrl('../shopping/cart')">
-								<image src="../../static/images/cart_wihte.png" mode=""></image>
+								<image src="../..https://cdn.his.cdwjyyh.com/images/cart_wihte.png" mode=""></image>
 							</view>
 						</uni-badge> -->
 						<view class="img-item" style="position: relative;">
-							<image src="../../static/images/share_icon.png" mode=""></image>
+							<image src="../..https://cdn.his.cdwjyyh.com/images/share_icon.png" mode=""></image>
 							<button class="contact-btn" open-type="contact"></button>
 						</view>
 
 						<view class="img-item" style="position: relative;">
-							<image src="../../static/images/new_hall_icon.png" mode=""></image>
+							<image src="../..https://cdn.his.cdwjyyh.com/images/new_hall_icon.png" mode=""></image>
 							<button class="contact-btn" open-type="contact"></button>
 						</view>
 					</view>
@@ -73,14 +73,14 @@
 						<view class="text">
 							{{ item.name }}
 							<view class="tab-bg" v-show="status ==item.value"></view>
-							<!-- <image v-show="status ==item.value" class="tab-bg" src="/static/images/tab_bg.png" mode=""> -->
+							<!-- <image v-show="status ==item.value" class="tab-bg" src="https://cdn.his.cdwjyyh.com/images/tab_bg.png" mode=""> -->
 							</image>
 						</view>
 					</view>
-					<image class="white-gradient" src="/static/images/white_gradient_bg.png"></image>
+					<image class="white-gradient" src="https://cdn.his.cdwjyyh.com/images/white_gradient_bg.png"></image>
 				</view>
-				<image class="icon mr24" src="/static/images/product_section_icon.png" @click="navTo('/pages/shopping/index')"></image>
-				<image class="icon" src="/static/images/home_filter_icon.png"></image>
+				<image class="icon mr24" src="https://cdn.his.cdwjyyh.com/images/product_section_icon.png" @click="navTo('/pages/shopping/index')"></image>
+				<image class="icon" src="https://cdn.his.cdwjyyh.com/images/home_filter_icon.png"></image>
 			</view>
 			<!-- 菜单 -->
 			<view class="menu-content">
@@ -94,7 +94,7 @@
 		<!-- 在线问诊、处方查询 -->
 		<view class="online-inquiry">
 			<view class="item" @click="navTo('/pages_shopping/shopping/productSalesList')">
-				<!-- <image  class="bg-img" src="../../static/images/banner1.png" mode=""></image> -->
+				<!-- <image  class="bg-img" src="../..https://cdn.his.cdwjyyh.com/images/banner1.png" mode=""></image> -->
 				<image class="bg-img"
 					src="https://hos-1309931967.cos.ap-chongqing.myqcloud.com/fs/20250320/f2d3ba32a9344dc79b4df7c228189243.png"
 					mode=""></image>
@@ -105,7 +105,7 @@
 				</view> -->
 			</view>
 			<view class="item" @click="navTo('/pages_course/livingList')">
-				<image class="bg-img" src="/static/images/banner2.png" mode=""></image>
+				<image class="bg-img" src="https://cdn.his.cdwjyyh.com/images/banner2.png" mode=""></image>
 			</view>
 		</view>
 		<view class="index-cont">
@@ -115,7 +115,7 @@
 					<text class="left">医生团队</text>
 					<view class="right" @click="navTo('../doctor/doctorList')">
 						<text class="text">全部医生</text>
-						<image src="../../static/images/arrow_gray.png" mode=""></image>
+						<image src="../..https://cdn.his.cdwjyyh.com/images/arrow_gray.png" mode=""></image>
 					</view>
 				</view>
 				<view class="doc-cont">
@@ -135,19 +135,19 @@
 			<!-- <view class="pub-item">
 				<view class="tabs">
 					<view class="tab" @click="docTabChange(1)">
-						<image v-if="docTab==1" class="img" src="../../static/images/tab1.png" mode=""></image>
+						<image v-if="docTab==1" class="img" src="../..https://cdn.his.cdwjyyh.com/images/tab1.png" mode=""></image>
 						<view class="inner">
 							<text :class="docTab == 1?'title active':'title'" >推荐医生</text>
 						</view>
 					</view>
 					<view class="tab" @click="docTabChange(2)">
-						<image v-if="docTab==2" class="img" src="../../static/images/tab2.png" mode=""></image>
+						<image v-if="docTab==2" class="img" src="../..https://cdn.his.cdwjyyh.com/images/tab2.png" mode=""></image>
 						<view class="inner">
 							<text :class="docTab == 2?'title active':'title'" >推荐药师</text>
 						</view>
 					</view>
 					<view class="tab" @click="docTabChange(3)">
-						<image v-if="docTab==3" class="img" src="../../static/images/tab3.png" mode=""></image>
+						<image v-if="docTab==3" class="img" src="../..https://cdn.his.cdwjyyh.com/images/tab3.png" mode=""></image>
 						<view class="inner">
 							<text  :class="docTab == 3?'title active':'title'" >推荐营养师</text>
 						</view>
@@ -163,11 +163,11 @@
 						>
 							<view class="text">
 								{{ item.departmentName }}
-								<image v-show="item.departmentId == deptId" class="tab-bg" src="../../static/images/tab_bg.png" mode=""></image>
+								<image v-show="item.departmentId == deptId" class="tab-bg" src="../..https://cdn.his.cdwjyyh.com/images/tab_bg.png" mode=""></image>
 							</view>
 						</view>
 					</view>
-					<image class="right-mask" src="../../static/images/mask.png" mode=""></image>
+					<image class="right-mask" src="../..https://cdn.his.cdwjyyh.com/images/mask.png" mode=""></image>
 				</view>
 				<view class="doc-list">
 					<view class="item" v-for="(item,index) in doctorList" :key="index" @click="shopDoctor(item)"> -->
@@ -197,7 +197,7 @@
 			<!-- 评分 -->
 			<!-- <view class="rate-box">
 								<view class="star">
-									<image src="../../static/images/star.png" mode=""></image>
+									<image src="../..https://cdn.his.cdwjyyh.com/images/star.png" mode=""></image>
 									<text>{{ item.pings }}</text>
 								</view>
 								<view class="line"></view>
@@ -222,7 +222,7 @@
 					</view>
 					<view class="bottom-title" @click="navTo('../doctor/doctorList?doctorType='+docTab)">
 						<text >{{allDoctorTitle}}</text>
-						<image src="../../static/images/arrow3.png" mode=""></image>
+						<image src="../..https://cdn.his.cdwjyyh.com/images/arrow3.png" mode=""></image>
 					</view>
 					 
 				</view>
@@ -247,7 +247,7 @@
 					<text class="left">问诊案例</text>
 					<view class="right" @click="viewAll('doctorCase')">
 						<text class="text">全部案例</text>
-						<image src="../../static/images/arrow_gray.png" mode=""></image>
+						<image src="../..https://cdn.his.cdwjyyh.com/images/arrow_gray.png" mode=""></image>
 					</view>
 				</view>
 				<view class="inner">
@@ -261,11 +261,11 @@
 							>
 								<view class="text">
 									{{ item.name }}
-									<image v-show="item.id == orderType" class="tab-bg" src="../../static/images/tab_bg.png" mode=""></image>
+									<image v-show="item.id == orderType" class="tab-bg" src="../..https://cdn.his.cdwjyyh.com/images/tab_bg.png" mode=""></image>
 								</view>
 							</view>
 						</view>
-						<image class="right-mask" src="../../static/images/mask.png" mode=""></image>
+						<image class="right-mask" src="../..https://cdn.his.cdwjyyh.com/images/mask.png" mode=""></image>
 					</view>
 					<view class="cases-list">
 						<view class="item" v-for="(item,index) in doctorOrderList" :key="index">
@@ -291,16 +291,16 @@
 								<text class="text-inner" v-if="item.orderType == '1' ">{{item.replyContent}}</text>
 								<view class="voice-inner" v-if="item.orderType == '2'">
 									<free-audio 
-										startPic='/static/images/play.png' 
-										endPic='/static/images/pause.png'
-										activeColor="#2BC7B9"
+										startPic='https://cdn.his.cdwjyyh.com/images/play.png' 
+										endPic='https://cdn.his.cdwjyyh.com/images/pause.png'
+										activeColor="#02B176"
 										:audioId="'audio'+index"
 										:url='item.replyAudioUrl'
 									></free-audio>
 								</view>
 							</view>
 							<view class="read-box">
-								<image src="../../static/images/eye.png" mode=""></image>
+								<image src="../..https://cdn.his.cdwjyyh.com/images/eye.png" mode=""></image>
 								<text class="text">{{item.views}}人看过</text>
 							</view>
 						</view>
@@ -316,7 +316,7 @@
 					<text class="left">健康百科</text>
 					<view class="right" @click="switchTo('../healthy/index')">
 						<text class="text">更多</text>
-						<image src="../../static/images/arrow_gray.png" mode=""></image>
+						<image src="../..https://cdn.his.cdwjyyh.com/images/arrow_gray.png" mode=""></image>
 					</view>
 				</view>
 				<view class="inner">
@@ -331,11 +331,11 @@
 							>
 								<view class="text">
 									{{ item.cateName }}
-									<image v-show="item.cateId == cateId" class="tab-bg" src="../../static/images/tab_bg.png" mode=""></image>
+									<image v-show="item.cateId == cateId" class="tab-bg" src="../..https://cdn.his.cdwjyyh.com/images/tab_bg.png" mode=""></image>
 								</view>
 							</view>
 						</view>
-						<image class="right-mask" src="../../static/images/mask.png" mode=""></image>
+						<image class="right-mask" src="../..https://cdn.his.cdwjyyh.com/images/mask.png" mode=""></image>
 					</view>
 					 
 					<view class="know-list">
@@ -346,11 +346,11 @@
 									<view class="readers">
 										<view class="head-box" v-if="item.viewsList!=null&&item.viewsList.length>0">
 											<view class="head" v-for="(subitem,j) in item.viewsList" :key="j">
-												<image v-if="subitem!=null" :src="subitem.avatar==null?'/static/images/detault_head.jpg':subitem.avatar" mode=""></image>
+												<image v-if="subitem!=null" :src="subitem.avatar==null?'https://cdn.his.cdwjyyh.com/images/detault_head.jpg':subitem.avatar" mode=""></image>
 											</view>
 										</view>
 										<view class="readings">
-											<image class="eye" src="../../static/images/eye.png" mode=""></image>
+											<image class="eye" src="../..https://cdn.his.cdwjyyh.com/images/eye.png" mode=""></image>
 											<text class="num">{{item.views}}</text>
 										</view>
 									</view>
@@ -367,7 +367,7 @@
 			<!-- 精选药品 -->
 			<TuiProduct ref="tuiProduct" />
 			<!-- <view class="feat-title">
-				<image src="../../static/images/tui.png" mode=""></image>
+				<image src="../..https://cdn.his.cdwjyyh.com/images/tui.png" mode=""></image>
 				<text>精选药品</text>
 			</view>
 			<view class="drug-list">
@@ -396,7 +396,7 @@
 		<!-- 限时消息 -->
 		<!-- <view class="message-box" >
 			<view class="left">
-				<image src="../../static/images/close24.png" mode="" @click="closeMsg"></image>
+				<image src="../..https://cdn.his.cdwjyyh.com/images/close24.png" mode="" @click="closeMsg"></image>
 				<view class="text ellipsis">关注公众号了解更新</view>
 			</view>
 			<view class="btn">查看</view>
@@ -438,7 +438,7 @@
 	import {
 		getStoreConfig
 	} from '@/api/common'
-	import tabBg from "@/static/images/tab_bg.png"
+	import tabBg from "@https://cdn.his.cdwjyyh.com/images/tab_bg.png"
 	import freeAudio from '@/components/chengpeng-audio/free-audio.vue'
 	import Menu from '@/components/Menu.vue'
 	import HotProduct from './components/HotProduct.vue'
@@ -490,7 +490,7 @@
 				}, {
 					text: '确定',
 					color: '#FFFFFF',
-					bgColor: '#2BC7B9',
+					bgColor: '#02B176',
 					width: '150rpx',
 					height: '80rpx',
 					shape: 'fillet',
@@ -576,7 +576,7 @@
 			return {
 				title: '智慧云医汇',
 				path: `/pages/common/launch`,
-				imageUrl: '/static/images/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				imageUrl: 'https://cdn.his.cdwjyyh.com/images/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
 			}
 		},
 		onReachBottom() {
@@ -1061,10 +1061,10 @@
 		left: 0;
 		z-index: 1000;
 		transition: all 0.5s;
-		background-color: #2bc7b9;
+		background-color: #02B176;
 
 		&.show-back {
-			// background: linear-gradient(135deg, #2BC7B9 0%, #60CDC3 100%);
+			// background: linear-gradient(90deg, #38D97D 0%, #02B176 100%);
 		}
 
 		.status_bar {
@@ -1117,7 +1117,7 @@
 				flex-direction: column;
 				height: 88rpx;
 				// line-height: 88rpx;
-				font-size: 36rpx;
+				font-size: 40rpx;
 				color: #000000;
 				justify-content: flex-start;
 				padding-left: 24rpx;
@@ -1134,7 +1134,7 @@
 				}
 
 				.dot {
-					font-size: 24rpx;
+					font-size: 28rpx;
 					color: #999999;
 				}
 
@@ -1176,7 +1176,7 @@
 						background: linear-gradient(90deg, #38D97D 0%, #02B176 100%);
 						border-radius: 30rpx 30rpx 30rpx 30rpx;
 						font-weight: 500;
-						font-size: 28rpx;
+						font-size: 32rpx;
 						color: #FFFFFF;
 						text-align: center;
 						line-height: 60rpx;
@@ -1210,15 +1210,15 @@
 				align-items: center;
 
 				.left {
-					font-size: 30rpx;
+					font-size: 34rpx;
 					color: #FFFFFF;
 				}
 
 				.right {
 					padding: 5rpx 20rpx;
-					font-size: 24rpx;
+					font-size: 28rpx;
 					color: #FFFFFF;
-					background-color: #2bc7b9;
+					background-color: #02B176;
 					border-radius: 50rpx;
 				}
 			}
@@ -1363,7 +1363,7 @@
 					padding-left: 32rpx;
 
 					.title {
-						font-size: 30rpx;
+						font-size: 34rpx;
 						line-height: 1;
 						font-family: PingFang SC;
 						font-weight: 500;
@@ -1372,7 +1372,7 @@
 					}
 
 					.sub-title {
-						font-size: 24rpx;
+						font-size: 28rpx;
 						font-family: PingFang SC;
 						font-weight: 500;
 						color: #666666;
@@ -1427,14 +1427,14 @@
 							z-index: 2;
 
 							.title {
-								font-size: 32rpx;
+								font-size: 36rpx;
 								font-family: PingFang SC;
 								font-weight: bold;
 								color: #666666;
 							}
 
 							.active {
-								color: #2BC7B9;
+								color: #02B176;
 							}
 						}
 
@@ -1451,7 +1451,7 @@
 					justify-content: space-between;
 
 					.left {
-						font-size: 32rpx;
+						font-size: 36rpx;
 						line-height: 1;
 						font-family: PingFang SC;
 						font-weight: bold;
@@ -1464,7 +1464,7 @@
 						justify-content: center;
 
 						.text {
-							font-size: 24rpx;
+							font-size: 28rpx;
 							line-height: 1;
 							font-family: PingFang SC;
 							font-weight: 500;
@@ -1491,7 +1491,7 @@
 					}
 
 					.item {
-						font-size: 28rpx;
+						font-size: 32rpx;
 						white-space: nowrap;
 						line-height: 1;
 						font-family: PingFang SC;
@@ -1574,7 +1574,7 @@
 								line-height: 1;
 
 								.name {
-									font-size: 34rpx;
+									font-size: 38rpx;
 									font-weight: bold;
 									color: #111111;
 								}
@@ -1587,7 +1587,7 @@
 								}
 
 								.other {
-									font-size: 28rpx;
+									font-size: 32rpx;
 									font-weight: 500;
 									color: #333333;
 								}
@@ -1601,17 +1601,17 @@
 									padding: 0 10rpx;
 									height: 30rpx;
 									line-height: 30rpx;
-									font-size: 22rpx;
+									font-size: 26rpx;
 									font-family: PingFang SC;
 									font-weight: 500;
 									color: #FFFFFF;
-									background: #2BC7B9;
+									background: linear-gradient(136deg, #38D97D 0%, #02B176 100%);
 									border-radius: 10rpx 4rpx 10rpx 4rpx;
 									margin-right: 12rpx;
 								}
 
 								.name {
-									font-size: 28rpx;
+									font-size: 32rpx;
 									font-family: PingFang SC;
 									font-weight: 500;
 									color: #333333;
@@ -1620,7 +1620,7 @@
 							}
 
 							.expertise {
-								font-size: 26rpx;
+								font-size: 30rpx;
 								font-family: PingFang SC;
 								font-weight: 500;
 								color: #666666;
@@ -1643,7 +1643,7 @@
 									}
 
 									text {
-										font-size: 26rpx;
+										font-size: 30rpx;
 										font-family: PingFang SC;
 										font-weight: bold;
 										color: #CEA764;
@@ -1664,7 +1664,7 @@
 									font-family: PingFang SC;
 
 									.label {
-										font-size: 24rpx;
+										font-size: 28rpx;
 										font-weight: 500;
 										color: #999999;
 										line-height: 1;
@@ -1672,7 +1672,7 @@
 									}
 
 									.num {
-										font-size: 26rpx;
+										font-size: 30rpx;
 										font-weight: bold;
 										color: #CEA764;
 										line-height: 1;
@@ -1702,16 +1702,16 @@
 									}
 
 									.label {
-										font-size: 26rpx;
+										font-size: 30rpx;
 										font-weight: 500;
-										color: #2BC7B9;
+										color: #02B176;
 										margin-right: 5rpx;
 									}
 
 									.num {
-										font-size: 28rpx;
+										font-size: 32rpx;
 										font-weight: bold;
-										color: #2BC7B9;
+										color: #02B176;
 									}
 								}
 							}
@@ -1728,10 +1728,10 @@
 						display: flex;
 						align-items: center;
 						justify-content: center;
-						font-size: 26rpx;
+						font-size: 30rpx;
 						font-family: PingFang SC;
 						font-weight: bold;
-						color: #2BC7B9;
+						color: #02B176;
 
 						image {
 							margin-left: 8rpx;
@@ -1778,7 +1778,7 @@
 
 						.name {
 							max-width: 120rpx;
-							font-size: 28rpx;
+							font-size: 32rpx;
 							line-height: 1;
 							font-family: PingFang SC;
 							font-weight: 500;
@@ -1789,7 +1789,7 @@
 
 						.position {
 							max-width: 120rpx;
-							font-size: 24rpx;
+							font-size: 28rpx;
 							line-height: 1;
 							font-family: PingFang SC;
 							font-weight: 500;
@@ -1814,7 +1814,7 @@
 					}
 
 					.item {
-						font-size: 28rpx;
+						font-size: 32rpx;
 						white-space: nowrap;
 						line-height: 1;
 						font-family: PingFang SC;
@@ -1885,7 +1885,7 @@
 							justify-content: space-between;
 
 							.title {
-								font-size: 32rpx;
+								font-size: 36rpx;
 								font-family: PingFang SC;
 								font-weight: 500;
 								color: #111111;
@@ -1933,7 +1933,7 @@
 										}
 
 										.num {
-											font-size: 24rpx;
+											font-size: 28rpx;
 											font-family: PingFang SC;
 											font-weight: 500;
 											color: #999999;
@@ -1943,7 +1943,7 @@
 								}
 
 								.time {
-									font-size: 24rpx;
+									font-size: 28rpx;
 									line-height: 1;
 									font-family: PingFang SC;
 									font-weight: 500;
@@ -1979,7 +1979,7 @@
 						}
 
 						.dec-text {
-							font-size: 32rpx;
+							font-size: 36rpx;
 							font-family: PingFang SC;
 							font-weight: bold;
 							color: #111111;
@@ -2030,7 +2030,7 @@
 							}
 
 							.name {
-								font-size: 28rpx;
+								font-size: 32rpx;
 								line-height: 1;
 								font-family: PingFang SC;
 								font-weight: 500;
@@ -2046,7 +2046,7 @@
 
 							.posit,
 							.address {
-								font-size: 26rpx;
+								font-size: 30rpx;
 								font-family: PingFang SC;
 								font-weight: 500;
 								color: #999999;
@@ -2064,7 +2064,7 @@
 
 							.text-inner {
 								// height: 84rpx;
-								font-size: 28rpx;
+								font-size: 32rpx;
 								font-family: PingFang SC;
 								font-weight: 500;
 								color: #666666;
@@ -2086,7 +2086,7 @@
 							}
 
 							.text {
-								font-size: 24rpx;
+								font-size: 28rpx;
 								font-family: PingFang SC;
 								font-weight: 500;
 								color: #999999;
@@ -2111,7 +2111,7 @@
 				}
 
 				text {
-					font-size: 36rpx;
+					font-size: 40rpx;
 					line-height: 1;
 					font-family: PingFang SC;
 					font-weight: bold;
@@ -2154,7 +2154,7 @@
 
 						.title {
 							height: 80rpx;
-							font-size: 26rpx;
+							font-size: 30rpx;
 							font-family: PingFang SC;
 							font-weight: 500;
 							color: #111111;
@@ -2174,20 +2174,20 @@
 								font-family: PingFang SC;
 
 								.unit {
-									font-size: 24rpx;
+									font-size: 28rpx;
 									line-height: 1.4;
 									margin-right: 4rpx;
 								}
 
 								.num {
-									font-size: 36rpx;
+									font-size: 40rpx;
 									font-weight: bold;
 									line-height: 1;
 								}
 							}
 
 							.old {
-								font-size: 26rpx;
+								font-size: 30rpx;
 								font-family: PingFang SC;
 								text-decoration: line-through;
 								color: #BBBBBB;
@@ -2243,10 +2243,10 @@
 
 			.text {
 				width: 90%;
-				font-size: 28rpx;
+				font-size: 32rpx;
 				font-family: PingFang SC;
 				font-weight: 500;
-				color: #2BC7B9;
+				color: #02B176;
 			}
 		}
 
@@ -2255,12 +2255,12 @@
 			height: 48rpx;
 			line-height: 48rpx;
 			text-align: center;
-			font-size: 24rpx;
+			font-size: 28rpx;
 			font-family: PingFang SC;
 			font-weight: 500;
 			color: #FFFFFF;
 			border: 1px solid #D2E6FF;
-			background: linear-gradient(135deg, #2BC7B9 0%, #60CDC3 100%);
+			background: linear-gradient(90deg, #38D97D 0%, #02B176 100%);
 			border-radius: 24rpx;
 			margin-left: 30rpx;
 		}

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 422 - 428
pages/home/index.vue


+ 2 - 2
pages/home/productList.vue

@@ -5,7 +5,7 @@
 			<view class="search-cont">
 				<view class="inner">
 					<image class="icon-search" src="https://cdn.his.cdwjyyh.com/images/search.png" mode=""></image>
-					<input type="text" @confirm="goSearch"   :value="form.productName" placeholder="输入药品名称" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
+					<input type="text" @confirm="goSearch"   :value="form.productName" placeholder="输入药品名称" placeholder-style="font-size:32rpx;color:#BBBBBB;font-family: PingFang SC;" />
 				</view>
 				<view class="icon-search">
 					<image @click="showChange(2)" v-if="showType==1"  src="https://cdn.his.cdwjyyh.com/images/search1.png" mode=""></image>
@@ -302,7 +302,7 @@
 			align-items: center;
 			justify-content: center;
 			&.active .label{
-				color: #2BC7B9;
+				color: #02B176;
 			}
 			.label{
 				font-size: 26upx;

+ 582 - 318
pages/home/productSearch.vue

@@ -1,13 +1,23 @@
 <template>
 	<view class="content">
-		<view class="status_bar" :style="{height: statusBarHeight}"></view>
+		<view class="status_bar" :style="{ height: statusBarHeight }"></view>
 		<!-- 搜索框 -->
 		<view class="search-cont">
 			<image @click="goBack" class="w64 h64" src="https://cdn.his.cdwjyyh.com/images/back_black.png"></image>
 			<view class="inner">
-				<input v-model="searchValue" type="text" value="" placeholder="城口腊肉/香肠" confirm-type="搜索"
+				<view class="search-input-container">
+					<input v-model="searchValue" type="text" confirm-type="搜索"
 					@confirm="handleSearch" @input="handleInput" :focus='setFocus'
-					placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
+					placeholder-style="font-size:32rpx;color:#BBBBBB;font-family: PingFang SC;" />
+					<view class="placeholder-container" v-if="!searchValue">
+						<view class="placeholder-wrapper" :class="{ 'animate': isAnimating }">
+							<view class="placeholder-item" v-for="(item, index) in hotSearchList" :key="index" 
+								:style="{ transform: `translateY(${(index - currentPlaceholderIndex) * 100}%)` }">
+								{{ item.searchName || item.keyword }}
+							</view>
+						</view>
+					</view>
+				</view>
 				<image @click="clearInput" v-if="searchValue" class="w32 h32"
 					src="https://cdn.his.cdwjyyh.com/images/search_close_gray.png">
 				</image>
@@ -16,27 +26,35 @@
 			</view>
 		</view>
 
-		<!-- 热门搜索 -->
+		<!-- 历史搜索 -->
 		<view class="title-box">
-			<text class="title">热门搜索</text>
-			<image class="w32 h32" src="https://cdn.his.cdwjyyh.com/images/delete_icon.png"></image>
+			<text class="title">历史搜索</text>
+			<image class="title-icon" @click="clearHistory" src="https://cdn.his.cdwjyyh.com/images/delete_icon.png"></image>
 		</view>
 		<view class="popular-list">
-			<view class="item" v-for="(item,index) in topSearch" :key="index" @click="doSearch(item)">
-				{{ item }}
+			<view class="item" v-for="(item, index) in historySearchList" :key="index"
+				@longpress="handleLongPress(item)"
+				@click="handleItemClick(item)">
+				<text>{{ item.keyword  }}</text>
+				<image 
+					v-if="longPressItem === ( item.id)" 
+					class="delete-icon" 
+					@click.stop="deleteHistory(item.id)" 
+					src="https://cdn.his.cdwjyyh.com/images/delete_icon.png"
+				></image>
 			</view>
 		</view>
 		<!-- 推荐搜索 -->
-		<view class="title-box">
+		<!-- <view class="title-box">
 			<text class="title">大家都在搜</text>
-			<image class="w32 h32" src="https://cdn.his.cdwjyyh.com/images/refresh_icon.png"></image>
+			<image class="title-icon" src="https://cdn.his.cdwjyyh.com/images/refresh_icon.png"></image>
 		</view>
 		<view class="data-list">
-			<view class="item" v-for="(item,index) in topSearch" :key="index" @click="doSearch(item)">
+			<view class="item" v-for="(item, index) in topSearch" :key="index" @click="doSearch(item)">
 				<text> {{ item }}</text>
 				<image class="w40 h40 ml8" src="https://cdn.his.cdwjyyh.com/images/hot.png"></image>
 			</view>
-		</view>
+		</view> -->
 
 		<scroll-view class="card-group" scroll-x="true" show-scrollbar="false" enhanced="true" enable-flex="true">
 			<!-- 今日热卖榜 -->
@@ -47,18 +65,20 @@
 					<text class="title1">今日热卖榜</text>
 				</view>
 				<view class="product-list">
-					<view class="product-item" v-for="(item,index) in todayList" :key="index">
+					<view class="product-item" v-for="(item, index) in todayList" :key="index">
 						<view class="left">
 							<image class="photo" :src="item.image"></image>
-							<view class="lable" :class="index === 0 ? 'bg1' : index === 1 ? 'bg2' : index === 2 ? 'bg3' : 'bg'">{{index+1}}</view>
+							<view class="lable"
+								:class="index === 0 ? 'bg1' : index === 1 ? 'bg2' : index === 2 ? 'bg3' : 'bg'">
+								{{ index + 1 }}</view>
 						</view>
 						<view class="right">
-							<view class="title">{{item.productName}}</view>
-							<view class="txt">{{item.productInfo}}</view>
+							<view class="title">{{ item.productName }}</view>
+							<view class="txt">{{ item.productInfo }}</view>
 							<view class="num-box">
-								<view class="price"><text class="symbol">¥</text><text
-										class="bold">{{item.price}}</text>.48</view>
-								<view class="sale">已售 {{item.sales}}</view>
+								<view class="price"><text class="symbol">¥</text><text class="bold">{{ item.price
+										}}</text></view>
+								<view class="sale">已售 {{ item.sales }}</view>
 							</view>
 						</view>
 					</view>
@@ -73,18 +93,20 @@
 					<text class="title1">30天新品热销榜单</text>
 				</view>
 				<view class="product-list">
-					<view class="product-item" v-for="(item,index) in newProductList" :key="index">
+					<view class="product-item" v-for="(item, index) in newProductList" :key="index">
 						<view class="left">
 							<image class="photo" :src="item.image"></image>
-						<view class="lable" :class="index === 0 ? 'bg1' : index === 1 ? 'bg2' : index === 2 ? 'bg3' : 'bg'">{{index+1}}</view>
+							<view class="lable"
+								:class="index === 0 ? 'bg1' : index === 1 ? 'bg2' : index === 2 ? 'bg3' : 'bg'">
+								{{ index + 1 }}</view>
 						</view>
 						<view class="right">
-							<view class="title">{{item.productName}}</view>
-							<view class="txt">{{item.productInfo}}</view>
+							<view class="title">{{ item.productName }}</view>
+							<view class="txt">{{ item.productInfo }}</view>
 							<view class="num-box">
-								<view class="price"><text class="symbol">¥</text><text
-										class="bold">{{item.price}}</text>.48</view>
-								<view class="sale">已售 {{item.sales}}</view>
+								<view class="price"><text class="symbol">¥</text><text class="bold">{{ item.price
+										}}</text></view>
+								<view class="sale">已售 {{ item.sales }}</view>
 							</view>
 						</view>
 					</view>
@@ -96,13 +118,17 @@
 
 <script>
 import {
-	storeHotSearch
+	clear,
+	deleteSearchHistory,
+	storeHotSearch,
+	addHistory,
+	storeHistorySearch
 } from '@/api/search.js'
-	import {
-		todayAndHot
-	} from '@/api/product.js'
-	export default {
-		data() {
+import {
+	todayAndHot
+} from '@/api/product.js'
+export default {
+	data() {
 			return {
 				newProductList: [],
 				todayList: [],
@@ -113,201 +139,415 @@ import {
 				// 历史搜索
 				searchHistory: [],
 				// 推荐搜索
-				topSearch: []
+				topSearch: [],
+				hotSearchList: [],
+				historySearchList: [],
+				// 长按状态
+				longPressItem: null,
+				// placeholder轮播
+				currentPlaceholderIndex: 0,
+				placeholderTimer: null,
+				isAnimating: false
 			};
 		},
-		onLoad(options) {
-			console.log('options',options)
-			if(options.value){
-				this.searchValue = decodeURIComponent(options.value)
+	onLoad(options) {
+		console.log('options', options)
+		if (options.value) {
+			this.searchValue = decodeURIComponent(options.value)
+		}
+	},
+	onShow() {
+		this.getTodayAndHot();
+		this.storeHotSearch();//热门搜索
+		this.storeHistorySearch();//历史搜索
+		
+		this.setFocus = true
+		this.searchHistory = this.utils.getHisSearch();
+		var config = uni.getStorageSync('config');
+		if (config != null && config != undefined && config != "") {
+			this.topSearch = JSON.parse(config).hotSearch.split(',');
+		}
+		// 启动placeholder轮播
+		this.startPlaceholderCarousel();
+	},
+	onHide() {
+		// 页面隐藏时重置聚焦状态
+		this.setFocus = false;
+		// 停止placeholder轮播
+		this.stopPlaceholderCarousel();
+	},
+	computed: {
+		// 当前placeholder
+		currentPlaceholder() {
+			if (this.hotSearchList && this.hotSearchList.length > 0) {
+				const item = this.hotSearchList[this.currentPlaceholderIndex];
+				return item ? (item.searchName || item.keyword || '搜索商品') : '搜索商品';
+			}
+			return '搜索商品';
+		}
+	},
+	methods: {
+		// 添加历史搜索
+		addHistory() {
+			let searchKeyword = this.searchValue.trim();
+			if (!searchKeyword) {
+				// 使用当前轮播的placeholder值作为搜索关键词
+				searchKeyword = this.currentPlaceholder;
+			}
+			let params = {
+				keyword: searchKeyword
 			}
+			addHistory(params).then(
+
+				(res) => {
+					if (res.code == 200) {
+						this.historySearchList = res.data
+					} else {
+						uni.showToast({
+							title: res.msg,
+							icon: 'none'
+						});
+					}
+				},
+				(rej) => { }
+			)
+		},
+		// 历史搜索
+		storeHistorySearch() {
+			console.log('历史搜索')
+			storeHistorySearch().then(
+				(res) => {
+					if (res.code == 200) {
+						this.historySearchList = res.data
+						this.longPressItem = null; // 重置长按状态
+					} else {
+						uni.showToast({
+							title: res.msg,
+							icon: 'none'
+						});
+					}
+				},
+				(rej) => { }
+			);
 		},
-		onShow() {
-			this.getTodayAndHot();
-			this.storeHotSearch();//热门搜索
-			this.setFocus = true
-			this.searchHistory = this.utils.getHisSearch();
-			var config = uni.getStorageSync('config');
-			if (config != null && config != undefined && config != "") {
-				this.topSearch = JSON.parse(config).hotSearch.split(',');
+		// 热门搜索
+		storeHotSearch() {
+			console.log('历史搜索')
+			storeHotSearch().then(
+				(res) => {
+					if (res.code == 200) {
+						this.hotSearchList = res.data
+						this.longPressItem = null; // 重置长按状态
+						this.currentPlaceholderIndex = 0; // 重置placeholder轮播索引
+					} else {
+						uni.showToast({
+							title: res.msg,
+							icon: 'none'
+						});
+					}
+				},
+				(rej) => { }
+			);
+		},
+		
+		// 启动placeholder轮播
+		startPlaceholderCarousel() {
+			// 先停止之前的轮播
+			this.stopPlaceholderCarousel();
+			
+			// 每3秒切换一次placeholder
+			this.placeholderTimer = setInterval(() => {
+				if (this.hotSearchList && this.hotSearchList.length > 0) {
+					// 开始动画
+					this.isAnimating = true;
+					
+					// 延迟更新索引,让动画先执行
+					setTimeout(() => {
+						this.currentPlaceholderIndex = (this.currentPlaceholderIndex + 1) % this.hotSearchList.length;
+						
+						// 动画结束
+						setTimeout(() => {
+							this.isAnimating = false;
+						}, 300);
+					}, 300);
+				}
+			}, 3000);
+		},
+		
+		// 停止placeholder轮播
+		stopPlaceholderCarousel() {
+			if (this.placeholderTimer) {
+				clearInterval(this.placeholderTimer);
+				this.placeholderTimer = null;
 			}
 		},
-		onHide() {
-			// 页面隐藏时重置聚焦状态
-			this.setFocus = false;
+		
+		getTodayAndHot() {
+			todayAndHot().then(
+				(res) => {
+					if (res.code == 200) {
+						this.newProductList = res.data.thirtyDaysNewProductRank
+						this.todayList = res.data.todayHotRank
+					} else {
+						uni.showToast({
+							title: res.msg,
+							icon: 'none'
+						});
+					}
+				},
+				(rej) => { }
+			);
 		},
-		methods: {
-			// 热门搜索
-			storeHotSearch(){
-storeHotSearch().then(
-					(res) => {
-						if (res.code == 200) {
-							this.hotSearchList = res.data
-						} else {
-							uni.showToast({
-								title: res.msg,
-								icon: 'none'
-							});
-						}
-					},
-					(rej) => {}
-				);
-			},
-			getTodayAndHot() {
-				todayAndHot().then(
-					(res) => {
-						if (res.code == 200) {
-							this.newProductList = res.data.thirtyDaysNewProductRank
-							this.todayList = res.data.todayHotRank
-						} else {
-							uni.showToast({
-								title: res.msg,
-								icon: 'none'
-							});
-						}
-					},
-					(rej) => {}
-				);
-			},
-
-
-			goBack() {
-				uni.navigateBack({
-					delta: 1 // 返回的页面数,1表示返回上一页
-				});
-			},
-			// 处理输入
-			handleInput(e) {
-				this.searchValue = e.detail.value;
-			},
-			// 清除输入内容
-			clearInput() {
-				this.searchValue = '';
-				this.setFocus = true; // 清除后重新聚焦
-			},
-			// 清空历史搜索数据
-			clearHistory() {
-				this.utils.clearHisSearch();
-				this.searchHistory = this.utils.getHisSearch();
-			},
-			doSearch(item) {
-					uni.navigateTo({
-					url: './productList?key=' + encodeURIComponent(item)
-				})
-			},
-			handleSearch() {
-				if (!this.searchValue.trim()) {
+
+
+		goBack() {
+			uni.navigateBack({
+				delta: 1 // 返回的页面数,1表示返回上一页
+			});
+		},
+		// 处理输入
+		handleInput(e) {
+			this.searchValue = e.detail.value;
+		},
+		// 清除输入内容
+		clearInput() {
+			this.searchValue = '';
+			this.setFocus = true; // 清除后重新聚焦
+		},
+		// 清空历史搜索数据
+		clearHistory() {
+			clear().then(
+				(res) => {
+					if (res.code == 200) {
+						this.storeHistorySearch(); // 重新获取搜索历史
+						this.longPressItem = null; // 重置长按状态
+						uni.showToast({
+							title: '清除成功',
+							icon: 'success'
+						});
+					} else {
+						uni.showToast({
+							title: res.msg,
+							icon: 'none'
+						});
+					}
+				},
+				(rej) => {
 					uni.showToast({
-						title: '请输入搜索内容',
+						title: '清除失败',
 						icon: 'none'
 					});
-					return;
 				}
+			);
+		},
+		
+		// 处理长按事件
+		handleLongPress(item) {
+			if (item) {
+				this.longPressItem =  item.id;
+			}
+		},
+		
+		// 处理点击事件
+		handleItemClick(item) {
+			// 如果不是在长按状态下,执行搜索
+			if (!this.longPressItem) {
+				this.doSearch(item);
+			}
+		},
+		
+		// 删除单条历史记录
+		deleteHistory(item) {
+			console.log("删除item", item)
+			if (!item) return;
+			deleteSearchHistory({id:item}).then(
+				(res) => {
+					if (res.code == 200) {
+						this.storeHistorySearch(); // 重新获取搜索历史
+						this.longPressItem = null; // 重置长按状态
+						uni.showToast({
+							title: '删除成功',
+							icon: 'success'
+						});
+					} else {
+						uni.showToast({
+							title: res.msg,
+							icon: 'none'
+						});
+					}
+				},
+				(rej) => {
+					uni.showToast({
+						title: '删除失败',
+						icon: 'none'
+					});
+				}
+			);
+		},
+		doSearch(item) {
+			const keyword = item.keyword || item.searchName || '';
+			uni.navigateTo({
+				url: './productList?key=' + encodeURIComponent(keyword)
+			})
+		},
+		handleSearch() {
+			let searchKeyword = this.searchValue.trim();
+			if (!searchKeyword) {
+				// 使用当前轮播的placeholder值作为搜索关键词
+				searchKeyword = this.currentPlaceholder;
+			}
 
-				// 保存搜索历史
-				this.utils.addHisSearch(this.searchValue);
+			// 保存搜索历史
+			this.utils.addHisSearch(searchKeyword);
+			// 添加历史搜索
+			this.addHistory();
 
-				// 跳转到搜索结果页
-				uni.navigateTo({
-					url: './productList?key=' + encodeURIComponent(this.searchValue)
-				});
-			},
-		}
+			// 跳转到搜索结果页
+			uni.navigateTo({
+				url: './productList?key=' + encodeURIComponent(searchKeyword)
+			});
+		},
 	}
+}
 </script>
 
 <style lang="scss">
-	page {
-		background-color: #ffffff;
-	}
-
-	.content {
-		.search-cont {
+page {
+	background-color: #ffffff;
+}
+
+.content {
+	.search-cont {
+		display: flex;
+		padding: 16rpx 30rpx;
+		background-color: #FFFFFF;
+
+		.inner {
+			box-sizing: border-box;
+			width: 436rpx;
+			height: 64rpx;
+			background: #F5F7FA;
+			border-radius: 36rpx;
 			display: flex;
-			padding: 16rpx 30rpx;
-			background-color: #FFFFFF;
+			align-items: center;
+			padding: 0 24rpx;
 
-			.inner {
-				box-sizing: border-box;
-				width: 436rpx;
-				height: 64rpx;
-				background: #F5F7FA;
-				border-radius: 36rpx;
-				display: flex;
-				align-items: center;
-				padding: 0 24rpx;
-
-				image {
-					padding: 16rpx;
-					/* 增加点击区域 */
-					margin: -16rpx;
-					/* 负边距抵消padding对布局的影响 */
-					box-sizing: content-box;
-				}
+			image {
+				padding: 16rpx;
+				/* 增加点击区域 */
+				margin: -16rpx;
+				/* 负边距抵消padding对布局的影响 */
+				box-sizing: content-box;
+			}
 
-				.search {
-					font-weight: 500;
-					font-size: 28rpx;
-					color: #333333;
-				}
+			.search {
+				font-weight: 500;
+				font-size: 32rpx;
+				color: #333333;
+			}
 
-				.line {
-					width: 2rpx;
-					height: 24rpx;
-					background: #999999;
-					margin: 0 26rpx;
-				}
+			.line {
+				width: 2rpx;
+				height: 24rpx;
+				background: #999999;
+				margin: 0 26rpx;
+			}
+
+			.search-input-container {
+				position: relative;
+				flex: 1;
+				height: 100%;
 
 				input {
 					height: 60rpx;
 					line-height: 60rpx;
-					flex: 1;
+					width: 100%;
+					z-index: 1;
+					position: relative;
+				}
+
+				.placeholder-container {
+					position: absolute;
+					left: 0;
+					top: 0;
+					height: 100%;
+					width: 100%;
+					display: flex;
+					align-items: center;
+					z-index: 0;
+					overflow: hidden;
+
+					.placeholder-wrapper {
+						position: relative;
+						height: 100%;
+						width: 100%;
+
+						.placeholder-item {
+							position: absolute;
+							left: 0;
+							top: 0;
+							height: 100%;
+							width: 100%;
+							display: flex;
+							align-items: center;
+							font-size: 32rpx;
+							color: #BBBBBB;
+							font-family: PingFang SC;
+							transition: transform 0.3s ease-in-out;
+						}
+
+						&.animate .placeholder-item {
+							transition: transform 0.3s ease-in-out;
+						}
+					}
 				}
 			}
 		}
+	}
 
-		.title-box {
-			padding: 30rpx;
-			display: flex;
-			align-items: center;
-			justify-content: space-between;
+	.title-box {
+		padding: 30rpx;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
 
-			.title {
-				font-weight: 600;
-				font-size: 32rpx;
-				color: #000000;
-			}
+		.title {
+			font-weight: 600;
+			font-size: 40rpx;
+			color: #000000;
+		}
 
-			image {
-				width: 30rpx;
-				height: 30rpx;
-			}
+		.title-icon {
+			width: 36rpx;
+			height: 36rpx;
 		}
 
-		.data-list {
-			padding: 0rpx 10rpx 30rpx;
-			display: grid;
-			grid-template-columns: repeat(2, 1fr);
-			/* 两列布局 */
-			grid-gap: 20rpx;
+	}
 
-			.item {
-				padding: 0 30rpx;
-				height: 56rpx;
-				line-height: 56rpx;
-				font-size: 26rpx;
-				font-family: PingFang SC;
-				font-weight: 500;
-				color: #4D4D4D;
-				border-radius: 28rpx;
-				margin: 0;
-				display: flex;
-				align-items: center;
-				text-align: center;
-			}
+	.data-list {
+		padding: 0rpx 10rpx 30rpx;
+		display: grid;
+		grid-template-columns: repeat(2, 1fr);
+		/* 两列布局 */
+		grid-gap: 20rpx;
+
+		.item {
+			padding: 0 30rpx;
+			height: 56rpx;
+			line-height: 56rpx;
+			font-size: 30rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #4D4D4D;
+			border-radius: 28rpx;
+			margin: 0;
+			display: flex;
+			align-items: center;
+			text-align: center;
 		}
+	}
 
-		.popular-list {
+	.popular-list {
 			padding: 0rpx 10rpx 30rpx;
 			display: flex;
 			flex-wrap: wrap;
@@ -316,169 +556,193 @@ storeHotSearch().then(
 				padding: 0 40rpx;
 				height: 56rpx;
 				line-height: 56rpx;
-				font-size: 26rpx;
+				font-size: 34rpx;
 				font-family: PingFang SC;
 				font-weight: 500;
 				color: #4D4D4D;
 				background: #F5F7FA;
 				border-radius: 28rpx;
 				margin: 0 20rpx 20rpx 0;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				position: relative;
+
+				.delete-icon {
+					width: 24rpx;
+					height: 24rpx;
+					margin-left: 12rpx;
+					opacity: 0.6;
+					transition: opacity 0.3s;
+
+					&:hover {
+						opacity: 1;
+					}
+				}
 			}
 		}
 
-		.card-group {
+	.card-group {
+		display: flex;
+		padding: 0 24rpx 30rpx;
+		/* 添加底部内边距 */
+		box-sizing: border-box;
+		align-items: flex-start;
+
+		.card {
+			width: 600rpx;
+			padding: 26rpx 32rpx 32rpx;
+			background: #FFFFFF;
+			border-radius: 24rpx 24rpx 24rpx 24rpx;
+			position: relative;
+			z-index: 0;
+			flex-shrink: 0;
+			box-sizing: border-box;
 			display: flex;
-				padding: 0 24rpx 30rpx; /* 添加底部内边距 */
-				box-sizing: border-box;
-				align-items: flex-start;
-
-			.card {
-				width: 600rpx;
-						padding: 26rpx 32rpx 32rpx;
-						background: #FFFFFF;
-						border-radius: 24rpx 24rpx 24rpx 24rpx;
-						position: relative;
-						z-index: 0;
-						flex-shrink: 0;
-						box-sizing: border-box;
-						display: flex;
-						flex-direction: column;
-				.card-bg {
-					width: 100%;
-								height: 96rpx;
-								position: absolute;
-								top: 0;
-								left: 0;
-								border-radius: 24rpx 24rpx 0 0;
-								z-index: -1;
+			flex-direction: column;
+
+			.card-bg {
+				width: 100%;
+				height: 96rpx;
+				position: absolute;
+				top: 0;
+				left: 0;
+				border-radius: 24rpx 24rpx 0 0;
+				z-index: -1;
+			}
+
+			.card-title {
+				display: flex;
+				align-items: center;
+				font-weight: 600;
+				font-size: 40rpx;
+				margin-bottom: 34rpx;
+				min-height: 50rpx;
+
+				.title1 {
+					color: #FF4400;
 				}
 
-				.card-title {
+				.title2 {
+					color: #D46C0D;
+				}
+			}
+
+			.product-list {
+				flex: 1;
+
+				.product-item {
 					display: flex;
-								align-items: center;
-								font-weight: 600;
-								font-size: 32rpx;
-								margin-bottom: 34rpx;
-								min-height: 50rpx;
-					.title1 {
-						color: #FF4400;
-					}
+					align-items: center;
+					margin-bottom: 40rpx;
+
+					.left {
+						margin-right: 22rpx;
+						width: 120rpx;
+						height: 120rpx;
+						border-radius: 8rpx 8rpx 8rpx 8rpx;
+						overflow: hidden;
+						position: relative;
 
-					.title2 {
-						color: #D46C0D;
-					}
-				}
+						.photo {
+							width: 100%;
+							height: 100%;
+						}
 
-				.product-list {
-					flex: 1;
-					.product-item {
-						display: flex;
-						align-items: center;
-						margin-bottom: 40rpx;
-
-						.left {
-							margin-right: 22rpx;
-							width: 120rpx;
-							height: 120rpx;
-							border-radius: 8rpx 8rpx 8rpx 8rpx;
-							overflow: hidden;
-							position: relative;
+						.lable {
+							position: absolute;
+							left: 0;
+							top: 0;
+							width: 32rpx;
+							height: 32rpx;
+							text-align: center;
+							line-height: 32rpx;
+							// background: linear-gradient(135deg, #C1C5CD 0%, #A5AAB5 100%);
+							border-radius: 8rpx 0rpx 8rpx 0rpx;
+							font-family: Roboto, Roboto;
+							font-weight: 500;
+							font-size: 28rpx;
+							color: #FFFFFF;
 
-							.photo {
-								width: 100%;
-								height: 100%;
-							}
+						}
 
-							.lable {
-								position: absolute;
-								left: 0;
-								top: 0;
-								width: 32rpx;
-								height: 32rpx;
-								text-align: center;
-								line-height: 32rpx;
-								// background: linear-gradient(135deg, #C1C5CD 0%, #A5AAB5 100%);
-								border-radius: 8rpx 0rpx 8rpx 0rpx;
-								font-family: Roboto, Roboto;
-								font-weight: 500;
-								font-size: 24rpx;
-								color: #FFFFFF;
+						.bg1 {
+							background: linear-gradient(135deg, #FB7E4C 0%, #ED4B17 100%);
+						}
 
-							}
-							.bg1{
-								background: linear-gradient( 135deg, #FB7E4C 0%, #ED4B17 100%);
-							}
-							.bg2{
-								background: linear-gradient( 135deg, #FBCF3F 0%, #F9B71B 100%);
-							}
-							.bg3{
-								background: linear-gradient( 135deg, #D5AB78 0%, #C39760 100%);
-							}
-							.bg{
-								background: linear-gradient( 135deg, #C1C5CD 0%, #A5AAB5 100%);
-							}
+						.bg2 {
+							background: linear-gradient(135deg, #FBCF3F 0%, #F9B71B 100%);
 						}
 
-						.right {
-							flex: 1;
-							min-width: 0;
+						.bg3 {
+							background: linear-gradient(135deg, #D5AB78 0%, #C39760 100%);
+						}
 
-							.title {
-								font-weight: 500;
-								font-size: 28rpx;
-								color: #333333;
-								overflow: hidden;
-								/* 隐藏溢出内容 */
-								text-overflow: ellipsis;
-								/* 显示省略号 */
-								white-space: nowrap;
-								/* 不换行 */
-							}
+						.bg {
+							background: linear-gradient(135deg, #C1C5CD 0%, #A5AAB5 100%);
+						}
+					}
 
-							.txt {
-								font-size: 22rpx;
-								color: #999999;
-								margin: 4rpx 0 20rpx;
-							}
+					.right {
+						flex: 1;
+						min-width: 0;
+
+						.title {
+							font-weight: 500;
+							font-size: 36rpx;
+							color: #333333;
+							overflow: hidden;
+							/* 隐藏溢出内容 */
+							text-overflow: ellipsis;
+							/* 显示省略号 */
+							white-space: nowrap;
+							/* 不换行 */
+						}
 
-							.num-box {
-								display: flex;
-								justify-content: space-between;
-								align-items: flex-end;
+						.txt {
+							font-size: 30rpx;
+							color: #999999;
+							margin: 4rpx 0 20rpx;
+						}
 
-								.price {
-									font-family: Roboto, Roboto;
-									font-weight: 600;
-									font-size: 26rpx;
-									color: #FA341E;
+						.num-box {
+							display: flex;
+							justify-content: space-between;
+							align-items: flex-end;
 
-									.symbol {
-										font-size: 20rpx;
-									}
+							.price {
+								font-family: Roboto, Roboto;
+								font-weight: 600;
+								font-size: 34rpx;
+								color: #FA341E;
 
-									.bold {
-										font-size: 36rpx;
-									}
+								.symbol {
+									font-size: 24px;
 								}
 
-								.sale {
-									font-size: 21rpx;
-									color: #999999;
+								.bold {
+									font-size: 44rpx;
 								}
 							}
-						}
 
+							.sale {
+								font-size: 28rpx;
+								color: #999999;
+							}
+						}
 					}
+
 				}
 			}
+		}
 
-			.border1 {
-				border: 1rpx solid rgba(241, 89, 38, 0.5);
-			}
+		.border1 {
+			border: 1rpx solid rgba(241, 89, 38, 0.5);
+		}
 
-			.border2 {
-				border: 1rpx solid rgba(244, 160, 7, 0.5);
-			}
+		.border2 {
+			border: 1rpx solid rgba(244, 160, 7, 0.5);
 		}
 	}
+}
 </style>

+ 755 - 529
pages/life/life.vue

@@ -2,36 +2,39 @@
 	<view class="content">
 		<view class="info">
 			<image class="info-bg" src="https://cdn.his.cdwjyyh.com/images/live_broadcast_bg.png"></image>
-			<view class="status_bar" :style="{height: statusBarHeight}"></view>
+			<view class="status_bar" :style="{ height: statusBarHeight }"></view>
 			<view class="shop-block">
 				<view class="title-box">
 					<view class="title">生活号</view>
 					<image class="line" src="https://cdn.his.cdwjyyh.com/images/header_tabs_icon.png"></image>
 				</view>
-				<view class="shop">
-						<CartIcon />
-					</view>
+				<view class="expert">
+					<image class="icon" src="https://cdn.his.cdwjyyh.com/images/expert_user.png" @click="goApplyExpert">
+					</image>
+					<!-- <CartIcon /> -->
+				</view>
 			</view>
 			<view class="search-cont">
 				<image class="icon-search" src="https://cdn.his.cdwjyyh.com/images/search.png" mode=""></image>
 				<input type="text" v-model="searchKeyword" placeholder="输入关键词搜索"
-					placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" @confirm="handleSearch" />
+					placeholder-style="font-size:32rpx;color:#BBBBBB;font-family: PingFang SC;"
+					@confirm="handleSearch" />
 			</view>
-			<view class="vedio-block">
+			<view class="video-block">
 				<!-- tab栏 -->
 				<view class="pub-tab-box">
 					<view class="tab-inner">
-						<view v-for="(item,index) in orderStatus" :key="index"
-							:class="status ==item.value?'item active':'item'" @click="orderStatusChange(item)">
+						<view v-for="(item, index) in orderStatus" :key="index"
+							:class="status == item.dictCode ? 'item active' : 'item'" @click="orderStatusChange(item)">
 							<view class="text">
-								{{ item.name }}
+								{{ item.dictLabel }}
 							</view>
 						</view>
 					</view>
 				</view>
 
 				<!-- 专区 -->
-				<view class="zone-box">
+				<!-- <view class="zone-box">
 					<view class="zone-item green-bg" >
 						<view class="title-item">
 							<image class="icon" src="https://cdn.his.cdwjyyh.com/images/hdzx_icon.png" mode=""></image>
@@ -56,636 +59,859 @@
 							<image class="icon" src="https://cdn.his.cdwjyyh.com/images/shh_arrow_right_icon.png" mode=""></image>
 						</view>
 					</view>
-				</view>
+				</view> -->
 
 				<!-- 视频文章列表 -->
 				<mescroll-body bottom="0" ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback"
 					:down="downOption" :up="upOption">
 					<view class="list">
-						<view class="list-item" @click="goLifeDetail(item.resourceId)" v-for="(item,index) in list" :key="index">
-							<image class="img" :src="item.imgsUrl||'https://cdn.his.cdwjyyh.com/images/img.png'" mode="widthFix"></image>
-							<image class="video-icon" v-if="item.resourceType==1" src="https://cdn.his.cdwjyyh.com/images/video_icon.png"></image>
-							<image class="suspension-icon" v-if="index==2 && !hasShownSuspension" @click.stop="onTask" src="https://cdn.his.cdwjyyh.com/images/suspension.png"></image>
-							<view class="info-block">
-								<view class="title">{{ item.title }}</view>
-								<view class="item">
-									<view class="flex">
-										<image class="head" :src="item.avatar||'https://cdn.his.cdwjyyh.com/images/img.png'"></image>
-										<text class="name">{{ item.nickname }}</text>
-									</view>
-									<view class="flex">
-										<image class="icon" src="https://cdn.his.cdwjyyh.com/images/zan_icon.png"></image>
-										<text>{{ item.clickCount }}</text>
+						<view class="wf-row">
+							<view class="wf-col" v-for="(col, cIdx) in columns" :key="cIdx">
+								<view class="list-item" v-for="(item, idx) in col" :key="idx"
+									:style="{ marginBottom: gapPx }" @click="goLifeDetail(item)">
+									<video class="img" v-if="item.resourceType == 1"
+										:id="'video-' + (item.resourceId || idx)"
+										:src="item.videoUrl || 'https://cdn.his.cdwjyyh.com/images/img.png'"
+										mode="widthFix" autoplay muted loop :show-center-play-btn="false"
+										:show-play-btn="false" :controls="false" object-fit="cover"
+										:enable-progress-gesture="false" :page-gesture="false"
+										:data-id="item.resourceId || idx" @load="onImgLoad" @error="onImgError"
+										@play="onVideoPlay" @pause="onVideoPause"></video>
+									<image class="img" v-if="item.resourceType == 2"
+										:src="item.imgsUrl || 'https://cdn.his.cdwjyyh.com/images/img.png'"
+										mode="widthFix" lazy-load :data-id="item.resourceId || idx" @load="onImgLoad"
+										@error="onImgError"></image>
+									<image class="video-icon" v-if="item.resourceType == 1"
+										src="https://cdn.his.cdwjyyh.com/images/video_icon.png"></image>
+									<view class="info-block">
+										<view class="title">{{ item.title || '无标题' }}</view>
+										<view class="item">
+											<view class="flex">
+												<image class="head"
+													:src="item.avatar || 'https://cdn.his.cdwjyyh.com/images/img.png'">
+												</image>
+												<text class="name">{{ item.nickname || '默认' }}</text>
+											</view>
+											<view class="flex">
+												<image class="icon"
+													src="https://cdn.his.cdwjyyh.com/images/zan_icon.png"></image>
+												<text>{{ item.clickCount || 0 }}</text>
+											</view>
+										</view>
+										<!-- <view class="card">
+											<view class="card-item">
+												<image class="img" src="https://cdn.his.cdwjyyh.com/images/jinbang_font.png"></image>
+												<text class="ranking">达人榜 第15名</text>
+											</view>
+											<image class="go" src="https://cdn.his.cdwjyyh.com/images/jb_arrow_right_icon.png"></image>
+										</view> -->
 									</view>
 								</view>
-								<view class="card">
-									<view class="card-item">
-										<image class="img" src="https://cdn.his.cdwjyyh.com/images/jinbang_font.png"></image>
-										<text class="ranking">达人榜 第15名</text>
-									</view>
-									<image class="go" src="https://cdn.his.cdwjyyh.com/images/jb_arrow_right_icon.png"></image>
-								</view>
 							</view>
 						</view>
 					</view>
 				</mescroll-body>
 			</view>
-			<Task :show="showTask" @close="handleCloseTask"></Task>
-
+			<!-- <SuspensionTask /> -->
 		</view>
+
 	</view>
 </template>
 
 <script>
+import { applyExpertStatus } from '@/api/life.js';
+import {
+	getUserInfo,
+} from '@/api/user'
+// import SuspensionTask from '@/components/public/suspension-task.vue'
+// import CartIcon from '@/components/cartIcon.vue'
+import {
+	lifeList, //生活号列表
+	lifeCategory //生活号内容分类
+} from '@/api/life.js'
+import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+export default {
+	mixins: [MescrollMixin],
+	components: {
+		// CartIcon
+	},
+	data() {
+		return {
+			status: null,
+			dictCode: '',
+			orderStatus: [],
+			activeTab: 0,
+			userData: this.getUserInfo(),
+			// 状态栏的高度
+			statusBarHeight: this.getStatusBarHeight(),
+			list: [],
+			columns: [[], []],
+			colHeights: [0, 0],
+			colCount: 2,
+			colGap: 22,
+			searchKeyword: '',
+			downOption: {
+				offset: 80,
+				use: true,
+				auto: false
+			},
+			upOption: {
+				use: true,
+				auto: false, // 关闭自动加载,等待lifeCategory完成后手动加载
+				page: {
+					num: 0,
+					size: 10
+				}
+			},
+			mescroll: null,
+			isPageActive: true // 页面状态标志
+		}
+	},
+	onLoad() {
+		this.lifeCategory();//获取生活号内容分类
+	},
+	onShow() {
+	},
+	onUnload() {
+		// 标记页面已卸载
+		this.isPageActive = false;
+		// 取消所有网络请求
+		if (this.requestTasks && this.requestTasks.length > 0) {
+			this.requestTasks.forEach(task => {
+				if (task && task.abort) {
+					task.abort();
+				}
+			});
+			this.requestTasks = [];
+		}
+	},
+	methods: {
+		getUserInfo() {
+			getUserInfo().then(
+				res => {
+					if (res.code == 200) {
+						if (res.user != null) {
+							this.userData = res.user;
+							uni.setStorageSync('userData', res.user)
+						} else {
+							this.utils.loginOut();
+						}
 
-	import Task from '@/components/task.vue'
-	import CartIcon from '@/components/cartIcon.vue'
-	import {
-		lifeList
-	} from '@/api/life.js'
-	// import {
-	// 	liveList
-	// } from '@/api/living.js'
-	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
-	export default {
-		mixins: [MescrollMixin],
-		components: {
-			Task,
-			CartIcon
-		},
-		data() {
-			return {
-				showTask: false,
-				hasShownSuspension: false,
-				status: '1',
-				orderStatus: [{
-						name: "推荐",
-						value: "1"
-					},
-					{
-						name: "今日主推",
-						value: "2"
-					},
-					{
-						name: "溯源相册",
-						value: "3"
-					},
-					{
-						name: "悦选菜谱",
-						value: "4"
-					}, {
-						name: "好物分享",
-						value: "5"
-					}
-				],
-				activeTab: 0,
-				// 状态栏的高度
-				statusBarHeight: uni.getStorageSync('menuInfo').statusBarHeight,
-				list: [],
-				searchKeyword: '',
-				downOption: {
-					offset: 80,
-					use: true,
-					auto: false
-				},
-				upOption: {
-					use: true,
-					auto: true,
-					page: {
-						num: 0,
-						size: 10
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: "请求失败",
+						});
 					}
 				},
-				mescroll: null,
-			}
-		},
-		onLoad() {
-			// if (!uni.getStorageSync("AppToken")) {
-			// 	uni.navigateTo({
-			// 		url: '/pages/auth/login'
-			// 	});
-			// }
+				rej => { }
+			);
 		},
-		onUnload() {
 
-		},
-		methods: {
-			goToShoppingCart() {
-				uni.navigateTo({
-					url: '/pages/shopping/cart'
-				});
-			},
-			onTask() {
-				this.showTask = true;
-				this.hasShownSuspension = true;
-			},
-			handleCloseTask() {
-				this.showTask = false;
-			},
-			// 顶部搜索
-			toSearch() {
-				// console.log("跳转")
-				// uni.navigateTo({
-				// 	url: '/pages/home/productSearch'
-				// })
-			},
-			// 搜索按钮点击事件
-			handleSearch() {
-				console.log("点击搜索按钮,搜索关键词:", this.searchKeyword);
-				if (this.mescroll) {
-					this.list = [];
-					this.mescroll.resetUpScroll();
+		lifeCategory() {
+			lifeCategory().then(res => {
+				if (!res) {
+					uni.showToast({
+						title: '获取生活号内容分类失败',
+						icon: 'none'
+					});
+					return;
+				}
+				if (res.code == 200) {
+					this.orderStatus = res.data || [];
+					// 默认选中第一个分类
+					if (this.orderStatus.length > 0) {
+						this.status = this.orderStatus[0].dictCode;
+						this.dictCode = this.orderStatus[0].dictCode;
+					}
+					// 获取分类成功后,手动触发列表加载
+					if (this.mescroll && this.dictCode) {
+						this.mescroll.resetUpScroll();
+					}
 				} else {
-					console.log("mescroll未初始化");
+					uni.showToast({
+						title: res.msg,
+						icon: 'none'
+					});
 				}
-			},
-			orderStatusChange(item) {
-				this.status = item.value
-				console.log(this.status)
-				if (this.mescroll) {
-					this.list = [];
-					this.mescroll.resetUpScroll();
+			});
+		},
+		goApplyExpert() {
+			applyExpertStatus().then(res => {
+				// 检查页面是否仍然活跃
+				if (!this.isPageActive) {
+					return;
 				}
-			},
+				if (res.code == 200) {
+					uni.showToast({
+						title: res.msg,
+						icon: 'success'
+					})
+					this.reviewStatus = res.data.reviewStatus;
+					if (this.reviewStatus == 0) {
+						uni.navigateTo({
+							url: '/pages_life/applyExpert'
+						})
+					} else if (this.reviewStatus == 1 || this.reviewStatus == 3) {
+						uni.navigateTo({
+							url: '/pages_life/reviewDetails?reviewStatus=' + this.reviewStatus
+						})
+					} else if (this.reviewStatus == 2) {
+						this.getUserInfo();
+						if (this.userData.expertId) {
+							uni.navigateTo({
+								url: '/pages_life/myExpert?expertId=' + this.userData.expertId
+							});
+						} else {
 
-			mescrollInit(mescroll) {
-				this.mescroll = mescroll;
-				console.log("mescroll初始化完成");
-			},
+						}
+					}
+				} else {
+					uni.showToast({
+						title: res.msg,
+						icon: 'none'
+					})
+				}
+			});
+		},
 
-			// 下拉刷新回调
-			downCallback(mescroll) {
+		goToShoppingCart() {
+			uni.navigateTo({
+				url: '/pages/shopping/cart'
+			});
+		},
+		// 顶部搜索
+		toSearch() {
+			// console.log("跳转")
+			// uni.navigateTo({
+			// 	url: '/pages/home/productSearch'
+			// })
+		},
+		// 搜索按钮点击事件
+		handleSearch() {
+			console.log("点击搜索按钮,搜索关键词:", this.searchKeyword);
+			if (this.mescroll) {
 				this.list = [];
-				mescroll.resetUpScroll();
-			},
+				this.mescroll.resetUpScroll();
+			} else {
+				console.log("mescroll未初始化");
+			}
+		},
+		orderStatusChange(item) {
+			this.status = item.dictCode
+			this.dictCode = item.dictCode
+			console.log(this.status)
+			if (this.mescroll) {
+				this.list = [];
+				this.mescroll.resetUpScroll();
+			}
+		},
 
-			// 上拉加载回调
-			upCallback(mescroll) {
-				const pageNum = mescroll.num;
-				const pageSize = mescroll.size;
-
-				let data = {
-					lifeResourceType: this.status,
-					search: this.searchKeyword,
-					page: pageNum,
-					pageSize: pageSize,
-					expertId: '', // 达人id,可根据需要添加
+		mescrollInit(mescroll) {
+			this.mescroll = mescroll;
+			console.log("mescroll初始化完成");
+		},
+
+		// 下拉刷新回调
+		downCallback(mescroll) {
+			this.list = [];
+			mescroll.resetUpScroll();
+		},
+
+		// 上拉加载回调
+		upCallback(mescroll) {
+			const pageNum = mescroll.num;
+			const pageSize = mescroll.size;
+
+			let data = {
+				lifeResourceType: this.status,
+				search: this.searchKeyword,
+				page: pageNum,
+				pageSize: pageSize,
+				expertId: '', // 达人id,可根据需要添加
+				dictCode: this.dictCode, // 字典编码,可根据需要添加
+			}
+			console.log("请求lifeList接口,参数:", data);
+			lifeList(data).then(res => {
+				if (!res) {
+					mescroll.endErr();
+					return;
 				}
-				console.log("请求lifeList接口,参数:", data);
-				lifeList(data).then(res => {
-					if (!res) {
-						mescroll.endErr();
-						return;
+				if (res.code == 200) {
+					let curPageData = Array.isArray(res.data.list) ? res.data.list : [];
+					let totalSize = Number(res.data.total) || 0;
+					if (pageNum === 1) {
+						this.list = [];
+						this.columns = Array.from({ length: this.colCount }, () => [])
+						this.colHeights = Array.from({ length: this.colCount }, () => 0)
 					}
-					if (res.code == 200) {
-						let curPageData = Array.isArray(res.data.list) ? res.data.list : [];
-						let totalSize = Number(res.data.total) || 0;
-						if (pageNum === 1) {
-							this.list = [];
-						}
-						this.list = this.list.concat(curPageData);
+					this.list = this.list.concat(curPageData);
+					this.$nextTick(() => {
+						this.buildWaterfall()
+					})
 
-						mescroll.endBySize(curPageData.length, totalSize);
-					} else {
-						mescroll.endErr();
-						uni.showToast({
-							title: res.msg,
-							icon: 'none'
-						});
-					}
-				}).catch(err => {
+					mescroll.endBySize(curPageData.length, totalSize);
+				} else {
 					mescroll.endErr();
-				});
-			},
+					uni.showToast({
+						title: res.msg,
+						icon: 'none'
+					});
+				}
+			}).catch(err => {
+				mescroll.endErr();
+			});
+		},
 
-			goLifeDetail(item) {
-				console.log("去生活号文章",item)
+		goLifeDetail(item) {
+			console.log("去生活号文章或者视频", item)
+			if (item.resourceType == 1) {
 				uni.navigateTo({
-					url: `/pages_shopping/live/article?resourceId=${item}`
+					url: `/pages_life/video?resourceId=${item.resourceId}&videoUrl=${encodeURIComponent(item.videoUrl || '')}&expertId=${item.expertId}&resourceId=${item.resourceId}`
 				});
+			} else {
+				uni.navigateTo({
+					url: `/pages_life/article?resourceId=${item.resourceId}`
+				});
+			}
+
+		},
+		onImgLoad(e) {
+			const detail = e && e.detail ? e.detail : {}
+			const w = Number(detail.width) || 0
+			const h = Number(detail.height) || 0
+			const dataset = (e && e.currentTarget && e.currentTarget.dataset) || {}
+			const id = dataset.id
+			if (!id) return
+			const idx = (this.list || []).findIndex(it => ('' + it.resourceId) === ('' + id))
+			if (idx === -1) return
+			const item = this.list[idx]
+			if (w > 0 && h > 0) {
+				this.$set(item, '_imgW', w)
+				this.$set(item, '_imgH', h)
+				this.buildWaterfall()
+			}
+		},
+		onImgError(e) {
+			const placeholder = 'https://cdn.his.cdwjyyh.com/images/img.png'
+			const dataset = (e && e.currentTarget && e.currentTarget.dataset) || {}
+			const id = dataset.id
+			for (let ci = 0; ci < this.columns.length; ci++) {
+				for (let ii = 0; ii < this.columns[ci].length; ii++) {
+					const it = this.columns[ci][ii]
+					const key = it.resourceId != null ? it.resourceId : ii
+					if (key === id) {
+						this.$set(this.columns[ci][ii], 'imgsUrl', placeholder)
+						return
+					}
+				}
+			}
+		},
+		buildWaterfall() {
+			// 确保 colCount 至少为 1
+			const count = Math.max(1, this.colCount || 2)
+			const cols = Array.from({ length: count }, () => [])
+			const heights = Array.from({ length: count }, () => 0)
+			const colWidthPx = this.getColWidthPx()
+			const gapPx = this.rpxToPx(this.colGap)
+			const fallbackH = 200
+				; (this.list || []).forEach((it) => {
+					const w = Number(it._imgW) || 0
+					const h = Number(it._imgH) || 0
+					const estH = (w > 0 && colWidthPx > 0) ? (h * colWidthPx / w) : fallbackH
+					const minIdx = heights.indexOf(Math.min(...heights))
+					if (minIdx >= 0 && cols[minIdx]) {
+						cols[minIdx].push(it)
+						heights[minIdx] += estH + gapPx
+					}
+				})
+			this.columns = cols
+			this.colHeights = heights
+		},
+		getColWidthPx() {
+			const sys = uni.getSystemInfoSync()
+			const totalPaddingPx = this.rpxToPx(24 * 2)
+			const gapPx = this.rpxToPx(this.colGap)
+			const count = Math.max(1, this.colCount || 2)
+			const width = sys.windowWidth - totalPaddingPx - gapPx * (count - 1)
+			return width / count
+		},
+		rpxToPx(rpx) {
+			const sys = uni.getSystemInfoSync()
+			return (sys.windowWidth / 750) * rpx
+		},
+
+		// 安全获取状态栏高度
+		getStatusBarHeight() {
+			try {
+				const menuInfo = uni.getStorageSync('menuInfo');
+				if (menuInfo && menuInfo.statusBarHeight) {
+					return menuInfo.statusBarHeight;
+				}
+			} catch (e) {
+				console.error('获取状态栏高度失败:', e);
 			}
+			return 0;
+		},
+		/**
+		 * 视频播放事件
+		 * 当视频开始播放时,暂停其他所有视频
+		 */
+		onVideoPlay(e) {
+			const dataset = (e && e.currentTarget && e.currentTarget.dataset) || {}
+			const id = dataset.id
+			const currentVideoId = 'video-' + id
+
+			console.log('视频开始播放:', currentVideoId)
+
+			// 遍历所有视频,暂停其他视频
+			this.columns.forEach((col, colIndex) => {
+				col.forEach((item, itemIndex) => {
+					if (item.resourceType === 1) {
+						const videoId = 'video-' + (item.resourceId || (colIndex * 100 + itemIndex))
+						if (videoId !== currentVideoId) {
+							const ctx = uni.createVideoContext(videoId, this)
+							if (ctx) {
+								ctx.pause()
+							}
+						}
+					}
+				})
+			})
+		},
+		/**
+		 * 视频暂停事件
+		 * 当视频暂停时记录日志
+		 */
+		onVideoPause(e) {
+			const dataset = (e && e.currentTarget && e.currentTarget.dataset) || {}
+			const id = dataset.id
+			const currentVideoId = 'video-' + id
+			console.log('视频暂停:', currentVideoId)
 		}
 	}
+}
 </script>
 
 <style lang="scss" scoped>
-	.content {
-		min-height: 100vh;
-		background: #F5F7FA;
-
-		.info {
-			width: 100%;
-			height: 600rpx;
-			position: relative;
-			z-index: 0;
-
-			.shop-block {
-				padding-left: 24rpx;
-				display: flex;
-				justify-content: space-between;
-				align-items: center;
-
-				.title-box {
-					position: relative;
-
-					.title {
-						font-weight: 600;
-						font-size: 40rpx;
-						color: #333333;
-					}
+.content {
+	min-height: 100vh;
+	background: #F5F7FA;
+	position: relative;
+
+	.info {
+		width: 100%;
+		height: 600rpx;
+		position: relative;
+		z-index: 0;
+
+		.shop-block {
+			padding-left: 24rpx;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+
+			.title-box {
+				position: relative;
 
-					.line {
-						position: absolute;
-						top: 24rpx;
-						left: 50%;
-						transform: translateX(-50%);
-						width: 68rpx;
-						height: 32rpx;
-						z-index: -1;
-					}
+				.title {
+					font-weight: 600;
+					font-size: 48rpx;
+					color: #333333;
 				}
 
-				.shop {
-					width: 64rpx;
-					height: 64rpx;
-					padding: 12rpx;
-					margin-right: 210rpx;
-					border-radius: 32rpx 32rpx 32rpx 32rpx;
-					border: 1rpx solid #E9E9E9;
-					box-sizing: border-box;
-					background: #FFFFFF;
-					position: relative;
-
-				}
-				.cart-badge {
+				.line {
 					position: absolute;
-					left: -8rpx;
-					top: -8rpx;
-					min-width: 32rpx;
-					min-height: 32rpx;
-					flex-shrink: 0;
-					text-align: center;
-					padding: 6rpx;
-					font-size: 16rpx;
-					box-sizing: border-box;
-					color: #fff;
-					background-color: #ff4757;
-					border-radius: 50%;
+					top: 24rpx;
+					left: 50%;
+					transform: translateX(-50%);
+					width: 68rpx;
+					height: 32rpx;
+					z-index: -1;
 				}
 			}
 
-			.search-cont {
+			.expert {
+				width: 64rpx;
+				height: 64rpx;
+				padding: 12rpx;
+				margin-right: 210rpx;
+				border-radius: 32rpx 32rpx 32rpx 32rpx;
+				border: 1rpx solid #E9E9E9;
 				box-sizing: border-box;
-				display: flex;
-				align-items: center;
-				height: 68rpx;
 				background: #FFFFFF;
-				border-radius: 36rpx;
-				padding: 0 24rpx;
-				margin: 24rpx 24rpx 32rpx;
-
-				.icon-search {
-					width: 24rpx;
-					height: 24rpx;
-					margin-right: 16rpx;
-				}
+				position: relative;
 
-				input {
-					height: 68rpx;
-					line-height: 68rpx;
-					flex: 1;
+				.icon {
+					width: 40rpx;
+					height: 40rpx;
 				}
 
-				.search-button {
-					width: 120rpx;
-					height: 60rpx;
-					border-radius: 30rpx 30rpx 30rpx 30rpx;
-					font-weight: 500;
-					font-size: 28rpx;
-					color: #FFFFFF;
-					text-align: center;
-					line-height: 60rpx;
-				}
 			}
 
-			.info-bg {
+			.cart-badge {
 				position: absolute;
-				z-index: -1;
-				width: 100%;
-				height: 100%;
+				left: -8rpx;
+				top: -8rpx;
+				min-width: 32rpx;
+				min-height: 32rpx;
+				flex-shrink: 0;
+				text-align: center;
+				padding: 6rpx;
+				font-size: 24rpx;
+				box-sizing: border-box;
+				color: #fff;
+				background-color: #ff4757;
+				border-radius: 50%;
 			}
+		}
 
-			.data-block {
-				padding: 0 20rpx;
-				margin-top: 30rpx;
-				display: flex;
-				justify-content: space-between;
-				align-items: center;
+		.search-cont {
+			box-sizing: border-box;
+			display: flex;
+			align-items: center;
+			height: 68rpx;
+			background: #FFFFFF;
+			border-radius: 36rpx;
+			padding: 0 24rpx;
+			margin: 24rpx 24rpx 32rpx;
+
+			.icon-search {
+				width: 24rpx;
+				height: 24rpx;
+				margin-right: 16rpx;
+			}
 
-				.number-block {
-					display: flex;
+			input {
+				height: 68rpx;
+				line-height: 68rpx;
+				flex: 1;
+			}
 
-					.item {
-						margin-right: 32rpx;
-						display: flex;
-						flex-direction: column;
-						align-items: center;
+			.search-button {
+				width: 120rpx;
+				height: 60rpx;
+				border-radius: 30rpx 30rpx 30rpx 30rpx;
+				font-weight: 500;
+				font-size: 36rpx;
+				color: #FFFFFF;
+				text-align: center;
+				line-height: 60rpx;
+			}
+		}
 
-						.number-item {
-							font-family: Roboto, Roboto;
-							font-weight: 600;
-							font-size: 36rpx;
-							color: #FFFFFF;
-						}
+		.info-bg {
+			position: absolute;
+			z-index: -1;
+			width: 100%;
+			height: 100%;
+		}
 
-						.txt-item {
-							margin-top: 6rpx;
-							font-size: 26rpx;
-							color: rgba(255, 255, 255, 0.7);
-						}
-					}
-				}
+		.data-block {
+			padding: 0 20rpx;
+			margin-top: 30rpx;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
 
-				.button {
-					width: 144rpx;
-					height: 56rpx;
-					background: #FFFFFF;
-					border-radius: 28rpx 28rpx 28rpx 28rpx;
+			.number-block {
+				display: flex;
+
+				.item {
+					margin-right: 32rpx;
 					display: flex;
+					flex-direction: column;
 					align-items: center;
-					justify-content: center;
-					font-size: 24rpx;
-					color: #02B176;
 
-					.icon {
-						width: 24rpx;
-						height: 24rpx;
-						margin-right: 4rpx;
+					.number-item {
+						font-family: Roboto, Roboto;
+						font-weight: 600;
+						font-size: 44rpx;
+						color: #FFFFFF;
+					}
+
+					.txt-item {
+						margin-top: 6rpx;
+						font-size: 34rpx;
+						color: rgba(255, 255, 255, 0.7);
 					}
 				}
 			}
 
-			.shop-icon {
+			.button {
+				width: 144rpx;
+				height: 56rpx;
+				background: #FFFFFF;
+				border-radius: 28rpx 28rpx 28rpx 28rpx;
 				display: flex;
-				justify-content: flex-end;
-				margin: 12rpx 210rpx 0 0;
+				align-items: center;
+				justify-content: center;
+				font-size: 32rpx;
+				color: #02B176;
+
+				.icon {
+					width: 24rpx;
+					height: 24rpx;
+					margin-right: 4rpx;
+				}
 			}
+		}
 
+		.shop-icon {
+			display: flex;
+			justify-content: flex-end;
+			margin: 12rpx 210rpx 0 0;
+		}
 
-			//达人视频
-			.vedio-block {
-				position: relative;
-				z-index: 1;
-				border-radius: 32rpx 32rpx 0rpx 0rpx;
-				padding: 0 0 26rpx;
 
-				// tab栏切换
-				.pub-tab-box {
+		//达人视频
+		.video-block {
+			position: relative;
+			z-index: 1;
+			border-radius: 32rpx 32rpx 0rpx 0rpx;
+			padding: 0 0 26rpx;
+
+			// tab栏切换
+			.pub-tab-box {
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				box-sizing: border-box;
+				width: 100%;
+				padding: 0 24rpx;
+				justify-content: space-between;
+
+				.tab-inner {
+					width: 100%;
+					height: 88rpx;
+					line-height: 88rpx;
 					display: flex;
 					align-items: center;
 					justify-content: space-between;
-					box-sizing: border-box;
-					width: 100%;
-					padding: 0 24rpx;
-					justify-content: space-between;
+					overflow-x: auto;
+					position: relative;
+				}
 
-					.tab-inner {
-						width: 100%;
-						height: 88rpx;
-						line-height: 88rpx;
-						display: flex;
-						align-items: center;
-						justify-content: space-between;
-						overflow-x: auto;
-						position: relative;
-					}
+				.item {
+					font-size: 38rpx;
+					white-space: nowrap;
+					line-height: 1;
+					font-family: PingFang SC, PingFang SC;
+					color: #4D4D4D;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					position: relative;
 
-					.item {
-						font-size: 30rpx;
-						white-space: nowrap;
-						line-height: 1;
-						font-family: PingFang SC, PingFang SC;
-						color: #4D4D4D;
-						display: flex;
-						align-items: center;
-						justify-content: center;
-						position: relative;
-
-						&.active {
-							font-weight: bold;
-							color: #333333;
-
-							&::after {
-								content: '';
-								position: absolute;
-								left: 50%;
-								bottom: -10rpx;
-								transform: translateX(-50%);
-								width: 100%;
-								height: 12rpx;
-								background: linear-gradient(90deg, rgba(56, 217, 125, 0.5) 0%, rgba(56, 217, 125, 0) 100%);
-								border-radius: 6rpx;
-							}
+					&.active {
+						font-weight: bold;
+						color: #333333;
+
+						&::after {
+							content: '';
+							position: absolute;
+							left: 50%;
+							bottom: -10rpx;
+							transform: translateX(-50%);
+							width: 100%;
+							height: 12rpx;
+							background: linear-gradient(90deg, rgba(56, 217, 125, 0.5) 0%, rgba(56, 217, 125, 0) 100%);
+							border-radius: 6rpx;
 						}
 					}
 				}
+			}
 
-				// 活动专区
-				.zone-box {
-					display: flex;
-					justify-content: space-between;
-					padding: 0 24rpx;
-					margin-bottom: 20rpx;
+			// 活动专区
+			.zone-box {
+				display: flex;
+				justify-content: space-between;
+				padding: 0 24rpx;
+				margin-bottom: 20rpx;
 
-					.zone-item {
-						padding: 24rpx;
-						box-sizing: border-box;
-						display: flex;
-						flex-direction: column;
-						width: 342rpx;
-						height: 136rpx;
-						background: linear-gradient(180deg, #FFF9F3 0%, #FFFFFF 40%, #FFFFFF 100%);
-						border-radius: 16rpx 16rpx 16rpx 16rpx;
-						border: 2rpx solid #FFFFFF;
-
-						.title-item {
-							margin-bottom: 20rpx;
-
-							.icon {
-								width: 32rpx;
-								height: 32rpx;
-								margin-right: 8rpx;
-							}
+				.zone-item {
+					padding: 24rpx;
+					box-sizing: border-box;
+					display: flex;
+					flex-direction: column;
+					width: 342rpx;
+					height: 136rpx;
+					background: linear-gradient(180deg, #FFF9F3 0%, #FFFFFF 40%, #FFFFFF 100%);
+					border-radius: 16rpx 16rpx 16rpx 16rpx;
+					border: 2rpx solid #FFFFFF;
+
+					.title-item {
+						margin-bottom: 20rpx;
+
+						.icon {
+							width: 32rpx;
+							height: 32rpx;
+							margin-right: 8rpx;
+						}
 
-							.title {
-								width: 120rpx;
-								height: 28rpx;
-							}
+						.title {
+							width: 120rpx;
+							height: 28rpx;
 						}
+					}
+
+					.entrance-item {
+						font-size: 32rpx;
+						color: #666666;
+						display: flex;
+						justify-content: space-between;
+						align-items: center;
 
-						.entrance-item {
-							font-size: 24rpx;
-							color: #666666;
+						.left {
 							display: flex;
-							justify-content: space-between;
-							align-items: center;
-
-							.left {
-								display: flex;
-
-								.bold {
-									font-family: Roboto Flex, Roboto Flex;
-									font-weight: 600;
-									font-size: 24rpx;
-									color: #D46C0D;
-									margin-right: 6rpx;
-									transform: skewX(-8deg);
-									/* 负值向左倾斜,正值向右倾斜 */
-									display: inline-block;
-									/* transform需要inline-block或block */
-								}
-							}
 
-							.icon {
-								width: 24rpx;
-								height: 24rpx;
+							.bold {
+								font-family: Roboto Flex, Roboto Flex;
+								font-weight: 600;
+								font-size: 32rpx;
+								color: #D46C0D;
+								margin-right: 6rpx;
+								transform: skewX(-8deg);
+								/* 负值向左倾斜,正值向右倾斜 */
+								display: inline-block;
+								/* transform需要inline-block或block */
 							}
 						}
+
+						.icon {
+							width: 24rpx;
+							height: 24rpx;
+						}
 					}
 				}
+			}
 
-				.list {
-					padding: 24rpx 24rpx;
+			.list {
+				padding: 24rpx 24rpx;
+
+				.wf-row {
 					display: flex;
 					justify-content: space-between;
-					flex-wrap: wrap;
+					align-items: flex-start;
+				}
 
-					.list-item {
-						width: 342rpx;
-						margin-bottom: 18rpx;
-						position: relative;
-						display: flex;
-						flex-direction: column;
+				.wf-col {
+					width: calc(50% - 11rpx);
+					display: flex;
+					flex-direction: column;
+				}
+			}
 
-						.img {
-							width: 100%;
-							border-radius: 16rpx 16rpx 0rpx 0rpx;
+			.list-item {
+				width: 100%;
+				margin-bottom: 18rpx;
+				position: relative;
+				display: flex;
+				flex-direction: column;
+			}
 
-						}
+			.list-item .img {
+				width: 100%;
+				border-radius: 16rpx 16rpx 0rpx 0rpx;
+			}
 
-						.video-icon {
-							width: 40rpx;
-							height: 40rpx;
-							position: absolute;
-							top: 20rpx;
-							right: 20rpx;
-						}
+			.list-item .video-icon {
+				width: 40rpx;
+				height: 40rpx;
+				position: absolute;
+				top: 20rpx;
+				right: 20rpx;
+			}
 
-						.suspension-icon {
-							width: 144rpx;
-							height: 144rpx;
-							position: absolute;
-							top: -14rpx;
-							right: 0rpx;
-						}
+			.list-item .info-block {
+				border-radius: 0rpx 0rpx 16rpx 16rpx;
+				padding: 12rpx 20rpx 20rpx;
+				box-sizing: border-box;
+				width: 100%;
+				background: #FFFFFF;
+				display: flex;
+				flex-direction: column;
+			}
 
-						.info-block {
-							border-radius: 0rpx 0rpx 16rpx 16rpx;
-							padding: 12rpx 20rpx 20rpx;
-							box-sizing: border-box;
-							width: 100%;
-							background: #FFFFFF;
-							display: flex;
-							flex-direction: column;
+			.list-item .info-block .title {
+				font-weight: 500;
+				font-size: 36rpx;
+				color: #333333;
+				margin-bottom: 20rpx;
+			}
 
-							.title {
-								font-weight: 500;
-								font-size: 28rpx;
-								color: #333333;
-								margin-bottom: 20rpx;
-							}
+			.list-item .info-block .item {
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+				margin-bottom: 20rpx;
+			}
 
-							.item {
-								display: flex;
-								justify-content: space-between;
-								align-items: center;
-								margin-bottom: 20rpx;
-
-								.flex {
-									display: flex;
-									align-items: center;
-									font-size: 22rpx;
-									color: #999999;
-								}
-
-								.icon {
-									width: 32rpx;
-									height: 32rpx;
-									margin-right: 4rpx;
-								}
-
-								.head {
-									width: 32rpx;
-									height: 32rpx;
-									border-radius: 50%;
-									margin-right: 8rpx;
-								}
-
-								.name {
-									color: #757575;
-								}
-							}
+			.list-item .info-block .item .flex {
+				display: flex;
+				align-items: center;
+				font-size: 30rpx;
+				color: #999999;
+			}
 
-							text {
-								white-space: nowrap;
-								overflow: hidden;
-								text-overflow: ellipsis;
-							}
+			.list-item .info-block .item .icon {
+				width: 36rpx;
+				height: 36rpx;
+				margin-right: 4rpx;
+			}
 
-							.card {
-
-								display: flex;
-								justify-content: space-between;
-								align-items: center;
-								background: #FFF5EB;
-								width: 302rpx;
-								height: 40rpx;
-								border-radius: 8rpx 8rpx 8rpx 8rpx;
-								border: 1rpx solid #F3E2D0;
-								padding: 8rpx;
-								box-sizing: border-box;
-
-								.card-item {
-									display: flex;
-									align-items: center;
-
-									.img {
-										width: 48rpx;
-										height: 24rpx;
-										margin-right: 8rpx;
-									}
-
-									.ranking {
-										font-size: 22rpx;
-										color: #D46C0D;
-									}
-								}
-
-								.go {
-									width: 16rpx;
-									height: 16rpx;
-								}
-							}
-						}
+			.list-item .info-block .item .head {
+				width: 36rpx;
+				height: 36rpx;
+				border-radius: 50%;
+				margin-right: 8rpx;
+			}
 
-					}
+			.list-item .info-block .item .name {
+				color: #757575;
+			}
 
-					.list-item:nth-child(2n) {
-						margin-right: 0;
-					}
-				}
+			.list-item .info-block text {
+				white-space: nowrap;
+				overflow: hidden;
+				text-overflow: ellipsis;
 			}
 
+			.list-item .info-block .card {
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+				background: #FFF5EB;
+				width: 302rpx;
+				height: 40rpx;
+				border-radius: 8rpx 8rpx 8rpx 8rpx;
+				border: 1rpx solid #F3E2D0;
+				padding: 8rpx;
+				box-sizing: border-box;
+			}
+
+			.list-item .info-block .card .card-item {
+				display: flex;
+				align-items: center;
+			}
+
+			.list-item .info-block .card .card-item .img {
+				width: 48rpx;
+				height: 24rpx;
+				margin-right: 8rpx;
+			}
+
+			.list-item .info-block .card .card-item .ranking {
+				font-size: 26rpx;
+				color: #D46C0D;
+			}
+
+			.list-item .info-block .card .go {
+				width: 16rpx;
+				height: 16rpx;
+			}
 		}
+
 	}
-</style>
+}
+</style>

+ 17 - 17
pages/live/list.vue

@@ -258,13 +258,13 @@
 						.number-item {
 							font-family: Roboto, Roboto;
 							font-weight: 600;
-							font-size: 36rpx;
+							font-size: 40rpx;
 							color: #FFFFFF;
 						}
 
 						.txt-item {
 							margin-top: 6rpx;
-							font-size: 26rpx;
+							font-size: 30rpx;
 							color: rgba(255, 255, 255, 0.7);
 						}
 					}
@@ -278,7 +278,7 @@
 					display: flex;
 					align-items: center;
 					justify-content: center;
-					font-size: 24rpx;
+					font-size: 28rpx;
 					color: #02B176;
 
 					.icon {
@@ -316,17 +316,17 @@
 						align-items: center;
 						justify-content: center;
 						position: relative;
-						font-size: 32rpx;
+						font-size: 36rpx;
 						color: #333333;
 						margin-right: 44rpx;
 
 						&.active {
 							font-weight: 600;
-							font-size: 40rpx;
+							font-size: 44rpx;
 						}
 
 						.tab-text {
-							font-size: 32rpx;
+							font-size: 36rpx;
 							transition: all 0.3s ease;
 						}
 
@@ -380,7 +380,7 @@
 								width: 40rpx;
 								height: 40rpx;
 								line-height: 40rpx;
-								font-size: 20rpx;
+								font-size: 24rpx;
 								color: #FFFFFF;
 								background: linear-gradient(136deg, #38D97D 0%, #02B176 100%);
 								display: flex;
@@ -396,7 +396,7 @@
 								height: 40rpx;
 								background: rgba(0, 0, 0, 0.6);
 								line-height: 40rpx;
-								font-size: 20rpx;
+								font-size: 24rpx;
 								color: #FFFFFF;
 							}
 						}
@@ -412,7 +412,7 @@
 							align-items: center;
 							justify-content: center;
 							border-radius: 6rpx 6rpx 6rpx 6rpx;
-							font-size: 20rpx;
+							font-size: 24rpx;
 							color: #FFFFFF;
 
 							.icon {
@@ -443,7 +443,7 @@
 
 							.title {
 								font-weight: 500;
-								font-size: 28rpx;
+								font-size: 32rpx;
 								color: #333333;
 								margin-bottom: 20rpx;
 							}
@@ -457,7 +457,7 @@
 								.flex {
 									display: flex;
 									align-items: center;
-									font-size: 22rpx;
+									font-size: 26rpx;
 									color: #999999;
 								}
 
@@ -522,7 +522,7 @@
 									width: 56rpx;
 									height: 40rpx;
 									line-height: 40rpx;
-									font-size: 20rpx;
+									font-size: 24rpx;
 									color: #FFFFFF;
 									background: #F4A007;
 								}
@@ -532,7 +532,7 @@
 									height: 40rpx;
 									background: rgba(0, 0, 0, 0.6);
 									line-height: 40rpx;
-									font-size: 20rpx;
+									font-size: 24rpx;
 									color: #FFFFFF;
 
 								}
@@ -552,14 +552,14 @@
 
 							.title {
 								font-weight: 500;
-								font-size: 32rpx;
+								font-size: 36rpx;
 								color: #333333;
 								margin-bottom: 12rpx;
 							}
 
 							.shop-item {
 								display: flex;
-								font-size: 24rpx;
+								font-size: 28rpx;
 								color: #666666;
 								align-items: center;
 								margin-bottom: 34rpx;
@@ -587,7 +587,7 @@
 								display: flex;
 								justify-content: space-between;
 								align-items: center;
-								font-size: 22rpx;
+								font-size: 26rpx;
 								color: #999999;
 
 								.flex {
@@ -607,7 +607,7 @@
 									background: linear-gradient(136deg, #38D97D 0%, #02B176 100%);
 									border-radius: 32rpx 32rpx 32rpx 32rpx;
 									font-weight: 500;
-									font-size: 28rpx;
+									font-size: 32rpx;
 									color: #FFFFFF;
 									text-align: center;
 									line-height: 64rpx;

+ 352 - 296
pages/shopping/cart.vue

@@ -2,53 +2,61 @@
 	<view class="content">
 		<!-- 商品列表 -->
 		<view class="goods-list">
-			<view class="item" v-for="(item,index) in carts" :key="index">
-				<label style="margin-right: 30upx;">
-					<checkbox :value="item.checked"  :checked="item.checked" @click="checkChange(item)" />
-				</label>
-				<image class="goods-img" :src="item.productAttrImage==null||item.productAttrImage==''?item.productImage:item.productAttrImage" mode="aspectFit"></image>
-				<view class="info-box">
-					<view>
-						<view class="title-box">
-							<view class="tag">{{utils.getDictLabelName("storeProductType",item.productType)}}</view>
-							<view class="title ellipsis">{{ item.productName }}</view>
-						</view>
-						<view class="intro ellipsis">{{item.productAttrName}}</view>
-					</view>
-					<view class="price-num">
-						<view class="price">
-							<text class="unit">¥</text>
-							<text class="text">{{item.price}}</text>
+			<view class="goods-item" v-for="(item, index) in carts" :key="index">
+				<view class="store-name" v-if="item._showStoreHeader">{{ item.storeName }}</view>
+				<view class="item">
+					<label style="margin-right: 30upx;">
+						<checkbox :value="item.checked" :checked="item.checked" @click="checkChange(item)" />
+					</label>
+					<image class="goods-img"
+						:src="item.productAttrImage == null || item.productAttrImage == '' ? item.productImage : item.productAttrImage"
+						mode="aspectFit"></image>
+						
+					<view class="info-box">
+						<view>
+							<view class="title-box">
+								<view class="tag">{{ utils.getDictLabelName("storeProductType", item.productType) }}</view>
+								<view class="title ellipsis">{{ item.productName }}</view>
+							</view>
+							<view class="intro ellipsis">{{ item.productAttrName }}</view>
 						</view>
-						<view class="num-box">
-							<view class="img-box" @click="delNum(item)">
-								<image v-if="item.cartNum <= 1" src="https://cdn.his.cdwjyyh.com/images/jian.png" mode=""></image>
-								<image v-else src="https://cdn.his.cdwjyyh.com/images/jian2.png" mode=""></image>
+						<view class="price-num">
+							<view class="price">
+								<text class="unit">¥</text>
+								<text class="text">{{ item.price }}</text>
 							</view>
-							<input  type="number" @change="changeNum($event,item)" :value="item.cartNum"   />
-							<view class="img-box" @click="addNum(item)">
-								<image src="https://cdn.his.cdwjyyh.com/images/add.png" mode=""></image>
+							<view class="num-box">
+								<view class="img-box" @click="delNum(item)">
+									<image v-if="item.cartNum <= 1" src="https://cdn.his.cdwjyyh.com/images/jian.png"
+										mode=""></image>
+									<image v-else src="https://cdn.his.cdwjyyh.com/images/jian2.png" mode=""></image>
+								</view>
+								<input type="number" @change="changeNum($event, item)" :value="item.cartNum" />
+								<view class="img-box" @click="addNum(item)">
+									<image src="https://cdn.his.cdwjyyh.com/images/add.png" mode=""></image>
+								</view>
 							</view>
 						</view>
 					</view>
 				</view>
 			</view>
 		</view>
-	 
+
 		<view v-if="carts.length == 0" class="no-data-box">
 			<image src="https://cdn.his.cdwjyyh.com/images/no_data.png" mode="aspectFit"></image>
+			<!-- <image src="https://cdn.his.cdwjyyh.com/images/first_order.png" mode="aspectFit"></image> -->
 			<view class="empty-title">暂无数据</view>
 		</view>
 		<!-- 猜你喜欢 -->
-		 
+
 		<view class="like-product">
-			<likeProduct  ref="product" />
+			<likeProduct ref="product" />
 		</view>
 		<!-- 底部按钮 -->
 		<view class="btn-foot">
 			<view class="left">
 				<label>
-					<checkbox  :checked="checkAll" @click="handleCheckAll()" />
+					<checkbox :checked="checkAll" @click="handleCheckAll()" />
 				</label>
 				<text class="text">全选</text>
 				<text class="text" @click="delCart()">删除</text>
@@ -58,217 +66,238 @@
 					<text class="label">合计:</text>
 					<view class="price">
 						<text class="unit">¥</text>
-						<text class="num">{{totalMoney.toFixed(2)}}</text>
+						<text class="num">{{ totalMoney.toFixed(2) }}</text>
 					</view>
 				</view>
 				<view class="btn" @click="submit">结算</view>
 			</view>
 		</view>
-		
+
 	</view>
 </template>
 
 <script>
-	import {getCarts,cartNum,delCart} from '@/api/product'
-	import likeProduct from '@/components/likeProduct.vue'
-	export default {
-		components: {
-			likeProduct
-		},	
-		data() {
-			return {
-				 
-				totalMoney:0.00,
-				carts:[],
-				checkAll:false,
-			}	
+import { getCarts, cartNum, delCart } from '@/api/product'
+import likeProduct from '@/components/likeProduct.vue'
+export default {
+	components: {
+		likeProduct
+	},
+	data() {
+		return {
+
+			totalMoney: 0.00,
+			carts: [],
+			checkAll: false,
+		}
+	},
+	onLoad() {
+		// this.getCarts();
+	},
+	onShow() {
+		if (uni.getStorageSync('AppToken')) {
+			this.getCarts();
+		}
+	},
+	onReachBottom() {
+		this.$refs.product.getGoodsProducts();
+	},
+	methods: {
+		delCart() {
+			var selectCarts = this.carts.filter(ele => ele.checked == true).map(ele => {
+				return ele.id
+			});
+			if (selectCarts.length == 0) {
+				uni.showToast({
+					icon: 'none',
+					title: "请选择商品删除",
+				});
+				return;
+			}
+			let data = { ids: selectCarts };
+			delCart(data).then(
+				res => {
+					if (res.code == 200) {
+						uni.showToast({
+							icon: 'success',
+							title: "操作成功",
+						});
+						this.getCarts()
+					} else {
+
+						uni.showToast({
+							icon: 'none',
+							title: res.msg,
+						});
+					}
+				},
+				rej => { }
+			);
+			console.log(selectCarts)
+		},
+		computedMoney() {
+			var money = 0;
+			var that = this;
+			this.carts.forEach((item, index, arr) => {
+				if (item.checked) {
+					money += item.price * item.cartNum;
+				}
+			})
+			console.log(money);
+			this.totalMoney = money;
+		},
+		handleCheckAll() {
+			this.checkAll = !this.checkAll;
+			var that = this;
+			this.carts.forEach((item, index, arr) => {
+				item.checked = that.checkAll;
+			})
+			this.computedMoney();
 		},
-		onLoad() {
-			// this.getCarts();
+		checkChange(item) {
+			item.checked = !item.checked;
+			this.computedMoney();
 		},
-		onShow() {
-			if(uni.getStorageSync('AppToken')){
-				this.getCarts();
+		changeNum(e, item) {
+			item.cartNum = e.detail.value.replace(/\D/g, '')
+			if (item.cartNum <= 1) {
+				uni.showToast({
+					title: "已经是底线啦!",
+					icon: "none",
+					duration: 2000
+				});
+				return;
+			}
+			if (item.cartNum < 1) {
+				item.cartNum = 1
+			}
+			if (item.cartNum >= item.stock) {
+				item.cartNum = item.stock;
 			}
+			this.changeCartNum(item)
 		},
-		onReachBottom() {
-			this.$refs.product.getGoodsProducts();
+		changeCartNum(item) {
+			let data = { number: item.cartNum, id: item.id };
+			cartNum(data).then(
+				res => {
+					if (res.code == 200) {
+						uni.showToast({
+							icon: 'none',
+							title: "操作成功",
+						});
+						this.computedMoney();
+
+					} else {
+
+						uni.showToast({
+							icon: 'none',
+							title: res.msg,
+						});
+					}
+				},
+				rej => { }
+			);
 		},
-		methods: {
-			delCart(){
-				var selectCarts=this.carts.filter(ele => ele.checked==true).map(ele => {
-				  return ele.id
+		getCarts() {
+			getCarts().then(
+				res => {
+					if (res.code == 200) {
+						const arr = Array.isArray(res.carts) ? res.carts : [];
+						const sorted = [...arr].sort((a, b) => {
+							const sa = String(a.storeId || '');
+							const sb = String(b.storeId || '');
+							if (sa === sb) return 0;
+							return sa < sb ? -1 : 1;
+						});
+						let lastStoreId = null;
+						this.carts = sorted.map(it => {
+							const storeId = it.storeId || null;
+							const header = storeId !== lastStoreId;
+							lastStoreId = storeId;
+							return { ...it, checked: false, _showStoreHeader: header };
+						});
+						this.computedMoney();
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: "请求失败",
+						});
+					}
+				},
+				rej => { }
+			);
+		},
+		// 购物车减法
+		delNum(item) {
+			if (item.cartNum <= 1) {
+				uni.showToast({
+					title: "已经是底线啦!",
+					icon: "none",
+					duration: 2000
 				});
-				if(selectCarts.length==0){
-					uni.showToast({
-						icon:'none',
-						title: "请选择商品删除",
-					});
-					return;
-				}
-				let data = {ids:selectCarts};
-				delCart(data).then(
-					res => {
-						if(res.code==200){
-							uni.showToast({
-								icon:'success',
-								title: "操作成功",
-							});
-							this.getCarts()
-						}else{
-							
-							uni.showToast({
-								icon:'none',
-								title: res.msg,
-							});
-						}
-					},
-					rej => {}
-				);
-				console.log(selectCarts)
-			},
-			computedMoney(){
-				var money=0;
-				var that=this;
-				this.carts.forEach((item,index,arr)=>{
-					 if(item.checked){
-						 money+=item.price*item.cartNum;
-					 }
-				})
-				console.log(money);
-				this.totalMoney=money;
-			},
-			handleCheckAll(){
-				this.checkAll=!this.checkAll;
-				var that=this;
-				this.carts.forEach((item,index,arr)=>{
-				     item.checked=that.checkAll;
-				})
-				this.computedMoney();
-			},
-			checkChange(item){
-				item.checked=!item.checked;
-				this.computedMoney();
-			},
-			changeNum(e,item) {
-				item.cartNum = e.detail.value.replace(/\D/g, '')
-				if (item.cartNum <= 1) {
-				  uni.showToast({
-				    title: "已经是底线啦!",
-				    icon: "none",
-				    duration: 2000
-				  });
-				  return;
-				}
-				if(item.cartNum < 1) {
-					item.cartNum = 1
-				}
-				if(item.cartNum>=item.stock){
-					item.cartNum=item.stock;
-				}
-				this.changeCartNum(item)
-			},
-			changeCartNum(item){
-				let data = {number:item.cartNum,id:item.id};
-				cartNum(data).then(
-					res => {
-						if(res.code==200){
-							uni.showToast({
-								icon:'none',
-								title: "操作成功",
-							});
-							this.computedMoney();
-							
-						}else{
-							
-							uni.showToast({
-								icon:'none',
-								title: res.msg,
-							});
-						}
-					},
-					rej => {}
-				);
-			},
-			getCarts(){
-				getCarts().then(
-					res => {
-						if(res.code==200){
-							 this.carts=res.carts;
-							 this.carts.forEach((item,index,arr)=>{
-							      item.checked=false;
-							 })
-							 this.computedMoney();
-						}else{
-							uni.showToast({
-								icon:'none',
-								title: "请求失败",
-							});
-						}
-					},
-					rej => {}
-				);
-			},
-			// 购物车减法
-			delNum(item) {
-				if (item.cartNum <= 1) {
-				  uni.showToast({
-				    title: "已经是底线啦!",
-				    icon: "none",
-				    duration: 2000
-				  });
-				  return;
-				}
-				item.cartNum --
-				if(item.cartNum < 1) {
-					item.cartNum = 1
-				}
-				 
-				this.changeCartNum(item)
-			},
-			// 购物车加法
-			addNum(item) {
-				console.log(item)
-				item.cartNum++
-				if(item.cartNum>=item.stock){
-					item.cartNum=item.stock;
-				}
-				this.changeCartNum(item)
-			},
-			// 结算
-			submit() {
-				var selectCarts=this.carts.filter(ele => ele.checked==true).map(ele => {
-				  return ele.id
+				return;
+			}
+			item.cartNum--
+			if (item.cartNum < 1) {
+				item.cartNum = 1
+			}
+
+			this.changeCartNum(item)
+		},
+		// 购物车加法
+		addNum(item) {
+			console.log(item)
+			item.cartNum++
+			if (item.cartNum >= item.stock) {
+				item.cartNum = item.stock;
+			}
+			this.changeCartNum(item)
+		},
+		// 结算
+		submit() {
+			var selectCarts = this.carts.filter(ele => ele.checked == true).map(ele => {
+				return ele.id
+			});
+			if (selectCarts.length == 0) {
+				uni.showToast({
+					icon: 'none',
+					title: "请选择商品",
 				});
-				if(selectCarts.length==0){
-					uni.showToast({
-						icon:'none',
-						title: "请选择商品",
-					});
-					return;
-				}
-				uni.navigateTo({
-					url: '/pages_shopping/shopping/confirmOrder?type=cart&cartIds='+selectCarts.toString()
-				})
-			},
-			showProduct(item){
-				uni.navigateTo({
-					url: '/pages_shopping/shopping/productDetails?productId='+item.productId
-				})
-			},
-		}
+				return;
+			}
+			uni.navigateTo({
+				url: '/pages_shopping/shopping/confirmOrder?type=cart&cartIds=' + selectCarts.toString()
+			})
+		},
+		showProduct(item) {
+			uni.navigateTo({
+				url: '/pages_shopping/shopping/productDetails?productId=' + item.productId
+			})
+		},
 	}
+}
 </script>
 
 <style lang="scss">
-	page {
-		height: 100%;
-	}
-	.content{
-		height: 100%;
-		padding: 20upx;
-		.goods-list{
-			.item{
+page {
+	height: 100%;
+}
+
+.content {
+	height: 100%;
+	padding: 20upx;
+
+	.goods-list {
+		.goods-item {
+			.store-name {
+				font-size: 28upx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #111111;
+				margin : 20rpx 0;
+			}
+
+			.item {
 				box-sizing: border-box;
 				height: 221upx;
 				background: #FFFFFF;
@@ -277,27 +306,32 @@
 				padding: 30upx;
 				display: flex;
 				align-items: center;
-				&:last-child{
+
+				&:last-child {
 					margin-bottom: 0;
 				}
-				.goods-img{
+
+				.goods-img {
 					width: 160upx;
 					height: 160upx;
 					background: #FFFFFF;
 					margin-right: 30upx;
 					flex-shrink: 0;
 				}
-				.info-box{
+
+				.info-box {
 					height: 160upx;
 					display: flex;
 					flex-direction: column;
 					justify-content: space-between;
 					width: calc(100% - 255upx);
-					.title-box{
+
+					.title-box {
 						width: 100%;
 						display: flex;
 						align-items: center;
-						.tag{
+
+						.tag {
 							padding: 0 6upx;
 							height: 30upx;
 							line-height: 30upx;
@@ -305,12 +339,13 @@
 							font-family: PingFang SC;
 							font-weight: bold;
 							color: #FFFFFF;
-							background: linear-gradient(90deg, #2BC7B9 0%, #77cbf3 100%);
+							background: linear-gradient(90deg, #02B176 0%, #77cbf3 100%);
 							border-radius: 4upx;
 							margin-right: 10upx;
 							flex-shrink: 0;
 						}
-						.title{
+
+						.title {
 							flex: 1;
 							font-size: 28upx;
 							font-family: PingFang SC;
@@ -319,7 +354,8 @@
 							line-height: 1;
 						}
 					}
-					.intro{
+
+					.intro {
 						font-size: 24upx;
 						font-family: PingFang SC;
 						font-weight: 500;
@@ -327,14 +363,17 @@
 						margin-top: 22upx;
 						line-height: 1;
 					}
-					.price-num{
+
+					.price-num {
 						display: flex;
 						align-items: center;
 						justify-content: space-between;
-						.price{
+
+						.price {
 							display: flex;
 							align-items: flex-end;
-							.unit{
+
+							.unit {
 								font-size: 24upx;
 								font-family: PingFang SC;
 								font-weight: 500;
@@ -342,7 +381,8 @@
 								line-height: 1.2;
 								margin-right: 4upx;
 							}
-							.text{
+
+							.text {
 								font-size: 32upx;
 								font-family: PingFang SC;
 								font-weight: bold;
@@ -350,10 +390,12 @@
 								line-height: 1;
 							}
 						}
-						.num-box{
+
+						.num-box {
 							display: flex;
 							align-items: center;
-							.img-box{
+
+							.img-box {
 								width: 60upx;
 								height: 60upx;
 								// border-radius: 4upx;
@@ -361,12 +403,14 @@
 								display: flex;
 								align-items: center;
 								justify-content: center;
-								image{
+
+								image {
 									width: 25rpx;
 									height: 25rpx;
 								}
 							}
-							input{
+
+							input {
 								width: 60upx;
 								height: 60upx;
 								line-height: 60upx;
@@ -385,81 +429,93 @@
 				}
 			}
 		}
-		.like-product{
-			padding-bottom: 120upx;
+	}
+
+	.like-product {
+		padding-bottom: 120upx;
+	}
+
+	.btn-foot {
+		box-sizing: border-box;
+		width: 100%;
+		height: 121upx;
+		background: #FFFFFF;
+		padding: 16upx 30upx 16upx 60upx;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		position: fixed;
+		left: 0;
+		bottom: 0rpx;
+		z-index: 99;
+
+		.left {
+			display: flex;
+			align-items: center;
+
+			.text {
+				margin-left: 14upx;
+				font-size: 28upx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #666666;
+				line-height: 1;
+			}
 		}
-		.btn-foot{
-			box-sizing: border-box;
-			width: 100%;
-			height: 121upx;
-			background: #FFFFFF;
-			padding: 16upx 30upx 16upx 60upx;
+
+		.right {
 			display: flex;
 			align-items: center;
-			justify-content: space-between;
-			position: fixed;
-			left: 0;
-			bottom: 0rpx;
-			z-index: 99;
-			.left{
+
+			.total {
 				display: flex;
-				align-items: center;
-				.text{
-					margin-left: 14upx;
-					font-size: 28upx;
+				align-items: flex-end;
+				margin-right: 36upx;
+
+				.label {
+					font-size: 26upx;
 					font-family: PingFang SC;
 					font-weight: 500;
-					color: #666666;
-					line-height: 1;
+					color: #999999;
+					line-height: 1.5;
 				}
-			}
-			.right{
-				display: flex;
-				align-items: center;
-				.total{
+
+				.price {
 					display: flex;
 					align-items: flex-end;
-					margin-right: 36upx;
-					.label{
-						font-size: 26upx;
+
+					.unit {
+						font-size: 32upx;
 						font-family: PingFang SC;
-						font-weight: 500;
-						color: #999999;
-						line-height: 1.5;
+						font-weight: bold;
+						color: #FF6633;
+						line-height: 1.2;
+						margin-right: 10upx;
 					}
-					.price{
-						display: flex;
-						align-items: flex-end;
-						.unit{
-							font-size: 32upx;
-							font-family: PingFang SC;
-							font-weight: bold;
-							color: #FF6633;
-							line-height: 1.2;
-							margin-right: 10upx;
-						}
-						.num{
-							font-size: 30upx;
-							font-family: PingFang SC;
-							font-weight: bold;
-							color: #FF6633;
-							line-height: 1;
-						}
+
+					.num {
+						font-size: 30upx;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #FF6633;
+						line-height: 1;
 					}
 				}
-				.btn{
-					width: 200upx;
-					height: 88upx;
-					line-height: 88upx;
-					text-align: center;
-					font-size: 30upx;
-					font-family: PingFang SC;
-					font-weight: bold;
-					color: #FFFFFF;
-					background: #2BC7B9;
-					border-radius: 44upx;
-				}
+			}
+
+			.btn {
+				width: 200upx;
+				height: 88upx;
+				line-height: 88upx;
+				text-align: center;
+				font-size: 30upx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #FFFFFF;
+				background: linear-gradient(136deg, #38D97D 0%, #02B176 100%);
+				border-radius: 44upx;
 			}
 		}
 	}
+}
 </style>

+ 273 - 132
pages/shopping/index.vue

@@ -12,7 +12,7 @@
 					<view class="inner">
 						<image class="icon-search" src="https://cdn.his.cdwjyyh.com/images/search.png" mode=""></image>
 						<input type="text" disabled confirm-type="搜索" @click="toSearch" placeholder="搜索您喜欢的商品"
-							placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
+							placeholder-style="font-size:32rpx;color:#BBBBBB;font-family: PingFang SC;" />
 					</view>
 				</view>
 				<!-- 栏目 -->
@@ -20,13 +20,13 @@
 					<scroll-view class="column-list-scroll" :class="isExpand?'column-list2':''" scroll-x="true"
 						:scroll-with-animation="true" :show-scrollbar="false" :enable-flex="true">
 						<view class="column-list" :class="isExpand?'column-list2':''">
-							<view class="item" v-for="(item,index) in columnList" :key="index" @click="selectColumn(item)">
-								<view class="img-item" :class="index===activeIndex?'active':''">
-									<image class="img" :src="item.img" mode=""></image>
-								</view>
-								<view class="name" :class="index===activeIndex?'active':''">{{item.name}}</view>
+						<view class="item" v-for="(item,index) in firstLevelCates" :key="index" @click="selectColumn(item.pid,item.cateId,index)">
+							<view class="img-item" :class="index===activeIndex?'active':''">
+								<image class="img" :src="item.pic" mode=""></image>
 							</view>
+							<view class="name" :class="index===activeIndex?'active':''">{{item.cateName}}</view>
 						</view>
+					</view>
 					</scroll-view>
 					<view :class="isExpand?'expand2':'expand'" @click="expand">
 						<view>{{isExpand ? '收起' : '展开'}}</view>
@@ -36,22 +36,23 @@
 					</view>
 				</view>
 			</view>
-			<view :style="{height: divHeight}" class="medic-box">
+			<!-- :style="{height: divHeight}"  -->
+			<view class="medic-box">
 				<view class="cate-list">
-					<view v-for="(item,index) in cates" :key="index" :class="cateSelect == item.cateId?'item active':'item'"
-						@click="choseCate(item)">
-						<image class="line" v-if="cateSelect == item.cateId" src="https://cdn.his.cdwjyyh.com/images/select_hover_line.png"
-							mode=""></image>
-						{{item.cateName }}
+						<view v-for="(item,index) in secondLevelCates" :key="index" :class="selectedSecondLevelCate == item.cateId?'item active':'item'"
+							@click="choseCate(item.cateId)">
+							<image class="line" v-if="selectedSecondLevelCate == item.cateId" src="https://cdn.his.cdwjyyh.com/images/select_hover_line.png"
+								mode=""></image>
+							{{item.cateName }}
+						</view>
 					</view>
-				</view>
 				<view class="medic">
 					<view class="tab-inner">
 						<view v-for="(item,index) in selectList" :key="index"
 							:class="selectIndex == item.value?'item active':'item'" @click="onSelect(item)">
 							<view class="text">
 								<text>{{ item.name }}</text>
-								<image v-if="item.value==2" class="tab-bg" :src="`/static/images/shaixuan_moren${number}.png`" mode="" >
+								<image v-if="item.value==2" class="tab-bg" :src="`https://cdn.his.cdwjyyh.com/images/shaixuan_moren${number}.png`" mode="" >
 								</image>
 							</view>
 						</view>
@@ -62,10 +63,10 @@
 							<image @click="showChange(1)" v-if="showType==2" src="https://cdn.his.cdwjyyh.com/images/demonstrations2.png"
 								mode="">
 							</image>
-							<view class="filter">
+							<!-- <view class="filter">
 								<text>筛选</text>
 								<image class="ml8" @click="toFilter" src="https://cdn.his.cdwjyyh.com/images/filter_icon.png" mode=""/>
-							</view>
+							</view> -->
 						</view>
 					</view>
 					<view class="medic-list">
@@ -76,7 +77,7 @@
 							<view class="info-box">
 								<view class="title ellipsis2">{{item.title||''}}</view>
 								<view class="intro ellipsis">{{item.intro||''}}</view>
-								<view class="sale">已售 {{item.sales||''}} | 惊艳度{{item.amazingDegree||''}}%</view>
+								<view class="sale">已售 {{item.sales||'0'}} | 好评率{{item.amazingDegree||'0'}}%</view>
 								<view class="lable-group">
 									<view class="lable-item" v-if="item.otPrice && item.price && item.otPrice > item.price">
 										{{Math.round((1 - item.price / item.otPrice) * 10 * 10) / 10}}折</view>
@@ -92,18 +93,18 @@
 										</image>
 									</view>
 								</view>
-								<view class="card">
-									<view class="card-item">
-										<image class="img"
-											src="https://fs-1319721001.cos.ap-chongqing.myqcloud.com/images/ranking_icon.png">
+								<view class="card" v-if="getMinRanking(item)" @click.stop="goToRankingPage(item)">
+										<view class="card-item">
+											<image class="img"
+												src="https://fs-1319721001.cos.ap-chongqing.myqcloud.com/images/ranking_icon.png">
+											</image>
+											<text class="ranking">{{ getRankingName(item) }}</text>
+											<text class="bold">TOP.{{ getMinRanking(item) }}</text>
+										</view>
+										<image class="go"
+											src="https://fs-1319721001.cos.ap-chongqing.myqcloud.com/images/jb_arrow_right_icon.png">
 										</image>
-										<text class="ranking">健康新品热销榜</text>
-										<text class="bold">TOP.2</text>
 									</view>
-									<image class="go"
-										src="https://fs-1319721001.cos.ap-chongqing.myqcloud.com/images/jb_arrow_right_icon.png">
-									</image>
-								</view>
 							</view>
 						</view>
 					</view>
@@ -124,29 +125,31 @@
 	</view>
 </template>
 <script>
+import {
+		getProductAllCate,//获取商品分类索引
+		getProductCateByPid,//根据父级id获取子分类
+	} from '@/api/index.js'
 	import {
 		productWaterfall, // 商品瀑布流
 		getProductValues, // 获取商品规格列表
 	} from '@/api/index'
-	import {
-		getProductCate
-	} from '@/api/product'
-	import {
-		getAdv
-	} from '@/api/adv'
+	
 	import {
 		getMyProductCate,
 		getCartCount
 	} from '@/api/index'
 	import ProductSpecPopup from '@/components/product-spec-popup/product-spec-popup.vue'
+import { COS } from 'cos-wx-sdk-v5';
 	export default {
 			components: {
 				ProductSpecPopup
 			},
 			data() {
 				return {
-					number:1,
+					number: 1,
 					selectIndex: 0,
+					orderDir: 'none',
+					originalList: [],
 					selectList: [{
 						name: '综合',
 						value: 0
@@ -156,40 +159,45 @@
 					}, {
 						name: '价格',
 						value: 2
-					}, {
-						name: '惊艳度',
+					}
+					, {
+						name: '好评',
 						value: 3
-					}],
+					}
+				],
 					isExpand: false, //是否展开
 					activeIndex: 0,
 					columnList: [],
 					productList: [],
 					divHeight: '0px',
-					allCates: [],
-					cates: [],
-					subCates: [],
+					allCates: [], // 所有分类数据
+					firstLevelCates: [], // 一级分类
+					secondLevelCates: [], // 二级分类
 					// 状态栏的高度
-					statusBarHeight: uni.getStorageSync('menuInfo').statusBarHeight,
-					// 选中药品分类
-					cateSelect: 0,
+					statusBarHeight: this.getStatusBarHeight(),
+					// 选中的分类
+					selectedFirstLevelCate: null, // 选中的一级分类
+					selectedSecondLevelCate: null, // 选中的二级分类
 					// 轮播图
 					advs: [],
 					// 商品规格选择弹窗
-				specVisible: false,
-				product: null,
-				isBuyMode: false,
-				productValueSelect: {
-					image: '',
-					price: 0
-				},
-				productSpecs: [],
-				selectedSpec: null,
-				// 瀑布流相关变量
-				loading: false,
-				refreshing: false,
-				page: 1,
-				pageSize: 10,
-				hasMore: true,
+					specVisible: false,
+					product: null,
+					isBuyMode: false,
+					productValueSelect: {
+						image: '',
+						price: 0
+					},
+					productSpecs: [],
+					selectedSpec: null,
+					// 瀑布流相关变量
+					loading: false,
+					refreshing: false,
+					page: 1,
+					pageSize: 10,
+					hasMore: true,
+					// 分类ID
+					cateId: null,
 					};
 			},
 		onLoad() {
@@ -198,9 +206,9 @@
 					//小程序的原生菜单中显示分享按钮,才能够让发送给朋友与分享到朋友圈两个按钮可以点击
 					menus: ["shareAppMessage", "shareTimeline"] //不设置默认发送给朋友
 				})
-				this.getProductCate();
+				this.getProductAllCate();
 			this.fetchMyProductCate();
-			this.getProductWaterfall(); // 商品
+			// this.getProductWaterfall(); // 商品
 		},
 		onShow() {
 			var that = this;
@@ -212,9 +220,43 @@
 					that.divHeight = "calc(100% - " + data.height + "px)"
 				}).exec()
 			}, 500);
-			this.getAdv();
 		},
 		methods: {
+			getProductCateByPid(cateId) {
+				getProductCateByPid({pid: cateId}).then(
+					res => {
+						if (res.code == 200) {
+							this.secondLevelCates = res.data || [];
+							if (this.secondLevelCates.length > 0) {
+								// 选中第一个二级分类
+								this.selectedSecondLevelCate = this.secondLevelCates[0].cateId;
+								this.cateId = this.secondLevelCates[0].cateId;
+								// 获取商品列表
+								console.log("cateId在这里",this.cateId)
+								this.getProductWaterfall();
+							} else {
+								// 没有二级分类时,使用一级分类ID
+								this.selectedSecondLevelCate = null;
+								this.cateId = cateId;
+								// 获取商品列表
+								this.getProductWaterfall();
+							}
+						} else {
+							uni.showToast({
+								icon: 'none',
+								title: "获取子分类失败",
+							});
+						}
+					},
+					rej => {
+						console.error('获取子分类失败:', rej);
+						uni.showToast({
+							icon: 'none',
+							title: "网络错误,请稍后重试",
+						});
+					}
+				);
+			},
 			// 商品
 			getProductWaterfall(isLoadMore = false) {
 				console.log("开始获取瀑布流商品数据");
@@ -223,7 +265,8 @@
 				this.loading = true;
 				let data = {
 					page: isLoadMore ? this.page + 1 : 1,
-					pageSize: this.pageSize
+					pageSize: this.pageSize,
+					cateId: this.cateId
 				};
 
 				console.log("调用productWaterfall API,参数:", data);
@@ -251,19 +294,23 @@
 								// 加载更多
 								if (productData.length > 0) {
 									this.productList = [...this.productList, ...productData];
+									this.originalList = [...this.originalList, ...productData];
 									console.log("加载更多商品后,productList长度:", this.productList.length);
 									this.page += 1;
 									this.hasMore = productData.length === this.pageSize;
+									this.applySort();
 								} else {
 									this.hasMore = false;
 								}
 							} else {
 								// 首次加载或刷新
 								this.productList = productData;
+								this.originalList = productData.slice();
 								console.log("加载瀑布流商品列表:", productData);
 
 								this.page = 1;
 								this.hasMore = productData.length === this.pageSize;
+								this.applySort();
 							}
 						} else {
 							console.log("获取商品列表失败:", res.msg);
@@ -298,7 +345,14 @@
 				this.selectIndex = item.value
 				if(item.value==2){
 					this.toggleNumber()
+					// number: 1-无序, 2-升序, 3-降序
+					this.orderDir = this.number===2 ? 'asc' : (this.number===3 ? 'desc' : 'none')
+				}else{
+					// 非价格排序时重置价格箭头与方向
+					this.number = 1
+					this.orderDir = 'none'
 				}
+				this.applySort()
 			},
 			toggleNumber() {
 				if(this.number <3){
@@ -307,6 +361,25 @@
 					this.number = 1
 				}
 			},
+			applySort(){
+				let list = this.originalList.slice()
+				if(this.selectIndex===1){
+					// 销量降序
+					list.sort((a,b)=> (Number(b.sales||0) - Number(a.sales||0)))
+				}else if(this.selectIndex===2){
+					// 价格排序
+					if(this.orderDir==='asc'){
+						list.sort((a,b)=> (Number(a.price||0) - Number(b.price||0)))
+					}else if(this.orderDir==='desc'){
+						list.sort((a,b)=> (Number(b.price||0) - Number(a.price||0)))
+					}
+					// 'none' 使用原始顺序
+				}else if(this.selectIndex===3){
+					// 好评率降序
+					list.sort((a,b)=> (Number(b.amazingDegree||0) - Number(a.amazingDegree||0)))
+				}
+				this.productList = list
+			},
 			showChange(type) {
 				this.showType = type
 			},
@@ -321,10 +394,16 @@
 			expand() {
 				this.isExpand = !this.isExpand;
 			},
-			// 选择栏目
-			selectColumn(item) {
-				console.log("打印item", item.value);
-				this.activeIndex = item.value;
+			// 选择一级分类
+			selectColumn(pid, cateId, index) {
+				this.activeIndex = index;
+				// 查找并选中对应的一级分类
+				const selectedCate = this.firstLevelCates.find(cate => cate.cateId === cateId);
+				if (selectedCate) {
+					this.selectedFirstLevelCate = selectedCate;
+					// 获取该一级分类的子分类
+					this.getProductCateByPid(cateId);
+				}
 			},
 
 			// divHeight() {
@@ -354,31 +433,20 @@
 				}
 
 			},
-			getAdv() {
-				let data = {
-					advType: 2
-				};
-				getAdv(data).then(
-					res => {
-						if (res.code == 200) {
-							this.advs = res.data;
-						}
-					},
-					rej => {}
-				);
-			},
-			getProductCate() {
+			
+			getProductAllCate() {
 				let data = {};
-				getProductCate(data).then(
+				getProductAllCate(data).then(
 					res => {
 						if (res.code == 200) {
-							this.allCates = res.data;
-							this.cates = this.allCates.filter(function(item) {
-								return item.pid == 0
-							});
-							if (this.cates != null && this.cates.length > 0) {
-								this.cateSelect = this.cates[0].cateId;
-								this.getSubCate()
+							this.allCates = res.data || [];
+							// 过滤出一级分类
+							this.firstLevelCates = this.allCates.filter(item => item.pid == 0);
+							if (this.firstLevelCates.length > 0) {
+								// 选中第一个一级分类
+								this.selectedFirstLevelCate = this.firstLevelCates[0];
+								// 获取该一级分类的子分类
+								this.getProductCateByPid(this.firstLevelCates[0].cateId);
 							}
 						} else {
 							uni.showToast({
@@ -387,28 +455,28 @@
 							});
 						}
 					},
-					rej => {}
+					rej => {
+						console.error('获取分类索引失败:', rej);
+					}
 				);
 			},
-			// 药品分类选择
-			choseCate(item) {
-				this.cateSelect = item.cateId;
-				this.getSubCate()
-
+			// 选择二级分类
+			choseCate(cateId) {
+				console.log("二级分类选择", cateId);
+				if (cateId) {
+					// 选中对应的二级分类
+					this.selectedSecondLevelCate = cateId;
+					this.cateId = cateId;
+				} else if (this.secondLevelCates.length > 0) {
+					// 没有选择二级分类时,使用第一个二级分类
+					console.log("没有选择二级分类,使用第一个二级分类");
+					this.selectedSecondLevelCate = this.secondLevelCates[0].cateId;
+					this.cateId = this.secondLevelCates[0].cateId;
+				}
+				// 获取商品列表
+				this.getProductWaterfall();
 			},
-			getSubCate() {
-				var that = this;
-				this.subCates = this.allCates.filter(function(item) {
-					// let subList = that.allCates.filter(child => {
-					// 	//返回每一项的子级数组
-					// 	return child.pid === item.cateId
-					// });
-					// subList.length > 0 ? item.children = subList : [];
-					return item.pid == that.cateSelect
-				});
 
-				console.log(this.subCates);
-			},
 			// 查看药品详情
 			showProductList(item) {
 				uni.navigateTo({
@@ -494,11 +562,76 @@
 					}
 				);
 			},
-			// 滚动加载更多
+			// 加载更多
 			loadMore() {
 				if (!this.loading && this.hasMore) {
 					this.getProductWaterfall(true);
 				}
+			},
+			// 安全获取状态栏高度
+			getStatusBarHeight() {
+				try {
+					const menuInfo = uni.getStorageSync('menuInfo');
+					if (menuInfo && menuInfo.statusBarHeight) {
+						return menuInfo.statusBarHeight;
+					}
+				} catch (e) {
+					console.error('获取状态栏高度失败:', e);
+				}
+				return 0;
+			},
+			// 计算商品的最小榜单项值
+			getMinRanking(item) {
+				if (!item) return null
+				const rankings = []
+				if (item.toDayHotSort) rankings.push({ value: item.toDayHotSort, type: 'toDayHotSort' })
+				if (item.newProductSalesSort) rankings.push({ value: item.newProductSalesSort, type: 'newProductSalesSort' })
+				if (item.productSalesSort) rankings.push({ value: item.productSalesSort, type: 'productSalesSort' })
+				if (rankings.length === 0) return null
+				// 按值排序,取最小的
+				rankings.sort((a, b) => a.value - b.value)
+				return rankings[0].value
+			},
+			// 根据最小榜单项值返回对应的榜单名称
+			getRankingName(item) {
+				if (!item) return ''
+				const rankings = []
+				if (item.toDayHotSort) rankings.push({ value: item.toDayHotSort, type: 'toDayHotSort', name: '今日热卖榜' })
+				if (item.newProductSalesSort) rankings.push({ value: item.newProductSalesSort, type: 'newProductSalesSort', name: '新品热卖榜' })
+				if (item.productSalesSort) rankings.push({ value: item.productSalesSort, type: 'productSalesSort', name: '销量榜' })
+				if (rankings.length === 0) return ''
+				// 按值排序,取最小的
+				rankings.sort((a, b) => a.value - b.value)
+				return rankings[0].name
+			},
+			// 获取当前显示的排序类型
+			getCurrentRankingType(item) {
+				if (!item) return ''
+				const rankings = []
+				if (item.toDayHotSort) rankings.push({ value: item.toDayHotSort, type: 'toDayHotSort' })
+				if (item.newProductSalesSort) rankings.push({ value: item.newProductSalesSort, type: 'newProductSalesSort' })
+				if (item.productSalesSort) rankings.push({ value: item.productSalesSort, type: 'productSalesSort' })
+				if (rankings.length === 0) return ''
+				// 按值排序,取最小的
+				rankings.sort((a, b) => a.value - b.value)
+				return rankings[0].type
+			},
+			// 跳转到对应榜单页面
+			goToRankingPage(item) {
+				const rankingType = this.getCurrentRankingType(item)
+				switch (rankingType) {
+					case 'newProductSalesSort':
+						uni.navigateTo({ url: '/pages_shopping/live/newRanking' })
+						break
+					case 'productSalesSort':
+						uni.navigateTo({ url: '/pages_shopping/live/salesRanking' })
+						break
+					case 'toDayHotSort':
+						uni.navigateTo({ url: '/pages_shopping/live/todayRanking' })
+						break
+					default:
+						break
+				}
 			}
 		}
 	}
@@ -506,12 +639,12 @@
 
 <style lang="scss">
 	page {
-		height: 100%;
+		height: 100vh;
 		background-color: #fff;
 	}
 
 	.content {
-		height: 100%;
+		height: 100vh;
 		display: flex;
 		flex-direction: column;
 
@@ -533,7 +666,7 @@
 			.top-title {
 				height: 88rpx;
 				line-height: 88rpx;
-				font-size: 42rpx;
+				font-size: 46rpx;
 				font-family: Source Han Sans CN;
 				font-weight: bold;
 				color: #222222;
@@ -634,7 +767,7 @@
 							.name {
 								width: 128rpx;
 								height: 44rpx;
-								font-size: 24rpx;
+								font-size: 32rpx;
 								color: #333333;
 								text-align: center;
 								line-height: 44rpx;
@@ -656,7 +789,7 @@
 
 				.expand {
 					margin: 0 20rpx;
-					font-size: 24rpx;
+					font-size: 32rpx;
 					color: #000000;
 					width: 24rpx;
 					display: flex;
@@ -690,6 +823,7 @@
 
 		.medic-box {
 			display: flex;
+			flex: 1;
 
 			.cate-list {
 				box-sizing: border-box;
@@ -714,7 +848,7 @@
 					height: 112rpx;
 					line-height: 112rpx;
 					padding-left: 28rpx;
-					font-size: 28rpx;
+					font-size:36rpx;
 					font-family: PingFang SC;
 					color: #666666;
 					position: relative;
@@ -731,26 +865,31 @@
 				box-sizing: border-box;
 				width: calc(100% - 200rpx);
 				height: 100%;
+				display: flex;
+				flex-direction: column;
+				overflow: hidden;
 
 				.tab-inner {
+					display: flex;
+					justify-content: space-between;
 					height: 88upx;
 					line-height: 88upx;
 					display: flex;
+					flex-shrink: 0;
 					overflow-x: auto;
 					align-items: center;
-					font-size: 26rpx;
+					font-size: 30rpx;
 					color: #666666;
 					margin-left: 24rpx;
 
 					.item {
-						font-size: 24rpx;
 						white-space: nowrap;
 						line-height: 1;
 						font-family: PingFang SC;
 						background: #F5F7FA;
 						border-radius: 8rpx 8rpx 8rpx 8rpx;
-						padding: 12rpx 12rpx 10rpx;
-						margin-right: 20upx;
+						padding: 12rpx 24rpx ;
+						// margin-right: 20upx;
 						display: flex;
 						align-items: center;
 						justify-content: center;
@@ -800,6 +939,10 @@
 				}
 
 				.medic-list {
+					height: calc(100% - 88upx);
+					overflow-y: auto; // 固定高度,内部滚动
+					-webkit-overflow-scrolling: touch; // 提升移动端滚动体验
+					padding-right: 8rpx; // 预留滚动条空间
 					.item {
 						box-sizing: border-box;
 						min-height: 296upx;
@@ -807,7 +950,7 @@
 						border: 4upx solid #FFFFFF;
 						border-radius: 16upx;
 						margin-bottom: 18upx;
-						padding: 24rpx;
+						padding: 20rpx;
 						display: flex;
 
 						.img-box {
@@ -829,7 +972,7 @@
 							min-width: 0;
 
 							.title {
-								font-size: 28upx;
+								font-size: 32upx;
 								font-family: PingFang SC;
 								font-weight: 500;
 								color: #333333;
@@ -838,13 +981,13 @@
 
 							.intro {
 								font-weight: 400;
-								font-size: 22rpx;
+								font-size: 30rpx;
 								color: #D46C0D;
 								margin-bottom: 8upx;
 							}
 
 							.sale {
-								font-size: 21rpx;
+								font-size: 28rpx;
 								color: #999999;
 							}
 
@@ -854,11 +997,10 @@
 
 								.lable-item {
 									margin-right: 8rpx;
-									height: 30rpx;
 									padding: 0 8rpx;
 									border-radius: 4rpx 4rpx 4rpx 4rpx;
 									border: 1rpx solid #FFA599;
-									font-size: 21rpx;
+									font-size: 28rpx;
 									color: #FF4B33;
 								}
 							}
@@ -871,16 +1013,15 @@
 
 								.price {
 									font-weight: 600;
-									font-size: 26rpx;
+									font-size:34rpx;
 									color: #FA341E;
-									font-size: 26rpx;
 
 									.unit {
-										font-size: 20upx;
+										font-size: 24upx;
 									}
 
 									.bold {
-										font-size: 36upx;
+										font-size: 40upx;
 									}
 								}
 
@@ -897,17 +1038,17 @@
 									display: flex;
 									align-items: center;
 									.img {
-										width: 32rpx;
-										height: 32rpx;
+										width: 28rpx;
+										height: 28rpx;
 										margin-right: 8rpx;
 									}
 									.ranking {
-										font-size: 20rpx;
+										font-size: 22rpx;
 										color: #999;
 										margin-right: 8rpx;
 									}
 									.bold {
-										font-size: 20rpx;
+										font-size: 24rpx;
 										font-weight: 600;
 										color: #ff6600;
 									}
@@ -924,4 +1065,4 @@
 		}
 
 	}
-</style>
+</style>

+ 945 - 810
pages/user/index.vue

@@ -3,40 +3,43 @@
 		<view class="top-cont">
 			<view class="top-inner">
 				<!-- 这里是状态栏 -->
-				<view class="status_bar" :style="{height: statusBarHeight}"></view>
+				<view class="status_bar" :style="{ height: statusBarHeight }"></view>
 				<view class="top-block">
 					<view class="qscode-block">
 						<view class="qscode">
-							<image class="w40 h40" src="https://cdn.his.cdwjyyh.com/images/qscode_icon.png"></image>
+							<!-- <image class="w40 h40" src="https://cdn.his.cdwjyyh.com/images/qscode_icon.png"></image> -->
 						</view>
 					</view>
 					<view class="user-info">
 
 						<view class="left" @click="openPersonInfo()">
 							<view class="head-img">
-								<image :src="user.avatar==null?'https://cdn.his.cdwjyyh.com/images/detault_head.jpg':user.avatar"
+								<image
+									:src="user.avatar == null ? 'https://cdn.his.cdwjyyh.com/images/detault_head.jpg' : user.avatar"
 									mode="aspectFill"></image>
 							</view>
 							<view class="name-phone">
 								<view class="name">
-									<text>{{user.nickname}}</text>
+									<text>{{ user.nickname }}</text>
 									<image class="w48 h48" src="https://cdn.his.cdwjyyh.com/images/right1.png"></image>
 								</view>
-								<view class="user-page">
+								<view class="user-page" @click.stop="toMyexpert">
 									<text>个人主页</text>
 									<image class="w32 h32" src="https://cdn.his.cdwjyyh.com/images/right1.png"></image>
 								</view>
 
-								<view class="lable">
+								<!-- <view class="lable">
 									<view class="lable-item">
-										<image class="w32 h32 mr8" src="https://cdn.his.cdwjyyh.com/images/lv_icon.png"></image>
+										<image class="w32 h32 mr8" src="https://cdn.his.cdwjyyh.com/images/lv_icon.png">
+										</image>
 										<text>会员</text>
 									</view>
 									<view class="lable-item yellow">
-										<image class="w32 h32 mr8" src="https://cdn.his.cdwjyyh.com/images/intelligent_icon.png"></image>
+										<image class="w32 h32 mr8"
+											src="https://cdn.his.cdwjyyh.com/images/intelligent_icon.png"></image>
 										<text>LV.2</text>
 									</view>
-								</view>
+								</view> -->
 							</view>
 						</view>
 						<view class="right">
@@ -45,7 +48,7 @@
 								<image src="https://cdn.his.cdwjyyh.com/images/icon-set.png" mode=""></image>
 							</view>
 						</uni-badge> -->
-							<uni-badge size="small" :text="msgNum" absolute="rightTop" type="error">
+							<uni-badge size="small" :text="noticeNum" absolute="rightTop" type="error">
 								<view class="msg-box" @click="navgetTo('/pages_user/user/message')">
 									<image src="https://cdn.his.cdwjyyh.com/images/icon-msg.png" mode=""></image>
 								</view>
@@ -54,9 +57,21 @@
 					</view>
 					<!-- 芳华币数量及券 -->
 					<view class="data">
-						<view class="data-item" v-for="(item,index) in dataList" :key="index">
-							<view class="number">{{item.num}}</view>
-							<view class="txt">{{item.title}}</view>
+						<view class="data-item">
+							<view class="number">{{ countList.fhCredit || 0 }}</view>
+							<view class="txt">芳华币</view>
+						</view>
+						<view class="data-item" @click="navgetTo('/pages_shopping/shopping/myCoupon?status=0')">
+							<view class="number">{{ countList.couponPending || 0 }}</view>
+							<view class="txt">待用券</view>
+						</view>
+						<view class="data-item" @click="navgetTo('/pages_shopping/shopping/myCoupon?status=1')">
+							<view class="number">{{ countList.couponUsed || 0 }}</view>
+							<view class="txt">已用券</view>
+						</view>
+						<view class="data-item" @click="navgetTo('/pages_shopping/shopping/myCoupon?status=2')">
+							<view class="number">{{ countList.couponExpired || 0 }}</view>
+							<view class="txt">过期券</view>
 						</view>
 					</view>
 				</view>
@@ -121,7 +136,7 @@
 					</view>
 				</view>
 				<!-- 芳华币签到 -->
-				<view class="coin-card">
+				<!-- <view class="coin-card">
 					<image class="bg" src="https://cdn.his.cdwjyyh.com/images/sign_in_bg.png"></image>
 					<view class="container">
 						<view class="coin-txt">
@@ -129,106 +144,119 @@
 							<view class="right">我的芳华币:{{userIntegral}}</view>
 						</view>
 						<view class="item">
-							<!-- <view class="progress"></view> -->
-
 							<view class="progress">
 								<view class="line"></view>
 								<view v-for="(item,index) in sign" :key="index"
 									:class="signNum >= item.sort?'img-item active':'img-item'">
 									<view class="top">
-
 										<image v-if="signNum >= item.sort" src="https://cdn.his.cdwjyyh.com/images/right_org.png" mode="">
 										</image>
-										<!-- 未签到图标 -->
 										<image v-else src="https://cdn.his.cdwjyyh.com/images/right_org_ling.png" mode=""></image>
 									</view>
-
-
 									<text class="text">{{ item.day }}</text>
 								</view>
 							</view>
 							<image class="button" mode="widthFix" src="https://cdn.his.cdwjyyh.com/images/check_in.png" @click="doSign"></image>
 						</view>
 					</view>
-				</view>
+				</view> -->
 				<view class="content">
-			<!-- 常用工具 -->
-			<view class="used-tools">
-				<view class="title">我的应用</view>
-				<view class="tools-list">
-					<view class="item" @click="navgetTo('/pages_shopping/shopping/myCoupon')">
-						<image src="https://cdn.his.cdwjyyh.com/images/my_coupon.png" mode=""></image>
-						<text class="text">领券中心</text>
-					</view>
-					<view class="item" @click="navgetTo('/pages_user/user/address')">
-						<image src="https://cdn.his.cdwjyyh.com/images/my_location.png" mode=""></image>
-						<text class="text">地址管理</text>
-					</view>
-					<view class="item" @click="navgetTo('/pages_user/user/storeProductRelation')">
-						<image src="https://cdn.his.cdwjyyh.com/images/my_coin.png" mode=""></image>
-						<text class="text">芳华币商城</text>
-					</view>
-					<view class="item" @click="navgetTo('/pages_user/user/message')">
-						<image src="https://cdn.his.cdwjyyh.com/images/my_service.png" mode=""></image>
-						<text class="text">客服中心</text>
-					</view>
-					<view class="item no-marin-bottom" @click="navgetTo('/pages_user/user/personInfo')">
-						<image src="https://cdn.his.cdwjyyh.com/images/member_center.png" mode=""></image>
-						<text class="text">会员中心</text>
-					</view>
-					<view class="item no-marin-bottom" @click="openH5(2)">
-						<image src="https://cdn.his.cdwjyyh.com/images/my_advice.png" mode=""></image>
-						<text class="text">投诉建议</text>
-					</view>
-					<view class="item no-marin-bottom" @click="navgetTo('/pages_user/user/storeProductRelation')">
-						<image src="https://cdn.his.cdwjyyh.com/images/my_invoice.png" mode=""></image>
-						<text class="text">开票历史</text>
+					<!-- 常用工具 -->
+					<view class="used-tools">
+						<view class="title">我的应用</view>
+						<view class="tools-list">
+							<view class="item" @click="navgetTo('/pages_shopping/shopping/myCoupon')">
+								<image src="https://cdn.his.cdwjyyh.com/images/my_coupon.png" mode=""></image>
+								<text class="text">领券中心</text>
+							</view>
+							<view class="item" @click="navgetTo('/pages_user/user/address')">
+								<image src="https://cdn.his.cdwjyyh.com/images/my_location.png" mode=""></image>
+								<text class="text">地址管理</text>
+							</view>
+							<!-- <view class="item" @click="navgetTo('/pages_user/user/storeProductRelation')">
+								<image src="https://cdn.his.cdwjyyh.com/images/my_coin.png" mode=""></image>
+								<text class="text">芳华币商城</text>
+							</view> -->
+							<view class="item">
+								<image src="https://cdn.his.cdwjyyh.com/images/my_service.png" mode=""></image>
+								<text class="text">客服中心</text>
+								<button class="contact-btn" open-type="contact"></button>
+							</view>
+							<!-- <view class="item no-marin-bottom" @click="navgetTo('/pages_user/user/personInfo')">
+								<image src="https://cdn.his.cdwjyyh.com/images/member_center.png" mode=""></image>
+								<text class="text">会员中心</text>
+							</view> -->
+							<view class="item no-marin-bottom" @click="navgetTo('/pages_shopping/live/complaintList')">
+								<image src="https://cdn.his.cdwjyyh.com/images/my_advice.png" mode=""></image>
+								<text class="text">投诉建议</text>
+							</view>
+							<!-- <view class="item no-marin-bottom"
+								@click="navgetTo('/pages_user/user/storeProductRelation')">
+								<image src="https://cdn.his.cdwjyyh.com/images/my_invoice.png" mode=""></image>
+								<text class="text">开票历史</text>
+							</view> -->
+						</view>
 					</view>
-				</view>
-			</view>
 
-			<view class="used-tools">
-				<view class="title">我的视频</view>
-				<view class="tools-list">
-					<view class="item" @click="navgetTo('/pages_user/user/storeProductRelation')">
-						<image src="https://cdn.his.cdwjyyh.com/images/my_star.png" mode=""></image>
-						<text class="text">我的收藏</text>
-					</view>
-					<view class="item" @click="navgetTo('/pages_user/user/message')">
-						<image src="https://cdn.his.cdwjyyh.com/images/my_comment.png" mode=""></image>
-						<text class="text">我的评论</text>
-					</view>
-					<view class="item no-marin-bottom" @click="navgetTo('/pages_shopping/live/order')">
+					<view class="used-tools">
+						<view class="title">我的视频</view>
+						<view class="tools-list">
+							<view class="item" @click="navgetTo('/pages_user/user/saveComment?tabIndex=1')">
+								<image src="https://cdn.his.cdwjyyh.com/images/my_star.png" mode=""></image>
+								<text class="text">我的收藏</text>
+							</view>
+							<view class="item" @click="navgetTo('/pages_user/user/saveComment?tabIndex=0')">
+								<image src="https://cdn.his.cdwjyyh.com/images/my_comment.png" mode=""></image>
+								<text class="text">我的评论</text>
+							</view>
+							<!-- <view class="item no-marin-bottom" @click="navgetTo('/pages_shopping/live/order')">
 						<image src="https://cdn.his.cdwjyyh.com/images/my_live.png" mode=""></image>
 						<text class="text">预约的直播</text>
+					</view> -->
+						</view>
 					</view>
-				</view>
-			</view>
-
-			<view class="used-tools">
-				<view class="title">管理应用</view>
-				<view class="tools-list">
-					<view class="item" @click="navgetTo('/pages_user/user/userTuiAdd')">
-						<image src="https://cdn.his.cdwjyyh.com/images/my_store.png" mode=""></image>
-						<text class="text">申请入驻</text>
-					</view>
-					<view class="item" @click="navgetTo('/pages_shopping/live/applyExpert')">
-						<image src="/static/images/intelligent.png" mode=""></image>
-						<text class="text">申请达人</text>
-					</view>
-					<view class="item" @click="openH5(1)">
-						<image src="https://cdn.his.cdwjyyh.com/images/my_about.png" mode=""></image>
-						<text class="text">关于我们</text>
+					<view class="used-tools">
+						<view class="title">常用工具</view>
+						<view class="tools-list">
+							<view class="item" @click="openH5(2)">
+								<image src="https://cdn.his.cdwjyyh.com/images/book1.png" mode=""></image>
+								<text class="text">隐私保护</text>
+							</view>
+							<view class="item" @click="openH5(1)">
+								<image src="https://cdn.his.cdwjyyh.com/images/book2.png" mode=""></image>
+								<text class="text">用户协议</text>
+							</view>
+							<view class="item" @click="navgetTo('/pages/home/cert')">
+								<image src="https://cdn.his.cdwjyyh.com/images/book3.png" mode=""></image>
+								<text class="text">资质证书</text>
+							</view>
+						</view>
 					</view>
-					<view class="item no-marin-bottom" @click="toManager()">
-						<image src="https://cdn.his.cdwjyyh.com/images/my_login.png" mode=""></image>
-						<text class="text">客服登录</text>
+
+					<view class="used-tools">
+						<view class="title">管理应用</view>
+						<view class="tools-list">
+							<!-- <view class="item" @click="navgetTo('/pages_user/user/userTuiAdd')">
+								<image src="https://cdn.his.cdwjyyh.com/images/my_store.png" mode=""></image>
+								<text class="text">申请入驻</text>
+							</view> -->
+							<view class="item" @click="toApplyExpert">
+								<image src="https://cdn.his.cdwjyyh.com/images/intelligent.png" mode=""></image>
+								<text class="text">申请达人</text>
+							</view>
+							<view class="item" @click="openH5(1)">
+								<image src="https://cdn.his.cdwjyyh.com/images/my_about.png" mode=""></image>
+								<text class="text">关于我们</text>
+							</view>
+							<view class="item no-marin-bottom" @click="toManager()">
+								<image src="https://cdn.his.cdwjyyh.com/images/my_login.png" mode=""></image>
+								<text class="text">客服登录</text>
+							</view>
+						</view>
 					</view>
-				</view>
-			</view>
 					<!-- 退出登录按钮 -->
 				</view>
-				<view style="padding-bottom: 20rpx;" v-if="user.phone!=''">
+				<view style="padding-bottom: 20rpx;" v-if="user.phone != ''">
 					<view @tap="loginOUt" class="log-out x-c">退出登录</view>
 				</view>
 				<!-- <view class="banner">
@@ -241,895 +269,1002 @@
 			</view>
 
 		</view>
+		<!-- <SuspensionTask /> -->
 
 	</view>
 </template>
 
 <script>
-import{getMyEnableCouponList} from '@/api/user'
-	import {
-		getOrderCount
-	} from '@/api/storeOrder'
-	import {
-		getUserInfo,
-		sign,
-		getUserSign,
-		getIntegral
-	} from '@/api/user'
-	import likeProduct from '@/components/likeProduct.vue'
-	export default {
-		components: {
-			likeProduct
-		},
-		data() {
-			return {
-				signNum: 0,
-				sign: [{
-					day: 1
-				}, {
-					day: 2
-				}, {
-					day: 3
-				}, {
-					day: 4
-				}],
-				signStatus: false, // 今日是否已签到
-				continuousDays: 0, // 连续签到天数
-				userIntegral: 0, // 用户积分
-
-				dataList: [{
-					num: '55',
-					title: '芳华币'
-				}, {
-					num: '55',
-					title: '待用券'
-				}, {
-					num: '55',
-					title: '已用券'
-				}, {
-					num: '55',
-					title: '过期券'
-				}],
-				count0: 0,
-				count1: 0,
-				count2: 0,
-				afterSalesCount: 0,
-				user: {
-					isPromoter: 0,
-					isWeixinAuth: 0,
-					phone: "",
-					nickname: "请登录",
-					avatarUrl: "https://cdn.his.cdwjyyh.com/images/detault_head.png"
-				},
-				// 状态栏的高度
-				statusBarHeight: uni.getStorageSync('menuInfo').statusBarHeight,
-				// 消息数量
-				msgNum: 0,
-
-
-			};
-		},
-		onLoad() {
-			this.getMyEnableCouponList();//获取用户优惠券列表
-			console.log("onload")
-		},
-		onShow() {
-			console.log("onshow")
-			var that = this;
-			if (uni.getStorageSync('AppToken')) {
-				that.getUserInfo();
-				that.getOrderCount();
-				that.getUserSignRecord();
-				that.getIntegralInfo();
-			}
-			// this.utils.isLogin().then(res => {
-			// 	that.getUserInfo();
-			// 	that.getOrderCount();
-			// })
-
-		},
-		onReachBottom() {
-			console.log("onReachBottom")
-			this.$refs.product.getGoodsProducts();
-		},
-		methods: {
-			getMyEnableCouponList(){
-let data={
-	couponType:1,
-	packageCateId:0,
-	useMinPrice:0,
-	userId:uni.getStorageSync('userData').userId
-}
+import { applyExpertStatus } from '@/api/life.js';
+import { getMyCouponCount } from '@/api/user'
+import { getMyEnableCouponList } from '@/api/user'
+import { getNoticeList } from '@/api/user'
+import {
+	getOrderCount
+} from '@/api/storeOrder'
+import {
+	getUserInfo,
+	sign,
+	getUserSign,
+	getIntegral
+} from '@/api/user'
+import likeProduct from '@/components/likeProduct.vue'
+export default {
+	components: {
+		likeProduct
+	},
+	data() {
+		return {
+			countList: [],//用户芳华币优惠券数量
+			signNum: 0,
+			sign: [{
+				day: 1
+			}, {
+				day: 2
+			}, {
+				day: 3
+			}, {
+				day: 4
+			}],
+			signStatus: false, // 今日是否已签到
+			continuousDays: 0, // 连续签到天数
+			userIntegral: 0, // 用户积分
+
+			count0: 0,
+			count1: 0,
+			count2: 0,
+			afterSalesCount: 0,
+			user: {
+				isPromoter: 0,
+				isWeixinAuth: 0,
+				phone: "",
+				nickname: "请登录",
+				avatarUrl: "https://cdn.his.cdwjyyh.com/images/detault_head.png"
 			},
-			toManagerCourse() {
-				if (uni.getStorageSync('ManageToken')) {
-					uni.navigateTo({
-						url: '/pages_manage/index'
-					})
-				} else {
-					uni.navigateTo({
-						url: '/pages_manage/login'
+			// 状态栏的高度
+			statusBarHeight: uni.getStorageSync('menuInfo').statusBarHeight,
+			// 消息数量
+			msgNum: 0,
+			reviewStatus: 0, // 审核状态 0未申请 1待审核 2审核通过 3审核未成功
+			noticeNum: 0,
+		};
+	},
+	onLoad() {
+		this.getMyEnableCouponList();//获取用户优惠券列表
+		console.log("onload")
+		if (uni.getStorageSync('AppToken')) {
+			this.getMyCouponCount();//获取用户芳华币优惠券数量
+		}
+	},
+	onShow() {
+		console.log("onshow")
+		var that = this;
+		if (uni.getStorageSync('AppToken')) {
+			that.getUserInfo();
+			that.getOrderCount();
+			that.getUserSignRecord();
+			that.getIntegralInfo();
+		}
+		// this.utils.isLogin().then(res => {
+		// 	that.getUserInfo();
+		// 	that.getOrderCount();
+		// })
+		this.getNoticeList();//获取用户消息列表
+	},
+	onReachBottom() {
+		console.log("onReachBottom")
+		this.$refs.product.getGoodsProducts();
+	},
+	methods: {
+		getNoticeList(){
+				getNoticeList().then(res => {
+				if(res.code == 200){
+					this.noticeNum = res.rows.length;
+				}
+				else{
+					uni.showToast({
+						title: res.msg,
+						icon: 'none'
 					})
 				}
-
+				})
 			},
-			// loginOUt(){
-			// 	this.utils.loginOut();
-			// 	this.getUserInfo();
-			// 	// uni.switchTab({
-			// 	// 	url:'/pages/home/index'
-			// 	// })
-			// },
-			loginOUt() {
-				const that = this;
-				uni.showModal({
-					title: '提示',
-					content: '确定要退出登录吗?',
-					success: function(res) {
-						if (res.confirm) {
-							// 先重置用户数据为默认值
-							that.user = {
-								isPromoter: 0,
-								isWeixinAuth: 0,
-								phone: "",
-								nickname: "请登录",
-								avatarUrl: "https://cdn.his.cdwjyyh.com/images/detault_head.png",
-								avatar: null // 确保头像也被重置
-							};
-
-							// 清空本地存储的用户数据
-							uni.removeStorageSync('userData');
-
-							// 执行退出登录逻辑
-							that.utils.loginOut();
-
-							// 重置订单数量
-							that.count0 = 0;
-							that.count1 = 0;
-							that.count2 = 0;
-							that.afterSalesCount = 0;
-							that.msgNum = 0;
-
-							// 可选:提示退出成功
-							uni.showToast({
-								title: '已退出登录',
-								icon: 'success'
+		toMyexpert(){
+			applyExpertStatus().then(res => {
+				if (res.code == 200) {
+					uni.showToast({
+						title: res.msg,
+						icon: 'success'
+					})
+					this.reviewStatus = res.data.reviewStatus;
+					if (this.reviewStatus == 0) {
+						uni.navigateTo({
+							url: '/pages_life/applyExpert'
+						})
+					} else if (this.reviewStatus == 1 || this.reviewStatus == 3) {
+						uni.navigateTo({
+							url: '/pages_life/reviewDetails?reviewStatus=' + this.reviewStatus
+						})
+					} else if (this.reviewStatus == 2) {
+						this.getUserInfo();
+						if (this.user.expertId) {
+							uni.navigateTo({
+								url: '/pages_life/myExpert?expertId=' + this.user.expertId
 							});
+						} else {
 
-							// 可选:如果需要刷新页面数据,可以重新调用 onShow 中的方法
-							// 但由于我们已经手动重置了数据,这一步不是必需的
 						}
 					}
-				});
-			},
-			openPersonInfo() {
-				this.utils.isLogin().then(res => {
-					uni.navigateTo({
-						url: "/pages_user/user/personInfo"
+				} else {
+					uni.showToast({
+						title: res.msg,
+						icon: 'none'
+					})
+				}
+			})
+			
+		},
+		// 获取用户芳华币优惠券数量
+		getMyCouponCount() {
+			getMyCouponCount().then(res => {
+				if (res.code == 200) {
+					this.countList = res.data;
+					console.log("用户芳华币优惠券数量:", res.data)
+				} else {
+					uni.showToast({
+						title: res.msg,
+						icon: 'none'
+					})
+				}
+			})
+		},
+		applyExpertStatus() {
+			applyExpertStatus().then(res => {
+				if (res.code == 200) {
+					uni.showToast({
+						title: res.msg,
+						icon: 'success'
+					})
+					this.reviewStatus = res.data.reviewStatus;
+				} else {
+					uni.showToast({
+						title: res.msg,
+						icon: 'none'
 					})
+				}
+			})
+		},
+		toApplyExpert() {
+			this.applyExpertStatus();
+			if(this.user.expertId&&this.reviewStatus==2){
+				uni.showToast({
+					title: '您已是达人,无需申请',
+					icon: 'none'
+				})
+			}else if (this.reviewStatus == 0) {
+				uni.navigateTo({
+					url: '/pages_life/applyExpert'
 				})
+			} else {
+				uni.navigateTo({
+					url: '/pages_life/reviewDetails?reviewStatus=' + this.reviewStatus
+				})
+			}
+		},
+		getMyEnableCouponList() {
+			let data = {
+				couponType: 1,
+				packageCateId: 0,
+				useMinPrice: 0,
+				userId: uni.getStorageSync('userData').userId
+			}
+		},
+		toManagerCourse() {
+			if (uni.getStorageSync('ManageToken')) {
+				uni.navigateTo({
+					url: '/pages_manage/index'
+				})
+			} else {
+				uni.navigateTo({
+					url: '/pages_manage/login'
+				})
+			}
 
-			},
-			callService() {
-				uni.makePhoneCall({
-					phoneNumber: "4000717770",
-					success: function() {
-						console.log('拨打电话成功');
-					},
-					fail() {
-						console.log('打电话失败了');
+		},
+		// loginOUt(){
+		// 	this.utils.loginOut();
+		// 	this.getUserInfo();
+		// 	// uni.switchTab({
+		// 	// 	url:'/pages/home/index'
+		// 	// })
+		// },
+		loginOUt() {
+			const that = this;
+			uni.showModal({
+				title: '提示',
+				content: '确定要退出登录吗?',
+				success: function (res) {
+					if (res.confirm) {
+						// 先重置用户数据为默认值
+						that.user = {
+							isPromoter: 0,
+							isWeixinAuth: 0,
+							phone: "",
+							nickname: "请登录",
+							avatarUrl: "https://cdn.his.cdwjyyh.com/images/detault_head.png",
+							avatar: null // 确保头像也被重置
+						};
+
+						// 清空本地存储的用户数据
+						uni.removeStorageSync('userData');
+
+						// 执行退出登录逻辑
+						that.utils.loginOut();
+
+						// 重置订单数量
+						that.count0 = 0;
+						that.count1 = 0;
+						that.count2 = 0;
+						that.afterSalesCount = 0;
+						that.msgNum = 0;
+
+						// 可选:提示退出成功
+						uni.showToast({
+							title: '已退出登录',
+							icon: 'success'
+						});
+
+						// 可选:如果需要刷新页面数据,可以重新调用 onShow 中的方法
+						// 但由于我们已经手动重置了数据,这一步不是必需的
 					}
+				}
+			});
+		},
+		openPersonInfo() {
+			this.utils.isLogin().then(res => {
+				uni.navigateTo({
+					url: "/pages_user/user/personInfo"
 				})
-			},
+			})
 
-			getOrderCount() {
-				getOrderCount().then(
-					res => {
-						if (res.code == 200) {
-							this.count0 = res.count0;
-							this.count1 = res.count1;
-							this.count2 = res.count2;
-							this.afterSalesCount = res.afterSalesCount;
-						}
-					},
-					rej => {}
-				);
-			},
-			toManager() {
-				if (this.utils.checkCompanyUserLoginState()) {
-					uni.navigateTo({
-						url: '/pages_company/index'
-					})
-				} else {
-					uni.navigateTo({
-						url: '/pages_company/auth/login'
-					})
+		},
+		callService() {
+			uni.makePhoneCall({
+				phoneNumber: "4000717770",
+				success: function () {
+					console.log('拨打电话成功');
+				},
+				fail() {
+					console.log('打电话失败了');
 				}
+			})
+		},
 
-			},
-			openH5(type) {
-				var requestPath = uni.getStorageSync('requestPath');
-				// uni.setStorageSync('url',requestPath+url);
+		getOrderCount() {
+			getOrderCount().then(
+				res => {
+					if (res.code == 200) {
+						this.count0 = res.count0;
+						this.count1 = res.count1;
+						this.count2 = res.count2;
+						this.afterSalesCount = res.afterSalesCount;
+					}
+				},
+				rej => { }
+			);
+		},
+		toManager() {
+			if (this.utils.checkCompanyUserLoginState()) {
 				uni.navigateTo({
-					url: '../home/h5?type=' + type
+					url: '/pages_company/index'
 				})
-			},
-			getUserInfo() {
-				getUserInfo().then(
-					res => {
-						if (res.code == 200) {
-							if (res.user != null) {
-								this.user = res.user;
-								uni.setStorageSync('userData', res.user)
-							} else {
-								this.utils.loginOut();
-							}
+			} else {
+				uni.navigateTo({
+					url: '/pages_company/auth/login'
+				})
+			}
 
+		},
+		openH5(type) {
+			var requestPath = uni.getStorageSync('requestPath');
+			// uni.setStorageSync('url',requestPath+url);
+			uni.navigateTo({
+				url: '../home/h5?type=' + type
+			})
+		},
+		getUserInfo() {
+			getUserInfo().then(
+				res => {
+					if (res.code == 200) {
+						if (res.user != null) {
+							this.user = res.user;
+							uni.setStorageSync('userData', res.user)
 						} else {
-							uni.showToast({
-								icon: 'none',
-								title: "请求失败",
-							});
-						}
-					},
-					rej => {}
-				);
-			},
-			// 签到
-			doSign() {
-				if (this.signStatus) {
-					uni.showToast({
-						title: '今日已签到',
-						icon: 'none'
-					});
-					return;
-				}
-				sign().then(
-					res => {
-						if (res.code == 200) {
-							uni.showToast({
-								title: '签到成功',
-								icon: 'success'
-							});
-							// 更新签到状态
-							this.signStatus = true;
-							this.continuousDays += 1;
-							this.signNum = this.continuousDays;
-							// 重新获取积分
-							this.getIntegralInfo();
-						} else {
-							uni.showToast({
-								title: res.msg,
-								icon: 'none'
-							});
+							this.utils.loginOut();
 						}
-					},
-					rej => {}
-				);
-			},
-			// 获取用户签到记录
-			getUserSignRecord() {
-				getUserSign().then(
-					res => {
-						if (res.code == 200) {
-							// 处理签到记录数据
-							this.signStatus = res.isDaySign || false;
-							this.continuousDays = res.signNum || 0;
-							this.signNum = this.continuousDays;
-							// 处理签到规则
-							if (res.sign) {
-								try {
-									const signRules = JSON.parse(res.sign);
-									if (Array.isArray(signRules)) {
-										this.sign = signRules;
-									}
-								} catch (e) {
-									console.error('解析签到规则失败', e);
+
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: "请求失败",
+						});
+					}
+				},
+				rej => { }
+			);
+		},
+		// 签到
+		doSign() {
+			if (this.signStatus) {
+				uni.showToast({
+					title: '今日已签到',
+					icon: 'none'
+				});
+				return;
+			}
+			sign().then(
+				res => {
+					if (res.code == 200) {
+						uni.showToast({
+							title: '签到成功',
+							icon: 'success'
+						});
+						// 更新签到状态
+						this.signStatus = true;
+						this.continuousDays += 1;
+						this.signNum = this.continuousDays;
+						// 重新获取积分
+						this.getIntegralInfo();
+					} else {
+						uni.showToast({
+							title: res.msg,
+							icon: 'none'
+						});
+					}
+				},
+				rej => { }
+			);
+		},
+		// 获取用户签到记录
+		getUserSignRecord() {
+			getUserSign().then(
+				res => {
+					if (res.code == 200) {
+						// 处理签到记录数据
+						this.signStatus = res.isDaySign || false;
+						this.continuousDays = res.signNum || 0;
+						this.signNum = this.continuousDays;
+						// 处理签到规则
+						if (res.sign) {
+							try {
+								const signRules = JSON.parse(res.sign);
+								if (Array.isArray(signRules)) {
+									this.sign = signRules;
 								}
+							} catch (e) {
+								console.error('解析签到规则失败', e);
 							}
 						}
-					},
-					rej => {}
-				);
-			},
-			// 获取用户积分
-			getIntegralInfo() {
-				getIntegral().then(
-					res => {
-						if (res.code == 200 && res.data) {
-							this.userIntegral = res.data.total || 0;
-							// 更新芳华币显示
-							this.dataList[0].num = this.userIntegral;
-						}
-					},
-					rej => {}
-				);
-			},
-			// 跳转页面
-			navgetTo(url) {
-				this.utils.isLogin().then(res => {
-					if (res) {
-						uni.navigateTo({
-							url: url
-						})
 					}
-				})
-			},
-			// 查看订单
-			showOrder(status) {
-				uni.navigateTo({
-					url: '/pages_user/user/storeOrder?status=' + status
-				})
-			}
+				},
+				rej => { }
+			);
+		},
+		// 获取用户积分
+		getIntegralInfo() {
+			getIntegral().then(
+				res => {
+					if (res.code == 200 && res.data) {
+						this.userIntegral = res.data.total || 0;
+						// 更新芳华币显示
+						// this.dataList[0].num = res.data.total || 0;
+					}
+				},
+				rej => { }
+			);
+		},
+		// 跳转页面
+		navgetTo(url) {
+			this.utils.isLogin().then(res => {
+				if (res) {
+					uni.navigateTo({
+						url: url
+					})
+				}
+			})
+		},
+		// 查看订单
+		showOrder(status) {
+			uni.navigateTo({
+				url: '/pages_user/user/storeOrder?status=' + status
+			})
 		}
+	},
+	onUnload() {
+		// 清理页面状态
+		this.reviewStatus = null;
 	}
+}
 </script>
 
 <style lang="scss">
-	.top-cont {
+.top-cont {
+	width: 100%;
+	height: 532rpx;
+	position: relative;
+	background: radial-gradient(60% 60% at 70% 11%, #C5EFEA 0%, rgba(245, 246, 246, 0) 100%);
+
+	.top-inner {
 		width: 100%;
-		height: 532rpx;
-		position: relative;
-		background: radial-gradient(60% 60% at 70% 11%, #C5EFEA 0%, rgba(245, 246, 246, 0) 100%);
+		height: 100%;
+		position: absolute;
+		top: 0;
+		left: 0;
+		z-index: 2;
 
-		.top-inner {
-			width: 100%;
-			height: 100%;
-			position: absolute;
-			top: 0;
-			left: 0;
-			z-index: 2;
+		.top-block {
+			padding: 0 30rpx 0 30rpx;
+			display: flex;
+			flex-direction: column;
+
+			.qscode-block {
+				display: flex;
+				justify-content: flex-end;
+
+				// .qscode {
+				// 	width: 64rpx;
+				// 	height: 64rpx;
+				// 	padding: 12rpx;
+				// 	margin-right: 220rpx;
+				// 	border-radius: 32rpx 32rpx 32rpx 32rpx;
+				// 	border: 1rpx solid #E9E9E9;
+				// 	box-sizing: border-box;
+				// 	background: #FFFFFF;
+
+				// }
+				.qscode {
+					width: 64rpx;
+					height: 64rpx;
+					padding: 12rpx;
+					// margin-right: 220rpx;
+					// border-radius: 32rpx 32rpx 32rpx 32rpx;
+					// border: 1rpx solid #E9E9E9;
+					// box-sizing: border-box;
+					// background: #FFFFFF;
 
-			.top-block {
+				}
+			}
+
+			.shop-title {
+				display: flex;
+				justify-content: center;
+				align-items: center;
+				margin: 20rpx 0;
+
+				.title-text {
+					font-size: 40rpx;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #333333;
+				}
+			}
+
+			.user-info {
+				// padding: 88rpx 30rpx 0 30rpx;
 				padding: 0 30rpx 0 30rpx;
 				display: flex;
-				flex-direction: column;
+				align-items: center;
+				justify-content: space-between;
 
-				.qscode-block {
-						display: flex;
-						justify-content: flex-end;
-
-						.qscode {
-							width: 64rpx;
-							height: 64rpx;
-							padding: 12rpx;
-							margin-right: 220rpx;
-							border-radius: 32rpx 32rpx 32rpx 32rpx;
-							border: 1rpx solid #E9E9E9;
-							box-sizing: border-box;
-							background: #FFFFFF;
+				.left {
+					position: relative;
+					display: flex;
 
+					.head-img {
+						width: 128rpx;
+						height: 128rpx;
+						border-radius: 50%;
+						overflow: hidden;
+						margin-right: 30rpx;
+						border: 4rpx solid #FFFFFF;
+						box-shadow: 0px 5px 15px 2px rgba(0, 0, 0, 0.1);
+
+						image {
+							width: 100%;
+							height: 100%;
 						}
 					}
 
-					.shop-title {
-						display: flex;
-						justify-content: center;
-						align-items: center;
-						margin: 20rpx 0;
+					.name-phone {
+						padding-top: 15rpx;
 
-						.title-text {
-							font-size: 36rpx;
+						.name {
+							font-size: 44rpx;
 							font-family: PingFang SC;
-							font-weight: bold;
+							font-weight: 600;
 							color: #333333;
+							display: flex;
+							align-items: center;
 						}
-					}
-
-				.user-info {
-					// padding: 88rpx 30rpx 0 30rpx;
-					padding: 0 30rpx 0 30rpx;
-					display: flex;
-					align-items: center;
-					justify-content: space-between;
 
-					.left {
-						position: relative;
-						display: flex;
-
-						.head-img {
-							width: 128rpx;
-							height: 128rpx;
-							border-radius: 50%;
-							overflow: hidden;
-							margin-right: 30rpx;
-							border: 4rpx solid #FFFFFF;
-							box-shadow: 0px 5px 15px 2px rgba(0, 0, 0, 0.1);
-
-							image {
-								width: 100%;
-								height: 100%;
-							}
+						.user-page {
+							width: 160rpx;
+							box-sizing: border-box;
+							background: #FFFFFF;
+							border-radius: 22rpx 22rpx 22rpx 22rpx;
+							text-align: center;
+							padding: 6rpx 16rpx 4rpx;
+							display: flex;
+							justify-content: center;
+							align-items: center;
+							margin-top: 12rpx;
+							font-size: 24rpx;
+							color: #626469;
 						}
 
-						.name-phone {
-							padding-top: 15rpx;
-
-							.name {
-								font-size: 40rpx;
-								font-family: PingFang SC;
-								font-weight: 600;
-								color: #333333;
-								display: flex;
-								align-items: center;
-							}
+						.lable {
+							display: flex;
+							align-items: center;
+							margin-top: 16rpx;
 
-							.user-page {
-								width: 160rpx;
-								box-sizing: border-box;
-								background: #FFFFFF;
-								border-radius: 22rpx 22rpx 22rpx 22rpx;
-								text-align: center;
-								padding: 6rpx 16rpx 4rpx;
+							.lable-item {
 								display: flex;
 								justify-content: center;
-								align-items: center;
-								margin-top: 12rpx;
-								font-size: 24rpx;
-								color: #626469;
+								box-sizing: border-box;
+								font-weight: 500;
+								font-size: 26rpx;
+								color: #FEF5EA;
+								background: linear-gradient(90deg, #F26F00 0%, #FF9D1F 100%);
+								border-radius: 20rpx 20rpx 20rpx 20rpx;
+								border: 1rpx solid #FEDDB9;
+								width: 118rpx;
+								height: 40rpx;
 							}
 
-							.lable {
-								display: flex;
-								align-items: center;
-								margin-top: 16rpx;
-
-								.lable-item {
-									display: flex;
-									justify-content: center;
-									box-sizing: border-box;
-									font-weight: 500;
-									font-size: 22rpx;
-									color: #FEF5EA;
-									background: linear-gradient(90deg, #F26F00 0%, #FF9D1F 100%);
-									border-radius: 20rpx 20rpx 20rpx 20rpx;
-									border: 1rpx solid #FEDDB9;
-									width: 118rpx;
-									height: 40rpx;
-								}
-
-								.yellow {
-									background: linear-gradient(90deg, #F5CE3C 0%, #E39414 100%);
-								}
+							.yellow {
+								background: linear-gradient(90deg, #F5CE3C 0%, #E39414 100%);
 							}
 						}
 					}
+				}
 
-					.right {
-						display: flex;
-						align-items: center;
-						justify-content: center;
+				.right {
+					display: flex;
+					align-items: center;
+					justify-content: center;
 
-						.msg-box {
-							margin-left: 10rpx;
-							width: 44rpx;
-							height: 44rpx;
+					.msg-box {
+						margin-left: 10rpx;
+						width: 44rpx;
+						height: 44rpx;
 
-							image {
-								width: 100%;
-								height: 100%;
-							}
+						image {
+							width: 100%;
+							height: 100%;
 						}
+					}
 
-						.set {
+					.set {
 
-							width: 44rpx;
-							height: 44rpx;
+						width: 44rpx;
+						height: 44rpx;
 
-							image {
-								width: 100%;
-								height: 100%;
-							}
+						image {
+							width: 100%;
+							height: 100%;
 						}
 					}
-
 				}
 
-				.data {
-					margin: 40rpx 8rpx 30rpx;
-					display: flex;
-					justify-content: space-between;
+			}
 
-					.data-item {
-						text-align: center;
+			.data {
+				margin: 40rpx 8rpx 30rpx;
+				display: flex;
+				justify-content: space-between;
 
-						.number {
-							font-weight: 500;
-							font-size: 40rpx;
-							color: #333333;
-						}
+				.data-item {
+					text-align: center;
 
-						.txt {
-							margin-top: 12rpx;
-							font-size: 24rpx;
-							color: #666666;
-						}
+					.number {
+						font-weight: 500;
+						font-size: 44rpx;
+						color: #333333;
+					}
+
+					.txt {
+						margin-top: 12rpx;
+						color: #666666;
 					}
 				}
 			}
+		}
 
-			.member {
+		.member {
+			width: 702rpx;
+			height: 172rpx;
+			background: linear-gradient(90deg, #FFF3DF 0%, #FADBA9 100%);
+			border-radius: 16rpx 16rpx 16rpx 16rpx;
+			margin: 0 auto;
+			position: relative;
+			z-index: -2;
+
+			.bg {
 				width: 702rpx;
 				height: 172rpx;
-				background: linear-gradient(90deg, #FFF3DF 0%, #FADBA9 100%);
-				border-radius: 16rpx 16rpx 16rpx 16rpx;
-				margin: 0 auto;
-				position: relative;
-				z-index: -2;
+				position: absolute;
+				top: 0;
+				z-index: -1;
+			}
 
-				.bg {
-					width: 702rpx;
-					height: 172rpx;
-					position: absolute;
-					top: 0;
-					z-index: -1;
-				}
+			.member-block {
+				width: 100%;
+				height: 100%;
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+				padding: 36rpx 32rpx;
+				box-sizing: border-box;
 
-				.member-block {
-					width: 100%;
-					height: 100%;
+				.left {
 					display: flex;
-					justify-content: space-between;
-					align-items: center;
-					padding: 36rpx 32rpx;
-					box-sizing: border-box;
+					flex-direction: column;
 
-					.left {
+					.vip {
 						display: flex;
-						flex-direction: column;
+						align-items: center;
+						font-size: 28rpx;
+						color: #834F00;
+					}
 
-						.vip {
-							display: flex;
-							align-items: center;
-							font-size: 24rpx;
-							color: #834F00;
-						}
+					.count {
+						font-weight: 500;
+						font-size: 36rpx;
+						color: #885201;
 
-						.count {
-							font-weight: 500;
-							font-size: 32rpx;
-							color: #885201;
-
-							.bold {
-								font-family: Roboto, Roboto;
-								font-weight: bold;
-								font-size: 40rpx;
-								color: #EA8F07;
-							}
+						.bold {
+							font-family: Roboto, Roboto;
+							font-weight: bold;
+							font-size: 44rpx;
+							color: #EA8F07;
 						}
 					}
 				}
+			}
 
-				.right {
-					width: 176rpx;
-					height: 72rpx;
-					background: #885201;
-					border-radius: 36rpx 36rpx 36rpx 36rpx;
-					text-align: center;
-					line-height: 72rpx;
-					font-weight: 600;
-					font-size: 28rpx;
-					color: #FFF6E7;
-				}
+			.right {
+				width: 176rpx;
+				height: 72rpx;
+				background: #885201;
+				border-radius: 36rpx 36rpx 36rpx 36rpx;
+				text-align: center;
+				line-height: 72rpx;
+				font-weight: 600;
+				font-size: 32rpx;
+				color: #FFF6E7;
 			}
+		}
+
+		.my-order {
+			padding: 50rpx 20rpx 0;
 
-			.my-order {
-				padding: 50rpx 20rpx 0;
+			.inner {
+				font-size: 30rpx;
 
-				.inner {
-					box-sizing: border-box;
-					height: 245rpx;
-					background: #FFFFFF;
-					border-radius: 16rpx;
-					padding: 40rpx 30rpx;
+				box-sizing: border-box;
+				height: 245rpx;
+				background: #FFFFFF;
+				border-radius: 16rpx;
+				padding: 40rpx 30rpx;
+				display: flex;
+				flex-direction: column;
+				justify-content: space-between;
+
+				.title-box {
 					display: flex;
-					flex-direction: column;
+					align-items: center;
 					justify-content: space-between;
 
-					.title-box {
+					.title {
+						font-size: 38rpx;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #222222;
+						line-height: 1;
+					}
+
+					.all-order {
 						display: flex;
 						align-items: center;
-						justify-content: space-between;
 
-						.title {
-							font-size: 34rpx;
+						.text {
+							font-size: 30rpx;
 							font-family: PingFang SC;
-							font-weight: bold;
-							color: #222222;
+							font-weight: 500;
+							color: #999999;
 							line-height: 1;
+							margin-right: 8rpx;
 						}
 
-						.all-order {
-							display: flex;
-							align-items: center;
-
-							.text {
-								font-size: 26rpx;
-								font-family: PingFang SC;
-								font-weight: 500;
-								color: #999999;
-								line-height: 1;
-								margin-right: 8rpx;
-							}
-
-							image {
-								width: 24rpx;
-								height: 24rpx;
-							}
+						image {
+							width: 24rpx;
+							height: 24rpx;
 						}
 					}
+				}
+
+				.status-box {
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+					padding: 0 10rpx;
 
-					.status-box {
+					.item {
 						display: flex;
+						flex-direction: column;
 						align-items: center;
-						justify-content: space-between;
-						padding: 0 10rpx;
-
-						.item {
-							display: flex;
-							flex-direction: column;
-							align-items: center;
-							justify-content: center;
+						justify-content: center;
 
-							image {
-								width: 40rpx;
-								height: 40rpx;
-								margin-bottom: 18rpx;
-							}
+						image {
+							width: 40rpx;
+							height: 40rpx;
+							margin-bottom: 18rpx;
+						}
 
-							.text {
-								font-size: 26rpx;
-								font-family: PingFang SC;
-								font-weight: 500;
-								color: #111111;
-								line-height: 1;
-							}
+						.text {
+							font-size: 30rpx;
+							font-family: PingFang SC;
+							font-weight: 500;
+							color: #111111;
+							line-height: 1;
 						}
 					}
 				}
 			}
-
 		}
+
 	}
+}
+
+.coin-card {
+	width: 702rpx;
+	height: 380rpx;
+	background: linear-gradient(180deg, #FF5600 0%, #FFB501 100%);
+	border-radius: 16rpx 16rpx 16rpx 16rpx;
+	position: relative;
+	z-index: -2;
+	margin: 20rpx auto;
 
-	.coin-card {
+	.bg {
 		width: 702rpx;
 		height: 380rpx;
-		background: linear-gradient(180deg, #FF5600 0%, #FFB501 100%);
-		border-radius: 16rpx 16rpx 16rpx 16rpx;
-		position: relative;
-		z-index: -2;
-		margin: 20rpx auto;
-
-		.bg {
-			width: 702rpx;
-			height: 380rpx;
-			position: absolute;
-			top: 0;
-			z-index: -1;
-		}
+		position: absolute;
+		top: 0;
+		z-index: -1;
+	}
 
-		.container {
-			padding: 20rpx;
+	.container {
+		padding: 20rpx;
 
-			.coin-txt {
-				display: flex;
-				justify-content: space-between;
-				align-items: center;
+		.coin-txt {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
 
-				.left {
-					font-weight: 600;
-					font-size: 32rpx;
-					color: #FFFFFF;
+			.left {
+				font-weight: 600;
+				font-size: 36rpx;
+				color: #FFFFFF;
 
-					.bold {
-						font-family: Roboto, Roboto;
-						font-weight: bold;
-						font-size: 56rpx;
-						color: #FEEBC9;
-					}
+				.bold {
+					font-family: Roboto, Roboto;
+					font-weight: bold;
+					font-size: 60rpx;
+					color: #FEEBC9;
 				}
+			}
 
-				.right {
-					padding: 4rpx 16rpx;
-					background: #FFF3D7;
-					font-size: 24rpx;
-					color: #FF5C03;
-					border-radius: 20rpx 20rpx 20rpx 20rpx;
-					border: 2rpx solid rgba(255, 255, 255, 0.3);
-				}
+			.right {
+				padding: 4rpx 16rpx;
+				background: #FFF3D7;
+				font-size: 28rpx;
+				color: #FF5C03;
+				border-radius: 20rpx 20rpx 20rpx 20rpx;
+				border: 2rpx solid rgba(255, 255, 255, 0.3);
 			}
+		}
 
-			.item {
-				background: #FEFAF7;
-				border-radius: 12rpx 12rpx 12rpx 12rpx;
+		.item {
+			background: #FEFAF7;
+			border-radius: 12rpx 12rpx 12rpx 12rpx;
+			display: flex;
+			align-items: center;
+			flex-direction: column;
+			padding: 34rpx 0 32rpx;
+
+			.progress {
 				display: flex;
 				align-items: center;
-				flex-direction: column;
-				padding: 34rpx 0 32rpx;
+				justify-content: space-between;
+				position: relative;
+				z-index: 1;
+
+				.line {
+					position: absolute;
+					top: 20rpx;
+					width: 100%;
+					width: calc(100% - 30rpx);
+					left: 10rpx;
+					height: 4upx;
+					background: #F6CDA7;
+					border-radius: 2upx;
+					z-index: 1;
+				}
 
-				.progress {
+				.img-item {
 					display: flex;
+					flex-direction: column;
+					justify-content: center;
+					margin-right: 34rpx;
 					align-items: center;
-					justify-content: space-between;
-					position: relative;
-					z-index: 1;
 
-					.line {
-						position: absolute;
-						top: 20rpx;
-						width: 100%;
-						width: calc(100% - 30rpx);
-						left: 10rpx;
-						height: 4upx;
-						background: #F6CDA7;
-						border-radius: 2upx;
-						z-index: 1;
+					&:last-child {
+						margin-right: 0;
 					}
 
-					.img-item {
+					.top {
 						display: flex;
-						flex-direction: column;
-						justify-content: center;
-						margin-right: 34rpx;
 						align-items: center;
 
-						&:last-child {
-							margin-right: 0;
+						image {
+							width: 44upx;
+							height: 44upx;
+							background-color: #ffffff;
+							position: relative;
+							z-index: 3;
 						}
 
-						.top {
-							display: flex;
-							align-items: center;
-
-							image {
-								width: 44upx;
-								height: 44upx;
-								background-color: #ffffff;
-								position: relative;
-								z-index: 3;
-							}
-
-						}
-
-						.text {
-							font-size: 24upx;
-							font-family: PingFang SC;
-							font-weight: 500;
-							color: #FF7511;
-							line-height: 1;
-							white-space: nowrap;
-							margin-top: 16rpx;
-						}
+					}
 
+					.text {
+						font-size: 24upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #FF7511;
+						line-height: 1;
+						white-space: nowrap;
+						margin-top: 16rpx;
+					}
 
 
-					}
-				}
 
-				.button {
-					margin-top: 40rpx;
-					width: 598rpx;
 				}
 			}
 
+			.button {
+				margin-top: 40rpx;
+				width: 598rpx;
+			}
 		}
+
 	}
+}
 
-	.content {
+.content {
+	font-size: 30rpx;
+
+	margin-top: 20rpx;
+	padding: 0 20rpx;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	flex-direction: column;
+
+	.used-tools {
 		margin-top: 20rpx;
-		padding: 0 20rpx;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		flex-direction: column;
-
-		.used-tools {
-			margin-top: 20rpx;
-			box-sizing: border-box;
-			background: #FFFFFF;
-			border-radius: 16rpx;
-			padding: 40rpx 30rpx;
-			width: 100%;
+		box-sizing: border-box;
+		background: #FFFFFF;
+		border-radius: 16rpx;
+		padding: 40rpx 30rpx;
+		width: 100%;
 
-			.title {
-				font-size: 34rpx;
-				font-family: PingFang SC;
-				font-weight: bold;
-				color: #222222;
-				line-height: 1;
-			}
+		.title {
+			font-size: 38rpx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #222222;
+			line-height: 1;
+		}
 
-			.tools-list {
-				margin-top: 50rpx;
-				display: flex;
-				flex-wrap: wrap;
-				width: 100%;
+		.tools-list {
+			margin-top: 50rpx;
+			display: flex;
+			flex-wrap: wrap;
+			width: 100%;
 
-				.item {
-					box-sizing: border-box;
-					width: 25%;
-					display: flex;
-					flex-direction: column;
-					align-items: center;
-					justify-content: center;
-					margin-bottom: 50rpx;
-					position: relative;
+			.item {
+				box-sizing: border-box;
+				width: 25%;
+				display: flex;
+				flex-direction: column;
+				align-items: center;
+				justify-content: center;
+				margin-bottom: 50rpx;
+				position: relative;
 
-					image {
-						width: 44rpx;
-						height: 44rpx;
-					}
+				image {
+					width: 44rpx;
+					height: 44rpx;
+				}
 
-					.text {
-						font-size: 24rpx;
-						font-family: PingFang SC;
-						font-weight: 500;
-						color: #111111;
-						line-height: 1;
-						margin-top: 20rpx;
-					}
+				.text {
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #111111;
+					line-height: 1;
+					margin-top: 20rpx;
+				}
 
-					.contact-btn {
-						display: inline-block;
-						position: absolute;
-						top: 0;
-						left: 0;
-						width: 100%;
-						height: 100%;
-						opacity: 0;
-					}
+				.contact-btn {
+					display: inline-block;
+					position: absolute;
+					top: 0;
+					left: 0;
+					width: 100%;
+					height: 100%;
+					opacity: 0;
 				}
 			}
 		}
-
 	}
 
-	.sub-btn {
-		position: absolute;
-		width: 100%;
-		height: 100%;
-		opacity: 0;
-	}
+}
 
-	.like-product {
-		padding: 0 20rpx;
+.sub-btn {
+	position: absolute;
+	width: 100%;
+	height: 100%;
+	opacity: 0;
+}
 
-	}
+.like-product {
+	padding: 0 20rpx;
 
-	.banner {
-		padding: 20rpx 20rpx 0rpx 20rpx;
-		height: 200rpx;
-		position: relative;
-		display: flex;
-		align-items: center;
-		justify-content: center;
+}
 
-		image {
-			width: 100%;
-			height: 100%;
-		}
+.banner {
+	padding: 20rpx 20rpx 0rpx 20rpx;
+	height: 200rpx;
+	position: relative;
+	display: flex;
+	align-items: center;
+	justify-content: center;
 
-		.tel_btn {
-			width: 100%;
-			height: 100%;
-			top: 0rpx;
-			position: absolute;
-			opacity: 0.0;
-		}
+	image {
+		width: 100%;
+		height: 100%;
 	}
 
-	.log-out {
-		height: 80rpx;
-		margin: 20rpx;
-		line-height: 80rpx;
-		text-align: center;
-		font-size: 26rpx;
-		font-family: PingFang SC;
-		font-weight: 500;
-		color: #666666;
-		background: #FFFFFF;
-		border-radius: 16rpx;
-		margin-top: 20rpx;
+	.tel_btn {
+		width: 100%;
+		height: 100%;
+		top: 0rpx;
+		position: absolute;
+		opacity: 0.0;
 	}
-</style>
+}
+
+.log-out {
+	height: 80rpx;
+	margin: 20rpx;
+	line-height: 80rpx;
+	text-align: center;
+	font-size: 30rpx;
+	font-family: PingFang SC;
+	font-weight: 500;
+	color: #666666;
+	background: #FFFFFF;
+	border-radius: 16rpx;
+	margin-top: 20rpx;
+}
+</style>

+ 1 - 1
pages_company/alipayImg.vue

@@ -96,7 +96,7 @@ page {
  		font-family: PingFang SC;
  		font-weight: 400;
  		color: #FFFFFF;
- 		background:#2BC7B9 !important;
+ 		background:#02B176 !important;
  		border-radius: 44upx;
  	}
  }

+ 1 - 1
pages_company/auth/login.vue

@@ -137,7 +137,7 @@ export default {
 				font-family: PingFang SC;
 				font-weight: bold;
 				color: #FFFFFF;
-				background: #2BC7B9;
+				background: linear-gradient(136deg, #38D97D 0%, #02B176 100%);
 				border-radius: 44upx;
 			}
 		}

+ 1 - 1
pages_company/card.vue

@@ -99,7 +99,7 @@ page {
  		font-family: PingFang SC;
  		font-weight: 400;
  		color: #FFFFFF;
- 		background:#2BC7B9 !important;
+ 		background:#02B176 !important;
  		border-radius: 44upx;
  	}
  }

+ 85 - 57
pages_company/coupon.vue

@@ -12,10 +12,10 @@
 			</scroll-view>
 		</view>
 	</view>
-	<!-- <image src="/static/images/banner_coupon.png" mode="widthFix" class="tui-coupon-banner"></image> -->
+	<!-- <image src="https://cdn.his.cdwjyyh.com/images/banner_coupon.png" mode="widthFix" class="tui-coupon-banner"></image> -->
     <view class="tui-coupon-list">
       <view class="tui-coupon-item tui-top20" v-for="(item, index) in couponsList" :key="index">
-         <image src="/static/images/bg_coupon_3x.png" class="tui-coupon-bg" mode="widthFix"></image>
+         <image src="https://cdn.his.cdwjyyh.com/images/bg_coupon_3x.png" class="tui-coupon-bg" mode="widthFix"></image>
 		<view class="tui-coupon-item-left">
           <view class="tui-coupon-price-box" :class="{ 'tui-color-grey': item.receiveCount>0 }">
             <view class="tui-coupon-price-sign">¥</view>
@@ -49,7 +49,7 @@
 	<Loading :loaded="loadend" :loading="loading"></Loading>
 	<!--暂无优惠券-->
 	<view v-if="couponsList.length == 0 && page > 1" class="no-data-box" >
-		<image src="/static/images/no_data.png" mode="aspectFit"></image>
+		<image src="https://cdn.his.cdwjyyh.com/images/no_data.png" mode="aspectFit"></image>
 		<view class="empty-title">暂无数据</view>
 	</view>
   </view>
@@ -134,31 +134,39 @@ page {
 	top: 0;
 	left: 0;
 	z-index: 99999;
+	box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.05);
 	.cate-list{
 		box-sizing: border-box;
 		background: #fff;
-		padding: 10upx 27upx;
+		padding: 16upx 24upx;
 		height: 100upx;
 		.inner{
 			display: flex;
+			align-items: center;
 		}
 		.item{
 			flex-shrink: 0;
-			padding: 0 24upx;
-			height: 64upx;
-			line-height: 64upx;
-			font-size: 28upx;
+			padding: 0 28upx;
+			height: 68upx;
+			line-height: 68upx;
+			font-size: 30upx;
 			font-family: PingFang SC;
 			font-weight: 500;
-			color: #2BC7B9;
+			color: #02B176;
 			background: #F5FFFE;
 			border: 1px solid #8AD5CE;
-			border-radius: 32upx;
-			margin: 0 20upx 20upx 0;
+			border-radius: 34upx;
+			margin: 0 16upx 0 0;
+			transition: all 0.3s ease;
+			&:hover{
+				transform: translateY(-2rpx);
+				box-shadow: 0 4rpx 12rpx rgba(2, 177, 118, 0.15);
+			}
 			&.active{
 				color: #FFFFFF;
-				background: #2BC7B9;
-				border: 1px solid #2BC7B9;
+				background: linear-gradient(136deg, #38D97D 0%, #02B176 100%);
+				border: 1px solid #02B176;
+				box-shadow: 0 4rpx 16rpx rgba(2, 177, 118, 0.25);
 			}
 		}
 	}
@@ -176,23 +184,30 @@ page {
 
 .tui-coupon-item {
   width: 100%;
-  height: 210rpx;
+  height: 220rpx;
   position: relative;
   display: flex;
   align-items: center;
   padding-right: 30rpx;
   box-sizing: border-box;
   overflow: hidden;
- 
+  border-radius: 16rpx;
+  box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.08);
+  transition: all 0.3s ease;
+  &:hover{
+    transform: translateY(-4rpx);
+    box-shadow: 0 8rpx 28rpx rgba(0, 0, 0, 0.12);
+  }
 }
 
 .tui-coupon-bg {
   width: 100%;
-  height: 210rpx;
+  height: 220rpx;
   position: absolute;
   left: 0;
   top: 0;
   z-index: 1;
+  border-radius: 16rpx;
 }
 
 .tui-coupon-sign {
@@ -205,8 +220,8 @@ page {
 }
 
 .tui-coupon-item-left {
-  width: 218rpx;
-  height: 210rpx;
+  width: 230rpx;
+  height: 220rpx;
   position: relative;
   z-index: 2;
   display: flex;
@@ -214,6 +229,9 @@ page {
   justify-content: center;
   flex-direction: column;
   flex-shrink: 0;
+  background: rgba(255, 255, 255, 0.95);
+  border-top-left-radius: 16rpx;
+  border-bottom-left-radius: 16rpx;
 }
 
 .tui-coupon-price-box {
@@ -223,45 +241,48 @@ page {
 }
 
 .tui-coupon-price-sign {
-  font-size: 30rpx;
+  font-size: 36rpx;
+  font-weight: bold;
+  margin-bottom: 8rpx;
 }
 
 .tui-coupon-price {
-  font-size: 32rpx;
+  font-size: 52rpx;
   line-height: 68rpx;
   font-weight: bold;
 }
 
 .tui-price-small {
-  font-size: 58rpx !important;
+  font-size: 62rpx !important;
   line-height: 56rpx !important;
 }
 
 .tui-coupon-intro {
   background: #f7f7f7;
-  padding: 8rpx 10rpx;
-  font-size: 26rpx;
+  padding: 10rpx 14rpx;
+  font-size: 28rpx;
   line-height: 26rpx;
-  font-weight: 400;
+  font-weight: 500;
   color: #666;
-  margin-top: 18rpx;
+  margin-top: 16rpx;
+  border-radius: 8rpx;
 }
 
 .tui-coupon-item-right {
   flex: 1;
-  height: 210rpx;
+  height: 220rpx;
   position: relative;
   z-index: 2;
   display: flex;
   align-items: center;
   justify-content: space-between;
-  padding-left: 24rpx;
+  padding-left: 32rpx;
   box-sizing: border-box;
   overflow: hidden;
 }
 
 .tui-coupon-content {
-  width: 82%;
+  width: 75%;
   display: flex;
   flex-direction: column;
   justify-content: center;
@@ -270,13 +291,14 @@ page {
 .tui-coupon-title-box {
   display: flex;
   align-items: center;
+  margin-bottom: 24rpx;
 }
 
 .tui-coupon-btn {
   padding: 6rpx;
   background: #ffebeb;
   color: #e41f19;
-  font-size: 25rpx;
+  font-size: 29rpx;
   line-height: 25rpx;
   display: flex;
   align-items: center;
@@ -298,22 +320,22 @@ page {
 
 .tui-coupon-title {
   width: 100%;
-  font-size: 26rpx;
+  font-size: 34rpx;
   color: #333;
+  font-weight: 500;
   white-space: nowrap;
   overflow: hidden;
   text-overflow: ellipsis;
 }
 
 .tui-coupon-rule {
-  padding-top: 52rpx;
+  padding-top: 8rpx;
 }
 
 .tui-rule-box {
   display: flex;
   align-items: center;
-  transform: scale(0.8);
-  transform-origin: 0 100%;
+  margin-bottom: 12rpx;
 }
 
 .tui-padding-btm {
@@ -321,10 +343,11 @@ page {
 }
 
 .tui-coupon-circle {
-  width: 8rpx;
-  height: 8rpx;
+  width: 10rpx;
+  height: 10rpx;
   background: rgb(160, 160, 160);
   border-radius: 50%;
+  flex-shrink: 0;
 }
 
 .tui-coupon-text {
@@ -332,16 +355,16 @@ page {
   line-height: 28rpx;
   font-weight: 400;
   color: #666;
-  padding-left: 8rpx;
+  padding-left: 12rpx;
   white-space: nowrap;
 }
 
 .tui-top20 {
-  margin-top: 20rpx;
+  margin-top: 24rpx;
 }
 
 .tui-coupon-title {
-  font-size: 28rpx;
+  font-size: 32rpx;
   line-height: 28rpx;
 }
 
@@ -352,28 +375,33 @@ page {
 
 .tui-btn-box {
   position: absolute;
-  right: 20rpx;
+  right: 30rpx;
   bottom: 40rpx;
   z-index: 10;
   .btn{
-  	width: 155upx;
-  	height: 64upx;
-  	line-height: 64upx;
-  	font-size: 26upx;
-  	font-family: PingFang SC;
-  	font-weight: 500;
-  	text-align: center;
-  	border-radius: 32upx;
-  	margin-left: 15upx;
-
-  	&.cancel{
-  		border: 1px solid red;
-  		color: red;
-  	}
-  	&.receive{
-  		background: red;
-  		color: #FFFFFF;
-  	}
+    width: 160upx;
+    height: 68upx;
+    line-height: 68upx;
+    font-size: 28upx;
+    font-family: PingFang SC;
+    font-weight: 500;
+    text-align: center;
+    border-radius: 34upx;
+    margin-left: 15upx;
+    transition: all 0.3s ease;
+    &:hover{
+      transform: scale(1.05);
+    }
+    &.cancel{
+      border: 1px solid #FF6B6B;
+      color: #FF6B6B;
+      background: rgba(255, 107, 107, 0.05);
+    }
+    &.receive{
+      background: linear-gradient(136deg, #FF6B6B 0%, #FF5252 100%);
+      color: #FFFFFF;
+      box-shadow: 0 4rpx 16rpx rgba(255, 107, 107, 0.3);
+    }
   }
 }
 </style>

+ 8 - 8
pages_company/couponDetails.vue

@@ -224,24 +224,24 @@ page {
 }
 
 .tui-coupon-price-sign {
-  font-size: 30rpx;
+  font-size: 34rpx;
 }
 
 .tui-coupon-price {
-  font-size: 32rpx;
+  font-size: 36rpx;
   line-height: 68rpx;
   font-weight: bold;
 }
 
 .tui-price-small {
-  font-size: 58rpx !important;
+  font-size: 62rpx !important;
   line-height: 56rpx !important;
 }
 
 .tui-coupon-intro {
   background: #f7f7f7;
   padding: 8rpx 10rpx;
-  font-size: 26rpx;
+  font-size: 30rpx;
   line-height: 26rpx;
   font-weight: 400;
   color: #666;
@@ -277,7 +277,7 @@ page {
   padding: 6rpx;
   background: #ffebeb;
   color: #e41f19;
-  font-size: 25rpx;
+  font-size: 29rpx;
   line-height: 25rpx;
   display: flex;
   align-items: center;
@@ -299,7 +299,7 @@ page {
 
 .tui-coupon-title {
   width: 100%;
-  font-size: 26rpx;
+  font-size: 30rpx;
   color: #333;
   white-space: nowrap;
   overflow: hidden;
@@ -329,7 +329,7 @@ page {
 }
 
 .tui-coupon-text {
-  font-size: 28rpx;
+  font-size: 32rpx;
   line-height: 28rpx;
   font-weight: 400;
   color: #666;
@@ -342,7 +342,7 @@ page {
 }
 
 .tui-coupon-title {
-  font-size: 28rpx;
+  font-size: 32rpx;
   line-height: 28rpx;
 }
 

+ 20 - 20
pages_company/index.vue

@@ -215,33 +215,33 @@
 				}
 				.name-phone{
 					padding-top: 15upx;
-					.name{
-						font-size: 36upx;
-						font-family: PingFang SC;
-						font-weight: bold;
-						color: #111111;
-						line-height: 1;
-					}
-					.phone{
-						font-size: 28upx;
-						font-family: PingFang SC;
-						font-weight: 500;
-						color: #666666;
-						line-height: 1;
-						margin-top: 30upx;
-					}
+							.name{
+							font-size: 42upx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #111111;
+							line-height: 1;
+						}
+						.phone{
+							font-size: 32upx;
+							font-family: PingFang SC;
+							font-weight: 500;
+							color: #666666;
+							line-height: 1;
+							margin-top: 30upx;
+						}
 				}
 			}
 			.msg-box{
 				padding: 5rpx 15upx;
 				height: 30upx;
 				line-height: 30upx;
-				font-size: 22upx;
+				font-size: 28upx;
 				font-family: PingFang SC;
 				font-weight: 500;
 				color: #FFFFFF;
 				border-radius: 8rpx;
-				background-color: #2BC7B9;
+				background-color: #02B176;
 			}
 		}
 		.used-tools{
@@ -251,7 +251,7 @@
 			padding: 40upx 30upx;
 			
 			.title{
-				font-size: 32upx;
+				font-size: 38upx;
 				font-family: PingFang SC;
 				font-weight: bold;
 				color: #222222;
@@ -276,7 +276,7 @@
 						height: 44upx;
 					}
 					.text{
-						font-size: 24upx;
+						font-size: 30upx;
 						font-family: PingFang SC;
 						font-weight: 500;
 						color: #111111;
@@ -299,7 +299,7 @@
 			height: 80upx;
 			line-height: 80upx;
 			text-align: center;
-			font-size: 26upx;
+			font-size: 32upx;
 			font-family: PingFang SC;
 			font-weight: 500;
 			color: #666666;

+ 2 - 2
pages_company/order/cart.vue

@@ -296,7 +296,7 @@
 							font-family: PingFang SC;
 							font-weight: bold;
 							color: #FFFFFF;
-							background: linear-gradient(90deg, #2BC7B9 0%, #2BC7A4 100%);
+							background: linear-gradient(90deg, #02B176 0%, #2BC7A4 100%);
 							border-radius: 4upx;
 							margin-right: 10upx;
 							flex-shrink: 0;
@@ -444,7 +444,7 @@
 					font-family: PingFang SC;
 					font-weight: bold;
 					color: #FFFFFF;
-					background: #2BC7B9;
+					background: linear-gradient(136deg, #38D97D 0%, #02B176 100%);
 					border-radius: 44upx;
 				}
 			}

+ 2 - 2
pages_company/order/confirmCompanyOrder.vue

@@ -205,7 +205,7 @@
 							display: inline-block;
 							padding: 0 6upx;
 							height: 30upx;
-							background: linear-gradient(90deg, #2BC7B9 0%, #2BC7A4 100%);
+							background: linear-gradient(90deg, #02B176 0%, #2BC7A4 100%);
 							border-radius: 4upx;
 							margin-right: 10upx;
 							font-size: 22upx;
@@ -411,7 +411,7 @@
 				font-family: PingFang SC;
 				font-weight: bold;
 				color: #FFFFFF;
-				background: #2BC7B9;
+				background: linear-gradient(136deg, #38D97D 0%, #02B176 100%);
 				border-radius: 44upx;
 				position: relative;
 				.share{

+ 5 - 5
pages_company/order/confirmOrder.vue

@@ -209,7 +209,7 @@
 							display: inline-block;
 							padding: 0 6upx;
 							height: 30upx;
-							background: linear-gradient(90deg, #2BC7B9 0%, #2BC7A4 100%);
+							background: linear-gradient(90deg, #02B176 0%, #2BC7A4 100%);
 							border-radius: 4upx;
 							margin-right: 10upx;
 							font-size: 22upx;
@@ -415,7 +415,7 @@
 				font-family: PingFang SC;
 				font-weight: bold;
 				color: #FFFFFF;
-				background: #2BC7B9;
+				background: linear-gradient(136deg, #38D97D 0%, #02B176 100%);
 				border-radius: 44upx;
 			}
 		}
@@ -465,7 +465,7 @@
 	  font-size: 0.6 * 100rpx;
 	}
 	.coupon-list .item .money .pic-num {
-	  font-size: 20rpx;
+	  font-size: 24rpx;
 	  z-index: 99;
 	}
 
@@ -536,7 +536,7 @@
 				font-size: 28upx;
 				font-family: PingFang SC;
 				font-weight: 500;
-				color: #2BC7B9;
+				color: #02B176;
 			}
 		}
 		.btn{
@@ -549,7 +549,7 @@
 			font-weight: 500;
 			color: #FFFFFF;
 			border: 1px solid #D2E6FF;
-			background: linear-gradient(135deg, #2BC7B9 0%, #60CDC3 100%);
+			background: linear-gradient(90deg, #38D97D 0%, #02B176 100%);
 			border-radius: 24upx;
 			margin-left: 30upx;
 		}

+ 12 - 12
pages_company/order/coupon.vue

@@ -2,13 +2,13 @@
   <view ref="container">
 	<view class="search-cont">
 		<view class="inner">
-			<image class="icon-search" src="/static/images/search.png" mode=""></image>
-			<input type="text" value="" placeholder="输入订单号" confirm-type="搜索" @confirm="goSearch"   placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
+			<image class="icon-search" src="https://cdn.his.cdwjyyh.com/images/search.png" mode=""></image>
+			<input type="text" value="" placeholder="输入订单号" confirm-type="搜索" @confirm="goSearch"   placeholder-style="font-size:32rpx;color:#BBBBBB;font-family: PingFang SC;" />
 		</view>
 	</view>
     <view class="tui-coupon-list">
       <view class="tui-coupon-item tui-top20" v-for="(item, index) in couponsList" :key="index">
-         <image src="/static/images/bg_coupon_3x.png" class="tui-coupon-bg" mode="widthFix"></image>
+         <image src="https://cdn.his.cdwjyyh.com/images/bg_coupon_3x.png" class="tui-coupon-bg" mode="widthFix"></image>
 		<view class="tui-coupon-item-left">
           <view class="tui-coupon-price-box" :class="{ 'tui-color-grey': item.receiveCount>0 }">
             <view class="tui-coupon-price-sign">¥</view>
@@ -42,7 +42,7 @@
 	<Loading :loaded="loadend" :loading="loading"></Loading>
 	<!--暂无优惠券-->
 	<view v-if="couponsList.length == 0 && page > 1" class="no-data-box" >
-		<image src="/static/images/no_data.png" mode="aspectFit"></image>
+		<image src="https://cdn.his.cdwjyyh.com/images/no_data.png" mode="aspectFit"></image>
 		<view class="empty-title">暂无数据</view>
 	</view>
   </view>
@@ -208,24 +208,24 @@ page {
 }
 
 .tui-coupon-price-sign {
-  font-size: 30rpx;
+  font-size: 34rpx;
 }
 
 .tui-coupon-price {
-  font-size: 32rpx;
+  font-size: 36rpx;
   line-height: 68rpx;
   font-weight: bold;
 }
 
 .tui-price-small {
-  font-size: 58rpx !important;
+  font-size: 62rpx !important;
   line-height: 56rpx !important;
 }
 
 .tui-coupon-intro {
   background: #f7f7f7;
   padding: 8rpx 10rpx;
-  font-size: 26rpx;
+  font-size: 30rpx;
   line-height: 26rpx;
   font-weight: 400;
   color: #666;
@@ -261,7 +261,7 @@ page {
   padding: 6rpx;
   background: #ffebeb;
   color: #e41f19;
-  font-size: 25rpx;
+  font-size: 29rpx;
   line-height: 25rpx;
   display: flex;
   align-items: center;
@@ -283,7 +283,7 @@ page {
 
 .tui-coupon-title {
   width: 100%;
-  font-size: 26rpx;
+  font-size: 30rpx;
   color: #333;
   white-space: nowrap;
   overflow: hidden;
@@ -313,7 +313,7 @@ page {
 }
 
 .tui-coupon-text {
-  font-size: 28rpx;
+  font-size: 32rpx;
   line-height: 28rpx;
   font-weight: 400;
   color: #666;
@@ -326,7 +326,7 @@ page {
 }
 
 .tui-coupon-title {
-  font-size: 28rpx;
+  font-size: 32rpx;
   line-height: 28rpx;
 }
 

+ 6 - 6
pages_company/order/productDetails.vue

@@ -505,7 +505,7 @@
 			.share-box{
 				width: 120upx;
 				height: 46upx;
-				border: 1px solid #2BC7B9;
+				border: 1px solid #02B176;
 				border-radius: 23upx;
 				display: flex;
 				align-items: center;
@@ -515,7 +515,7 @@
 					font-size: 26upx;
 					font-family: PingFang SC;
 					font-weight: 500;
-					color: #2BC7B9;
+					color: #02B176;
 				}
 				image{
 					margin-left: 2rpx;
@@ -551,7 +551,7 @@
 				display: inline-block;
 				padding: 0 6upx;
 				height: 30upx;
-				background: linear-gradient(90deg, #2BC7B9 0%, #2BC7A4 100%);
+				background: linear-gradient(90deg, #02B176 0%, #2BC7A4 100%);
 				border-radius: 4upx;
 				margin-right: 10upx;
 				font-size: 22upx;
@@ -756,7 +756,7 @@
 					background: #FF6633;
 				}
 				&.buy{
-					background: #2BC7B9;
+					background: linear-gradient(136deg, #38D97D 0%, #02B176 100%);
 				}
 			}
 		}
@@ -849,7 +849,7 @@
 					&.active{
 						background: #F1FFFE;
 						border: 1px solid #8AD5CE;
-						color: #2BC7B9;
+						color: #02B176;
 					}
 				}
 			}
@@ -906,7 +906,7 @@
 			font-family: PingFang SC;
 			font-weight: bold;
 			color: #FFFFFF;
-			background: #2BC7B9;
+			background: linear-gradient(136deg, #38D97D 0%, #02B176 100%);
 			border-radius: 44upx;
 			margin-top: 30upx;
 			// margin-bottom: 30upx;

+ 2 - 2
pages_company/order/productList.vue

@@ -5,7 +5,7 @@
 			<view class="search-cont">
 				<view class="inner">
 					<image class="icon-search" src="https://cdn.his.cdwjyyh.com/images/search.png" mode=""></image>
-					<input type="text" @confirm="goSearch"   :value="form.productName" placeholder="输入药品名称" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
+					<input type="text" @confirm="goSearch"   :value="form.productName" placeholder="输入药品名称" placeholder-style="font-size:32rpx;color:#BBBBBB;font-family: PingFang SC;" />
 				</view>
 				<view class="icon-search">
 					<image @click="showChange(2)" v-if="showType==1"  src="https://cdn.his.cdwjyyh.com/images/search1.png" mode=""></image>
@@ -308,7 +308,7 @@
 			align-items: center;
 			justify-content: center;
 			&.active .label{
-				color: #2BC7B9;
+				color: #02B176;
 			}
 			.label{
 				font-size: 26upx;

+ 3 - 3
pages_company/order/productShowDetails.vue

@@ -255,7 +255,7 @@
 			.share-box{
 				width: 120upx;
 				height: 46upx;
-				border: 1px solid #2BC7B9;
+				border: 1px solid #02B176;
 				border-radius: 23upx;
 				display: flex;
 				align-items: center;
@@ -265,7 +265,7 @@
 					font-size: 26upx;
 					font-family: PingFang SC;
 					font-weight: 500;
-					color: #2BC7B9;
+					color: #02B176;
 				}
 				image{
 					margin-left: 2rpx;
@@ -301,7 +301,7 @@
 				display: inline-block;
 				padding: 0 6upx;
 				height: 30upx;
-				background: linear-gradient(90deg, #2BC7B9 0%, #2BC7A4 100%);
+				background: linear-gradient(90deg, #02B176 0%, #2BC7A4 100%);
 				border-radius: 4upx;
 				margin-right: 10upx;
 				font-size: 22upx;

+ 5 - 5
pages_company/shareLive.vue

@@ -198,7 +198,7 @@
 					}
 
 					.label {
-						font-size: 28rpx;
+						font-size: 32rpx;
 						font-weight: 500;
 						color: #999999;
 						line-height: 1;
@@ -211,7 +211,7 @@
 						align-items: flex-end;
 
 						.unit {
-							font-size: 24rpx;
+							font-size: 28rpx;
 							font-family: PingFang SC;
 							font-weight: 500;
 							color: #FF6633;
@@ -220,7 +220,7 @@
 						}
 
 						.num {
-							font-size: 32rpx;
+							font-size: 36rpx;
 							font-family: PingFang SC;
 							font-weight: bold;
 							color: #FF6633;
@@ -235,10 +235,10 @@
 					align-items: center;
 
 					button {
-						font-size: 28rpx;
+						font-size: 32rpx;
 						color: #F7F7F7;
 						padding: 12rpx 20rpx !important;
-						background-color: #2BC7B9 !important;
+						background-color: #02B176 !important;
 						line-height: inherit !important;
 						margin: 0 !important;
 						width: auto !important;

+ 118 - 118
pages_company/storeOrder.vue

@@ -3,7 +3,7 @@
 		<view class="search-cont">
 			<view class="inner">
 				<image class="icon-search" src="https://cdn.his.cdwjyyh.com/images/search.png" mode=""></image>
-				<input type="text" value="" placeholder="输入订单号" confirm-type="搜索" @confirm="goSearch"   placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
+				<input type="text" value="" placeholder="输入订单号" confirm-type="搜索" @confirm="goSearch"   placeholder-style="font-size:32rpx;color:#BBBBBB;font-family: PingFang SC;" />
 			</view>
 		</view>
 		<!-- 订单列表 -->
@@ -38,7 +38,7 @@
 										<text class="unit">¥</text>
 										<text class="num" v-if="JSON.parse(subItem.jsonInfo).price!=null">{{JSON.parse(subItem.jsonInfo).price.toFixed(2)}}</text>
 									</view>
-									<view class="amount">x{{JSON.parse(subItem.jsonInfo).num}}</view>
+									<view class="amount" v-if="item.isPackage==0">x{{JSON.parse(subItem.jsonInfo).num}}</view>
 								</view>
 							</view>
 						</view>
@@ -245,46 +245,46 @@
 				justify-content: space-between;
 				padding: 34upx 0 20upx;
 				.num{
-					font-size: 26upx;
-					font-family: PingFang SC;
-					font-weight: 500;
-					color: #999999;
-					line-height: 1;
-				}
-				.status-box{
-					display: flex;
-					align-items: center;
-					.recom-box{
-						width: 108upx;
-						height: 30upx;
-						line-height: 30upx;
-						text-align: left;
-						padding-left: 8upx;
-						font-size: 22upx;
-						font-family: PingFang SC;
-						font-weight: 500;
-						color: #FFFFFF;
-						background-color: #FF4B33;
-						background-repeat: no-repeat;
-						background-size: 100% 100%;
-						margin-right: 8upx;
-					}
-					.text{
-						font-size: 28upx;
+						font-size: 30upx;
 						font-family: PingFang SC;
 						font-weight: 500;
+						color: #999999;
 						line-height: 1;
-						&.success{
-							color: #2BC7B9;
-						}
-						&.black{
-							color: #111111;
+					}
+					.status-box{
+						display: flex;
+						align-items: center;
+						.recom-box{
+							width: 108upx;
+							height: 30upx;
+							line-height: 30upx;
+							text-align: left;
+							padding-left: 8upx;
+							font-size: 26upx;
+							font-family: PingFang SC;
+							font-weight: 500;
+							color: #FFFFFF;
+							background-color: #FF4B33;
+							background-repeat: no-repeat;
+							background-size: 100% 100%;
+							margin-right: 8upx;
 						}
-						&.info{
-							color: #999999;
+						.text{
+							font-size: 32upx;
+							font-family: PingFang SC;
+							font-weight: 500;
+							line-height: 1;
+							&.success{
+								color: #02B176;
+							}
+							&.black{
+								color: #111111;
+							}
+							&.info{
+								color: #999999;
+							}
 						}
 					}
-				}
 			}
 			.drug-list{
 				.drug-item{
@@ -309,7 +309,7 @@
 						flex-direction: column;
 						justify-content: space-between;
 						.name-box{
-							font-size: 28upx;
+							font-size: 32upx;
 							font-family: PingFang SC;
 							font-weight: 500;
 							color: #111111;
@@ -318,10 +318,10 @@
 								display: inline-block;
 								padding: 0 6upx;
 								height: 30upx;
-								background: linear-gradient(90deg, #2BC7B9 0%, #2BC7A4 100%);
+								background: linear-gradient(90deg, #02B176 0%, #2BC7A4 100%);
 								border-radius: 4upx;
 								margin-right: 10upx;
-								font-size: 22upx;
+								font-size: 26upx;
 								font-family: PingFang SC;
 								font-weight: bold;
 								color: #FFFFFF;
@@ -331,7 +331,7 @@
 							}
 						}
 						.spec{
-							font-size: 24upx;
+							font-size: 28upx;
 							font-family: PingFang SC;
 							font-weight: 500;
 							color: #999999;
@@ -342,32 +342,32 @@
 							display: flex;
 							align-items: center;
 							justify-content: space-between;
-							.price{
-								display: flex;
-								align-items: flex-end;
-								.unit{
-									font-size: 24upx;
-									font-family: PingFang SC;
-									font-weight: 500;
-									color: #111111;
-									line-height: 1.2;
-									margin-right: 4upx;
+									.price{
+									display: flex;
+									align-items: flex-end;
+									.unit{
+										font-size: 28upx;
+										font-family: PingFang SC;
+										font-weight: 500;
+										color: #111111;
+										line-height: 1.2;
+										margin-right: 4upx;
+									}
+									.num{
+										font-size: 36upx;
+										font-family: PingFang SC;
+										font-weight: 500;
+										color: #111111;
+										line-height: 1;
+									}
 								}
-								.num{
-									font-size: 32upx;
+								.amount{
+									font-size: 28upx;
 									font-family: PingFang SC;
 									font-weight: 500;
-									color: #111111;
+									color: #999999;
 									line-height: 1;
 								}
-							}
-							.amount{
-								font-size: 24upx;
-								font-family: PingFang SC;
-								font-weight: 500;
-								color: #999999;
-								line-height: 1;
-							}
 						}
 					}
 				}
@@ -377,72 +377,72 @@
 					align-items: center;
 					justify-content: space-between;
 					.amount-paid{
-						display: flex;
-						align-items: center;
-						.label{
-							font-size: 24upx;
-							font-family: PingFang SC;
-							font-weight: 500;
-							color: #999999;
-							line-height: 1;
-						}
-						.price-box{
 							display: flex;
-							align-items: flex-end;
-							.unit{
-								font-size: 24upx;
+							align-items: center;
+							.label{
+								font-size: 28upx;
 								font-family: PingFang SC;
 								font-weight: 500;
-								color: #FF6633;
-								line-height: 1.2;
-								margin-right: 4upx;
-							}
-							.num{
-								font-size: 32upx;
-								font-family: PingFang SC;
-								font-weight: bold;
-								color: #FF6633;
+								color: #999999;
 								line-height: 1;
 							}
-						}
-					}
-					.btn-box{
-						box-sizing: border-box;
-						display: flex;
-						align-items: center;
-						.btn{
-							width: 155upx;
-							height: 64upx;
-							line-height: 64upx;
-							font-size: 26upx;
-							font-family: PingFang SC;
-							font-weight: 500;
-							text-align: center;
-							border-radius: 32upx;
-							margin-left: 15upx;
-							&:first-child{
-								margin-left: 0;
-							}
-							&.cancel{
-								border: 1px solid #DDDDDD;
-								color: #666666;
+							.price-box{
+								display: flex;
+								align-items: flex-end;
+								.unit{
+									font-size: 28upx;
+									font-family: PingFang SC;
+									font-weight: 500;
+									color: #FF6633;
+									line-height: 1.2;
+									margin-right: 4upx;
+								}
+								.num{
+									font-size: 36upx;
+									font-family: PingFang SC;
+									font-weight: bold;
+									color: #FF6633;
+									line-height: 1;
+								}
 							}
-							&.pay{
-								background: #2BC7B9;
-								color: #FFFFFF;
-								position: relative;
-								.share{
-									display: inline-block;
-									position: absolute;
-									top: 0;
-									left: 0;
-									width: 100%;
-									height: 100%rpx;
-									opacity: 0;
+						}
+						.btn-box{
+							box-sizing: border-box;
+							display: flex;
+							align-items: center;
+							.btn{
+								width: 155upx;
+								height: 64upx;
+								line-height: 64upx;
+								font-size: 30upx;
+								font-family: PingFang SC;
+								font-weight: 500;
+								text-align: center;
+								border-radius: 32upx;
+								margin-left: 15upx;
+								&:first-child{
+									margin-left: 0;
+								}
+								&.cancel{
+									border: 1px solid #DDDDDD;
+									color: #666666;
+								}
+								&.pay{
+									background: linear-gradient(136deg, #38D97D 0%, #02B176 100%);
+									color: #FFFFFF;
+									position: relative;
+									.share{
+										display: inline-block;
+										position: absolute;
+										top: 0;
+										left: 0;
+										width: 100%;
+										height: 100%rpx;
+										opacity: 0;
+									}
 								}
 							}
 						}
-					}
 				}
 			}
 		}

+ 89 - 54
pages_company/storeOrderDetail.vue

@@ -2,7 +2,8 @@
 	<view>
 		<view class="top-cont">
 			<!-- 背景图片 -->
-			<image class="bg" src="https://cdn.his.cdwjyyh.com/images/order_top_bg.png" mode=""></image>
+			<!-- <image class="bg" src="https://cdn.his.cdwjyyh.com/images/order_top_bg.png" mode=""></image> -->
+			<view class="bg"></view>
 			<view class="top-inner">			
 				<!-- 这里是状态栏 -->
 				<view class="fixed-top-box">
@@ -22,7 +23,7 @@
 				<!-- 订单状态 -->
 				<view class="order-status">
 					<!-- 待付款 -->
-					<view v-if="order.status == 0" class="inner">
+					<view v-if="order.subOrderList[0].status == 0" class="inner">
 						<view class="img-box">
 							<image src="https://cdn.his.cdwjyyh.com/images/pag96.png" mode=""></image>
 						</view>
@@ -33,7 +34,7 @@
 					</view>
 					
 					<!-- 待发货 -->
-					<view v-if="order.status == 1" class="inner">
+					<view v-if="order.subOrderList[0].status == 1" class="inner">
 						<view class="img-box">
 							<image src="https://cdn.his.cdwjyyh.com/images/receipt.png" mode=""></image>
 						</view>
@@ -43,7 +44,7 @@
 						</view>
 					</view>
 					<!-- 待收货 -->
-					<view v-if="order.status == 2" class="inner">
+					<view v-if="order.subOrderList[0].status == 2" class="inner">
 						<view class="img-box">
 							<image src="https://cdn.his.cdwjyyh.com/images/finish96.png" mode=""></image>
 						</view>
@@ -53,7 +54,7 @@
 						</view>
 					</view>
 					<!-- 已完成 -->
-					<view v-if="order.status == 3" class="inner">
+					<view v-if="order.subOrderList[0].status == 3" class="inner">
 						<view class="img-box">
 							<image src="https://cdn.his.cdwjyyh.com/images/finish96.png" mode=""></image>
 						</view>
@@ -64,7 +65,7 @@
 					</view>
 					<!-- 交易取消 -->
 					<!--交易取消 -->
-					<view v-if="order.status == -3" class="inner">
+					<view v-if="order.subOrderList[0].status == -3" class="inner">
 						<view class="img-box">
 							<image src="https://cdn.his.cdwjyyh.com/images/close_trade.png" mode=""></image>
 						</view>
@@ -73,7 +74,7 @@
 							<text class="desc">订单已取消</text>
 						</view>
 					</view>
-					<view v-if="order.status == -1" class="inner">
+					<view v-if="order.subOrderList[0].status == -1" class="inner">
 						<view class="img-box">
 							<image src="https://cdn.his.cdwjyyh.com/images/close_trade.png" mode=""></image>
 						</view>
@@ -82,7 +83,7 @@
 							<text class="desc">请等待客服审核</text>
 						</view>
 					</view>
-					<view v-if="order.status == -2" class="inner">
+					<view v-if="order.subOrderList[0].status == -2" class="inner">
 						<view class="img-box">
 							<image src="https://cdn.his.cdwjyyh.com/images/close_trade.png" mode=""></image>
 						</view>
@@ -112,21 +113,21 @@
 					<view class="goods-list">
 						<view   v-if="order.isPackage!=1" v-for="(item,index) in items" :key="index" class="item">
 							<view class="img-box">
-								<image :src="JSON.parse(item.jsonInfo).image" mode="aspectFill"></image>
+								<image :src="(item._json && item._json.image) ? item._json.image : 'https://cdn.his.cdwjyyh.com/images/img.png'" mode="aspectFill"></image>
 							</view>
 							<view class="info-box">
 								<view>
 									<view class="name-box ellipsis2">
-										<view v-if="item.isPrescribe==1" class="tag">处方药</view>{{JSON.parse(item.jsonInfo).productName}}
+										<view v-if="item.isPrescribe==1" class="tag">处方药</view>{{ (item._json && item._json.productName) ? item._json.productName : '' }}
 									</view>
-									<view class="spec">{{JSON.parse(item.jsonInfo).sku}}</view>
+									<view class="spec">{{ (item._json && item._json.sku) ? item._json.sku : '' }}</view>
 								</view>
 								<view class="price-num">
 									<view class="price">
 										<text class="unit">¥</text>
-										<text class="num">{{JSON.parse(item.jsonInfo).price.toFixed(2)}}</text>
+										<text class="num">{{ ((item._json && item._json.price) ? item._json.price : 0).toFixed(2) }}</text>
 									</view>
-									<view class="num">x{{JSON.parse(item.jsonInfo).num}}</view>
+									<view class="num"  v-if="order.isPackage==0">x{{ (item._json && item._json.num) ? item._json.num : 0 }}</view>
 								</view>
 							</view>
 						</view>
@@ -152,7 +153,7 @@
 							<text class="label">实付金额:</text>
 							<view class="price">
 								<text class="unit">¥</text>
-								<text class="num">{{order.payPrice}}</text>
+								<text class="num">{{order.subOrderList[0].payPrice.toFixed(2)}}</text>
 							</view>
 						</view>
 					</view>
@@ -162,8 +163,8 @@
 						<view class="item">
 							<text class="label">订单编号</text>
 							<view class="sn-box">
-								<text class="text">{{order.orderCode}}</text>
-								<view class="copy-btn" @click="copyOrderSn(order.orderCode)">复制</view>
+								<text class="text">{{order.subOrderList[0].subOrderCode}}</text>
+								<view class="copy-btn" @click="copyOrderSn(order.subOrderList[0].subOrderCode)">复制</view>
 							</view>
 						</view>
 						<view class="item">
@@ -177,13 +178,13 @@
 						</view>
 						<view   class="item">
 							<text class="label">支付金额</text>
-							<text class="text" v-if="order.payMoney!=null">¥{{order.payMoney.toFixed(2)}}</text>
+							<text class="text">¥{{order.subOrderList[0].payPrice||0}}</text>
 						</view>
 						<view   class="item">
 							<text class="label">代收金额</text>
-							<text class="text" v-if="order.payDelivery!=null">¥{{order.payDelivery.toFixed(2)}}</text>
+							<text class="text" >¥{{order.subOrderList[0].payDelivery||0}}</text>
 						</view>
-						<view v-if="order.status>0" class="item">
+						<view v-if="order.subOrderList[0].status>0" class="item">
 							<text class="label">支付时间</text>
 							<text class="text">{{order.payTime}}</text>
 						</view>
@@ -234,11 +235,11 @@
 				<view class="form-box">
 					<view class="form-item">
 						<text class="label">支付金额</text>
-						<input type="text" @input="moneyChange()" v-model="payMoney" maxlength="10" placeholder="支付金额" class="form-input" />
+						<input type="text" @input="moneyChange()" v-model="order.subOrderList[0].payMoney" maxlength="10" placeholder="支付金额" class="form-input" />
 					</view>
 					<view class="form-item">
 						<text class="label">代收金额</text>
-						<input type="text" disabled v-model="payDelivery" maxlength="10" placeholder="代收金额" class="form-input" />
+						<input type="text" disabled v-model="order.subOrderList[0].payDelivery" maxlength="10" placeholder="代收金额" class="form-input" />
 					</view>
 				</view>
 				<view class="btns">
@@ -328,13 +329,32 @@
 			getMyStoreOrderById(){
 				var data={orderId:this.orderId};
 				getMyStoreOrderById(data).then(res => {
-					if(res.code==200){
-						 this.order=res.order;
-						 this.items=res.items;
-						 this.payLimitTime=res.payLimitTime;
-						 this.prescribe=res.prescribe;
-						 this.payMoney=this.order.payMoney;
-						 this.payDelivery=this.order.payDelivery
+					if(res && res.code==200){
+						// 兼容两种返回结构:旧结构(res.order/res.items)与新结构(res.data)
+						let orderData = res.order || res.data || {};
+						// 从所有子订单中收集商品数据
+						let itemsData = [];
+						if (res.items) {
+							itemsData = res.items;
+						} else if (orderData.subOrderList && Array.isArray(orderData.subOrderList)) {
+							// 遍历所有子订单,收集商品
+							orderData.subOrderList.forEach(subOrder => {
+								if (subOrder && subOrder.items && Array.isArray(subOrder.items)) {
+									itemsData = itemsData.concat(subOrder.items);
+								}
+							});
+						}
+						this.order = orderData || {};
+						console.log("订单详情",this.order)
+						// 解析 jsonInfo,容错处理反引号等异常字符
+						this.items = (itemsData || []).map(it => {
+							const parsed = this.safeParseJson(it.jsonInfo);
+							return Object.assign({}, it, { _json: parsed });
+						});
+						this.payLimitTime = res.payLimitTime || orderData.payLimitTime || '';
+						this.prescribe = res.prescribe || orderData.prescribe || null;
+						this.payMoney = this.order.payMoney || this.order.payPrice || 0;
+						this.payDelivery = this.order.payDelivery || 0;
 					}else{
 						uni.showToast({
 							icon:'none',
@@ -344,6 +364,20 @@
 					}
 				});
 			},
+			// 安全解析JSON
+			safeParseJson(str){
+				if (!str || typeof str !== 'string') return {};
+				try {
+					return JSON.parse(str);
+				} catch(e1){
+					try {
+						const cleaned = str.replace(/`/g,'').replace(/\s+\}/g,'}').replace(/\{\s+/g,'{');
+						return JSON.parse(cleaned);
+					}catch(e2){
+						return {};
+					}
+				}
+			},
 			express(){
 				uni.navigateTo({
 					url: './storeOrderDelivery?orderId='+this.order.orderId
@@ -375,7 +409,7 @@
 <style lang="scss">
 	.fixed-top-box{
 		width: 100%;
-		background: linear-gradient(135deg, #2BC7B9 0%, #60CDC3 100%);
+		background: linear-gradient(90deg, #38D97D 0%, #02B176 100%);
 		position: fixed;
 		top: 0;
 		left: 0;
@@ -386,6 +420,7 @@
 		height: 476upx;
 		position: relative;
 		.bg{
+			background: linear-gradient(90deg, #38D97D 0%, #02B176 100%);
 			width: 100%;
 			height: 100%;
 			position: absolute;
@@ -449,7 +484,7 @@
 							line-height: 1;
 						}
 						.desc{
-							font-size: 26upx;
+							font-size: 28upx;
 							font-family: PingFang SC;
 							font-weight: 500;
 							color: #FFFFFF;
@@ -481,7 +516,7 @@
 							display: flex;
 							align-items: center;
 							.text{
-								font-size: 28upx;
+								font-size: 32upx;
 								font-family: PingFang SC;
 								font-weight: bold;
 								color: #333333;
@@ -493,7 +528,7 @@
 							}
 						}
 						.address{
-							font-size: 26upx;
+							font-size: 30upx;
 							font-family: PingFang SC;
 							font-weight: 500;
 							color: #999999;
@@ -534,7 +569,7 @@
 					flex-direction: column;
 					justify-content: space-between;
 					.name-box{
-						font-size: 28upx;
+						font-size: 32upx;
 						font-family: PingFang SC;
 						font-weight: 500;
 						color: #111111;
@@ -543,10 +578,10 @@
 							display: inline-block;
 							padding: 0 6upx;
 							height: 30upx;
-							background: linear-gradient(90deg, #2BC7B9 0%, #2BC7A4 100%);
+							background: linear-gradient(90deg, #02B176 0%, #2BC7A4 100%);
 							border-radius: 4upx;
 							margin-right: 10upx;
-							font-size: 22upx;
+							font-size: 26upx;
 							font-family: PingFang SC;
 							font-weight: bold;
 							color: #FFFFFF;
@@ -557,7 +592,7 @@
 					}
 					.spec{
 						margin-top: 18upx;
-						font-size: 24upx;
+						font-size: 28upx;
 						font-family: PingFang SC;
 						font-weight: 500;
 						color: #999999;
@@ -571,7 +606,7 @@
 							display: flex;
 							align-items: flex-end;
 							.unit{
-								font-size: 24upx;
+								font-size: 28upx;
 								font-family: PingFang SC;
 								font-weight: 500;
 								color: #111111;
@@ -579,7 +614,7 @@
 								margin-right: 4upx;
 							}
 							.num{
-								font-size: 32upx;
+								font-size: 34upx;
 								font-family: PingFang SC;
 								font-weight: 500;
 								color: #111111;
@@ -587,7 +622,7 @@
 							}
 						}
 						.num{
-							font-size: 24upx;
+							font-size: 28upx;
 							font-family: PingFang SC;
 							font-weight: 500;
 							color: #999999;
@@ -602,7 +637,7 @@
 				align-items: center;
 				justify-content: flex-end;
 				.discount{
-					font-size: 24upx;
+					font-size: 28upx;
 					font-family: PingFang SC;
 					font-weight: 500;
 					color: #999999;
@@ -610,7 +645,7 @@
 					margin-right: 30upx;
 				}
 				.label{
-					font-size: 24upx;
+					font-size: 28upx;
 					font-family: PingFang SC;
 					font-weight: 500;
 					color: #999999;
@@ -619,7 +654,7 @@
 					display: flex;
 					align-items: flex-end;
 					.unit{
-						font-size: 24upx;
+						font-size: 28upx;
 						font-family: PingFang SC;
 						font-weight: 500;
 						color: #FF6633;
@@ -627,7 +662,7 @@
 						margin-right: 4upx;
 					}
 					.num{
-						font-size: 32upx;
+						font-size: 34upx;
 						font-family: PingFang SC;
 						font-weight: bold;
 						color: #FF6633;
@@ -642,7 +677,7 @@
 			border-radius: 16upx;
 			padding: 40upx 30upx;
 			.title{
-				font-size: 30upx;
+				font-size: 32upx;
 				font-family: PingFang SC;
 				font-weight: bold;
 				color: #222222;
@@ -654,21 +689,21 @@
 				align-items: center;
 				justify-content: space-between;
 				.label{
-					font-size: 26upx;
+					font-size: 30upx;
 					font-family: PingFang SC;
 					font-weight: 500;
 					color: #666666;
 					line-height: 1;
 				}
 				.text{
-					font-size: 26upx;
+					font-size: 30upx;
 					font-family: PingFang SC;
 					font-weight: 500;
 					color: #222222;
 					line-height: 32upx;
 				}
 				.cont-text{
-					font-size: 26upx;
+					font-size: 30upx;
 					font-family: PingFang SC;
 					font-weight: 500;
 					color: #666666;
@@ -684,7 +719,7 @@
 						height: 32upx;
 						line-height: 32upx;
 						text-align: center;
-						font-size: 22upx;
+						font-size: 26upx;
 						font-family: PingFang SC;
 						font-weight: 500;
 						color: #222222;
@@ -727,14 +762,14 @@
 			width: 155upx;
 			height: 64upx;
 			line-height: 64upx;
-			font-size: 26upx;
+			font-size: 30upx;
 			font-family: PingFang SC;
 			font-weight: 500;
 			text-align: center;
 			border-radius: 32upx;
 			margin-left: 15upx;
 			&.share-btn{
-				background: #2BC7B9;
+				background: linear-gradient(136deg, #38D97D 0%, #02B176 100%);
 				color: #FFFFFF;
 				position: relative;
 				.share{
@@ -799,7 +834,7 @@
 					.label{
 						width: 160upx;
 						text-align: left;
-						font-size: 30upx;
+						font-size: 32upx;
 						line-height: 44upx;
 						font-family: PingFang SC;
 						font-weight: 500;
@@ -810,7 +845,7 @@
 						text-align: left;
 					}
 					.form-input{
-						font-size: 34upx;
+						font-size: 36upx;
 						font-family: PingFang SC;
 						font-weight: 500;
 						color: #222222;
@@ -831,11 +866,11 @@
 					height: 88upx;
 					line-height: 88upx;
 					text-align: center;
-					font-size: 30upx;
+					font-size: 34upx;
 					font-family: PingFang SC;
 					font-weight: bold;
 					color: #FFFFFF;
-					background: #2BC7B9;
+					background: linear-gradient(136deg, #38D97D 0%, #02B176 100%);
 					border-radius: 44upx;
 				}
 			}

+ 77 - 77
pages_company/storeProductPackage.vue

@@ -4,7 +4,7 @@
 			<view class="search-cont">
 				<view class="inner">
 					<image class="icon-search" src="https://cdn.his.cdwjyyh.com/images/search.png" mode=""></image>
-					<input type="text" @confirm="goSearch"   :value="form.title" placeholder="输入套餐名称" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
+					<input type="text" @confirm="goSearch"   :value="form.title" placeholder="输入套餐名称" placeholder-style="font-size:36rpx;color:#BBBBBB;font-family: PingFang SC;" />
 				</view>
 			</view>
 			<view class="cate-list">
@@ -235,18 +235,18 @@
 				padding: 0 24upx;
 				height: 64upx;
 				line-height: 64upx;
-				font-size: 28upx;
+				font-size: 32upx;
 				font-family: PingFang SC;
 				font-weight: 500;
-				color: #2BC7B9;
+				color: #02B176;
 				background: #F5FFFE;
 				border: 1px solid #8AD5CE;
 				border-radius: 32upx;
 				margin: 0 20upx 20upx 0;
 				&.active{
 					color: #FFFFFF;
-					background: #2BC7B9;
-					border: 1px solid #2BC7B9;
+					background: linear-gradient(136deg, #38D97D 0%, #02B176 100%);
+					border: 1px solid #02B176;
 				}
 			}
 		}
@@ -266,11 +266,11 @@
 				justify-content: space-between;
 				padding: 34upx 0 20upx;
 				.title{
-					font-size: 28upx;
-					font-family: PingFang SC;
-					font-weight: 500;
-					color: #111111;
-				}
+								font-size: 32upx;
+								font-family: PingFang SC;
+								font-weight: 500;
+								color: #111111;
+							}
 				// .num{
 				// 	font-size: 26upx;
 				// 	font-family: PingFang SC;
@@ -302,7 +302,7 @@
 						font-weight: 500;
 						line-height: 1;
 						&.success{
-							color: #2BC7B9;
+							color: #02B176;
 						}
 						&.black{
 							color: #111111;
@@ -337,7 +337,7 @@
 						flex-direction: column;
 						justify-content: space-between;
 						.name-box{
-							font-size: 28upx;
+							font-size: 32upx;
 							font-family: PingFang SC;
 							font-weight: 500;
 							color: #111111;
@@ -346,10 +346,10 @@
 								display: inline-block;
 								padding: 0 6upx;
 								height: 30upx;
-								background: linear-gradient(90deg, #2BC7B9 0%, #2BC7A4 100%);
+								background: linear-gradient(90deg, #02B176 0%, #2BC7A4 100%);
 								border-radius: 4upx;
 								margin-right: 10upx;
-								font-size: 22upx;
+								font-size: 26upx;
 								font-family: PingFang SC;
 								font-weight: bold;
 								color: #FFFFFF;
@@ -359,7 +359,7 @@
 							}
 						}
 						.spec{
-							font-size: 24upx;
+							font-size: 28upx;
 							font-family: PingFang SC;
 							font-weight: 500;
 							color: #999999;
@@ -370,11 +370,11 @@
 							display: flex;
 							align-items: center;
 							justify-content: space-between;
-							.price{
+								.price{
 								display: flex;
 								align-items: flex-end;
 								.unit{
-									font-size: 24upx;
+									font-size: 28upx;
 									font-family: PingFang SC;
 									font-weight: 500;
 									color: #111111;
@@ -382,7 +382,7 @@
 									margin-right: 4upx;
 								}
 								.num{
-									font-size: 32upx;
+									font-size: 36upx;
 									font-family: PingFang SC;
 									font-weight: 500;
 									color: #111111;
@@ -390,7 +390,7 @@
 								}
 							}
 							.amount{
-								font-size: 24upx;
+								font-size: 28upx;
 								font-family: PingFang SC;
 								font-weight: 500;
 								color: #999999;
@@ -406,7 +406,7 @@
 					display: none;
 				}
 				.display-more{
-					font-size: 24upx;
+					font-size: 28upx;
 					font-family: PingFang SC;
 					font-weight: 500;
 					color: #999999;
@@ -420,73 +420,73 @@
 					align-items: center;
 					justify-content: space-between;
 					.amount-paid{
+					display: flex;
+					align-items: center;
+					.label{
+						font-size: 28upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #999999;
+						line-height: 1;
+					}
+					.price-box{
 						display: flex;
-						align-items: center;
-						.label{
-							font-size: 24upx;
+						align-items: flex-end;
+						.unit{
+							font-size: 28upx;
 							font-family: PingFang SC;
 							font-weight: 500;
-							color: #999999;
-							line-height: 1;
+							color: #FF6633;
+							line-height: 1.2;
+							margin-right: 4upx;
 						}
-						.price-box{
-							display: flex;
-							align-items: flex-end;
-							.unit{
-								font-size: 24upx;
-								font-family: PingFang SC;
-								font-weight: 500;
-								color: #FF6633;
-								line-height: 1.2;
-								margin-right: 4upx;
-							}
-							.num{
-								font-size: 32upx;
-								font-family: PingFang SC;
-								font-weight: bold;
-								color: #FF6633;
-								line-height: 1;
-							}
+						.num{
+							font-size: 36upx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #FF6633;
+							line-height: 1;
 						}
 					}
-					.btn-box{
-						box-sizing: border-box;
-						display: flex;
-						align-items: center;
-						.btn{
-							width: 155upx;
-							height: 64upx;
-							line-height: 64upx;
-							font-size: 26upx;
-							font-family: PingFang SC;
-							font-weight: 500;
-							text-align: center;
-							border-radius: 32upx;
-							margin-left: 15upx;
-							&:first-child{
-								margin-left: 0;
-							}
-							&.cancel{
-								border: 1px solid #DDDDDD;
-								color: #666666;
-							}
-							&.pay{
-								background: #2BC7B9;
-								color: #FFFFFF;
-								position: relative;
-								.share{
-									display: inline-block;
-									position: absolute;
-									top: 0;
-									left: 0;
-									width: 100%;
-									height: 100%rpx;
-									opacity: 0;
-								}
+				}
+				.btn-box{
+					box-sizing: border-box;
+					display: flex;
+					align-items: center;
+					.btn{
+						width: 155upx;
+						height: 64upx;
+						line-height: 64upx;
+						font-size: 30upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						text-align: center;
+						border-radius: 32upx;
+						margin-left: 15upx;
+						&:first-child{
+							margin-left: 0;
+						}
+						&.cancel{
+							border: 1px solid #DDDDDD;
+							color: #666666;
+						}
+						&.pay{
+							background: linear-gradient(136deg, #38D97D 0%, #02B176 100%);
+							color: #FFFFFF;
+							position: relative;
+							.share{
+								display: inline-block;
+								position: absolute;
+								top: 0;
+								left: 0;
+								width: 100%;
+								height: 100%rpx;
+								opacity: 0;
 							}
 						}
 					}
 				}
+				}
 			}
 		}
 		

+ 9 - 9
pages_company/storeProductPackageDetails.vue

@@ -335,7 +335,7 @@
 			.share-box{
 				width: 120upx;
 				height: 46upx;
-				border: 1px solid #2BC7B9;
+				border: 1px solid #02B176;
 				border-radius: 23upx;
 				display: flex;
 				align-items: center;
@@ -345,7 +345,7 @@
 					font-size: 26upx;
 					font-family: PingFang SC;
 					font-weight: 500;
-					color: #2BC7B9;
+					color: #02B176;
 				}
 				image{
 					margin-left: 2rpx;
@@ -381,7 +381,7 @@
 				display: inline-block;
 				padding: 0 6upx;
 				height: 30upx;
-				background: linear-gradient(90deg, #2BC7B9 0%, #2BC7A4 100%);
+				background: linear-gradient(90deg, #02B176 0%, #2BC7A4 100%);
 				border-radius: 4upx;
 				margin-right: 10upx;
 				font-size: 22upx;
@@ -586,7 +586,7 @@
 					background: #FF6633;
 				}
 				&.buy{
-					background: #2BC7B9;
+					background: linear-gradient(136deg, #38D97D 0%, #02B176 100%);
 				}
 			}
 		}
@@ -679,7 +679,7 @@
 					&.active{
 						background: #F1FFFE;
 						border: 1px solid #8AD5CE;
-						color: #2BC7B9;
+						color: #02B176;
 					}
 				}
 			}
@@ -736,7 +736,7 @@
 			font-family: PingFang SC;
 			font-weight: bold;
 			color: #FFFFFF;
-			background: #2BC7B9;
+			background: linear-gradient(136deg, #38D97D 0%, #02B176 100%);
 			border-radius: 44upx;
 			margin-top: 30upx;
 			// margin-bottom: 30upx;
@@ -789,7 +789,7 @@
 							display: inline-block;
 							padding: 0 6upx;
 							height: 30upx;
-							background: linear-gradient(90deg, #2BC7B9 0%, #2BC7A4 100%);
+							background: linear-gradient(90deg, #02B176 0%, #2BC7A4 100%);
 							border-radius: 4upx;
 							margin-right: 10upx;
 							font-size: 22upx;
@@ -877,7 +877,7 @@
 				font-size: 28upx;
 				font-family: PingFang SC;
 				font-weight: 500;
-				color: #2BC7B9;
+				color: #02B176;
 			}
 		}
 		.btn{
@@ -890,7 +890,7 @@
 			font-weight: 500;
 			color: #FFFFFF;
 			border: 1px solid #D2E6FF;
-			background: linear-gradient(135deg, #2BC7B9 0%, #60CDC3 100%);
+			background: linear-gradient(90deg, #38D97D 0%, #02B176 100%);
 			border-radius: 24upx;
 			margin-left: 30upx;
 		}

+ 2 - 2
pages_course/becomeVIP.vue

@@ -549,7 +549,7 @@
 	  margin: 0 auto;
 	  height: 80rpx;
 	  line-height: 60rpx;
-	  font-size: 28rpx;
+	  font-size: 32rpx;
 	  padding: 10rpx 20rpx;
 	}
 	.submitname{
@@ -651,7 +651,7 @@
 			text-align: center;
 			background: #1777ff;
 			border-radius: 40rpx;
-			font-size: 30rpx;
+			font-size: 34rpx;
 			font-family: PingFang SC;
 			font-weight: 500;
 			color: rgba(255, 255, 255, 1);

+ 9 - 9
pages_course/components/Invitation.vue

@@ -234,12 +234,12 @@
 			justify-content: space-between;
 
 			.left {
-				font-size: 26rpx;
+				font-size: 30rpx;
 				color: #666666;
 			}
 
 			.right {
-				font-size: 26rpx;
+				font-size: 30rpx;
 				color: #999999;
 				display: flex;
 				align-items: center;
@@ -268,7 +268,7 @@
 				}
 
 				.number {
-					font-size: 32rpx;
+					font-size: 36rpx;
 					color: #666666;
 					text-align: center;
 					font-family: Roboto Flex, Roboto Flex;
@@ -285,7 +285,7 @@
 
 						.avatar-text {
 							color: #ffffff;
-							font-size: 24rpx;
+							font-size: 28rpx;
 							font-weight: 500;
 						}
 					}
@@ -297,19 +297,19 @@
 					text-overflow: ellipsis;
 					white-space: nowrap;
 					font-weight: 500;
-					font-size: 32rpx;
+					font-size: 36rpx;
 					color: #333333;
 				}
 
 				.txt {
-					font-size: 24rpx;
+					font-size: 28rpx;
 					color: #999999;
 					margin-right: 16rpx;
 				}
 
 				.num {
 					font-weight: 500;
-					font-size: 32rpx;
+					font-size: 36rpx;
 					color: #02B176;
 				}
 			}
@@ -318,7 +318,7 @@
 		.loading-text {
 			text-align: center;
 			color: #999;
-			font-size: 28rpx;
+			font-size: 32rpx;
 			padding: 40rpx;
 			display: flex;
 			align-items: center;
@@ -329,7 +329,7 @@
 		.empty-text {
 			text-align: center;
 			color: #999;
-			font-size: 28rpx;
+			font-size: 32rpx;
 			padding: 80rpx 40rpx;
 		}
 	}

+ 2 - 2
pages_course/components/ThreeItemSwiper.vue

@@ -94,13 +94,13 @@
 
 	.text-title {
 		font-weight: 500;
-		font-size: 32rpx;
+		font-size: 36rpx;
 		color: #222222;
 		margin: 20rpx 0 10rpx;
 	}
 
 	.text-desc {
-		font-size: 24rpx;
+		font-size: 28rpx;
 		color: #757575;
 	}
 </style>

+ 1 - 1
pages_course/components/chatInput.vue

@@ -160,7 +160,7 @@
 
 	.input-field {
 		border: none;
-		font-size: 32rpx;
+		font-size: 36rpx;
 		color: #ffffff;
 		background: transparent;
 		flex: 1;

+ 6 - 6
pages_course/components/commentBox.vue

@@ -549,7 +549,7 @@
 		flex-shrink: 0;
 		font-family: PingFang SC, PingFang SC;
 		font-weight: 600;
-		font-size: 28rpx;
+		font-size: 32rpx;
 		color: #222222;
 		margin-right: 16rpx;
 	}
@@ -558,7 +558,7 @@
 	}
 	.list-con {
 		font-family: PingFang SC, PingFang SC;
-		font-size: 28rpx;
+		font-size: 32rpx;
 		color: #222222;
 	}
 	.nav-bar {
@@ -604,7 +604,7 @@
 		&-name {
 			font-family: PingFang SC, PingFang SC;
 			font-weight: 600;
-			font-size: 28rpx;
+			font-size: 32rpx;
 			color: #222222;
 		}
 
@@ -615,7 +615,7 @@
 			margin-right: 22rpx;
 			font-family: PingFang SC, PingFang SC;
 			font-weight: 400;
-			font-size: 23rpx;
+			font-size: 27rpx;
 			color: #999999;
 		}
 	}
@@ -652,13 +652,13 @@
 		.uni-input {
 			flex: 1;
 			margin-right: 32rpx;
-			font-size: 30rpx;
+			font-size: 34rpx;
 		}
 	
 		.send {
 			font-family: PingFang SC, PingFang SC;
 			font-weight: 400;
-			font-size: 28rpx;
+			font-size: 32rpx;
 			color: #FFFFFF !important;
 			flex-shrink: 0;
 			padding: 0 20rpx;

+ 4 - 4
pages_course/components/descInfo.vue

@@ -84,7 +84,7 @@
 		background-color: #fff;
 		font-family: PingFang SC, PingFang SC;
 		font-weight: 400;
-		font-size: 28rpx;
+		font-size: 32rpx;
 		color: #222222;
 		line-height: 42rpx;
 		word-break: break-word;
@@ -92,13 +92,13 @@
 		&-title {
 			padding: 24rpx 0;
 			font-weight: 500;
-			font-size: 32rpx;
+			font-size: 36rpx;
 		}
 	
 		&-info {
 			margin-bottom: 24rpx;
 			@include u-flex(row, center, space-between);
-			font-size: 26rpx;
+			font-size: 30rpx;
 			color: #757575;
 	
 			&-l {
@@ -139,7 +139,7 @@
 		@include u-flex(row, center, flex-end);
 		color: #FF5C03;
 		font-weight: 400;
-		font-size: 24rpx;
+		font-size: 28rpx;
 	
 		image {
 			width: 32rpx;

+ 8 - 8
pages_course/components/descInfoNav.vue

@@ -95,24 +95,24 @@
 		padding: 30rpx 32rpx;
 		font-family: PingFang SC, PingFang SC;
 		font-weight: 500;
-		font-size: 36rpx;
+		font-size: 40rpx;
 		color: #222222;
 	}
 	.subtitlebox {
 		padding: 30rpx 0;
 		font-family: PingFang SC, PingFang SC;
 		font-weight: 500;
-		font-size: 36rpx;
+		font-size: 40rpx;
 		color: #222222;
 	}
 	.title-content {
 		padding: 0 32rpx;
 		background-color: #fff;
-		font-size: 28rpx;
+		font-size: 32rpx;
 		line-height: 1.6;
 	
 		.title {
-			font-size: 36rpx;
+			font-size: 40rpx;
 			font-weight: 500;
 			color: #414858;
 		}
@@ -128,7 +128,7 @@
 		background-color: #fff;
 		font-family: PingFang SC, PingFang SC;
 		font-weight: 400;
-		font-size: 28rpx;
+		font-size: 32rpx;
 		color: #222222;
 		line-height: 42rpx;
 		word-break: break-word;
@@ -136,13 +136,13 @@
 		&-title {
 			margin-bottom: 24rpx;
 			font-weight: 500;
-			font-size: 32rpx;
+			font-size: 36rpx;
 		}
 	
 		&-info {
 			margin-bottom: 24rpx;
 			@include u-flex(row, center, space-between);
-			font-size: 26rpx;
+			font-size: 30rpx;
 			color: #757575;
 	
 			&-l {
@@ -183,7 +183,7 @@
 		@include u-flex(row, center, flex-end);
 		color: #FF5C03;
 		font-weight: 400;
-		font-size: 24rpx;
+		font-size: 28rpx;
 	
 		image {
 			width: 32rpx;

+ 1 - 1
pages_course/components/giftPopup.vue

@@ -123,7 +123,7 @@ export default {
     
     .title {
       text-align: center;
-      font-size: 40rpx;
+      font-size: 44rpx;
       font-weight: 500;
       margin-bottom: 40rpx;
     }

+ 1 - 1
pages_course/components/like.vue

@@ -197,7 +197,7 @@
 <style scoped lang="scss">
 
 	.like-icon {
-		font-size: 28rpx;
+		font-size: 32rpx;
 		color: #999;
 		transition: all 0.3s ease;
 	}

+ 5 - 5
pages_course/components/liveGoods.vue

@@ -73,7 +73,7 @@ export default {
 			.left {
 				background-color: rgba(0, 0, 0, 0.8);
 				padding: 12rpx;
-				font-size: 22rpx;
+				font-size: 26rpx;
 				display: flex;
 				justify-content: space-between;
 				align-items: center;
@@ -92,7 +92,7 @@ export default {
 			padding: 4rpx;
 	
 			.price {
-				font-size: 30rpx;
+				font-size: 34rpx;
 	
 				.red {
 					color: #ff5701;
@@ -103,14 +103,14 @@ export default {
 				.del {
 					color: #828282;
 					font-weight: 500;
-					font-size: 28rpx;
+					font-size: 32rpx;
 					text-decoration: line-through;
 				}
 			}
 	
 			.title {
 				font-weight: 500;
-				font-size: 30rpx;
+				font-size: 34rpx;
 				margin: 10rpx 0 12rpx;
 			}
 	
@@ -121,7 +121,7 @@ export default {
 				padding: 16rpx 0;
 				border-radius: 10rpx;
 				font-weight: 500;
-				font-size: 30rpx;
+				font-size: 34rpx;
 			}
 		}
 	}

+ 12 - 12
pages_course/components/liveVideo.vue

@@ -595,9 +595,9 @@
 				if (this.liveItem.videoFileSize && this.liveItem.videoDuration) {
 					// 码率 = 文件大小(字节) / 时长(秒) × 8 (转换为bps) × 5
 					const calculatedBitrate = (this.liveItem.videoFileSize / this.liveItem.videoDuration) * 8 * 5;
-					console.log(
-						`使用接口数据计算码率: ${calculatedBitrate} bps (文件大小: ${this.liveItem.videoFileSize} 字节, 时长: ${this.liveItem.videoDuration} 秒)`
-					);
+					// console.log(
+					// 	`使用接口数据计算码率: ${calculatedBitrate} bps (文件大小: ${this.liveItem.videoFileSize} 字节, 时长: ${this.liveItem.videoDuration} 秒)`
+					// );
 					return calculatedBitrate;
 				} else {
 					// 如果任一字段为空,使用默认码率 1500 bps
@@ -932,7 +932,7 @@
 
 			.time {
 				color: #ffffff;
-				font-size: 20rpx;
+				font-size: 24rpx;
 				margin-left: 10rpx;
 			}
 
@@ -940,7 +940,7 @@
 				position: absolute;
 				left: 10vh;
 				bottom: 24rpx;
-				font-size: 20rpx;
+				font-size: 24rpx;
 				background-color: rgba(57, 57, 57, 0.6);
 				border-radius: 15rpx;
 				z-index: 999999 !important;
@@ -953,7 +953,7 @@
 				top: 50%;
 				left: 50%;
 				transform: translate(-50%, -50%);
-				font-size: 36rpx;
+				font-size: 40rpx;
 				color: #fff;
 			}
 
@@ -1035,7 +1035,7 @@
 
 					.exit-text {
 						color: #ffffff;
-						font-size: 22rpx;
+						font-size: 26rpx;
 						white-space: nowrap;
 					}
 				}
@@ -1122,7 +1122,7 @@
 
 			.live-name {
 				font-weight: 600;
-				font-size: 36rpx;
+				font-size: 40rpx;
 			}
 
 			.countdown-display {
@@ -1131,12 +1131,12 @@
 				margin: 30rpx 0;
 
 				.countdown-label {
-					font-size: 24rpx;
+					font-size: 28rpx;
 					color: #999999;
 				}
 
 				.countdown-separator {
-					font-size: 24rpx;
+					font-size: 28rpx;
 					color: #999999;
 				}
 
@@ -1149,7 +1149,7 @@
 					overflow: hidden;
 					margin: 0 8rpx;
 					font-weight: 500;
-					font-size: 28rpx;
+					font-size: 32rpx;
 					color: #FFFFFF;
 					line-height: 40rpx;
 				}
@@ -1186,7 +1186,7 @@
 
 		.no-live-title {
 			margin-top: 30rpx;
-			font-size: 42rpx;
+			font-size: 46rpx;
 			font-weight: 500;
 		}
 	}

+ 4 - 4
pages_course/components/lotteryPopup.vue

@@ -120,7 +120,7 @@ export default {
   border-radius: 8rpx;
   margin: 4rpx;
   font-weight: 600;
-  font-size: 24rpx;
+  font-size: 28rpx;
   color: #f85d22;
   line-height: 40rpx;
 }
@@ -144,7 +144,7 @@ export default {
   box-shadow: 0rpx 10rpx 8rpx 4rpx rgba(246, 82, 25, 0.5);
   border-radius: 44rpx;
   font-weight: 500;
-  font-size: 36rpx;
+  font-size: 40rpx;
   color: #f4410b;
   text-align: center;
 }
@@ -169,11 +169,11 @@ export default {
 }
 
 .fs24 {
-  font-size: 24rpx;
+  font-size: 28rpx;
 }
 
 .fs28 {
-  font-size: 28rpx;
+  font-size: 32rpx;
 }
 
 .mt30 {

+ 4 - 4
pages_course/components/ques.vue

@@ -81,21 +81,21 @@
 		box-sizing: border-box;
 		font-family: PingFang SC, PingFang SC;
 		font-weight: 400;
-		font-size: 28rpx;
+		font-size: 32rpx;
 		color: #222222;
 	}
 
 	.ques-content-tit {
 		font-family: PingFang SC, PingFang SC;
 		font-weight: 600;
-		font-size: 36rpx;
+		font-size: 40rpx;
 		color: #222222;
 	}
 
 	.ques-title {
 		margin: 48rpx 0 34rpx 0;
 		font-weight: 500;
-		font-size: 32rpx;
+		font-size: 36rpx;
 		white-space: normal;
 	}
 
@@ -112,7 +112,7 @@
 		text-align: center;
 		font-family: PingFang SC, PingFang SC;
 		font-weight: 400;
-		font-size: 24rpx;
+		font-size: 28rpx;
 		color: #FFFFFF;
 		display: inline-block;
 	}

+ 9 - 9
pages_course/components/shopPopup.vue

@@ -62,8 +62,8 @@
               <view class="goods-people">{{ item.sales }} 人已购</view>
               <view class="goods-shop">
                 <text class="nummber">
-                  <text style="font-size: 20rpx; font-weight: 600">¥</text>
-                  <text style="font-size: 36rpx; font-weight: bold">
+                  <text style="font-size: 24rpx; font-weight: 600">¥</text>
+                  <text style="font-size: 40rpx; font-weight: bold">
                     {{ Math.trunc(item.price) }}
                   </text>
                   .{{ getPureDecimal(item.price) ? getPureDecimal(item.price) : '00' }}
@@ -207,12 +207,12 @@ export default {
       margin-left: 20rpx;
       padding: 0 32rpx;
       box-sizing: border-box;
-      font-size: 24rpx;
+      font-size: 28rpx;
       margin-right: 24rpx;
     }
 
     .search-top {
-      font-size: 20rpx;
+      font-size: 24rpx;
       color: #222222;
       text-align: center;
     }
@@ -251,7 +251,7 @@ export default {
           border-radius: 16rpx 0rpx 16rpx 0rpx;
           text-align: center;
           font-weight: 500;
-          font-size: 28rpx;
+          font-size: 32rpx;
           color: #ffffff;
         }
       }
@@ -261,13 +261,13 @@ export default {
 
         .goods-title {
           font-weight: 500;
-          font-size: 30rpx;
+          font-size: 34rpx;
           color: #000000;
           margin-bottom: 10rpx;
         }
 
         .goods-people {
-          font-size: 22rpx;
+          font-size: 26rpx;
           color: #e69a22;
           height: 56rpx;
         }
@@ -278,7 +278,7 @@ export default {
 
           .nummber {
             color: #ff5c03;
-            font-size: 22rpx;
+            font-size: 26rpx;
             font-weight: 500;
           }
 
@@ -298,7 +298,7 @@ export default {
               background: linear-gradient(270deg, #ff5c03 0%, #ffac64 100%);
               border-radius: 0rpx 8rpx 8rpx 0rpx;
               font-weight: 500;
-              font-size: 30rpx;
+              font-size: 34rpx;
               color: #ffffff;
             }
           }

+ 4 - 4
pages_course/components/viewer.vue

@@ -228,7 +228,7 @@ export default {
     .rank-number {
       text-align: center;
       margin-right: 20rpx;
-      font-size: 28rpx;
+      font-size: 32rpx;
     }
     
     .avatar-container {
@@ -242,7 +242,7 @@ export default {
         
         .avatar-text {
           color: #ffffff;
-          font-size: 24rpx;
+          font-size: 28rpx;
           font-weight: 500;
         }
       }
@@ -259,7 +259,7 @@ export default {
   .loading-text {
     text-align: center;
     color: #999;
-    font-size: 28rpx;
+    font-size: 32rpx;
     padding: 40rpx;
     display: flex;
     align-items: center;
@@ -270,7 +270,7 @@ export default {
   .empty-text {
     text-align: center;
     color: #999;
-    font-size: 28rpx;
+    font-size: 32rpx;
     padding: 80rpx 40rpx;
   }
 }

+ 1 - 1
pages_course/components/winningPopup.vue

@@ -163,7 +163,7 @@ export default {
     
     .title {
       text-align: center;
-      font-size: 40rpx;
+      font-size: 44rpx;
       font-weight: 500;
       margin-bottom: 40rpx;
     }

+ 2 - 2
pages_course/courseCover.vue

@@ -134,7 +134,7 @@
 	.title-content{
 		padding: 20rpx;
 		.subtitlebox{
-			font-size: 32rpx;
+			font-size: 36rpx;
 			font-weight: bold;
 		}
 	}
@@ -150,7 +150,7 @@
 			height: 80rpx;
 			background: #ff5c03;
 			border-radius: 40rpx;
-			font-size: 36rpx;
+			font-size: 40rpx;
 			font-family: PingFang SC;
 			font-weight: 500;
 			text-align: center;

+ 1 - 1
pages_course/feedback.vue

@@ -424,7 +424,7 @@
 		height: 88rpx;
 		line-height: 88rpx;
 		text-align: center;
-		font-size: 30rpx;
+		font-size: 34rpx;
 		font-family: PingFang SC;
 		color: #FFFFFF;
 		background: rgb(0,178,106);

+ 15 - 15
pages_course/integral.vue

@@ -299,7 +299,7 @@ export default {
 			}
 			
 			.header-title {
-				font-size: 34rpx;
+				font-size: 38rpx;
 				font-weight: 500;
 				color: #ffffff;
 			}
@@ -325,20 +325,20 @@ export default {
 				z-index: 1;
 				
 				.balance-title {
-					font-size: 24rpx;
+					font-size: 28rpx;
 					color: rgba(255, 255, 255, 0.8);
 					margin-bottom: 10rpx;
 				}
 				
 				.balance-amount {
-					font-size: 60rpx;
+					font-size: 64rpx;
 					font-weight: bold;
 					color: #FFFFFF;
 					margin-bottom: 10rpx;
 				}
 				
 				.balance-desc {
-					font-size: 20rpx;
+					font-size: 24rpx;
 					color: rgba(255, 255, 255, 0.8);
 				}
 			}
@@ -368,13 +368,13 @@ export default {
 				margin-bottom: 30rpx;
 				
 				.sign-title {
-					font-size: 28rpx;
+					font-size: 32rpx;
 					font-weight: 600;
 					color: #333333;
 				}
 				
 				.sign-days {
-					font-size: 22rpx;
+					font-size: 26rpx;
 					color: #FF6B00;
 				}
 			}
@@ -405,7 +405,7 @@ export default {
 							top: 50%;
 							left: 50%;
 							transform: translate(-50%, -50%);
-						font-size: 24rpx;
+						font-size: 28rpx;
 						font-weight: 600;
 						color: #ffffff;
 						margin-bottom: 5rpx;
@@ -414,7 +414,7 @@ export default {
 					
 					
 					.sign-day {
-						font-size: 20rpx;
+						font-size: 24rpx;
 						color: #999999;
 						margin-top: 8rpx;
 					}
@@ -439,7 +439,7 @@ export default {
 				justify-content: center;
 				
 				text {
-					font-size: 28rpx;
+					font-size: 32rpx;
 					font-weight: 600;
 					color: #FFFFFF;
 				}
@@ -453,7 +453,7 @@ export default {
 			padding: 30rpx;
 			
 			.section-title {
-				font-size: 28rpx;
+				font-size: 32rpx;
 				font-weight: 600;
 				color: #333333;
 				margin-bottom: 30rpx;
@@ -477,7 +477,7 @@ export default {
 					}
 					
 					.benefit-name {
-						font-size: 22rpx;
+						font-size: 26rpx;
 						color: #666666;
 					}
 				}
@@ -492,7 +492,7 @@ export default {
 			padding: 30rpx;
 			
 			.section-title {
-				font-size: 28rpx;
+				font-size: 32rpx;
 				font-weight: 600;
 				color: #333333;
 				margin-bottom: 30rpx;
@@ -529,14 +529,14 @@ export default {
 						flex: 1;
 						
 						.task-title {
-							font-size: 24rpx;
+							font-size: 28rpx;
 							font-weight: 500;
 							color: #333333;
 							margin-bottom: 5rpx;
 						}
 						
 						.task-desc {
-							font-size: 20rpx;
+							font-size: 24rpx;
 							color: #999999;
 						}
 					}
@@ -549,7 +549,7 @@ export default {
 						display: flex;
 						align-items: center;
 						justify-content: center;
-						font-size: 22rpx;
+						font-size: 26rpx;
 						font-weight: 500;
 						color: #FFFFFF;
 					}

+ 33 - 33
pages_course/living.vue

@@ -53,13 +53,13 @@
 					</view>
 					<view class="side-item" @click="onLike">
 						<LikeButton :initialCount="100" :heartsPerClick="5" @like="onLike" />
-						<view class="txt" style="font-size: 30rpx;">{{ formattedLikeCount || 0 }}</view>
+						<view class="txt" style="font-size: 34rpx;">{{ formattedLikeCount || 0 }}</view>
 					</view>
 					<view class="side-item">
 						<button open-type="share" class="button button-reset">
 							<image class="image" src="https://cdn.his.cdwjyyh.com/images/weixin1.png" mode="widthFix" />
 						</button>
-						<view class="txt" style="font-size: 30rpx;">分享</view>
+						<view class="txt" style="font-size: 34rpx;">分享</view>
 					</view>
 				</view>
 				<!-- 直播 -->
@@ -98,8 +98,8 @@
 							ref="scrollView" scroll-with-animation="true" :scroll-animation-duration="300">
 
 							<view class="list justify-start" v-for="(item, talkIndex) in talklist || []"
-								:key="item.uniqueId || talkIndex" :id="`list_${item.uniqueId || talkIndex}`"
-								v-show="item.cmd != 'red' && item.cmd != 'out' && item.cmd != 'entry'">
+					:key="talkIndex" :id="`list_${item.uniqueId || talkIndex}`"
+					v-show="item.cmd != 'red' && item.cmd != 'out' && item.cmd != 'entry'">
 								<view class="talk-list justify-start">
 									<view class="fs30 talk-item" style="max-width: 100%;">
 										<text class="nickname"
@@ -3690,7 +3690,7 @@
 					height: 52rpx;
 					background: rgba(0, 0, 0, 0.5);
 					border-radius: 26rpx;
-					font-size: 30rpx;
+					font-size: 34rpx;
 					color: #ffffff;
 					text-align: center;
 					line-height: 52rpx;
@@ -3733,7 +3733,7 @@
 
 		.side-item {
 			font-weight: 500;
-			font-size: 22rpx;
+			font-size: 26rpx;
 			color: #ffffff;
 			margin-bottom: 26rpx;
 			text-align: center;
@@ -3760,7 +3760,7 @@
 			}
 
 			.txt {
-				font-size: 30rpx;
+				font-size: 34rpx;
 				margin-top: 4rpx;
 			}
 		}
@@ -3903,7 +3903,7 @@
 
 		.title {
 			color: #c32008;
-			font-size: 34rpx;
+			font-size: 38rpx;
 			font-weight: 600;
 			margin: 20rpx 0 40rpx;
 		}
@@ -3913,7 +3913,7 @@
 			display: flex;
 			justify-content: space-between;
 			align-items: center;
-			font-size: 28rpx;
+			font-size: 32rpx;
 			margin: 10rpx 0;
 
 			.txt {
@@ -3922,7 +3922,7 @@
 		}
 
 		.tip {
-			font-size: 28rpx;
+			font-size: 32rpx;
 			color: #414141;
 			margin: 40rpx 0;
 		}
@@ -3934,7 +3934,7 @@
 			background: linear-gradient(180deg, #ff7c30 0%, #ff3a1e 100%);
 			border-radius: 28rpx;
 			font-weight: 500;
-			font-size: 32rpx;
+			font-size: 36rpx;
 			color: #ffffff;
 			text-align: center;
 		}
@@ -3958,7 +3958,7 @@
 		}
 
 		.tip {
-			font-size: 36rpx;
+			font-size: 40rpx;
 			color: #414141;
 			margin: 40rpx 0;
 		}
@@ -3970,7 +3970,7 @@
 			background: linear-gradient(180deg, #fdfbb8 0%, #b79243 100%);
 			border-radius: 28rpx;
 			font-weight: 500;
-			font-size: 32rpx;
+			font-size: 36rpx;
 			color: #ffffff;
 			text-align: center;
 		}
@@ -3996,13 +3996,13 @@
 			align-items: center;
 
 			.title {
-				font-size: 36rpx;
+				font-size: 40rpx;
 				color: #ff3a1e;
 				margin: 180rpx 0 90rpx;
 			}
 
 			.txt {
-				font-size: 28rpx;
+				font-size: 32rpx;
 				color: #ffecc3;
 				margin: 80rpx 0 40rpx;
 			}
@@ -4014,7 +4014,7 @@
 				background: linear-gradient(180deg, #fff4d5 0%, #ffe5b1 100%);
 				border-radius: 48rpx;
 				font-weight: 600;
-				font-size: 36rpx;
+				font-size: 40rpx;
 				color: #c32008;
 				text-align: center;
 			}
@@ -4038,7 +4038,7 @@
 			.title {
 				width: 100%;
 				font-weight: 600;
-				font-size: 40rpx;
+				font-size: 44rpx;
 				color: #ffffff;
 				text-shadow: 0px 4rpx 8rpx rgba(255, 89, 2, 0.8);
 				position: absolute;
@@ -4056,12 +4056,12 @@
 
 			.title {
 				font-weight: 500;
-				font-size: 32rpx;
+				font-size: 36rpx;
 				text-align: center;
 			}
 
 			.button {
-				font-size: 32rpx;
+				font-size: 36rpx;
 				margin-top: 20rpx;
 				background: linear-gradient(270deg, #ff4702 0%, #fe6304 100%);
 				color: #fff;
@@ -4118,22 +4118,22 @@
 
 				.title {
 					font-weight: 500;
-					font-size: 30rpx;
+					font-size: 34rpx;
 					margin: 16rpx 0 12rpx;
 				}
 
 				.price {
-					font-size: 40rpx;
+					font-size: 44rpx;
 
 					.bold {
-						font-size: 56rpx;
+						font-size: 60rpx;
 						font-weight: 600;
 					}
 				}
 
 				.txt {
 					font-weight: 500;
-					font-size: 30rpx;
+					font-size: 34rpx;
 					margin: 5rpx 0;
 				}
 
@@ -4144,7 +4144,7 @@
 					padding: 16rpx 0;
 					border-radius: 40rpx;
 					font-weight: 500;
-					font-size: 30rpx;
+					font-size: 34rpx;
 					width: 70%;
 					margin-top: 26rpx;
 				}
@@ -4177,7 +4177,7 @@
 
 			.left {
 				font-weight: 600;
-				font-size: 28rpx;
+				font-size: 32rpx;
 
 				.orange {
 					color: #F4A007;
@@ -4198,18 +4198,18 @@
 				border: 1rpx solid transparent;
 
 				.name {
-					font-size: 24rpx;
+					font-size: 28rpx;
 					color: rgba(255, 255, 255, 0.8);
 					margin: 16rpx 0 12rpx;
 				}
 
 				.number {
-					font-size: 18rpx;
+					font-size: 22rpx;
 					color: rgba(255, 255, 255, 0.4);
 				}
 
 				.button {
-					font-size: 24rpx;
+					font-size: 28rpx;
 					width: 100%;
 					height: 56rpx;
 					line-height: 56rpx;
@@ -4330,11 +4330,11 @@
 	}
 
 	.text-xs {
-		font-size: 18rpx;
+		font-size: 22rpx;
 	}
 
 	.text-sm {
-		font-size: 24rpx;
+		font-size: 28rpx;
 	}
 
 	/* 通用工具类 */
@@ -4421,15 +4421,15 @@
 
 	/* 字体大小类 */
 	.fs26 {
-		font-size: 26rpx;
+		font-size: 30rpx;
 	}
 
 	.fs30 {
-		font-size: 30rpx;
+		font-size: 34rpx;
 	}
 
 	.f24 {
-		font-size: 24rpx;
+		font-size: 28rpx;
 	}
 
 	/* 尺寸类 */

+ 3 - 3
pages_course/reward.vue

@@ -134,13 +134,13 @@
 	
 		&-title {
 			font-weight: 600;
-			font-size: 36rpx;
+			font-size: 40rpx;
 			color: #222222;
 		}
 	
 		&-desc {
 			margin-top: 30rpx;
-			font-size: 28rpx;
+			font-size: 32rpx;
 			color: #757575;
 		}
 	
@@ -152,7 +152,7 @@
 			background: #FF5C03;
 			border-radius: 42rpx;
 			font-weight: 500;
-			font-size: 32rpx;
+			font-size: 36rpx;
 			color: #FFFFFF;
 			text-align: center;
 			line-height: 84rpx;

+ 24 - 24
pages_course/video.vue

@@ -172,7 +172,7 @@
 						maxlength="50"
 						v-model.trim="inputText">
 						</u-input>
-						<text style="font-size: 24rpx;color: #bbb;margin-left: 10rpx;">{{inputText?inputText.trim().length:0}}/50</text>
+						<text style="font-size: 28rpx;color: #bbb;margin-left: 10rpx;">{{inputText?inputText.trim().length:0}}/50</text>
 					</view>
 					<button class="danmuPopup-send" @click="handleChatInput">发送</button>
 				</view>
@@ -1444,7 +1444,7 @@
 		@include u-flex(column, center, flex-start);
 		font-family: PingFang SC, PingFang SC;
 		font-weight: 400;
-		font-size: 34rpx;
+		font-size: 38rpx;
 		color: #222;
 		position: relative;
 		text-align: center;
@@ -1493,7 +1493,7 @@
 		border-radius: 52rpx 52rpx 52rpx 52rpx;
 		font-family: PingFang SC, PingFang SC;
 		font-weight: 500;
-		font-size: 36rpx;
+		font-size: 40rpx;
 		color: #FFFFFF;
 		line-height: 96rpx;
 		text-align: center;
@@ -1545,14 +1545,14 @@
 			margin: 48rpx 0;
 			font-family: PingFang SC, PingFang SC;
 			font-weight: 500;
-			font-size: 32rpx;
+			font-size: 36rpx;
 			color: #222222;
 			text-align: center;
 
 			&-title {
 				margin-bottom: 26rpx;
 				font-weight: 600;
-				font-size: 40rpx;
+				font-size: 44rpx;
 				color: #FF5C03;
 			}
 		}
@@ -1604,7 +1604,7 @@
 		margin-top: 24rpx;
 		font-family: PingFang SC, PingFang SC;
 		font-weight: 500;
-		font-size: 30rpx;
+		font-size: 34rpx;
 		color: #222222;
 
 		&-item {
@@ -1631,7 +1631,7 @@
 				text-align: center;
 				font-family: PingFang SC, PingFang SC;
 				font-weight: 500;
-				font-size: 20rpx;
+				font-size: 24rpx;
 				color: #fff;
 				position: absolute;
 				left: 0;
@@ -1667,13 +1667,13 @@
 
 		&-title {
 			font-weight: 600;
-			font-size: 36rpx;
+			font-size: 40rpx;
 			color: #222222;
 		}
 
 		&-desc {
 			margin-top: 10rpx;
-			font-size: 28rpx;
+			font-size: 32rpx;
 			color: #757575;
 		}
 
@@ -1685,7 +1685,7 @@
 			background: #FF5C03;
 			border-radius: 42rpx;
 			font-weight: 500;
-			font-size: 32rpx;
+			font-size: 36rpx;
 			color: #FFFFFF;
 			text-align: center;
 			line-height: 84rpx;
@@ -1705,7 +1705,7 @@
 			text-align: center;
 			overflow-y: auto;
 			color: #414858;
-			font-size: 32rpx;
+			font-size: 36rpx;
 			font-weight: bold;
 			position: relative;
 
@@ -1737,7 +1737,7 @@
 				background-color: #f7f7f7;
 				text-align: center;
 				color: #414858;
-				font-size: 28rpx;
+				font-size: 32rpx;
 				line-height: 60rpx;
 			}
 
@@ -1772,7 +1772,7 @@
 			border-bottom: 2rpx solid #F5F7FA;
 			font-family: PingFang SC, PingFang SC;
 			font-weight: 500;
-			font-size: 36rpx;
+			font-size: 40rpx;
 			color: #222222;
 		}
 
@@ -1781,19 +1781,19 @@
 			border-bottom: 2rpx solid #F5F7FA;
 			font-family: PingFang SC, PingFang SC;
 			font-weight: 500;
-			font-size: 36rpx;
+			font-size: 40rpx;
 			color: #222222;
 		}
 
 		.title-content {
 			padding: 0 32rpx;
 			background-color: #fff;
-			font-size: 28rpx;
+			font-size: 32rpx;
 			line-height: 1.6;
 			box-sizing: border-box;
 			@include u-flex(row, center, space-between);
 			.title {
-				font-size: 36rpx;
+				font-size: 40rpx;
 				font-weight: 500;
 				color: #414858;
 			}
@@ -1806,7 +1806,7 @@
 		.warning {
 			flex-shrink: 0;
 			color: #888;
-			font-size: 24rpx;
+			font-size: 28rpx;
 			@include u-flex(column, center, center);
 			image {
 				flex-shrink: 0;
@@ -1825,7 +1825,7 @@
 			background-color: #fff;
 			text-align: center;
 			color: #888;
-			font-size: 28rpx;
+			font-size: 32rpx;
 			line-height: 60rpx;
 			display: inline-flex;
 			align-items: center;
@@ -1871,7 +1871,7 @@
 				text-align: center;
 				font-family: PingFang SC, PingFang SC;
 				font-weight: 600;
-				font-size: 32rpx;
+				font-size: 36rpx;
 				color: #FFFFFF;
 				@include u-flex(row, center, center);
 
@@ -1907,7 +1907,7 @@
 	.agreement {
 		display: inline-flex;
 		margin-top: 16rpx;
-		font-size: 24rpx;
+		font-size: 28rpx;
 		color: #525252;
 		align-items: center;
 		justify-content: center;
@@ -2051,13 +2051,13 @@
 		.uni-input {
 			flex: 1;
 			margin-right: 32rpx;
-			font-size: 30rpx;
+			font-size: 34rpx;
 		}
 	
 		.send {
 			font-family: PingFang SC, PingFang SC;
 			font-weight: 400;
-			font-size: 28rpx;
+			font-size: 32rpx;
 			color: #FFFFFF !important;
 			flex-shrink: 0;
 			padding: 0 20rpx;
@@ -2081,7 +2081,7 @@
 		border-radius: 50%;
 		height: 100rpx;
 		width: 100rpx;
-		font-size: 25rpx;
+		font-size: 29rpx;
 		text-align: center;
 		padding: 10rpx;
 		@include u-flex(row, center, center);
@@ -2124,7 +2124,7 @@
 		height: 88rpx;
 		overflow: hidden;
 		color: #888;
-		font-size: 24rpx;
+		font-size: 28rpx;
 		@include u-flex(column, center, center);
 		image {
 			flex-shrink: 0;

+ 1 - 1
pages_life/applyExpert.vue

@@ -179,7 +179,7 @@ export default {
 			}
 
 			.form-container {
-				width: 100%;
+				// width: 100%;
 				z-index: 3;
 				background: #FFFFFF;
 				border-radius: 20rpx;

+ 485 - 480
pages_life/expert.vue

@@ -3,47 +3,49 @@
 		<!-- 达人信息 -->
 		<view class="info">
 			<image class="info-bg" src="https://cdn.his.cdwjyyh.com/images/expert_top_bg.png"></image>
-			<view class="status_bar" :style="{height: statusBarHeight}"></view>
+			<view class="status_bar" :style="{ height: statusBarHeight }"></view>
 			<view class="back-box">
 				<image class="img" @click="goBack" src="https://cdn.his.cdwjyyh.com/images/back_white_icon.png"></image>
 			</view>
 			<view class="info-block">
-				<image class="head" :src="expert.avatar||'https://cdn.his.cdwjyyh.com/images/img.png'"></image>
+				<image class="head" :src="expert.avatar || 'https://cdn.his.cdwjyyh.com/images/img.png'"></image>
 				<view class="right">
 					<view class="user">
-						<text class="name">{{expert.nickname}}</text>
-						<view class="level">
-							<image class="icon" src="https://cdn.his.cdwjyyh.com/images/intelligent_icon.png"></image>LV.2
-						</view>
+						<text class="name">{{ expert.nickname||'默认' }}</text>
+						<!-- <view class="level">
+							<image class="icon" src="https://cdn.his.cdwjyyh.com/images/intelligent_icon.png"></image>
+							LV.2
+						</view> -->
 					</view>
-					<view class="txt">{{expert.introduction}}</view>
-					<view class="card">
+					<view class="txt">{{ expert.introduction||'' }}</view>
+					<!-- <view class="card">
 						<view class="card-item">
 							<image class="img" src="https://cdn.his.cdwjyyh.com/images/jinbang_font.png"></image>
 							<text class="ranking">达人榜 第15名</text>
 						</view>
 						<image class="go" src="https://cdn.his.cdwjyyh.com/images/jb_arrow_right_icon.png"></image>
-					</view>
+					</view> -->
 				</view>
 			</view>
 			<view class="data-block">
 				<view class="number-block">
 					<view class="item">
-						<text class="number-item">{{expert.fansNum}}</text>
+						<text class="number-item">{{ expert.fansNum }}</text>
 						<text class="txt-item">粉丝</text>
 					</view>
 					<view class="item">
-						<text class="number-item">{{expert.followNum}}</text>
+						<text class="number-item">{{ expert.followNum }}</text>
 						<text class="txt-item">关注</text>
 					</view>
 					<view class="item">
-						<text class="number-item">{{expert.likes}}</text>
+						<text class="number-item">{{ expert.likes }}</text>
 						<text class="txt-item">获赞</text>
 					</view>
 				</view>
 				<!-- 关注 -->
 				<view class="button" :class="isFollow ? 'follow' : ''" @click="toFollow">
-					<image v-if="!isFollow" class="icon" src="https://cdn.his.cdwjyyh.com/images/guanzhu_green_icon.png" />
+					<image v-if="!isFollow" class="icon"
+						src="https://cdn.his.cdwjyyh.com/images/guanzhu_green_icon.png" />
 					<text>{{ isFollow ? '已关注' : '关注' }}</text>
 				</view>
 			</view>
@@ -52,25 +54,26 @@
 			<view class="tab-wrapper">
 				<!-- 生活号标签 -->
 				<view class="tab-item" :class="{ active: activeTab === 0 }" @click="switchTab(0)">
-					<text class="tab-text">生活号(22)</text>
+					<text class="tab-text">生活号({{  list.length }})</text>
 					<view v-if="activeTab === 0" class="underline"></view>
 				</view>
 
 				<!-- 直播标签 -->
-				<view class="tab-item" :class="{ active: activeTab === 1 }" @click="switchTab(1)">
+				<!-- <view class="tab-item" :class="{ active: activeTab === 1 }" @click="switchTab(1)">
 					<text class="tab-text">直播</text>
 					<view v-if="activeTab === 1" class="underline"></view>
-				</view>
+				</view> -->
 			</view>
 
 			<!-- 视频文章列表 -->
 			<mescroll-body bottom="0" ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback"
 				:down="downOption" :up="upOption">
 				<view class="list">
-					<view class="list-item" @click="goLive(item)" v-for="(item,index) in list" :key="index">
+					<view class="list-item" @click="goLive(item)" v-for="(item, index) in list" :key="index">
 						<image class="img" v-if="item.liveImgUrl" :src="item.liveImgUrl" mode="widthFix"></image>
 						<image class="video-icon" src="https://cdn.his.cdwjyyh.com/images/video_icon.png"></image>
-						<image class="suspension-icon" @click="onTask" src="https://cdn.his.cdwjyyh.com/images/suspension.png"></image>
+						<!-- <image class="suspension-icon" @click="onTask"
+							src="https://cdn.his.cdwjyyh.com/images/suspension.png"></image> -->
 						<view class="info-block">
 							<view class="title">冰乳绿豆糕 冰冰凉凉谁吃谁迷糊! 谁懂,...</view>
 							<view class="item">
@@ -85,10 +88,12 @@
 							</view>
 							<view class="card">
 								<view class="card-item">
-									<image class="img" src="https://cdn.his.cdwjyyh.com/images/jinbang_font.png"></image>
+									<image class="img" src="https://cdn.his.cdwjyyh.com/images/jinbang_font.png">
+									</image>
 									<text class="ranking">达人榜 第15名</text>
 								</view>
-								<image class="go" src="https://cdn.his.cdwjyyh.com/images/jb_arrow_right_icon.png"></image>
+								<image class="go" src="https://cdn.his.cdwjyyh.com/images/jb_arrow_right_icon.png">
+								</image>
 							</view>
 						</view>
 					</view>
@@ -97,77 +102,77 @@
 				</view>
 			</mescroll-body>
 		</view>
-		<Task :show="showTask" @close="handleCloseTask"></Task>
+		<!-- <Task :show="showTask" @close="handleCloseTask"></Task> -->
 
 	</view>
 </template>
 
 <script>
-	import Task from '@/components/task.vue'
-	import {
-		expertHomePage, // 达人主页
-		follow, // 关注用户
-		listCreatorRank, //达人排行榜
-	} from '@/api/life.js'
-	// import {
-	// 	liveList
-	// } from '@/api/living.js'
-	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
-	// 点赞/取消点赞常量
-	const LIKE = 'LIKE';
-	const UNLIKE = 'UNLIKE';
-	export default {
-		components: {
-			Task
-		},
-		mixins: [MescrollMixin],
-		data() {
-			return {
-				expert:{},//达人的数据
-				showTask: false,
-				isFollow: false,
-				expertId: 5, //达人id
-				activeTab: 0,
-				// 状态栏的高度
-				statusBarHeight: uni.getStorageSync('menuInfo').statusBarHeight,
-				list: [],
-				downOption: {
-					offset: 80,
-					use: true,
-					auto: false
-				},
-				upOption: {
-					use: true,
-					auto: true,
-					page: {
-						num: 0,
-						size: 10
-					}
-				},
-				mescroll: null,
-			}
-		},
-		onLoad(option) {
-			if(option.expertId){
-			this.expertId=option.expertId;
+import Task from '@/components/task.vue'
+import {
+	expertHomePage, // 达人主页
+	follow, // 关注用户
+	listCreatorRank, //达人排行榜
+} from '@/api/life.js'
+// import {
+// 	liveList
+// } from '@/api/living.js'
+import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+// 点赞/取消点赞常量
+const LIKE = 'LIKE';
+const UNLIKE = 'UNLIKE';
+export default {
+	components: {
+		Task
+	},
+	mixins: [MescrollMixin],
+	data() {
+		return {
+			expert: {},//达人的数据
+			showTask: false,
+			isFollow: false,
+			expertId: 5, //达人id
+			activeTab: 0,
+			// 状态栏的高度
+			statusBarHeight: uni.getStorageSync('menuInfo').statusBarHeight,
+			list: [],
+			downOption: {
+				offset: 80,
+				use: true,
+				auto: false
+			},
+			upOption: {
+				use: true,
+				auto: true,
+				page: {
+					num: 0,
+					size: 10
+				}
+			},
+			mescroll: null,
+		}
+	},
+	onLoad(option) {
+		if (option.expertId) {
+			this.expertId = option.expertId;
 
-			}
-		
+		}
 
-			
-		},
-		onUnload() {
 
-		},
-		onShow() {
-			this.utils.isLogin().then(res => {
-					if (res) {
-						this.getExpertHomePage();
+
+	},
+	onUnload() {
+
+	},
+	onShow() {
+		this.utils.isLogin().then(res => {
+			if (res) {
+				this.getExpertHomePage();
 				this.getListCreatorRank();
-					}
-				})
-		},
-		methods: {// 返回上一页,无则返回首页
+			}
+		})
+	},
+	methods: {// 返回上一页,无则返回首页
 		goBack() {
 			// 获取页面栈
 			const pages = getCurrentPages();
@@ -186,498 +191,498 @@
 		},
 		//达人排行榜
 		getListCreatorRank() {
-				listCreatorRank().then(res => {
-					if (res.code == 200) {
-						console.log("达人排行榜", res)
-					} else {
-						uni.showToast({
-							title: res.msg,
-							icon: 'none'
-						});
-					}
-				}).catch(err => {});
-			},
+			listCreatorRank().then(res => {
+				if (res.code == 200) {
+					console.log("达人排行榜", res)
+				} else {
+					uni.showToast({
+						title: res.msg,
+						icon: 'none'
+					});
+				}
+			}).catch(err => { });
+		},
 
-			// 达人主页
-			getExpertHomePage() {
-				console.log("达人id",this.expertId)
-				if(!this.expertId) return;
-				expertHomePage(this.expertId).then(res => {
-					if (res.code == 200 && res.data) {
-						console.log("达人主页", res)
-						this.expert=res.data
-						// 同步关注状态
-						this.isFollow = res.data.isFollow || false;
-					} else {
-						uni.showToast({
-							title: res.msg || '获取达人信息失败',
-							icon: 'none'
-						});
-					}
-				}).catch(err => {});
-			},
-			// 关注用户
-			toFollow() {
-				console.log("关注取消用户")
-				const action = this.isFollow ? UNLIKE : LIKE;
-				const data = {
-					expertId: this.expertId,
-					action: action
-				};
-				follow(data).then(res => {
-					if (res.code == 200) {
-						this.isFollow = !this.isFollow;
-						this.getExpertHomePage();
-						console.log(action + "用户", res)
-					} else {
-						uni.showToast({
-							title: res.msg,
-							icon: 'none'
-						});
-					}
-				}).catch(err => {});
-			},
-			onTask() {
-				this.showTask = true;
-			},
-			handleCloseTask() {
-				this.showTask = false;
-			},
+		// 达人主页
+		getExpertHomePage() {
+			console.log("达人id", this.expertId)
+			if (!this.expertId) return;
+			expertHomePage(this.expertId).then(res => {
+				if (res.code == 200 && res.data) {
+					console.log("达人主页", res)
+					this.expert = res.data
+					// 同步关注状态
+					this.isFollow = res.data.isFollow || false;
+				} else {
+					uni.showToast({
+						title: res.msg || '获取达人信息失败',
+						icon: 'none'
+					});
+				}
+			}).catch(err => { });
+		},
+		// 关注用户
+		toFollow() {
+			console.log("关注取消用户")
+			const action = this.isFollow ? UNLIKE : LIKE;
+			const data = {
+				expertId: this.expertId,
+				action: action
+			};
+			follow(data).then(res => {
+				if (res.code == 200) {
+					this.isFollow = !this.isFollow;
+					this.getExpertHomePage();
+					console.log(action + "用户", res)
+				} else {
+					uni.showToast({
+						title: res.msg,
+						icon: 'none'
+					});
+				}
+			}).catch(err => { });
+		},
+		onTask() {
+			this.showTask = true;
+		},
+		handleCloseTask() {
+			this.showTask = false;
+		},
 
-			switchTab(tab) {
-				if (this.activeTab === tab) return;
-				this.activeTab = tab;
-				this.$emit('change', tab);
-			},
-			mescrollInit(mescroll) {
-				this.mescroll = mescroll;
-			},
+		switchTab(tab) {
+			if (this.activeTab === tab) return;
+			this.activeTab = tab;
+			this.$emit('change', tab);
+		},
+		mescrollInit(mescroll) {
+			this.mescroll = mescroll;
+		},
 
-			// 下拉刷新回调
-			downCallback(mescroll) {
-				this.list = [];
-				mescroll.resetUpScroll();
-			},
+		// 下拉刷新回调
+		downCallback(mescroll) {
+			this.list = [];
+			mescroll.resetUpScroll();
+		},
 
-			// 上拉加载回调
-			// upCallback(mescroll) {
-			// 	const pageNum = mescroll.num;
-			// 	const pageSize = mescroll.size;
-
-			// 	let data = {
-			// 		pageSize: pageSize,
-			// 		pageNum: pageNum,
-			// 	}
-			// 	liveList(data).then(res => {
-			// 		if (!res) {
-			// 			mescroll.endErr();
-			// 			return;
-			// 		}
-			// 		if (res.code == 200) {
-			// 			let curPageData = Array.isArray(res.data.list) ? res.data.list : [];
-			// 			let totalSize = Number(res.data.total) || 0;
-			// 			if (pageNum === 1) {
-			// 				this.list = [];
-			// 			}
-			// 			this.list = this.list.concat(curPageData);
-
-			// 			mescroll.endBySize(curPageData.length, totalSize);
-			// 		} else {
-			// 			mescroll.endErr();
-			// 			uni.showToast({
-			// 				title: res.msg,
-			// 				icon: 'none'
-			// 			});
-			// 		}
-			// 	}).catch(err => {
-			// 		mescroll.endErr();
-			// 	});
-			// },
-
-			goLive(item) {
-				uni.navigateTo({
-					// &immediate=true
-					url: `./living?liveId=${item.liveId}`
-				});
-			}
+		// 上拉加载回调
+		// upCallback(mescroll) {
+		// 	const pageNum = mescroll.num;
+		// 	const pageSize = mescroll.size;
+
+		// 	let data = {
+		// 		pageSize: pageSize,
+		// 		pageNum: pageNum,
+		// 	}
+		// 	liveList(data).then(res => {
+		// 		if (!res) {
+		// 			mescroll.endErr();
+		// 			return;
+		// 		}
+		// 		if (res.code == 200) {
+		// 			let curPageData = Array.isArray(res.data.list) ? res.data.list : [];
+		// 			let totalSize = Number(res.data.total) || 0;
+		// 			if (pageNum === 1) {
+		// 				this.list = [];
+		// 			}
+		// 			this.list = this.list.concat(curPageData);
+
+		// 			mescroll.endBySize(curPageData.length, totalSize);
+		// 		} else {
+		// 			mescroll.endErr();
+		// 			uni.showToast({
+		// 				title: res.msg,
+		// 				icon: 'none'
+		// 			});
+		// 		}
+		// 	}).catch(err => {
+		// 		mescroll.endErr();
+		// 	});
+		// },
+
+		goLive(item) {
+			uni.navigateTo({
+				// &immediate=true
+				url: `./living?liveId=${item.liveId}`
+			});
 		}
 	}
+}
 </script>
 
 <style lang="scss" scoped>
-	.content {
-		background-color: #111;
-		min-height: 100vh;
-		// padding: 24rpx;
-
-		// 达人信息
-		.info {
-
+.content {
+	background-color: #111;
+	min-height: 100vh;
+	// padding: 24rpx;
+
+	// 达人信息
+	.info {
+
+		width: 100%;
+		height: 600rpx;
+		position: relative;
+		z-index: 0;
+
+		.info-bg {
+			position: absolute;
+			z-index: -1;
 			width: 100%;
-			height: 600rpx;
-			position: relative;
-			z-index: 0;
-
-			.info-bg {
-				position: absolute;
-				z-index: -1;
-				width: 100%;
-				height: 100%;
-			}
+			height: 100%;
+		}
 
-			.back-box {
-				display: flex;
-				align-items: center;
-				height: 88rpx;
-				margin-left: 24rpx;
+		.back-box {
+			display: flex;
+			align-items: center;
+			height: 88rpx;
+			margin-left: 24rpx;
 
-				.img {
-					width: 48rpx;
-					height: 48rpx;
-				}
+			.img {
+				width: 48rpx;
+				height: 48rpx;
 			}
+		}
 
-			.info-block {
-				margin-top: 32rpx;
-				padding: 0 20rpx;
-				display: flex;
-				align-items: center;
-
-				.head {
-					width: 160rpx;
-					height: 160rpx;
-					margin-right: 20rpx;
-					border-radius: 50%;
-				}
-
-				.right {
-					.user {
-						display: flex;
-
-						.name {
-							font-weight: 500;
-							font-size: 44rpx;
-							color: #FFFFFF;
-							margin-right: 16rpx;
-						}
+		.info-block {
+			margin-top: 32rpx;
+			padding: 0 20rpx;
+			display: flex;
+			align-items: center;
+
+			.head {
+				width: 160rpx;
+				height: 160rpx;
+				margin-right: 20rpx;
+				border-radius: 50%;
+			}
 
-						.level {
-							width: 118rpx;
-							height: 40rpx;
-							display: flex;
-							align-items: center;
-							font-weight: 500;
-							font-size: 26rpx;
-							color: #FEF5EA;
-							background: linear-gradient(90deg, #F5CE3C 0%, #E39414 100%);
-							border-radius: 20rpx 20rpx 20rpx 20rpx;
-							padding: 4rpx 12rpx;
-							box-sizing: border-box;
-
-							.icon {
-								width: 32rpx;
-								height: 32rpx;
-								margin-right: 8rpx;
-							}
-						}
-					}
+			.right {
+				.user {
+					display: flex;
 
-					.txt {
-						font-weight: 400;
-						font-size: 26rpx;
+					.name {
+						font-weight: 500;
+						font-size: 44rpx;
 						color: #FFFFFF;
-						margin: 8rpx 0 16rpx;
+						margin-right: 16rpx;
 					}
 
-					.card {
+					.level {
+						width: 118rpx;
+						height: 40rpx;
 						display: flex;
-						justify-content: space-between;
 						align-items: center;
-						background: #FFF5EB;
-						width: 302rpx;
-						height: 40rpx;
-						border-radius: 8rpx 8rpx 8rpx 8rpx;
-						border: 1rpx solid #F3E2D0;
-						padding: 8rpx;
+						font-weight: 500;
+						font-size: 26rpx;
+						color: #FEF5EA;
+						background: linear-gradient(90deg, #F5CE3C 0%, #E39414 100%);
+						border-radius: 20rpx 20rpx 20rpx 20rpx;
+						padding: 4rpx 12rpx;
 						box-sizing: border-box;
 
-						.card-item {
-							display: flex;
-							align-items: center;
-
-							.img {
-								width: 48rpx;
-								height: 24rpx;
-								margin-right: 8rpx;
-							}
-
-							.ranking {
-								font-size: 26rpx;
-								color: #D46C0D;
-							}
-						}
-
-						.go {
-							width: 16rpx;
-							height: 16rpx;
+						.icon {
+							width: 32rpx;
+							height: 32rpx;
+							margin-right: 8rpx;
 						}
 					}
 				}
-			}
 
-			.data-block {
-				padding: 0 20rpx;
-				margin-top: 30rpx;
-				display: flex;
-				justify-content: space-between;
-				align-items: center;
+				.txt {
+					font-weight: 400;
+					font-size: 26rpx;
+					color: #FFFFFF;
+					margin: 8rpx 0 16rpx;
+				}
 
-				.number-block {
+				.card {
 					display: flex;
-
-					.item {
-						margin-right: 32rpx;
+					justify-content: space-between;
+					align-items: center;
+					background: #FFF5EB;
+					width: 302rpx;
+					height: 40rpx;
+					border-radius: 8rpx 8rpx 8rpx 8rpx;
+					border: 1rpx solid #F3E2D0;
+					padding: 8rpx;
+					box-sizing: border-box;
+
+					.card-item {
 						display: flex;
-						flex-direction: column;
 						align-items: center;
 
-						.number-item {
-							font-family: Roboto, Roboto;
-							font-weight: 600;
-							font-size: 40rpx;
-							color: #FFFFFF;
+						.img {
+							width: 48rpx;
+							height: 24rpx;
+							margin-right: 8rpx;
 						}
 
-						.txt-item {
-							margin-top: 6rpx;
-							font-size: 30rpx;
-							color: rgba(255, 255, 255, 0.7);
+						.ranking {
+							font-size: 26rpx;
+							color: #D46C0D;
 						}
 					}
+
+					.go {
+						width: 16rpx;
+						height: 16rpx;
+					}
 				}
+			}
+		}
 
-				.button {
-					width: 144rpx;
-					height: 56rpx;
-					background: #FFFFFF;
-					border-radius: 28rpx 28rpx 28rpx 28rpx;
+		.data-block {
+			padding: 0 20rpx;
+			margin-top: 30rpx;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+
+			.number-block {
+				display: flex;
+
+				.item {
+					margin-right: 32rpx;
 					display: flex;
+					flex-direction: column;
 					align-items: center;
-					justify-content: center;
-					font-size: 28rpx;
-					color: #02B176;
 
-					&.follow {
-						background: #F0F0F0;
-						color: #666666;
+					.number-item {
+						font-family: Roboto, Roboto;
+						font-weight: 600;
+						font-size: 40rpx;
+						color: #FFFFFF;
 					}
 
-					.icon {
-						width: 24rpx;
-						height: 24rpx;
-						margin-right: 4rpx;
+					.txt-item {
+						margin-top: 6rpx;
+						font-size: 30rpx;
+						color: rgba(255, 255, 255, 0.7);
 					}
 				}
 			}
 
+			.button {
+				width: 144rpx;
+				height: 56rpx;
+				background: #FFFFFF;
+				border-radius: 28rpx 28rpx 28rpx 28rpx;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				font-size: 28rpx;
+				color: #02B176;
+
+				&.follow {
+					background: #F0F0F0;
+					color: #666666;
+				}
+
+				.icon {
+					width: 24rpx;
+					height: 24rpx;
+					margin-right: 4rpx;
+				}
+			}
 		}
 
-		//达人视频
-		.vedio-block {
+	}
+
+	//达人视频
+	.vedio-block {
+		position: relative;
+		z-index: 1;
+		background-color: #FFFFFF;
+		margin-top: -74rpx;
+		border-radius: 32rpx 32rpx 0rpx 0rpx;
+		padding: 26rpx 0;
+
+		.tab-wrapper {
+			display: flex;
+			height: 88rpx;
+			padding: 0 40rpx;
 			position: relative;
-			z-index: 1;
-			background-color: #FFFFFF;
-			margin-top: -74rpx;
-			border-radius: 32rpx 32rpx 0rpx 0rpx;
-			padding: 26rpx 0;
 
-			.tab-wrapper {
+			.tab-item {
+				flex: 1;
 				display: flex;
-				height: 88rpx;
-				padding: 0 40rpx;
+				flex-direction: column;
+				align-items: center;
+				justify-content: center;
 				position: relative;
+				color: #666666;
 
-				.tab-item {
-					flex: 1;
-					display: flex;
-					flex-direction: column;
-					align-items: center;
-					justify-content: center;
-					position: relative;
-					color: #666666;
-
-					&.active {
-						font-weight: 600;
-						font-size: 36rpx;
-						color: #02B176;
-					}
+				&.active {
+					font-weight: 600;
+					font-size: 36rpx;
+					color: #02B176;
+				}
 
-					.tab-text {
-						font-size: 36rpx;
-						transition: all 0.3s ease;
+				.tab-text {
+					font-size: 36rpx;
+					transition: all 0.3s ease;
 
 
-					}
+				}
 
-					.underline {
-						position: absolute;
-						bottom: 0;
-						left: 50%;
-						transform: translateX(-50%);
-						width: 48rpx;
-						height: 6rpx;
-						background: #02B176;
-						border-radius: 3rpx 3rpx 3rpx 3rpx;
-						animation: slideIn 0.3s ease;
-					}
+				.underline {
+					position: absolute;
+					bottom: 0;
+					left: 50%;
+					transform: translateX(-50%);
+					width: 48rpx;
+					height: 6rpx;
+					background: #02B176;
+					border-radius: 3rpx 3rpx 3rpx 3rpx;
+					animation: slideIn 0.3s ease;
 				}
 			}
+		}
 
-			@keyframes slideIn {
-				from {
-					opacity: 0;
-					transform: translateX(-50%) scaleX(0.5);
-				}
+		@keyframes slideIn {
+			from {
+				opacity: 0;
+				transform: translateX(-50%) scaleX(0.5);
+			}
 
-				to {
-					opacity: 1;
-					transform: translateX(-50%) scaleX(1);
-				}
+			to {
+				opacity: 1;
+				transform: translateX(-50%) scaleX(1);
 			}
+		}
 
-			.list {
-				background: #F5F7FA;
-				padding: 24rpx 24rpx;
+		.list {
+			background: #F5F7FA;
+			padding: 24rpx 24rpx;
+			display: flex;
+			justify-content: space-between;
+			flex-wrap: wrap;
+
+			.list-item {
+				width: 342rpx;
+				margin-bottom: 18rpx;
+				position: relative;
 				display: flex;
-				justify-content: space-between;
-				flex-wrap: wrap;
+				flex-direction: column;
 
-				.list-item {
-					width: 342rpx;
-					margin-bottom: 18rpx;
-					position: relative;
-					display: flex;
-					flex-direction: column;
+				.img {
+					width: 100%;
+					border-radius: 16rpx 16rpx 0rpx 0rpx;
 
-					.img {
-						width: 100%;
-						border-radius: 16rpx 16rpx 0rpx 0rpx;
+				}
 
-					}
+				.video-icon {
+					width: 40rpx;
+					height: 40rpx;
+					position: absolute;
+					top: 20rpx;
+					right: 20rpx;
+				}
 
-					.video-icon {
-						width: 40rpx;
-						height: 40rpx;
-						position: absolute;
-						top: 20rpx;
-						right: 20rpx;
-					}
+				.suspension-icon {
+					width: 144rpx;
+					height: 144rpx;
+					position: absolute;
+					top: -14rpx;
+					right: 0rpx;
+				}
 
-					.suspension-icon {
-						width: 144rpx;
-						height: 144rpx;
-						position: absolute;
-						top: -14rpx;
-						right: 0rpx;
+				.info-block {
+					border-radius: 0rpx 0rpx 16rpx 16rpx;
+					padding: 12rpx 20rpx 20rpx;
+					box-sizing: border-box;
+					width: 100%;
+					background: #FFFFFF;
+					display: flex;
+					flex-direction: column;
+
+					.title {
+						font-weight: 500;
+						font-size: 32rpx;
+						color: #333333;
+						margin-bottom: 20rpx;
 					}
 
-					.info-block {
-						border-radius: 0rpx 0rpx 16rpx 16rpx;
-						padding: 12rpx 20rpx 20rpx;
-						box-sizing: border-box;
-						width: 100%;
-						background: #FFFFFF;
+					.item {
 						display: flex;
-						flex-direction: column;
-
-						.title {
-							font-weight: 500;
-							font-size: 32rpx;
-							color: #333333;
-							margin-bottom: 20rpx;
-						}
+						justify-content: space-between;
+						align-items: center;
+						margin-bottom: 20rpx;
 
-						.item {
+						.flex {
 							display: flex;
-							justify-content: space-between;
 							align-items: center;
-							margin-bottom: 20rpx;
-
-							.flex {
-								display: flex;
-								align-items: center;
-								font-size: 26rpx;
-								color: #999999;
-							}
-
-							.icon {
-								width: 32rpx;
-								height: 32rpx;
-								margin-right: 4rpx;
-							}
+							font-size: 26rpx;
+							color: #999999;
+						}
 
-							.head {
-								width: 32rpx;
-								height: 32rpx;
-								border-radius: 50%;
-								margin-right: 8rpx;
-							}
+						.icon {
+							width: 32rpx;
+							height: 32rpx;
+							margin-right: 4rpx;
+						}
 
-							.name {
-								color: #757575;
-							}
+						.head {
+							width: 32rpx;
+							height: 32rpx;
+							border-radius: 50%;
+							margin-right: 8rpx;
 						}
 
-						text {
-							white-space: nowrap;
-							overflow: hidden;
-							text-overflow: ellipsis;
+						.name {
+							color: #757575;
 						}
+					}
 
-						.card {
+					text {
+						white-space: nowrap;
+						overflow: hidden;
+						text-overflow: ellipsis;
+					}
+
+					.card {
 
+						display: flex;
+						justify-content: space-between;
+						align-items: center;
+						background: #FFF5EB;
+						width: 302rpx;
+						height: 40rpx;
+						border-radius: 8rpx 8rpx 8rpx 8rpx;
+						border: 1rpx solid #F3E2D0;
+						padding: 8rpx;
+						box-sizing: border-box;
+
+						.card-item {
 							display: flex;
-							justify-content: space-between;
 							align-items: center;
-							background: #FFF5EB;
-							width: 302rpx;
-							height: 40rpx;
-							border-radius: 8rpx 8rpx 8rpx 8rpx;
-							border: 1rpx solid #F3E2D0;
-							padding: 8rpx;
-							box-sizing: border-box;
-
-							.card-item {
-								display: flex;
-								align-items: center;
-
-								.img {
-									width: 48rpx;
-									height: 24rpx;
-									margin-right: 8rpx;
-								}
-
-								.ranking {
-									font-size: 26rpx;
-									color: #D46C0D;
-								}
+
+							.img {
+								width: 48rpx;
+								height: 24rpx;
+								margin-right: 8rpx;
 							}
 
-							.go {
-								width: 16rpx;
-								height: 16rpx;
+							.ranking {
+								font-size: 26rpx;
+								color: #D46C0D;
 							}
 						}
-					}
 
+						.go {
+							width: 16rpx;
+							height: 16rpx;
+						}
+					}
 				}
 
-				.list-item:nth-child(2n) {
-					margin-right: 0;
-				}
+			}
+
+			.list-item:nth-child(2n) {
+				margin-right: 0;
 			}
 		}
+	}
 
 
-	}
+}
 </style>

+ 187 - 97
pages_life/myExpert.vue

@@ -12,20 +12,21 @@
 				<view class="right">
 					<view class="user">
 						<text class="name">{{ expert.nickname }}</text>
-						<view class="level">
+						<!-- <view class="level">
 							<image class="icon" src="https://cdn.his.cdwjyyh.com/images/intelligent_icon.png"></image>
 							LV.2
-						</view>
+						</view> -->
 					</view>
 				</view>
 			</view>
 			<view class="description" @click="goApplyExpert">
 				<view class="description-txt ellipsis3">
-					{{ expert.introduction || '添加个人描述,让大家更懂你' }}
+					<text>{{ expert.introduction || '添加个人描述,让大家更懂你' }}</text>
+					<image class="description-icon" src="https://cdn.his.cdwjyyh.com/images/edit.png"></image>
 					<!-- 添加个人描述,让大家更懂你... -->
 					<!-- <text class="add-desc">添加添加个人描述,让大家更懂你..." -->
 				</view>
-				<image class="description-icon" src="https://cdn.his.cdwjyyh.com/images/edit.png"></image>
+
 			</view>
 			<view class="data-block">
 				<view class="number-block">
@@ -53,26 +54,37 @@
 			<view class="tab-wrapper">
 				<!-- 生活号标签 -->
 				<view class="tab-item" :class="{ active: activeTab === 0 }" @click="switchTab(0)">
-					<text class="tab-text">生活号({{ expert.liveNum || 0 }})</text>
+					<text class="tab-text">生活号({{ lifeNum || 0 }})</text>
 					<view v-if="activeTab === 0" class="underline"></view>
 				</view>
 
 				<!-- 直播标签 -->
-				<view class="tab-item" :class="{ active: activeTab === 1 }" @click="switchTab(1)">
+				<!-- <view class="tab-item" :class="{ active: activeTab === 1 }" @click="switchTab(1)">
 					<text class="tab-text">直播</text>
 					<view v-if="activeTab === 1" class="underline"></view>
-				</view>
+				</view> -->
 			</view>
 
 
 			<!-- 视频文章列表 -->
+		<scroll-view class="scroll-container" scroll-y>
 			<mescroll-body bottom="0" ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback"
 				:down="downOption" :up="upOption">
 				<view class="list">
 					<view class="wf-row">
 						<view class="wf-col" v-for="(col, cIdx) in columns" :key="cIdx">
 							<view class="list-item" v-for="(item, idx) in col" :key="idx" @click="goLifeDetail(item)">
-								<video class="img" v-if="item.resourceType == 1" :id="'video-' + (item.resourceId || idx)"
+								<view class="mask" v-if="item.reviewStatus != 2">
+									<view class="mask-status" :class="{
+										pending: item.reviewStatus == 1,
+										rejected: item.reviewStatus == 3
+									}">
+										{{ item.reviewStatus == 1 ? '待审核' : '审核驳回' }}
+									</view>
+									<view class="mask-reason" v-if="item.reviewStatus == 3">{{ item.reason }}</view>
+								</view>
+								<video class="img" v-if="item.resourceType == 1"
+									:id="'video-' + (item.resourceId || idx)"
 									:src="item.videoUrl || 'https://cdn.his.cdwjyyh.com/images/img.png'" mode="widthFix"
 									autoplay muted loop :show-center-play-btn="false" :show-play-btn="false"
 									:controls="false" object-fit="cover" :enable-progress-gesture="false"
@@ -84,8 +96,8 @@
 								</image>
 								<image class="video-icon" v-if="item.resourceType == 1"
 									src="https://cdn.his.cdwjyyh.com/images/video_icon.png"></image>
-								<image class="suspension-icon" @click="onTask"
-									src="https://cdn.his.cdwjyyh.com/images/suspension.png"></image>
+								<!-- <image class="suspension-icon" @click="onTask"
+									src="https://cdn.his.cdwjyyh.com/images/suspension.png"></image> -->
 								<view class="info-block">
 									<view class="title">{{ item.title }}</view>
 									<view class="item">
@@ -101,7 +113,7 @@
 											<text>{{ item.clickCount }}</text>
 										</view>
 									</view>
-									<view class="card">
+									<!-- <view class="card">
 										<view class="card-item">
 											<image class="img"
 												src="https://cdn.his.cdwjyyh.com/images/jinbang_font.png"></image>
@@ -109,13 +121,14 @@
 										</view>
 										<image class="go"
 											src="https://cdn.his.cdwjyyh.com/images/jb_arrow_right_icon.png"></image>
-									</view>
+									</view> -->
 								</view>
 							</view>
 						</view>
 					</view>
 				</view>
 			</mescroll-body>
+		</scroll-view>
 		</view>
 		<Task :show="showTask" @close="handleCloseTask"></Task>
 
@@ -138,7 +151,9 @@
 				</view>
 			</view>
 		</view>
-
+		<view class="btn-box" @click="toUpdateDesc">
+			<view class="btn">发布视频</view>
+		</view>
 	</view>
 </template>
 
@@ -166,6 +181,7 @@ export default {
 	mixins: [MescrollMixin],
 	data() {
 		return {
+			lifeNum: null,
 			expert: {},//达人的数据
 			showTask: false,
 			isFollow: false,
@@ -223,6 +239,12 @@ export default {
 
 	},
 	methods: {
+		toUpdateDesc() {
+			console.log("发布视频")
+			uni.navigateTo({
+				url: '/pages_life/uploadVideo'
+			})
+		},
 		editProfile() {
 			let data = {
 				expertId: this.expertId,
@@ -357,6 +379,7 @@ export default {
 				if (res.code == 200) {
 					let curPageData = Array.isArray(res.data.list) ? res.data.list : [];
 					let totalSize = Number(res.data.total) || 0;
+					this.lifeNum = Number(res.data.total) || 0;
 					if (pageNum === 1) {
 						this.list = [];
 						this.columns = Array.from({ length: this.colCount }, () => [])
@@ -758,6 +781,12 @@ export default {
 		margin-top: -74rpx;
 		border-radius: 32rpx 32rpx 0rpx 0rpx;
 		padding: 26rpx 0;
+		min-height: calc(100vh - 700rpx);
+
+		.scroll-container {
+			height: calc(100vh - 800rpx);
+			overflow: hidden;
+		}
 
 		.tab-wrapper {
 			display: flex;
@@ -839,119 +868,180 @@ export default {
 			display: flex;
 			flex-direction: column;
 
-			.img {
-				width: 100%;
-				border-radius: 16rpx 16rpx 0rpx 0rpx;
-			}
-
-			.video-icon {
-				width: 40rpx;
-				height: 40rpx;
-				position: absolute;
-				top: 20rpx;
-				right: 20rpx;
-			}
-
-			.suspension-icon {
-				width: 144rpx;
-				height: 144rpx;
+			.mask {
 				position: absolute;
-				top: -14rpx;
-				right: 0rpx;
-			}
-
-			.info-block {
-				border-radius: 0rpx 0rpx 16rpx 16rpx;
-				padding: 12rpx 20rpx 20rpx;
-				box-sizing: border-box;
+				top: 0;
+				left: 0;
 				width: 100%;
-				background: #FFFFFF;
+				height: 100%;
+				background: rgba(0, 0, 0, 0.5);
 				display: flex;
 				flex-direction: column;
+				justify-content: center;
+				align-items: center;
+				color: #FFFFFF;
+				border-radius: 16rpx;
 
-				.title {
-					font-weight: 500;
+				.mask-status {
+					z-index: 5;
 					font-size: 32rpx;
-					color: #333333;
-					margin-bottom: 20rpx;
-				}
+					padding: 8rpx 16rpx;
+					border-radius: 8rpx;
+					margin-bottom: 16rpx;
 
-				.item {
-					display: flex;
-					justify-content: space-between;
-					align-items: center;
-					margin-bottom: 20rpx;
-
-					.flex {
-						display: flex;
-						align-items: center;
-						font-size: 26rpx;
-						color: #999999;
+					&.pending {
+						background: #eeaf02;
 					}
 
-					.icon {
-						width: 32rpx;
-						height: 32rpx;
-						margin-right: 4rpx;
+					&.rejected {
+						background: #d40d0d;
 					}
+				}
 
-					.head {
-						width: 32rpx;
-						height: 32rpx;
-						border-radius: 50%;
-						margin-right: 8rpx;
-					}
+				.mask-reason {
+					font-size: 26rpx;
+					z-index: 5;
 
-					.name {
-						color: #757575;
-					}
 				}
+			}
+		}
 
-				text {
-					white-space: nowrap;
-					overflow: hidden;
-					text-overflow: ellipsis;
-				}
+		.img {
+			width: 100%;
+			border-radius: 16rpx 16rpx 0rpx 0rpx;
+			height: 300rpx;
+			/* 设置固定高度,确保瀑布流布局稳定 */
+			object-fit: cover;
+		}
 
-				.card {
+		.video-icon {
+			width: 40rpx;
+			height: 40rpx;
+			position: absolute;
+			top: 20rpx;
+			right: 20rpx;
+		}
+
+		.suspension-icon {
+			width: 144rpx;
+			height: 144rpx;
+			position: absolute;
+			top: -14rpx;
+			right: 0rpx;
+		}
+
+		.info-block {
+			border-radius: 0rpx 0rpx 16rpx 16rpx;
+			padding: 12rpx 20rpx 20rpx;
+			box-sizing: border-box;
+			width: 100%;
+			background: #FFFFFF;
+			display: flex;
+			flex-direction: column;
+
+			.title {
+				font-weight: 500;
+				font-size: 32rpx;
+				color: #333333;
+				margin-bottom: 20rpx;
+			}
+
+			.item {
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+				margin-bottom: 20rpx;
 
+				.flex {
 					display: flex;
-					justify-content: space-between;
 					align-items: center;
-					background: #FFF5EB;
-					width: 302rpx;
-					height: 40rpx;
-					border-radius: 8rpx 8rpx 8rpx 8rpx;
-					border: 1rpx solid #F3E2D0;
-					padding: 8rpx;
-					box-sizing: border-box;
+					font-size: 26rpx;
+					color: #999999;
+				}
 
-					.card-item {
-						display: flex;
-						align-items: center;
+				.icon {
+					width: 32rpx;
+					height: 32rpx;
+					margin-right: 4rpx;
+				}
 
-						.img {
-							width: 48rpx;
-							height: 24rpx;
-							margin-right: 8rpx;
-						}
+				.head {
+					width: 32rpx;
+					height: 32rpx;
+					border-radius: 50%;
+					margin-right: 8rpx;
+				}
 
-						.ranking {
-							font-size: 26rpx;
-							color: #D46C0D;
-						}
+				.name {
+					color: #757575;
+				}
+			}
+
+			text {
+				white-space: nowrap;
+				overflow: hidden;
+				text-overflow: ellipsis;
+			}
+
+			.card {
+
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+				background: #FFF5EB;
+				width: 302rpx;
+				height: 40rpx;
+				border-radius: 8rpx 8rpx 8rpx 8rpx;
+				border: 1rpx solid #F3E2D0;
+				padding: 8rpx;
+				box-sizing: border-box;
+
+				.card-item {
+					display: flex;
+					align-items: center;
+
+					.img {
+						width: 48rpx;
+						height: 24rpx;
+						margin-right: 8rpx;
 					}
 
-					.go {
-						width: 16rpx;
-						height: 16rpx;
+					.ranking {
+						font-size: 26rpx;
+						color: #D46C0D;
 					}
 				}
+
+				.go {
+					width: 16rpx;
+					height: 16rpx;
+				}
 			}
 		}
 	}
+}
 
-
+.btn-box {
+	position: fixed;
+	bottom: 100rpx;
+	left: 50%;
+	right: 0;
+	z-index: 9;
+	transform: translateX(-50%);
+	width: 80%;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	color: #fff;
+	background: linear-gradient(136deg, #38D97D 0%, #02B176 100%);
+	border-radius: 16rpx;
+	padding: 24rpx 0;
+
+	.icon {
+		width: 54rpx;
+		height: 54rpx;
+		margin-right: 12rpx;
+	}
 }
 
 /* 个人描述弹窗样式 */

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio