yuhongqi 7 小時之前
父節點
當前提交
93f199bea0

+ 32 - 0
api/home.js

@@ -0,0 +1,32 @@
+import Request from '../common/request.js';
+const request = new Request().http;
+
+/**
+ * 首页初始化核心数据(频道入口、分类标签、商品分类导航)
+ */
+export function getHomeInit() {
+	return request('/app/index/home/init', null, 'GET');
+}
+
+/**
+ * 首页推荐区块(直播中、上新推荐等)
+ */
+export function getHomeRecommend() {
+	return request('/app/index/home/recommend', null, 'GET');
+}
+
+/**
+ * 首页商品列表(支持用户端分类 id,id 为空查全部)
+ * @param {Object} data - { id, pageNum, pageSize } 其中 id 可选,不传或空为全部
+ */
+export function getHomeGoods(data) {
+	return request('/app/index/home/goods', data || {}, 'GET');
+}
+
+/**
+ * 首页推荐「更多」分页:绿色有机(green) / 上新推荐(hot)
+ * @param {Object} data - { type: 'green'|'hot', pageNum, pageSize } 默认第1页10条
+ */
+export function getHomeGoodsRecommend(data) {
+	return request('/app/index/home/goods/recommend', data || {}, 'GET');
+}

+ 2677 - 0
pages/home/backuphoneindex.vue

@@ -0,0 +1,2677 @@
+<template>
+	<view class="content">
+		<!-- 背景图片 -->
+		<image class="bg" src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/hp_top_bg.png"
+			mode=""></image>
+		<view>
+			<view class="top-inner">
+				<view class="fixed-top-box" :style="{ background: bgColor }">
+					<!-- 这里是状态栏 -->
+					<view class="status_bar" :style="{height: statusBarHeight}"></view>
+					<view class="top-title">
+						<!-- <view class="name" >云联精选</view> -->
+						<view class="name" >云联精选</view>
+						<!-- <view class="dot">•</view><view class="sub-name">七彩互联网医院</view> -->
+					</view>
+					<!-- 搜索框、购物车、客服 -->
+					<view class="func-cont">
+						<view class="search-cont" :style="{width:userinfoa.isShow==0 || isuser==true?'633rpx':''}">
+							<image class="icon-search"
+								src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/search.png"
+								mode="">
+							</image>
+							<input type="text" value="" placeholder="请输入产品名称"
+								placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;"
+								@click="toSearch" />
+						</view>
+						<!-- 购物车 -->
+						<uni-badge size="small" :text="cartCount" absolute="rightTop" type="error"
+							v-show="userinfoa.isShow==1&&isuser==false">
+							<view class="img-item" @click="goAuthUrl('/pages/shopping/cart')">
+								<image
+									src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/cart_wihte.png"
+									mode=""></image>
+							</view>
+						</uni-badge>
+						<view class="img-item" style="position: relative;">
+							<image
+								src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/customer.png"
+								mode="">
+							</image>
+							<button class="contact-btn" open-type="contact"></button>
+						</view>
+					</view>
+				</view>
+			</view>
+			<!-- 头部间距 -->
+			<view style="padding-bottom:220rpx">
+				<view class="status_bar" :style="{height: statusBarHeight}"></view>
+			</view>
+			<!-- 轮播图 -->
+			<view class="banner-box">
+				<view class="inner">
+					<swiper class="swiper" :indicator-dots="true" :circular="true" :autoplay="true" :interval="3000"
+						:duration="1000" indicator-color="rgba(255, 255, 255, 0.6)" indicator-active-color="#ffffff">
+						<swiper-item class="swiper-item" v-for="(item,index) in advList" :key="index"
+							@click="handleAdvClick(item)">
+							<image :src="item.imageUrl" mode=""></image>
+						</swiper-item>
+					</swiper>
+				</view>
+			</view>
+
+			<!-- 菜单 -->
+			<view class="menu-content">
+				<view class="menu-box">
+					<Menu :list="menus" @menuClick="menuClick" v-if="menus.length>0" style="width:100%;"></Menu>
+				</view>
+			</view>
+
+		</view>
+		<view class="online-inquiry" v-if="isuser==false">
+			<view class="item" @click="navTo('../home/productList')">
+				<image class="bg-img"
+					src="https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/userapp/images/banner.png"
+					mode=""></image>
+			</view>
+		</view>
+		<!-- <view class="open-class bgf radius12">
+			<view class="title-box">
+				<text class="title">百域大讲堂</text>
+				<view class="more" @click="goClassList(1)">
+					<text>查看全部</text>
+					<image src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/toright.png"></image>
+				</view>
+			</view>
+			<view class="justify-start">
+				<view class="class-item" @click="goClass(item.courseId,1)" v-for="(item, index) in classList"
+					:key="index">
+					<view class="img-box">
+						<image :src="item.imgUrl || 'https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/no-img.png'"  ></image>
+					</view>
+					<view>{{item.courseName}}</view>
+				</view>
+			</view>
+		</view> -->
+		<view class="modules">
+			<view class="module">
+				<!--养生有道-->
+				<!-- <view class="depts">
+						<view class="title">养生有道</view>
+						<view class="dept-box">
+							<view  @click="yangshengClick(item)"  class="dept" :key="index" v-for="(item,index) in yangshengs"  >
+								<image class="icon" :src="item.icon"></image>
+								<view class="title" >{{item.title}} </view>
+							</view>
+						</view>
+				</view>
+				 -->
+				<!-- <view class="doctor-articles" >
+					<view class="title-box">
+						<view class="title">养生讲堂</view>
+						<view class="more"  @click="navTo('/pages_index/index/doctorArticleList')" >
+							<view class="text">更多</view>
+							<image src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/arrow_gray.png"></image>
+						</view>
+					</view>
+					<scroll-view :scroll-x="true" style="white-space: nowrap;">
+					<view class="article-box"  >
+						<view class="article" @click="navTo('/pages_index/index/doctorArticleDetails?articleId='+item.articleId)"  v-for="(item,index) in doctocArticles" :key="index">
+							<view class="image-box">
+								<image mode="aspectFill" :src="item.imageUrl"></image>
+								<view class="views">
+									{{item.views}}人观看
+								</view>
+								<view class="doctor">
+									<image mode="aspectFill" :src="item.avatar"></image>
+									<view class="right">
+										<view class="doc-name ellipsis">{{item.doctorName}}</view>
+										<view class="doc-position ellipsis">{{item.position}}</view>
+									</view>
+								</view>
+							</view>
+							<view class="article-title-box">
+								<view class="article-title ellipsis">{{item.title}}</view>
+							</view>
+						</view>
+					</view>
+					</scroll-view>
+				</view> -->
+
+				<!--养生干货-->
+				<!-- <view class="articles" >
+			    	<view class="title-box">
+			    		<view class="title">养生干货</view>
+			    		<view class="more" @click="navTo('/pages_index/index/articleList')">
+			    			<view class="text">更多</view>
+			    			<image src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/arrow_gray.png"></image>
+			    		</view>
+			    	</view>
+			    	<view class="article-box" v-if="articles.length>0">
+			    		<view class="item" :key="index" @click="navTo('/pages_index/index/articleDetails?articleId='+item.articleId)" v-for="(item,index) in articles">
+			    			<view class="left">
+			    				<view class="title">
+			    					{{item.title}}
+			    				</view>
+			    				<view class="views">
+			    					浏览量 {{item.views}}
+			    				</view>
+			    			</view>
+			    			<view class="right">
+			    				<image :src="item.imageUrl"></image>
+			    			</view>
+			    		</view>
+			    	</view>
+			    </view> -->
+
+			</view>
+		</view>
+
+		<view class="index-cont">
+
+			<!-- 热门榜单 -->
+			<!-- <NewProduct :detail="newProductList" /> -->
+			<HotProduct :detail="hotProductList" />
+			<!-- 百域百科 -->
+			<!-- <view class="pub-item" style="margin-top: 20rpx;" >
+				<view class="pub-title-box">
+					<text class="left">百域百科</text>
+					<view class="right" @click="switchTo('../healthy/index')">
+						<text class="text">更多</text>
+						<image src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/arrow_gray.png" mode=""></image>
+					</view>
+				</view>
+				<view class="inner">
+					<view class="pub-tab-box">
+						<view class="tab-inner">
+							<view
+								v-for="(item,index) in articleCateList"
+								:key="index"
+								:class="item.cateId == cateId?'item active':'item'"
+								@click="articleCateChange(item)">
+								<view class="text">
+									{{ item.cateName }}
+									<image v-show="item.cateId == cateId" class="tab-bg" src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/tab_bg.png" mode=""></image>
+								</view>
+							</view>
+						</view>
+						<image class="right-mask" src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/mask.png" mode=""></image>
+					</view>
+
+					<view class="know-list">
+						<view class="item" v-for="(item,index) in articleList" :key="index" @click="showArticle(item)">
+							<view class="left">
+								<view class="title ellipsis2">{{ item.title }}</view>
+								<view class="info-box">
+									<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" v-if="subitem!=null" >
+												<image :src="subitem.avatar==null?'https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/detault_head.jpg':subitem.avatar" mode=""></image>
+											</view>
+										</view>
+										<view class="readings">
+											<image class="eye" src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/eye.png" mode=""></image>
+											<text class="num">{{item.views}}</text>
+										</view>
+									</view>
+									<view class="time">{{item.publishTime}}</view>
+								</view>
+							</view>
+							<view class="right">
+								<image :src="item.imageUrl"  mode="aspectFill"></image>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view> -->
+			<!-- 精选产品 -->
+			<TuiProduct ref="tuiProduct" />
+
+		</view>
+
+
+		<!-- 限时消息 -->
+		<!-- <view class="message-box" >
+			<view class="left">
+				<image src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/close24.png" mode="" @click="closeMsg"></image>
+				<view class="text ellipsis">关注公众号了解更新</view>
+			</view>
+			<view class="btn">查看</view>
+
+		</view> -->
+		<!-- #ifdef MP-WEIXIN -->
+		<view class="official-account">
+			<official-account @load="bindload" @error="binderror"></official-account>
+		</view>
+		<!-- #endif -->
+		<view class="popup-box" v-if="activityShow">
+			<view class="info-mask" @tap="closeActivity()"></view>
+			<view class="info-form">
+				<image :src="activity.logoUrl" @tap="showActivity()" />
+			</view>
+		</view>
+		<z-modal :show="tuiModalControl" placeholderText="请输入邀请码" :btnGroup="btnGroup" :contentType="2"
+			titleText="填写邀请码" @cancle="cancleTui" @sure="submitTui"></z-modal>
+
+
+			<Server/>
+		<!-- <tabbar :actindex="0"></tabbar> -->
+	</view>
+</template>
+
+<script>
+	import {
+		courseList,
+		courseListB
+	} from '@/api/class.js'
+	import zModal from '@/components/z-modal/z-modal.vue'
+	import {
+		getStoreActivity
+	} from '@/api/activity.js'
+	import {
+		getDepartmentList
+	} from '@/api/doctorOrder.js'
+	import {
+		getMenu,
+		getCanvas,
+		getIndexData,
+		getTuiDoctor,
+		getTuiArticle,
+		getTuiDoctorOrder,
+		getCartCount,
+		// getpro
+	} from '@/api/index'
+	import {
+		getDoctorArticleList
+	} from '@/api/doctorArticle.js'
+	import {
+		getArticleList
+	} from '@/api/article.js'
+	import {
+		getStoreConfig
+	} from '@/api/common'
+	// import tabBg from "https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/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'
+	import NewProduct from './components/NewProduct.vue'
+	import TuiProduct from '@/components/tuiProduct.vue'
+
+	import Server from '@/components/Server.vue'
+	import {
+		getUserInfo,
+		bindPromoter
+	} from '@/api/user'
+	export default {
+		components: {
+			zModal,
+			freeAudio,
+			Menu,
+			HotProduct,
+			NewProduct,
+			TuiProduct,
+			Server
+		},
+		data() {
+			return {
+				classList: [],
+				btnGroup: [{
+					text: '取消',
+					color: '#FFFFFF',
+					bgColor: '#999999',
+					width: '150rpx',
+					height: '80rpx',
+					shape: 'fillet',
+					eventName: 'cancle'
+				}, {
+					text: '确定',
+					color: '#FFFFFF',
+					bgColor: '#2BC7B9',
+					width: '150rpx',
+					height: '80rpx',
+					shape: 'fillet',
+					eventName: 'sure'
+				}],
+				tuiModalControl: false,
+				activity: null,
+				activityShow: false,
+				newProductList: [],
+				hotProductList: [],
+				tuiProductList: [],
+				menus: [],
+				canvas: [],
+				allDoctorTitle: "全部医生",
+				topLen: 0,
+				deptId: 0,
+				depts: [],
+				docTab: 1,
+				top: 0,
+				cartCount: 0,
+				doctorOrderList: [],
+				orderType: 0,
+				cateId: null,
+				articleList: [],
+				advList: [],
+				doctorList: [],
+				articleCateList: [],
+				doctocArticles: [], //养生讲堂
+				articles: [], //养生干货
+				// 状态栏的高度
+				statusBarHeight: uni.getStorageSync('menuInfo').statusBarHeight,
+				tabBg: "https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/tab_bg.png", // tab切换背景
+				// 问诊案例类型
+				orderTypes: [{
+					name: '全部',
+					id: 0,
+				}, {
+					name: '图文',
+					id: 1,
+				}, {
+					name: '语音',
+					id: 2,
+				}],
+				// 限时消息是否显示
+				messageShow: true,
+				yangshengs: [{
+						id: "1",
+						title: "药膳食疗",
+						page: "/pages_index/index/medicatedFoodList",
+						icon: "https://fs-1319721001.cos.ap-chongqing.myqcloud.com/fs/20240229/3cfbd47911cf4753aa9497eac500728d.png"
+					},
+					{
+						id: "2",
+						title: "经络穴位",
+						page: "/pages_index/index/vesselList",
+						icon: "https://fs-1319721001.cos.ap-chongqing.myqcloud.com/fs/20240229/e93536a9dc1a4f8ca09545097b12fdea.png"
+					},
+					{
+						id: "3",
+						title: "问答专区",
+						page: "/pages_index/index/questionsList",
+						icon: "https://fs-1319721001.cos.ap-chongqing.myqcloud.com/fs/20240229/e896972bd56f4e358188af36f2c5af42.png"
+					},
+					{
+						id: "4",
+						title: "疾病",
+						page: "/pages_index/index/diseaseList",
+						icon: "https://fs-1319721001.cos.ap-chongqing.myqcloud.com/fs/20240229/d6f1851cccae414b8baf2ba07782f91b.png"
+					},
+					{
+						id: "5",
+						title: "中药图解",
+						page: "/pages_index/index/chineseMedicineList",
+						icon: "https://fs-1319721001.cos.ap-chongqing.myqcloud.com/fs/20240229/ff43572d0d004285b5a3b0ef2663c471.png"
+					},
+					{
+						id: "6",
+						title: "名方今用",
+						page: "/pages_index/index/famousPrescribeList",
+						icon: "https://fs-1319721001.cos.ap-chongqing.myqcloud.com/fs/20240229/45db770e58c34963b0d2ba24a958b617.png"
+					},
+					{
+						id: "7",
+						title: "康复医案",
+						page: "/pages_index/index/doctorArticleList",
+						icon: "https://fs-1319721001.cos.ap-chongqing.myqcloud.com/fs/20240229/e793942797b24035b51f94d894bdfa0b.png"
+					},
+					{
+						id: "8",
+						title: "更多",
+						page: "",
+						icon: "https://fs-1319721001.cos.ap-chongqing.myqcloud.com/fs/20240229/3ee6160289914ee4a8126573fe4dc0ae.png"
+					}
+				],
+				userinfoa: [],
+				isuser: false,
+				menvKey: [],
+				classListb: {}
+			}
+			// this.getStoreActivity();
+		},
+		onLoad(option) {
+			if (option.userCode != null) {
+				uni.setStorageSync('userCode', option.userCode);
+				if (this.utils.checkLoginState()) {
+					this.getUserInfo();
+				}
+			}
+			if (option.hasOwnProperty('q') && option.q) {
+				// 通过下面这步解码,可以拿到url的值
+				const url = decodeURIComponent(option.q)
+				this.url = url;
+				// // 对url中携带的参数提取处理
+				const obj = this.utils.urlToObj(url)
+				uni.setStorageSync('userCode', obj.userCode);
+				if (this.utils.checkLoginState()) {
+					this.getUserInfo();
+				}
+			}
+			// this.getStoreActivity()
+		},
+		// 暂停所有音频(一般用于页面切换时停止正在播放的音频)
+		onUnload() { //普通页面在 onUnload 生命周期中执行
+			uni.$emit('stop')
+		},
+		onHide() { //tabBar页面在onHide生命周期中执行
+			uni.$emit('stop')
+		},
+		onPageScroll(e) {
+			//console.log(e)
+			this.top = e.scrollTop;
+		},
+		mounted() {
+			this.getCourseList()
+			//this.getDepartmentList();
+		},
+		onShareAppMessage(res) {
+			return {
+				title: '云联精选-您的专属解决方案',
+				path: `/pages/common/launch`,
+				// imageUrl: this.$store.state.imgpath +'/app/image/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+			imageUrl: '/static/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+			}
+		},
+		onReachBottom() {
+			// console.log("onReachBottom")
+			this.$refs.tuiProduct.getTuiProducts();
+		},
+		//分享到朋友圈
+		onShareTimeline(res) {
+			return {
+				title: '云联精选-您的专属解决方案',
+				query: '', //页面参数
+				imageUrl: '/static/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				// imageUrl: this.$store.state.imgpath +'/app/image/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+			}
+		},
+		computed: {
+			// 计算属性的 getter
+			bgColor: function() {
+				var top = this.top / 30;
+				return 'rgba(43,199,185, ' + top + ')';
+			},
+			imgPath() {
+				return this.$store.state.imgpath
+			},
+		},
+		onShow() {
+			this.getMenu();
+			this.getIndexData()
+			//this.getTuiDoctorOrder();
+			// console.log(uni.getStorageSync('isLocation'))
+			// if(uni.getStorageSync('isLocation')==""){
+			// 	this.getLocation();
+			// }
+			if (uni.getStorageSync('AppToken')) {
+				this.getUserInfo()
+			} else {
+				this.isuser = true
+			}
+			if (this.utils.checkLoginState()) {
+				this.getCartCount();
+			}
+			this.getStoreConfig();
+			//this.getTuiDoctor()
+			this.getCanvas();
+			this.getDoctorArticleList();
+			this.getArticleList();
+			// this.getshowmanv()
+		},
+		methods: {
+			toLive() {
+				uni.showToast({
+					icon: 'none',
+					title: '暂未开放,敬请期待'
+				})
+			},
+			getCourseList() {
+				courseList().then(res => {
+					if (res.code == 200) {
+						console.log('公域', res.data)
+						this.classList = res.data.slice(0, 3)
+					} else {
+						uni.hideLoading();
+						uni.showToast({
+							title: res.msg,
+							icon: 'none'
+						});
+					}
+				})
+			},
+			goClass(id, type) {
+				// console.log(id)
+				uni.navigateTo({
+					url: '/pages_course/learn?courseId=' + id + '&type=' + type
+				})
+			},
+			goClassList(type) {
+				uni.navigateTo({
+					url: '/pages_course/teacherClassroom?type=' + type
+				})
+			},
+			// getshowmanv() {
+			// 	const data = {
+			// 		key: "store.appShow"
+			// 	}
+			// 	getpro(data).then(res => {
+			// 		this.menvKey = JSON.parse(res.data)
+			// 		// console.log('排序', this.menvKey[0])
+			// 	})
+			// },
+			getUserInfo() {
+				getUserInfo().then(
+					res => {
+						if (res.code == 200) {
+							if (res.user != null) {
+								this.userinfoa = res.user
+								// if(res.user.isPromoter==null||res.user.isPromoter==0){
+								// 	this.tuiModalControl=true
+								// }
+							}
+						} else {
+							uni.showToast({
+								icon: 'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+			cancleTui(e) {
+				this.tuiModalControl = false
+			},
+			submitTui(e) {
+				// console.log(e)
+				if (e.inputText == null || e.inputText == "") {
+					uni.showToast({
+						icon: 'none',
+						title: "请输入邀请码",
+					});
+					return;
+				}
+				var data = {
+					userCode: e.inputText
+				};
+				bindPromoter(data).then(
+					res => {
+						if (res.code == 200) {
+							uni.showToast({
+								icon: 'none',
+								title: res.msg,
+							});
+							this.tuiModalControl = false
+						} else {
+							uni.showToast({
+								icon: 'none',
+								title: res.msg,
+							});
+						}
+					},
+					rej => {}
+				);
+
+			},
+			bindload: function(detail) {},
+			binderror: function(detail) {},
+			closeActivity() {
+				this.activityShow = false;
+				// uni.setStorageSync(this.activity.activityId,null);
+			},
+			getStoreActivity() {
+				let data = {}
+				getStoreActivity(data).then(res => {
+					this.activity = res.activity;
+					if (this.activity != null) {
+						// if(uni.getStorageSync(this.activity.activityId)!=null)
+						// {
+						// 	uni.setStorageSync(this.activity.activityId,1);
+						// 	this.activityShow=true;
+						// }
+						// else{
+						// 	this.activityShow=false;
+						// }
+						this.activityShow = true;
+					} else {
+						this.activityShow = false;
+					}
+				})
+			},
+			showActivity() {
+				this.activityShow = false;
+				uni.navigateTo({
+					url: '/pages_shopping/shopping/activityDetails?activityId=' + this.activity.activityId
+				})
+			},
+			menuClick(item) {
+				if (item.linkType == 1) {
+					if (item.linkUrl == "/pages/shopping/index") {
+						uni.switchTab({
+							url: item.linkUrl
+						})
+					} else if (item.linkUrl == "/pages/healthy/index") {
+						uni.switchTab({
+							url: item.linkUrl
+						})
+					} else {
+
+						uni.navigateTo({
+							url: item.linkUrl
+						})
+					}
+
+				} else if (item.linkType == 0) {
+					uni.showToast({
+						icon: 'none',
+						title: "开发中...",
+					});
+				}
+			},
+			goDev() {
+				uni.showToast({
+					icon: 'none',
+					title: "开发中...",
+				});
+			},
+			handleAdvClick(item) {
+				console.log(item);
+				if (item.showType == 1) {
+					uni.setStorageSync('url', item.advUrl);
+					uni.navigateTo({
+						url: "h5"
+					})
+				} else if (item.showType == 2) {
+					uni.navigateTo({
+						url: item.advUrl
+					})
+				} else if (item.showType == 3) {
+					uni.setStorageSync('content', item.content);
+					uni.navigateTo({
+						url: "content"
+					})
+				}
+			},
+			deptChange(item) {
+				this.deptId = item.departmentId;
+				this.getTuiDoctor();
+			},
+			getMenu() {
+				this.menus = [];
+				getMenu().then(res => {
+					if (res.code == 200) {
+						// for (var i = 0; i < res.data.length; i++) {
+						// 	const item=res.data[i];
+						// if(item.menuName.indexOf('百域百科')>=0 || item.menuName.indexOf('百域自测')>=0
+						// || item.menuName.indexOf('百域档案')>=0 ||item.menuName.indexOf('用药咨询')>=0){
+						// 	this.menus.push(item);
+						// }
+						// }
+						// console.log('图标', res.data)
+						// const menuNames = ['百域百科', '百域自测', '百域档案', '产品商城', '领券中心', '会员'];
+						this.menus = res.data
+						// this.menus = res.data.filter(item => menuNames.some(menuName => item.menuName.includes(menuName)) );
+					} else {
+
+					}
+				});
+			},
+			getCanvas() {
+				getCanvas().then(res => {
+					if (res.code == 200) {
+						if (res.data && res.data.json) {
+							this.canvas = JSON.parse(res.data.json)
+						}
+					}
+				});
+			},
+			getDepartmentList() {
+				this.depts = [];
+				getDepartmentList().then(res => {
+					if (res.code == 200) {
+						var allDept = {
+							departmentId: 0,
+							departmentName: "全部"
+						}
+						this.depts.push(allDept);
+						this.depts = this.depts.concat(res.data);
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: "请求失败",
+						});
+					}
+				});
+			},
+			getTuiDoctor() {
+				let data = {
+					departmentId: this.deptId,
+					doctorType: this.docTab
+				};
+				getTuiDoctor(data).then(
+					res => {
+						if (res.code == 200) {
+							this.doctorList = res.data;
+						} else {
+							uni.showToast({
+								icon: 'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+			docTabChange(val) {
+				if (val == 1) {
+					this.allDoctorTitle = "全部医师"
+				}
+				if (val == 2) {
+					this.allDoctorTitle = "全部药师"
+				}
+				if (val == 3) {
+					this.allDoctorTitle = "全部营养师"
+				}
+				this.docTab = val;
+				this.getTuiDoctor();
+			},
+			showImg(urls) {
+				var imgArr = urls.split(',');
+				//预览图片
+				uni.previewImage({
+					urls: imgArr,
+					current: imgArr[0]
+				});
+			},
+			getStoreConfig() {
+				getStoreConfig().then(
+					res => {
+						if (res.code == 200) {
+							uni.setStorageSync('config', JSON.stringify(res.data));
+						}
+					},
+					rej => {}
+				);
+
+			},
+			goAuthUrl(url) {
+				this.utils.isLogin().then(res => {
+					if (res) {
+						uni.switchTab({
+							url: url
+						})
+					}
+				})
+			},
+			// 跳转页面
+			navTo(url) {
+				uni.navigateTo({
+					url: url
+				})
+			},
+			getLocation() {
+				var that = this;
+				uni.authorize({
+					scope: 'scope.userLocation',
+					success() {
+						uni.getLocation({
+							type: 'gcj02', //腾讯地图使用gcj02获取位置坐标
+							success: function(res) {
+								uni.setStorageSync('isLocation', 1);
+								uni.setStorageSync('lng', res.longitude);
+								uni.setStorageSync('lat', res.latitude);
+							},
+						})
+					},
+					fail(err) {
+						console.log(err)
+					}
+				})
+			},
+			getIndexData() {
+				let data = {};
+				getIndexData(data).then(
+					res => {
+						if (res.code == 200) {
+							this.advList = res.data.advList;
+							this.articleCateList = res.data.articleCateList;
+							if (this.articleCateList != null && this.articleCateList.length > 0) {
+								this.cateId = this.articleCateList[0].cateId;
+								this.getTuiArticle()
+							}
+							this.tuiProductList = res.data.tuiProductList
+							this.newProductList = res.data.newProductList
+							this.hotProductList = res.data.hotProductList
+						} else {
+							uni.showToast({
+								icon: 'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+			getCartCount() {
+				this.utils.isLogin().then(res => {
+					if (res) {
+						getCartCount().then(
+							cartRes => {
+								if (cartRes.code == 200) {
+									this.cartCount = cartRes.data;
+								}
+							},
+							rej => {}
+						);
+					}
+				})
+			},
+			getTuiArticle() {
+				let data = {
+					cateId: this.cateId
+				};
+				getTuiArticle(data).then(
+					res => {
+						if (res.code == 200) {
+							this.articleList = res.data;
+						} else {
+							uni.showToast({
+								icon: 'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+			getTuiDoctorOrder() {
+				let data = {
+					orderType: this.orderType
+				};
+				getTuiDoctorOrder(data).then(
+					res => {
+						if (res.code == 200) {
+							this.doctorOrderList = res.data;
+						} else {
+							uni.showToast({
+								icon: 'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+			showArticle(item) {
+				uni.navigateTo({
+					url: '../healthy/detail?articleId=' + item.articleId
+				})
+			},
+			showProduct(item) {
+				uni.navigateTo({
+					url: '../shopping/productDetails?productId=' + item.productId
+				})
+			},
+			// 顶部搜索
+			toSearch() {
+				uni.navigateTo({
+					url: './productSearch'
+				})
+			},
+			// 健康知识选中
+			articleCateChange(item) {
+				this.cateId = item.cateId;
+				this.getTuiArticle();
+			},
+			// 问诊案例选中
+			orderTypeChange(item) {
+				this.orderType = item.id;
+				console.log(this.orderType)
+				this.getTuiDoctorOrder();
+			},
+			// 关闭限时消息
+			closeMsg() {
+				this.messageShow = false
+			},
+			// 查看全部
+			viewAll(url) {
+				uni.navigateTo({
+					url: '/pages/home/' + url,
+				});
+			},
+			shopDoctor(item) {
+				console.log(item);
+				uni.navigateTo({
+					url: "/pages_doctor/doctorDetail?doctorId=" + item.doctorId
+				})
+			},
+			switchTo(url) {
+				uni.switchTab({
+					url: url
+				})
+				return
+			},
+			yangshengClick(item) {
+				if (item.page == "") {
+					uni.showToast({
+						icon: "none",
+						title: '暂无更多'
+					})
+					return;
+				}
+				uni.navigateTo({
+					url: item.page
+				})
+			},
+			// 在线问诊
+			openIm() {
+				uni.navigateTo({
+					url: '/pages_doctor/doctorOrderIM?orderId=10'
+				})
+			},
+			getDoctorArticleList() {
+				//联网加载数据
+				var that = this;
+				var data = {
+					pageNum: 1,
+					pageSize: 10
+				};
+				getDoctorArticleList(data).then(res => {
+					if (res.code == 200) {
+						this.doctocArticles = res.data.list;
+					}
+				});
+			},
+			getArticleList() {
+				//联网加载数据
+				var that = this;
+				var data = {
+					isTui: 1,
+					pageNum: 1,
+					pageSize: 10,
+				};
+				getArticleList(data).then(res => {
+					if (res.code == 200) {
+						this.articles = res.data.list;
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: "请求失败",
+						});
+					}
+				});
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	.fixed-top-box {
+		width: 100%;
+		position: fixed;
+		top: 0;
+		left: 0;
+		z-index: 1000;
+		transition: all 0.5s;
+		background-color: #2BC7B9;
+
+		&.show-back {
+			// background: linear-gradient(135deg, #66b2ef 0%, #2BC7B9 100%);
+		}
+
+		.status_bar {
+
+			width: 100%;
+		}
+	}
+
+	.content {
+		width: 100%;
+		position: relative;
+
+		.bg {
+			width: 100%;
+			height: 380rpx;
+			position: absolute;
+			top: 0;
+			left: 0;
+		}
+
+		.top-inner {
+			width: 100%;
+			position: absolute;
+			top: 0;
+			left: 0;
+			z-index: 5;
+
+			.top-title {
+				height: 88upx;
+				line-height: 88upx;
+				display: flex;
+				align-items: center;
+				justify-content: flex-start;
+
+				.name {
+					font-size: 42upx;
+					font-family: Source Han Sans CN;
+					font-weight: bold;
+					color: #FFFFFF;
+					padding-left: 41upx;
+				}
+
+				.dot {
+					margin: 0upx 10upx;
+					font-size: 28upx;
+					color: #FFFFFF;
+					opacity: 0.5;
+				}
+
+				.sub-name {
+					font-size: 30upx;
+					font-family: Source Han Sans CN;
+					color: #FFFFFF;
+				}
+
+
+			}
+
+			.func-cont {
+				box-sizing: border-box;
+				display: flex;
+				align-items: center;
+				padding: 30upx 20upx 30upx 20upx;
+
+				.search-cont {
+					box-sizing: border-box;
+					display: flex;
+					align-items: center;
+					width: 552upx;
+					height: 72upx;
+					background: #FFFFFF;
+					border-radius: 36upx;
+					padding: 0 30upx;
+
+					.icon-search {
+						width: 28upx;
+						height: 28upx;
+						margin-right: 20upx;
+					}
+
+					input {
+						height: 60upx;
+						line-height: 60upx;
+						flex: 1;
+					}
+				}
+
+				:deep(.uni-badge) {
+					border: none;
+					background-color: #FF3636;
+					font-family: Roboto;
+				}
+
+				.img-item {
+					width: 44upx;
+					height: 44upx;
+					margin-left: 30upx;
+
+					image {
+						width: 100%;
+						height: 100%;
+					}
+				}
+			}
+
+			.tips {
+				margin: 0upx 20rpx 30rpx;
+				height: 40upx;
+				line-height: 40upx;
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+
+				.left {
+					font-size: 30upx;
+					color: #FFFFFF;
+				}
+
+				.right {
+					padding: 5upx 20rpx;
+					font-size: 24upx;
+					color: #FFFFFF;
+					background-color: #2BC7B9;
+					border-radius: 50rpx;
+				}
+			}
+		}
+
+		.banner-box {
+			padding: 0 20upx;
+
+			.inner {
+				width: 100%;
+				height: 236upx;
+				border-radius: 10upx;
+				overflow: hidden;
+
+				.swiper,
+				.swiper-item,
+				.swiper-item image {
+					width: 100%;
+					height: 100%;
+				}
+
+			}
+		}
+
+		.menu-content {
+			// width: 100%;
+			background-color: #fff;
+			overflow: hidden;
+			padding: 20upx 20upx 0;
+		}
+
+		.menu-box {
+			display: flex;
+			align-items: center;
+			background-color: #FFFFFF;
+		}
+
+		.online-inquiry {
+			box-sizing: border-box;
+			width: 100%;
+			height: 300upx;
+			padding: 20upx;
+			background: linear-gradient(180deg, rgba(255, 255, 255, 0.38) 62%, rgba(255, 255, 255, 0) 100%);
+			display: flex;
+			justify-content: space-between;
+
+			.item {
+				// width: 46.13%;
+				width: 100%;
+				height: 100%;
+				position: relative;
+
+				.bg-img,
+				.inner {
+					width: 100%;
+					height: 100%;
+					position: absolute;
+					top: 0;
+					left: 0;
+					z-index: 1;
+					border-radius: 15rpx;
+				}
+
+				.inner {
+					box-sizing: border-box;
+					z-index: 2;
+					display: flex;
+					flex-direction: column;
+					justify-content: center;
+					padding-left: 32upx;
+
+					.title {
+						font-size: 30upx;
+						line-height: 1;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #111111;
+						margin-bottom: 20upx;
+					}
+
+					.sub-title {
+						font-size: 24upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #666666;
+					}
+
+					image {
+						width: 80upx;
+						height: 90upx;
+						position: absolute;
+						right: 7upx;
+						bottom: 7upx;
+					}
+				}
+			}
+		}
+
+		.index-cont {
+			box-sizing: border-box;
+			padding: 0 20upx 120rpx;
+
+			.pub-item {
+				background: #FFFFFF;
+				border-radius: 16upx;
+				margin-bottom: 20upx;
+
+				.tabs {
+					width: 100%;
+					display: flex;
+					align-items: center;
+					justify-content: flex-start;
+					height: 110rpx;
+					background-color: #F0F3F4;
+
+					.tab {
+						height: 110rpx;
+						display: flex;
+						align-items: center;
+						justify-content: center;
+						position: relative;
+						flex: 1;
+
+						.img {
+							z-index: 1;
+							position: absolute;
+							top: 0rpx;
+							left: 0rpx;
+							width: 100%;
+							height: 100%;
+						}
+
+						.inner {
+							z-index: 2;
+
+							.title {
+								font-size: 32upx;
+								font-family: PingFang SC;
+								font-weight: bold;
+								color: #666666;
+							}
+
+							.active {
+								color: #2BC7B9;
+							}
+						}
+
+					}
+
+
+				}
+
+				.pub-title-box {
+					box-sizing: border-box;
+					padding: 36upx 30upx;
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+
+					.left {
+						font-size: 32upx;
+						line-height: 1;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #111111;
+					}
+
+					.right {
+						display: flex;
+						align-items: center;
+						justify-content: center;
+
+						.text {
+							font-size: 24rpx;
+							line-height: 1;
+							font-family: PingFang SC;
+							font-weight: 500;
+							color: #999999;
+							margin-right: 10upx;
+						}
+
+						image {
+							width: 14upx;
+							height: 24upx;
+						}
+					}
+
+				}
+
+				.doc-tab-box {
+					padding: 14rpx 30rpx 0rpx 30rpx;
+					position: relative;
+
+					.tab-inner {
+						padding: 14upx 0 30upx;
+						display: flex;
+						overflow-x: auto;
+					}
+
+					.item {
+						font-size: 28upx;
+						white-space: nowrap;
+						line-height: 1;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #666666;
+						margin-right: 40upx;
+						position: relative;
+
+						&:last-child {
+							margin-right: 0;
+						}
+
+						&.active {
+							font-weight: bold;
+							color: #333333;
+						}
+
+						&.cases {
+							margin-right: 60upx;
+						}
+
+						.text {
+							position: relative;
+							z-index: 1;
+						}
+
+						.tab-bg {
+							width: 72upx;
+							height: 28upx;
+							position: absolute;
+							top: 17upx;
+							left: 50%;
+							transform: translateX(-36upx);
+							z-index: -1;
+						}
+					}
+
+					.right-mask {
+						width: 56upx;
+						height: 34upx;
+						position: absolute;
+						top: 25upx;
+						right: 0upx;
+						z-index: 1;
+					}
+				}
+
+				.doc-list {
+					padding: 20upx;
+
+					.item {
+						box-sizing: border-box;
+						background: #FFFFFF;
+						// border-radius: 16upx;
+						display: flex;
+						border-bottom: 1px solid #F0F0F0;
+						margin-bottom: 30rpx;
+
+						.head-box {
+							width: 120upx;
+							height: 120upx;
+							background: #EDF1F4;
+							border-radius: 50%;
+							overflow: hidden;
+							margin-right: 30upx;
+
+							image {
+								width: 100%;
+								height: 100%;
+							}
+						}
+
+						.info {
+							width: calc(100% - 150upx);
+
+							.top {
+								display: flex;
+								align-items: center;
+								font-family: PingFang SC;
+								line-height: 1;
+
+								.name {
+									font-size: 34upx;
+									font-weight: bold;
+									color: #111111;
+								}
+
+								.line {
+									width: 1px;
+									height: 26upx;
+									background: #DDDDDD;
+									margin: 0 20upx;
+								}
+
+								.other {
+									font-size: 28upx;
+									font-weight: 500;
+									color: #333333;
+								}
+							}
+
+							.unit-box {
+								display: flex;
+								margin-top: 24upx;
+
+								.level {
+									padding: 0 10upx;
+									height: 30upx;
+									line-height: 30upx;
+									font-size: 22upx;
+									font-family: PingFang SC;
+									font-weight: 500;
+									color: #FFFFFF;
+									background: #2BC7B9;
+									border-radius: 10upx 4upx 10upx 4upx;
+									margin-right: 12upx;
+								}
+
+								.name {
+									font-size: 28upx;
+									font-family: PingFang SC;
+									font-weight: 500;
+									color: #333333;
+									line-height: 30upx;
+								}
+							}
+
+							.expertise {
+								font-size: 26upx;
+								font-family: PingFang SC;
+								font-weight: 500;
+								color: #666666;
+								line-height: 42upx;
+								margin: 22upx 0 26upx;
+							}
+
+							.rate-box {
+								display: flex;
+								align-items: center;
+
+								.star {
+									display: flex;
+									align-items: center;
+
+									image {
+										width: 22upx;
+										height: 22upx;
+										margin-right: 10upx;
+									}
+
+									text {
+										font-size: 26upx;
+										font-family: PingFang SC;
+										font-weight: bold;
+										color: #CEA764;
+										line-height: 1;
+									}
+								}
+
+								.line {
+									width: 1px;
+									height: 20upx;
+									background: #DDDDDD;
+									margin: 0 20upx;
+								}
+
+								.num-box {
+									display: flex;
+									align-items: center;
+									font-family: PingFang SC;
+
+									.label {
+										font-size: 24upx;
+										font-weight: 500;
+										color: #999999;
+										line-height: 1;
+										margin-right: 7px;
+									}
+
+									.num {
+										font-size: 26upx;
+										font-weight: bold;
+										color: #CEA764;
+										line-height: 1;
+									}
+								}
+							}
+
+							.price-box {
+								display: flex;
+								align-items: center;
+								margin-top: 38upx;
+
+								.btn-item {
+									display: flex;
+									align-items: center;
+									justify-content: center;
+									width: 164upx;
+									height: 56upx;
+									line-height: 56upx;
+									border: 1px solid rgba(43, 199, 185, 0.5);
+									border-radius: 28upx;
+									font-family: PingFang SC;
+									margin-right: 30upx;
+
+									&:last-child {
+										margin-right: 0;
+									}
+
+									.label {
+										font-size: 26upx;
+										font-weight: 500;
+										color: #2BC7B9;
+										margin-right: 5upx;
+									}
+
+									.num {
+										font-size: 28upx;
+										font-weight: bold;
+										color: #2BC7B9;
+									}
+								}
+							}
+						}
+					}
+
+					.item:last-child {
+						border-bottom: none;
+						margin-bottom: 0rpx;
+					}
+
+					.bottom-title {
+						height: 50rpx;
+						display: flex;
+						align-items: center;
+						justify-content: center;
+						font-size: 26rpx;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #2BC7B9;
+
+						image {
+							margin-left: 8rpx;
+							width: 14rpx;
+							height: 24rpx;
+						}
+					}
+				}
+
+				// 医师团队
+				.doc-cont {
+					box-sizing: border-box;
+					padding: 0 30upx;
+
+					.inner {
+						padding: 4upx 0 40upx;
+						display: flex;
+						overflow-x: auto;
+					}
+
+					.item {
+						display: flex;
+						align-items: center;
+						flex-direction: column;
+						margin-right: 40upx;
+
+						&:last-child {
+							margin-right: 0;
+						}
+
+						.head-box {
+							width: 120upx;
+							height: 120upx;
+							background: #F2F5F9;
+							border-radius: 50%;
+							margin-bottom: 20upx;
+							overflow: hidden;
+
+							image {
+								width: 100%;
+								height: 100%;
+							}
+						}
+
+						.name {
+							max-width: 120upx;
+							font-size: 28upx;
+							line-height: 1;
+							font-family: PingFang SC;
+							font-weight: 500;
+							color: #111111;
+							margin-bottom: 16upx;
+							text-align: center;
+						}
+
+						.position {
+							max-width: 120upx;
+							font-size: 24upx;
+							line-height: 1;
+							font-family: PingFang SC;
+							font-weight: 500;
+							color: #999999;
+							text-align: center;
+						}
+					}
+				}
+
+				.inner {
+					padding: 0 30upx;
+				}
+
+				// 健康知识
+				.pub-tab-box {
+					position: relative;
+
+					.tab-inner {
+						padding: 14upx 0 30upx;
+						display: flex;
+						overflow-x: auto;
+					}
+
+					.item {
+						font-size: 28upx;
+						white-space: nowrap;
+						line-height: 1;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #666666;
+						margin-right: 40upx;
+						position: relative;
+
+						&:last-child {
+							margin-right: 0;
+						}
+
+						&.active {
+							font-weight: bold;
+							color: #333333;
+						}
+
+						&.cases {
+							margin-right: 60upx;
+						}
+
+						.text {
+							position: relative;
+							z-index: 1;
+						}
+
+						.tab-bg {
+							width: 72upx;
+							height: 28upx;
+							position: absolute;
+							top: 17upx;
+							left: 50%;
+							transform: translateX(-36upx);
+							z-index: -1;
+						}
+					}
+
+					.right-mask {
+						width: 56upx;
+						height: 34upx;
+						position: absolute;
+						top: 14upx;
+						right: -30upx;
+						z-index: 1;
+					}
+				}
+
+				.know-list {
+					padding-right: 10upx;
+
+					.item {
+						padding: 30upx 0;
+						display: flex;
+						align-items: center;
+						justify-content: space-between;
+						border-bottom: 1px solid #F0F0F0;
+
+						&:last-child {
+							border-bottom: none;
+						}
+
+						.left {
+							flex: 1;
+							padding-right: 40upx;
+							height: 190upx;
+							display: flex;
+							flex-direction: column;
+							justify-content: space-between;
+
+							.title {
+								font-size: 32upx;
+								font-family: PingFang SC;
+								font-weight: 500;
+								color: #111111;
+								line-height: 48upx;
+							}
+
+							.info-box {
+								width: 100%;
+								display: flex;
+								align-items: center;
+								justify-content: space-between;
+
+								.readers {
+									display: flex;
+									align-items: center;
+
+									.head-box {
+										margin-right: 27upx;
+										display: flex;
+										align-items: center;
+
+										.head {
+											width: 48upx;
+											height: 48upx;
+											border-radius: 50%;
+											overflow: hidden;
+											box-shadow: 0 0 0 1px #fff;
+											margin-right: -10upx;
+
+											image {
+												width: 100%;
+												height: 100%;
+											}
+										}
+									}
+
+									.readings {
+										display: flex;
+										align-items: center;
+
+										.eye {
+											width: 26upx;
+											height: 20upx;
+											margin-right: 9upx;
+										}
+
+										.num {
+											font-size: 24upx;
+											font-family: PingFang SC;
+											font-weight: 500;
+											color: #999999;
+											line-height: 1;
+										}
+									}
+								}
+
+								.time {
+									font-size: 24upx;
+									line-height: 1;
+									font-family: PingFang SC;
+									font-weight: 500;
+									color: #999999;
+								}
+							}
+						}
+
+						.right {
+							width: 250upx;
+							height: 190upx;
+							border-radius: 8upx;
+							overflow: hidden;
+
+							image {
+								width: 100%;
+								height: 100%;
+							}
+						}
+					}
+				}
+
+				// 问诊案例
+				.cases-list {
+					padding-bottom: 10upx;
+
+					.item {
+						padding: 30upx 0;
+						border-bottom: 1px solid #F0F0F0;
+
+						&:last-child {
+							border-bottom: none;
+						}
+
+						.dec-text {
+							font-size: 32upx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #111111;
+							line-height: 48upx;
+						}
+
+						.images-box {
+							margin-top: 10upx;
+							display: flex;
+							flex-wrap: wrap;
+
+							.img-item {
+								width: 155upx;
+								height: 155upx;
+								background: #F5F5F5;
+								border-radius: 8upx;
+								margin: 0 10upx 10upx 0;
+								overflow: hidden;
+
+								image {
+									width: 100%;
+									height: 100%;
+								}
+
+								&:nth-child(4n) {
+									margin-right: 0;
+								}
+							}
+						}
+
+						.doc-info {
+							display: flex;
+							align-items: center;
+							margin: 30upx 0 20upx;
+
+							.head {
+								width: 60upx;
+								height: 60upx;
+								background: #F2F5F9;
+								border-radius: 50%;
+								margin-right: 20upx;
+								overflow: hidden;
+
+								image {
+									width: 100%;
+									height: 100%;
+								}
+							}
+
+							.name {
+								font-size: 28upx;
+								line-height: 1;
+								font-family: PingFang SC;
+								font-weight: 500;
+								color: #111111;
+							}
+
+							.line {
+								width: 1px;
+								height: 22upx;
+								background: #DDDDDD;
+								margin: 0 16upx;
+							}
+
+							.posit,
+							.address {
+								font-size: 26upx;
+								font-family: PingFang SC;
+								font-weight: 500;
+								color: #999999;
+							}
+						}
+
+						.answer-box {
+							width: 100%;
+							background: #F5F7F7;
+							border-radius: 10upx;
+							display: flex;
+							flex-direction: column;
+							justify-content: center;
+
+							.text-inner {
+								// height: 84upx;
+								font-size: 28upx;
+								font-family: PingFang SC;
+								font-weight: 500;
+								color: #666666;
+								line-height: 42upx;
+								padding: 15upx;
+							}
+						}
+
+						.read-box {
+							margin-top: 30upx;
+							display: flex;
+							align-items: center;
+							justify-content: flex-end;
+
+							image {
+								width: 24upx;
+								height: 19upx;
+								margin-right: 10upx;
+							}
+
+							.text {
+								font-size: 24upx;
+								font-family: PingFang SC;
+								font-weight: 500;
+								color: #999999;
+							}
+						}
+					}
+				}
+			}
+
+			// 精选产品
+			.feat-title {
+				margin-top: 30upx;
+				padding: 10upx 0 33upx;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+
+				image {
+					width: 37upx;
+					height: 37upx;
+					margin: 0upx 20upx;
+				}
+
+				text {
+					font-size: 36upx;
+					line-height: 1;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #111111;
+				}
+			}
+
+			.drug-list {
+				display: flex;
+				flex-wrap: wrap;
+
+				.item {
+					margin-right: 20rpx;
+					margin-bottom: 20rpx;
+					width: 345rpx;
+					background: #FFFFFF;
+					box-shadow: 0px 0px 10rpx 4rpx rgba(199, 199, 199, 0.22);
+					border-radius: 20rpx;
+					overflow: hidden;
+
+					&:nth-child(2n) {
+						margin-right: 0;
+					}
+
+					.img-box {
+						width: 100%;
+						height: 334upx;
+
+						image {
+							width: 100%;
+							height: 100%;
+						}
+					}
+
+					.info-box {
+						box-sizing: border-box;
+						height: 182upx;
+						padding: 20upx;
+
+						.title {
+							height: 80upx;
+							font-size: 26upx;
+							font-family: PingFang SC;
+							font-weight: 500;
+							color: #111111;
+							line-height: 40upx;
+						}
+
+						.price-box {
+							display: flex;
+							align-items: center;
+							margin-top: 20upx;
+
+							.now {
+								color: #FF6633;
+								display: flex;
+								align-items: flex-end;
+								margin-right: 20upx;
+								font-family: PingFang SC;
+
+								.unit {
+									font-size: 24upx;
+									line-height: 1.4;
+									margin-right: 4upx;
+								}
+
+								.num {
+									font-size: 36upx;
+									font-weight: bold;
+									line-height: 1;
+								}
+							}
+
+							.old {
+								font-size: 26upx;
+								font-family: PingFang SC;
+								text-decoration: line-through;
+								color: #BBBBBB;
+								line-height: 1;
+							}
+						}
+					}
+				}
+			}
+		}
+
+		// 生活大讲堂
+		.open-class {
+			padding: 20rpx;
+			margin: 20rpx 15rpx 0rpx;
+			// background-color: #f0f4f7;
+
+			.title-box {
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+
+				.title {
+					font-size: 32rpx;
+					font-weight: bold;
+				}
+
+				.more {
+					font-size: 24rpx;
+					padding-left: 30rpx;
+					color: #999999;
+					display: flex;
+					align-items: center;
+
+					image {
+						width: 24rpx;
+						height: 24rpx;
+					}
+				}
+			}
+
+
+			.class-item {
+				font-size: 24rpx;
+				margin-top: 24rpx;
+				background-color: #fff;
+				border-radius: 16rpx;
+				padding: 0 16rpx;
+				margin-right: 14rpx;
+				width: 250rpx;
+				height: 280rpx;
+				font-size: 26rpx;
+				font-weight: 500;
+
+				.img-box {
+					height: 220rpx;
+					border-radius: 16rpx;
+					overflow: hidden;
+					margin-bottom: 12rpx;
+
+					image {
+						width: 100%;
+						height: 100%;
+					}
+				}
+
+
+				&:last-child {
+					margin-right: 0rpx;
+				}
+			}
+		}
+
+		.modules {
+			.module {
+				.depts {
+					z-index: 101;
+					margin: 20rpx 15rpx 0rpx;
+					padding: 20rpx;
+					box-shadow: 0px 0px 5px 2px rgba(0, 0, 0, 0.05);
+					background-color: #fff;
+					border-radius: 15rpx;
+
+					.title {
+						font-size: 32upx;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #2A2B2E;
+					}
+
+					.dept-box {
+						margin-top: 15rpx;
+						display: flex;
+						align-items: center;
+						justify-content: flex-start;
+						flex-wrap: wrap;
+
+						.dept {
+							padding: 15rpx 5rpx;
+							width: 25%;
+							display: flex;
+							flex-direction: column;
+							align-items: center;
+							justify-content: center;
+							padding: 14rpx 0;
+
+							.icon {
+								width: 58rpx;
+								height: 58rpx;
+							}
+
+							.title {
+								margin-top: 10rpx;
+								font-size: 24upx;
+								font-family: PingFang SC;
+								font-weight: 500;
+								color: #111111;
+							}
+						}
+					}
+
+				}
+
+				.doctor-articles {
+					z-index: 101;
+					margin: 20rpx 15rpx 0rpx;
+					padding: 20rpx;
+					box-shadow: 0px 0px 5px 2px rgba(0, 0, 0, 0.05);
+					background-color: #fff;
+					border-radius: 15rpx;
+
+					.title-box {
+						display: flex;
+						flex-direction: row;
+						align-items: center;
+						justify-content: space-between;
+
+						.title {
+							font-size: 32upx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #111111;
+						}
+
+						.more {
+							display: flex;
+							align-items: center;
+							justify-content: flex-end;
+
+							.text {
+								font-size: 24rpx;
+								font-family: PingFang SC;
+								color: #9B9B9B;
+							}
+
+							image {
+								margin-left: 10rpx;
+								width: 15rpx;
+								height: 20rpx;
+							}
+
+						}
+					}
+
+					.article-box {
+						padding: 20rpx 0rpx;
+						overflow-x: auto;
+						box-sizing: border-box;
+						display: flex;
+						align-items: center;
+						justify-content: flex-start;
+
+						.article {
+							width: 300rpx;
+							margin-right: 20rpx;
+							background: #f9f8fe;
+							display: flex;
+							flex-direction: column;
+							align-items: flex-start;
+							justify-content: flex-start;
+
+							&:last-child {
+								margin-right: 0rpx;
+							}
+
+							.image-box {
+								width: 300rpx;
+								height: 400rpx;
+								position: relative;
+								border-radius: 20rpx;
+
+								image {
+									border-radius: 20rpx;
+									width: 300rpx;
+									height: 400rpx;
+								}
+
+								.views {
+									position: absolute;
+									top: 0rpx;
+									left: 0rpx;
+									padding: 5rpx 10rpx;
+									background: rgba(0, 0, 0, 0.25);
+									border-radius: 12rpx 0px 12rpx 0px;
+									opacity: 1;
+									font-size: 20rpx;
+									font-family: PingFang SC-Bold, PingFang SC;
+									font-weight: bold;
+									color: #FFFFFF;
+								}
+
+								.doctor {
+									margin: 10rpx;
+									display: flex;
+									align-items: center;
+									justify-content: flex-start;
+									position: absolute;
+									bottom: 0rpx;
+									left: 0rpx;
+
+									image {
+										border-radius: 50%;
+										width: 64rpx;
+										height: 64rpx;
+									}
+
+									.right {
+										width: 200rpx;
+										margin-left: 10rpx;
+										display: flex;
+										flex-direction: column;
+										align-items: flex-start;
+										justify-content: space-between;
+
+										.doc-name {
+											width: 200rpx;
+											font-size: 30rpx;
+											font-weight: bold;
+											font-family: PingFang SC;
+											color: #fff;
+										}
+
+										.doc-position {
+											width: 100%;
+											font-size: 28rpx;
+											font-family: PingFang SC;
+											color: #fff;
+											font-weight: bold;
+											opacity: 0.8;
+										}
+									}
+								}
+							}
+
+							.article-title-box {
+								width: 100%;
+								margin-top: 10rpx;
+								display: flex;
+								align-items: center;
+								justify-content: flex-start;
+
+								.article-title {
+									font-size: 30rpx;
+									font-weight: bold;
+									font-family: PingFang SC;
+									color: #2A2B2E;
+								}
+
+							}
+
+						}
+
+					}
+				}
+
+				.doctors {
+					z-index: 101;
+					margin: 20rpx 15rpx;
+					padding: 20rpx;
+					box-shadow: 0px 0px 5px 2px rgba(0, 0, 0, 0.05);
+					background-color: #fff;
+					border-radius: 15rpx;
+
+					.title-box {
+						display: flex;
+						flex-direction: row;
+						align-items: center;
+						justify-content: space-between;
+
+						.title {
+							font-size: 32upx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #111111;
+						}
+
+						.more {
+							display: flex;
+							align-items: center;
+							justify-content: flex-end;
+
+							.text {
+								font-size: 24rpx;
+								font-family: PingFang SC;
+								color: #9B9B9B;
+							}
+
+							image {
+								margin-left: 10rpx;
+								width: 15rpx;
+								height: 20rpx;
+							}
+
+						}
+					}
+
+				}
+
+				.articles {
+					z-index: 101;
+					margin: 20rpx 15rpx;
+					padding: 20rpx;
+					box-shadow: 0px 0px 5px 2px rgba(0, 0, 0, 0.05);
+					background-color: #fff;
+					border-radius: 15rpx;
+
+					.title-box {
+						display: flex;
+						flex-direction: row;
+						align-items: center;
+						justify-content: space-between;
+
+						.title {
+							font-size: 32upx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #111111;
+						}
+
+						.more {
+							display: flex;
+							align-items: center;
+							justify-content: flex-end;
+
+							.text {
+								font-size: 24rpx;
+								font-family: PingFang SC;
+								color: #9B9B9B;
+							}
+
+							image {
+								margin-left: 10rpx;
+								width: 15rpx;
+								height: 20rpx;
+							}
+
+						}
+					}
+
+					.article-box {
+						margin-top: 15rpx;
+						padding: 20rpx 0rpx 0rpx;
+						display: flex;
+						flex-direction: column;
+						align-items: flex-start;
+						justify-content: flex-start;
+
+						.item {
+							width: 100%;
+							margin-bottom: 20rpx;
+							display: flex;
+							align-items: flex-start;
+							justify-content: flex-start;
+
+							&:last-child {
+								margin-bottom: 0rpx;
+							}
+
+							.left {
+								flex: 1;
+								height: 160rpx;
+								margin-right: 15rpx;
+								display: flex;
+								flex-direction: column;
+								align-items: flex-start;
+								justify-content: space-between;
+
+								.title {
+									font-size: 28upx;
+									font-family: PingFang SC;
+									font-weight: bold;
+									color: #111111;
+								}
+
+								.views {
+									font-size: 24upx;
+									font-family: PingFang SC;
+									color: #9a9a9c;
+								}
+							}
+
+							.right {
+								image {
+									border-radius: 10rpx;
+									width: 220rpx;
+									height: 160rpx;
+									border: 1px solid #eeeeee;
+								}
+							}
+						}
+					}
+				}
+
+				.packages {
+					z-index: 101;
+					margin: 20rpx 15rpx;
+					padding: 20rpx;
+					box-shadow: 0px 0px 5px 2px rgba(0, 0, 0, 0.05);
+					background-color: #fff;
+					border-radius: 15rpx;
+
+					.title-box {
+						display: flex;
+						flex-direction: row;
+						align-items: center;
+						justify-content: space-between;
+
+						.title {
+							font-size: 32upx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #111111;
+						}
+
+						.more {
+							display: flex;
+							align-items: center;
+							justify-content: flex-end;
+
+							.text {
+								font-size: 24rpx;
+								font-family: PingFang SC;
+								color: #9B9B9B;
+							}
+
+							image {
+								margin-left: 10rpx;
+								width: 15rpx;
+								height: 20rpx;
+							}
+
+						}
+					}
+
+					.package-box {
+						padding: 20rpx 0rpx 0rpx;
+						display: flex;
+						align-items: flex-start;
+						justify-content: flex-start;
+						flex-wrap: wrap;
+
+						.item {
+							width: calc(50% - 20rpx);
+							border-radius: 15rpx;
+							margin: 10rpx;
+							display: flex;
+							flex-direction: column;
+							align-items: flex-start;
+							justify-content: flex-start;
+
+							&:last-child {}
+
+							.top {
+								width: 100%;
+								height: 300rpx;
+
+								image {
+									border-radius: 15rpx 15rpx 0rpx 0rpx;
+									width: 100%;
+									height: 300rpx;
+								}
+
+							}
+
+							.bottom {
+								width: 100%;
+								margin-top: 15rpx;
+
+								.title {
+									font-weight: bold;
+									font-size: 28upx;
+									font-family: PingFang SC;
+									color: #111111;
+								}
+
+								.price-box {
+									margin-top: 10rpx;
+									display: flex;
+									align-items: center;
+									justify-content: space-between;
+									width: 100%;
+
+									.price {
+										padding: 5rpx 10rpx;
+										background-color: #2BC7B9;
+										border-radius: 30rpx;
+										font-size: 20upx;
+										font-family: PingFang SC;
+										color: #ffffff;
+									}
+
+									.count {
+										font-size: 24upx;
+										font-family: PingFang SC;
+										color: #333333;
+									}
+
+								}
+							}
+						}
+					}
+
+
+				}
+			}
+
+		}
+	}
+
+	.official-account {
+		box-sizing: border-box;
+		width: 100%;
+		height: 100upx;
+		position: fixed;
+		bottom: 30upx;
+		z-index: 99;
+		padding: 0 20upx 180rpx 20upx;
+	}
+
+	// 消息
+	.message-box {
+		box-sizing: border-box;
+		width: 100%;
+		height: 84upx;
+		background: #F3FFFD;
+		border: 1px solid #C7E9E5;
+		box-shadow: 0px 4upx 12upx 0px rgba(90, 203, 138, 0.16);
+		border-radius: 16upx;
+		position: fixed;
+		left: 50%;
+		transform: translateX(-50%);
+		bottom: 30upx;
+		z-index: 99;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		padding: 0 20upx 0 30upx;
+
+		.left {
+			flex: 1;
+			display: flex;
+			align-items: center;
+
+			image {
+				width: 24upx;
+				height: 24upx;
+				margin-right: 18upx;
+			}
+
+			.text {
+				width: 90%;
+				font-size: 28upx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #2BC7B9;
+			}
+		}
+
+		.btn {
+			width: 100upx;
+			height: 48upx;
+			line-height: 48upx;
+			text-align: center;
+			font-size: 24upx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #FFFFFF;
+			border: 1px solid #D2E6FF;
+			background: linear-gradient(135deg, #66b2ef 0%, #2BC7B9 100%);
+			border-radius: 24upx;
+			margin-left: 30upx;
+		}
+
+	}
+
+	.contact-btn {
+		display: inline-block;
+		position: absolute;
+		top: 0;
+		left: 0;
+		width: 100%;
+		height: 100%;
+		opacity: 0;
+	}
+
+	.popup-box {
+		position: fixed;
+		top: 0;
+		right: 0;
+		left: 0;
+		bottom: 0;
+		z-index: 999;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+
+		.info-mask {
+			position: fixed;
+			top: 0;
+			right: 0;
+			bottom: 0;
+			left: 0;
+			background-color: rgba($color: #000000, $alpha: 0.5);
+			z-index: 999;
+		}
+
+		.info-form {
+			z-index: 1000;
+			width: 450rpx;
+			display: flex;
+			flex-direction: column;
+			justify-content: center;
+			align-items: center;
+			position: relative;
+
+			image {
+				width: 100%;
+			}
+		}
+	}
+</style>

+ 150 - 0
pages/home/components/CategoryTags.vue

@@ -0,0 +1,150 @@
+<template>
+	<view class="category-tags" v-if="tags && tags.length > 0">
+		<!-- 1个:整行单模块 -->
+		<view v-if="tags.length === 1" class="layout-single">
+			<view class="tag-item" @tap="onSelect(tags[0])">
+				<image v-if="tags[0].icon" class="tag-icon" :src="tags[0].icon" mode="aspectFill" />
+				<text class="tag-name">{{ tags[0].name || tags[0].categoryName || tags[0].cateName || tags[0].title }}</text>
+			</view>
+		</view>
+		<!-- 2~4个:一行平分 -->
+		<view v-else-if="tags.length >= 2 && tags.length <= 4" class="layout-row" :style="{ '--cols': tags.length }">
+			<view
+				v-for="(item, index) in tags"
+				:key="item.id || index"
+				class="tag-item"
+				@tap="onSelect(item)"
+			>
+				<image v-if="item.icon" class="tag-icon" :src="item.icon" mode="aspectFill" />
+				<text class="tag-name">{{ item.name || item.categoryName || item.cateName || item.title }}</text>
+			</view>
+		</view>
+		<!-- 5~8个:两行,每行最多4个,按四等分 -->
+		<view v-else class="layout-grid">
+			<view
+				v-for="(item, index) in tags"
+				:key="item.id || index"
+				class="tag-item"
+				@tap="onSelect(item)"
+			>
+				<image v-if="item.icon" class="tag-icon" :src="item.icon" mode="aspectFill" />
+				<text class="tag-name">{{ item.name || item.categoryName || item.cateName || item.title }}</text>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	name: 'CategoryTags',
+	props: {
+		tags: { type: Array, default: () => [] }
+	},
+  onload(val){
+    console.log(this.tags)
+  },
+	methods: {
+		onSelect(item) {
+			this.$emit('select', item);
+		}
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+.category-tags {
+	background: #fff;
+	padding: 24rpx;
+}
+
+/* 1个:整行占据 */
+.layout-single {
+	width: 100%;
+	.tag-item {
+		width: 100%;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		padding: 24rpx;
+		background: #f5f5f5;
+		border-radius: 16rpx;
+	}
+	.tag-icon {
+		width: 64rpx;
+		height: 64rpx;
+		border-radius: 12rpx;
+		margin-right: 16rpx;
+		flex-shrink: 0;
+	}
+	.tag-name {
+		font-size: 28rpx;
+		color: #333;
+	}
+}
+
+/* 2~4个:一行平分 */
+.layout-row {
+	display: flex;
+	flex-wrap: wrap;
+	gap: 24rpx;
+	.tag-item {
+		flex: 1;
+		min-width: 0;
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		justify-content: center;
+		padding: 20rpx 12rpx;
+		background: #f5f5f5;
+		border-radius: 16rpx;
+	}
+	.tag-icon {
+		width: 72rpx;
+		height: 72rpx;
+		border-radius: 12rpx;
+		margin-bottom: 12rpx;
+		flex-shrink: 0;
+	}
+	.tag-name {
+		font-size: 24rpx;
+		color: #333;
+		text-align: center;
+		overflow: hidden;
+		text-overflow: ellipsis;
+		white-space: nowrap;
+		width: 100%;
+	}
+}
+
+/* 5~8个:两行,每行四等分 */
+.layout-grid {
+	display: grid;
+	grid-template-columns: repeat(4, 1fr);
+	gap: 24rpx;
+	.tag-item {
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		justify-content: center;
+		padding: 20rpx 8rpx;
+		background: #f5f5f5;
+		border-radius: 16rpx;
+	}
+	.tag-icon {
+		width: 72rpx;
+		height: 72rpx;
+		border-radius: 12rpx;
+		margin-bottom: 12rpx;
+		flex-shrink: 0;
+	}
+	.tag-name {
+		font-size: 22rpx;
+		color: #333;
+		text-align: center;
+		overflow: hidden;
+		text-overflow: ellipsis;
+		white-space: nowrap;
+		width: 100%;
+	}
+}
+</style>

+ 67 - 0
pages/home/components/ChannelEntry.vue

@@ -0,0 +1,67 @@
+<template>
+	<view class="channel-entry" v-if="list && list.length > 0">
+		<view class="channel-grid-wrap">
+			<view class="channel-grid">
+				<view class="channel-item" v-for="(item, ci) in list" :key="item.id || ci" @tap="onClick(item)">
+					<image class="channel-icon" :src="item.icon || item.imageUrl" mode="aspectFill"></image>
+					<text class="channel-name">{{ item.categoryName || item.name || item.menuName }}</text>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	name: 'ChannelEntry',
+	props: {
+		list: { type: Array, default: () => [] },
+		perRow: { type: Number, default: 4 },
+		rows: { type: Number, default: 2 },
+		imgSize: { type: Number, default: 88 }
+	},
+	methods: {
+		onClick(item) {
+			this.$emit('click', item);
+		}
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+.channel-entry {
+	background: #fff;
+	padding: 24rpx 0 32rpx;
+}
+.channel-grid-wrap {
+	padding: 0 24rpx;
+}
+.channel-grid {
+	display: flex;
+	flex-wrap: wrap;
+}
+.channel-item {
+	width: 25%;
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+	padding-bottom: 28rpx;
+	box-sizing: border-box;
+}
+.channel-icon {
+	width: 96rpx;
+	height: 96rpx;
+	border-radius: 50%;
+	margin-bottom: 12rpx;
+	background: #f5f5f5;
+}
+.channel-name {
+	font-size: 24rpx;
+	color: #333;
+	text-align: center;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+	max-width: 100%;
+}
+</style>

+ 129 - 0
pages/home/components/GoodsCard.vue

@@ -0,0 +1,129 @@
+<template>
+	<view class="goods-card" @click="$emit('click', item)">
+		<view class="img-wrap">
+			<image class="img" :src="item.image || item.imageUrl || defaultImg" mode="aspectFill"></image>
+		</view>
+		<view class="info">
+			<view class="tag-row" v-if="tagList && tagList.length > 0">
+				<text class="tag-chip" v-for="(t, i) in tagList" :key="i">{{ t }}</text>
+			</view>
+			<view class="title line2">{{ item.productName || item.title || item.name }}</view>
+			<view class="price-row">
+				<text class="price" v-if="showPrice">¥{{ (item.price != null ? item.price : item.payPrice || 0).toFixed(2) }}</text>
+				<text class="ot-price" v-if="item.otPrice != null">原价¥{{ Number(item.otPrice).toFixed(2) }}</text>
+			</view>
+			<view class="meta-row" v-if="item.sales != null || item.goodRate != null">
+				<text class="sales" v-if="item.sales != null">已售{{ item.sales }}</text>
+				<text class="good-rate" v-if="item.goodRate != null">好评{{ item.goodRate }}%</text>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	name: 'GoodsCard',
+	props: {
+		item: { type: Object, required: true },
+		showPrice: { type: Boolean, default: true },
+		defaultImg: {
+			type: String,
+			default: 'https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/no-img.png'
+		}
+	},
+	computed: {
+		tagList() {
+			const item = this.item
+			if (!item) return []
+			if (Array.isArray(item.tagList)) return item.tagList
+			if (Array.isArray(item.tagNames)) return item.tagNames
+			if (Array.isArray(item.tags)) return item.tags.map(t => typeof t === 'string' ? t : (t.tagName || t.name))
+			if (item.tag) return [item.tag]
+			return []
+		}
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+.goods-card {
+	width: 100%;
+	background: #fff;
+	border-radius: 16rpx;
+	overflow: hidden;
+	box-sizing: border-box;
+	display: flex;
+	flex-direction: row;
+	align-items: stretch;
+}
+.img-wrap {
+	width: 260rpx;
+	height: 260rpx;
+	flex-shrink: 0;
+	background: #f5f5f5;
+}
+.img {
+	width: 100%;
+	height: 100%;
+}
+.info {
+	flex: 1;
+	padding: 20rpx 24rpx;
+	display: flex;
+	flex-direction: column;
+	justify-content: space-between;
+	min-width: 0;
+}
+.tag-row {
+	display: flex;
+	flex-wrap: wrap;
+	gap: 8rpx;
+	margin-bottom: 8rpx;
+}
+.tag-chip {
+	font-size: 20rpx;
+	color: #8B6914;
+	background: linear-gradient(132deg, rgba(243, 223, 177, 0.9), rgba(236, 190, 96, 0.9));
+	padding: 4rpx 12rpx;
+	border-radius: 6rpx;
+}
+.title {
+	font-size: 28rpx;
+	color: #333;
+	line-height: 1.4;
+	flex: 1;
+}
+.line2 {
+	display: -webkit-box;
+	-webkit-line-clamp: 2;
+	-webkit-box-orient: vertical;
+	overflow: hidden;
+}
+.price-row {
+	display: flex;
+	align-items: baseline;
+	gap: 16rpx;
+	margin-top: 8rpx;
+}
+.price {
+	font-size: 34rpx;
+	font-weight: 600;
+	color: #E5212B;
+}
+.ot-price {
+	font-size: 24rpx;
+	color: #999;
+	text-decoration: line-through;
+}
+.meta-row {
+	display: flex;
+	align-items: center;
+	gap: 24rpx;
+	margin-top: 8rpx;
+}
+.sales,
+.good-rate {
+	font-size: 22rpx;
+	color: #999;
+}
+</style>

+ 67 - 0
pages/home/components/GoodsList.vue

@@ -0,0 +1,67 @@
+<template>
+	<view class="goods-list">
+		<view class="list-column" v-if="list && list.length > 0">
+			<view class="list-item" v-for="(item, index) in list" :key="item.productId || index">
+				<GoodsCard :item="item" :show-price="showPrice" @click="$emit('itemClick', item)" />
+			</view>
+		</view>
+		<view class="empty" v-else-if="!loading">
+			<text class="empty-text">暂无商品</text>
+		</view>
+		<view class="loading" v-if="loading">
+			<text class="loading-text">加载中...</text>
+		</view>
+		<view class="load-more" v-if="hasMore && !loading && list.length > 0" @click="$emit('loadMore')">
+			<text>加载更多</text>
+		</view>
+	</view>
+</template>
+
+<script>
+import GoodsCard from './GoodsCard.vue';
+export default {
+	name: 'GoodsList',
+	components: { GoodsCard },
+	props: {
+		list: { type: Array, default: () => [] },
+		loading: { type: Boolean, default: false },
+		hasMore: { type: Boolean, default: true },
+		showPrice: { type: Boolean, default: true }
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+.goods-list {
+	padding: 24rpx;
+	background: #f5f5f5;
+	min-height: 400rpx;
+	padding-bottom: 120rpx;
+}
+.list-column {
+	display: flex;
+	flex-direction: column;
+	gap: 20rpx;
+}
+.list-item {
+	width: 100%;
+}
+.empty,
+.loading {
+	padding: 80rpx 0;
+	text-align: center;
+}
+.empty-text,
+.loading-text {
+	font-size: 28rpx;
+	color: #999;
+}
+.load-more {
+	padding: 32rpx 0;
+	text-align: center;
+}
+.load-more text {
+	font-size: 28rpx;
+	color: #2BC7B9;
+}
+</style>

+ 67 - 0
pages/home/components/GoodsNav.vue

@@ -0,0 +1,67 @@
+<template>
+	<view class="goods-nav" v-if="navList && navList.length > 0">
+		<scroll-view scroll-x class="nav-scroll" :show-scrollbar="false">
+			<view class="nav-inner">
+				<view
+					v-for="(item, index) in navList"
+					:key="item.id || item.value || index"
+					:class="['nav-item', { active: (item.id || item.value) === activeId }]"
+					@tap.stop="onSelectByIndex(index)"
+					@click.stop="onSelectByIndex(index)"
+				>
+					<text>{{ item.name || item.categoryName || item.label }}</text>
+				</view>
+			</view>
+		</scroll-view>
+	</view>
+</template>
+
+<script>
+export default {
+	name: 'GoodsNav',
+	props: {
+		navList: { type: Array, default: () => [] },
+		activeId: { type: [String, Number], default: null }
+	},
+	methods: {
+		onSelectByIndex(index) {
+			const list = this.navList;
+			if (!list || index < 0 || index >= list.length) {
+				console.warn('[GoodsNav] onSelectByIndex 无效 index:', index, 'list.length:', list ? list.length : 0);
+				return;
+			}
+			const item = list[index];
+			this.$emit('select', item);
+		}
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+.goods-nav {
+	background: #fff;
+	border-bottom: 1rpx solid #eee;
+}
+.nav-scroll {
+	width: 100%;
+}
+.nav-inner {
+	display: inline-flex;
+	padding: 24rpx;
+	gap: 16rpx;
+}
+.nav-item {
+	flex-shrink: 0;
+	padding: 12rpx 28rpx;
+	font-size: 28rpx;
+	color: #666;
+}
+.nav-item.active {
+	color: #E5212B;
+	font-weight: 600;
+}
+.nav-item.active text {
+	border-bottom: 2rpx solid #E5212B;
+	padding-bottom: 4rpx;
+}
+</style>

+ 275 - 0
pages/home/components/RecommendSection.vue

@@ -0,0 +1,275 @@
+<template>
+	<view class="recommend-section" v-if="hasContent">
+		<!-- 平均分(占位,无数据时显示 —) -->
+		<view class="score-row" v-if="showScore">
+			<text class="score-label">平均分</text>
+			<text class="score-value">{{ averageScore != null ? averageScore : '—' }}</text>
+		</view>
+
+		<view class="recommend-layout">
+			<!-- 左侧:直播卡片轮播,自动滚动 + 可手动左右滑动,右上角 当前index/总数量 -->
+			<view class="block-left-wrap" v-if="liveList.length > 0">
+				<swiper
+					class="live-swiper"
+					:current="liveCurrent"
+					:autoplay="true"
+					:interval="4000"
+					:circular="true"
+					:duration="300"
+					@change="onLiveSwiperChange"
+				>
+					<swiper-item v-for="(item, idx) in liveList" :key="item.liveId || idx">
+						<view class="block-left" @click="onLiveClick(item)">
+							<view :class="['block-label', isLiving(item) ? 'live' : 'replay']">
+								{{ isLiving(item) ? '直播中' : '回放中' }}
+							</view>
+							<view class="live-index-badge">{{ liveCurrentDisplay }} / {{ liveList.length }}</view>
+							<image class="block-img" :src="item.liveImgUrl" mode="aspectFill"></image>
+							<view class="block-title">{{ item.liveName }}</view>
+						</view>
+					</swiper-item>
+				</swiper>
+			</view>
+
+			<!-- 右侧:上 绿色有机,下 上新推荐 -->
+			<view class="block-right">
+				<view class="block-small">
+					<view class="block-small-head">
+						<text class="block-small-title green">绿色有机</text>
+						<view class="more" @click.stop="goMore('green')">
+							<text>更多</text>
+							<text class="arrow">›</text>
+						</view>
+					</view>
+					<view class="block-small-body">
+						<view
+							class="small-item"
+							v-for="(item, i) in (green || []).slice(0, 2)"
+							:key="'g'+i"
+							@click.stop="onItemClick(item, 'green')"
+						>
+							<image class="small-thumb" :src="item.image || item.imageUrl" mode="aspectFill"></image>
+							<text class="small-price" v-if="item.price != null">¥{{ Number(item.price).toFixed(2) }}</text>
+						</view>
+					</view>
+				</view>
+				<view class="block-small">
+					<view class="block-small-head">
+						<text class="block-small-title hot">上新推荐</text>
+						<view class="more" @click.stop="goMore('hot')">
+							<text>更多</text>
+							<text class="arrow">›</text>
+						</view>
+					</view>
+					<view class="block-small-body">
+						<view
+							class="small-item"
+							v-for="(item, i) in (hot || []).slice(0, 2)"
+							:key="'h'+i"
+							@click.stop="onItemClick(item, 'hot')"
+						>
+							<image class="small-thumb" :src="item.image || item.imageUrl" mode="aspectFill"></image>
+							<text class="small-price" v-if="item.price != null">¥{{ Number(item.price).toFixed(2) }}</text>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	name: 'RecommendSection',
+	props: {
+		live: { type: Array, default: () => [] },
+		green: { type: Array, default: () => [] },
+		hot: { type: Array, default: () => [] },
+		averageScore: { type: [String, Number], default: null },
+		showScore: { type: Boolean, default: false }
+	},
+	computed: {
+		hasContent() {
+			return (this.live && this.live.length > 0) || (this.green && this.green.length > 0) || (this.hot && this.hot.length > 0)
+		},
+		liveList() {
+			return this.live && this.live.length > 0 ? this.live : []
+		},
+		liveCurrentDisplay() {
+			return this.liveList.length > 0 ? this.liveCurrent + 1 : 0
+		}
+	},
+	data() {
+		return {
+			liveCurrent: 0
+		}
+	},
+	methods: {
+		onLiveSwiperChange(e) {
+			this.liveCurrent = e.detail.current
+		},
+		isLiving(item) {
+			if (!item) return false
+			if (item.liveType === 1) return true
+			if (item.liveType === 2 && item.liveFlag === 1) return true
+			return false
+		},
+		onLiveClick(item) {
+			this.$emit('liveClick', item)
+		},
+		goMore(type) {
+			this.$emit('more', { type })
+		},
+		onItemClick(item, type) {
+			this.$emit('itemClick', { item, section: { type } })
+		}
+	}
+}
+</script>
+
+<style lang="scss" scoped>
+.recommend-section {
+	background: #fff;
+	padding: 24rpx;
+}
+.score-row {
+	display: flex;
+	align-items: center;
+	margin-bottom: 16rpx;
+	font-size: 26rpx;
+}
+.score-label {
+	color: #666;
+	margin-right: 12rpx;
+}
+.score-value {
+	color: #333;
+	font-weight: 600;
+}
+.recommend-layout {
+	display: flex;
+	gap: 20rpx;
+}
+.block-left-wrap {
+	width: 340rpx;
+	flex-shrink: 0;
+	height: 420rpx;
+	border-radius: 16rpx;
+	overflow: hidden;
+}
+.live-swiper {
+	width: 100%;
+	height: 100%;
+}
+.block-left {
+	width: 100%;
+	height: 100%;
+	border-radius: 16rpx;
+	overflow: hidden;
+	background: #f5f5f5;
+	position: relative;
+}
+.live-index-badge {
+	position: absolute;
+	top: 0;
+	right: 0;
+	z-index: 2;
+	background: rgba(0,0,0,0.5);
+	color: #fff;
+	font-size: 22rpx;
+	padding: 8rpx 16rpx;
+	border-radius: 0 0 0 12rpx;
+}
+.block-label {
+	position: absolute;
+	top: 0;
+	left: 0;
+	z-index: 2;
+	color: #fff;
+	font-size: 24rpx;
+	padding: 8rpx 20rpx;
+	border-radius: 0 0 12rpx 0;
+}
+.block-label.live {
+	background: #E5212B;
+}
+.block-label.replay {
+	background: #666;
+}
+.block-img {
+	width: 100%;
+	height: 100%;
+	display: block;
+}
+.block-title {
+	position: absolute;
+	bottom: 0;
+	left: 0;
+	right: 0;
+	background: linear-gradient(transparent, rgba(0,0,0,0.5));
+	color: #fff;
+	font-size: 26rpx;
+	padding: 40rpx 16rpx 16rpx;
+}
+.block-right {
+	flex: 1;
+	display: flex;
+	flex-direction: column;
+	gap: 20rpx;
+	min-width: 0;
+}
+.block-small {
+	flex: 1;
+	background: #f9f9f9;
+	border-radius: 16rpx;
+	overflow: hidden;
+	padding: 16rpx;
+}
+.block-small-head {
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+	margin-bottom: 12rpx;
+}
+.block-small-title {
+	font-size: 28rpx;
+	font-weight: 600;
+}
+.block-small-title.green {
+	color: #07c160;
+}
+.block-small-title.hot {
+	color: #E5212B;
+}
+.more {
+	display: flex;
+	align-items: center;
+	font-size: 24rpx;
+	color: #999;
+}
+.arrow {
+	margin-left: 4rpx;
+	font-size: 28rpx;
+}
+.block-small-body {
+	display: flex;
+	gap: 16rpx;
+}
+.small-item {
+	flex: 1;
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+}
+.small-thumb {
+	width: 100%;
+	height: 160rpx;
+	border-radius: 12rpx;
+	background: #eee;
+}
+.small-price {
+	font-size: 26rpx;
+	color: #E5212B;
+	margin-top: 8rpx;
+}
+</style>

+ 111 - 0
pages/home/components/SearchBar.vue

@@ -0,0 +1,111 @@
+<template>
+	<view class="search-bar" :style="{ background: bgColor }">
+		<view class="status_bar" :style="{ height: statusBarHeight + 'px' }"></view>
+		<view class="top-title">
+			<view class="name">{{ title }}</view>
+		</view>
+		<view class="func-cont">
+			<view class="search-cont" :style="{ width: searchWidth }" @click="$emit('searchClick')">
+				<image class="icon-search" :src="searchIcon" mode=""></image>
+				<input type="text" :value="keyword" :placeholder="placeholder" placeholder-class="placeholder"
+					disabled />
+			</view>
+			<uni-badge size="small" :text="cartCount" absolute="rightTop" type="error" v-show="cartCount > 0">
+				<view class="img-item" @click="$emit('cartClick')">
+					<image :src="cartIcon" mode=""></image>
+				</view>
+			</uni-badge>
+			<view class="img-item" v-show="cartCount <= 0" @click="$emit('cartClick')">
+				<image :src="cartIcon" mode=""></image>
+			</view>
+			<view class="img-item" style="position: relative;">
+				<image :src="serviceIcon" mode=""></image>
+				<button class="contact-btn" open-type="contact"></button>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	name: 'SearchBar',
+	props: {
+		title: { type: String, default: '云联精选' },
+		keyword: { type: String, default: '' },
+		placeholder: { type: String, default: '请输入产品名称' },
+		bgColor: { type: String, default: 'rgba(43,199,185, 0)' },
+		statusBarHeight: { type: Number, default: 20 },
+		cartCount: { type: Number, default: 0 },
+		searchWidth: { type: String, default: '' },
+		searchIcon: {
+			type: String,
+			default: 'https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/search.png'
+		},
+		cartIcon: {
+			type: String,
+			default: 'https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/cart_wihte.png'
+		},
+		serviceIcon: {
+			type: String,
+			default: 'https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/customer.png'
+		}
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+.search-bar {
+	position: fixed;
+	top: 0;
+	left: 0;
+	right: 0;
+	z-index: 100;
+}
+.top-title .name {
+	font-size: 36rpx;
+	font-weight: bold;
+	color: #fff;
+	padding: 20rpx 0;
+}
+.func-cont {
+	display: flex;
+	align-items: center;
+	padding: 0 24rpx 20rpx;
+}
+.search-cont {
+	display: flex;
+	align-items: center;
+	height: 64rpx;
+	background: rgba(255, 255, 255, 0.9);
+	border-radius: 32rpx;
+	padding: 0 24rpx;
+	flex: 1;
+	margin-right: 20rpx;
+}
+.icon-search {
+	width: 36rpx;
+	height: 36rpx;
+	margin-right: 16rpx;
+}
+.search-cont input {
+	flex: 1;
+	font-size: 28rpx;
+}
+.img-item {
+	width: 48rpx;
+	height: 48rpx;
+	margin-left: 24rpx;
+}
+.img-item image {
+	width: 100%;
+	height: 100%;
+}
+.contact-btn {
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 100%;
+	height: 100%;
+	opacity: 0;
+}
+</style>

+ 426 - 2625
pages/home/index.vue

@@ -1,249 +1,59 @@
 <template>
 	<view class="content">
-		<!-- 背景图片 -->
-		<image class="bg" src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/hp_top_bg.png"
-			mode=""></image>
-		<view>
-			<view class="top-inner">
-				<view class="fixed-top-box" :style="{ background: bgColor }">
-					<!-- 这里是状态栏 -->
-					<view class="status_bar" :style="{height: statusBarHeight}"></view>
-					<view class="top-title">
-						<!-- <view class="name" >云联精选</view> -->
-						<view class="name" >云联精选</view>
-						<!-- <view class="dot">•</view><view class="sub-name">七彩互联网医院</view> -->
-					</view>
-					<!-- 搜索框、购物车、客服 -->
-					<view class="func-cont">
-						<view class="search-cont" :style="{width:userinfoa.isShow==0 || isuser==true?'633rpx':''}">
-							<image class="icon-search"
-								src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/search.png"
-								mode="">
-							</image>
-							<input type="text" value="" placeholder="请输入产品名称"
-								placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;"
-								@click="toSearch" />
-						</view>
-						<!-- 购物车 -->
-						<uni-badge size="small" :text="cartCount" absolute="rightTop" type="error"
-							v-show="userinfoa.isShow==1&&isuser==false">
-							<view class="img-item" @click="goAuthUrl('/pages/shopping/cart')">
-								<image
-									src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/cart_wihte.png"
-									mode=""></image>
-							</view>
-						</uni-badge>
-						<view class="img-item" style="position: relative;">
-							<image
-								src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/customer.png"
-								mode="">
-							</image>
-							<button class="contact-btn" open-type="contact"></button>
-						</view>
-					</view>
-				</view>
-			</view>
-			<!-- 头部间距 -->
-			<view style="padding-bottom:220rpx">
-				<view class="status_bar" :style="{height: statusBarHeight}"></view>
-			</view>
-			<!-- 轮播图 -->
-			<view class="banner-box">
-				<view class="inner">
-					<swiper class="swiper" :indicator-dots="true" :circular="true" :autoplay="true" :interval="3000"
-						:duration="1000" indicator-color="rgba(255, 255, 255, 0.6)" indicator-active-color="#ffffff">
-						<swiper-item class="swiper-item" v-for="(item,index) in advList" :key="index"
-							@click="handleAdvClick(item)">
-							<image :src="item.imageUrl" mode=""></image>
-						</swiper-item>
-					</swiper>
-				</view>
-			</view>
-
-			<!-- 菜单 -->
-			<view class="menu-content">
-				<view class="menu-box">
-					<Menu :list="menus" @menuClick="menuClick" v-if="menus.length>0" style="width:100%;"></Menu>
-				</view>
-			</view>
-
-		</view>
-		<view class="online-inquiry" v-if="isuser==false">
-			<view class="item" @click="navTo('../home/productList')">
-				<image class="bg-img"
-					src="https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/userapp/images/banner.png"
-					mode=""></image>
-			</view>
+		<image class="bg" src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/hp_top_bg.png" mode="aspectFill"></image>
+		<view class="header-wrap">
+			<SearchBar
+				:bg-color="bgColor"
+				:status-bar-height="statusBarHeight"
+				:cart-count="cartCount"
+				:search-width="userinfoa.isShow==0 || isuser==true ? '633rpx' : ''"
+				placeholder="搜索商品"
+				@searchClick="toSearch"
+				@cartClick="goAuthUrl('/pages/shopping/cart')"
+			/>
 		</view>
-		<!-- <view class="open-class bgf radius12">
-			<view class="title-box">
-				<text class="title">百域大讲堂</text>
-				<view class="more" @click="goClassList(1)">
-					<text>查看全部</text>
-					<image src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/toright.png"></image>
-				</view>
-			</view>
-			<view class="justify-start">
-				<view class="class-item" @click="goClass(item.courseId,1)" v-for="(item, index) in classList"
-					:key="index">
-					<view class="img-box">
-						<image :src="item.imgUrl || 'https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/no-img.png'"  ></image>
-					</view>
-					<view>{{item.courseName}}</view>
-				</view>
-			</view>
-		</view> -->
-		<view class="modules">
-			<view class="module">
-				<!--养生有道-->
-				<!-- <view class="depts">
-						<view class="title">养生有道</view>
-						<view class="dept-box">
-							<view  @click="yangshengClick(item)"  class="dept" :key="index" v-for="(item,index) in yangshengs"  >
-								<image class="icon" :src="item.icon"></image>
-								<view class="title" >{{item.title}} </view>
-							</view>
-						</view>
-				</view>
-				 -->
-				<!-- <view class="doctor-articles" >
-					<view class="title-box">
-						<view class="title">养生讲堂</view>
-						<view class="more"  @click="navTo('/pages_index/index/doctorArticleList')" >
-							<view class="text">更多</view>
-							<image src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/arrow_gray.png"></image>
-						</view>
-					</view>
-					<scroll-view :scroll-x="true" style="white-space: nowrap;">
-					<view class="article-box"  >
-						<view class="article" @click="navTo('/pages_index/index/doctorArticleDetails?articleId='+item.articleId)"  v-for="(item,index) in doctocArticles" :key="index">
-							<view class="image-box">
-								<image mode="aspectFill" :src="item.imageUrl"></image>
-								<view class="views">
-									{{item.views}}人观看
-								</view>
-								<view class="doctor">
-									<image mode="aspectFill" :src="item.avatar"></image>
-									<view class="right">
-										<view class="doc-name ellipsis">{{item.doctorName}}</view>
-										<view class="doc-position ellipsis">{{item.position}}</view>
-									</view>
-								</view>
-							</view>
-							<view class="article-title-box">
-								<view class="article-title ellipsis">{{item.title}}</view>
-							</view>
-						</view>
-					</view>
-					</scroll-view>
-				</view> -->
-
-				<!--养生干货-->
-				<!-- <view class="articles" >
-			    	<view class="title-box">
-			    		<view class="title">养生干货</view>
-			    		<view class="more" @click="navTo('/pages_index/index/articleList')">
-			    			<view class="text">更多</view>
-			    			<image src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/arrow_gray.png"></image>
-			    		</view>
-			    	</view>
-			    	<view class="article-box" v-if="articles.length>0">
-			    		<view class="item" :key="index" @click="navTo('/pages_index/index/articleDetails?articleId='+item.articleId)" v-for="(item,index) in articles">
-			    			<view class="left">
-			    				<view class="title">
-			    					{{item.title}}
-			    				</view>
-			    				<view class="views">
-			    					浏览量 {{item.views}}
-			    				</view>
-			    			</view>
-			    			<view class="right">
-			    				<image :src="item.imageUrl"></image>
-			    			</view>
-			    		</view>
-			    	</view>
-			    </view> -->
 
+		<!-- 主横幅:两图横向 -->
+		<view class="banner-row" v-if="advList && advList.length > 0">
+			<view class="banner-item" v-for="(item, i) in advList.slice(0, 2)" :key="i" @tap="handleAdvClick(item)">
+				<image class="banner-img" :src="item.advImg || item.imageUrl" mode="aspectFill"></image>
 			</view>
 		</view>
 
-		<view class="index-cont">
+    <!-- 推荐频道 -->
+    <ChannelEntry :list="channelList" :per-row="4" :rows="2" @click="onChannelClick" />
 
-			<!-- 热门榜单 -->
-			<!-- <NewProduct :detail="newProductList" /> -->
-			<HotProduct :detail="hotProductList" />
-			<!-- 百域百科 -->
-			<!-- <view class="pub-item" style="margin-top: 20rpx;" >
-				<view class="pub-title-box">
-					<text class="left">百域百科</text>
-					<view class="right" @click="switchTo('../healthy/index')">
-						<text class="text">更多</text>
-						<image src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/arrow_gray.png" mode=""></image>
-					</view>
-				</view>
-				<view class="inner">
-					<view class="pub-tab-box">
-						<view class="tab-inner">
-							<view
-								v-for="(item,index) in articleCateList"
-								:key="index"
-								:class="item.cateId == cateId?'item active':'item'"
-								@click="articleCateChange(item)">
-								<view class="text">
-									{{ item.cateName }}
-									<image v-show="item.cateId == cateId" class="tab-bg" src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/tab_bg.png" mode=""></image>
-								</view>
-							</view>
-						</view>
-						<image class="right-mask" src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/mask.png" mode=""></image>
-					</view>
+		<!-- 金刚区:分类图标 2 行 4 列,仅展示 -->
+		<CategoryTags :tags="categoryTags" @select="onCategoryTagsSelect" />
 
-					<view class="know-list">
-						<view class="item" v-for="(item,index) in articleList" :key="index" @click="showArticle(item)">
-							<view class="left">
-								<view class="title ellipsis2">{{ item.title }}</view>
-								<view class="info-box">
-									<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" v-if="subitem!=null" >
-												<image :src="subitem.avatar==null?'https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/detault_head.jpg':subitem.avatar" mode=""></image>
-											</view>
-										</view>
-										<view class="readings">
-											<image class="eye" src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/eye.png" mode=""></image>
-											<text class="num">{{item.views}}</text>
-										</view>
-									</view>
-									<view class="time">{{item.publishTime}}</view>
-								</view>
-							</view>
-							<view class="right">
-								<image :src="item.imageUrl"  mode="aspectFill"></image>
-							</view>
-						</view>
-					</view>
-				</view>
-			</view> -->
-			<!-- 精选产品 -->
-			<TuiProduct ref="tuiProduct" />
 
-		</view>
+		<!-- 推荐区块:左侧直播卡(直播中/回放中)+ 右上绿色有机 + 右下上新推荐 -->
+		<RecommendSection
+			:live="recommendData.live"
+			:green="recommendData.green"
+			:hot="recommendData.hot"
+			@liveClick="onLiveClick"
+			@more="onRecommendMore"
+			@itemClick="onRecommendItemClick"
+		/>
 
+		<!-- 瀑布流:全部 + 分类标签横向滚动 -->
+		<GoodsNav :nav-list="goodsNavList" :active-id="activeGoodsNavId" @select="onGoodsNavSelect" />
 
-		<!-- 限时消息 -->
-		<!-- <view class="message-box" >
-			<view class="left">
-				<image src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/close24.png" mode="" @click="closeMsg"></image>
-				<view class="text ellipsis">关注公众号了解更新</view>
-			</view>
-			<view class="btn">查看</view>
+		<GoodsList
+			:list="goodsList"
+			:loading="goodsLoading"
+			:has-more="goodsHasMore"
+			@itemClick="showProduct"
+			@loadMore="loadMoreGoods"
+		/>
 
-		</view> -->
-		<!-- #ifdef MP-WEIXIN -->
+		<!--#ifdef MP-WEIXIN-->
 		<view class="official-account">
 			<official-account @load="bindload" @error="binderror"></official-account>
 		</view>
-		<!-- #endif -->
+		<!--#endif-->
+
 		<view class="popup-box" v-if="activityShow">
 			<view class="info-mask" @tap="closeActivity()"></view>
 			<view class="info-form">
@@ -252,2426 +62,417 @@
 		</view>
 		<z-modal :show="tuiModalControl" placeholderText="请输入邀请码" :btnGroup="btnGroup" :contentType="2"
 			titleText="填写邀请码" @cancle="cancleTui" @sure="submitTui"></z-modal>
-
-
-			<Server/>
-		<!-- <tabbar :actindex="0"></tabbar> -->
+		<Server />
 	</view>
 </template>
 
 <script>
-	import {
-		courseList,
-		courseListB
-	} from '@/api/class.js'
-	import zModal from '@/components/z-modal/z-modal.vue'
-	import {
-		getStoreActivity
-	} from '@/api/activity.js'
-	import {
-		getDepartmentList
-	} from '@/api/doctorOrder.js'
-	import {
-		getMenu,
-		getCanvas,
-		getIndexData,
-		getTuiDoctor,
-		getTuiArticle,
-		getTuiDoctorOrder,
-		getCartCount,
-		// getpro
-	} from '@/api/index'
-	import {
-		getDoctorArticleList
-	} from '@/api/doctorArticle.js'
-	import {
-		getArticleList
-	} from '@/api/article.js'
-	import {
-		getStoreConfig
-	} from '@/api/common'
-	// import tabBg from "https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/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'
-	import NewProduct from './components/NewProduct.vue'
-	import TuiProduct from '@/components/tuiProduct.vue'
-
-	import Server from '@/components/Server.vue'
-	import {
-		getUserInfo,
-		bindPromoter
-	} from '@/api/user'
-	export default {
-		components: {
-			zModal,
-			freeAudio,
-			Menu,
-			HotProduct,
-			NewProduct,
-			TuiProduct,
-			Server
+import zModal from '@/components/z-modal/z-modal.vue'
+import { getMenu, getIndexData, getCartCount } from '@/api/index'
+import { getStoreConfig } from '@/api/common'
+import { getHomeInit, getHomeRecommend, getHomeGoods } from '@/api/home.js'
+import HotProduct from './components/HotProduct.vue'
+import TuiProduct from '@/components/tuiProduct.vue'
+import SearchBar from './components/SearchBar.vue'
+import CategoryTags from './components/CategoryTags.vue'
+import ChannelEntry from './components/ChannelEntry.vue'
+import RecommendSection from './components/RecommendSection.vue'
+import GoodsNav from './components/GoodsNav.vue'
+import GoodsList from './components/GoodsList.vue'
+import { getUserInfo, bindPromoter } from '@/api/user'
+
+export default {
+	components: {
+		zModal,
+		HotProduct,
+		TuiProduct,
+		SearchBar,
+		CategoryTags,
+		ChannelEntry,
+		RecommendSection,
+		GoodsNav,
+		GoodsList
+	},
+	data() {
+		return {
+			btnGroup: [
+				{ text: '取消', color: '#FFFFFF', bgColor: '#999999', width: '150rpx', height: '80rpx', shape: 'fillet', eventName: 'cancle' },
+				{ text: '确定', color: '#FFFFFF', bgColor: '#2BC7B9', width: '150rpx', height: '80rpx', shape: 'fillet', eventName: 'sure' }
+			],
+			tuiModalControl: false,
+			activity: null,
+			activityShow: false,
+			hotProductList: [],
+			menus: [],
+			channelList: [],
+			categoryTags: [],
+			goodsNav: [],
+			recommendData: { live: [], green: [], hot: [] },
+			activeGoodsNavId: 'all',
+			goodsList: [],
+			goodsLoading: false,
+			goodsHasMore: true,
+			goodsPageNum: 1,
+			cartCount: 0,
+			advList: [],
+			top: 0,
+			statusBarHeight: (uni.getStorageSync('menuInfo') && uni.getStorageSync('menuInfo').statusBarHeight) || 20,
+			userinfoa: [],
+			isuser: false
+		}
+	},
+	computed: {
+		bgColor() {
+			const t = this.top / 30
+			return 'rgba(43,199,185, ' + t + ')'
 		},
-		data() {
-			return {
-				classList: [],
-				btnGroup: [{
-					text: '取消',
-					color: '#FFFFFF',
-					bgColor: '#999999',
-					width: '150rpx',
-					height: '80rpx',
-					shape: 'fillet',
-					eventName: 'cancle'
-				}, {
-					text: '确定',
-					color: '#FFFFFF',
-					bgColor: '#2BC7B9',
-					width: '150rpx',
-					height: '80rpx',
-					shape: 'fillet',
-					eventName: 'sure'
-				}],
-				tuiModalControl: false,
-				activity: null,
-				activityShow: false,
-				newProductList: [],
-				hotProductList: [],
-				tuiProductList: [],
-				menus: [],
-				canvas: [],
-				allDoctorTitle: "全部医生",
-				topLen: 0,
-				deptId: 0,
-				depts: [],
-				docTab: 1,
-				top: 0,
-				cartCount: 0,
-				doctorOrderList: [],
-				orderType: 0,
-				cateId: null,
-				articleList: [],
-				advList: [],
-				doctorList: [],
-				articleCateList: [],
-				doctocArticles: [], //养生讲堂
-				articles: [], //养生干货
-				// 状态栏的高度
-				statusBarHeight: uni.getStorageSync('menuInfo').statusBarHeight,
-				tabBg: "https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/tab_bg.png", // tab切换背景
-				// 问诊案例类型
-				orderTypes: [{
-					name: '全部',
-					id: 0,
-				}, {
-					name: '图文',
-					id: 1,
-				}, {
-					name: '语音',
-					id: 2,
-				}],
-				// 限时消息是否显示
-				messageShow: true,
-				yangshengs: [{
-						id: "1",
-						title: "药膳食疗",
-						page: "/pages_index/index/medicatedFoodList",
-						icon: "https://fs-1319721001.cos.ap-chongqing.myqcloud.com/fs/20240229/3cfbd47911cf4753aa9497eac500728d.png"
-					},
-					{
-						id: "2",
-						title: "经络穴位",
-						page: "/pages_index/index/vesselList",
-						icon: "https://fs-1319721001.cos.ap-chongqing.myqcloud.com/fs/20240229/e93536a9dc1a4f8ca09545097b12fdea.png"
-					},
-					{
-						id: "3",
-						title: "问答专区",
-						page: "/pages_index/index/questionsList",
-						icon: "https://fs-1319721001.cos.ap-chongqing.myqcloud.com/fs/20240229/e896972bd56f4e358188af36f2c5af42.png"
-					},
-					{
-						id: "4",
-						title: "疾病",
-						page: "/pages_index/index/diseaseList",
-						icon: "https://fs-1319721001.cos.ap-chongqing.myqcloud.com/fs/20240229/d6f1851cccae414b8baf2ba07782f91b.png"
-					},
-					{
-						id: "5",
-						title: "中药图解",
-						page: "/pages_index/index/chineseMedicineList",
-						icon: "https://fs-1319721001.cos.ap-chongqing.myqcloud.com/fs/20240229/ff43572d0d004285b5a3b0ef2663c471.png"
-					},
-					{
-						id: "6",
-						title: "名方今用",
-						page: "/pages_index/index/famousPrescribeList",
-						icon: "https://fs-1319721001.cos.ap-chongqing.myqcloud.com/fs/20240229/45db770e58c34963b0d2ba24a958b617.png"
-					},
-					{
-						id: "7",
-						title: "康复医案",
-						page: "/pages_index/index/doctorArticleList",
-						icon: "https://fs-1319721001.cos.ap-chongqing.myqcloud.com/fs/20240229/e793942797b24035b51f94d894bdfa0b.png"
-					},
-					{
-						id: "8",
-						title: "更多",
-						page: "",
-						icon: "https://fs-1319721001.cos.ap-chongqing.myqcloud.com/fs/20240229/3ee6160289914ee4a8126573fe4dc0ae.png"
-					}
-				],
-				userinfoa: [],
-				isuser: false,
-				menvKey: [],
-				classListb: {}
-			}
-			// this.getStoreActivity();
+		// 瀑布流标签:全部 + 后端 categoryTags
+		goodsNavList() {
+			const all = [{ id: 'all', name: '全部', categoryName: '全部' }]
+			const tags = (this.goodsNav || []).map(t => ({
+				id: t.id || t.cateId,
+				name: t.categoryName || t.cateName || t.name,
+				categoryName: t.categoryName || t.cateName || t.name
+			}))
+			return all.concat(tags)
+		}
+	},
+	onLoad(option) {
+		if (option.userCode != null) {
+			uni.setStorageSync('userCode', option.userCode)
+			if (this.utils.checkLoginState()) this.getUserInfo()
+		}
+		if (option.hasOwnProperty('q') && option.q) {
+			const url = decodeURIComponent(option.q)
+			const obj = this.utils.urlToObj(url)
+			uni.setStorageSync('userCode', obj.userCode)
+			if (this.utils.checkLoginState()) this.getUserInfo()
+		}
+	},
+	onUnload() {
+		uni.$emit('stop')
+	},
+	onHide() {
+		uni.$emit('stop')
+	},
+	onPageScroll(e) {
+		this.top = e.scrollTop
+	},
+	onShow() {
+		this.getHomeInit()
+    this.getHomeRecommend()
+		this.getMenu()
+		this.getIndexData()
+		if (uni.getStorageSync('AppToken')) {
+			this.getUserInfo()
+		} else {
+			this.isuser = true
+		}
+		if (this.utils.checkLoginState()) this.getCartCount()
+		this.getStoreConfig()
+	},
+	onShareAppMessage() {
+		return { title: '云联精选-您的专属解决方案', path: '/pages/common/launch', imageUrl: '/static/logo.png' }
+	},
+	onShareTimeline() {
+		return { title: '云联精选-您的专属解决方案', query: '', imageUrl: '/static/logo.png' }
+	},
+	onReachBottom() {
+		this.loadMoreGoods()
+		this.$refs.tuiProduct && this.$refs.tuiProduct.getTuiProducts()
+	},
+	methods: {
+		getHomeInit() {
+			getHomeInit().then(res => {
+				if (res.code == 200 && res.data) {
+					this.channelList = res.data.channelList || []
+					this.categoryTags = res.data.categoryTags || []
+					this.goodsNav = res.data.goodsNav || []
+					if (this.activeGoodsNavId === null || this.activeGoodsNavId === undefined) {
+						this.activeGoodsNavId = 'all'
+					}
+					this.fetchGoodsList(true)
+				}
+			}).catch(() => {})
 		},
-		onLoad(option) {
-			if (option.userCode != null) {
-				uni.setStorageSync('userCode', option.userCode);
-				if (this.utils.checkLoginState()) {
-					this.getUserInfo();
-				}
-			}
-			if (option.hasOwnProperty('q') && option.q) {
-				// 通过下面这步解码,可以拿到url的值
-				const url = decodeURIComponent(option.q)
-				this.url = url;
-				// // 对url中携带的参数提取处理
-				const obj = this.utils.urlToObj(url)
-				uni.setStorageSync('userCode', obj.userCode);
-				if (this.utils.checkLoginState()) {
-					this.getUserInfo();
-				}
+		getHomeRecommend() {
+			getHomeRecommend().then(res => {
+				if (res.code != 200) return
+				this.recommendData = {
+					live: res.live && Array.isArray(res.live) ? res.live : [],
+					green: res.green && Array.isArray(res.green) ? res.green : [],
+					hot: res.hot && Array.isArray(res.hot) ? res.hot : []
+				}
+			}).catch(() => {})
+		},
+		fetchGoodsList(reset) {
+			if (reset) {
+				this.goodsPageNum = 1
+				this.goodsList = []
+				this.goodsHasMore = true
 			}
-			// this.getStoreActivity()
+			if (this.goodsLoading || !this.goodsHasMore) return
+			this.goodsLoading = true
+			const id = this.activeGoodsNavId === 'all' || this.activeGoodsNavId === '' ? 0 : this.activeGoodsNavId
+			getHomeGoods({ id, pageNum: this.goodsPageNum, pageSize: 20 }).then(res => {
+				this.goodsLoading = false
+				if (res.code == 200 && res.data) {
+					const list = Array.isArray(res.data.list) ? res.data.list : []
+					const total = res.data.total != null ? Number(res.data.total) : 0
+					if (reset) this.goodsList = list
+					else this.goodsList = this.goodsList.concat(list)
+					this.goodsHasMore = list.length >= 20 && (this.goodsList.length < total || total === 0)
+					this.goodsPageNum++
+				}
+			}).catch(() => { this.goodsLoading = false })
 		},
-		// 暂停所有音频(一般用于页面切换时停止正在播放的音频)
-		onUnload() { //普通页面在 onUnload 生命周期中执行
-			uni.$emit('stop')
+		loadMoreGoods() {
+			this.fetchGoodsList(false)
 		},
-		onHide() { //tabBar页面在onHide生命周期中执行
-			uni.$emit('stop')
+		onGoodsNavSelect(item) {
+      console.log("2222")
+      console.log(item.id)
+			this.activeGoodsNavId = item.id
+			this.fetchGoodsList(true)
 		},
-		onPageScroll(e) {
-			//console.log(e)
-			this.top = e.scrollTop;
+		onCategoryTagsSelect(item) {
+			// 金刚区点击仅展示用,可按需跳转
 		},
-		mounted() {
-			this.getCourseList()
-			//this.getDepartmentList();
+		onChannelClick(item) {
+			// 推荐频道点击,可跳转或筛选,按需扩展
 		},
-		onShareAppMessage(res) {
-			return {
-				title: '云联精选-您的专属解决方案',
-				path: `/pages/common/launch`,
-				// imageUrl: this.$store.state.imgpath +'/app/image/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
-			imageUrl: '/static/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+		onRecommendMore(section) {
+			if (section && section.moreUrl) {
+				uni.navigateTo({ url: section.moreUrl })
+				return
+			}
+			if (section && (section.type === 'green' || section.type === 'hot')) {
+				uni.navigateTo({ url: '/pages/home/recommendList?type=' + section.type })
 			}
 		},
-		onReachBottom() {
-			// console.log("onReachBottom")
-			this.$refs.tuiProduct.getTuiProducts();
+		onLiveClick(item) {
+			if (item && item.liveId) uni.navigateTo({ url: '/pages/live/liveRoom?liveId=' + item.liveId })
 		},
-		//分享到朋友圈
-		onShareTimeline(res) {
-			return {
-				title: '云联精选-您的专属解决方案',
-				query: '', //页面参数
-				imageUrl: '/static/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
-				// imageUrl: this.$store.state.imgpath +'/app/image/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
-			}
+		onRecommendItemClick({ item }) {
+			if (item.productId) this.showProduct(item)
 		},
-		computed: {
-			// 计算属性的 getter
-			bgColor: function() {
-				var top = this.top / 30;
-				return 'rgba(43,199,185, ' + top + ')';
-			},
-			imgPath() {
-				return this.$store.state.imgpath
-			},
+		getMenu() {
+			getMenu().then(res => {
+				if (res.code == 200) this.menus = res.data || []
+			})
 		},
-		onShow() {
-			this.getMenu();
-			this.getIndexData()
-			//this.getTuiDoctorOrder();
-			// console.log(uni.getStorageSync('isLocation'))
-			// if(uni.getStorageSync('isLocation')==""){
-			// 	this.getLocation();
-			// }
-			if (uni.getStorageSync('AppToken')) {
-				this.getUserInfo()
-			} else {
-				this.isuser = true
-			}
-			if (this.utils.checkLoginState()) {
-				this.getCartCount();
-			}
-			this.getStoreConfig();
-			//this.getTuiDoctor()
-			this.getCanvas();
-			this.getDoctorArticleList();
-			this.getArticleList();
-			// this.getshowmanv()
+		getIndexData() {
+			getIndexData({}).then(res => {
+				if (res.code == 200) {
+					this.advList = res.data.advList || []
+					this.hotProductList = res.data.hotProductList || []
+				} else {
+					uni.showToast({ icon: 'none', title: '请求失败' })
+				}
+			})
 		},
-		methods: {
-			toLive() {
-				uni.showToast({
-					icon: 'none',
-					title: '暂未开放,敬请期待'
-				})
-			},
-			getCourseList() {
-				courseList().then(res => {
-					if (res.code == 200) {
-						console.log('公域', res.data)
-						this.classList = res.data.slice(0, 3)
-					} else {
-						uni.hideLoading();
-						uni.showToast({
-							title: res.msg,
-							icon: 'none'
-						});
-					}
-				})
-			},
-			goClass(id, type) {
-				// console.log(id)
-				uni.navigateTo({
-					url: '/pages_course/learn?courseId=' + id + '&type=' + type
-				})
-			},
-			goClassList(type) {
-				uni.navigateTo({
-					url: '/pages_course/teacherClassroom?type=' + type
-				})
-			},
-			// getshowmanv() {
-			// 	const data = {
-			// 		key: "store.appShow"
-			// 	}
-			// 	getpro(data).then(res => {
-			// 		this.menvKey = JSON.parse(res.data)
-			// 		// console.log('排序', this.menvKey[0])
-			// 	})
-			// },
-			getUserInfo() {
-				getUserInfo().then(
-					res => {
-						if (res.code == 200) {
-							if (res.user != null) {
-								this.userinfoa = res.user
-								// if(res.user.isPromoter==null||res.user.isPromoter==0){
-								// 	this.tuiModalControl=true
-								// }
-							}
-						} else {
-							uni.showToast({
-								icon: 'none',
-								title: "请求失败",
-							});
-						}
-					},
-					rej => {}
-				);
-			},
-			cancleTui(e) {
-				this.tuiModalControl = false
-			},
-			submitTui(e) {
-				// console.log(e)
-				if (e.inputText == null || e.inputText == "") {
-					uni.showToast({
-						icon: 'none',
-						title: "请输入邀请码",
-					});
-					return;
-				}
-				var data = {
-					userCode: e.inputText
-				};
-				bindPromoter(data).then(
-					res => {
-						if (res.code == 200) {
-							uni.showToast({
-								icon: 'none',
-								title: res.msg,
-							});
-							this.tuiModalControl = false
-						} else {
-							uni.showToast({
-								icon: 'none',
-								title: res.msg,
-							});
-						}
-					},
-					rej => {}
-				);
-
-			},
-			bindload: function(detail) {},
-			binderror: function(detail) {},
-			closeActivity() {
-				this.activityShow = false;
-				// uni.setStorageSync(this.activity.activityId,null);
-			},
-			getStoreActivity() {
-				let data = {}
-				getStoreActivity(data).then(res => {
-					this.activity = res.activity;
-					if (this.activity != null) {
-						// if(uni.getStorageSync(this.activity.activityId)!=null)
-						// {
-						// 	uni.setStorageSync(this.activity.activityId,1);
-						// 	this.activityShow=true;
-						// }
-						// else{
-						// 	this.activityShow=false;
-						// }
-						this.activityShow = true;
-					} else {
-						this.activityShow = false;
-					}
-				})
-			},
-			showActivity() {
-				this.activityShow = false;
-				uni.navigateTo({
-					url: '/pages_shopping/shopping/activityDetails?activityId=' + this.activity.activityId
-				})
-			},
-			menuClick(item) {
-				if (item.linkType == 1) {
-					if (item.linkUrl == "/pages/shopping/index") {
-						uni.switchTab({
-							url: item.linkUrl
-						})
-					} else if (item.linkUrl == "/pages/healthy/index") {
-						uni.switchTab({
-							url: item.linkUrl
-						})
-					} else {
-
-						uni.navigateTo({
-							url: item.linkUrl
-						})
-					}
-
-				} else if (item.linkType == 0) {
-					uni.showToast({
-						icon: 'none',
-						title: "开发中...",
-					});
-				}
-			},
-			goDev() {
-				uni.showToast({
-					icon: 'none',
-					title: "开发中...",
-				});
-			},
-			handleAdvClick(item) {
-				console.log(item);
-				if (item.showType == 1) {
-					uni.setStorageSync('url', item.advUrl);
-					uni.navigateTo({
-						url: "h5"
-					})
-				} else if (item.showType == 2) {
-					uni.navigateTo({
-						url: item.advUrl
-					})
-				} else if (item.showType == 3) {
-					uni.setStorageSync('content', item.content);
-					uni.navigateTo({
-						url: "content"
-					})
-				}
-			},
-			deptChange(item) {
-				this.deptId = item.departmentId;
-				this.getTuiDoctor();
-			},
-			getMenu() {
-				this.menus = [];
-				getMenu().then(res => {
-					if (res.code == 200) {
-						// for (var i = 0; i < res.data.length; i++) {
-						// 	const item=res.data[i];
-						// if(item.menuName.indexOf('百域百科')>=0 || item.menuName.indexOf('百域自测')>=0
-						// || item.menuName.indexOf('百域档案')>=0 ||item.menuName.indexOf('用药咨询')>=0){
-						// 	this.menus.push(item);
-						// }
-						// }
-						// console.log('图标', res.data)
-						// const menuNames = ['百域百科', '百域自测', '百域档案', '产品商城', '领券中心', '会员'];
-						this.menus = res.data
-						// this.menus = res.data.filter(item => menuNames.some(menuName => item.menuName.includes(menuName)) );
-					} else {
-
-					}
-				});
-			},
-			getCanvas() {
-				getCanvas().then(res => {
-					if (res.code == 200) {
-						if (res.data && res.data.json) {
-							this.canvas = JSON.parse(res.data.json)
-						}
-					}
-				});
-			},
-			getDepartmentList() {
-				this.depts = [];
-				getDepartmentList().then(res => {
-					if (res.code == 200) {
-						var allDept = {
-							departmentId: 0,
-							departmentName: "全部"
-						}
-						this.depts.push(allDept);
-						this.depts = this.depts.concat(res.data);
-					} else {
-						uni.showToast({
-							icon: 'none',
-							title: "请求失败",
-						});
-					}
-				});
-			},
-			getTuiDoctor() {
-				let data = {
-					departmentId: this.deptId,
-					doctorType: this.docTab
-				};
-				getTuiDoctor(data).then(
-					res => {
-						if (res.code == 200) {
-							this.doctorList = res.data;
-						} else {
-							uni.showToast({
-								icon: 'none',
-								title: "请求失败",
-							});
-						}
-					},
-					rej => {}
-				);
-			},
-			docTabChange(val) {
-				if (val == 1) {
-					this.allDoctorTitle = "全部医师"
-				}
-				if (val == 2) {
-					this.allDoctorTitle = "全部药师"
-				}
-				if (val == 3) {
-					this.allDoctorTitle = "全部营养师"
-				}
-				this.docTab = val;
-				this.getTuiDoctor();
-			},
-			showImg(urls) {
-				var imgArr = urls.split(',');
-				//预览图片
-				uni.previewImage({
-					urls: imgArr,
-					current: imgArr[0]
-				});
-			},
-			getStoreConfig() {
-				getStoreConfig().then(
-					res => {
-						if (res.code == 200) {
-							uni.setStorageSync('config', JSON.stringify(res.data));
-						}
-					},
-					rej => {}
-				);
-
-			},
-			goAuthUrl(url) {
-				this.utils.isLogin().then(res => {
-					if (res) {
-						uni.switchTab({
-							url: url
-						})
-					}
-				})
-			},
-			// 跳转页面
-			navTo(url) {
-				uni.navigateTo({
-					url: url
-				})
-			},
-			getLocation() {
-				var that = this;
-				uni.authorize({
-					scope: 'scope.userLocation',
-					success() {
-						uni.getLocation({
-							type: 'gcj02', //腾讯地图使用gcj02获取位置坐标
-							success: function(res) {
-								uni.setStorageSync('isLocation', 1);
-								uni.setStorageSync('lng', res.longitude);
-								uni.setStorageSync('lat', res.latitude);
-							},
-						})
-					},
-					fail(err) {
-						console.log(err)
-					}
-				})
-			},
-			getIndexData() {
-				let data = {};
-				getIndexData(data).then(
-					res => {
-						if (res.code == 200) {
-							this.advList = res.data.advList;
-							this.articleCateList = res.data.articleCateList;
-							if (this.articleCateList != null && this.articleCateList.length > 0) {
-								this.cateId = this.articleCateList[0].cateId;
-								this.getTuiArticle()
-							}
-							this.tuiProductList = res.data.tuiProductList
-							this.newProductList = res.data.newProductList
-							this.hotProductList = res.data.hotProductList
-						} else {
-							uni.showToast({
-								icon: 'none',
-								title: "请求失败",
-							});
-						}
-					},
-					rej => {}
-				);
-			},
-			getCartCount() {
-				this.utils.isLogin().then(res => {
-					if (res) {
-						getCartCount().then(
-							cartRes => {
-								if (cartRes.code == 200) {
-									this.cartCount = cartRes.data;
-								}
-							},
-							rej => {}
-						);
-					}
-				})
-			},
-			getTuiArticle() {
-				let data = {
-					cateId: this.cateId
-				};
-				getTuiArticle(data).then(
-					res => {
-						if (res.code == 200) {
-							this.articleList = res.data;
-						} else {
-							uni.showToast({
-								icon: 'none',
-								title: "请求失败",
-							});
-						}
-					},
-					rej => {}
-				);
-			},
-			getTuiDoctorOrder() {
-				let data = {
-					orderType: this.orderType
-				};
-				getTuiDoctorOrder(data).then(
-					res => {
-						if (res.code == 200) {
-							this.doctorOrderList = res.data;
-						} else {
-							uni.showToast({
-								icon: 'none',
-								title: "请求失败",
-							});
-						}
-					},
-					rej => {}
-				);
-			},
-			showArticle(item) {
-				uni.navigateTo({
-					url: '../healthy/detail?articleId=' + item.articleId
-				})
-			},
-			showProduct(item) {
-				uni.navigateTo({
-					url: '../shopping/productDetails?productId=' + item.productId
-				})
-			},
-			// 顶部搜索
-			toSearch() {
-				uni.navigateTo({
-					url: './productSearch'
-				})
-			},
-			// 健康知识选中
-			articleCateChange(item) {
-				this.cateId = item.cateId;
-				this.getTuiArticle();
-			},
-			// 问诊案例选中
-			orderTypeChange(item) {
-				this.orderType = item.id;
-				console.log(this.orderType)
-				this.getTuiDoctorOrder();
-			},
-			// 关闭限时消息
-			closeMsg() {
-				this.messageShow = false
-			},
-			// 查看全部
-			viewAll(url) {
-				uni.navigateTo({
-					url: '/pages/home/' + url,
-				});
-			},
-			shopDoctor(item) {
-				console.log(item);
-				uni.navigateTo({
-					url: "/pages_doctor/doctorDetail?doctorId=" + item.doctorId
-				})
-			},
-			switchTo(url) {
-				uni.switchTab({
-					url: url
+		getUserInfo() {
+			getUserInfo().then(res => {
+				if (res.code == 200 && res.user != null) this.userinfoa = res.user
+				else uni.showToast({ icon: 'none', title: '请求失败' })
+			})
+		},
+		getCartCount() {
+			this.utils.isLogin().then(res => {
+				if (res) getCartCount().then(cartRes => {
+					if (cartRes.code == 200) this.cartCount = cartRes.data
 				})
+			})
+		},
+		getStoreConfig() {
+			getStoreConfig().then(res => {
+				if (res.code == 200) uni.setStorageSync('config', JSON.stringify(res.data))
+			})
+		},
+		cancleTui() {
+			this.tuiModalControl = false
+		},
+		submitTui(e) {
+			if (!e.inputText) {
+				uni.showToast({ icon: 'none', title: '请输入邀请码' })
 				return
-			},
-			yangshengClick(item) {
-				if (item.page == "") {
-					uni.showToast({
-						icon: "none",
-						title: '暂无更多'
-					})
-					return;
-				}
-				uni.navigateTo({
-					url: item.page
-				})
-			},
-			// 在线问诊
-			openIm() {
-				uni.navigateTo({
-					url: '/pages_doctor/doctorOrderIM?orderId=10'
-				})
-			},
-			getDoctorArticleList() {
-				//联网加载数据
-				var that = this;
-				var data = {
-					pageNum: 1,
-					pageSize: 10
-				};
-				getDoctorArticleList(data).then(res => {
-					if (res.code == 200) {
-						this.doctocArticles = res.data.list;
-					}
-				});
-			},
-			getArticleList() {
-				//联网加载数据
-				var that = this;
-				var data = {
-					isTui: 1,
-					pageNum: 1,
-					pageSize: 10,
-				};
-				getArticleList(data).then(res => {
-					if (res.code == 200) {
-						this.articles = res.data.list;
-					} else {
-						uni.showToast({
-							icon: 'none',
-							title: "请求失败",
-						});
-					}
-				});
-			},
-		}
-	}
-</script>
-
-<style lang="scss">
-	.fixed-top-box {
-		width: 100%;
-		position: fixed;
-		top: 0;
-		left: 0;
-		z-index: 1000;
-		transition: all 0.5s;
-		background-color: #2BC7B9;
-
-		&.show-back {
-			// background: linear-gradient(135deg, #66b2ef 0%, #2BC7B9 100%);
-		}
-
-		.status_bar {
-
-			width: 100%;
-		}
-	}
-
-	.content {
-		width: 100%;
-		position: relative;
-
-		.bg {
-			width: 100%;
-			height: 380rpx;
-			position: absolute;
-			top: 0;
-			left: 0;
-		}
-
-		.top-inner {
-			width: 100%;
-			position: absolute;
-			top: 0;
-			left: 0;
-			z-index: 5;
-
-			.top-title {
-				height: 88upx;
-				line-height: 88upx;
-				display: flex;
-				align-items: center;
-				justify-content: flex-start;
-
-				.name {
-					font-size: 42upx;
-					font-family: Source Han Sans CN;
-					font-weight: bold;
-					color: #FFFFFF;
-					padding-left: 41upx;
-				}
-
-				.dot {
-					margin: 0upx 10upx;
-					font-size: 28upx;
-					color: #FFFFFF;
-					opacity: 0.5;
-				}
-
-				.sub-name {
-					font-size: 30upx;
-					font-family: Source Han Sans CN;
-					color: #FFFFFF;
-				}
-
-
-			}
-
-			.func-cont {
-				box-sizing: border-box;
-				display: flex;
-				align-items: center;
-				padding: 30upx 20upx 30upx 20upx;
-
-				.search-cont {
-					box-sizing: border-box;
-					display: flex;
-					align-items: center;
-					width: 552upx;
-					height: 72upx;
-					background: #FFFFFF;
-					border-radius: 36upx;
-					padding: 0 30upx;
-
-					.icon-search {
-						width: 28upx;
-						height: 28upx;
-						margin-right: 20upx;
-					}
-
-					input {
-						height: 60upx;
-						line-height: 60upx;
-						flex: 1;
-					}
-				}
-
-				:deep(.uni-badge) {
-					border: none;
-					background-color: #FF3636;
-					font-family: Roboto;
-				}
-
-				.img-item {
-					width: 44upx;
-					height: 44upx;
-					margin-left: 30upx;
-
-					image {
-						width: 100%;
-						height: 100%;
-					}
-				}
-			}
-
-			.tips {
-				margin: 0upx 20rpx 30rpx;
-				height: 40upx;
-				line-height: 40upx;
-				display: flex;
-				justify-content: space-between;
-				align-items: center;
-
-				.left {
-					font-size: 30upx;
-					color: #FFFFFF;
-				}
-
-				.right {
-					padding: 5upx 20rpx;
-					font-size: 24upx;
-					color: #FFFFFF;
-					background-color: #2BC7B9;
-					border-radius: 50rpx;
-				}
-			}
-		}
-
-		.banner-box {
-			padding: 0 20upx;
-
-			.inner {
-				width: 100%;
-				height: 236upx;
-				border-radius: 10upx;
-				overflow: hidden;
-
-				.swiper,
-				.swiper-item,
-				.swiper-item image {
-					width: 100%;
-					height: 100%;
-				}
-
-			}
-		}
-
-		.menu-content {
-			// width: 100%;
-			background-color: #fff;
-			overflow: hidden;
-			padding: 20upx 20upx 0;
-		}
-
-		.menu-box {
-			display: flex;
-			align-items: center;
-			background-color: #FFFFFF;
-		}
-
-		.online-inquiry {
-			box-sizing: border-box;
-			width: 100%;
-			height: 300upx;
-			padding: 20upx;
-			background: linear-gradient(180deg, rgba(255, 255, 255, 0.38) 62%, rgba(255, 255, 255, 0) 100%);
-			display: flex;
-			justify-content: space-between;
-
-			.item {
-				// width: 46.13%;
-				width: 100%;
-				height: 100%;
-				position: relative;
-
-				.bg-img,
-				.inner {
-					width: 100%;
-					height: 100%;
-					position: absolute;
-					top: 0;
-					left: 0;
-					z-index: 1;
-					border-radius: 15rpx;
-				}
-
-				.inner {
-					box-sizing: border-box;
-					z-index: 2;
-					display: flex;
-					flex-direction: column;
-					justify-content: center;
-					padding-left: 32upx;
-
-					.title {
-						font-size: 30upx;
-						line-height: 1;
-						font-family: PingFang SC;
-						font-weight: 500;
-						color: #111111;
-						margin-bottom: 20upx;
-					}
-
-					.sub-title {
-						font-size: 24upx;
-						font-family: PingFang SC;
-						font-weight: 500;
-						color: #666666;
-					}
-
-					image {
-						width: 80upx;
-						height: 90upx;
-						position: absolute;
-						right: 7upx;
-						bottom: 7upx;
-					}
-				}
-			}
-		}
-
-		.index-cont {
-			box-sizing: border-box;
-			padding: 0 20upx 120rpx;
-
-			.pub-item {
-				background: #FFFFFF;
-				border-radius: 16upx;
-				margin-bottom: 20upx;
-
-				.tabs {
-					width: 100%;
-					display: flex;
-					align-items: center;
-					justify-content: flex-start;
-					height: 110rpx;
-					background-color: #F0F3F4;
-
-					.tab {
-						height: 110rpx;
-						display: flex;
-						align-items: center;
-						justify-content: center;
-						position: relative;
-						flex: 1;
-
-						.img {
-							z-index: 1;
-							position: absolute;
-							top: 0rpx;
-							left: 0rpx;
-							width: 100%;
-							height: 100%;
-						}
-
-						.inner {
-							z-index: 2;
-
-							.title {
-								font-size: 32upx;
-								font-family: PingFang SC;
-								font-weight: bold;
-								color: #666666;
-							}
-
-							.active {
-								color: #2BC7B9;
-							}
-						}
-
-					}
-
-
-				}
-
-				.pub-title-box {
-					box-sizing: border-box;
-					padding: 36upx 30upx;
-					display: flex;
-					align-items: center;
-					justify-content: space-between;
-
-					.left {
-						font-size: 32upx;
-						line-height: 1;
-						font-family: PingFang SC;
-						font-weight: bold;
-						color: #111111;
-					}
-
-					.right {
-						display: flex;
-						align-items: center;
-						justify-content: center;
-
-						.text {
-							font-size: 24rpx;
-							line-height: 1;
-							font-family: PingFang SC;
-							font-weight: 500;
-							color: #999999;
-							margin-right: 10upx;
-						}
-
-						image {
-							width: 14upx;
-							height: 24upx;
-						}
-					}
-
-				}
-
-				.doc-tab-box {
-					padding: 14rpx 30rpx 0rpx 30rpx;
-					position: relative;
-
-					.tab-inner {
-						padding: 14upx 0 30upx;
-						display: flex;
-						overflow-x: auto;
-					}
-
-					.item {
-						font-size: 28upx;
-						white-space: nowrap;
-						line-height: 1;
-						font-family: PingFang SC;
-						font-weight: 500;
-						color: #666666;
-						margin-right: 40upx;
-						position: relative;
-
-						&:last-child {
-							margin-right: 0;
-						}
-
-						&.active {
-							font-weight: bold;
-							color: #333333;
-						}
-
-						&.cases {
-							margin-right: 60upx;
-						}
-
-						.text {
-							position: relative;
-							z-index: 1;
-						}
-
-						.tab-bg {
-							width: 72upx;
-							height: 28upx;
-							position: absolute;
-							top: 17upx;
-							left: 50%;
-							transform: translateX(-36upx);
-							z-index: -1;
-						}
-					}
-
-					.right-mask {
-						width: 56upx;
-						height: 34upx;
-						position: absolute;
-						top: 25upx;
-						right: 0upx;
-						z-index: 1;
-					}
-				}
-
-				.doc-list {
-					padding: 20upx;
-
-					.item {
-						box-sizing: border-box;
-						background: #FFFFFF;
-						// border-radius: 16upx;
-						display: flex;
-						border-bottom: 1px solid #F0F0F0;
-						margin-bottom: 30rpx;
-
-						.head-box {
-							width: 120upx;
-							height: 120upx;
-							background: #EDF1F4;
-							border-radius: 50%;
-							overflow: hidden;
-							margin-right: 30upx;
-
-							image {
-								width: 100%;
-								height: 100%;
-							}
-						}
-
-						.info {
-							width: calc(100% - 150upx);
-
-							.top {
-								display: flex;
-								align-items: center;
-								font-family: PingFang SC;
-								line-height: 1;
-
-								.name {
-									font-size: 34upx;
-									font-weight: bold;
-									color: #111111;
-								}
-
-								.line {
-									width: 1px;
-									height: 26upx;
-									background: #DDDDDD;
-									margin: 0 20upx;
-								}
-
-								.other {
-									font-size: 28upx;
-									font-weight: 500;
-									color: #333333;
-								}
-							}
-
-							.unit-box {
-								display: flex;
-								margin-top: 24upx;
-
-								.level {
-									padding: 0 10upx;
-									height: 30upx;
-									line-height: 30upx;
-									font-size: 22upx;
-									font-family: PingFang SC;
-									font-weight: 500;
-									color: #FFFFFF;
-									background: #2BC7B9;
-									border-radius: 10upx 4upx 10upx 4upx;
-									margin-right: 12upx;
-								}
-
-								.name {
-									font-size: 28upx;
-									font-family: PingFang SC;
-									font-weight: 500;
-									color: #333333;
-									line-height: 30upx;
-								}
-							}
-
-							.expertise {
-								font-size: 26upx;
-								font-family: PingFang SC;
-								font-weight: 500;
-								color: #666666;
-								line-height: 42upx;
-								margin: 22upx 0 26upx;
-							}
-
-							.rate-box {
-								display: flex;
-								align-items: center;
-
-								.star {
-									display: flex;
-									align-items: center;
-
-									image {
-										width: 22upx;
-										height: 22upx;
-										margin-right: 10upx;
-									}
-
-									text {
-										font-size: 26upx;
-										font-family: PingFang SC;
-										font-weight: bold;
-										color: #CEA764;
-										line-height: 1;
-									}
-								}
-
-								.line {
-									width: 1px;
-									height: 20upx;
-									background: #DDDDDD;
-									margin: 0 20upx;
-								}
-
-								.num-box {
-									display: flex;
-									align-items: center;
-									font-family: PingFang SC;
-
-									.label {
-										font-size: 24upx;
-										font-weight: 500;
-										color: #999999;
-										line-height: 1;
-										margin-right: 7px;
-									}
-
-									.num {
-										font-size: 26upx;
-										font-weight: bold;
-										color: #CEA764;
-										line-height: 1;
-									}
-								}
-							}
-
-							.price-box {
-								display: flex;
-								align-items: center;
-								margin-top: 38upx;
-
-								.btn-item {
-									display: flex;
-									align-items: center;
-									justify-content: center;
-									width: 164upx;
-									height: 56upx;
-									line-height: 56upx;
-									border: 1px solid rgba(43, 199, 185, 0.5);
-									border-radius: 28upx;
-									font-family: PingFang SC;
-									margin-right: 30upx;
-
-									&:last-child {
-										margin-right: 0;
-									}
-
-									.label {
-										font-size: 26upx;
-										font-weight: 500;
-										color: #2BC7B9;
-										margin-right: 5upx;
-									}
-
-									.num {
-										font-size: 28upx;
-										font-weight: bold;
-										color: #2BC7B9;
-									}
-								}
-							}
-						}
-					}
-
-					.item:last-child {
-						border-bottom: none;
-						margin-bottom: 0rpx;
-					}
-
-					.bottom-title {
-						height: 50rpx;
-						display: flex;
-						align-items: center;
-						justify-content: center;
-						font-size: 26rpx;
-						font-family: PingFang SC;
-						font-weight: bold;
-						color: #2BC7B9;
-
-						image {
-							margin-left: 8rpx;
-							width: 14rpx;
-							height: 24rpx;
-						}
-					}
-				}
-
-				// 医师团队
-				.doc-cont {
-					box-sizing: border-box;
-					padding: 0 30upx;
-
-					.inner {
-						padding: 4upx 0 40upx;
-						display: flex;
-						overflow-x: auto;
-					}
-
-					.item {
-						display: flex;
-						align-items: center;
-						flex-direction: column;
-						margin-right: 40upx;
-
-						&:last-child {
-							margin-right: 0;
-						}
-
-						.head-box {
-							width: 120upx;
-							height: 120upx;
-							background: #F2F5F9;
-							border-radius: 50%;
-							margin-bottom: 20upx;
-							overflow: hidden;
-
-							image {
-								width: 100%;
-								height: 100%;
-							}
-						}
-
-						.name {
-							max-width: 120upx;
-							font-size: 28upx;
-							line-height: 1;
-							font-family: PingFang SC;
-							font-weight: 500;
-							color: #111111;
-							margin-bottom: 16upx;
-							text-align: center;
-						}
-
-						.position {
-							max-width: 120upx;
-							font-size: 24upx;
-							line-height: 1;
-							font-family: PingFang SC;
-							font-weight: 500;
-							color: #999999;
-							text-align: center;
-						}
-					}
-				}
-
-				.inner {
-					padding: 0 30upx;
-				}
-
-				// 健康知识
-				.pub-tab-box {
-					position: relative;
-
-					.tab-inner {
-						padding: 14upx 0 30upx;
-						display: flex;
-						overflow-x: auto;
-					}
-
-					.item {
-						font-size: 28upx;
-						white-space: nowrap;
-						line-height: 1;
-						font-family: PingFang SC;
-						font-weight: 500;
-						color: #666666;
-						margin-right: 40upx;
-						position: relative;
-
-						&:last-child {
-							margin-right: 0;
-						}
-
-						&.active {
-							font-weight: bold;
-							color: #333333;
-						}
-
-						&.cases {
-							margin-right: 60upx;
-						}
-
-						.text {
-							position: relative;
-							z-index: 1;
-						}
-
-						.tab-bg {
-							width: 72upx;
-							height: 28upx;
-							position: absolute;
-							top: 17upx;
-							left: 50%;
-							transform: translateX(-36upx);
-							z-index: -1;
-						}
-					}
-
-					.right-mask {
-						width: 56upx;
-						height: 34upx;
-						position: absolute;
-						top: 14upx;
-						right: -30upx;
-						z-index: 1;
-					}
-				}
-
-				.know-list {
-					padding-right: 10upx;
-
-					.item {
-						padding: 30upx 0;
-						display: flex;
-						align-items: center;
-						justify-content: space-between;
-						border-bottom: 1px solid #F0F0F0;
-
-						&:last-child {
-							border-bottom: none;
-						}
-
-						.left {
-							flex: 1;
-							padding-right: 40upx;
-							height: 190upx;
-							display: flex;
-							flex-direction: column;
-							justify-content: space-between;
-
-							.title {
-								font-size: 32upx;
-								font-family: PingFang SC;
-								font-weight: 500;
-								color: #111111;
-								line-height: 48upx;
-							}
-
-							.info-box {
-								width: 100%;
-								display: flex;
-								align-items: center;
-								justify-content: space-between;
-
-								.readers {
-									display: flex;
-									align-items: center;
-
-									.head-box {
-										margin-right: 27upx;
-										display: flex;
-										align-items: center;
-
-										.head {
-											width: 48upx;
-											height: 48upx;
-											border-radius: 50%;
-											overflow: hidden;
-											box-shadow: 0 0 0 1px #fff;
-											margin-right: -10upx;
-
-											image {
-												width: 100%;
-												height: 100%;
-											}
-										}
-									}
-
-									.readings {
-										display: flex;
-										align-items: center;
-
-										.eye {
-											width: 26upx;
-											height: 20upx;
-											margin-right: 9upx;
-										}
-
-										.num {
-											font-size: 24upx;
-											font-family: PingFang SC;
-											font-weight: 500;
-											color: #999999;
-											line-height: 1;
-										}
-									}
-								}
-
-								.time {
-									font-size: 24upx;
-									line-height: 1;
-									font-family: PingFang SC;
-									font-weight: 500;
-									color: #999999;
-								}
-							}
-						}
-
-						.right {
-							width: 250upx;
-							height: 190upx;
-							border-radius: 8upx;
-							overflow: hidden;
-
-							image {
-								width: 100%;
-								height: 100%;
-							}
-						}
-					}
-				}
-
-				// 问诊案例
-				.cases-list {
-					padding-bottom: 10upx;
-
-					.item {
-						padding: 30upx 0;
-						border-bottom: 1px solid #F0F0F0;
-
-						&:last-child {
-							border-bottom: none;
-						}
-
-						.dec-text {
-							font-size: 32upx;
-							font-family: PingFang SC;
-							font-weight: bold;
-							color: #111111;
-							line-height: 48upx;
-						}
-
-						.images-box {
-							margin-top: 10upx;
-							display: flex;
-							flex-wrap: wrap;
-
-							.img-item {
-								width: 155upx;
-								height: 155upx;
-								background: #F5F5F5;
-								border-radius: 8upx;
-								margin: 0 10upx 10upx 0;
-								overflow: hidden;
-
-								image {
-									width: 100%;
-									height: 100%;
-								}
-
-								&:nth-child(4n) {
-									margin-right: 0;
-								}
-							}
-						}
-
-						.doc-info {
-							display: flex;
-							align-items: center;
-							margin: 30upx 0 20upx;
-
-							.head {
-								width: 60upx;
-								height: 60upx;
-								background: #F2F5F9;
-								border-radius: 50%;
-								margin-right: 20upx;
-								overflow: hidden;
-
-								image {
-									width: 100%;
-									height: 100%;
-								}
-							}
-
-							.name {
-								font-size: 28upx;
-								line-height: 1;
-								font-family: PingFang SC;
-								font-weight: 500;
-								color: #111111;
-							}
-
-							.line {
-								width: 1px;
-								height: 22upx;
-								background: #DDDDDD;
-								margin: 0 16upx;
-							}
-
-							.posit,
-							.address {
-								font-size: 26upx;
-								font-family: PingFang SC;
-								font-weight: 500;
-								color: #999999;
-							}
-						}
-
-						.answer-box {
-							width: 100%;
-							background: #F5F7F7;
-							border-radius: 10upx;
-							display: flex;
-							flex-direction: column;
-							justify-content: center;
-
-							.text-inner {
-								// height: 84upx;
-								font-size: 28upx;
-								font-family: PingFang SC;
-								font-weight: 500;
-								color: #666666;
-								line-height: 42upx;
-								padding: 15upx;
-							}
-						}
-
-						.read-box {
-							margin-top: 30upx;
-							display: flex;
-							align-items: center;
-							justify-content: flex-end;
-
-							image {
-								width: 24upx;
-								height: 19upx;
-								margin-right: 10upx;
-							}
-
-							.text {
-								font-size: 24upx;
-								font-family: PingFang SC;
-								font-weight: 500;
-								color: #999999;
-							}
-						}
-					}
-				}
-			}
-
-			// 精选产品
-			.feat-title {
-				margin-top: 30upx;
-				padding: 10upx 0 33upx;
-				display: flex;
-				align-items: center;
-				justify-content: center;
-
-				image {
-					width: 37upx;
-					height: 37upx;
-					margin: 0upx 20upx;
-				}
-
-				text {
-					font-size: 36upx;
-					line-height: 1;
-					font-family: PingFang SC;
-					font-weight: bold;
-					color: #111111;
-				}
-			}
-
-			.drug-list {
-				display: flex;
-				flex-wrap: wrap;
-
-				.item {
-					margin-right: 20rpx;
-					margin-bottom: 20rpx;
-					width: 345rpx;
-					background: #FFFFFF;
-					box-shadow: 0px 0px 10rpx 4rpx rgba(199, 199, 199, 0.22);
-					border-radius: 20rpx;
-					overflow: hidden;
-
-					&:nth-child(2n) {
-						margin-right: 0;
-					}
-
-					.img-box {
-						width: 100%;
-						height: 334upx;
-
-						image {
-							width: 100%;
-							height: 100%;
-						}
-					}
-
-					.info-box {
-						box-sizing: border-box;
-						height: 182upx;
-						padding: 20upx;
-
-						.title {
-							height: 80upx;
-							font-size: 26upx;
-							font-family: PingFang SC;
-							font-weight: 500;
-							color: #111111;
-							line-height: 40upx;
-						}
-
-						.price-box {
-							display: flex;
-							align-items: center;
-							margin-top: 20upx;
-
-							.now {
-								color: #FF6633;
-								display: flex;
-								align-items: flex-end;
-								margin-right: 20upx;
-								font-family: PingFang SC;
-
-								.unit {
-									font-size: 24upx;
-									line-height: 1.4;
-									margin-right: 4upx;
-								}
-
-								.num {
-									font-size: 36upx;
-									font-weight: bold;
-									line-height: 1;
-								}
-							}
-
-							.old {
-								font-size: 26upx;
-								font-family: PingFang SC;
-								text-decoration: line-through;
-								color: #BBBBBB;
-								line-height: 1;
-							}
-						}
-					}
-				}
 			}
-		}
-
-		// 生活大讲堂
-		.open-class {
-			padding: 20rpx;
-			margin: 20rpx 15rpx 0rpx;
-			// background-color: #f0f4f7;
-
-			.title-box {
-				display: flex;
-				justify-content: space-between;
-				align-items: center;
-
-				.title {
-					font-size: 32rpx;
-					font-weight: bold;
-				}
-
-				.more {
-					font-size: 24rpx;
-					padding-left: 30rpx;
-					color: #999999;
-					display: flex;
-					align-items: center;
-
-					image {
-						width: 24rpx;
-						height: 24rpx;
-					}
-				}
-			}
-
-
-			.class-item {
-				font-size: 24rpx;
-				margin-top: 24rpx;
-				background-color: #fff;
-				border-radius: 16rpx;
-				padding: 0 16rpx;
-				margin-right: 14rpx;
-				width: 250rpx;
-				height: 280rpx;
-				font-size: 26rpx;
-				font-weight: 500;
-
-				.img-box {
-					height: 220rpx;
-					border-radius: 16rpx;
-					overflow: hidden;
-					margin-bottom: 12rpx;
-
-					image {
-						width: 100%;
-						height: 100%;
-					}
-				}
-
-
-				&:last-child {
-					margin-right: 0rpx;
-				}
-			}
-		}
-
-		.modules {
-			.module {
-				.depts {
-					z-index: 101;
-					margin: 20rpx 15rpx 0rpx;
-					padding: 20rpx;
-					box-shadow: 0px 0px 5px 2px rgba(0, 0, 0, 0.05);
-					background-color: #fff;
-					border-radius: 15rpx;
-
-					.title {
-						font-size: 32upx;
-						font-family: PingFang SC;
-						font-weight: bold;
-						color: #2A2B2E;
-					}
-
-					.dept-box {
-						margin-top: 15rpx;
-						display: flex;
-						align-items: center;
-						justify-content: flex-start;
-						flex-wrap: wrap;
-
-						.dept {
-							padding: 15rpx 5rpx;
-							width: 25%;
-							display: flex;
-							flex-direction: column;
-							align-items: center;
-							justify-content: center;
-							padding: 14rpx 0;
-
-							.icon {
-								width: 58rpx;
-								height: 58rpx;
-							}
-
-							.title {
-								margin-top: 10rpx;
-								font-size: 24upx;
-								font-family: PingFang SC;
-								font-weight: 500;
-								color: #111111;
-							}
-						}
-					}
-
-				}
-
-				.doctor-articles {
-					z-index: 101;
-					margin: 20rpx 15rpx 0rpx;
-					padding: 20rpx;
-					box-shadow: 0px 0px 5px 2px rgba(0, 0, 0, 0.05);
-					background-color: #fff;
-					border-radius: 15rpx;
-
-					.title-box {
-						display: flex;
-						flex-direction: row;
-						align-items: center;
-						justify-content: space-between;
-
-						.title {
-							font-size: 32upx;
-							font-family: PingFang SC;
-							font-weight: bold;
-							color: #111111;
-						}
-
-						.more {
-							display: flex;
-							align-items: center;
-							justify-content: flex-end;
-
-							.text {
-								font-size: 24rpx;
-								font-family: PingFang SC;
-								color: #9B9B9B;
-							}
-
-							image {
-								margin-left: 10rpx;
-								width: 15rpx;
-								height: 20rpx;
-							}
-
-						}
-					}
-
-					.article-box {
-						padding: 20rpx 0rpx;
-						overflow-x: auto;
-						box-sizing: border-box;
-						display: flex;
-						align-items: center;
-						justify-content: flex-start;
-
-						.article {
-							width: 300rpx;
-							margin-right: 20rpx;
-							background: #f9f8fe;
-							display: flex;
-							flex-direction: column;
-							align-items: flex-start;
-							justify-content: flex-start;
-
-							&:last-child {
-								margin-right: 0rpx;
-							}
-
-							.image-box {
-								width: 300rpx;
-								height: 400rpx;
-								position: relative;
-								border-radius: 20rpx;
-
-								image {
-									border-radius: 20rpx;
-									width: 300rpx;
-									height: 400rpx;
-								}
-
-								.views {
-									position: absolute;
-									top: 0rpx;
-									left: 0rpx;
-									padding: 5rpx 10rpx;
-									background: rgba(0, 0, 0, 0.25);
-									border-radius: 12rpx 0px 12rpx 0px;
-									opacity: 1;
-									font-size: 20rpx;
-									font-family: PingFang SC-Bold, PingFang SC;
-									font-weight: bold;
-									color: #FFFFFF;
-								}
-
-								.doctor {
-									margin: 10rpx;
-									display: flex;
-									align-items: center;
-									justify-content: flex-start;
-									position: absolute;
-									bottom: 0rpx;
-									left: 0rpx;
-
-									image {
-										border-radius: 50%;
-										width: 64rpx;
-										height: 64rpx;
-									}
-
-									.right {
-										width: 200rpx;
-										margin-left: 10rpx;
-										display: flex;
-										flex-direction: column;
-										align-items: flex-start;
-										justify-content: space-between;
-
-										.doc-name {
-											width: 200rpx;
-											font-size: 30rpx;
-											font-weight: bold;
-											font-family: PingFang SC;
-											color: #fff;
-										}
-
-										.doc-position {
-											width: 100%;
-											font-size: 28rpx;
-											font-family: PingFang SC;
-											color: #fff;
-											font-weight: bold;
-											opacity: 0.8;
-										}
-									}
-								}
-							}
-
-							.article-title-box {
-								width: 100%;
-								margin-top: 10rpx;
-								display: flex;
-								align-items: center;
-								justify-content: flex-start;
-
-								.article-title {
-									font-size: 30rpx;
-									font-weight: bold;
-									font-family: PingFang SC;
-									color: #2A2B2E;
-								}
-
-							}
-
-						}
-
-					}
-				}
-
-				.doctors {
-					z-index: 101;
-					margin: 20rpx 15rpx;
-					padding: 20rpx;
-					box-shadow: 0px 0px 5px 2px rgba(0, 0, 0, 0.05);
-					background-color: #fff;
-					border-radius: 15rpx;
-
-					.title-box {
-						display: flex;
-						flex-direction: row;
-						align-items: center;
-						justify-content: space-between;
-
-						.title {
-							font-size: 32upx;
-							font-family: PingFang SC;
-							font-weight: bold;
-							color: #111111;
-						}
-
-						.more {
-							display: flex;
-							align-items: center;
-							justify-content: flex-end;
-
-							.text {
-								font-size: 24rpx;
-								font-family: PingFang SC;
-								color: #9B9B9B;
-							}
-
-							image {
-								margin-left: 10rpx;
-								width: 15rpx;
-								height: 20rpx;
-							}
-
-						}
-					}
-
-				}
-
-				.articles {
-					z-index: 101;
-					margin: 20rpx 15rpx;
-					padding: 20rpx;
-					box-shadow: 0px 0px 5px 2px rgba(0, 0, 0, 0.05);
-					background-color: #fff;
-					border-radius: 15rpx;
-
-					.title-box {
-						display: flex;
-						flex-direction: row;
-						align-items: center;
-						justify-content: space-between;
-
-						.title {
-							font-size: 32upx;
-							font-family: PingFang SC;
-							font-weight: bold;
-							color: #111111;
-						}
-
-						.more {
-							display: flex;
-							align-items: center;
-							justify-content: flex-end;
-
-							.text {
-								font-size: 24rpx;
-								font-family: PingFang SC;
-								color: #9B9B9B;
-							}
-
-							image {
-								margin-left: 10rpx;
-								width: 15rpx;
-								height: 20rpx;
-							}
-
-						}
-					}
-
-					.article-box {
-						margin-top: 15rpx;
-						padding: 20rpx 0rpx 0rpx;
-						display: flex;
-						flex-direction: column;
-						align-items: flex-start;
-						justify-content: flex-start;
-
-						.item {
-							width: 100%;
-							margin-bottom: 20rpx;
-							display: flex;
-							align-items: flex-start;
-							justify-content: flex-start;
-
-							&:last-child {
-								margin-bottom: 0rpx;
-							}
-
-							.left {
-								flex: 1;
-								height: 160rpx;
-								margin-right: 15rpx;
-								display: flex;
-								flex-direction: column;
-								align-items: flex-start;
-								justify-content: space-between;
-
-								.title {
-									font-size: 28upx;
-									font-family: PingFang SC;
-									font-weight: bold;
-									color: #111111;
-								}
-
-								.views {
-									font-size: 24upx;
-									font-family: PingFang SC;
-									color: #9a9a9c;
-								}
-							}
-
-							.right {
-								image {
-									border-radius: 10rpx;
-									width: 220rpx;
-									height: 160rpx;
-									border: 1px solid #eeeeee;
-								}
-							}
-						}
-					}
-				}
-
-				.packages {
-					z-index: 101;
-					margin: 20rpx 15rpx;
-					padding: 20rpx;
-					box-shadow: 0px 0px 5px 2px rgba(0, 0, 0, 0.05);
-					background-color: #fff;
-					border-radius: 15rpx;
-
-					.title-box {
-						display: flex;
-						flex-direction: row;
-						align-items: center;
-						justify-content: space-between;
-
-						.title {
-							font-size: 32upx;
-							font-family: PingFang SC;
-							font-weight: bold;
-							color: #111111;
-						}
-
-						.more {
-							display: flex;
-							align-items: center;
-							justify-content: flex-end;
-
-							.text {
-								font-size: 24rpx;
-								font-family: PingFang SC;
-								color: #9B9B9B;
-							}
-
-							image {
-								margin-left: 10rpx;
-								width: 15rpx;
-								height: 20rpx;
-							}
-
-						}
-					}
-
-					.package-box {
-						padding: 20rpx 0rpx 0rpx;
-						display: flex;
-						align-items: flex-start;
-						justify-content: flex-start;
-						flex-wrap: wrap;
-
-						.item {
-							width: calc(50% - 20rpx);
-							border-radius: 15rpx;
-							margin: 10rpx;
-							display: flex;
-							flex-direction: column;
-							align-items: flex-start;
-							justify-content: flex-start;
-
-							&:last-child {}
-
-							.top {
-								width: 100%;
-								height: 300rpx;
-
-								image {
-									border-radius: 15rpx 15rpx 0rpx 0rpx;
-									width: 100%;
-									height: 300rpx;
-								}
-
-							}
-
-							.bottom {
-								width: 100%;
-								margin-top: 15rpx;
-
-								.title {
-									font-weight: bold;
-									font-size: 28upx;
-									font-family: PingFang SC;
-									color: #111111;
-								}
-
-								.price-box {
-									margin-top: 10rpx;
-									display: flex;
-									align-items: center;
-									justify-content: space-between;
-									width: 100%;
-
-									.price {
-										padding: 5rpx 10rpx;
-										background-color: #2BC7B9;
-										border-radius: 30rpx;
-										font-size: 20upx;
-										font-family: PingFang SC;
-										color: #ffffff;
-									}
-
-									.count {
-										font-size: 24upx;
-										font-family: PingFang SC;
-										color: #333333;
-									}
-
-								}
-							}
-						}
-					}
-
-
-				}
+			bindPromoter({ userCode: e.inputText }).then(res => {
+				uni.showToast({ icon: 'none', title: res.msg })
+				if (res.code == 200) this.tuiModalControl = false
+			})
+		},
+		bindload() {},
+		binderror() {},
+		closeActivity() {
+			this.activityShow = false
+		},
+		showActivity() {
+			this.activityShow = false
+			if (this.activity && this.activity.activityId) {
+				uni.navigateTo({ url: '/pages_shopping/shopping/activityDetails?activityId=' + this.activity.activityId })
 			}
-
-		}
-	}
-
-	.official-account {
-		box-sizing: border-box;
-		width: 100%;
-		height: 100upx;
-		position: fixed;
-		bottom: 30upx;
-		z-index: 99;
-		padding: 0 20upx 180rpx 20upx;
-	}
-
-	// 消息
-	.message-box {
-		box-sizing: border-box;
-		width: 100%;
-		height: 84upx;
-		background: #F3FFFD;
-		border: 1px solid #C7E9E5;
-		box-shadow: 0px 4upx 12upx 0px rgba(90, 203, 138, 0.16);
-		border-radius: 16upx;
-		position: fixed;
-		left: 50%;
-		transform: translateX(-50%);
-		bottom: 30upx;
-		z-index: 99;
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		padding: 0 20upx 0 30upx;
-
-		.left {
-			flex: 1;
-			display: flex;
-			align-items: center;
-
-			image {
-				width: 24upx;
-				height: 24upx;
-				margin-right: 18upx;
+		},
+		menuClick(item) {
+			const linkUrl = item.linkUrl || item.url
+			const linkType = item.linkType != null ? item.linkType : (linkUrl ? 1 : 0)
+			if (linkType == 1 && linkUrl) {
+				if (linkUrl == '/pages/shopping/index' || linkUrl == '/pages/healthy/index') {
+					uni.switchTab({ url: linkUrl })
+				} else {
+					uni.navigateTo({ url: linkUrl })
+				}
+			} else if (linkType == 0) {
+				uni.showToast({ icon: 'none', title: '开发中...' })
 			}
-
-			.text {
-				width: 90%;
-				font-size: 28upx;
-				font-family: PingFang SC;
-				font-weight: 500;
-				color: #2BC7B9;
+		},
+		handleAdvClick(item) {
+			if (item.showType == 1) {
+				uni.setStorageSync('url', item.advUrl)
+				uni.navigateTo({ url: 'h5' })
+			} else if (item.showType == 2) {
+				uni.navigateTo({ url: item.advUrl })
+			} else if (item.showType == 3) {
+				uni.setStorageSync('content', item.content)
+				uni.navigateTo({ url: 'content' })
 			}
+		},
+		goAuthUrl(url) {
+			this.utils.isLogin().then(res => {
+				if (res) uni.switchTab({ url })
+			})
+		},
+		navTo(url) {
+			uni.navigateTo({ url })
+		},
+		toSearch() {
+			uni.navigateTo({ url: './productSearch' })
+		},
+		showProduct(item) {
+			uni.navigateTo({ url: '../shopping/productDetails?productId=' + item.productId })
 		}
-
-		.btn {
-			width: 100upx;
-			height: 48upx;
-			line-height: 48upx;
-			text-align: center;
-			font-size: 24upx;
-			font-family: PingFang SC;
-			font-weight: 500;
-			color: #FFFFFF;
-			border: 1px solid #D2E6FF;
-			background: linear-gradient(135deg, #66b2ef 0%, #2BC7B9 100%);
-			border-radius: 24upx;
-			margin-left: 30upx;
-		}
-
 	}
+}
+</script>
 
-	.contact-btn {
-		display: inline-block;
-		position: absolute;
-		top: 0;
-		left: 0;
-		width: 100%;
-		height: 100%;
-		opacity: 0;
-	}
-
-	.popup-box {
-		position: fixed;
-		top: 0;
-		right: 0;
-		left: 0;
-		bottom: 0;
-		z-index: 999;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-
-		.info-mask {
-			position: fixed;
-			top: 0;
-			right: 0;
-			bottom: 0;
-			left: 0;
-			background-color: rgba($color: #000000, $alpha: 0.5);
-			z-index: 999;
-		}
-
-		.info-form {
-			z-index: 1000;
-			width: 450rpx;
-			display: flex;
-			flex-direction: column;
-			justify-content: center;
-			align-items: center;
-			position: relative;
-
-			image {
-				width: 100%;
-			}
-		}
-	}
+<style lang="scss" scoped>
+.content {
+	width: 100%;
+	position: relative;
+	min-height: 100vh;
+	padding-top: 1rpx;
+}
+.header-wrap {
+	position: relative;
+	z-index: 10;
+}
+.banner-row {
+	display: flex;
+	gap: 20rpx;
+	padding: 20rpx 24rpx;
+	background: #fff;
+}
+.banner-item {
+	flex: 1;
+	height: 220rpx;
+	border-radius: 16rpx;
+	overflow: hidden;
+	background: #f5f5f5;
+}
+.banner-img {
+	width: 100%;
+	height: 100%;
+}
+.bg {
+	width: 100%;
+	height: 380rpx;
+	position: absolute;
+	top: 0;
+	left: 0;
+}
+.status_bar {
+	width: 100%;
+}
+.banner-box {
+	padding: 0 20upx;
+}
+.banner-box .inner {
+	width: 100%;
+	height: 236upx;
+	border-radius: 10upx;
+	overflow: hidden;
+}
+.banner-box .swiper,
+.banner-box .swiper-item,
+.banner-box .swiper-item image {
+	width: 100%;
+	height: 100%;
+}
+.menu-content {
+	background-color: #fff;
+	overflow: hidden;
+	padding: 20upx 20upx 0;
+}
+.menu-box {
+	display: flex;
+	align-items: center;
+	background-color: #fff;
+}
+.online-inquiry {
+	box-sizing: border-box;
+	width: 100%;
+	height: 300upx;
+	padding: 20upx;
+	background: linear-gradient(180deg, rgba(255, 255, 255, 0.38) 62%, rgba(255, 255, 255, 0) 100%);
+}
+.online-inquiry .item {
+	width: 100%;
+	height: 100%;
+	position: relative;
+}
+.online-inquiry .bg-img {
+	width: 100%;
+	height: 100%;
+	position: absolute;
+	top: 0;
+	left: 0;
+	border-radius: 15rpx;
+}
+.index-cont {
+	box-sizing: border-box;
+	padding: 0 20upx 120rpx;
+}
+.official-account {
+	width: 100%;
+}
+.popup-box {
+	position: fixed;
+	top: 0;
+	right: 0;
+	left: 0;
+	bottom: 0;
+	z-index: 999;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+}
+.popup-box .info-mask {
+	position: fixed;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	background-color: rgba(0, 0, 0, 0.5);
+	z-index: 999;
+}
+.popup-box .info-form {
+	z-index: 1000;
+	width: 450rpx;
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+}
+.popup-box .info-form image {
+	width: 100%;
+}
 </style>

+ 121 - 0
pages/home/recommendList.vue

@@ -0,0 +1,121 @@
+<template>
+	<view class="page">
+		<view class="list-wrap">
+			<view class="list-column" v-if="list.length > 0">
+				<view class="list-item" v-for="(item, index) in list" :key="item.productId || index">
+					<GoodsCard :item="item" :show-price="true" @click="showProduct(item)" />
+				</view>
+			</view>
+			<view class="empty" v-else-if="!loading">
+				<text class="empty-text">暂无商品</text>
+			</view>
+			<view class="loading" v-if="loading">
+				<text class="loading-text">加载中...</text>
+			</view>
+			<view class="load-more" v-if="hasMore && !loading && list.length > 0" @click="loadMore">
+				<text>加载更多</text>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { getHomeGoodsRecommend } from '@/api/home.js'
+import GoodsCard from './components/GoodsCard.vue'
+
+export default {
+	name: 'RecommendList',
+	components: { GoodsCard },
+	data() {
+		return {
+			type: 'green',
+			titleMap: { green: '绿色有机', hot: '上新推荐' },
+			list: [],
+			loading: false,
+			hasMore: true,
+			pageNum: 1,
+			pageSize: 10
+		}
+	},
+	onLoad(options) {
+		this.type = (options.type || 'green').toLowerCase()
+		if (this.type !== 'green' && this.type !== 'hot') this.type = 'green'
+		uni.setNavigationBarTitle({ title: this.titleMap[this.type] || '更多' })
+		this.pageNum = 1
+		this.list = []
+		this.hasMore = true
+		this.fetchList(true)
+	},
+	methods: {
+		fetchList(reset) {
+			if (reset) {
+				this.pageNum = 1
+				this.list = []
+				this.hasMore = true
+			}
+			if (this.loading || !this.hasMore) return
+			this.loading = true
+			getHomeGoodsRecommend({
+				type: this.type,
+				pageNum: this.pageNum,
+				pageSize: this.pageSize
+			}).then(res => {
+				this.loading = false
+				if (res.code != 200 || !res.data) return
+				const data = res.data
+				const rows = data.list || data.rows || []
+				const total = data.total != null ? Number(data.total) : 0
+				if (reset) this.list = rows
+				else this.list = this.list.concat(rows)
+				this.hasMore = rows.length >= this.pageSize && (this.list.length < total || total === 0)
+				this.pageNum++
+			}).catch(() => { this.loading = false })
+		},
+		loadMore() {
+			this.fetchList(false)
+		},
+		showProduct(item) {
+			if (item && item.productId) {
+				uni.navigateTo({ url: '/pages/shopping/productDetails?productId=' + item.productId })
+			}
+		}
+	}
+}
+</script>
+
+<style lang="scss" scoped>
+.page {
+	min-height: 100vh;
+	background: #f5f5f5;
+	padding-bottom: 120rpx;
+}
+.list-wrap {
+	padding: 24rpx;
+}
+.list-column {
+	display: flex;
+	flex-direction: column;
+	gap: 20rpx;
+}
+.list-item {
+	width: 100%;
+}
+.empty,
+.loading {
+	padding: 80rpx 0;
+	text-align: center;
+}
+.empty-text,
+.loading-text {
+	font-size: 28rpx;
+	color: #999;
+}
+.load-more {
+	padding: 32rpx 0;
+	text-align: center;
+}
+.load-more text {
+	font-size: 28rpx;
+	color: #2BC7B9;
+}
+</style>