Forráskód Böngészése

Merge branch 'master' of http://115.29.66.169:10080/yicangzongtai/share_h5

chengziding 6 hónapja%!(EXTRA string=óta)
szülő
commit
c31e1283d3

+ 1 - 0
App.vue

@@ -45,6 +45,7 @@
 	@import './common/style/uni.css';
 	/* #endif*/
 	/*每个页面公共css */
+  @import '@/common/style/common.scss';
 
 	uni-radio .uni-radio-input .uni-radio-input-checked {
 		background: #FF0000 !important;

+ 8 - 0
api/government.js

@@ -0,0 +1,8 @@
+import {
+  http
+} from '@/common/request/index.js';
+
+// 获取商品活动聚合页
+export const getGoodsAggregationInfo_Api = (activityAggregationId) => {
+	return http.get(`/goodsAggregation/info/${activityAggregationId}`)
+}

+ 7 - 0
common/style/common.scss

@@ -0,0 +1,7 @@
+.lazy-img{
+	overflow: hidden;
+	.u-image {
+		width: 100% !important;
+		height: 100% !important;
+	}
+}

+ 36 - 0
components/rate.vue

@@ -0,0 +1,36 @@
+<template>
+	<view class="box">
+		<image v-for="v in value" :style="{width:size+'px',height:size+'px'}" src="/static/light-start.png" mode=""></image>
+		<image v-for="k in (5-value)"  :style="{width:size+'px',height:size+'px'}" src="/static/start.png" mode=""></image>
+	</view>
+</template>
+
+<script>
+	export default{
+		data(){
+			return{
+				nowArr:[]
+			}
+		},
+		props:{
+			size:{
+				type:Number|String,
+				default:15
+			},
+			value:{
+				type:Number|String,
+				default:4
+			}
+		},
+		watch:{
+		},
+	}
+</script>
+
+<style lang="scss">
+	.box{
+		image{
+			margin-right: 10rpx;
+		}
+	}
+</style>

+ 56 - 0
components/sw-swiper/sw-swiper.vue

@@ -0,0 +1,56 @@
+<template>
+	<swiper class="swiper-box" :style="{'height': height + 'rpx'}" :interval="2000"
+		:disable-touch="!list || list.length <= 1" circular :indicator-dots="list && list.length > 1"
+		indicator-active-color="#fff">
+		<swiper-item class="swiper-item" v-for="(item , index) in list" :key="index">
+			<image :src="item" mode="aspectFill" :style="{'border-radius':borderRadius + 'rpx'}"></image>
+		</swiper-item>
+	</swiper>
+
+</template>
+
+<script>
+	export default {
+		name: "sw-swiper",
+		props: {
+			list: {
+				type: Array,
+				default: () => []
+			},
+			borderRadius: {
+				type: Number,
+				default: 0
+			},
+			height: {
+				type: Number,
+				default: 200
+			}
+		},
+		data() {
+			return {};
+		},
+		created() {
+
+		},
+		methods: {
+
+
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	.swiper-box {
+		width: 100%;
+
+		.swiper-item {
+			width: 100%;
+			height: 100%;
+
+			image {
+				width: 100%;
+				height: 100%;
+			}
+		}
+	}
+</style>

+ 1 - 0
config/global.config.js

@@ -1,6 +1,7 @@
 const CONFIG = {
   assetsPath: '/static', // 静态资源路径
   // baseUrl: 'http://192.168.0.151:8196/api', // 后台接口请求地址
+  // baseShopUrl: 'http://192.168.0.151:9020/baseshop/api',
   baseUrl: 'https://yigefuwuapp.ycbrain.com/prod-api/api', // 后台接口请求地址
   baseShopUrl: 'https://yigefuwuapp.ycbrain.com/shop-api/api',
   telRegex: "^(1)\\d{10}$", //手机正则

+ 4 - 3
manifest.json

@@ -2,8 +2,8 @@
     "name" : "宜格分享",
     "appid" : "__UNI__90011BF",
     "description" : "应用描述",
-    "versionName" : "1.2.0",
-    "versionCode" : 120,
+    "versionName" : "1.2.3",
+    "versionCode" : 123,
     "transformPx" : false,
     /* 5+App特有相关 */
     "app-plus" : {
@@ -181,5 +181,6 @@
                 "enable" : true
             }
         }
-    }
+    },
+    "vueVersion" : "2"
 }

+ 106 - 102
pages.json

@@ -1,106 +1,110 @@
 {
-	"easycom": {
-			"^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
-		},
-	"pages": [
-		// pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
-		{
-			"path": "pages/down",
-			"style": {
-				"navigationBarTitleText": "'宜格服务'懂宜昌,更懂你!",
-				"navigationStyle": "custom"
-			}
-		},
-		{
-			"path": "pages/payCentre",
-			"style": {
-				"navigationBarTitleText": "支付中",
-				"navigationStyle": "custom"
-			}
-		},
-		{
-			"path": "pages/paySuccess",
-			"style": {
-				"navigationBarTitleText": "支付成功",
-				"navigationStyle": "custom"
-			}
-		},
-		{
-		  "path": "pages/index",
-		  "style": {
-		    "navigationBarTitleText": "宜格优选",
-		    "navigationStyle": "custom"
-		  }
-		},
-		// {
-		//   "path": "pages/register",
-		//   "style": {
-		//     "navigationBarTitleText": "注册",
-		//     "navigationStyle": "custom"
-		//   }
-		// },
-		{
-			"path": "pages/agreement",
-			"style": {
-				"navigationBarTitleText": "协议",
-				"navigationStyle": "custom"
-			}
-		},
-		{
-			"path": "pages/serviceOrPrivacy",
-			"style": {
-				"navigationBarTitleText": "服务协议",
-				"navigationStyle": "custom"
-			}
-		},
-		{
-			"path": "pages/phone",
-			"style": {
-				"navigationBarTitleText": "咨询电话",
-				"navigationStyle": "custom"
-			}
-		},
-		{
-			"path": "pages/yigePayCenter",
-			"style": {
-				"navigationBarTitleText": "宜格收银台",
-				"navigationStyle": "custom"
-			}
-		},
-		{
-			"path": "pages/yigePay",
-			"style": {
-				"navigationBarTitleText": "I宜昌统一支付管理平台",
-				"navigationStyle": "custom"
-			}
-		}
-		// {
-		// 	"path":"pages/login",
-		// 	"style":{
-		// 		"navigationBarTitleText":"授权"//支付宝登录
-		// 	}
-		// }
+  "easycom": {
+    "^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
+  },
+  "pages": [
+    // pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
+    {
+      "path": "pages/down",
+      "style": {
+        "navigationBarTitleText": "'宜格服务'懂宜昌,更懂你!",
+        "navigationStyle": "custom"
+      }
+    },
+    {
+      "path": "pages/payCentre",
+      "style": {
+        "navigationBarTitleText": "支付中",
+        "navigationStyle": "custom"
+      }
+    },
+    {
+      "path": "pages/paySuccess",
+      "style": {
+        "navigationBarTitleText": "支付成功",
+        "navigationStyle": "custom"
+      }
+    },
+    {
+      "path": "pages/index",
+      "style": {
+        "navigationBarTitleText": "宜格优选",
+        "navigationStyle": "custom"
+      }
+    },
+    // {
+    //   "path": "pages/register",
+    //   "style": {
+    //     "navigationBarTitleText": "注册",
+    //     "navigationStyle": "custom"
+    //   }
+    // },
+    {
+      "path": "pages/agreement",
+      "style": {
+        "navigationBarTitleText": "协议",
+        "navigationStyle": "custom"
+      }
+    },
+    {
+      "path": "pages/serviceOrPrivacy",
+      "style": {
+        "navigationBarTitleText": "服务协议",
+        "navigationStyle": "custom"
+      }
+    },
+    {
+      "path": "pages/phone",
+      "style": {
+        "navigationBarTitleText": "咨询电话",
+        "navigationStyle": "custom"
+      }
+    },
+    {
+      "path": "pages/yigePayCenter",
+      "style": {
+        "navigationBarTitleText": "宜格收银台",
+        "navigationStyle": "custom"
+      }
+    },
+    {
+      "path": "pages/yigePay",
+      "style": {
+        "navigationBarTitleText": "I宜昌统一支付管理平台",
+        "navigationStyle": "custom"
+      }
+    },
+    {
+      "path": "pages/shop",
+      "style": {
+        "navigationBarTitleText": "店铺", //支付宝登录
+        "navigationStyle": "custom"
+      }
+    },
+    {
+      "path": "pages/goodsAggregation",
+      "style": {
+        "navigationBarTitleText": "商品聚合页", //支付宝登录
+        "navigationStyle": "custom"
+      }
+    }
+  ],
 
-
-
-
-	],
-
-	"globalStyle": {
-		"pageOrientation": "portrait",
-		"navigationBarTextStyle": "black",
-		"navigationBarBackgroundColor": "#fff",
-		"backgroundColor": "#F8F8F8",
-		"backgroundColorTop": "#F4F5F6",
-		"backgroundColorBottom": "#F4F5F6",
-		// "navigationStyle": "custom",
-		"app-plus": {
-			"titleView": true,
-			"optimization": {
-				"subPackages": true
-			},
-			"runmode": "liberate" // 开启分包优化后,必须配置资源释放模式
-		}
-	}
+  "globalStyle": {
+    "pageOrientation": "portrait",
+    "navigationBarTextStyle": "black",
+    "navigationBarBackgroundColor": "#fff",
+    "backgroundColor": "#F8F8F8",
+    "backgroundColorTop": "#F4F5F6",
+    "backgroundColorBottom": "#F4F5F6",
+    // "navigationStyle": "custom",
+    "app-plus": {
+      "titleView": true,
+      "optimization": {
+        "subPackages": true
+      },
+      "runmode": "liberate" // 开启分包优化后,必须配置资源释放模式
+    }
+  }
 
 }

+ 4 - 4
pages/down.vue

@@ -10,7 +10,7 @@
     </view>
 
     <view class="top-box">
-      <image src="/static/down/downApps.png" mode="aspectFit" class="logo"></image>
+      <image src="/static/down/downApps2.png" mode="aspectFit" class="logo"></image>
     </view>
     <view class="btn-row">
       <button class="btn" @click="downLoad(0)" v-if="osName == 'android'">
@@ -138,7 +138,7 @@
     width: 100%;
     min-height: 100vh;
 
-    background: url('../static/down/downBG.png') no-repeat top center;
+    background: url('../static/down/downBG1.png') no-repeat top center;
     background-size: 100% 100%;
     padding-bottom: 118rpx;
   }
@@ -178,8 +178,8 @@
       border-radius: 60rpx;
       width: 401rpx;
       height: 97rpx;
-      /* background: linear-gradient(189deg, #a7f4ff 0%, #45e3ff 100%), #edf4fc; */
-      background: linear-gradient(189deg, #bbfdbd 0%, #a4f0a4 100%), #edf4fc;
+      background: linear-gradient(189deg, #a7f4ff 0%, #45e3ff 100%), #edf4fc;
+      /* background: linear-gradient(189deg, #bbfdbd 0%, #a4f0a4 100%), #edf4fc; */
       border-radius: 20rpx;
       margin-top: 49rpx;
       display: flex;

+ 218 - 0
pages/goodsAggregation.vue

@@ -0,0 +1,218 @@
+<template>
+  <view class="module-page">
+    <navbar ref="navbarRef" :config="config" backColor="#333333"></navbar>
+    <template v-if="carouselArr && carouselArr.length > 0">
+      <sw-swiper :list='carouselArr' :height="370" />
+    </template>
+    <view class="module-content">
+      <template v-if="moduleList && moduleList.length > 0 && onEmptyDate(moduleList)">
+        <view class="module-item" v-for="(md , mi) in moduleList">
+          <template v-if="md.goodsList && md.goodsList.length > 0">
+            <view class="module-title">{{md.moduleName}}</view>
+            <view class="module-goods">
+              <view class="goods-item" v-for="item in md.goodsList"
+                @click="goProductDetails('/pages/index?pageType=1&type=1&id=' + item.goodsId)">
+                <view class="goods-img lazy-img">
+                  <image class="service-img" :src="item.goodsCover" mode="aspectFill"></image>
+                  <!-- <u-image class="service-img" :src="item.goodsCover" mode="aspectFit" :lazy-load="true" /> -->
+                </view>
+                <view class="goods-info">
+                  <view class="goods-title">{{item.goodsTitle}}</view>
+                  <view class="goods-price">
+                    <rich-text :nodes="$mUtil.priceBigSmall(item.goodsSalePrice)"></rich-text>
+                    <!-- <text class="line-price">¥ {{ item.goodsMarketPrice }}</text> -->
+                  </view>
+                </view>
+              </view>
+            </view>
+          </template>
+          <!-- <template v-else>
+						<EmptyDate />
+					</template> -->
+        </view>
+      </template>
+      <template v-else-if="!loading">
+        <EmptyDate />
+      </template>
+    </view>
+  </view>
+</template>
+
+<script>
+  import {
+    getGoodsAggregationInfo_Api
+  } from "@/api/government.js"
+  import swSwiper from "@/components/sw-swiper/sw-swiper.vue"
+  export default {
+    components: {
+      swSwiper
+    },
+    data() {
+      return {
+        config: {
+          back: false,
+          title: '',
+          color: 'black',
+          backgroundColor: [1, '#fff'],
+          statusBarFontColor: 'black',
+          rightSlot: true
+        },
+        activityAggregationId: undefined,
+        loading: true,
+        carouselArr: [],
+        moduleList: [],
+        aggregationInfo: {},
+        isvisible: false
+      };
+    },
+    onLoad(opt) {
+      this.activityAggregationId = opt.activityAggregationId;
+      this.getGoodsAggregationInfo()
+    },
+    onShow() {
+
+    },
+    watch: {
+      // init
+      config: {
+        handler(newVal) {
+          try {
+            this.$refs.navbarRef.init()
+          } catch (e) {
+            //TODO handle the exception
+          }
+        },
+        deep: true
+      }
+    },
+    methods: {
+      // 判断是否存在数据
+      onEmptyDate(list) {
+        let isData = false;
+        try {
+          const val = list.find(el => el && el.goodsList && el.goodsList.length > 0);
+          isData = val || false;
+        } catch (e) {
+          isData = false
+        };
+        return isData
+
+      },
+      goProductDetails(path) {
+        uni.navigateTo({
+          url: path
+        })
+      },
+      getGoodsAggregationInfo() {
+        this.loading = true;
+        getGoodsAggregationInfo_Api(this.activityAggregationId).then(res => {
+          const {
+            aggregationName,
+            aggregationImg,
+            moduleList
+          } = res.data || {};
+          this.aggregationInfo = res.data
+          this.config.title = aggregationName;
+          this.moduleList = moduleList || [];
+          const imgs = aggregationImg.split(',');
+          this.carouselArr = imgs || [];
+        }).finally(() => {
+          this.loading = false;
+        })
+      },
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+  .module-page {
+    width: 100%;
+    min-height: 100vh;
+    background-color: #FEFEFE;
+  }
+
+  .module-content {
+    padding: 0 30rpx;
+
+    .module-item {
+      .module-title {
+        font-size: 28rpx;
+        font-family: PingFang SC, PingFang SC-Bold;
+        font-weight: 700;
+        color: #1a1a1a;
+        text-align: center;
+        padding: 30rpx 0;
+      }
+
+      .module-goods {
+        display: flex;
+        flex-wrap: wrap;
+        justify-content: space-between;
+      }
+    }
+
+    .goods-item {
+      flex-shrink: 0;
+      width: 336rpx;
+      height: 512rpx;
+      margin-bottom: 38rpx;
+      background: #ffffff;
+      border-radius: 18rpx;
+      overflow: hidden;
+      box-shadow: 0 2rpx 12rpx 0 rgba(0, 0, 0, 0.1);
+
+      // &:nth-child(2n) {
+      // 	margin-right: 0;
+      // }
+
+      .goods-img {
+        width: 336rpx;
+        height: 336rpx;
+        border-radius: 18rpx 18rpx 0 0;
+        vertical-align: middle;
+
+        .service-img {
+          width: 100%;
+          height: 100%;
+        }
+      }
+
+      .goods-info {
+        padding: 0 20rpx 20rpx;
+        padding-top: 14rpx;
+        // height: calc(100% - 336rpx);
+        display: flex;
+        flex-direction: column;
+        justify-content: space-between;
+
+        .goods-title {
+          // height: 90rpx;
+          margin-bottom: 10rpx;
+          overflow: hidden;
+          text-overflow: ellipsis;
+          display: -webkit-box;
+          -webkit-box-orient: vertical;
+          -webkit-line-clamp: 2;
+        }
+
+        .goods-price {
+          display: flex;
+          align-items: baseline;
+          color: #FF6600;
+          font-size: 36rpx;
+
+          .line-price {
+            font-size: 22rpx;
+            color: #999999;
+            margin-left: 16rpx;
+            text-decoration: line-through;
+          }
+        }
+      }
+    }
+  }
+
+  .topRight {
+    margin-right: 40rpx;
+  }
+</style>

+ 952 - 0
pages/shop.vue

@@ -0,0 +1,952 @@
+<template>
+  <view class="main">
+    <navbar ref="navbars" :config="config" backColor="#666"></navbar>
+
+    <view class="shopCard">
+      <view class="shop-info">
+        <image :src="shop.logo" mode=""></image>
+        <view class="shopNamebox">
+          <view class="phone-btn" @click="goPhone(shop.customer_service_phone)">售后电话</view>
+          <view class="shopName">{{ shop.shop_name }}</view>
+          <view class="shopName_rate">
+            <rate :value="shop.averageCopy"></rate> {{ shop.average }}分
+          </view>
+        </view>
+      </view>
+      <template v-if="false">
+        <view class="shop_item mt30" style="alignItems: flex-start;">
+          <image src="/static/convenienceService/location2.png" mode=""></image>
+          <!-- <view>{{ shop.map_punctuation }}{{ shop.address }}></view> -->
+          <!-- <view>{{shop.province_name+shop.city_name+shop.area_name+shop.community_name+shop.address}}</view> -->
+          <view>{{shop.province_name+shop.city_name+shop.area_name+shop.address}}</view>
+        </view>
+        <view class="shop_item" style="alignItems: flex-start;">
+          <text class="iconfont2">&#xe651;</text>
+          <view>营业时间:{{ shop.business_hours }}{{ shop.time_quantum }}</view>
+        </view>
+      </template>
+      <!-- <view class="shop_item mt30" style="alignItems: flex-start;">
+        <text class="iconfont3 blueicon">&#xe609;</text>
+        <view @click="goPhone(shop.customer_service_phone)">售后电话:{{ $mUtil.phoneChange(shop.customer_service_phone) }}</view>
+      </view> -->
+
+      <!-- <view class="searchBox">
+        <image src="/static/convenienceService/search.png" mode=""></image>
+        <input @click="searchClick" v-model="value" type="text" placeholder-style="color:#B3B3B3;fontSize:28rpx"
+          placeholder="可搜索本店商品" />
+      </view> -->
+    </view>
+
+    <view class="limitCard" v-if="currSeckill && currSeckill.length > 0">
+      <view class="limitCard_top">
+        <view class="limitCard_top_title">限时秒杀</view>
+        <view class="limitCard_top_lab">{{currTime}}点场 剩余</view>
+        <!-- <view class="limitCard_top_time">3天 17 : 26 : 35</view> -->
+        <view class="limitCard_top_time">
+          <uni-countdown :backgroundColor="'none'" @timeup="overDown2" :color="'#fff'" :splitorColor="'#fff'"
+            :show-day="time2[0] > 0" :day="time2[0]" :hour="time2[1]" :minute="time2[2]" :second="time2[3]">
+          </uni-countdown>
+        </view>
+      </view>
+      <swiper class="swiper" indicator-color="#EDEDED" indicator-active-color="#3775F6" circular
+        :indicator-dots="indicatorDots" :autoplay="autoplay" :interval="interval" :duration="duration">
+        <swiper-item v-for="(item,key) in currSeckill" :key="key">
+          <view class="listBox">
+            <view class="listBox_item" v-for="itemSon in item"
+              @click="goProductDetails('/pages/product/goods/seckillGoods?id=' + itemSon.id)" :key="item.id">
+              <image v-if="itemSon && itemSon.cover" :src="itemSon.cover" mode=""></image>
+              <!-- <view>¥<text>64.</text>20</view> -->
+              <view class="">
+                <rich-text :nodes="$mUtil.priceBigSmall(itemSon.min_price)"></rich-text>
+              </view>
+            </view>
+          </view>
+        </swiper-item>
+      </swiper>
+    </view>
+
+    <view class="groupCard" v-if="groupList && groupList.length > 0 && false">
+      <view class="group_title">
+        <view class="group_title_l">拼团购</view>
+        <view class="group_title_r" @click="goProductDetails('/pages/research/nearby/timeLimit?shopid='+shopId)">
+          查看更多
+          <text class="iconfont2">&#xe65f;</text>
+        </view>
+      </view>
+
+      <view class="goodsListBox">
+        <view class="goods_item" v-for="(item, index) in groupList" :key="index"
+          @click="goProductDetails('/pages/product/goods/puzzleGoods?id=' + item.id)">
+          <view class="goods_item_img">
+            <image :src="item.cover" mode=""></image>
+          </view>
+          <view class="goods_item_data">
+            <view class="goods_item_data_title">{{ item.title }}</view>
+            <view>
+              <image class="autotrophyCls" src="/static/convenienceService/autotrophy.png" mode="">
+              </image>
+              <image class="originalCls" src="/static/convenienceService/original.png" mode="">
+              </image>
+            </view>
+
+            <view class="goods_item_data_box">
+              <view class="goods_item_data_box_l ">
+                <!-- <view class="goods_item_data_box_l_price">
+                  <rich-text :nodes="$mUtil.priceBigSmall(item.min_price)"></rich-text>
+                  <view>¥ {{ item.min_sale_price }}</view>
+                </view> -->
+                <view class="num">
+                  <view class="large">
+                    <rich-text :nodes="$mUtil.priceBigSmall(item.min_price)"></rich-text>
+                  </view>
+                  <view class="small">
+                    <text class="pintuanc6">¥ {{ item.min_sale_price }}</text>
+                  </view>
+                </view>
+                <view class="goods_item_data_box_l_person">
+                  {{ item.group_people_num }}人团,已拼<text>{{item.result_sale_num}}</text>件
+                </view>
+              </view>
+              <view class="goods_item_data_box_r">去拼团</view>
+            </view>
+          </view>
+        </view>
+      </view>
+
+    </view>
+    <view class="maxTab">
+      <!-- <view :class="{active:maxTabIndex==0}" @click="switchAssembly(0)">精选服务</view> -->
+      <view :class="{active:maxTabIndex==1}" @click="switchAssembly(1)">精选商品</view>
+    </view>
+    <!-- <view class="titleBox">精选服务</view> -->
+    <view class="minTab">
+      <view :class="{ active: activeIndex == i }" v-for="(v,i) in choice" :key="i"
+        @click="commTypeChange(i, v.value, v.id)">{{v.name}}</view>
+    </view>
+
+    <view class="goodsListA" v-if="maxTabIndex==0">
+      <view class="goodsListA_item" v-for="item in commGood" :key="item.id" v-if="commGood && commGood.length > 0"
+        @click="goDetails(item.id)">
+        <image :src="item.cover" mode=""></image>
+        <view class="goodsListA_item_title">{{ item.title }}</view>
+        <view class="goodsListA_item_pirce">
+          <rich-text :nodes="$mUtil.priceBigSmall(item.sale_price||item.min_sale_price)"></rich-text>
+          <view>¥ {{ item.market_price||item.min_market_price }}</view>
+        </view>
+        <view class="goodsListA_item_num">已售{{ item.result_sale_num }}件</view>
+      </view>
+
+      <!-- <view class="lookOther">
+					查看更多113个服务
+					<text class="iconfont2">&#xe65f;</text>
+				</view> -->
+    </view>
+
+    <!-- <view class="titleBox">精选商品</view> -->
+    <!-- <view class="minTab">
+				<view class="active">推荐</view>
+				<view>商超</view>
+				<view>茶舍</view>
+				<view>美容</view>
+			</view> -->
+    <!-- <view class="minTab">
+				<view :class="{ active: activeIndex == i }" v-for="(v,i) in choice" :key="i"
+					@click="commTypeChange(i, v.value, v.id)">{{v.name}}</view>
+			</view> -->
+
+    <view class="goodsListA pb50" v-if="maxTabIndex==1">
+      <view class="goodsListA_item" v-for="item in commGood" :key="item.id" v-if="commGood && commGood.length > 0"
+        @click="goDetails(item.id)">
+        <image :src="item.cover" mode=""></image>
+        <view class="goodsListA_item_title">{{ item.title }}</view>
+        <view class="goodsListA_item_pirce">
+          <rich-text :nodes="$mUtil.priceBigSmall(item.sale_price||item.min_sale_price)"></rich-text>
+          <view>¥ {{ item.market_price||item.min_market_price }}</view>
+        </view>
+        <view class="goodsListA_item_num">已售{{ item.result_sale_num }}件</view>
+      </view>
+
+      <!-- <view class="lookOther">
+					查看更多113个服务
+					<text class="iconfont2">&#xe65f;</text>
+				</view> -->
+    </view>
+
+    <nodata v-if="commGood.length == 0" :config="{top:5,content:'暂无数据~'}"></nodata>
+  </view>
+</template>
+
+<script>
+  import rate from "@/components/rate.vue"
+  export default {
+    components: {
+      rate,
+    },
+    data() {
+      return {
+        config: {
+          back: false,
+          title: '店铺信息',
+          color: '#1a1a1a',
+          backgroundColor: [1, '#fff'],
+          // statusBarFontColor: 'black',
+        },
+        value: "",
+        duration: 500,
+        indicatorDots: true,
+        autoplay: false,
+        interval: 2000,
+        shop: {}, //店铺信息
+        shopId: null,
+        currSeckill: [],
+        currTime: null, //秒杀当前场
+        time2: "",
+        groupList: [], //拼团列表
+        maxTabIndex: 1,
+        commCate: [], //商品分类
+        choiceCopy: [{
+            id: 1,
+            name: "推荐",
+            value: "recommend",
+          },
+          {
+            id: 2,
+            name: "热销",
+            value: "hot",
+          },
+          {
+            id: 3,
+            name: "新品",
+            value: "new",
+          },
+        ],
+        choice: [],
+        commGood: [], //商品列表
+        commParams: {
+          limit: 100000,
+        },
+        activeIndex: 0,
+      }
+    },
+    onLoad(options) {
+      if (options.shopId) {
+        this.shopId = options.shopId;
+        this.getCommCate(options.shopId);
+        this.getIndexList(options.shopId);
+        this.seckillList(options.shopId);
+        this.getgroupList(options.shopId);
+        // this.getCommGood(this.shopId);
+        // this.commTypeChange(0,"recommend")
+      }
+    },
+    methods: {
+      searchClick() {
+        // console.log("dian");
+        uni.navigateTo({
+          url: "/pages/research/homepage/search",
+        });
+      },
+      goProductDetails(url) {
+        uni.navigateTo({
+          url: url,
+        });
+      },
+      /**获取店铺基本信息 */
+      getIndexList(shopid) {
+        this.$shopHttp.get("/yxt/shop/info/" + shopid).then((res) => {
+          uni.stopPullDownRefresh();
+          this.loading = false;
+          if (res.data && res.code == 200) {
+            this.shop = res.data;
+            this.shop.averageCopy = Math.round(res.data.average)
+          }
+        });
+      },
+      /**限时秒杀 */
+      seckillList(shopId) {
+        this.$shopHttp
+          .get(
+            `/marketing/seckillActivityGoods/flash-sale?shop_id=${shopId}`, {
+              limit: 10,
+              page: 1
+            },
+            false
+          )
+          .then((res) => {
+            if (res && res.code == 200) {
+              this.currTime = res.data.start_hour;
+              this.currSeckill = this.oneArrToTwoArr(res.data.list || [])
+              if (res.data.finish_time) {
+                this.time2 = this.$mUtil
+                  .countDown(Math.floor(res.data.finish_time / 1000))
+                  .split(":")
+                  .map((val) => Number(val));
+              }
+            }
+          });
+      },
+      /**团购 */
+      getgroupList(shopId) {
+        this.$shopHttp
+          .get(
+            `/groupbuy/activitygoods/will-you-spell?shop_id=${shopId}`, {
+              limit: 10,
+              page: 1
+            },
+            false
+          )
+          .then((res) => {
+            if (res && res.code == 200) {
+              this.groupList = res.list;
+            }
+          });
+      },
+      switchAssembly(index) {
+        this.maxTabIndex = index;
+        this.activeIndex = 0;
+        delete this.commParams.group_id;
+        this.getCommCate(this.shopId);
+      },
+      commTypeChange(index, type, groupId) {
+        let e = {
+          type: type,
+          groupId: groupId
+        }
+        this.activeIndex = index;
+        if (e.type == undefined) {
+          delete this.commParams.type;
+          this.commParams.group_id = e.groupId;
+        } else {
+          delete this.commParams.group_id;
+          this.commParams.type = e.type;
+        }
+        this.getCommGood(this.shopId);
+      },
+      /**商品列表 */
+      getCommGood(shopId) {
+        this.$shopHttp
+          .get(this.maxTabIndex == 0 ? `/service/goods/list/${shopId}` : `/goods/list/${shopId}`, this
+            .commParams,
+            false)
+          .then((res) => {
+            if (res && res.code == 200) {
+              this.commGood = res.list;
+            }
+          });
+      },
+      /**商品分类 */
+      getCommCate(shopId) {
+        this.$shopHttp
+          .get(this.maxTabIndex == 0 ? `/servicegoods/group/all/${shopId}` : `/goods_group/all/${shopId}`, {},
+            false)
+          .then((res) => {
+            if (res && res.code == 200) {
+              // this.commCate = res.list;
+              this.choice = [];
+              if (this.maxTabIndex == 1) {
+                this.choice = JSON.parse(JSON.stringify(this.choiceCopy));
+              }
+              this.choice.push(...res.list);
+              if (this.maxTabIndex == 0) {
+                this.commParams.type = this.choice[0].id;
+              } else {
+                this.commParams.type = 'recommend';
+              }
+              this.getCommGood(this.shopId);
+            }
+          });
+      },
+      goDetails(id) {
+        uni.navigateTo({
+          // url: this.maxTabIndex == 0 ? '/pages/product/goods/serviceGood?id=' + id :
+          //   '/pages/product/goods/goods?id=' + id,
+          url: `/pages/index?pageType=1&type=${this.maxTabIndex == 0 ? 4 : 1}&id=${id}`
+        });
+      },
+      oneArrToTwoArr(data) {
+        let newData = [];
+        let zyf = 4; //一维数组转二维数组长度(此处是二维数组每一个长度控制)
+        for (var i = 0; i < Math.ceil(data.length / zyf); i++) {
+          newData[i] = [];
+          newData[i].push(data[i * zyf]);
+          for (var j = 1; j < zyf; j++) {
+            if (data[i * zyf + j] == undefined) {
+              //超出长度控住
+              return newData;
+            } else {
+              newData[i].push(data[i * zyf + j]);
+            }
+          }
+        }
+        return newData;
+      },
+      // 商家电话
+      goPhone(tel) {
+        uni.makePhoneCall({
+          phoneNumber: tel
+        });
+      },
+    }
+  }
+</script>
+
+<style lang="scss">
+  .topRight {
+    padding-right: 30rpx;
+    display: flex;
+
+    image {
+      width: 40rpx;
+      height: 40rpx;
+      margin: 0 auto;
+      margin-right: 20rpx;
+    }
+  }
+
+  .city-text {
+    margin-left: 30rpx;
+    font-size: 30rpx;
+    font-family: PingFang SC, PingFang SC-Regular;
+    font-weight: 400;
+    text-align: center;
+    color: #1a1a1a;
+
+    image {
+      width: 20rpx;
+      height: 12rpx;
+      margin-left: 5rpx;
+      vertical-align: middle;
+    }
+  }
+
+  .menuCls {
+    margin-left: 10rpx;
+    font-size: 44rpx;
+    color: #fff;
+  }
+
+  .searchBox {
+    display: flex;
+    padding: 10rpx 35rpx;
+    border: 1rpx solid #CCCCCC;
+    border-radius: 36rpx;
+    margin: 30rpx 0 0;
+    display: flex;
+    align-items: center;
+    margin-top: 10rpx;
+    background: #fff;
+
+    image {
+      width: 35rpx;
+      height: 35rpx;
+      margin-right: 15rpx;
+      flex-shrink: 0;
+    }
+
+    input {
+      text-align: left;
+    }
+  }
+
+  .shopCard {
+    // margin: 100rpx auto 0;
+    // width: 720rpx;
+    // min-height: 320rpx;
+    padding: 30rpx;
+    // background: url('/static/convenienceService/cardBg.png')0 0 no-repeat;
+    // background-size: 720rpx 320rpx;
+    box-shadow: 0rpx 4rpx 8rpx 0rpx #f1f1f1;
+    background: #ffffff;
+    border-radius: 20rpx;
+    position: relative;
+
+    .shop-info {
+      display: flex;
+      align-items: center;
+
+      >image {
+        // position: absolute;
+        // top: -70rpx;
+        // left: 30rpx;
+        width: 120rpx;
+        height: 120rpx;
+        border-radius: 20rpx;
+        background: #fff;
+        flex-shrink: 0;
+      }
+    }
+
+    .shopNamebox {
+      flex: 1;
+      margin-left: 20rpx;
+      position: relative;
+
+      .phone-btn {
+        width: 150rpx;
+        margin-left: auto;
+        padding: 6rpx 10rpx;
+        text-align: center;
+        color: #666;
+        border-radius: 8rpx;
+        background-color: #fff;
+        border: 1rpx solid #666;
+        position: absolute;
+        right: 0;
+        bottom: 0;
+      }
+
+      .shopName {
+        font-size: 32rpx;
+        color: #333333;
+        font-weight: 700;
+        // margin-top: 30rpx;
+      }
+
+      .shopName_rate {
+        font-size: 28rpx;
+        color: #333333;
+        display: flex;
+        margin-top: 15rpx;
+      }
+    }
+
+    .shop_item {
+      font-size: 24rpx;
+      color: #333333;
+      display: flex;
+      align-items: center;
+      margin-top: 22rpx;
+      padding: 0 10rpx;
+
+      text {
+        color: #108948;
+        font-size: 34rpx;
+      }
+
+      view {
+        margin-left: 20rpx;
+      }
+
+      image {
+        width: 34rpx;
+        height: 37rpx;
+        flex-shrink: 0;
+      }
+
+      .blueicon {
+        color: #FA6138;
+      }
+    }
+  }
+
+  .limitCard {
+    margin: auto;
+    width: 720rpx;
+    height: 410rpx;
+    padding: 0 30rpx;
+    background: url('/static/convenienceService/cardBg.png') 0 0 no-repeat;
+    background-size: 720rpx 410rpx;
+
+    .limitCard_top {
+      display: flex;
+      padding: 35rpx 30rpx 20rpx 30rpx;
+      align-items: center;
+      border-bottom: 1rpx solid #E6E6E6;
+
+      .limitCard_top_title {
+        font-size: 36rpx;
+        color: #1A1A1A;
+        font-weight: 700;
+        display: flex;
+        align-items: center;
+        position: relative;
+        padding-right: 15rpx;
+
+        &::after {
+          display: block;
+          content: "";
+          width: 1rpx;
+          height: 33rpx;
+          background: #707070;
+          position: absolute;
+          right: 0;
+          top: 10rpx;
+        }
+      }
+
+      .limitCard_top_lab {
+        font-size: 24rpx;
+        color: #666666;
+        margin: 0 30rpx 0 15rpx;
+      }
+
+      .limitCard_top_time {
+        border-radius: 17rpx;
+        background: #FF0000;
+        font-size: 24rpx;
+        color: #fff;
+        font-weight: 700;
+        padding: 0 15rpx;
+      }
+    }
+
+    .swiper {
+      height: 280rpx;
+
+      .listBox {
+        padding: 25rpx 20rpx;
+        display: flex;
+
+        .listBox_item {
+          margin-right: 20rpx;
+
+          image {
+            width: 140rpx;
+            height: 140rpx;
+          }
+
+          >view {
+            width: 140rpx;
+            font-size: 20rpx;
+            color: #333333;
+            text-align: center;
+
+            text {
+              font-size: 28rpx;
+              font-weight: 600;
+              display: inline-block;
+              margin-left: 10rpx;
+            }
+          }
+
+          &:last-child {
+            margin-right: 0 !important;
+          }
+        }
+      }
+    }
+  }
+
+  .groupCard {
+    margin: auto;
+    width: 720rpx;
+    // height: 1500rpx;
+    padding: 0 30rpx;
+    // background: url('/static/convenienceService/cardBg.png')0 0 no-repeat;
+    // background-size: 720rpx 1500rpx;
+    box-shadow: 0rpx 4rpx 8rpx 0rpx #f1f1f1;
+    border-radius: 16rpx;
+
+    .group_title {
+      display: flex;
+      justify-content: space-between;
+      padding: 35rpx 30rpx 20rpx 30rpx;
+      align-items: center;
+      border-bottom: 1rpx solid #E6E6E6;
+
+      .group_title_l {
+        font-size: 36rpx;
+        color: #1A1A1A;
+        font-weight: 700;
+      }
+
+      .group_title_r {
+        font-size: 24rpx;
+        color: #333333;
+      }
+
+    }
+
+    .goodsListBox {
+      .goods_item {
+        &:last-child {
+          border-bottom: none !important;
+        }
+
+        display: flex;
+        padding: 50rpx 0 40rpx;
+        border-bottom: 1rpx solid #E6E6E6;
+
+        .goods_item_img {
+          margin-right: 25rpx;
+
+          image {
+            width: 226rpx;
+            height: 226rpx;
+          }
+        }
+
+        .goods_item_data {
+          flex: 1;
+
+          .goods_item_data_title {
+            font-size: 28rpx;
+            min-height: 80rpx;
+            color: #181818;
+            overflow: hidden;
+            text-overflow: ellipsis;
+            display: -webkit-box;
+            -webkit-line-clamp: 2;
+            -webkit-box-orient: vertical;
+          }
+
+          .autotrophyCls {
+            width: 69rpx;
+            height: 30rpx;
+            margin-right: 10rpx;
+            margin-top: 10rpx;
+          }
+
+          .originalCls {
+            width: 116rpx;
+            height: 28rpx;
+            margin-top: 10rpx;
+          }
+
+          .goods_item_data_box {
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+            margin-top: 10rpx;
+
+            .goods_item_data_box_l {
+              .goods_item_data_box_l_price {
+                display: flex;
+                align-items: flex-end;
+                font-size: 20rpx;
+                color: #00BF5A;
+
+                text {
+                  font-size: 36rpx;
+                  font-weight: 500;
+                  display: inline-block;
+                  position: relative;
+                  top: 4rpx;
+                }
+
+                >view {
+                  font-size: 24rpx;
+                  color: #CCCCCC;
+                  margin-left: 30rpx;
+                  text-decoration: line-through
+                }
+              }
+
+              .goods_item_data_box_l_person {
+                font-size: 24rpx;
+                color: #333333;
+
+                text {
+                  color: #FF0000;
+                }
+              }
+            }
+
+            .goods_item_data_box_r {
+              width: 138rpx;
+              height: 63rpx;
+              background: #FA6138;
+              border-radius: 32rpx;
+              font-size: 28rpx;
+              display: flex;
+              justify-content: center;
+              align-items: center;
+              color: #fff;
+            }
+          }
+        }
+      }
+    }
+
+  }
+
+  .maxTab {
+    display: flex;
+    // justify-content: space-around;
+    padding: 40rpx 40rpx 20rpx;
+
+    >view {
+      font-size: 36rpx;
+      color: #1A1A1A;
+      font-weight: 700;
+      position: relative;
+
+      &::after {
+        display: block;
+        content: "";
+        width: 0;
+        height: 4rpx;
+        border-radius: 1rpx;
+        position: absolute;
+        left: 70rpx;
+        bottom: -36rpx;
+        transform: translateX(-50%);
+        transition: all 0.3s;
+      }
+    }
+
+    .active {
+      // color: #00321E;
+      // &::after {
+      // 	width: 100%;
+      // 	height: 4rpx;
+      // 	border-radius: 1rpx;
+      // 	background: #00321E;
+      // }
+    }
+  }
+
+  .titleBox {
+    padding: 40rpx 30rpx 30rpx;
+    font-size: 36rpx;
+    color: #1A1A1A;
+    font-weight: 700;
+  }
+
+  .minTab {
+    padding: 30rpx 30rpx 30rpx;
+    display: flex;
+    overflow: auto;
+
+    >view {
+      color: #666666;
+      font-weight: 28rpx;
+      margin-right: 50rpx;
+      padding-bottom: 15rpx;
+      flex-shrink: 0;
+    }
+
+    >.active {
+      font-size: 30rpx;
+      color: #FA6138;
+      font-weight: 700;
+      position: relative;
+
+      &::after {
+        display: block;
+        content: "";
+        width: 100%;
+        height: 4rpx;
+        background: #FA6138;
+        border-radius: 2rpx;
+        position: absolute;
+        bottom: 0%;
+        left: 0;
+      }
+    }
+  }
+
+  .goodsListA {
+    padding: 0 30rpx;
+    display: flex;
+    flex-wrap: wrap;
+
+    .goodsListA_item {
+      width: 336rpx;
+      box-shadow: 0rpx 4rpx 8rpx 0rpx #f1f1f1;
+      border-radius: 18rpx;
+      margin-left: 18rpx;
+      margin-bottom: 30rpx;
+
+      &:nth-child(2n-1) {
+        margin-left: 0 !important;
+      }
+
+      image {
+        width: 336rpx;
+        height: 336rpx;
+        border-radius: 18rpx 18rpx 0 0;
+      }
+
+      >view {
+        padding: 0 20rpx;
+      }
+
+      .goodsListA_item_title {
+        font-size: 28rpx;
+        color: #181818;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        display: -webkit-box;
+        -webkit-line-clamp: 2;
+        -webkit-box-orient: vertical;
+      }
+
+      .goodsListA_item_pirce {
+        display: flex;
+        align-items: flex-end;
+        font-size: 20rpx;
+        color: #FF6600;
+        font-weight: 700;
+
+        text {
+          font-size: 36rpx;
+          font-weight: 500;
+          display: inline-block;
+          position: relative;
+          top: 4rpx;
+        }
+
+        >view {
+          font-size: 24rpx;
+          color: #CCCCCC;
+          margin-left: 30rpx;
+          text-decoration: line-through;
+          font-weight: normal;
+        }
+      }
+
+      .goodsListA_item_num {
+        font-size: 22rpx;
+        color: #999999;
+        margin-top: 10rpx;
+        padding-bottom: 20rpx;
+      }
+    }
+  }
+
+  .lookOther {
+    font-size: 24rpx;
+    color: #333333;
+    width: 288rpx;
+    height: 59rpx;
+    border-radius: 8rpx;
+    background: #F2F2F2;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    margin: auto;
+  }
+
+  .mt30 {
+    margin-top: 30rpx !important;
+  }
+
+  .pb50 {
+    padding-bottom: 50rpx;
+  }
+
+
+  .num {
+    display: flex;
+    align-items: center;
+    margin-top: 46rpx;
+    font-weight: Bold;
+    font-size: 20rpx;
+    color: red;
+  }
+
+  .small {
+    color: #cccccc;
+    font-size: 22rpx;
+    font-weight: 500;
+    text-decoration: line-through;
+    margin-left: 17rpx;
+  }
+
+  .work-red {
+    font-size: 36rpx;
+    font-weight: Bold;
+    margin-left: 5rpx;
+  }
+</style>

BIN
static/down/downApps2.png


BIN
static/light-start.png


BIN
static/start.png