Ver Fonte

no message

LAPTOP-2OQMQSSM\ASUS há 7 meses atrás
pai
commit
f594ee2b4a
4 ficheiros alterados com 2449 adições e 1870 exclusões
  1. 1138 1132
      pages-takeout/new-shop.vue
  2. 432 358
      pages-takeout/new-specs-info.vue
  3. 622 380
      pages/index/search-record.vue
  4. 257 0
      utils/cartStore.js

+ 1138 - 1132
pages-takeout/new-shop.vue

@@ -1,1139 +1,1145 @@
 <template>
-	<view class="shop-index iPhone-bottom flex-direction box-border-box">
-
-		<image v-show="!navBgType" class="bg-img" src="@/static/img/order-food/shop-top.png" mode="aspectFill"
-			:class="scrollTop > newNavHeight?'z-4':'z-3'"></image>
-		<image v-show="navBgType" class="bg-img-type z-4" src="@/static/img/order-food/shop-top.png" mode="aspectFill"
-			:style="{height:newNavHeight+'rpx',opacity:opacity}"></image>
-
-		<newNav :leftShow="false" :textType='false' class="z-4 mb-32" @navHeight='navHeight'>
-			<view slot="textContentSlot" class="align-items-center flex-justify-end">
-				<view class="ss-box b-rad-50 mr-24 align-items-center flex-justify-center z-4" @click.stop="goSearch">
-					<image class="shop-search" src="@/static/img/order-food/shop-search.png" mode=""></image>
-				</view>
-				<view class="dd-box align-items-center flex-justify-center b-rad-200 mr-24 z-4" @click="goToOrder">
-					<image class="shp-list-img mr-8" src="@/static/img/order-food/shp-list.png" mode=""></image>
-					<view class="fs-28 fc-f">
-						订单
-					</view>
-				</view>
-			</view>
-		</newNav>
-
-		<view class="bgc-f box-border-box plr-32 mb-32 shop-info">
-			<view class="shop-info-box bgc-f box-border-box p-24 z-3 b-rad-20">
-				<view class="fs-40 fw-600 text-overflow-ellipsis">
-					{{shopsInfo.shop_name}}
-				</view>
-				<view class="fs-24 fw-400 fc-9 text-overflow-ellipsis-one pt-15" v-if="shopsInfo.notice">
-					公告:{{shopsInfo.notice || '暂无公告'}}
-				</view>
-			</view>
-		</view>
-
-		<view class="b-b-eee bgc-f box-border-box p-0-32-12 align-items-center flex-justify-space z-3 shop-type-box">
-			<view class="align-items-center shop-type-list">
-				<view class="shop-item fs-36 mb-8 mr-64" @click="seletShopType(item)"
-					:class="shopType === item.id?'fc-3 fw-600':'fc-6'" v-for="(item,i) in shopTypeList" :key="i">
-					{{item.name}}
-				</view>
-				<view class="shop-item-bs bgc-FF3333" :style="{left:shopTypeBsLeft+'rpx'}"></view>
-			</view>
-			<view class="align-items-center">
-				<image class="zh-icon mr-8" src="@/static/img/order-food/zh-icon.png" mode="aspectFill"></image>
-				<view class="fw-600 fs-32 fc-3">
-					桌号:{{table_number}}
-				</view>
-			</view>
-		</view>
-
-		<!-- <view class="bgc-f sticky-nav" :style="{ height: navBgType?`calc(100vh - ${newNavHeight}rpx - ${48}rpx)`:'auto'}"> -->
-		<view class="bgc-F7F8FA">
-			<view class="menu-box box-border-box align-items-flex-start" v-if="shopType === 1">
-
-				<view class="menu-box-left" :style="{top: newNavHeight + 'rpx'}">
-					<view class="menu-box-left-box pb-130 box-border-box"
-						:style="{height: menuLeftType?`calc(100vh - ${newNavHeight}rpx - ${68}rpx)`:''}">
-						<view class="menu-type-list fs-26 box-border-box align-items-center flex-justify-center"
-							v-for="(item,i) in categoryList" :key="i" @click="selectType(item)"
-							:class="type ===  item.category_id?'bgc-f fc-3 fw-600':'fc-6 fw-400'"
-							:id="'left-scroll'+ item.category_id">
-							{{item.name}}
-							<view class="menu-type-num fc-f" v-show="item.num > 0">{{item.num > 99?'99+':item.num}}
-							</view>
-						</view>
-					</view>
-				</view>
-
-				<view class="menu-box-only bgc-f pb-130 box-border-box">
-					<view class="" v-for="(item,i) in goodsList" :key="i" :id="'scroll'+ item.type">
-						<view class="fs-28 fw-600 fc-3 sticky-nav bgc-f p-20 box-border-box"
-							:style="{top: newNavHeight + 'rpx'}">
-							{{item.name}}
-						</view>
-						<view class="menu-list flex-justify-space box-border-box" v-for="(info,k) in item.list" :key="k"
-							:id="'goods_id'+ info.goods_id">
-							<image class="flex-shrink0 goods_img" :src="info.goods_image" mode="scaleToFill"></image>
-							<view class="menu-list-right flex-direction flex-justify-space">
-								<view class="mb-8">
-									<view class="mb-4 goods-name text-overflow-ellipsis fs-32 fw-600">
-										{{info.goods_name}}
-									</view>
-									<view class="text-overflow-ellipsis-one fw-400 fc-9 fs-24 mb-2 goods-name"
-										v-if="info.spec_type == 1">
-										{{info.goods_desc?info.goods_desc:''}}
-									</view>
-								</view>
-								<view class="flex-justify-space align-items-flex-end">
-									<view class="">
-										<span class="fs-24 fw-400 fc-FB3D03">¥</span>
-										<span
-											class="fs-40 fw-b fc-FB3D03">{{info.seckill_money>0?info.seckill_money:info.price}}</span>
-									</view>
-									<view class="display-flex align-items-center" v-if="info.spec_type == 1">
-										<image v-show="info.num > 0" class="wh-44" @click="addred(1,info)"
-											src="@/static/img/order-food/reduce-img.png" mode=""></image>
-										<view v-show="info.num > 0"
-											class="right-only-right-2 text-align-center fs-28 fw-400">{{info.num}}
-										</view>
-										<image class="wh-44" src="@/static/img/order-food/add-img.png"
-											@click="addred(2,info)" mode=""></image>
-									</view>
-									<view v-else class="right-only-right text-align-center b-rad-200"
-										@click="addred(3,info)">
-										<view class="fw-600 fs-28 fc-f">
-											选规格
-										</view>
-										<view class="selectedNum" v-if="info.num>0">
-											{{info.num}}
-										</view>
-									</view>
-								</view>
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-
-			<ShopInfo style="height: 100%;" v-else-if="shopType === 2"></ShopInfo>
-
-		</view>
-
-		<view v-if="shopType === 1" class="shop-buttom-money box-border-box" @click="openBuyCrad()">
-			<view
-				class="shop-buttom-money-1 bgc-f flex-justify-space align-items-center pl-24 box-border-box pr-8 b-rad-200">
-				<view class="align-items-center">
-					<image class="gwc-img mr-36" src="@/static/img/order-food/gwc-img.png" mode="scaleToFill"></image>
-					<view class="shop-buttom-num bgc-FE6B2C fs-24 fc-f text-align-center">{{cartData.total_num}}</view>
-					<view class="align-items-baseline">
-						<view class="fw-600 fs-28 fc-3 mr-4">¥</view>
-						<view class="fw-600 fs-48 fc-3">{{cartData.total_price}}</view>
-					</view>
-				</view>
-
-				<view class="shop-buttom-money-2 text-align-center fc-f fs-32 fw-600 b-rad-200"
-					:class="cartData.total_num>0?'':'opacity-4'" @click.stop="toConfirmOrder()">去结算
-				</view>
-			</view>
-		</view>
-
-		<uni-popup ref="popupBuy" type="bottom" background-color="transparent" borderRadius='20px 20rpx 0 0'>
-			<view class="buy-card flex-index-css">
-				<view class="buy-card-top box-border-box plr-32 flex-justify-space align-items-center b-rad-20-20-0-0">
-					<view class="">
-						<span class="fs-32 fc-3 mr-12">已选商品</span>
-					</view>
-					<view class="fs-28 fw-400 fc-9 align-items-center" @click.stop="setShopIngDel">
-						<view class="">
-							<uni-icons type="trash" size="18" color="#999"></uni-icons>
-						</view>
-						<view class="fs-28 fw-400 fc-9">清空</view>
-					</view>
-				</view>
-				<view class="scroll-view-css bgc-ECECEC box-border-box car-scroll-box">
-					<view class="buy-card-item bgc-f b-rad-20 display-flex p-20 box-border-box"
-						v-for="(goods,i) in cartData.goods_list" :key="i">
-						<image class="goods_img" :src="goods.goods_image" mode="scaleToFill"></image>
-						<view class="flex-1 flex-direction flex-justify-space">
-							<view class="">
-								<view class="w-514 text-overflow-ellipsis-one fs-34 fw-600 mb-8">
-									{{goods.goods_name}}
-								</view>
-								<view class="fc-6">
-									{{goods.goods_attr}}
-								</view>
-							</view>
-							<view class="flex-justify-space">
-								<view class="">
-									<span class="fs-24 fc-FB3D03 fw-400">¥</span>
-									<span class="fs-40 fc-FB3D03 fw-b">{{goods.price}}</span>
-								</view>
-								<view class="display-flex align-items-center">
-									<image class="wh-44" @click.stop="setShoppingSave(goods,2)"
-										src="@/static/img/order-food/reduce-img.png" mode="">
-									</image>
-									<view class="right-only-right-2 text-align-center fs-28 fw-400">
-										{{goods.goods_number}}
-									</view>
-									<image class="wh-44" src="/static/img/order-food/add-img.png"
-										@click.stop="setShoppingSave(goods,1)" mode=""></image>
-								</view>
-							</view>
-						</view>
-					</view>
-					<en-blank navBackgroundColor='#ECECEC' v-if="cartData.goods_list.length<=0"
-						message="快去选购商品吧!~"></en-blank>
-				</view>
-				<view class="pop-shop-buttom-money box-border-box" @click="openBuyCrad()">
-					<view
-						class="shop-buttom-money-1 bgc-f flex-justify-space align-items-center pl-24 box-border-box pr-8 b-rad-200">
-						<view class="align-items-center">
-							<image class="gwc-img mr-36" src="@/static/img/order-food/gwc-img.png" mode="scaleToFill">
-							</image>
-							<view class="shop-buttom-num bgc-FE6B2C fs-24 fc-f text-align-center">{{cartData.total_num}}
-							</view>
-							<view class="align-items-baseline">
-								<view class="fw-600 fs-28 fc-3 mr-4">¥</view>
-								<view class="fw-600 fs-48 fc-3">{{cartData.total_price}}</view>
-							</view>
-						</view>
-
-						<view class="shop-buttom-money-2 text-align-center fc-f fs-32 fw-600 b-rad-200"
-							:class="cartData.total_num>0?'':'opacity-4'" @click.stop="toConfirmOrder()">去结算
-						</view>
-					</view>
-				</view>
-			</view>
-		</uni-popup>
-	</view>
+  <view class="shop-index iPhone-bottom flex-direction box-border-box">
+
+    <image v-show="!navBgType" class="bg-img" src="@/static/img/order-food/shop-top.png" mode="aspectFill"
+      :class="scrollTop > newNavHeight?'z-4':'z-3'"></image>
+    <image v-show="navBgType" class="bg-img-type z-4" src="@/static/img/order-food/shop-top.png" mode="aspectFill"
+      :style="{height:newNavHeight+'rpx',opacity:opacity}"></image>
+
+    <newNav :leftShow="false" :textType='false' class="z-4 mb-32" @navHeight='navHeight'>
+      <view slot="textContentSlot" class="align-items-center flex-justify-end">
+        <view class="ss-box b-rad-50 mr-24 align-items-center flex-justify-center z-4" @click.stop="goSearch">
+          <image class="shop-search" src="@/static/img/order-food/shop-search.png" mode=""></image>
+        </view>
+        <view class="dd-box align-items-center flex-justify-center b-rad-200 mr-24 z-4" @click="goToOrder">
+          <image class="shp-list-img mr-8" src="@/static/img/order-food/shp-list.png" mode=""></image>
+          <view class="fs-28 fc-f">
+            订单
+          </view>
+        </view>
+      </view>
+    </newNav>
+
+    <view class="bgc-f box-border-box plr-32 mb-32 shop-info">
+      <view class="shop-info-box bgc-f box-border-box p-24 z-3 b-rad-20">
+        <view class="fs-40 fw-600 text-overflow-ellipsis">
+          {{shopsInfo.shop_name}}
+        </view>
+        <view class="fs-24 fw-400 fc-9 text-overflow-ellipsis-one pt-15" v-if="shopsInfo.notice">
+          公告:{{shopsInfo.notice || '暂无公告'}}
+        </view>
+      </view>
+    </view>
+
+    <view class="b-b-eee bgc-f box-border-box p-0-32-12 align-items-center flex-justify-space z-3 shop-type-box">
+      <view class="align-items-center shop-type-list">
+        <view class="shop-item fs-36 mb-8 mr-64" @click="seletShopType(item)"
+          :class="shopType === item.id?'fc-3 fw-600':'fc-6'" v-for="(item,i) in shopTypeList" :key="i">
+          {{item.name}}
+        </view>
+        <view class="shop-item-bs bgc-FF3333" :style="{left:shopTypeBsLeft+'rpx'}"></view>
+      </view>
+      <view class="align-items-center">
+        <image class="zh-icon mr-8" src="@/static/img/order-food/zh-icon.png" mode="aspectFill"></image>
+        <view class="fw-600 fs-32 fc-3">
+          桌号:{{table_number}}
+        </view>
+      </view>
+    </view>
+
+    <!-- <view class="bgc-f sticky-nav" :style="{ height: navBgType?`calc(100vh - ${newNavHeight}rpx - ${48}rpx)`:'auto'}"> -->
+    <view class="bgc-F7F8FA">
+      <view class="menu-box box-border-box align-items-flex-start" v-if="shopType === 1">
+
+        <view class="menu-box-left" :style="{top: newNavHeight + 'rpx'}">
+          <view class="menu-box-left-box pb-130 box-border-box"
+            :style="{height: menuLeftType?`calc(100vh - ${newNavHeight}rpx - ${68}rpx)`:''}">
+            <view class="menu-type-list fs-26 box-border-box align-items-center flex-justify-center"
+              v-for="(item,i) in categoryList" :key="i" @click="selectType(item)"
+              :class="type ===  item.category_id?'bgc-f fc-3 fw-600':'fc-6 fw-400'"
+              :id="'left-scroll'+ item.category_id">
+              {{item.name}}
+              <view class="menu-type-num fc-f" v-show="item.num > 0">{{item.num > 99?'99+':item.num}}
+              </view>
+            </view>
+          </view>
+        </view>
+
+        <view class="menu-box-only bgc-f pb-130 box-border-box">
+          <view class="" v-for="(item,i) in goodsList" :key="i" :id="'scroll'+ item.type">
+            <view class="fs-28 fw-600 fc-3 sticky-nav bgc-f p-20 box-border-box" :style="{top: newNavHeight + 'rpx'}">
+              {{item.name}}
+            </view>
+            <view class="menu-list flex-justify-space box-border-box" v-for="(info,k) in item.list" :key="k"
+              :id="'goods_id'+ info.goods_id">
+              <image class="flex-shrink0 goods_img" :src="info.goods_image" mode="scaleToFill"></image>
+              <view class="menu-list-right flex-direction flex-justify-space">
+                <view class="mb-8">
+                  <view class="mb-4 goods-name text-overflow-ellipsis fs-32 fw-600">
+                    {{info.goods_name}}
+                  </view>
+                  <view class="text-overflow-ellipsis-one fw-400 fc-9 fs-24 mb-2 goods-name" v-if="info.spec_type == 1">
+                    {{info.goods_desc?info.goods_desc:''}}
+                  </view>
+                </view>
+                <view class="flex-justify-space align-items-flex-end">
+                  <view class="">
+                    <span class="fs-24 fw-400 fc-FB3D03">¥</span>
+                    <span class="fs-40 fw-b fc-FB3D03">{{info.seckill_money>0?info.seckill_money:info.price}}</span>
+                  </view>
+                  <view class="display-flex align-items-center" v-if="info.spec_type == 1">
+                    <image v-show="info.num > 0" class="wh-44" @click="addred(1,info)"
+                      src="@/static/img/order-food/reduce-img.png" mode=""></image>
+                    <view v-show="info.num > 0" class="right-only-right-2 text-align-center fs-28 fw-400">{{info.num}}
+                    </view>
+                    <image class="wh-44" src="@/static/img/order-food/add-img.png" @click="addred(2,info)" mode="">
+                    </image>
+                  </view>
+                  <view v-else class="right-only-right text-align-center b-rad-200" @click="addred(3,info)">
+                    <view class="fw-600 fs-28 fc-f">
+                      选规格
+                    </view>
+                    <view class="selectedNum" v-if="info.num>0">
+                      {{info.num}}
+                    </view>
+                  </view>
+                </view>
+              </view>
+            </view>
+          </view>
+        </view>
+      </view>
+
+      <ShopInfo style="height: 100%;" v-else-if="shopType === 2"></ShopInfo>
+
+    </view>
+
+    <view v-if="shopType === 1" class="shop-buttom-money box-border-box" @click="openBuyCrad()">
+      <view class="shop-buttom-money-1 bgc-f flex-justify-space align-items-center pl-24 box-border-box pr-8 b-rad-200">
+        <view class="align-items-center">
+          <image class="gwc-img mr-36" src="@/static/img/order-food/gwc-img.png" mode="scaleToFill"></image>
+          <view class="shop-buttom-num bgc-FE6B2C fs-24 fc-f text-align-center">{{cartData.total_num}}</view>
+          <view class="align-items-baseline">
+            <view class="fw-600 fs-28 fc-3 mr-4">¥</view>
+            <view class="fw-600 fs-48 fc-3">{{cartData.total_price}}</view>
+          </view>
+        </view>
+
+        <view class="shop-buttom-money-2 text-align-center fc-f fs-32 fw-600 b-rad-200"
+          :class="cartData.total_num>0?'':'opacity-4'" @click.stop="toConfirmOrder()">去结算
+        </view>
+      </view>
+    </view>
+
+    <uni-popup ref="popupBuy" type="bottom" background-color="transparent" borderRadius='20px 20rpx 0 0'>
+      <view class="buy-card flex-index-css">
+        <view class="buy-card-top box-border-box plr-32 flex-justify-space align-items-center b-rad-20-20-0-0">
+          <view class="">
+            <span class="fs-32 fc-3 mr-12">已选商品</span>
+          </view>
+          <view class="fs-28 fw-400 fc-9 align-items-center" @click.stop="setShopIngDel">
+            <view class="">
+              <uni-icons type="trash" size="18" color="#999"></uni-icons>
+            </view>
+            <view class="fs-28 fw-400 fc-9">清空</view>
+          </view>
+        </view>
+        <view class="scroll-view-css bgc-ECECEC box-border-box car-scroll-box">
+          <view class="buy-card-item bgc-f b-rad-20 display-flex p-20 box-border-box"
+            v-for="(goods,i) in cartData.goods_list" :key="i">
+            <image class="goods_img" :src="goods.goods_image" mode="scaleToFill"></image>
+            <view class="flex-1 flex-direction flex-justify-space">
+              <view class="">
+                <view class="w-514 text-overflow-ellipsis-one fs-34 fw-600 mb-8">
+                  {{goods.goods_name}}
+                </view>
+                <view class="fc-6">
+                  {{goods.goods_attr}}
+                </view>
+              </view>
+              <view class="flex-justify-space">
+                <view class="">
+                  <span class="fs-24 fc-FB3D03 fw-400">¥</span>
+                  <span class="fs-40 fc-FB3D03 fw-b">{{goods.price}}</span>
+                </view>
+                <view class="display-flex align-items-center">
+                  <image class="wh-44" @click.stop="setShoppingSave(goods,2)"
+                    src="@/static/img/order-food/reduce-img.png" mode="">
+                  </image>
+                  <view class="right-only-right-2 text-align-center fs-28 fw-400">
+                    {{goods.goods_number}}
+                  </view>
+                  <image class="wh-44" src="/static/img/order-food/add-img.png" @click.stop="setShoppingSave(goods,1)"
+                    mode=""></image>
+                </view>
+              </view>
+            </view>
+          </view>
+          <en-blank navBackgroundColor='#ECECEC' v-if="cartData.goods_list.length<=0" message="快去选购商品吧!~"></en-blank>
+        </view>
+        <view class="pop-shop-buttom-money box-border-box" @click="openBuyCrad()">
+          <view
+            class="shop-buttom-money-1 bgc-f flex-justify-space align-items-center pl-24 box-border-box pr-8 b-rad-200">
+            <view class="align-items-center">
+              <image class="gwc-img mr-36" src="@/static/img/order-food/gwc-img.png" mode="scaleToFill">
+              </image>
+              <view class="shop-buttom-num bgc-FE6B2C fs-24 fc-f text-align-center">{{cartData.total_num}}
+              </view>
+              <view class="align-items-baseline">
+                <view class="fw-600 fs-28 fc-3 mr-4">¥</view>
+                <view class="fw-600 fs-48 fc-3">{{cartData.total_price}}</view>
+              </view>
+            </view>
+
+            <view class="shop-buttom-money-2 text-align-center fc-f fs-32 fw-600 b-rad-200"
+              :class="cartData.total_num>0?'':'opacity-4'" @click.stop="toConfirmOrder()">去结算
+            </view>
+          </view>
+        </view>
+      </view>
+    </uni-popup>
+  </view>
 </template>
 
 <script>
-	import newMenu from './shop-mod/new-menu.vue';
-	import ShopInfo from './shop-mod/info.vue';
-	import tools from "@/service/tools";
-	import EnBlank from "@/components/en-utils/en-blank/en-blank";
-	import {
-		getGoodsCategory,
-		getGoodsGoods
-	} from '@/api/goods.js'
-	import {
-		receiveCoupon
-	} from "@/api/coupon.js"
-	import {
-		shopInfo
-	} from "@/api/shop.js"
-	import {
-		getDeliveryMoney
-	} from "@/api/common";
-	import {
-		getShopIngList,
-		setShopIngDel,
-		shoppingSave
-	} from "@/api/shopping";
-	export default {
-		components: {
-			newMenu,
-			ShopInfo,
-			EnBlank
-		},
-		data() {
-			return {
-				domHeigjt: 0,
-				shopTypeList: [{
-					name: "点单",
-					id: 1
-				}, {
-					name: "商家",
-					id: 2
-				}],
-				table_number: '',
-				shopType: 1, //组件类型
-				shopTypeBsLeft: 12,
-				shop_id: '',
-				operate_id: '',
-				shopsInfo: {},
-				cartData: {
-					total_price: 0,
-					total_num: 0,
-					total_goods_money: 0,
-					pack_price: 0,
-					must_category: 0,
-					is_place_order: 0,
-					err_msg: 0,
-					goods_list: [],
-				},
-				isAjax: false,
-				newNavHeight: '',
-				navBgType: false,
-				menuLeftType: false,
-				scrollTop: 0,
-				opacity: 0,
-				heightOne: '',
-				heightTwo: '',
-				topHeight: '',
-				idMark: '', //滚动自适应参数
-				idMarkTwo: '', //滚动自适应参数
-				type: '', //默认分类标识
-				categoryList: [],
-				goodsList: []
-			}
-		},
-		onShow() {
-			this.getShopIngList()
-		},
-		onLoad(e) {
-			this.getshopInfo()
-		},
-		mounted() {},
-		onReachBottom(e) {},
-		// 监听页面滚动
-		onPageScroll(e) {
-			// e.scrollTop 获取滚动条距离页面顶部的距离
-			this.scrollTop = e.scrollTop
-			this.opacity = (Number(this.scrollTop) - 30)
-			// 可以根据滚动位置执行相应逻辑
-			if (e.scrollTop > 25) {
-				this.navBgType = true
-			} else {
-				this.navBgType = false
-			}
-			if (e.scrollTop > (Number(this.newNavHeight) - 4)) {
-				this.menuLeftType = true
-			} else {
-				this.menuLeftType = false
-			}
-		},
-		methods: {
-			shopInfo() {
-				// 获取商家详情
-				shopInfo().then((res) => {
-					if (res.code === 1) {
-						this.shopsInfo = res.data
-					}
-				})
-			},
-			getGoodsCategory() {
-				//获取商家分类
-				getGoodsCategory().then((res) => {
-					if (res.code === 1) {
-						this.categoryList = res.data
-						this.type = res.data[0].category_id
-					}
-				})
-			},
-			getGoodsGoods() {
-				//获取商家商品列表
-				getGoodsGoods().then((res) => {
-					if (res.code === 1) {
-						// 初始化商品列表
-						this.goodsList = res.data
-						// 从购物车数据中回显每个商品的数量
-						this.updateGoodsNumFromCart()
-					}
-				})
-			},
-			getShopIngList() {
-				// 获取购物车列表
-				getShopIngList().then(res => {
-					if (res.code === 1) {
-						this.cartData = res.data
-						// 同步更新商品列表中的数量
-						this.updateGoodsNumFromCart()
-					}
-				})
-			},
-			getshopInfo() {
-				this.table_number = uni.getStorageSync('table_number')
-				this.shopInfo()
-				this.getGoodsCategory()
-				this.getGoodsGoods()
-			},
-			updateGoodsNumFromCart() {
-				// 从购物车数据同步商品数量
-				if (!this.goodsList || !this.cartData.goods_list) {
-					return
-				}
-
-				// 创建购物车商品的映射,按goods_id分组,累加数量
-				  const cartGoodsMap = {}
-				  this.cartData.goods_list.forEach(cartItem => {
-				    const goodsId = cartItem.goods_id
-				    if (!cartGoodsMap[goodsId]) {
-				      cartGoodsMap[goodsId] = 0
-				    }
-				    // 累加同一个商品不同规格的数量
-				    cartGoodsMap[goodsId] += cartItem.goods_number || 0
-				  })
-				  
-				  // 更新商品列表中的数量
-				  this.goodsList.forEach(category => {
-				    if (category.list && category.list.length > 0) {
-				      category.list.forEach(goods => {
-				        // 从购物车映射中获取该商品的总数量
-				        goods.num = cartGoodsMap[goods.goods_id] || 0
-				      })
-				    }
-				  })
-
-				// 更新分类列表中的商品数量
-				this.updateCategoryNum()
-			},
-			updateCategoryNum() {
-				// 更新分类的商品总数
-				if (!this.categoryList || !this.goodsList) {
-					return
-				}
-
-				this.categoryList.forEach(categoryItem => {
-					// 找到对应的商品分类
-					const goodsCategory = this.goodsList.find(
-						category => category.type === categoryItem.category_id
-					)
-
-					if (goodsCategory && goodsCategory.list) {
-						// 计算该分类下所有商品的总数量
-						const totalNum = goodsCategory.list.reduce((sum, goods) => {
-							return sum + (goods.num || 0)
-						}, 0)
-						categoryItem.num = totalNum
-					} else {
-						categoryItem.num = 0
-					}
-				})
-			},
-			goToOrder() {
-				uni.navigateTo({
-					url: 'pages/order/index'
-				})
-			},
-			goSearch() {
-				uni.navigateTo({
-					url: 'pages/index/search-record'
-				})
-			},
-			selectType(item, itemTwo) {
-				if (this.type != item.category_id) {
-					this.type = item.category_id;
-					this.idMark = 'scroll' + item.category_id
-
-					// 立即更新
-					this.$forceUpdate();
-
-					// 延迟执行滚动
-					setTimeout(() => {
-						this.scrollToCategorySimple(item.category_id);
-					}, 100);
-				}
-			},
-
-			// 滚动方法
-			scrollToCategorySimple(type) {
-				const query = uni.createSelectorQuery();
-				const selector = `#scroll${type}`;
-				uni.pageScrollTo({
-					selector: selector,
-					duration: 300,
-				});
-				return
-				let targetScrollTop = 0
-				query.select('.shop-info').boundingClientRect(rect => {
-					console.log('商家详情', rect);
-					targetScrollTop += rect.height
-				})
-				query.select('.shop-type-box').boundingClientRect(rect => {
-					console.log('详情切换', rect);
-					targetScrollTop += rect.height + this.newNavHeight
-					console.log('固定上部分位置', targetScrollTop);
-				})
-				query.select(selector).boundingClientRect(rect => {
-					console.log('id找到元素,top:', rect);
-					uni.pageScrollTo({
-						scrollTop: targetScrollTop,
-						duration: 300,
-						success: () => {
-							console.log('滚动完成');
-						}
-					});
-				}).exec();
-			},
-			addred(type, item) {
-				if (this.isAjax) {
-					return
-				}
-				this.isAjax = true
-				if (type === 1) {
-					// 减
-					--item.num;
-					if (item.num >= 0) {
-						this.shoppingSave(item, item.num)
-					} else {
-						this.isAjax = false
-					}
-				} else if (type === 2) {
-					// 加
-					++item.num;
-					this.shoppingSave(item, item.num)
-				} else if (type === 3) {
-					// 选规格
-					this.isAjax = false
-					uni.navigateTo({
-						url: `pages-takeout/new-specs-info?goods_id=${item.goods_id}&category_id=${item.category_id}`
-					})
-				}
-			},
-			shoppingSave(item, num) {
-				shoppingSave({
-					goods_id: item.goods_id,
-					category_id: item.category_id,
-					goods_spec_id: item.goods_spec_id,
-					number: num
-				}).then((res) => {
-					if (res.code === 1) {
-						tools.success(res.msg)
-						this.isAjax = false
-						// 直接更新当前商品的数量(即时反馈)
-						const goods = this.findGoodsInList(item.goods_id)
-						if (goods) {
-							goods.num = num
-						}
-						this.getShopIngList()
-					} else {
-						this.isAjax = false
-						tools.error(res.msg)
-					}
-				})
-			},
-			findGoodsInList(goodsId) {
-				// 在商品列表中查找指定商品
-				for (let category of this.goodsList) {
-					if (category.list) {
-						const goods = category.list.find(item => item.goods_id === goodsId)
-						if (goods) {
-							return goods
-						}
-					}
-				}
-				return null
-			},
-			navHeight(e) {
-				this.newNavHeight = e
-			},
-			mustBut() {
-				// 未点必选品
-				const item = {
-					type: this.cartData.must_category
-				}
-				this.$refs.goodsMenu.selectType(item)
-			},
-			setShopIngDel() {
-				uni.showModal({
-					title: '提示',
-					content: '是否清除购物车商品?',
-					success: (res) => {
-						console.log(res)
-						if (res.confirm) {
-							setShopIngDel().then((res) => {
-								if (res.code === 1) {
-									tools.success(res.msg)
-									this.getShopIngList()
-									this.$refs.popupBuy.close()
-								} else {
-									tools.error(res.msg)
-								}
-							})
-						}
-					}
-				});
-			},
-			setShoppingSave(item, type) {
-				if (type === 1) {
-					// 加
-					item.goods_number = item.goods_number + 1
-				} else {
-					// 减
-					item.goods_number = item.goods_number - 1
-				}
-				this.shoppingSave(item, item.goods_number)
-			},
-			setCartData(cartData) {
-				this.cartData = cartData
-				this.getDeliveryMoney()
-			},
-			getDeliveryMoney() {
-				getDeliveryMoney({
-					'school_id': this.operate_id,
-					'shop_id': this.shop_id,
-				}).then(res => {
-					if (res.code === 1) {
-						this.delivery_money = res.data.delivery_money * 1
-					}
-				})
-			},
-			toBack() {
-				tools.leftClick()
-			},
-			getDomH(num) {
-				this.$nextTick(() => {
-					let info = uni.createSelectorQuery().select('#shopInfoBox');
-					info.boundingClientRect((data) => {
-						if (num === 1) {
-							this.domHeigjt = data.height + 72
-						} else {
-							this.domHeigjt = data.height + 72 + 48
-						}
-					}).exec()
-				})
-				// setTimeout(() => {
-
-				// }, 500)
-			},
-			seletShopType(item) {
-				if (this.shopType != item.id) {
-					this.shopType = item.id;
-					if (this.shopType == 1) {
-						this.shopTypeBsLeft = 12
-					} else if (this.shopType == 2) {
-						this.shopTypeBsLeft = 150
-					} else {
-						this.shopTypeBsLeft = 160 * 2
-					}
-				}
-			},
-			openBuyCrad() {
-				this.$refs.popupBuy.open()
-			},
-			createOrder() {
-				this.$refs.popupBuy.close()
-			},
-			openCoupon() {
-				this.$refs.popupCoupon.open()
-			},
-			closeCoupon() {
-				this.$refs.popupCoupon.close()
-			},
-			toConfirmOrder() {
-				uni.navigateTo({
-					url: '/pages-takeout/goods-order?shop_id=' + this.shop_id
-				})
-			},
-			shopInfo() {
-				const operate_id = uni.getStorageSync('operate_id')
-				shopInfo({
-					operate_id: operate_id,
-					shop_id: this.shop_id
-				}).then((res) => {
-					if (res.code == 1) {
-						this.shopsInfo = res.data
-					} else {
-						tools.error(res.msg)
-						setTimeout(() => {
-							uni.navigateBack({
-								delta: 1
-							})
-						}, 1500)
-					}
-				})
-			}
-		},
-	}
+  import newMenu from './shop-mod/new-menu.vue';
+  import ShopInfo from './shop-mod/info.vue';
+  import tools from "@/service/tools";
+  import EnBlank from "@/components/en-utils/en-blank/en-blank";
+  import cartStore from '@/utils/cartStore.js';
+  import {
+    getGoodsCategory,
+    getGoodsGoods
+  } from '@/api/goods.js'
+  import {
+    receiveCoupon
+  } from "@/api/coupon.js"
+  import {
+    shopInfo
+  } from "@/api/shop.js"
+  import {
+    getDeliveryMoney
+  } from "@/api/common";
+  import {
+    getShopIngList,
+    setShopIngDel,
+    shoppingSave
+  } from "@/api/shopping";
+  export default {
+    components: {
+      newMenu,
+      ShopInfo,
+      EnBlank
+    },
+    data() {
+      return {
+        domHeigjt: 0,
+        shopTypeList: [{
+          name: "点单",
+          id: 1
+        }, {
+          name: "商家",
+          id: 2
+        }],
+        table_number: '',
+        shopType: 1, //组件类型
+        shopTypeBsLeft: 12,
+        shop_id: '',
+        operate_id: '',
+        shopsInfo: {},
+        cartData: {
+          total_price: 0,
+          total_num: 0,
+          total_goods_money: 0,
+          pack_price: 0,
+          must_category: 0,
+          is_place_order: 0,
+          err_msg: 0,
+          goods_list: [],
+        },
+        isAjax: false,
+        newNavHeight: '',
+        navBgType: false,
+        menuLeftType: false,
+        scrollTop: 0,
+        opacity: 0,
+        heightOne: '',
+        heightTwo: '',
+        topHeight: '',
+        idMark: '', //滚动自适应参数
+        idMarkTwo: '', //滚动自适应参数
+        type: '', //默认分类标识
+        categoryList: [],
+        goodsList: [],
+        cartData: {
+          total_price: 0,
+          total_num: 0,
+          goods_list: [],
+        }
+      }
+    },
+    onShow() {
+      this.getShopIngList();
+    },
+    onLoad(e) {
+      cartStore.setShopId();
+      this.getshopInfo();
+    },
+    mounted() {},
+    onReachBottom(e) {},
+    // 监听页面滚动
+    onPageScroll(e) {
+      // e.scrollTop 获取滚动条距离页面顶部的距离
+      this.scrollTop = e.scrollTop
+      this.opacity = (Number(this.scrollTop) - 30)
+      // 可以根据滚动位置执行相应逻辑
+      if (e.scrollTop > 25) {
+        this.navBgType = true
+      } else {
+        this.navBgType = false
+      }
+      if (e.scrollTop > (Number(this.newNavHeight) - 4)) {
+        this.menuLeftType = true
+      } else {
+        this.menuLeftType = false
+      }
+    },
+    methods: {
+      shopInfo() {
+        // 获取商家详情
+        shopInfo().then((res) => {
+          if (res.code === 1) {
+            this.shopsInfo = res.data
+          }
+        })
+      },
+      getGoodsCategory() {
+        //获取商家分类
+        getGoodsCategory().then((res) => {
+          if (res.code === 1) {
+            this.categoryList = res.data
+            this.type = res.data[0].category_id
+          }
+        })
+      },
+      getGoodsGoods() {
+        //获取商家商品列表
+        getGoodsGoods().then((res) => {
+          if (res.code === 1) {
+            // 初始化商品列表
+            this.goodsList = res.data
+            // 从购物车数据中回显每个商品的数量
+            this.updateGoodsNumFromCart()
+          }
+        })
+      },
+      getShopIngList() {
+        // 获取购物车列表
+        const shopCart = cartStore.getShopCart(this.shop_id);
+        if (shopCart) {
+          this.cartData = {
+            ...this.cartData,
+            total_price: shopCart.total_price,
+            total_num: shopCart.total_num,
+            goods_list: shopCart.goods_list
+          };
+          // 同步更新商品列表中的数量
+          this.updateGoodsNumFromCart();
+        }
+      },
+      getshopInfo() {
+        this.table_number = uni.getStorageSync('table_number')
+        this.shopInfo()
+        this.getGoodsCategory()
+        this.getGoodsGoods()
+      },
+      updateGoodsNumFromCart() {
+        // 从购物车数据同步商品数量
+        if (!this.goodsList) return;
+
+        const shopCart = cartStore.getShopCart(this.shop_id);
+        if (!shopCart) return;
+
+        // 创建商品数量映射
+        const goodsQuantityMap = {};
+        shopCart.goods_list.forEach(item => {
+          if (!goodsQuantityMap[item.goods_id]) {
+            goodsQuantityMap[item.goods_id] = 0;
+          }
+          goodsQuantityMap[item.goods_id] += item.goods_number;
+        });
+
+        // 更新商品列表数量
+        this.goodsList.forEach(category => {
+          if (category.list && category.list.length > 0) {
+            category.list.forEach(goods => {
+              goods.num = goodsQuantityMap[goods.goods_id] || 0;
+            });
+          }
+        });
+
+        // 更新分类列表中的商品数量
+        this.updateCategoryNum()
+      },
+      updateCategoryNum() {
+        // 更新分类的商品总数
+        if (!this.categoryList || !this.goodsList) {
+          return
+        }
+
+        this.categoryList.forEach(categoryItem => {
+          // 找到对应的商品分类
+          const goodsCategory = this.goodsList.find(
+            category => category.type === categoryItem.category_id
+          )
+
+          if (goodsCategory && goodsCategory.list) {
+            // 计算该分类下所有商品的总数量
+            const totalNum = goodsCategory.list.reduce((sum, goods) => {
+              return sum + (goods.num || 0)
+            }, 0)
+            categoryItem.num = totalNum
+          } else {
+            categoryItem.num = 0
+          }
+        })
+      },
+      goToOrder() {
+        uni.navigateTo({
+          url: 'pages/order/index'
+        })
+      },
+      goSearch() {
+        uni.navigateTo({
+          url: 'pages/index/search-record'
+        })
+      },
+      selectType(item, itemTwo) {
+        if (this.type != item.category_id) {
+          this.type = item.category_id;
+          this.idMark = 'scroll' + item.category_id
+
+          // 立即更新
+          this.$forceUpdate();
+
+          // 延迟执行滚动
+          setTimeout(() => {
+            this.scrollToCategorySimple(item.category_id);
+          }, 100);
+        }
+      },
+
+      // 滚动方法
+      scrollToCategorySimple(type) {
+        const query = uni.createSelectorQuery();
+        const selector = `#scroll${type}`;
+        uni.pageScrollTo({
+          selector: selector,
+          duration: 300,
+        });
+        return
+        let targetScrollTop = 0
+        query.select('.shop-info').boundingClientRect(rect => {
+          console.log('商家详情', rect);
+          targetScrollTop += rect.height
+        })
+        query.select('.shop-type-box').boundingClientRect(rect => {
+          console.log('详情切换', rect);
+          targetScrollTop += rect.height + this.newNavHeight
+          console.log('固定上部分位置', targetScrollTop);
+        })
+        query.select(selector).boundingClientRect(rect => {
+          console.log('id找到元素,top:', rect);
+          uni.pageScrollTo({
+            scrollTop: targetScrollTop,
+            duration: 300,
+            success: () => {
+              console.log('滚动完成');
+            }
+          });
+        }).exec();
+      },
+      addred(type, item) {
+        if (type === 1) {
+          // 减
+          --item.num;
+          if (item.num >= 0) {
+            this.shoppingSave(item, item.num)
+          }
+        } else if (type === 2) {
+          // 加
+          ++item.num;
+          this.shoppingSave(item, item.num)
+        } else if (type === 3) {
+          // 选规格
+          uni.navigateTo({
+            url: `pages-takeout/new-specs-info?goods_id=${item.goods_id}&category_id=${item.category_id}&shop_id=${this.shop_id}`
+          })
+        }
+      },
+      shoppingSave(item, num) {
+        // 前端处理购物车
+        if (num <= 0) {
+          // 数量为0,移除商品
+          cartStore.removeFromCart(item.goods_id, item.goods_spec || []);
+        } else {
+          // 更新商品数量
+          const success = cartStore.updateQuantity(
+            item.goods_id,
+            item.goods_spec || [],
+            num
+          );
+          if (!success) {
+            // 如果更新失败,尝试添加新商品
+            cartStore.addToCart(item, item.goods_spec || [], num);
+          }
+        }
+        // 更新页面数据
+        this.getShopIngList();
+        this.$forceUpdate();
+      },
+      findGoodsInList(goodsId) {
+        // 在商品列表中查找指定商品
+        for (let category of this.goodsList) {
+          if (category.list) {
+            const goods = category.list.find(item => item.goods_id === goodsId)
+            if (goods) {
+              return goods
+            }
+          }
+        }
+        return null
+      },
+      navHeight(e) {
+        this.newNavHeight = e
+      },
+      mustBut() {
+        // 未点必选品
+        const item = {
+          type: this.cartData.must_category
+        }
+        this.$refs.goodsMenu.selectType(item)
+      },
+      setShopIngDel() {
+        uni.showModal({
+          title: '提示',
+          content: '是否清除购物车商品?',
+          success: (res) => {
+            if (res.confirm) {
+              cartStore.clearCurrentShopCart();
+              this.getShopIngList();
+              this.$refs.popupBuy.close();
+              uni.showToast({
+                title: '已清空购物车',
+                icon: 'success'
+              });
+            }
+          }
+        });
+      },
+      setShoppingSave(item, type) {
+        if (type === 1) {
+          // 加
+          item.goods_number = item.goods_number + 1
+        } else {
+          // 减
+          item.goods_number = item.goods_number - 1
+        }
+
+        if (item.goods_number <= 0) {
+          // 数量为0,移除商品
+          cartStore.removeFromCart(item.goods_id, item.goods_spec || []);
+        } else {
+          // 更新商品数量
+          cartStore.updateQuantity(
+            item.goods_id,
+            item.goods_spec || [],
+            item.goods_number
+          );
+        }
+        // 更新页面数据
+        this.getShopIngList();
+      },
+      setCartData(cartData) {
+        this.cartData = cartData
+        this.getDeliveryMoney()
+      },
+      getDeliveryMoney() {
+        getDeliveryMoney({
+          'school_id': this.operate_id,
+          'shop_id': this.shop_id,
+        }).then(res => {
+          if (res.code === 1) {
+            this.delivery_money = res.data.delivery_money * 1
+          }
+        })
+      },
+      toBack() {
+        tools.leftClick()
+      },
+      getDomH(num) {
+        this.$nextTick(() => {
+          let info = uni.createSelectorQuery().select('#shopInfoBox');
+          info.boundingClientRect((data) => {
+            if (num === 1) {
+              this.domHeigjt = data.height + 72
+            } else {
+              this.domHeigjt = data.height + 72 + 48
+            }
+          }).exec()
+        })
+        // setTimeout(() => {
+
+        // }, 500)
+      },
+      seletShopType(item) {
+        if (this.shopType != item.id) {
+          this.shopType = item.id;
+          if (this.shopType == 1) {
+            this.shopTypeBsLeft = 12
+          } else if (this.shopType == 2) {
+            this.shopTypeBsLeft = 150
+          } else {
+            this.shopTypeBsLeft = 160 * 2
+          }
+        }
+      },
+      openBuyCrad() {
+        this.$refs.popupBuy.open()
+      },
+      createOrder() {
+        this.$refs.popupBuy.close()
+      },
+      openCoupon() {
+        this.$refs.popupCoupon.open()
+      },
+      closeCoupon() {
+        this.$refs.popupCoupon.close()
+      },
+      toConfirmOrder() {
+        console.log(this.cartData,'11111111111');
+        return
+        uni.navigateTo({
+          url: '/pages-takeout/goods-order?shop_id=' + this.shop_id
+        })
+      },
+      shopInfo() {
+        const operate_id = uni.getStorageSync('operate_id')
+        shopInfo({
+          operate_id: operate_id,
+          shop_id: this.shop_id
+        }).then((res) => {
+          if (res.code == 1) {
+            this.shopsInfo = res.data
+          } else {
+            tools.error(res.msg)
+            setTimeout(() => {
+              uni.navigateBack({
+                delta: 1
+              })
+            }, 1500)
+          }
+        })
+      }
+    },
+  }
 </script>
 
 <style scoped lang="scss">
-	.car-scroll-box {
-		padding: 12rpx 24rpx calc(env(safe-area-inset-bottom) + 48rpx);
-	}
-
-	.zh-icon {
-		width: 32rpx;
-		height: 32rpx;
-	}
-
-	.shp-list-img {
-		width: 40rpx;
-		height: 40rpx;
-	}
-
-	.dd-box {
-		width: 144rpx;
-		padding: 12rpx 0;
-		background: rgba(0, 0, 0, 0.14);
-	}
-
-	.ss-box {
-		width: 64rpx;
-		height: 64rpx;
-		background: rgba(0, 0, 0, 0.14);
-	}
-
-	.shop-search {
-		width: 40rpx;
-		height: 40rpx;
-	}
-
-	.wh-44 {
-		width: 44rpx;
-		height: 44rpx;
-	}
-
-	.blank-text {
-		line-height: 32vh;
-	}
-
-	.box-title {
-		position: relative;
-	}
-
-	.box-close {
-		position: absolute;
-		right: 22rpx;
-	}
-
-	.pop-coupon {
-		width: 100%;
-		height: 42vh;
-		background-color: #F5F4F9;
-		border-radius: 24rpx 24rpx 0rpx 0rpx;
-		padding-top: 32rpx !important;
-		display: flex;
-		flex-direction: column;
-	}
-
-	.item-right {
-		padding: 24rpx;
-		box-sizing: border-box;
-		border-radius: 20rpx 0 0 20rpx;
-		position: relative;
-	}
-
-	.item-hr {
-		width: 0px;
-		height: auto;
-		border-right: 1rpx dashed #FB7850;
-	}
-
-	.item-hr-two {
-		width: 0px;
-		height: auto;
-		border-right: 1rpx dashed #999;
-	}
-
-	.item-left {
-		width: 220rpx;
-		height: auto;
-		padding: 20rpx 24rpx;
-		box-sizing: border-box;
-		position: relative;
-		border-radius: 0 20rpx 20rpx 0;
-	}
-
-	.but-box {
-		width: 152rpx;
-		height: 52rpx;
-		line-height: 52rpx;
-		text-align: center;
-		background: linear-gradient(225deg, #FB3D03 0%, #FF6901 100%);
-		border-radius: 200rpx;
-	}
-
-	.ball {
-		width: 24rpx;
-		height: 24rpx;
-		border-radius: 50%;
-		position: absolute;
-		top: -12rpx;
-		left: -12rpx;
-		background: #F5F5F5;
-		z-index: 2;
-	}
-
-	.ball-two {
-		width: 24rpx;
-		height: 24rpx;
-		border-radius: 50%;
-		position: absolute;
-		background: #F5F5F5;
-		z-index: 10;
-		bottom: -12rpx;
-		left: -12rpx;
-	}
-
-	.shop-index {
-		width: 100%;
-		min-height: 100vh;
-		height: auto;
-		position: relative;
-	}
-
-	.right-only-right-red {
-		width: 44rpx;
-		height: 44rpx;
-		line-height: 40rpx;
-		border-radius: 12rpx;
-		border: 1rpx solid #41ABF5;
-		color: #41ABF5;
-	}
-
-	.right-only-right-add {
-		width: 44rpx;
-		height: 44rpx;
-		line-height: 40rpx;
-		background: linear-gradient(117deg, #57CAFF 0%, #41ABF5 100%);
-		border-radius: 12rpx;
-	}
-
-	.right-only-right-2 {
-		min-width: 50rpx;
-	}
-
-	.w-514 {
-		width: 514rpx;
-	}
-
-	.bg-img {
-		position: fixed;
-		top: 0;
-		left: 0;
-		width: 100%;
-		height: 300rpx;
-		transition: linear .3s all;
-		// height: 300rpx;
-	}
-
-	.bg-img-type {
-		position: fixed;
-		top: 0;
-		left: 0;
-		width: 100%;
-		// opacity: 100;
-		transition: linear .3s all;
-	}
-
-	.mb-box {
-		position: absolute;
-		top: 0;
-		left: 0;
-		width: 100%;
-		height: 300rpx;
-		z-index: -1;
-	}
-
-
-	.nav-img {
-		width: 56rpx;
-		height: 56rpx;
-	}
-
-	.shop-buttom-money {
-		width: 100%;
-		// height: 140rpx;
-		background: rgba(255, 255, 255, 0.8);
-		padding-left: 24rpx;
-		padding-right: 24rpx;
-		padding-bottom: calc(env(safe-area-inset-bottom) + 12rpx);
-		padding-top: 22rpx;
-		// padding: 20rpx 24rpx;
-		position: fixed;
-		left: 0;
-		bottom: 0;
-		z-index: 5;
-	}
-
-	.pop-shop-buttom-money {
-		width: 100%;
-		// height: 140rpx;
-		background: #ECECEC;
-		padding-left: 24rpx;
-		padding-right: 24rpx;
-		padding-bottom: calc(env(safe-area-inset-bottom) + 12rpx);
-		padding-top: 22rpx;
-		position: fixed;
-		left: 0;
-		bottom: 0;
-		z-index: 5;
-	}
-
-	.shop-buttom-num {
-		width: 32rpx;
-		height: 32rpx;
-		line-height: 32rpx;
-		border-radius: 50%;
-		position: absolute;
-		top: 0rpx;
-		left: 85rpx;
-		border: 1rpx solid #FFFFFF;
-	}
-
-	.shop-buttom-money-2 {
-		width: 200rpx;
-		height: 80rpx;
-		line-height: 80rpx;
-		background: linear-gradient(270deg, #FF3333 0%, #FE6122 100%);
-	}
-
-	.info-box-top {}
-
-	.box-top-right {
-		width: 100rpx;
-		height: 100rpx;
-		border-radius: 12rpx;
-	}
-
-	.box-top-left {}
-
-	.top-left-1 {
-		width: 480rpx;
-		margin-bottom: 8rpx;
-	}
-
-	.img-x {
-		width: 24rpx;
-		height: 24rpx;
-	}
-
-	.buy-card {
-		height: 60vh;
-		border-radius: 24rpx 24rpx 0rpx 0rpx;
-	}
-
-	.buy-card-top {
-		width: 100%;
-		height: 92rpx;
-		background: #FCF5DB;
-		border-radius: 24rpx 24rpx 0rpx 0rpx;
-	}
-
-	.buy-card-item {
-		width: 100%;
-		// height: 176rpx;
-		margin-bottom: 32rpx;
-	}
-
-	.goods_img {
-		width: 152rpx;
-		height: 152rpx;
-		border-radius: 12rpx;
-		margin-right: 20rpx;
-	}
-
-	.shop-buttom-money-1 {
-		width: 100%;
-		height: 96rpx;
-		position: relative;
-	}
-
-	.gwc-img {
-		width: 88rpx;
-		height: 88rpx;
-	}
-
-	.head-box {
-		width: 100%;
-		position: relative;
-	}
-
-	.shop-info-box {
-		box-shadow: 0rpx 8rpx 56rpx 0rpx rgba(154, 152, 152, 0.34);
-	}
-
-	.info-box-quan-list {
-		width: 164rpx;
-		height: 48rpx;
-		margin: 0 8rpx 8rpx 0;
-		position: relative;
-
-		image {
-			width: 164rpx;
-			height: 48rpx;
-			position: absolute;
-			top: 0;
-			left: 0;
-			z-index: 1;
-		}
-	}
-
-	.quan-list-1 {
-		position: absolute;
-		top: 3rpx;
-		left: 8rpx;
-		z-index: 2;
-	}
-
-	.quan-list-2 {
-		position: absolute;
-		top: 8rpx;
-		right: 22rpx;
-		z-index: 2;
-	}
-
-	.shop-type-list {
-		// height: 88rpx;
-		position: relative;
-	}
-
-	.shop-item {
-		position: relative;
-	}
-
-	.pj-num {
-		position: absolute;
-		right: -80rpx;
-		top: 0;
-		text-align: left;
-		width: 80rpx;
-	}
-
-	.shop-item-bs {
-		position: absolute;
-		bottom: 0;
-		width: 40rpx;
-		height: 6rpx;
-		border-radius: 20rpx;
-		transition: left 0.5s;
-	}
-
-	.sticky-nav {
-		width: 100%;
-		position: sticky;
-		z-index: 3;
-	}
-
-	.wh-44 {
-		width: 44rpx;
-		height: 44rpx;
-	}
-
-	.menu-box-left-f {
-		position: sticky;
-		// transition: all .3s ease;
-		// overflow: auto;
-	}
-
-	.menu-box-left {
-		width: 160rpx;
-		height: auto;
-		position: sticky;
-		overflow: auto;
-		// transition: all .3s ease;
-		// height: 100%;
-		// background-color: #F7F8FA;
-		// position: absolute;
-		// left: 0;
-		// top: 0;
-		// border-radius: 0rpx 20rpx 0 0rpx;
-	}
-
-	.menu-box-left-box {
-		overflow-y: auto;
-		
-	}
-
-	.menu-type-list {
-		width: 160rpx;
-		min-height: 108rpx;
-		padding: 18rpx 28rpx;
-		position: relative;
-		z-index: 10;
-		border-radius: 0rpx 20rpx 20rpx 0rpx;
-
-		.menu-type-num {
-			position: absolute;
-			top: 2rpx;
-			right: 8rpx;
-			padding: 0 6rpx;
-			min-width: 20rpx;
-			height: 32rpx;
-			text-align: center;
-			line-height: 32rpx;
-			background: #FE6B2C;
-			border-radius: 50%;
-		}
-	}
-
-	.menu-type-list-f {
-		// width: 160rpx;
-		background-color: #007AFF;
-		width: 100%;
-		height: 100%;
-		overflow-y: auto;
-		/* 如果分类项很多,允许内部滚动 */
-		-webkit-overflow-scrolling: touch;
-		/* 改善移动端滚动体验 */
-		// height: 100%;
-	}
-
-	.menu-box-only {
-		// flex: 1;
-		width: calc(100% - 160rpx);
-	}
-
-	.menu-box-right {
-		// flex: 1;
-		width: 100%;
-		height: 100%;
-		// padding: 16rpx 0;
-		// box-sizing: border-box;
-		// position: relative;
-	}
-
-	.menu-list {
-		width: 100%;
-		padding: 0 20rpx 40rpx;
-		// height: 200rpx;
-		// margin-bottom: 40rpx;
-
-		.goods_img {
-			width: 200rpx;
-			height: 200rpx;
-			border-radius: 12rpx;
-			margin-right: 16rpx;
-		}
-
-		.menu-list-right {
-			flex: 1;
-
-			.right-only-right {
-				width: 116rpx;
-				height: 44rpx;
-				background: linear-gradient(270deg, #FF3333 0%, #FE6122 100%);
-				line-height: 44rpx;
-				position: relative;
-
-				.selectedNum {
-					position: absolute;
-					right: -10rpx;
-					top: -22rpx;
-					font-size: 24rpx;
-					color: #fff;
-					width: 32rpx;
-					height: 32rpx;
-					line-height: 32rpx;
-					background: #FE6B2C;
-					border-radius: 50%;
-					border: 1rpx solid #FFFFFF;
-				}
-			}
-
-			.right-only-right-red {
-				width: 44rpx;
-				height: 44rpx;
-				line-height: 40rpx;
-				border-radius: 12rpx;
-				border: 1rpx solid #41ABF5;
-				color: #41ABF5;
-			}
-
-			.right-only-right-add {
-				width: 44rpx;
-				height: 44rpx;
-				line-height: 40rpx;
-				background: linear-gradient(117deg, #57CAFF 0%, #41ABF5 100%);
-				border-radius: 12rpx;
-			}
-
-			.right-only-right-2 {
-				min-width: 50rpx;
-			}
-		}
-	}
-</style>
+  .car-scroll-box {
+    padding: 12rpx 24rpx calc(env(safe-area-inset-bottom) + 48rpx);
+  }
+
+  .zh-icon {
+    width: 32rpx;
+    height: 32rpx;
+  }
+
+  .shp-list-img {
+    width: 40rpx;
+    height: 40rpx;
+  }
+
+  .dd-box {
+    width: 144rpx;
+    padding: 12rpx 0;
+    background: rgba(0, 0, 0, 0.14);
+  }
+
+  .ss-box {
+    width: 64rpx;
+    height: 64rpx;
+    background: rgba(0, 0, 0, 0.14);
+  }
+
+  .shop-search {
+    width: 40rpx;
+    height: 40rpx;
+  }
+
+  .wh-44 {
+    width: 44rpx;
+    height: 44rpx;
+  }
+
+  .blank-text {
+    line-height: 32vh;
+  }
+
+  .box-title {
+    position: relative;
+  }
+
+  .box-close {
+    position: absolute;
+    right: 22rpx;
+  }
+
+  .pop-coupon {
+    width: 100%;
+    height: 42vh;
+    background-color: #F5F4F9;
+    border-radius: 24rpx 24rpx 0rpx 0rpx;
+    padding-top: 32rpx !important;
+    display: flex;
+    flex-direction: column;
+  }
+
+  .item-right {
+    padding: 24rpx;
+    box-sizing: border-box;
+    border-radius: 20rpx 0 0 20rpx;
+    position: relative;
+  }
+
+  .item-hr {
+    width: 0px;
+    height: auto;
+    border-right: 1rpx dashed #FB7850;
+  }
+
+  .item-hr-two {
+    width: 0px;
+    height: auto;
+    border-right: 1rpx dashed #999;
+  }
+
+  .item-left {
+    width: 220rpx;
+    height: auto;
+    padding: 20rpx 24rpx;
+    box-sizing: border-box;
+    position: relative;
+    border-radius: 0 20rpx 20rpx 0;
+  }
+
+  .but-box {
+    width: 152rpx;
+    height: 52rpx;
+    line-height: 52rpx;
+    text-align: center;
+    background: linear-gradient(225deg, #FB3D03 0%, #FF6901 100%);
+    border-radius: 200rpx;
+  }
+
+  .ball {
+    width: 24rpx;
+    height: 24rpx;
+    border-radius: 50%;
+    position: absolute;
+    top: -12rpx;
+    left: -12rpx;
+    background: #F5F5F5;
+    z-index: 2;
+  }
+
+  .ball-two {
+    width: 24rpx;
+    height: 24rpx;
+    border-radius: 50%;
+    position: absolute;
+    background: #F5F5F5;
+    z-index: 10;
+    bottom: -12rpx;
+    left: -12rpx;
+  }
+
+  .shop-index {
+    width: 100%;
+    min-height: 100vh;
+    height: auto;
+    position: relative;
+  }
+
+  .right-only-right-red {
+    width: 44rpx;
+    height: 44rpx;
+    line-height: 40rpx;
+    border-radius: 12rpx;
+    border: 1rpx solid #41ABF5;
+    color: #41ABF5;
+  }
+
+  .right-only-right-add {
+    width: 44rpx;
+    height: 44rpx;
+    line-height: 40rpx;
+    background: linear-gradient(117deg, #57CAFF 0%, #41ABF5 100%);
+    border-radius: 12rpx;
+  }
+
+  .right-only-right-2 {
+    min-width: 50rpx;
+  }
+
+  .w-514 {
+    width: 514rpx;
+  }
+
+  .bg-img {
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 300rpx;
+    transition: linear .3s all;
+    // height: 300rpx;
+  }
+
+  .bg-img-type {
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100%;
+    // opacity: 100;
+    transition: linear .3s all;
+  }
+
+  .mb-box {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 300rpx;
+    z-index: -1;
+  }
+
+
+  .nav-img {
+    width: 56rpx;
+    height: 56rpx;
+  }
+
+  .shop-buttom-money {
+    width: 100%;
+    // height: 140rpx;
+    background: rgba(255, 255, 255, 0.8);
+    padding-left: 24rpx;
+    padding-right: 24rpx;
+    padding-bottom: calc(env(safe-area-inset-bottom) + 12rpx);
+    padding-top: 22rpx;
+    // padding: 20rpx 24rpx;
+    position: fixed;
+    left: 0;
+    bottom: 0;
+    z-index: 5;
+  }
+
+  .pop-shop-buttom-money {
+    width: 100%;
+    // height: 140rpx;
+    background: #ECECEC;
+    padding-left: 24rpx;
+    padding-right: 24rpx;
+    padding-bottom: calc(env(safe-area-inset-bottom) + 12rpx);
+    padding-top: 22rpx;
+    position: fixed;
+    left: 0;
+    bottom: 0;
+    z-index: 5;
+  }
+
+  .shop-buttom-num {
+    width: 32rpx;
+    height: 32rpx;
+    line-height: 32rpx;
+    border-radius: 50%;
+    position: absolute;
+    top: 0rpx;
+    left: 85rpx;
+    border: 1rpx solid #FFFFFF;
+  }
+
+  .shop-buttom-money-2 {
+    width: 200rpx;
+    height: 80rpx;
+    line-height: 80rpx;
+    background: linear-gradient(270deg, #FF3333 0%, #FE6122 100%);
+  }
+
+  .info-box-top {}
+
+  .box-top-right {
+    width: 100rpx;
+    height: 100rpx;
+    border-radius: 12rpx;
+  }
+
+  .box-top-left {}
+
+  .top-left-1 {
+    width: 480rpx;
+    margin-bottom: 8rpx;
+  }
+
+  .img-x {
+    width: 24rpx;
+    height: 24rpx;
+  }
+
+  .buy-card {
+    height: 60vh;
+    border-radius: 24rpx 24rpx 0rpx 0rpx;
+  }
+
+  .buy-card-top {
+    width: 100%;
+    height: 92rpx;
+    background: #FCF5DB;
+    border-radius: 24rpx 24rpx 0rpx 0rpx;
+  }
+
+  .buy-card-item {
+    width: 100%;
+    // height: 176rpx;
+    margin-bottom: 32rpx;
+  }
+
+  .goods_img {
+    width: 152rpx;
+    height: 152rpx;
+    border-radius: 12rpx;
+    margin-right: 20rpx;
+  }
+
+  .shop-buttom-money-1 {
+    width: 100%;
+    height: 96rpx;
+    position: relative;
+  }
+
+  .gwc-img {
+    width: 88rpx;
+    height: 88rpx;
+  }
+
+  .head-box {
+    width: 100%;
+    position: relative;
+  }
+
+  .shop-info-box {
+    box-shadow: 0rpx 8rpx 56rpx 0rpx rgba(154, 152, 152, 0.34);
+  }
+
+  .info-box-quan-list {
+    width: 164rpx;
+    height: 48rpx;
+    margin: 0 8rpx 8rpx 0;
+    position: relative;
+
+    image {
+      width: 164rpx;
+      height: 48rpx;
+      position: absolute;
+      top: 0;
+      left: 0;
+      z-index: 1;
+    }
+  }
+
+  .quan-list-1 {
+    position: absolute;
+    top: 3rpx;
+    left: 8rpx;
+    z-index: 2;
+  }
+
+  .quan-list-2 {
+    position: absolute;
+    top: 8rpx;
+    right: 22rpx;
+    z-index: 2;
+  }
+
+  .shop-type-list {
+    // height: 88rpx;
+    position: relative;
+  }
+
+  .shop-item {
+    position: relative;
+  }
+
+  .pj-num {
+    position: absolute;
+    right: -80rpx;
+    top: 0;
+    text-align: left;
+    width: 80rpx;
+  }
+
+  .shop-item-bs {
+    position: absolute;
+    bottom: 0;
+    width: 40rpx;
+    height: 6rpx;
+    border-radius: 20rpx;
+    transition: left 0.5s;
+  }
+
+  .sticky-nav {
+    width: 100%;
+    position: sticky;
+    z-index: 3;
+  }
+
+  .wh-44 {
+    width: 44rpx;
+    height: 44rpx;
+  }
+
+  .menu-box-left-f {
+    position: sticky;
+    // transition: all .3s ease;
+    // overflow: auto;
+  }
+
+  .menu-box-left {
+    width: 160rpx;
+    height: auto;
+    position: sticky;
+    overflow: auto;
+    // transition: all .3s ease;
+    // height: 100%;
+    // background-color: #F7F8FA;
+    // position: absolute;
+    // left: 0;
+    // top: 0;
+    // border-radius: 0rpx 20rpx 0 0rpx;
+  }
+
+  .menu-box-left-box {
+    overflow-y: auto;
+
+  }
+
+  .menu-type-list {
+    width: 160rpx;
+    min-height: 108rpx;
+    padding: 18rpx 28rpx;
+    position: relative;
+    z-index: 10;
+    border-radius: 0rpx 20rpx 20rpx 0rpx;
+
+    .menu-type-num {
+      position: absolute;
+      top: 2rpx;
+      right: 8rpx;
+      padding: 0 6rpx;
+      min-width: 20rpx;
+      height: 32rpx;
+      text-align: center;
+      line-height: 32rpx;
+      background: #FE6B2C;
+      border-radius: 50%;
+    }
+  }
+
+  .menu-type-list-f {
+    // width: 160rpx;
+    background-color: #007AFF;
+    width: 100%;
+    height: 100%;
+    overflow-y: auto;
+    /* 如果分类项很多,允许内部滚动 */
+    -webkit-overflow-scrolling: touch;
+    /* 改善移动端滚动体验 */
+    // height: 100%;
+  }
+
+  .menu-box-only {
+    // flex: 1;
+    width: calc(100% - 160rpx);
+  }
+
+  .menu-box-right {
+    // flex: 1;
+    width: 100%;
+    height: 100%;
+    // padding: 16rpx 0;
+    // box-sizing: border-box;
+    // position: relative;
+  }
+
+  .menu-list {
+    width: 100%;
+    padding: 0 20rpx 40rpx;
+    // height: 200rpx;
+    // margin-bottom: 40rpx;
+
+    .goods_img {
+      width: 200rpx;
+      height: 200rpx;
+      border-radius: 12rpx;
+      margin-right: 16rpx;
+    }
+
+    .menu-list-right {
+      flex: 1;
+
+      .right-only-right {
+        width: 116rpx;
+        height: 44rpx;
+        background: linear-gradient(270deg, #FF3333 0%, #FE6122 100%);
+        line-height: 44rpx;
+        position: relative;
+
+        .selectedNum {
+          position: absolute;
+          right: -10rpx;
+          top: -22rpx;
+          font-size: 24rpx;
+          color: #fff;
+          width: 32rpx;
+          height: 32rpx;
+          line-height: 32rpx;
+          background: #FE6B2C;
+          border-radius: 50%;
+          border: 1rpx solid #FFFFFF;
+        }
+      }
+
+      .right-only-right-red {
+        width: 44rpx;
+        height: 44rpx;
+        line-height: 40rpx;
+        border-radius: 12rpx;
+        border: 1rpx solid #41ABF5;
+        color: #41ABF5;
+      }
+
+      .right-only-right-add {
+        width: 44rpx;
+        height: 44rpx;
+        line-height: 40rpx;
+        background: linear-gradient(117deg, #57CAFF 0%, #41ABF5 100%);
+        border-radius: 12rpx;
+      }
+
+      .right-only-right-2 {
+        min-width: 50rpx;
+      }
+    }
+  }
+</style>

+ 432 - 358
pages-takeout/new-specs-info.vue

@@ -1,380 +1,454 @@
 <template>
-	<view class="flex-common-css iPhone-bottom box-border-box bgc-f">
-		<newNav :leftShow="false" :textType='false' class="z-4" @navHeight='navHeight'>
-			<view slot="leftContent" class="align-items-center nav-left-box pl-32 box-border-box">
-				<view class="nav-left box-border-box b-rad-32 align-items-center flex-justify-space">
-					<uni-icons type="left" size="25" :color="leftIconColor" @click="goBack"></uni-icons>
-					<view class="align-items-center">
-						<view class="hr mr-16"></view>
-						<image class="fx-icon" src="/static/img/order-food/fx.png" mode=""></image>
-					</view>
-				</view>
-			</view>
-		</newNav>
-		<image class="goods-img" :src="infoData.goods_image" mode="aspectFill"></image>
-		<view class="image-box" :style="{height: `calc(41vh - ${newNavHeight}rpx)`}"></view>
-		<view class="goods-name-box">
-			<view class="goods-name b-rad-24-24-0-0 p-32-32-0 box-border-box bgc-f">
-				<view class="fs-36 fw-600 fc-3">
-					{{infoData.goods_name || ''}}
-				</view>
-				<view class="pt-20 fs-28 fc-6" v-if="infoData.goods_desc">
-					{{infoData.goods_desc}}
-				</view>
-			</view>
-		</view>
-		<view class="scroll-view-css plr-32 box-border-box">
-			<view class="b-t-eee ptb-30">
-				<view class="mb-16" v-for="(item,i) in specsData" :key="i">
-					<view class="fs-28 fc-7 mb-16">
-						{{item.sku_name}}
-					</view>
-					<view class="align-items-center flex-wrap-wrap w-add-16">
-						<view
-							class="specs-item b-rad-12 align-items-center flex-justify-evenly mr-16 mb-16 plr-12 box-border-box"
-							:class="spec_key.indexOf(info.spec_id)>=0?'s-item bgc-FAE9E9 b-FF3333':'n-item bgc-F5F5F5'"
-							v-for="(info,index_two) in item.spec_list" :key="index_two" @click="selectSpec(item,info)">
-							<view class="count-box b-rad-50 bgc-FE6B2C fs-22 fc-f text-align-center"
-								v-if="item.affect_quantity === 1 && info.spec_num > 0">
-								{{info.spec_num}}
-							</view>
-							<image v-if="spec_key.indexOf(info.spec_id)>=0 && info.spec_num > 0"
-								class="set-num-img mr-30" src="@/static/img/order-food/reduce-img.png"
-								@click.stop="setNum(item,info,0)" mode="">
-							</image>
-							<view class="align-items-center info-text">
-								<view class="" :class="spec_key.indexOf(info.spec_id)>=0?'fc-FF3333':'fc-0'">
-									{{info.spec_name}}
-								</view>
-								<view class="" :class="spec_key.indexOf(info.spec_id)>=0?'fc-FF3333':'fc-0'"
-									v-if="info.spec_price && item.affect_quantity != 0">
-									¥{{info.spec_price}}
-								</view>
-							</view>
-							<image v-if="spec_key.indexOf(info.spec_id)>=0 && info.spec_num > 0"
-								class="set-num-img ml-30" src="@/static/img/order-food/add-img.png"
-								@click.stop="setNum(item,info,1)" mode=""></image>
-						</view>
-					</view>
-				</view>
-			</view>
-		</view>
-		<view class="bot-box box-border-box">
-			<view class="align-items-center flex-justify-space mb-20">
-				<view class="">
-					<view class="align-items-baseline">
-						<view class="fs-32 fc-3 fw-600 mr-4">
-							¥
-						</view>
-						<view class="fs-48 fc-3 fw-600">
-							{{total_price.toFixed(2)}}
-						</view>
-					</view>
-					<view class="fs-24 fc-9">
-						{{spec_text}}
-					</view>
-				</view>
-				<view class="align-items-center">
-					<image class="cz-img" src="@/static/img/order-food/reduce-img.png" mode=""
-						@click="changeGoodsNum(0)"></image>
-					<view class="plr-16 fs-32 fc-3 fw-400">
-						{{postData.number}}
-					</view>
-					<image class="cz-img" src="@/static/img/order-food/add-img.png" mode="" @click="changeGoodsNum(1)">
-					</image>
-				</view>
-			</view>
-			<view class="but-box text-align-center fs-32 fc-f fw-600 b-rad-200" @click="addShoppingCart">
-				加入购物车
-			</view>
-		</view>
-	</view>
+  <view class="flex-common-css iPhone-bottom box-border-box bgc-f">
+    <newNav :leftShow="false" :textType='false' class="z-4" @navHeight='navHeight'>
+      <view slot="leftContent" class="align-items-center nav-left-box pl-32 box-border-box">
+        <view class="nav-left box-border-box b-rad-32 align-items-center flex-justify-space">
+          <uni-icons type="left" size="25" :color="leftIconColor" @click="goBack"></uni-icons>
+          <view class="align-items-center">
+            <view class="hr mr-16"></view>
+            <image class="fx-icon" src="/static/img/order-food/fx.png" mode=""></image>
+          </view>
+        </view>
+      </view>
+    </newNav>
+    <image class="goods-img" :src="infoData.goods_image" mode="aspectFill"></image>
+    <view class="image-box" :style="{height: `calc(41vh - ${newNavHeight}rpx)`}"></view>
+    <view class="goods-name-box">
+      <view class="goods-name b-rad-24-24-0-0 p-32-32-0 box-border-box bgc-f">
+        <view class="fs-36 fw-600 fc-3">
+          {{infoData.goods_name || ''}}
+        </view>
+        <view class="pt-20 fs-28 fc-6" v-if="infoData.goods_desc">
+          {{infoData.goods_desc}}
+        </view>
+      </view>
+    </view>
+    <view class="scroll-view-css plr-32 box-border-box">
+      <view class="b-t-eee ptb-30">
+        <view class="mb-16" v-for="(item,i) in specsData" :key="i">
+          <view class="fs-28 fc-7 mb-16">
+            {{item.sku_name}}
+          </view>
+          <view class="align-items-center flex-wrap-wrap w-add-16">
+            <view class="specs-item b-rad-12 align-items-center flex-justify-evenly mr-16 mb-16 plr-12 box-border-box"
+              :class="spec_key.indexOf(info.spec_id)>=0?'s-item bgc-FAE9E9 b-FF3333':'n-item bgc-F5F5F5'"
+              v-for="(info,index_two) in item.spec_list" :key="index_two" @click="selectSpec(item,info)">
+              <view class="count-box b-rad-50 bgc-FE6B2C fs-22 fc-f text-align-center"
+                v-if="item.affect_quantity === 1 && info.spec_num > 0">
+                {{info.spec_num}}
+              </view>
+              <image v-if="spec_key.indexOf(info.spec_id)>=0 && info.spec_num > 0" class="set-num-img mr-30"
+                src="@/static/img/order-food/reduce-img.png" @click.stop="setNum(item,info,0)" mode="">
+              </image>
+              <view class="align-items-center info-text">
+                <view class="" :class="spec_key.indexOf(info.spec_id)>=0?'fc-FF3333':'fc-0'">
+                  {{info.spec_name}}
+                </view>
+                <view class="" :class="spec_key.indexOf(info.spec_id)>=0?'fc-FF3333':'fc-0'"
+                  v-if="info.spec_price && item.affect_quantity != 0">
+                  ¥{{info.spec_price}}
+                </view>
+              </view>
+              <image v-if="spec_key.indexOf(info.spec_id)>=0 && info.spec_num > 0" class="set-num-img ml-30"
+                src="@/static/img/order-food/add-img.png" @click.stop="setNum(item,info,1)" mode=""></image>
+            </view>
+          </view>
+        </view>
+      </view>
+    </view>
+    <view class="bot-box box-border-box">
+      <view class="align-items-center flex-justify-space mb-20">
+        <view class="">
+          <view class="align-items-baseline">
+            <view class="fs-32 fc-3 fw-600 mr-4">
+              ¥
+            </view>
+            <view class="fs-48 fc-3 fw-600">
+              {{total_price.toFixed(2)}}
+            </view>
+          </view>
+          <view class="fs-24 fc-9">
+            {{spec_text}}
+          </view>
+        </view>
+        <view class="align-items-center">
+          <image class="cz-img" src="@/static/img/order-food/reduce-img.png" mode="" @click="changeGoodsNum(0)"></image>
+          <view class="plr-16 fs-32 fc-3 fw-400">
+            {{postData.number}}
+          </view>
+          <image class="cz-img" src="@/static/img/order-food/add-img.png" mode="" @click="changeGoodsNum(1)">
+          </image>
+        </view>
+      </view>
+      <view class="but-box text-align-center fs-32 fc-f fw-600 b-rad-200" @click="addShoppingCart">
+        加入购物车
+      </view>
+    </view>
+  </view>
 </template>
 
 <script>
-	import {
-		getGoodsGoodsSpec
-	} from "@/api/goods.js"
-	import {
-		shoppingSave
-	} from "@/api/shopping.js"
-	import tools from "@/service/tools"
-	export default {
-		components: {},
-		data() {
-			return {
-				infoData: {},
-				newNavHeight: '',
-				specsData: [],
-				spec_key: [],
-				total_price: 0,
-				spec_text: '请选择规格',
-				postData: {
-					goods_id: '',
-					category_id: '',
-					goods_spec: [],
-					number: 1
-				}
-			}
-		},
-		watch: {
-			// 监听相关数据变化,自动计算总价和拼接规格文字
-			'postData.goods_spec': {
-				handler() {
-					this.updatePriceAndText();
-				},
-				deep: true
-			},
-			'postData.number': {
-				handler() {
-					this.updatePriceAndText();
-				}
-			}
-		},
-		onLoad(data) {
-			if (data) {
-				this.postData.goods_id = data.goods_id
-				this.postData.category_id = data.category_id
-				this.getGoodsGoodsSpec(data.goods_id)
-			}
-		},
-		mounted() {},
-		methods: {
-			// 添加商品数量
-			changeGoodsNum(type) {
-				if (type === 0) {
-					// 减少数量
-					if (this.postData.number > 1) {
-						this.postData.number--;
-					}
-				} else {
-					// 增加数量
-					this.postData.number++;
-				}
-			},
-			// 更新总价和规格文字
-			updatePriceAndText() {
-				let basePrice = 0; // 假设商品基础价格,可以从接口获取
-				let specPrice = 0;
-				let specArray = [];
-				// 遍历所有规格组
-				this.specsData.forEach(group => {
-					group.spec_list.forEach(spec => {
-						// 检查规格是否被选中
-						if (this.spec_key.includes(spec.spec_id)) {
-							// 获取规格数量
-							let specNum = group.affect_quantity === 1 ? spec.spec_num : 1;
-							// 累加价格
-							specPrice += spec.spec_price * specNum;
-							// 构建规格文字
-							let specName = spec.spec_name;
-							if (group.sku_type === 2 && specNum > 1) {
-								// 多选且数量大于1,显示 ×数量
-								specName += `×${specNum}`;
-							}
-							specArray.push(specName);
-						}
-					});
-				});
-				// 计算总价:基础价格 + 规格价格 × 商品数量
-				this.total_price = (basePrice + specPrice) * this.postData.number;
-				// 拼接规格文字
-				if (specArray.length > 0) {
-					this.spec_text = specArray.join('、');
-				} else {
-					this.spec_text = '请选择规格';
-				}
-				// this.$forceUpdate();
-			},
-			addShoppingCart() {
-				// console.log(this.postData, "提交数据");
-				this.shoppingSave()
-			},
-			shoppingSave() {
-				shoppingSave(this.postData).then((res) => {
-					if (res.code === 1) {
-						tools.success(res.msg)
-						this.isAjax = false
-						setTimeout(() => {
-							uni.navigateBack({
-								delta: 1
-							})
-						}, 1000)
-					} else {
-						this.isAjax = false
-						tools.error(res.msg)
-					}
-				})
-			},
-			setNum(item, info, type) {
-				if (type === 0) {
-					info.spec_num -= 1;
-					if (info.spec_num <= 0) {
-						const infoKey = this.spec_key.indexOf(info.spec_id)
-						if (infoKey != -1) {
-							this.spec_key.splice(infoKey, 1)
-							this.postData.goods_spec.splice(infoKey, 1)
-						}
-					}
-				} else {
-					info.spec_num += 1;
-				}
-				const targetSpec = this.postData.goods_spec.find(e => e.id === info.spec_id);
-				if (targetSpec) {
-					targetSpec.number = info.spec_num;
-				}
-				this.$forceUpdate();
-			},
-			getGoodsGoodsSpec(goods_id) {
-				getGoodsGoodsSpec({
-					goods_id: goods_id
-				}).then((res) => {
-					if (res.code * 1 === 1) {
-						this.specsData = res.data.sku
-						this.infoData = res.data.goods
-						this.addSpecNum()
-					}
-				})
-			},
-			addSpecNum() {
-				this.specsData.forEach((v, k) => {
-					if (v.affect_quantity === 1) {
-						v.spec_list.forEach(spec => {
-							spec.spec_num = 0;
-						});
-					} else {
-						this.addSpec(v.spec_list[0])
-					}
-				})
-			},
-			navHeight(e) {
-				this.newNavHeight = e
-			},
-			goBack() {
-				uni.navigateBack({
-					delta: 1
-				})
-			},
-			selectSpec(item, info) {
-				let specKey = this.spec_key.indexOf(info.spec_id)
-				if (item.sku_type === 1) {
-					//单选
-					item.spec_list.forEach((e, i) => {
-						let infoKey = this.spec_key.indexOf(e.spec_id)
-						if (infoKey >= 0) {
-							this.spec_key.splice(infoKey, 1)
-							this.postData.goods_spec.splice(infoKey, 1)
-						}
-					})
-					this.addSpec(info)
+  import cartStore from '@/utils/cartStore.js';
+  import {
+    getGoodsGoodsSpec
+  } from "@/api/goods.js"
+  import {
+    shoppingSave
+  } from "@/api/shopping.js"
+  import tools from "@/service/tools"
+  export default {
+    components: {},
+    data() {
+      return {
+        infoData: {},
+        newNavHeight: '',
+        specsData: [],
+        spec_key: [],
+        total_price: 0,
+        spec_text: '请选择规格',
+        postData: {
+          goods_id: '',
+          category_id: '',
+          goods_spec: [],
+          number: 1
+        }
+      }
+    },
+    watch: {
+      // 监听相关数据变化,自动计算总价和拼接规格文字
+      'postData.goods_spec': {
+        handler() {
+          this.updatePriceAndText();
+        },
+        deep: true
+      },
+      'postData.number': {
+        handler() {
+          this.updatePriceAndText();
+        }
+      }
+    },
+    onLoad(data) {
+      if (data) {
+        this.postData.goods_id = data.goods_id
+        this.postData.category_id = data.category_id
+        cartStore.setShopId();
+        this.getGoodsGoodsSpec(data.goods_id)
+      }
+    },
+    mounted() {},
+    methods: {
+      // 添加商品数量
+      changeGoodsNum(type) {
+        if (type === 0) {
+          // 减少数量
+          if (this.postData.number > 1) {
+            this.postData.number--;
+          }
+        } else {
+          // 增加数量
+          this.postData.number++;
+        }
+      },
+      // 更新总价和规格文字
+      updatePriceAndText() {
+        let basePrice = 0; // 假设商品基础价格,可以从接口获取
+        let specPrice = 0;
+        let specArray = [];
+        // 遍历所有规格组
+        this.specsData.forEach(group => {
+          group.spec_list.forEach(spec => {
+            // 检查规格是否被选中
+            if (this.spec_key.includes(spec.spec_id)) {
+              // 获取规格数量
+              let specNum = group.affect_quantity === 1 ? spec.spec_num : 1;
+              // 累加价格
+              specPrice += spec.spec_price * specNum;
+              // 构建规格文字
+              let specName = spec.spec_name;
+              if (group.sku_type === 2 && specNum > 1) {
+                // 多选且数量大于1,显示 ×数量
+                specName += `×${specNum}`;
+              }
+              specArray.push(specName);
+            }
+          });
+        });
+        // 计算总价:基础价格 + 规格价格 × 商品数量
+        this.total_price = (basePrice + specPrice) * this.postData.number;
+        // 拼接规格文字
+        if (specArray.length > 0) {
+          this.spec_text = specArray.join('、');
+        } else {
+          this.spec_text = '请选择规格';
+        }
+        // this.$forceUpdate();
+      },
+      addShoppingCart() {
+        // 构建商品对象
+        const goodsData = {
+          goods_id: this.postData.goods_id,
+          goods_name: this.infoData.goods_name,
+          goods_image: this.infoData.goods_image,
+          category_id: this.postData.category_id,
+          seckill_money: this.infoData.seckill_money || 0,
+          price: this.infoData.price || 0,
+          spec_type: 2, // 多规格商品
+          goods_desc: this.infoData.goods_desc || ''
+        };
+        // 计算单价
+        const unitPrice = this.total_price / this.postData.number;
 
-				} else {
-					//多选
-					if (specKey < 0) {
-						if (info.spec_num === 0) {
-							info.spec_num += 1
-							this.addSpec(info)
-						}
-					}
-				}
-			},
-			addSpec(info) {
-				this.spec_key.push(info.spec_id);
-				this.postData.goods_spec.push({
-					id: info.spec_id,
-					number: info.spec_num || 1
-				});
-			}
-		}
-	}
+        // 构建规格数组
+        const specs = this.postData.goods_spec.map(spec => {
+          return {
+            id: spec.id,
+            number: spec.number,
+            // 这里需要从规格数据中获取规格名称和价格
+            name: this.getSpecNameById(spec.id),
+            price: this.getSpecPriceById(spec.id)
+          };
+        });
+
+        // 添加到购物车
+        const success = cartStore.addToCart(
+          goodsData,
+          specs,
+          this.postData.number
+        );
+
+        if (success) {
+          uni.showToast({
+            title: '加入购物车成功',
+            icon: 'success'
+          });
+
+          setTimeout(() => {
+            // 返回时传递成功信息
+            const eventChannel = this.getOpenerEventChannel();
+            if (eventChannel) {
+              eventChannel.emit('cartUpdated', {
+                success: true
+              });
+            }
+            uni.navigateBack({
+              delta: 1
+            });
+          }, 1000);
+        } else {
+          uni.showToast({
+            title: '加入购物车失败',
+            icon: 'error'
+          });
+        }
+      },
+      getSpecNameById(specId) {
+        // 根据规格ID获取规格名称
+        for (let group of this.specsData) {
+          for (let spec of group.spec_list) {
+            if (spec.spec_id === specId) {
+              return spec.spec_name;
+            }
+          }
+        }
+        return '';
+      },
+      getSpecPriceById(specId) {
+        // 根据规格ID获取规格价格
+        for (let group of this.specsData) {
+          for (let spec of group.spec_list) {
+            if (spec.spec_id === specId) {
+              return spec.spec_price || 0;
+            }
+          }
+        }
+        return 0;
+      },
+      shoppingSave() {
+        shoppingSave(this.postData).then((res) => {
+          if (res.code === 1) {
+            tools.success(res.msg)
+            this.isAjax = false
+            setTimeout(() => {
+              uni.navigateBack({
+                delta: 1
+              })
+            }, 1000)
+          } else {
+            this.isAjax = false
+            tools.error(res.msg)
+          }
+        })
+      },
+      setNum(item, info, type) {
+        if (type === 0) {
+          info.spec_num -= 1;
+          if (info.spec_num <= 0) {
+            const infoKey = this.spec_key.indexOf(info.spec_id)
+            if (infoKey != -1) {
+              this.spec_key.splice(infoKey, 1)
+              this.postData.goods_spec.splice(infoKey, 1)
+            }
+          }
+        } else {
+          info.spec_num += 1;
+        }
+        const targetSpec = this.postData.goods_spec.find(e => e.id === info.spec_id);
+        if (targetSpec) {
+          targetSpec.number = info.spec_num;
+        }
+        this.$forceUpdate();
+      },
+      getGoodsGoodsSpec(goods_id) {
+        getGoodsGoodsSpec({
+          goods_id: goods_id
+        }).then((res) => {
+          if (res.code * 1 === 1) {
+            this.specsData = res.data.sku
+            this.infoData = res.data.goods
+            this.addSpecNum()
+          }
+        })
+      },
+      addSpecNum() {
+        this.specsData.forEach((v, k) => {
+          if (v.affect_quantity === 1) {
+            v.spec_list.forEach(spec => {
+              spec.spec_num = 0;
+            });
+          } else {
+            this.addSpec(v.spec_list[0])
+          }
+        })
+      },
+      navHeight(e) {
+        this.newNavHeight = e
+      },
+      goBack() {
+        uni.navigateBack({
+          delta: 1
+        })
+      },
+      selectSpec(item, info) {
+        let specKey = this.spec_key.indexOf(info.spec_id)
+        if (item.sku_type === 1) {
+          //单选
+          item.spec_list.forEach((e, i) => {
+            let infoKey = this.spec_key.indexOf(e.spec_id)
+            if (infoKey >= 0) {
+              this.spec_key.splice(infoKey, 1)
+              this.postData.goods_spec.splice(infoKey, 1)
+            }
+          })
+          this.addSpec(info)
+
+        } else {
+          //多选
+          if (specKey < 0) {
+            if (info.spec_num === 0) {
+              info.spec_num += 1
+              this.addSpec(info)
+            }
+          }
+        }
+      },
+      addSpec(info) {
+        this.spec_key.push(info.spec_id);
+        this.postData.goods_spec.push({
+          id: info.spec_id,
+          number: info.spec_num || 1
+        });
+      }
+    }
+  }
 </script>
 
 <style lang="scss" scoped>
-	.nav-left-box {
-		width: 100%;
-		height: 100%;
-	}
+  .nav-left-box {
+    width: 100%;
+    height: 100%;
+  }
 
-	.nav-left {
-		width: 174rpx;
-		height: 100%;
-		background: rgba(255, 255, 255, 0.45);
-		border: 1rpx solid #E3E6EB;
-		padding: 0 20rpx 0 14rpx;
-	}
+  .nav-left {
+    width: 174rpx;
+    height: 100%;
+    background: rgba(255, 255, 255, 0.45);
+    border: 1rpx solid #E3E6EB;
+    padding: 0 20rpx 0 14rpx;
+  }
 
-	.goods-img {
-		width: 100%;
-		height: 41vh;
-		position: absolute;
-		top: 0;
-		left: 0;
-	}
+  .goods-img {
+    width: 100%;
+    height: 41vh;
+    position: absolute;
+    top: 0;
+    left: 0;
+  }
 
-	.fx-icon {
-		width: 48rpx;
-		height: 48rpx;
-	}
+  .fx-icon {
+    width: 48rpx;
+    height: 48rpx;
+  }
 
-	.hr {
-		width: 1rpx;
-		height: 36rpx;
-		background: #e7e7e7;
-	}
+  .hr {
+    width: 1rpx;
+    height: 36rpx;
+    background: #e7e7e7;
+  }
 
-	.goods-name-box {
-		position: relative;
-	}
+  .goods-name-box {
+    position: relative;
+  }
 
-	.goods-name {
-		width: 100%;
-		position: relative;
-		top: -32rpx;
-		left: 0;
-	}
+  .goods-name {
+    width: 100%;
+    position: relative;
+    top: -32rpx;
+    left: 0;
+  }
 
-	.bot-box {
-		padding: 20rpx 32rpx 12rpx;
-		box-shadow: 0rpx 0rpx 20rpx 0rpx rgba(51, 51, 51, 0.1);
-	}
+  .bot-box {
+    padding: 20rpx 32rpx 12rpx;
+    box-shadow: 0rpx 0rpx 20rpx 0rpx rgba(51, 51, 51, 0.1);
+  }
 
-	.cz-img {
-		width: 44rpx;
-		height: 44rpx;
-	}
+  .cz-img {
+    width: 44rpx;
+    height: 44rpx;
+  }
 
-	.but-box {
-		width: 100%;
-		height: 96rpx;
-		line-height: 96rpx;
-		background: linear-gradient(270deg, #FF3333 0%, #FE6122 100%);
-	}
+  .but-box {
+    width: 100%;
+    height: 96rpx;
+    line-height: 96rpx;
+    background: linear-gradient(270deg, #FF3333 0%, #FE6122 100%);
+  }
 
-	.specs-item {
-		position: relative;
-		min-width: 218rpx;
-		height: 72rpx;
-	}
+  .specs-item {
+    position: relative;
+    min-width: 218rpx;
+    height: 72rpx;
+  }
 
-	.w-add-16 {
-		width: calc(100% + 22rpx);
-	}
+  .w-add-16 {
+    width: calc(100% + 22rpx);
+  }
 
-	.item-box {
-		position: relative;
-	}
+  .item-box {
+    position: relative;
+  }
 
-	.count-box {
-		width: 28rpx;
-		height: 28rpx;
-		line-height: 28rpx;
-		position: absolute;
-		right: -8rpx;
-		top: -8rpx;
-	}
+  .count-box {
+    width: 28rpx;
+    height: 28rpx;
+    line-height: 28rpx;
+    position: absolute;
+    right: -8rpx;
+    top: -8rpx;
+  }
 
-	.set-num-img {
-		width: 44rpx;
-		height: 44rpx;
-	}
-</style>
+  .set-num-img {
+    width: 44rpx;
+    height: 44rpx;
+  }
+</style>

+ 622 - 380
pages/index/search-record.vue

@@ -1,387 +1,629 @@
 <template>
-	<view class="flex-common-css iPhone-bottom box-border-box bgc-f">
-		<image class="order-bg" src="@/static/img/order-food/ss-bg.png" mode=""></image>
-		<newNav textName="搜索商品" class="mb-20" titleColor='#333' leftIconColor='#333'></newNav>
-
-		<view class="plr-24 box-border-box">
-			<view class="s-input box-border-box bgc-f align-items-center flex-justify-space b-rad-200 z-3">
-				<view class="align-items-center flex-1 mr-16">
-					<image class="wh36 mr-16 flex-shrink0" src="/static/img/order-food/ss-icon.png" mode=""></image>
-					<input class="input-box fs-32" placeholder-class="fc-9" v-model="search" type="text"
-						placeholder="请搜索商品" @input="clearInput">
-				</view>
-				<view class="align-items-center">
-					<image v-if="showClearIcon" @click="clearIcon" class="qk-icon mr-24"
-						src="@/static/img/order-food/qk-icon.png" mode="">
-					</image>
-					<view class="input-buttom fs-28 fc-f fw-500 b-rad-200 text-align-center" @click="toList()">搜索</view>
-				</view>
-			</view>
-		</view>
-
-		<view class="scroll-view-css bgc-f seacrh-info box-border-box p-32" v-if="goodsList.length<=0">
-			<view class="flex-justify-space mb-32">
-				<view class="fs-32 fw-600 fc-3">搜索历史</view>
-				<view class="align-items-center" v-if="list.length > 0">
-					<view @click="isOpen=!isOpen" class="">{{!isOpen?'收起':'展开'}}</view>
-					<view @click="isOpen=!isOpen" :class="!isOpen?'down':'up'">
-						<uni-icons type="right" size="14" color="#999"></uni-icons>
-					</view>
-					<view class="view-x"></view>
-					<uni-icons @click="delList()" type="trash" size="18" color="#999"></uni-icons>
-				</view>
-			</view>
-			<view id='' :class="isOpen?'hide-h':''" class="flex-wrap-wrap mb-50 search-history" v-if="list.length > 0">
-				<view class="fs-28 list-item text-overflow-ellipsis-one" @click="toList(item)" v-for="(item,i) in list"
-					:key="i">{{item}}</view>
-			</view>
-		</view>
-
-		<view class="scroll-view-css bgc-F5F4F9 p-32 box-border-box" v-else>
-			<view class="menu-list flex-justify-space bgc-f p-24 box-border-box b-rad-20 mb-16"
-				v-for="(info,k) in goodsList" :key="k" :id="'goods_id'+ info.goods_id">
-				<image class="flex-shrink0 goods_img mr-20" :src="info.goods_image" mode="scaleToFill"></image>
-				<view class="menu-list-right flex-direction flex-justify-space">
-					<view class="mb-8">
-						<view class="mb-4 goods-name text-overflow-ellipsis fs-32 fw-600">
-							{{info.goods_name}}
-						</view>
-						<view class="text-overflow-ellipsis-one fw-400 fc-9 fs-24 mb-2 goods-name"
-							v-if="info.spec_type == 1">
-							{{info.goods_desc?info.goods_desc:''}}
-						</view>
-					</view>
-					<view class="flex-justify-space align-items-flex-end">
-						<view class="">
-							<span class="fs-24 fw-400 fc-3">¥</span>
-							<span class="fs-36 fw-b fc-3">{{info.seckill_money>0?info.seckill_money:info.price}}</span>
-							<span class="fs-24 fc-9">/份起</span>
-						</view>
-						<view class="display-flex align-items-center" v-if="info.spec_type == 1">
-							<image v-show="info.num > 0" class="wh-44" @click="addred(1,info)"
-								src="@/static/img/order-food/reduce-img.png" mode=""></image>
-							<view v-show="info.num > 0" class="right-only-right-2 text-align-center fs-28 fw-400">
-								{{info.num}}
-							</view>
-							<image class="wh-44" src="@/static/img/order-food/add-img.png" @click="addred(2,info)"
-								mode=""></image>
-						</view>
-						<view v-else class="right-only-right text-align-center b-rad-200" @click="addred(3,info)">
-							<view class="fw-500 fs-28 fc-f">
-								选规格
-							</view>
-							<view class="selectedNum" v-if="info.num>0">
-								{{info.num}}
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-		</view>
-
-		<view v-if="goodsList.length>0" class="shop-buttom-money p-24 box-border-box bgc-F5F4F9" @click="openBuyCrad()">
-			<view
-				class="shop-buttom-money-1 bgc-f flex-justify-space align-items-center pl-24 box-border-box pr-8 b-rad-200">
-				<view class="align-items-center">
-					<image class="gwc-img mr-36" src="@/static/img/order-food/gwc-img.png" mode="scaleToFill"></image>
-					<view class="shop-buttom-num bgc-FE6B2C fs-24 fc-f text-align-center">{{cartData.total_num || 0}}
-					</view>
-					<view class="align-items-baseline">
-						<view class="fw-600 fs-28 fc-3 mr-4">¥</view>
-						<view class="fw-600 fs-48 fc-3">{{cartData.total_price || 0}}</view>
-					</view>
-				</view>
-
-				<view class="shop-buttom-money-2 text-align-center fc-f fs-32 fw-600 b-rad-200"
-					:class="cartData.total_num>0?'':'opacity-4'" @click.stop="toConfirmOrder()">去结算
-				</view>
-			</view>
-		</view>
-	</view>
+  <view class="flex-common-css iPhone-bottom box-border-box bgc-f">
+    <image class="order-bg" src="@/static/img/order-food/ss-bg.png" mode=""></image>
+    <newNav textName="搜索商品" class="mb-20" titleColor='#333' leftIconColor='#333'></newNav>
+
+    <view class="plr-24 box-border-box">
+      <view class="s-input box-border-box bgc-f align-items-center flex-justify-space b-rad-200 z-3">
+        <view class="align-items-center flex-1 mr-16">
+          <image class="wh36 mr-16 flex-shrink0" src="/static/img/order-food/ss-icon.png" mode=""></image>
+          <input class="input-box fs-32" placeholder-class="fc-9" v-model="search" type="text" placeholder="请搜索商品"
+            @input="clearInput">
+        </view>
+        <view class="align-items-center">
+          <image v-if="showClearIcon" @click="clearIcon" class="qk-icon mr-24" src="@/static/img/order-food/qk-icon.png"
+            mode="">
+          </image>
+          <view class="input-buttom fs-28 fc-f fw-500 b-rad-200 text-align-center" @click="toList()">搜索</view>
+        </view>
+      </view>
+    </view>
+
+    <view class="scroll-view-css bgc-f seacrh-info box-border-box p-32" v-if="goodsList.length<=0">
+      <view class="flex-justify-space mb-32">
+        <view class="fs-32 fw-600 fc-3">搜索历史</view>
+        <view class="align-items-center" v-if="list.length > 0">
+          <view @click="isOpen=!isOpen" class="">{{!isOpen?'收起':'展开'}}</view>
+          <view @click="isOpen=!isOpen" :class="!isOpen?'down':'up'">
+            <uni-icons type="right" size="14" color="#999"></uni-icons>
+          </view>
+          <view class="view-x"></view>
+          <uni-icons @click="delList()" type="trash" size="18" color="#999"></uni-icons>
+        </view>
+      </view>
+      <view id='' :class="isOpen?'hide-h':''" class="flex-wrap-wrap mb-50 search-history" v-if="list.length > 0">
+        <view class="fs-28 list-item text-overflow-ellipsis-one" @click="toList(item)" v-for="(item,i) in list"
+          :key="i">{{item}}</view>
+      </view>
+    </view>
+    <scroll-view scroll-y="true" class="scroll-view-css bgc-F5F4F9 p-32 box-border-box" v-else @scrolltolower="scrolltolower">
+      <!-- <view class="scroll-view-css bgc-F5F4F9 p-32 box-border-box" v-else> -->
+      <view class="menu-list flex-justify-space bgc-f p-24 box-border-box b-rad-20 mb-16" v-for="(info,k) in goodsList"
+        :key="k" :id="'goods_id'+ info.goods_id">
+        <image class="flex-shrink0 goods_img mr-20" :src="info.goods_image" mode="scaleToFill"></image>
+        <view class="menu-list-right flex-direction flex-justify-space">
+          <view class="mb-8">
+            <view class="mb-4 goods-name text-overflow-ellipsis fs-32 fw-600">
+              {{info.goods_name}}
+            </view>
+            <view class="text-overflow-ellipsis-one fw-400 fc-9 fs-24 mb-2 goods-name" v-if="info.spec_type == 1">
+              {{info.goods_desc?info.goods_desc:''}}
+            </view>
+          </view>
+          <view class="flex-justify-space align-items-flex-end">
+            <view class="">
+              <span class="fs-24 fw-400 fc-3">¥</span>
+              <span class="fs-36 fw-b fc-3">{{info.seckill_money>0?info.seckill_money:info.price}}</span>
+              <span class="fs-24 fc-9">/份起</span>
+            </view>
+            <view class="display-flex align-items-center" v-if="info.spec_type == 1">
+              <image v-show="info.num > 0" class="wh-44" @click="addred(1,info)"
+                src="@/static/img/order-food/reduce-img.png" mode=""></image>
+              <view v-show="info.num > 0" class="right-only-right-2 text-align-center fs-28 fw-400">
+                {{info.num}}
+              </view>
+              <image class="wh-44" src="@/static/img/order-food/add-img.png" @click="addred(2,info)" mode=""></image>
+            </view>
+            <view v-else class="right-only-right text-align-center b-rad-200" @click="addred(3,info)">
+              <view class="fw-500 fs-28 fc-f">
+                选规格
+              </view>
+              <view class="selectedNum" v-if="info.num>0">
+                {{info.num}}
+              </view>
+            </view>
+          </view>
+        </view>
+      </view>
+      <!-- </view> -->
+    </scroll-view>
+
+    <view v-if="goodsList.length>0" class="shop-buttom-money p-24 box-border-box bgc-F5F4F9" @click="openBuyCrad()">
+      <view class="shop-buttom-money-1 bgc-f flex-justify-space align-items-center pl-24 box-border-box pr-8 b-rad-200">
+        <view class="align-items-center">
+          <image class="gwc-img mr-36" src="@/static/img/order-food/gwc-img.png" mode="scaleToFill"></image>
+          <view class="shop-buttom-num bgc-FE6B2C fs-24 fc-f text-align-center">{{cartData.total_num || 0}}
+          </view>
+          <view class="align-items-baseline">
+            <view class="fw-600 fs-28 fc-3 mr-4">¥</view>
+            <view class="fw-600 fs-48 fc-3">{{cartData.total_price || 0}}</view>
+          </view>
+        </view>
+
+        <view class="shop-buttom-money-2 text-align-center fc-f fs-32 fw-600 b-rad-200"
+          :class="cartData.total_num>0?'':'opacity-4'" @click.stop="toConfirmOrder()">去结算
+        </view>
+      </view>
+    </view>
+
+    <uni-popup ref="popupBuy" type="bottom" background-color="transparent" borderRadius='20px 20rpx 0 0'>
+      <view class="buy-card flex-index-css">
+        <view class="buy-card-top box-border-box plr-32 flex-justify-space align-items-center b-rad-20-20-0-0">
+          <view class="">
+            <span class="fs-32 fc-3 mr-12">已选商品</span>
+          </view>
+          <view class="fs-28 fw-400 fc-9 align-items-center" @click.stop="setShopIngDel">
+            <view class="">
+              <uni-icons type="trash" size="18" color="#999"></uni-icons>
+            </view>
+            <view class="fs-28 fw-400 fc-9">清空</view>
+          </view>
+        </view>
+        <view class="scroll-view-css bgc-ECECEC box-border-box car-scroll-box">
+          <view class="buy-card-item bgc-f b-rad-20 display-flex p-20 box-border-box"
+            v-for="(goods,i) in cartData.goods_list" :key="i">
+            <image class="goods_img" :src="goods.goods_image" mode="scaleToFill"></image>
+            <view class="flex-1 flex-direction flex-justify-space">
+              <view class="">
+                <view class="w-514 text-overflow-ellipsis-one fs-34 fw-600 mb-8">
+                  {{goods.goods_name}}
+                </view>
+                <view class="fc-6">
+                  {{goods.goods_attr}}
+                </view>
+              </view>
+              <view class="flex-justify-space">
+                <view class="">
+                  <span class="fs-24 fc-FB3D03 fw-400">¥</span>
+                  <span class="fs-40 fc-FB3D03 fw-b">{{goods.price}}</span>
+                </view>
+                <view class="display-flex align-items-center">
+                  <image class="wh-44" @click.stop="setShoppingSave(goods,2)"
+                    src="@/static/img/order-food/reduce-img.png" mode="">
+                  </image>
+                  <view class="right-only-right-2 text-align-center fs-28 fw-400">
+                    {{goods.goods_number}}
+                  </view>
+                  <image class="wh-44" src="/static/img/order-food/add-img.png" @click.stop="setShoppingSave(goods,1)"
+                    mode=""></image>
+                </view>
+              </view>
+            </view>
+          </view>
+          <en-blank navBackgroundColor='#ECECEC' v-if="cartData.goods_list.length<=0" message="快去选购商品吧!~"></en-blank>
+        </view>
+        <view class="pop-shop-buttom-money box-border-box" @click="openBuyCrad()">
+          <view
+            class="shop-buttom-money-1 bgc-f flex-justify-space align-items-center pl-24 box-border-box pr-8 b-rad-200">
+            <view class="align-items-center">
+              <image class="gwc-img mr-36" src="@/static/img/order-food/gwc-img.png" mode="scaleToFill">
+              </image>
+              <view class="shop-buttom-num bgc-FE6B2C fs-24 fc-f text-align-center">{{cartData.total_num}}
+              </view>
+              <view class="align-items-baseline">
+                <view class="fw-600 fs-28 fc-3 mr-4">¥</view>
+                <view class="fw-600 fs-48 fc-3">{{cartData.total_price}}</view>
+              </view>
+            </view>
+
+            <view class="shop-buttom-money-2 text-align-center fc-f fs-32 fw-600 b-rad-200"
+              :class="cartData.total_num>0?'':'opacity-4'" @click.stop="toConfirmOrder()">去结算
+            </view>
+          </view>
+        </view>
+      </view>
+    </uni-popup>
+  </view>
 </template>
 
 <script>
-	import tools from "@/service/tools";
-	import {
-		getSearch,
-		getSearchList,
-		delSearch
-	} from '@/api/goods.js';
-	export default {
-		data() {
-			return {
-				search: '',
-				isOpen: false,
-				showClearIcon: false,
-				list: [],
-				goodsList: [],
-				historyType: false,
-				total: '',
-				page: 1
-			}
-		},
-		onLoad() {
-			this.getList()
-		},
-		onShow() {},
-		mounted() {},
-		methods: {
-			toList(name) {
-				let search = '';
-				if (name) {
-					search = name;
-					this.search = name
-				} else {
-					search = this.search;
-				}
-				this.page = 1
-				this.goodsList = []
-				this.getSearch(search)
-			},
-			getSearch(search) {
-				// 搜索商品列表
-				getSearch({
-					search: search,
-					page: this.page
-				}).then((res) => {
-					if (res.code * 1 === 1) {
-						this.goodsList = [...this.goodsList, ...res.data.items]
-					}
-				})
-			},
-			clearIcon() {
-				this.search = '';
-				this.showClearIcon = false;
-			},
-			clearInput(event) {
-				this.search = event.detail.value;
-				if (event.detail.value.length > 0) {
-					this.showClearIcon = true;
-				} else {
-					this.showClearIcon = false;
-				}
-			},
-			history() {
-				const query = uni.createSelectorQuery().in(this)
-				query
-					.select('.search-history')
-					.boundingClientRect(data => {
-						console.log(data.height)
-					})
-					.exec();
-			},
-			getList() {
-				// 获取搜索历史内容
-				getSearchList().then((res) => {
-					if (res.code === 1) {
-						this.list = res.data.my_search;
-					}
-				})
-			},
-			delList() {
-				delSearch().then((res) => {
-					if (res.code === 1) {
-						tools.success('删除成功');
-						this.list = [];
-					}
-				})
-			},
-		},
-	}
+  import cartStore from '@/utils/cartStore.js';
+  import tools from "@/service/tools";
+  import {
+    getSearch,
+    getSearchList,
+    delSearch
+  } from '@/api/goods.js';
+  export default {
+    data() {
+      return {
+        search: '',
+        isOpen: false,
+        showClearIcon: false,
+        list: [],
+        goodsList: [],
+        historyType: false,
+        total: '',
+        page: 1,
+        cartData: { // 添加购物车数据
+          total_price: 0,
+          total_num: 0,
+          goods_list: []
+        }
+      }
+    },
+    onLoad() {
+      cartStore.setShopId();
+      this.getList()
+    },
+    onShow() {
+      this.getCartData();
+    },
+    mounted() {},
+    methods: {
+      scrolltolower() {
+        if (this.goodsList.length < this.total) {
+          this.page += 1;
+          this.getSearch(this.search);
+        }
+      },
+      openBuyCrad() {
+        this.$refs.popupBuy.open()
+      },
+      getCartData() {
+        // 获取购物车数据
+        const shopCart = cartStore.getShopCart(this.shop_id);
+        if (shopCart) {
+          this.cartData = {
+            total_price: shopCart.total_price || 0,
+            total_num: shopCart.total_num || 0,
+            goods_list: shopCart.goods_list || []
+          };
+
+          // 更新商品列表中的数量显示
+          this.updateGoodsNumFromCart();
+        }
+      },
+      // 更新商品列表中的数量显示
+      updateGoodsNumFromCart() {
+        if (!this.goodsList.length) return;
+
+        const shopCart = cartStore.getShopCart(this.shop_id);
+        if (!shopCart) return;
+
+        // 创建商品数量映射
+        const goodsQuantityMap = {};
+        shopCart.goods_list.forEach(item => {
+          if (!goodsQuantityMap[item.goods_id]) {
+            goodsQuantityMap[item.goods_id] = 0;
+          }
+          goodsQuantityMap[item.goods_id] += item.goods_number;
+        });
+
+        // 更新商品列表数量
+        this.goodsList.forEach(goods => {
+          goods.num = goodsQuantityMap[goods.goods_id] || 0;
+        });
+      },
+      toList(name) {
+        let search = '';
+        if (name) {
+          search = name;
+          this.search = name
+        } else {
+          search = this.search;
+        }
+        this.page = 1
+        this.goodsList = []
+        this.getSearch(search)
+      },
+      getSearch(search) {
+        // 搜索商品列表
+        getSearch({
+          search: search,
+          page: this.page
+        }).then((res) => {
+          if (res.code * 1 === 1) {
+            const newGoods = res.data.items || [];
+            // 为每个商品添加购物车数量
+            newGoods.forEach(goods => {
+              goods.num = 0; // 初始化为0
+            });
+            this.total = res.data.total
+            this.goodsList = [...this.goodsList, ...res.data.items]
+            // 更新购物车数量显示
+            this.updateGoodsNumFromCart();
+          }
+        })
+      },
+      addred(type, item) {
+        if (type === 1) {
+          // 减
+          if (item.num <= 0) return;
+
+          item.num--;
+          if (item.num <= 0) {
+            // 从购物车移除
+            cartStore.removeFromCart(item.goods_id, item.goods_spec || []);
+          } else {
+            // 更新数量
+            cartStore.updateQuantity(item.goods_id, item.goods_spec || [], item.num);
+          }
+
+        } else if (type === 2) {
+          // 加
+          item.num++;
+
+          // 判断是否已存在购物车
+          const currentQty = cartStore.getGoodsQuantity(item.goods_id, item.goods_spec || []);
+          if (currentQty <= 0) {
+            // 新商品,添加到购物车
+            cartStore.addToCart(item, item.goods_spec || [], 1);
+          } else {
+            // 已存在,更新数量
+            cartStore.updateQuantity(item.goods_id, item.goods_spec || [], item.num);
+          }
+
+        } else if (type === 3) {
+          // 选规格
+          uni.navigateTo({
+            url: `/pages-takeout/new-specs-info?goods_id=${item.goods_id}&category_id=${item.category_id}`
+          })
+        }
+        // 更新购物车数据
+        this.getCartData();
+      },
+
+      setShoppingSave(item, type) {
+        if (type === 1) {
+          // 加
+          item.goods_number = item.goods_number + 1
+        } else {
+          // 减
+          item.goods_number = item.goods_number - 1
+        }
+
+        if (item.goods_number <= 0) {
+          // 数量为0,移除商品
+          cartStore.removeFromCart(item.goods_id, item.goods_spec || []);
+        } else {
+          // 更新商品数量
+          cartStore.updateQuantity(
+            item.goods_id,
+            item.goods_spec || [],
+            item.goods_number
+          );
+        }
+        // 更新页面数据
+        this.getShopIngList();
+      },
+      getShopIngList() {
+        // 获取购物车列表
+        const shopCart = cartStore.getShopCart(this.shop_id);
+        if (shopCart) {
+          this.cartData = {
+            ...this.cartData,
+            total_price: shopCart.total_price,
+            total_num: shopCart.total_num,
+            goods_list: shopCart.goods_list
+          };
+          // 同步更新商品列表中的数量
+          this.updateGoodsNumFromCart();
+        }
+      },
+      clearIcon() {
+        this.search = '';
+        this.showClearIcon = false;
+      },
+      clearInput(event) {
+        this.search = event.detail.value;
+        if (event.detail.value.length > 0) {
+          this.showClearIcon = true;
+        } else {
+          this.showClearIcon = false;
+        }
+      },
+      getList() {
+        // 获取搜索历史内容
+        getSearchList().then((res) => {
+          if (res.code === 1) {
+            this.list = res.data.my_search;
+          }
+        })
+      },
+      delList() {
+        delSearch().then((res) => {
+          if (res.code === 1) {
+            tools.success('删除成功');
+            this.list = [];
+          }
+        })
+      },
+    },
+  }
 </script>
 
 <style scoped lang="scss">
-	.qk-icon {
-		width: 32rpx;
-		height: 32rpx;
-	}
-
-	.shop-buttom-money {
-		width: 100%;
-		// height: 140rpx;
-	}
-
-	.shop-buttom-money-1 {
-		width: 100%;
-		height: 96rpx;
-		position: relative;
-	}
-
-	.shop-buttom-money-2 {
-		width: 200rpx;
-		height: 80rpx;
-		line-height: 80rpx;
-		background: linear-gradient(270deg, #FF3333 0%, #FE6122 100%);
-	}
-
-	.gwc-img {
-		width: 88rpx;
-		height: 88rpx;
-	}
-
-	.shop-buttom-num {
-		width: 32rpx;
-		height: 32rpx;
-		line-height: 32rpx;
-		border-radius: 50%;
-		position: absolute;
-		top: 0rpx;
-		left: 85rpx;
-		border: 1rpx solid #FFFFFF;
-	}
-
-	.z-3 {
-		position: relative;
-		z-index: 3;
-	}
-
-	.order-bg {
-		width: 100%;
-		height: 17vh;
-		position: fixed;
-		left: 0;
-		top: 0;
-	}
-
-	.hide-h {
-		height: 232rpx !important;
-		overflow: hidden !important;
-	}
-
-	.down {
-		transform: rotate(-90deg);
-		transition: all 0.5s;
-	}
-
-	.up {
-		transform: rotate(90deg);
-		transition: all 0.5s;
-	}
-
-	.view-x {
-		width: 2rpx;
-		height: 20rpx;
-		background-color: #eee;
-		margin: 0 24rpx;
-	}
-
-	.find-item {
-		width: 48%;
-		text-align: left;
-	}
-
-	.list-item {
-		max-height: 688rpx;
-		min-width: 10rpx;
-		height: 56rpx;
-		line-height: 56rpx;
-		background: #F7F8FC;
-		border-radius: 200rpx;
-		margin: 0 8rpx 32rpx 0;
-		box-sizing: border-box;
-		padding: 0 24rpx;
-	}
-
-	.seacrh-bg {
-		position: absolute;
-		top: 0;
-		left: 0;
-		width: 100%;
-		height: 376rpx;
-		filter: blur(80rpx);
-		background-image: linear-gradient(to right, #C9F7FC, #F9F6E0, #F6F5F3);
-		z-index: -1;
-	}
-
-	.wh36 {
-		width: 36rpx;
-		height: 36rpx;
-	}
-
-	.input-box {
-		width: 100%;
-	}
-
-	.input-buttom {
-		width: 120rpx;
-		height: 60rpx;
-		background: linear-gradient(270deg, #FF3333 0%, #FE6122 100%);
-		line-height: 60rpx;
-	}
-
-	.s-input {
-		width: 100%;
-		height: 72rpx;
-		padding: 6rpx 6rpx 6rpx 24rpx;
-	}
-
-	.seacrh-info {
-		margin-top: 20rpx;
-		border-radius: 24rpx 24rpx 0rpx 0rpx;
-	}
-
-	.seacrh-record-index {
-		position: relative;
-	}
-
-	.wh-44 {
-		width: 44rpx;
-		height: 44rpx;
-	}
-
-	.menu-list {
-		width: 100%;
-
-		.goods_img {
-			width: 168rpx;
-			height: 168rpx;
-			border-radius: 12rpx;
-		}
-
-		.menu-list-right {
-			flex: 1;
-
-			.right-only-right {
-				width: 116rpx;
-				height: 44rpx;
-				background: linear-gradient(270deg, #FF3333 0%, #FE6122 100%);
-				line-height: 44rpx;
-				position: relative;
-
-				.selectedNum {
-					position: absolute;
-					right: 2rpx;
-					top: -22rpx;
-					font-size: 24rpx;
-					color: #fff;
-					width: 32rpx;
-					height: 32rpx;
-					line-height: 32rpx;
-					background: #FB3D03;
-					border-radius: 50%;
-				}
-			}
-
-			.right-only-right-red {
-				width: 44rpx;
-				height: 44rpx;
-				line-height: 40rpx;
-				border-radius: 12rpx;
-				border: 1rpx solid #41ABF5;
-				color: #41ABF5;
-			}
-
-			.right-only-right-add {
-				width: 44rpx;
-				height: 44rpx;
-				line-height: 40rpx;
-				background: linear-gradient(117deg, #57CAFF 0%, #41ABF5 100%);
-				border-radius: 12rpx;
-			}
-
-			.right-only-right-2 {
-				min-width: 50rpx;
-			}
-		}
-	}
-</style>
+  .buy-card-item {
+    width: 100%;
+    margin-bottom: 32rpx;
+  }
+
+  .right-only-right-2 {
+    min-width: 50rpx;
+  }
+
+  .pop-shop-buttom-money {
+    width: 100%;
+    // height: 140rpx;
+    background: #ECECEC;
+    padding-left: 24rpx;
+    padding-right: 24rpx;
+    padding-bottom: calc(env(safe-area-inset-bottom) + 12rpx);
+    padding-top: 22rpx;
+    position: fixed;
+    left: 0;
+    bottom: 0;
+    z-index: 5;
+  }
+
+  .goods_img {
+    width: 152rpx;
+    height: 152rpx;
+    border-radius: 12rpx;
+    margin-right: 20rpx;
+  }
+
+  .car-scroll-box {
+    padding: 12rpx 24rpx calc(env(safe-area-inset-bottom) + 48rpx);
+  }
+
+  .buy-card {
+    height: 60vh;
+    border-radius: 24rpx 24rpx 0rpx 0rpx;
+  }
+
+  .buy-card-top {
+    width: 100%;
+    height: 92rpx;
+    background: #FCF5DB;
+    border-radius: 24rpx 24rpx 0rpx 0rpx;
+  }
+
+  .shop-buttom-money-1 {
+    width: 100%;
+    height: 96rpx;
+    position: relative;
+  }
+
+  .qk-icon {
+    width: 32rpx;
+    height: 32rpx;
+  }
+
+  .shop-buttom-money {
+    width: 100%;
+    // height: 140rpx;
+  }
+
+  .shop-buttom-money-1 {
+    width: 100%;
+    height: 96rpx;
+    position: relative;
+  }
+
+  .shop-buttom-money-2 {
+    width: 200rpx;
+    height: 80rpx;
+    line-height: 80rpx;
+    background: linear-gradient(270deg, #FF3333 0%, #FE6122 100%);
+  }
+
+  .gwc-img {
+    width: 88rpx;
+    height: 88rpx;
+  }
+
+  .shop-buttom-num {
+    width: 32rpx;
+    height: 32rpx;
+    line-height: 32rpx;
+    border-radius: 50%;
+    position: absolute;
+    top: 0rpx;
+    left: 85rpx;
+    border: 1rpx solid #FFFFFF;
+  }
+
+  .z-3 {
+    position: relative;
+    z-index: 3;
+  }
+
+  .order-bg {
+    width: 100%;
+    height: 17vh;
+    position: fixed;
+    left: 0;
+    top: 0;
+  }
+
+  .hide-h {
+    height: 232rpx !important;
+    overflow: hidden !important;
+  }
+
+  .down {
+    transform: rotate(-90deg);
+    transition: all 0.5s;
+  }
+
+  .up {
+    transform: rotate(90deg);
+    transition: all 0.5s;
+  }
+
+  .view-x {
+    width: 2rpx;
+    height: 20rpx;
+    background-color: #eee;
+    margin: 0 24rpx;
+  }
+
+  .find-item {
+    width: 48%;
+    text-align: left;
+  }
+
+  .list-item {
+    max-height: 688rpx;
+    min-width: 10rpx;
+    height: 56rpx;
+    line-height: 56rpx;
+    background: #F7F8FC;
+    border-radius: 200rpx;
+    margin: 0 8rpx 32rpx 0;
+    box-sizing: border-box;
+    padding: 0 24rpx;
+  }
+
+  .seacrh-bg {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 376rpx;
+    filter: blur(80rpx);
+    background-image: linear-gradient(to right, #C9F7FC, #F9F6E0, #F6F5F3);
+    z-index: -1;
+  }
+
+  .wh36 {
+    width: 36rpx;
+    height: 36rpx;
+  }
+
+  .input-box {
+    width: 100%;
+  }
+
+  .input-buttom {
+    width: 120rpx;
+    height: 60rpx;
+    background: linear-gradient(270deg, #FF3333 0%, #FE6122 100%);
+    line-height: 60rpx;
+  }
+
+  .s-input {
+    width: 100%;
+    height: 72rpx;
+    padding: 6rpx 6rpx 6rpx 24rpx;
+  }
+
+  .seacrh-info {
+    margin-top: 20rpx;
+    border-radius: 24rpx 24rpx 0rpx 0rpx;
+  }
+
+  .seacrh-record-index {
+    position: relative;
+  }
+
+  .wh-44 {
+    width: 44rpx;
+    height: 44rpx;
+  }
+
+  .menu-list {
+    width: 100%;
+
+    .goods_img {
+      width: 168rpx;
+      height: 168rpx;
+      border-radius: 12rpx;
+    }
+  }
+
+  .menu-list-right {
+    flex: 1;
+  }
+
+  .right-only-right-red {
+    width: 44rpx;
+    height: 44rpx;
+    line-height: 40rpx;
+    border-radius: 12rpx;
+    border: 1rpx solid #41ABF5;
+    color: #41ABF5;
+  }
+
+  .right-only-right-add {
+    width: 44rpx;
+    height: 44rpx;
+    line-height: 40rpx;
+    background: linear-gradient(117deg, #57CAFF 0%, #41ABF5 100%);
+    border-radius: 12rpx;
+  }
+
+  .right-only-right {
+    width: 116rpx;
+    height: 44rpx;
+    background: linear-gradient(270deg, #FF3333 0%, #FE6122 100%);
+    line-height: 44rpx;
+    position: relative;
+  }
+
+  .selectedNum {
+    position: absolute;
+    right: -10rpx;
+    top: -22rpx;
+    font-size: 24rpx;
+    color: #fff;
+    width: 32rpx;
+    height: 32rpx;
+    line-height: 32rpx;
+    background: #FE6B2C;
+    border-radius: 50%;
+    border: 1rpx solid #FFFFFF;
+  }
+</style>

+ 257 - 0
utils/cartStore.js

@@ -0,0 +1,257 @@
+class CartStore {
+  constructor() {
+    this.storageKey = 'shopping_cart';
+    this.currentShopId = ''; // 当前店铺ID
+  }
+  
+  // 设置当前店铺ID
+  setShopId() {
+    this.currentShopId = uni.getStorageSync('shop_id');
+  }
+  
+  // 获取购物车数据
+  getCart() {
+    try {
+      const cartStr = uni.getStorageSync(this.storageKey);
+      if (!cartStr) {
+        return {};
+      }
+      return JSON.parse(cartStr);
+    } catch (e) {
+      console.error('获取购物车失败:', e);
+      return {};
+    }
+  }
+  
+  // 保存购物车数据
+  saveCart(cartData) {
+    try {
+      uni.setStorageSync(this.storageKey, JSON.stringify(cartData));
+    } catch (e) {
+      console.error('保存购物车失败:', e);
+    }
+  }
+  
+  // 获取指定店铺的购物车
+  getShopCart(shopId = null) {
+    const cart = this.getCart();
+    const targetShopId = shopId || this.currentShopId;
+    if (!targetShopId) return null;
+    
+    if (!cart[targetShopId]) {
+      cart[targetShopId] = {
+        total_price: 0,
+        total_num: 0,
+        goods_list: [],
+        shop_info: null
+      };
+      this.saveCart(cart);
+    }
+    
+    return cart[targetShopId];
+  }
+  
+  // 添加商品到购物车
+  addToCart(goods, goodsSpec = [], quantity = 1) {
+    if (!this.currentShopId) {
+      console.error('未设置店铺ID');
+      return false;
+    }
+    
+    const cart = this.getCart();
+    if (!cart[this.currentShopId]) {
+      cart[this.currentShopId] = {
+        total_price: 0,
+        total_num: 0,
+        goods_list: [],
+        shop_info: null
+      };
+    }
+    
+    const shopCart = cart[this.currentShopId];
+    
+    // 生成商品唯一标识(结合商品ID和规格ID)
+    const specIdStr = goodsSpec.length > 0 
+      ? goodsSpec.map(spec => `${spec.id}_${spec.number}`).sort().join('_')
+      : 'no_spec';
+    
+    const goodsKey = `${goods.goods_id}_${specIdStr}`;
+    
+    // 查找是否已存在相同商品
+    const existingIndex = shopCart.goods_list.findIndex(
+      item => this.getGoodsKey(item) === goodsKey
+    );
+    
+    if (existingIndex > -1) {
+      // 已存在,更新数量
+      shopCart.goods_list[existingIndex].goods_number += quantity;
+    } else {
+      // 新商品,添加到列表
+      shopCart.goods_list.push({
+        goods_id: goods.goods_id,
+        goods_name: goods.goods_name || '',
+        goods_image: goods.goods_image || '',
+        price: this.calculatePrice(goods, goodsSpec),
+        goods_number: quantity,
+        goods_attr: this.getSpecAttr(goodsSpec),
+        goods_spec: goodsSpec,
+        category_id: goods.category_id,
+        goods_desc: goods.goods_desc || '',
+        spec_type: goods.spec_type || 1
+      });
+    }
+    
+    // 重新计算总计
+    this.calculateTotals(shopCart);
+    
+    // 保存到本地存储
+    this.saveCart(cart);
+    
+    return true;
+  }
+  
+  // 更新商品数量
+  updateQuantity(goodsId, goodsSpec = [], quantity) {
+    if (!this.currentShopId) return false;
+    
+    const cart = this.getCart();
+    const shopCart = cart[this.currentShopId];
+    if (!shopCart) return false;
+    
+    const specIdStr = goodsSpec.length > 0 
+      ? goodsSpec.map(spec => `${spec.id}_${spec.number}`).sort().join('_')
+      : 'no_spec';
+    
+    const goodsKey = `${goodsId}_${specIdStr}`;
+    
+    const goodsIndex = shopCart.goods_list.findIndex(
+      item => this.getGoodsKey(item) === goodsKey
+    );
+    
+    if (goodsIndex > -1) {
+      if (quantity <= 0) {
+        // 数量为0,移除商品
+        shopCart.goods_list.splice(goodsIndex, 1);
+      } else {
+        // 更新数量
+        shopCart.goods_list[goodsIndex].goods_number = quantity;
+      }
+      
+      // 重新计算总计
+      this.calculateTotals(shopCart);
+      this.saveCart(cart);
+      return true;
+    }
+    
+    return false;
+  }
+  
+  // 从购物车移除商品
+  removeFromCart(goodsId, goodsSpec = []) {
+    return this.updateQuantity(goodsId, goodsSpec, 0);
+  }
+  
+  // 清空当前店铺购物车
+  clearCurrentShopCart() {
+    if (!this.currentShopId) return false;
+    
+    const cart = this.getCart();
+    cart[this.currentShopId] = {
+      total_price: 0,
+      total_num: 0,
+      goods_list: []
+    };
+    
+    this.saveCart(cart);
+    return true;
+  }
+  
+  // 计算商品价格
+  calculatePrice(goods, goodsSpec = []) {
+    let price = goods.seckill_money > 0 ? Number(goods.seckill_money) : Number(goods.price);
+    // 如果有规格,累加规格价格
+    if (goodsSpec.length > 0) {
+      goodsSpec.forEach(spec => {
+        // 这里需要根据实际情况获取规格价格
+        // 假设规格信息中包含价格
+        if (spec.price) {
+          price += Number(spec.price) * (spec.number || 1);
+        }
+      });
+    }
+    
+    return Number(price).toFixed(2);
+  }
+  
+  // 获取规格描述
+  getSpecAttr(goodsSpec = []) {
+    if (goodsSpec.length === 0) return '';
+    return goodsSpec.map(spec => spec.name || '').join('、');
+  }
+  
+  // 生成商品唯一键
+  getGoodsKey(goodsItem) {
+    const specIdStr = goodsItem.goods_spec && goodsItem.goods_spec.length > 0
+      ? goodsItem.goods_spec.map(spec => `${spec.id}_${spec.number}`).sort().join('_')
+      : 'no_spec';
+    
+    return `${goodsItem.goods_id}_${specIdStr}`;
+  }
+  
+  // 计算购物车总计
+  calculateTotals(shopCart) {
+    let total_price = 0;
+    let total_num = 0;
+    
+    shopCart.goods_list.forEach(item => {
+      total_price += item.price * item.goods_number;
+      total_num += item.goods_number;
+    });
+    
+    shopCart.total_price = parseFloat(total_price.toFixed(2));
+    shopCart.total_num = total_num;
+  }
+  
+  // 获取商品在购物车中的数量
+  getGoodsQuantity(goodsId, goodsSpec = []) {
+    if (!this.currentShopId) return 0;
+    
+    const cart = this.getCart();
+    const shopCart = cart[this.currentShopId];
+    if (!shopCart) return 0;
+    
+    const specIdStr = goodsSpec.length > 0 
+      ? goodsSpec.map(spec => `${spec.id}_${spec.number}`).sort().join('_')
+      : 'no_spec';
+    
+    const goodsKey = `${goodsId}_${specIdStr}`;
+    
+    const goodsItem = shopCart.goods_list.find(
+      item => this.getGoodsKey(item) === goodsKey
+    );
+    
+    return goodsItem ? goodsItem.goods_number : 0;
+  }
+  
+  // 获取指定店铺购物车中某商品的总数量(所有规格合并)
+  getGoodsTotalQuantity(goodsId) {
+    if (!this.currentShopId) return 0;
+    
+    const cart = this.getCart();
+    const shopCart = cart[this.currentShopId];
+    if (!shopCart) return 0;
+    
+    let total = 0;
+    shopCart.goods_list.forEach(item => {
+      if (item.goods_id === goodsId) {
+        total += item.goods_number;
+      }
+    });
+    
+    return total;
+  }
+}
+
+// 创建单例
+const cartStore = new CartStore();
+export default cartStore;