Răsfoiți Sursa

商品详情.评价页面.购物车页面.首页轮播图.搜索功能.分类接口

落日晚风 1 an în urmă
părinte
comite
f4c1b30f2e

+ 159 - 149
pages/goods/comment/list.vue

@@ -1,160 +1,170 @@
 <!-- 页面  -->
 <template>
-  <s-layout title="全部评价">
-    <su-tabs
-      :list="state.type"
-      :scrollable="false"
-      @change="onTabsChange"
-      :current="state.currentTab"
-    ></su-tabs>
-    <view class="ss-m-t-20">
-      <view class="list-item" v-for="item in state.pagination.data" :key="item">
-        <comment-item :item="item"></comment-item>
-      </view>
-    </view>
-    <s-empty v-if="state.pagination.total === 0" text="暂无数据" icon="/static/data-empty.png" />
-    <uni-load-more
-      v-if="state.pagination.total > 0"
-      :status="state.loadStatus"
-      :content-text="{
+	<s-layout title="全部评价">
+		<su-tabs :list="state.type" :scrollable="false" @change="onTabsChange" :current="state.currentTab"></su-tabs>
+		<view class="ss-m-t-20">
+			<view class="list-item" v-for="item in state.pagination.data" :key="item">
+				<comment-item :item="item"></comment-item>
+			</view>
+		</view>
+		<s-empty v-if="state.pagination.total === 0" text="暂无数据" icon="/static/data-empty.png" />
+		<uni-load-more v-if="state.pagination.total > 0" :status="state.loadStatus" :content-text="{
         contentdown: '上拉加载更多',
-      }"
-      @tap="loadmore"
-    />
-  </s-layout>
+      }" @tap="loadmore" />
+	</s-layout>
 </template>
 
 <script setup>
-  import sheep from '@/sheep';
-  import { onLoad, onReachBottom } from '@dcloudio/uni-app';
-  import { computed, reactive } from 'vue';
-  import _ from 'lodash';
-  import commentItem from '../components/detail/comment-item.vue';
+	import sheep from '@/sheep';
+	import {
+		onLoad,
+		onReachBottom
+	} from '@dcloudio/uni-app';
+	import {
+		computed,
+		reactive
+	} from 'vue';
+	import _ from 'lodash';
+	import commentItem from '../components/detail/comment-item.vue';
 
-  const pagination = {
-    data: [],
-    current_page: 1,
-    total: 1,
-    last_page: 1,
-  };
-  const state = reactive({
-    list: [],
-    type: [],
-    currentTab: 0,
-    pagination: {
-      data: [],
-      current_page: 1,
-      total: 1,
-      last_page: 1,
-    },
-    commentId: 0,
-    code: 'all',
-  });
-  // 切换选项卡
-  function onTabsChange(e) {
-    state.pagination = pagination
-    state.currentTab = e.index;
-    state.code = e.code;
-    getList(state.commentId, e.code);
-  }
-  async function getType(id) {
-    const { error, data } = await sheep.$api.goods.getType(id);
-    if (error === 0) {
-      state.type = data;
-    }
-  }
-  async function getList(id, code, page = 1, list_rows = 6) {
-    state.loadStatus = 'loading';
-    let res = await sheep.$api.goods.comment(id, {
-      type: code,
-      list_rows,
-      page,
-    });
-    if (res.error === 0) {
-        let orderList = _.concat(state.pagination.data, res.data.data);
-        state.pagination = {
-          ...res.data,
-          data: orderList,
-        };
-      if (state.pagination.current_page < state.pagination.last_page) {
-        state.loadStatus = 'more';
-      } else {
-        state.loadStatus = 'noMore';
-      }
-    }
-  }
-  // 加载更多
-  function loadmore() {
-    if (state.loadStatus !== 'noMore') {
-      getList(state.commentId, state.code, state.pagination.current_page + 1);
-    }
-  }
-  onLoad((options) => {
-    state.commentId = options.id;
-    getType(state.commentId);
-    getList(state.commentId);
-  });
-  // 上拉加载更多
-  onReachBottom(() => {
-    loadmore();
-  });
+	const pagination = {
+		data: [],
+		current_page: 1,
+		total: 1,
+		last_page: 1,
+	};
+	const state = reactive({
+		list: [],
+		type: [],
+		currentTab: 0,
+		pagination: {
+			data: [],
+			current_page: 1,
+			total: 1,
+			last_page: 1,
+		},
+		commentId: 0,
+		code: 0,
+	});
+	// 切换选项卡
+	function onTabsChange(e) {
+		state.pagination = pagination
+		state.currentTab = e.index;
+		state.code = e.code;
+		getList(state.commentId, e.code);
+	}
+	async function getType(id) {
+		const {
+			error,
+			data
+		} = await sheep.$api.goods.getType(id);
+		if (error === 0) {
+			console.log(data)
+			// state.type = data;
+			state.type = [{code:0,name:'全部'},{code:1,name:'好评'},{code:2,name:'中评'},{code:3,name:'差评'}];
+		}
+	}
+	async function getList(id, code=0, page = 1, list_rows = 6) {
+		state.loadStatus = 'loading';
+		let res = await sheep.$api.goods.comment2(id, {
+			type: code,
+			pageSize: list_rows,
+			pageNo: page,
+		});
+		console.log(res);
+		if (res.code === 0) {
+			let orderList = _.concat(state.pagination.data, res.data.list);
+			state.pagination = {
+				...res.data,
+				data: orderList,
+			};
+			if (state.pagination.current_page < state.pagination.last_page) {
+				state.loadStatus = 'more';
+			} else {
+				state.loadStatus = 'noMore';
+			}
+		}
+	}
+	// 加载更多
+	function loadmore() {
+		if (state.loadStatus !== 'noMore') {
+			getList(state.commentId, state.code, state.pagination.current_page + 1);
+		}
+	}
+	onLoad((options) => {
+		state.commentId = options.id;
+		getType(state.commentId);
+		getList(state.commentId);
+	});
+	// 上拉加载更多
+	onReachBottom(() => {
+		loadmore();
+	});
 </script>
 
 <style lang="scss" scoped>
-  .list-item {
-    padding: 32rpx 30rpx 20rpx 20rpx;
-    background: #fff;
-    .avatar {
-      width: 52rpx;
-      height: 52rpx;
-      border-radius: 50%;
-    }
-    .nickname {
-      font-size: 26rpx;
-      font-weight: 500;
-      color: #999999;
-    }
-    .create-time {
-      font-size: 24rpx;
-      font-weight: 500;
-      color: #c4c4c4;
-    }
-    .content-title {
-      font-size: 26rpx;
-      font-weight: 400;
-      color: #666666;
-      line-height: 42rpx;
-    }
-    .content-img {
-      width: 174rpx;
-      height: 174rpx;
-    }
-    .cicon-info-o {
-      font-size: 26rpx;
-      color: #c4c4c4;
-    }
-    .foot-title {
-      font-size: 24rpx;
-      font-weight: 500;
-      color: #999999;
-    }
-  }
+	.list-item {
+		padding: 32rpx 30rpx 20rpx 20rpx;
+		background: #fff;
 
-  .btn-box {
-    width: 100%;
-    height: 120rpx;
-    background: #fff;
-    border-top: 2rpx solid #eee;
-  }
-  .tab-btn {
-    width: 130rpx;
-    height: 62rpx;
-    background: #eeeeee;
-    border-radius: 31rpx;
-    font-size: 28rpx;
-    font-weight: 400;
-    color: #999999;
-    border: 1px solid #e5e5e5;
-    margin-right: 10rpx;
-  }
-</style>
+		.avatar {
+			width: 52rpx;
+			height: 52rpx;
+			border-radius: 50%;
+		}
+
+		.nickname {
+			font-size: 26rpx;
+			font-weight: 500;
+			color: #999999;
+		}
+
+		.create-time {
+			font-size: 24rpx;
+			font-weight: 500;
+			color: #c4c4c4;
+		}
+
+		.content-title {
+			font-size: 26rpx;
+			font-weight: 400;
+			color: #666666;
+			line-height: 42rpx;
+		}
+
+		.content-img {
+			width: 174rpx;
+			height: 174rpx;
+		}
+
+		.cicon-info-o {
+			font-size: 26rpx;
+			color: #c4c4c4;
+		}
+
+		.foot-title {
+			font-size: 24rpx;
+			font-weight: 500;
+			color: #999999;
+		}
+	}
+
+	.btn-box {
+		width: 100%;
+		height: 120rpx;
+		background: #fff;
+		border-top: 2rpx solid #eee;
+	}
+
+	.tab-btn {
+		width: 130rpx;
+		height: 62rpx;
+		background: #eeeeee;
+		border-radius: 31rpx;
+		font-size: 28rpx;
+		font-weight: 400;
+		color: #999999;
+		border: 1px solid #e5e5e5;
+		margin-right: 10rpx;
+	}
+</style>

+ 4 - 4
pages/goods/components/detail/comment-item.vue

@@ -5,19 +5,19 @@
         <image class="avatar" :src="sheep.$url.cdn(item.user_avatar)"></image>
       </view>
       <view class="nickname ss-m-r-20">
-        {{ item.user_nickname }}
+        {{ item.userNickname }}
       </view>
       <view class="">
-        <uni-rate :readonly="true" v-model="item.level" size="18" />
+        <uni-rate :readonly="true" v-model="item.scores" size="18" />
       </view>
     </view>
     <view class="content">
       {{ item.content }}
     </view>
-    <view class="ss-m-t-24" v-if="item.images?.length">
+    <view class="ss-m-t-24" v-if="item.picUrls?.length">
       <scroll-view class="scroll-box" scroll-x scroll-anchoring>
         <view class="ss-flex">
-          <view v-for="(item, index) in item.images" :key="item" class="ss-m-r-10">
+          <view v-for="(item, index) in item.picUrls" :key="item" class="ss-m-r-10">
             <su-image class="content-img" isPreview :previewList="state.commentImages" :current="index" :src="item"
               :height="120" :width="120" mode="aspectFill"></su-image>
           </view>

+ 3 - 3
pages/goods/components/detail/detail-comment-card.vue

@@ -46,10 +46,10 @@
   async function getComment(id) {
     const { data } = await sheep.$api.goods.comment(id, {
       list_rows: 3,
-    });
-	console.log(data)
+    });  
+	 const {data:datas} = await sheep.$api.goods.comment2(id);
     state.commentList = data;
-    state.total = data.total;
+    state.total = datas.total;
   }
   onBeforeMount(() => {
     getComment(props.goodsId);

+ 1 - 1
pages/goods/index.vue

@@ -95,7 +95,7 @@
         <!-- 评价 -->
         <detail-comment-card class="detail-comment-selector" :goodsId="state.goodsId" />
         <!-- 详情 -->
-        <detail-content-card class="detail-content-selector" :content="state.goodsInfo.content" />
+        <detail-content-card class="detail-content-selector" :content="state.goodsInfo.description" />
 
         <!-- 活动跳转 -->
         <detail-activity-tip

+ 4 - 4
pages/goods/list.vue

@@ -261,12 +261,12 @@
       sort: Sort,
       order: Order,
       category_id: !keyword ? categoryId : '',
-      list_rows,
+      pageSize:list_rows,
       keyword: keyword,
-      page,
+      pageNo:page,
     });
-    if (res.error === 0) {
-        let couponList = _.concat(state.pagination.data, res.data.data);
+    if (res.code === 0) {
+        let couponList = _.concat(state.pagination.data, res.data.list);
         state.pagination = {
           ...res.data,
           data: couponList,

+ 8 - 8
pages/index/cart.vue

@@ -36,19 +36,19 @@
               />
             </label>
             <s-goods-item
-              :title="item.goods.title"
-              :img="item.sku_price.image || item.goods.image"
-              :price="item.sku_price.price"
-              :skuText="item.sku_price.goods_sku_text"
+              :title="item.spu.name"
+              :img="item.spu.picUrl || item.goods.image"
+              :price="item.sku.price/100"
+              :skuText="item.sku.properties.length>1? item.sku.properties.reduce((items2,items)=>items2.valueName+' '+items.valueName):item.sku.properties[0].valueName"
               priceColor="#FF3000"
               :titleWidth="400"
             >
               <template v-if="!state.editMode" v-slot:tool>
                 <su-number-box
                   :min="0"
-                  :max="item.sku_price.stock"
+                  :max="item.sku.stock"
                   :step="1"
-                  v-model="item.goods_num"
+                  v-model="item.count"
                   @change="onNumberChange($event, item)"
                 ></su-number-box>
               </template>
@@ -112,9 +112,9 @@
     isAllSelected: computed(() => cart.isAllSelected),
     totalPriceSelected: computed(() => cart.totalPriceSelected),
   });
-
   // 单选选中
   function onSelectSingle(id) {
+	  console.log('单选')
     cart.selectSingle(id);
   }
   // 全选
@@ -154,7 +154,7 @@
     if(cartItem.goods_num === e) return;
     cartItem.goods_num = e;
     cart.update({
-      goods_id: cartItem.goods_id,
+      goods_id: cartItem.id,
       goods_num: e,
       goods_sku_price_id: cartItem.goods_sku_price_id,
     });

+ 221 - 239
pages/index/category.vue

@@ -1,250 +1,232 @@
 <template>
-  <s-layout title="分类" tabbar="/pages/index/category" :bgStyle="{ color: '#fff' }">
-    <view class="s-category">
-      <view class="three-level-wrap ss-flex ss-col-top" :style="[{ height: pageHeight + 'px' }]">
-        <scroll-view class="side-menu-wrap" scroll-y :style="[{ height: pageHeight + 'px' }]">
-          <view
-            class="menu-item ss-flex"
-            v-for="(item, index) in state.categoryList?.children"
-            :key="item.id"
-            :class="[{ 'menu-item-active': index == state.activeMenu }]"
-            @tap="onMenu(index)"
-          >
-            <view class="menu-title ss-line-1">
-              {{ item.name }}
-            </view>
-          </view>
-        </scroll-view>
-        <scroll-view
-          class="goods-list-box"
-          scroll-y
-          :style="[{ height: pageHeight + 'px' }]"
-          v-if="state.categoryList?.children?.length"
-        >
-          <image
-            v-if="state.categoryList.children[state.activeMenu].image"
-            class="banner-img"
-            :src="sheep.$url.cdn(state.categoryList.children[state.activeMenu].image)"
-            mode="widthFix"
-          >
-          </image>
-          <first-one
-            v-if="state.categoryList.style === 'first_one'"
-            :data="state.categoryList"
-            :activeMenu="state.activeMenu"
-            :pagination="state.pagination"
-          />
-          <first-two
-            v-if="state.categoryList.style === 'first_two'"
-            :data="state.categoryList"
-            :activeMenu="state.activeMenu"
-            :pagination="state.pagination"
-          />
-          <second-one
-            v-if="state.categoryList.style === 'second_one'"
-            :data="state.categoryList"
-            :activeMenu="state.activeMenu"
-            :pagination="state.pagination"
-          />
-          <third-one
-            v-if="state.categoryList.style === 'third_one'"
-            :data="state.categoryList"
-            :activeMenu="state.activeMenu"
-            :pagination="state.pagination"
-          />
-          <uni-load-more
-            v-if="
+	<s-layout title="分类" tabbar="/pages/index/category" :bgStyle="{ color: '#fff' }">
+		<view class="s-category">
+			<view class="three-level-wrap ss-flex ss-col-top" :style="[{ height: pageHeight + 'px' }]">
+				<scroll-view class="side-menu-wrap" scroll-y :style="[{ height: pageHeight + 'px' }]">
+					<view class="menu-item ss-flex" v-for="(item, index) in state.categoryList?.children" :key="item.id"
+						:class="[{ 'menu-item-active': index == state.activeMenu }]" @tap="onMenu(index)">
+						<view class="menu-title ss-line-1">
+							{{ item.name }}
+						</view>
+					</view>
+				</scroll-view>
+				<scroll-view class="goods-list-box" scroll-y :style="[{ height: pageHeight + 'px' }]"
+					v-if="state.categoryList?.children?.length">
+					<image v-if="state.categoryList.children[state.activeMenu].image" class="banner-img"
+						:src="sheep.$url.cdn(state.categoryList.children[state.activeMenu].image)" mode="widthFix">
+					</image>
+					<first-one v-if="state.categoryList.style === 'first_one'" :data="state.categoryList"
+						:activeMenu="state.activeMenu" :pagination="state.pagination" />
+					<first-two v-if="state.categoryList.style === 'first_two'" :data="state.categoryList"
+						:activeMenu="state.activeMenu" :pagination="state.pagination" />
+					<second-one v-if="state.categoryList.style === 'second_one'" :data="state.categoryList"
+						:activeMenu="state.activeMenu" :pagination="state.pagination" />
+					<third-one v-if="state.categoryList.style === 'third_one'" :data="state.categoryList"
+						:activeMenu="state.activeMenu" :pagination="state.pagination" />
+					<uni-load-more v-if="
               (state.categoryList.style === 'first_one' ||
                 state.categoryList.style === 'first_two') &&
               state.pagination.total > 0
-            "
-            :status="state.loadStatus"
-            :content-text="{
+            " :status="state.loadStatus" :content-text="{
               contentdown: '点击查看更多',
-            }"
-            @tap="loadmore"
-          />
-        </scroll-view>
-      </view>
-    </view>
-  </s-layout>
+            }" @tap="loadmore" />
+				</scroll-view>
+			</view>
+		</view>
+	</s-layout>
 </template>
 
 <script setup>
-  import secondOne from './components/second-one.vue';
-  import thirdOne from './components/third-one.vue';
-  import firstOne from './components/first-one.vue';
-  import firstTwo from './components/first-two.vue';
-  import sheep from '@/sheep';
-
-  import { onLoad, onReachBottom } from '@dcloudio/uni-app';
-  import { computed, reactive } from 'vue';
-  import _ from 'lodash';
-  const state = reactive({
-    categoryList: [],
-    activeMenu: '0',
-
-    pagination: {
-      data: [],
-      current_page: 1,
-      total: 1,
-      last_page: 1,
-    },
-    loadStatus: '',
-  });
-
-  const { screenHeight, safeAreaInsets, screenWidth, safeArea } = sheep.$platform.device;
-  const pageHeight = computed(() => safeArea.height - 44 - 50);
-
-  async function getList(options) {
-    const { error, data } = await sheep.$api.category.list({
-      id: options.id,
-    });
-    if (error === 0) {
-      state.categoryList = data;
-    }
-  }
-
-  const onMenu = (val) => {
-    state.activeMenu = val;
-    if (state.categoryList.style === 'first_one' || state.categoryList.style === 'first_two') {
-      state.pagination = {
-        data: [],
-        current_page: 1,
-        total: 1,
-        last_page: 1,
-      };
-      getGoodsList(state.categoryList.children[val].id);
-    }
-  };
-
-  async function getGoodsList(id, page = 1, list_rows = 6) {
-    state.loadStatus = 'loading';
-    const res = await sheep.$api.goods.list({
-      category_id: id,
-      list_rows,
-      page,
-    });
-    if (res.error === 0) {
-      let couponList = _.concat(state.pagination.data, res.data.data);
-      state.pagination = {
-        ...res.data,
-        data: couponList,
-      };
-      if (state.pagination.current_page < state.pagination.last_page) {
-        state.loadStatus = 'more';
-      } else {
-        state.loadStatus = 'noMore';
-      }
-    }
-  }
-  // 加载更多
-  function loadmore() {
-    if (state.loadStatus !== 'noMore') {
-      getGoodsList(
-        state.categoryList.children[state.activeMenu].id,
-        state.pagination.current_page + 1,
-      );
-    }
-  }
-  onLoad(async (options) => {
-    await getList(options);
-    if (state.categoryList.style === 'first_one' || state.categoryList.style === 'first_two') {
-      getGoodsList(state.categoryList.children[0].id);
-    }
-  });
-  onReachBottom(() => {
-    loadmore();
-  });
+	import secondOne from './components/second-one.vue';
+	import thirdOne from './components/third-one.vue';
+	import firstOne from './components/first-one.vue';
+	import firstTwo from './components/first-two.vue';
+	import sheep from '@/sheep';
+
+	import {
+		onLoad,
+		onReachBottom
+	} from '@dcloudio/uni-app';
+	import {
+		computed,
+		reactive
+	} from 'vue';
+	import _ from 'lodash';
+	const state = reactive({
+		categoryList: [],
+		activeMenu: '0',
+
+		pagination: {
+			data: [],
+			current_page: 1,
+			total: 1,
+			last_page: 1,
+		},
+		loadStatus: '',
+	});
+
+	const {
+		screenHeight,
+		safeAreaInsets,
+		screenWidth,
+		safeArea
+	} = sheep.$platform.device;
+	const pageHeight = computed(() => safeArea.height - 44 - 50);
+
+	async function getList(options) {
+		const {
+			code,
+			data
+		} = await sheep.$api.category.list({
+			id: options.id,
+		});
+		if (code === 0) {
+			state.categoryList = {
+				children: data
+			};
+		}
+	}
+
+	const onMenu = (val) => {
+		state.activeMenu = val;
+		if (state.categoryList.style === 'first_one' || state.categoryList.style === 'first_two') {
+			state.pagination = {
+				data: [],
+				current_page: 1,
+				total: 1,
+				last_page: 1,
+			};
+		}
+		// 这段代码本来是在判断里的
+		getGoodsList(state.categoryList.children[val].id);
+	};
+
+	async function getGoodsList(id, page = 1, list_rows = 6) {
+		state.loadStatus = 'loading';
+		const res = await sheep.$api.goods.list({
+			categoryId: id,
+			pageSize:list_rows,
+			pageNo:page,
+		});
+		if (res.code === 0) {
+			let couponList = _.concat(state.pagination.data, res.data.list);
+			state.pagination = {
+				...res.data,
+				data: couponList,
+			};
+			console.log(state.pagination)
+			if (state.pagination.current_page < state.pagination.last_page) {
+				state.loadStatus = 'more';
+			} else {
+				state.loadStatus = 'noMore';
+			}
+		}
+	}
+	// 加载更多
+	function loadmore() {
+		if (state.loadStatus !== 'noMore') {
+			getGoodsList(
+				state.categoryList.children[state.activeMenu].id,
+				state.pagination.current_page + 1,
+			);
+		}
+	}
+	onLoad(async (options) => {
+		await getList(options);
+		if (state.categoryList.style === 'first_one' || state.categoryList.style === 'first_two') {
+			getGoodsList(state.categoryList.children[0].id);
+		}
+	});
+	onReachBottom(() => {
+		loadmore();
+	});
 </script>
 
 <style lang="scss" scoped>
-  .s-category {
-    :deep() {
-      .side-menu-wrap {
-        width: 200rpx;
-        height: 100%;
-        padding-left: 12rpx;
-        background-color: #f6f6f6;
-
-        .menu-item {
-          width: 100%;
-          height: 88rpx;
-          position: relative;
-          transition: all linear 0.2s;
-
-          .menu-title {
-            line-height: 32rpx;
-            font-size: 30rpx;
-            font-weight: 400;
-            color: #333;
-            margin-left: 28rpx;
-            position: relative;
-            z-index: 0;
-
-            &::before {
-              content: '';
-              width: 64rpx;
-              height: 12rpx;
-              background: linear-gradient(
-                90deg,
-                var(--ui-BG-Main-gradient),
-                var(--ui-BG-Main-light)
-              ) !important;
-              position: absolute;
-              left: -64rpx;
-              bottom: 0;
-              z-index: -1;
-              transition: all linear 0.2s;
-            }
-          }
-
-          &.menu-item-active {
-            background-color: #fff;
-            border-radius: 20rpx 0 0 20rpx;
-
-            &::before {
-              content: '';
-              position: absolute;
-              right: 0;
-              bottom: -20rpx;
-              width: 20rpx;
-              height: 20rpx;
-              background: radial-gradient(circle at 0 100%, transparent 20rpx, #fff 0);
-            }
-
-            &::after {
-              content: '';
-              position: absolute;
-              top: -20rpx;
-              right: 0;
-              width: 20rpx;
-              height: 20rpx;
-              background: radial-gradient(circle at 0% 0%, transparent 20rpx, #fff 0);
-            }
-
-            .menu-title {
-              font-weight: 600;
-
-              &::before {
-                left: 0;
-              }
-            }
-          }
-        }
-      }
-
-      .goods-list-box {
-        background-color: #fff;
-        width: calc(100vw - 100px);
-        padding: 10px;
-      }
-
-      .banner-img {
-        width: calc(100vw - 130px);
-        border-radius: 5px;
-        margin-bottom: 20rpx;
-      }
-    }
-  }
-</style>
+	.s-category {
+		:deep() {
+			.side-menu-wrap {
+				width: 200rpx;
+				height: 100%;
+				padding-left: 12rpx;
+				background-color: #f6f6f6;
+
+				.menu-item {
+					width: 100%;
+					height: 88rpx;
+					position: relative;
+					transition: all linear 0.2s;
+
+					.menu-title {
+						line-height: 32rpx;
+						font-size: 30rpx;
+						font-weight: 400;
+						color: #333;
+						margin-left: 28rpx;
+						position: relative;
+						z-index: 0;
+
+						&::before {
+							content: '';
+							width: 64rpx;
+							height: 12rpx;
+							background: linear-gradient(90deg,
+									var(--ui-BG-Main-gradient),
+									var(--ui-BG-Main-light)) !important;
+							position: absolute;
+							left: -64rpx;
+							bottom: 0;
+							z-index: -1;
+							transition: all linear 0.2s;
+						}
+					}
+
+					&.menu-item-active {
+						background-color: #fff;
+						border-radius: 20rpx 0 0 20rpx;
+
+						&::before {
+							content: '';
+							position: absolute;
+							right: 0;
+							bottom: -20rpx;
+							width: 20rpx;
+							height: 20rpx;
+							background: radial-gradient(circle at 0 100%, transparent 20rpx, #fff 0);
+						}
+
+						&::after {
+							content: '';
+							position: absolute;
+							top: -20rpx;
+							right: 0;
+							width: 20rpx;
+							height: 20rpx;
+							background: radial-gradient(circle at 0% 0%, transparent 20rpx, #fff 0);
+						}
+
+						.menu-title {
+							font-weight: 600;
+
+							&::before {
+								left: 0;
+							}
+						}
+					}
+				}
+			}
+
+			.goods-list-box {
+				background-color: #fff;
+				width: calc(100vw - 100px);
+				padding: 10px;
+			}
+
+			.banner-img {
+				width: calc(100vw - 130px);
+				border-radius: 5px;
+				margin-bottom: 20rpx;
+			}
+		}
+	}
+</style>

+ 70 - 56
pages/index/index.vue

@@ -1,70 +1,84 @@
 <template>
-  <view v-if="template">
-    <s-layout
-      title="首页"
-      navbar="custom"
-      tabbar="/pages/index/index"
-      :bgStyle="template.style?.background"
-      :navbarStyle="template.style?.navbar"
-      onShareAppMessage
-    >
-      <s-block v-for="(item, index) in template.data" :key="index" :styles="item.style">
-        <s-block-item :type="item.type" :data="item.data" :styles="item.style" />
-      </s-block>
-      <!-- 广告模块 -->
-      <s-popup-image />
-    </s-layout>
-  </view>
+	<view v-if="template">
+		<s-layout title="首页" navbar="custom" tabbar="/pages/index/index" :bgStyle="template.style?.background"
+			:navbarStyle="template.style?.navbar" onShareAppMessage>
+			<s-block v-for="(item, index) in template.data" :key="index" :styles="item.style">
+				<s-block-item :type="item.type" :data="item.data" :styles="item.style" />
+			</s-block>
+			<!-- 广告模块 -->
+			<s-popup-image />
+		</s-layout>
+	</view>
 </template>
 
 <script setup>
-  import { computed } from 'vue';
-  import { onLoad, onPageScroll, onPullDownRefresh } from '@dcloudio/uni-app';
-  import sheep from '@/sheep';
-  import $share from '@/sheep/platform/share';
+	import {
+		computed
+	} from 'vue';
+	import {
+		onLoad,
+		onPageScroll,
+		onPullDownRefresh
+	} from '@dcloudio/uni-app';
+	import sheep from '@/sheep';
+	import $share from '@/sheep/platform/share';
+	import index2Api from '@/sheep/api/index2';
+	// 隐藏原生tabBar
+	uni.hideTabBar();
 
-  // 隐藏原生tabBar
-  uni.hideTabBar();
+	const template = computed(() => sheep.$store('app').template?.home);
+	// 在此处拦截改变一下首页轮播图 此处先写死后期复活
+	(async function() {
+		let {
+			data
+		} = await index2Api.decorate();
+		template.value.data[0].data.list = JSON.parse(data[0].value).map(item => {
+			return {
+				src: item.picUrl,
+				url: item.url,
+				title: item.name,
+				type: "image"
+			}
+		})
+	}())
 
-  const template = computed(() => sheep.$store('app').template?.home);
+	onLoad((options) => {
+		// #ifdef MP
+		// 小程序识别二维码
+		if (options.scene) {
+			const sceneParams = decodeURIComponent(options.scene).split('=');
+			options[sceneParams[0]] = sceneParams[1];
+		}
+		// #endif
 
-  onLoad((options) => {
-    // #ifdef MP
-    // 小程序识别二维码
-    if (options.scene) {
-      const sceneParams = decodeURIComponent(options.scene).split('=');
-      options[sceneParams[0]] = sceneParams[1];
-    }
-    // #endif
+		// 预览模板
+		if (options.templateId) {
+			sheep.$store('app').init(options.templateId);
+		}
 
-    // 预览模板
-    if (options.templateId) {
-      sheep.$store('app').init(options.templateId);
-    }
+		// 解析分享信息
+		if (options.spm) {
+			$share.decryptSpm(options.spm);
+		}
 
-    // 解析分享信息
-    if (options.spm) {
-      $share.decryptSpm(options.spm);
-    }
+		// 进入指定页面(完整页面路径)
+		if (options.page) {
+			sheep.$router.go(decodeURIComponent(options.page));
+		}
 
-    // 进入指定页面(完整页面路径)
-    if (options.page) {
-      sheep.$router.go(decodeURIComponent(options.page));
-    }
+		// TODO 芋艿:测试接口的调用
+		sheep.$api.app.test();
+	});
 
-    // TODO 芋艿:测试接口的调用
-    sheep.$api.app.test();
-  });
+	// 下拉刷新
+	onPullDownRefresh(() => {
+		sheep.$store('app').init();
+		setTimeout(function() {
+			uni.stopPullDownRefresh();
+		}, 800);
+	});
 
-  // 下拉刷新
-  onPullDownRefresh(() => {
-    sheep.$store('app').init();
-    setTimeout(function () {
-      uni.stopPullDownRefresh();
-    }, 800);
-  });
-
-  onPageScroll(() => {});
+	onPageScroll(() => {});
 </script>
 
-<style></style>
+<style></style>

+ 8 - 7
sheep/api/cart.js

@@ -1,9 +1,10 @@
 import request from '@/sheep/request';
+import request2 from '@/sheep/request2';
 
 export default {
   list: (data) =>
-    request({
-      url: 'cart',
+    request2({
+      url: 'trade/cart/list',
       method: 'GET',
       custom: {
         showLoading: false,
@@ -25,14 +26,14 @@ export default {
     }),
   // 删除购物车
   delete: (ids) =>
-    request({
-      url: 'cart/' + ids,
+    request2({
+      url: 'trade/cart/delete?ids=' + ids,
       method: 'DELETE',
     }),
   update: (data) =>
-    request({
-      url: 'cart',
-      method: 'POST',
+    request2({
+      url: 'trade/cart/update-count',
+      method: 'PUT',
       data: {
         ...data,
         type: 'cover',

+ 3 - 3
sheep/api/category.js

@@ -1,9 +1,9 @@
-import request from '@/sheep/request';
+import request2 from '@/sheep/request2';
 
 export default {
   list: (params) =>
-    request({
-      url: 'category',
+    request2({
+      url: 'product/category/list',
       method: 'GET',
       params,
     }),

+ 12 - 2
sheep/api/goods.js

@@ -16,8 +16,8 @@ export default {
 
   // 商品列表
   list: (params) =>
-    request({
-      url: 'goods/goods',
+    request2({
+      url: 'product/spu/page',
       method: 'GET',
       params,
       custom: {
@@ -49,6 +49,16 @@ export default {
         showError: false,
       },
     }),
+  comment2: (id, params = {pageNo:1,pageSize:10,type:0}) =>
+    request2({
+      url: 'product/comment/page?spuId='+id,
+      method: 'GET',
+      params,
+      custom: {
+        showLoading: false,
+        showError: false,
+      },
+    }),
   // 商品评价类型
   getType: (id) =>
     request({

+ 9 - 0
sheep/api/index2.js

@@ -0,0 +1,9 @@
+import request2 from '@/sheep/request2';
+
+export default {
+  decorate: () =>
+    request2({
+      url: 'promotion/decorate/list?page=1',
+      method: 'GET',
+    }),
+};

+ 2 - 2
sheep/request2/index.js

@@ -68,7 +68,7 @@ const http = new Request({
  */
 http.interceptors.request.use(
   (config) => {
-	  console.log(config);
+	  // console.log(config);
     if (config.custom.auth && !$store('user').isLogin) {
       showAuthModal();
       return Promise.reject();
@@ -110,7 +110,7 @@ http.interceptors.response.use(
     }
 
     response.config.custom.showLoading && closeLoading();
-    if (response.data.error !== 0) {
+    if (response.data.code !== 0) {
       if (response.config.custom.showError)
         uni.showToast({
           title: response.data.msg || '服务器开小差啦,请稍后再试~',

+ 8 - 8
sheep/store/cart.js

@@ -15,7 +15,7 @@ const cart = defineStore({
       if (!state.selectedIds.length) return price.toFixed(2);
       state.list.forEach((item) => {
         price += state.selectedIds.includes(item.id)
-          ? Number(item.sku_price.price) * item.goods_num
+          ? Number(item.sku.price/100) * item.count
           : 0;
       });
       return price.toFixed(2);
@@ -24,9 +24,9 @@ const cart = defineStore({
   actions: {
     // 获取购物车列表
     async getList() {
-      const { data, error } = await cartApi.list();
-      if (error === 0) {
-        this.list = data;
+      const { data, code } = await cartApi.list();
+      if (code === 0) {
+        this.list = data.validList;
       }
     },
     // 添加购物车
@@ -44,8 +44,8 @@ const cart = defineStore({
     // 更新购物车
     async update(goodsInfo) {
       const { error } = await cartApi.update({
-        goods_id: goodsInfo.goods_id,
-        goods_num: goodsInfo.goods_num,
+        id: goodsInfo.goods_id,
+        count: goodsInfo.goods_num,
         goods_sku_price_id: goodsInfo.goods_sku_price_id,
       });
       if (error === 0) {
@@ -58,8 +58,8 @@ const cart = defineStore({
       if (typeof ids === 'array') {
         ids = ids.join(',');
       }
-      const { error } = await cartApi.delete(ids);
-      if (error === 0) {
+      const { code } = await cartApi.delete(ids);
+      if (code === 0) {
         this.selectAll(false);
         this.getList();
       }