修复临时菜和数签子显示问题,修复下单页面商品弹窗问题

This commit is contained in:
2025-12-26 16:14:42 +08:00
parent ac7af51a92
commit bde30fa70c
10 changed files with 206 additions and 88 deletions

View File

@@ -35,8 +35,8 @@ export default async (params) => {
}); });
} }
// #ifdef H5 // #ifdef H5
uni.cache.set('token', 'b61c8b0f1c9d47ad924e33c48b496ce6') uni.cache.set('token', '1b5e8baf0cc1492a858a208f113d0971')
uni.cache.set('userInfo',{"acQrcodeValidTime":"2025-11-17 17:57:16","alipayOpenId":"","birthDay":"2025-10-17","createTime":"2024-07-06 11:30:16","distributionAmount":0,"headImg":"https://thirdwx.qlogo.cn/mmopen/vi_32/POgEwh4mIHO4nibH0KlMECNjjGxQUq24ZEaGT4poC6icRiccVGKSyXwibcPq4BWmiaIGuG1icwxaQX6grC9VemZoJ8rg/132","id":"36434","idCard":"612401199810058031","isAc":0,"lastLoginTime":"2025-12-25 11:41:15","nickName":"微信用户","password":"","payPwd":"e10adc3949ba59abbe56e057f20f883e","phone":"18049104914","realName":"叶明飞","sex":1,"status":1,"updateTime":"2025-12-25 09:41:58","usePayPwd":0,"wechatAcOpenId":"1111","wechatAcQrcode":"","wechatOpenId":"or1l86yipGvwyfPhrKIAcQuSfAV8"}) uni.cache.set('userInfo',{"acQrcodeValidTime":"2026-01-13 13:35:59","alipayOpenId":"","birthDay":"2025-12-25","createTime":"2024-03-13 10:56:40","distributionAmount":0,"headImg":"https://thirdwx.qlogo.cn/mmopen/vi_32/POgEwh4mIHO4nibH0KlMECNjjGxQUq24ZEaGT4poC6icRiccVGKSyXwibcPq4BWmiaIGuG1icwxaQX6grC9VemZoJ8rg/132","id":"36689","idCard":"","isAc":0,"lastLoginTime":"2025-12-26 10:01:12","nickName":"微信用户","password":"","payPwd":"e10adc3949ba59abbe56e057f20f883e","phone":"18049104914","realName":"","sex":1,"status":1,"updateTime":"2025-12-26 09:59:31","usePayPwd":0,"wechatAcOpenId":"","wechatAcQrcode":"http://weixin.qq.com/q/029s5JtP1xfmJ1g_HDxFco","wechatOpenId":"or1l86yipGvwyfPhrKIAcQuSfAV8"})
// #endif // #endif
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const timeoutDuration = params.timeout || 10000; // 可以通过 params 传入超时时间,默认 10 秒 const timeoutDuration = params.timeout || 10000; // 可以通过 params 传入超时时间,默认 10 秒

View File

@@ -1,5 +1,5 @@
// const debug = process.env.NODE_ENV == 'development' ? true : false; // const debug = process.env.NODE_ENV == 'development' ? true : false;
const debug = true; // false线上 true本地 const debug = false; // false线上 true本地
let baseUrl = '' let baseUrl = ''
let baseUrlwws = '' let baseUrlwws = ''

View File

@@ -45,7 +45,7 @@
</view> </view>
</view> </view>
<view> <view>
<view <!-- <view
class="u-p-t-16 u-p-b-20 u-flex u-p-l-28 u-p-r-28" class="u-p-t-16 u-p-b-20 u-flex u-p-l-28 u-p-r-28"
style="align-items: baseline; justify-content: flex-end" style="align-items: baseline; justify-content: flex-end"
> >
@@ -53,9 +53,9 @@
<text class="font-16 color-333 font-700" > <text class="font-16 color-333 font-700" >
{{ totalIncome }}</text {{ totalIncome }}</text
> >
</view> </view> -->
<view class="list"> <view class="list u-m-t-32">
<view v-for="(item, index) in state.records" :key="index" class="item"> <view v-for="(item, index) in state.records" :key="index" class="item">
<view class="u-flex justify-between"> <view class="u-flex justify-between">
<view> <view>

View File

@@ -7,14 +7,21 @@
<view class="limitDiscount" v-if="showLimitDiscount(item)" <view class="limitDiscount" v-if="showLimitDiscount(item)"
>限时折扣</view >限时折扣</view
> >
<up-image <up-image
width="76" width="76"
height="76" height="76"
radius="6" radius="6"
:src="item.productImg" :src="item.productImg"
v-if="item.productId != -999" v-if="item.isTemporary != 1&&item.is_temporary!=1"
></up-image> ></up-image>
<up-image
v-else-if="(item.isTemporary||item.is_temporary) &&(item.product_name=='签子'||item.productName=='签子')"
width="76"
height="76"
radius="6"
src="https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/5/b97054debd83486ab7ad8e20ca6a360a.png"
mode="heightFix"
></up-image>
<up-image <up-image
width="76" width="76"
height="76" height="76"
@@ -25,7 +32,7 @@
></up-image> ></up-image>
</view> </view>
<view class="info"> <view class="info">
<text class="productName">{{ item.productName }}</text> <text class="productName">{{ item.productName||item.product_name }}</text>
<text class="productSkuName" v-if="item.skuName">{{ <text class="productSkuName" v-if="item.skuName">{{
item.skuName item.skuName
}}</text> }}</text>
@@ -55,18 +62,22 @@
<view class="price"> <view class="price">
<view class="priceAmount"> <view class="priceAmount">
¥ ¥
<goodsPrice <goodsPrice
v-if="!item.is_temporary&&!item.isTemporary"
:cart="item" :cart="item"
:limitDiscount="limitDiscount" :limitDiscount="limitDiscount"
:shopUserInfo="shopUserInfo" :shopUserInfo="shopUserInfo"
:shopInfo="shopInfo" :shopInfo="shopInfo"
idKey="product_id" idKey="product_id"
></goodsPrice> ></goodsPrice>
<text v-else>{{item.discount_sale_amount}}</text>
<view class="old-price" v-if="showLimitDiscount(item)" <view class="old-price" v-if="showLimitDiscount(item)"
>¥{{ item.salePrice }}</view >¥{{ item.salePrice }}</view
> >
</view> </view>
<view class="num">x{{ item.num }}</view> <view class="num" v-if="!item.is_temporary&&!item.isTemporary">x{{ item.num }}</view>
<view class="num" v-else>x{{ item.number }}</view>
</view> </view>
</view> </view>
</view> </view>

View File

@@ -70,7 +70,10 @@
<view class="item" v-for="item in value" :key="item.id"> <view class="item" v-for="item in value" :key="item.id">
<view class="cover"> <view class="cover">
<up-image width="76" height="76" radius="16" :src="item.productImg" <up-image width="76" height="76" radius="16" :src="item.productImg"
v-if="item.productId!=-999"></up-image> v-if="!item.isTemporary"></up-image>
<u-image width="56" height="56" radius="10"
v-else-if="item.isTemporary &&item.productName=='签子'"
src="https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/5/b97054debd83486ab7ad8e20ca6a360a.png"></u-image>
<up-image width="76" height="76" radius="16" <up-image width="76" height="76" radius="16"
:src="'https://czg-qr-order.oss-cn-beijing.aliyuncs.com/confirmOrder/table.png'" :src="'https://czg-qr-order.oss-cn-beijing.aliyuncs.com/confirmOrder/table.png'"
mode="heightFix" v-else></up-image> mode="heightFix" v-else></up-image>
@@ -174,8 +177,8 @@
<view>{{listinfo.packFeess}}</view> <view>{{listinfo.packFeess}}</view>
</view> </view>
</view> </view>
<!-- isTableFee == 0是不免除 --> <!-- isTableFee == 0是不免除 -->
<view class="cell-item" <view class="cell-item"
v-if="ordershopUserInfo.isTableFee == 0 && is_type == 0 && listinfo.Seatcharge != 0"> v-if="ordershopUserInfo.isTableFee == 0 && is_type == 0 && listinfo.Seatcharge != 0">
@@ -198,7 +201,7 @@
<text class="price"> {{listinfo.payAmount}} </text> <text class="price"> {{listinfo.payAmount}} </text>
</view> </view>
</view> </view>

View File

@@ -63,7 +63,11 @@
<view class="shop-item"> <view class="shop-item">
<view class="cover" v-for="(item1,index1) in item.goods" :key="index1"> <view class="cover" v-for="(item1,index1) in item.goods" :key="index1">
<u-image width="56" height="56" radius="10" :src='item1.productImg' <u-image width="56" height="56" radius="10" :src='item1.productImg'
v-if="item1.productId!=-999"></u-image> v-if="!item.isTemporary"></u-image>
<u-image width="56" height="56" radius="10"
v-else-if="item.isTemporary &&item.productName=='签子'"
src="https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/5/b97054debd83486ab7ad8e20ca6a360a.png"
></u-image>
<u-image width="112" height="112" radius="20" <u-image width="112" height="112" radius="20"
:src="'https://czg-qr-order.oss-cn-beijing.aliyuncs.com/confirmOrder/table.png'" :src="'https://czg-qr-order.oss-cn-beijing.aliyuncs.com/confirmOrder/table.png'"
mode="heightFix" v-else></u-image> mode="heightFix" v-else></u-image>
@@ -130,32 +134,37 @@
import { import {
useNavbarStore useNavbarStore
} from '@/stores/navbarStore'; } from '@/stores/navbarStore';
import {APIshopUserInfo} from '@/common/api/member.js' import {
APIshopUserInfo
} from '@/common/api/member.js'
const store = useNavbarStore(); const store = useNavbarStore();
async function agignOrder(item){ async function agignOrder(item) {
await APIshopUserInfo({ await APIshopUserInfo({
shopId:item.shopId shopId: item.shopId
}).then(shopUserInfo=>{ }).then(shopUserInfo => {
if(shopUserInfo){ if (shopUserInfo) {
uni.cache.set("dinersNum", 1); uni.cache.set("dinersNum", 1);
uni.cache.set("tableCode", shopUserInfo.id); uni.cache.set("tableCode", shopUserInfo.id);
uni.cache.set("shopId", item.shopId); uni.cache.set("shopId", item.shopId);
uni.navigateTo({ uni.navigateTo({
url: "/pages/product/index?type=beforehand&order_id="+item.id+'&one_more_order=1', url: "/pages/product/index?type=beforehand&order_id=" + item.id +
'&one_more_order=1',
}); });
} }
}) })
} }
function totalGoodsNum(arr){
if(!arr){ function totalGoodsNum(arr) {
if (!arr) {
return 0 return 0
} }
return arr.reduce((prve,cur)=>{ return arr.reduce((prve, cur) => {
return prve+cur.num return prve + cur.num
},0) }, 0)
} }
function isRemoveOrder(item) { function isRemoveOrder(item) {
uni.showModal({ uni.showModal({
title: '提示', title: '提示',
@@ -578,7 +587,8 @@
.ml-20 { .ml-20 {
margin-left: 20rpx; margin-left: 20rpx;
} }
.take_food_number{
.take_food_number {
padding: 20rpx; padding: 20rpx;
background-color: #F8F8F8; background-color: #F8F8F8;
margin-left: 36rpx; margin-left: 36rpx;

View File

@@ -1,9 +1,9 @@
<template> <template>
<up-popup :show="visible" :round="20" mode="bottom" @close="close" :close-on-click-overlay="true"> <up-popup :show="visible" :round="20" mode="bottom" @close="close" :close-on-click-overlay="true">
<view class="" style="height: calc(100vh - 70px);"> <view class="u-flex u-flex-col box" :style="{maxHeight:boxHeight+'px'}">
<view class="shop_sku" > <view class="shop_sku">
<scroll-view scroll-y style="height: calc(100vh - 240px); width: 100%"> <scroll-view scroll-y class="scroll-view" :style="{maxHeight:boxHeight +'px'}">
<!-- <view class="positionabsolute"> <!-- <view class="positionabsolute">
<up-icon name="arrow-down" @click="close" color="#333" size="22"></up-icon> <up-icon name="arrow-down" @click="close" color="#333" size="22"></up-icon>
</view> --> </view> -->
@@ -13,13 +13,14 @@
<up-swiper :list="goods.images" @change="swiperChange" :current="swiperCurrent" radius="6px" <up-swiper :list="goods.images" @change="swiperChange" :current="swiperCurrent" radius="6px"
height="250" @click="prveImgs(goods.images, goods.images[swiperCurrent])"> height="250" @click="prveImgs(goods.images, goods.images[swiperCurrent])">
</up-swiper> </up-swiper>
<view class="shop_sku_name">{{ goods.name }}</view> <view class="shop_sku_name">{{ goods.name }}</view>
<view class="shop_sku_description" v-if="isSkuGoods"> <view class="shop_sku_description" v-if="isSkuGoods">
{{ goods.shortTitle ? goods.shortTitle : '' }} {{ goods.shortTitle ? goods.shortTitle : '' }}
</view> </view>
<view v-if="goods.type != 'package'"> <view v-if="goods.type != 'package'">
<view class="shop_sku_box" v-for="(specOptions, specType) in goods.selectSpecInfo" :key="specType"> <view class="shop_sku_box" v-for="(specOptions, specType) in goods.selectSpecInfo"
:key="specType">
<view class="shop_sku_box_name"> <view class="shop_sku_box_name">
{{ specType }} {{ specType }}
</view> </view>
@@ -45,11 +46,14 @@
<view v-else> <view v-else>
<view class="shop_sku_box"> <view class="shop_sku_box">
<view v-for="(setmenu, setmenuindex) in goods.groupSnap" :key="setmenuindex"> <view v-for="(setmenu, setmenuindex) in goods.groupSnap" :key="setmenuindex">
<view class="shop_sku_box_name">{{ setmenu.title }} {{ setmenu.count }} <view class="shop_sku_box_name" v-if="goods.groupType!=0">{{ setmenu.title }}
{{ setmenu.count }}
{{ setmenu.number }}</view> {{ setmenu.number }}</view>
<view class="shop_sku_box_name" v-else>{{ setmenu.title }} {{ setmenu.count }}件商品</view>
<view class="flex-start"> <view class="flex-start">
<view class="shop_sku_box_item" v-for="(option, goodsid) in setmenu.goods" <view class="shop_sku_box_item" v-for="(option, goodsid) in setmenu.goods"
:key="goodsid" @click="goodsidClick(setmenuindex, option, goodsid)" :class="{ :key="goodsid" @click="goodsidClick(setmenuindex, option, goodsid,setmenu)"
:class="{
shop_sku_box_item_selected: isOptionSelected(setmenuindex, option) shop_sku_box_item_selected: isOptionSelected(setmenuindex, option)
}" :disabled="isMaxSelected(setmenuindex) && !isOptionSelected(setmenuindex, option)"> }" :disabled="isMaxSelected(setmenuindex) && !isOptionSelected(setmenuindex, option)">
{{ option.proName }} {{ option.proName }}
@@ -62,7 +66,7 @@
</view> </view>
</view> </view>
</view> </view>
<!-- 推荐搭配 --> <!-- 推荐搭配 -->
<view class="u-m-t-48 u-p-30" v-if="goods.relatedRecommendJson.length"> <view class="u-m-t-48 u-p-30" v-if="goods.relatedRecommendJson.length">
<view class="font-bold u-font-32 ">推荐搭配</view> <view class="font-bold u-font-32 ">推荐搭配</view>
@@ -92,13 +96,13 @@
<view class="u-line-2 name u-m-t-10 u-font-32 font-500"> <view class="u-line-2 name u-m-t-10 u-font-32 font-500">
{{product.name}} {{product.name}}
</view> </view>
<view class="u-flex u-row-between"> <view class="u-flex u-row-between">
<view class="font-bold u-flex u-col-baseline"> <view class="font-bold u-flex u-col-baseline">
<text class="u-font-24"></text> <text class="u-font-24"></text>
<view class="u-font-32"> <view class="u-font-32">
<GoodsPrice :limitDiscount="cartStore.limitTimeDiscount" <GoodsPrice :limitDiscount="cartStore.limitTimeDiscount"
:cart="returnFirstSku(product)" :shopUserInfo="shopUserInfo" :cart="returnFirstSku(product)" :shopUserInfo="shopUserInfo"
:shopInfo="shopInfo"></GoodsPrice> :shopInfo="shopInfo"></GoodsPrice>
@@ -111,17 +115,81 @@
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</view> </view>
<!-- 占位 -->
<view class="shop_bottom" style="opacity: 0;">
<view class="flex-between">
<view class="price price-sku" v-if="goods.type != 'package' && goods.result">
<text class="i"></text>
<view class="num">
<GoodsPrice :limitDiscount="cartStore.limitTimeDiscount" :cart="selSku"
:shopUserInfo="shopUserInfo" :shopInfo="shopInfo"></GoodsPrice>
</view>
<text class="num" v-if="false">
{{
shopInfo.isVip == 1 && shopInfo.isMemberPrice == 1
? goods.result.memberPrice || goods.result.salePrice
: goods.result.salePrice
}}
</text>
<text class="i" v-if="goods.unitName">/{{ goods.unitName }}</text>
<text
v-if="goods.result.suitNum > 1">{{ goods.result.suitNum }}{{ goods.result.unitName }}起点</text>
</view>
<view class="price price-package" v-else>
<text class="i"></text>
<view class="num">
<GoodsPrice :limitDiscount="cartStore.limitTimeDiscount" :cart="goods"
:shopUserInfo="shopUserInfo" :shopInfo="shopInfo"></GoodsPrice>
</view>
<text class="num" v-if="false">
{{
shopInfo.isVip == 1 && shopInfo.isMemberPrice == 1
? goods.memberPrice || goods.salePrice
: goods.salePrice
}}
</text>
<text class="i" v-if="goods.unitName">/{{ goods.unitName }}</text>
<text v-if="goods.suitNum > 1">{{ goods.suitNum }}{{ goods.unitName }}起点</text>
</view>
<view class="operation-wrap" v-if="goods.type != 'package'&&stockNumberIsFull(goods)">
<view class="btn">
<up-icon name="minus-circle-fill" color="#E9AB7A" size="25"
v-if="shopCartNumber > 0"></up-icon>
<view class="btnClick"></view>
</view>
<text class="num">{{ shopCartNumber }}</text>
<view class="btn">
<up-icon name="plus-circle-fill" color="#E9AB7A" size="25"></up-icon>
<view class="btnClick"></view>
</view>
</view>
</view>
<view class="shop_skuselect flex-start" v-if="selectedSpecsStr">
<view class="shop_skuselectname">{{ selectedSpecsStr }}</view>
</view>
<view class="addShopping">
库存不足
</view>
</view>
<!-- <view style="width: 100%;height: 123px;"></view> -->
</scroll-view> </scroll-view>
<view class="shop_bottom">
<view class="shop_bottom" style="position: absolute;bottom: 0;">
<view class="flex-between"> <view class="flex-between">
<view class="price price-sku" v-if="goods.type != 'package' && goods.result"> <view class="price price-sku" v-if="goods.type != 'package' && goods.result">
<text class="i"></text> <text class="i"></text>
@@ -129,7 +197,7 @@
<GoodsPrice :limitDiscount="cartStore.limitTimeDiscount" :cart="selSku" <GoodsPrice :limitDiscount="cartStore.limitTimeDiscount" :cart="selSku"
:shopUserInfo="shopUserInfo" :shopInfo="shopInfo"></GoodsPrice> :shopUserInfo="shopUserInfo" :shopInfo="shopInfo"></GoodsPrice>
</view> </view>
<text class="num" v-if="false"> <text class="num" v-if="false">
{{ {{
shopInfo.isVip == 1 && shopInfo.isMemberPrice == 1 shopInfo.isVip == 1 && shopInfo.isMemberPrice == 1
@@ -141,24 +209,19 @@
<text <text
v-if="goods.result.suitNum > 1">{{ goods.result.suitNum }}{{ goods.result.unitName }}起点</text> v-if="goods.result.suitNum > 1">{{ goods.result.suitNum }}{{ goods.result.unitName }}起点</text>
</view> </view>
<view class="price price-package" v-else> <view class="price price-package " v-else>
<text class="i"></text> <text class="i"></text>
<view class="num"> <view class="num">
<GoodsPrice :limitDiscount="cartStore.limitTimeDiscount" :cart="goods" <GoodsPrice :limitDiscount="cartStore.limitTimeDiscount" :cart="goods"
:shopUserInfo="shopUserInfo" :shopInfo="shopInfo"></GoodsPrice> :shopUserInfo="shopUserInfo" :shopInfo="shopInfo"></GoodsPrice>
</view> </view>
<text class="num" v-if="false">
{{
shopInfo.isVip == 1 && shopInfo.isMemberPrice == 1
? goods.memberPrice || goods.salePrice
: goods.salePrice
}}
</text>
<text class="i" v-if="goods.unitName">/{{ goods.unitName }}</text> <text class="i" v-if="goods.unitName">/{{ goods.unitName }}</text>
<text v-if="goods.suitNum > 1">{{ goods.suitNum }}{{ goods.unitName }}起点</text> <text v-if="goods.suitNum > 1">{{ goods.suitNum }}{{ goods.unitName }}起点</text>
</view> </view>
<view v-if="goods.type == 'package'&&goods.groupType==1">
<view class="operation-wrap" v-if="goods.type != 'package'&&stockNumberIsFull(goods)">
</view>
<view class="operation-wrap" v-else-if="stockNumberIsFull(goods)">
<view class="btn"> <view class="btn">
<up-icon name="minus-circle-fill" color="#E9AB7A" size="25" <up-icon name="minus-circle-fill" color="#E9AB7A" size="25"
v-if="shopCartNumber > 0"></up-icon> v-if="shopCartNumber > 0"></up-icon>
@@ -181,11 +244,13 @@
</template> </template>
<template v-else> <template v-else>
<template v-if="isSkuGoods"> <template v-if="isSkuGoods">
<view v-if="goods.type == 'package'" class="addShopping package" <view v-if="goods.type == 'package' && goods.groupType!=0" class="addShopping package"
:class=" allConditionsSatisfied ? 'active' : ''" @click="submitSelection(goods)"> :class=" allConditionsSatisfied ? 'active' : ''" @click="submitSelection(goods)">
添加到购物车 添加到购物车
</view> </view>
<view v-else class="sku addShopping" :class="shopCartNumber > 0 && canSubmit ? 'active' : ''"
<view v-else class="sku addShopping"
:class="shopCartNumber > 0 && canSubmit ? 'active' : ''"
@click="submitSelection(goods)"> @click="submitSelection(goods)">
添加到购物车 添加到购物车
</view> </view>
@@ -197,12 +262,10 @@
</view> </view>
</template> </template>
</template> </template>
</view> </view>
</view> </view>
</view> </view>
</up-popup> </up-popup>
</template> </template>
@@ -236,6 +299,7 @@
import { import {
computed, computed,
inject, inject,
onMounted,
ref, ref,
watch watch
} from "vue"; } from "vue";
@@ -266,7 +330,10 @@
}); });
// / 选择规格的方法 // / 选择规格的方法
const goodsidClick = (setmenuindex, option, goodsid) => { const goodsidClick = (setmenuindex, option, goodsid, setmenu) => {
if (props.goods.groupType == 0) {
return
}
if (!selectedOptions.value[setmenuindex]) { if (!selectedOptions.value[setmenuindex]) {
// 如果 selectedOptions.value[setmenuindex] 不存在,初始化一个空数组 // 如果 selectedOptions.value[setmenuindex] 不存在,初始化一个空数组
selectedOptions.value[setmenuindex] = []; selectedOptions.value[setmenuindex] = [];
@@ -278,11 +345,14 @@
} else if (!isMaxSelected(setmenuindex)) { } else if (!isMaxSelected(setmenuindex)) {
// 如果未达到最大选择数量,添加到选中列表 // 如果未达到最大选择数量,添加到选中列表
selectedOptions.value[setmenuindex].push(option); selectedOptions.value[setmenuindex].push(option);
} else if (isMaxSelected(setmenuindex) && setmenu.number == 1) {
selectedOptions.value[setmenuindex] = [option]
} }
}; };
// 计算所有选中条件是否都符合 // 计算所有选中条件是否都符合
const allConditionsSatisfied = computed(() => { const allConditionsSatisfied = computed(() => {
console.log('props.goods', props.goods);
// 检查 specifications.item.groupSnap 是否存在 // 检查 specifications.item.groupSnap 是否存在
if (!props.goods?.groupSnap) { if (!props.goods?.groupSnap) {
return false; return false;
@@ -306,6 +376,8 @@
const selSku = ref(null) const selSku = ref(null)
// 处理规格选择的方法 // 处理规格选择的方法
const selectSpec = async (specType, option) => { const selectSpec = async (specType, option) => {
console.log('specType', specType)
console.log('option', option)
// 规格清零 // 规格清零
shopCartNumber.value = 0; shopCartNumber.value = 0;
@@ -405,6 +477,9 @@
const visible = defineModel({ const visible = defineModel({
default: false, default: false,
}); });
function stockNumberIsFull(item) { function stockNumberIsFull(item) {
@@ -542,7 +617,7 @@
if (goods.type != 'package' && shopCartNumber.value <= 0) { if (goods.type != 'package' && shopCartNumber.value <= 0) {
return; return;
} }
if (goods.type == 'package' && !allConditionsSatisfied.value) { if (goods.type == 'package' && goods.groupType!=0 && !allConditionsSatisfied.value) {
return return
} }
@@ -649,16 +724,30 @@
} }
} }
}; };
const boxHeight = ref(500)
onMounted(async () => {
// #ifdef MP-WEIXIN || MP-ALIPAY
const menuButtonInfo = uni.getMenuButtonBoundingClientRect();
const systemInfo = uni.getSystemInfoSync();
const statusBarHeight = systemInfo.statusBarHeight;
// 计算标题的垂直偏移量
const verticalOffset = menuButtonInfo.top;
const titleHeight = menuButtonInfo.height;
console.log('systemInfo', systemInfo);
boxHeight.value = systemInfo.windowHeight - verticalOffset - menuButtonInfo.height - systemInfo
.safeAreaInsets.bottom - 4
// #endif
})
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.box { .box {
height: 100vh; background: transparent;
display: flex;
flex-direction: column;
.top { .scroll-view {}
width: 750rpx;
}
} }
.shop_sku { .shop_sku {
@@ -668,7 +757,11 @@
border-radius: 20rpx; border-radius: 20rpx;
background: #fff; background: #fff;
box-sizing: border-box; box-sizing: border-box;
display: flex;
flex-direction: column;
justify-content: space-between;
overflow: hidden; overflow: hidden;
.positionabsolute { .positionabsolute {
position: absolute; position: absolute;
top: 30rpx; top: 30rpx;
@@ -803,6 +896,7 @@
background-color: #fff; background-color: #fff;
box-shadow: 0rpx -6rpx 14rpx 2rpx rgba(0, 0, 0, 0.1); box-shadow: 0rpx -6rpx 14rpx 2rpx rgba(0, 0, 0, 0.1);
.price { .price {
display: flex; display: flex;
align-items: flex-end; align-items: flex-end;

View File

@@ -26,17 +26,18 @@
<view class="limit-discount" v-if="showLimitDiscount(item)"> <view class="limit-discount" v-if="showLimitDiscount(item)">
限时折扣 限时折扣
</view> </view>
<up-image :src="item.coverImg" width="124rpx" height="124rpx" mode="aspectFill" <up-image v-if="!item.cartListinfo.is_temporary" :src="item.coverImg" width="124rpx" height="124rpx" mode="aspectFill"
radius="10"></up-image> radius="10"></up-image>
<up-image v-else-if="item.cartListinfo.is_temporary&&item.cartListinfo.product_name=='签子'" src="https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/5/b97054debd83486ab7ad8e20ca6a360a.png" width="124rpx" height="124rpx" mode="aspectFill"
radius="10"></up-image>
<up-image v-else width="124rpx" height="124rpx" mode="aspectFill"
radius="10"></up-image>
</view> </view>
<view class="info"> <view class="info">
<view class="name"> <view class="name" v-if=" item.cartListinfo.is_temporary == 1">
{{ {{item.cartListinfo.product_name||item.cartListinfo.name|| item.name}}
item.cartListinfo.is_temporary == 1
? "临时菜"
: item.name
}}
</view> </view>
<view class="name" v-else>{{item.name}}</view>
<view class="select-sku-wrap" v-if="item.type == 'sku'"> <view class="select-sku-wrap" v-if="item.type == 'sku'">
<text v-for="i in item.skuList" :key="i.id"> <text v-for="i in item.skuList" :key="i.id">
{{ item.cartListinfo.sku_id == i.id ? i.name : "" }} {{ item.cartListinfo.sku_id == i.id ? i.name : "" }}
@@ -206,9 +207,6 @@
limitDiscount: props.limitDiscount.id ? props.limitDiscount : null, limitDiscount: props.limitDiscount.id ? props.limitDiscount : null,
shopUserInfo: shopUserInfo, shopUserInfo: shopUserInfo,
}); });
if (goods.name == "纯生纯生纯生") {
console.log("returnRealPrice", price);
}
return price; return price;
} }

View File

@@ -750,7 +750,7 @@
useCartStore useCartStore
} from '@/stores/order.js'; } from '@/stores/order.js';
import { import {
computed computed, provide
} from 'vue'; } from 'vue';
const cartStore = useCartStore(); const cartStore = useCartStore();
/** /**
@@ -762,7 +762,6 @@
proxy proxy
} = getCurrentInstance(); } = getCurrentInstance();
//点单智能推荐 //点单智能推荐
function onBuyClick(item) { function onBuyClick(item) {
let index = -1; let index = -1;
@@ -802,7 +801,6 @@
/** /**
* 通用数据合集 start * 通用数据合集 start
*/ */
const showGoodsModal = ref(false)
// 门店信息 // 门店信息
const shopInfo = reactive({}); const shopInfo = reactive({});
@@ -1450,7 +1448,6 @@
show:true, show:true,
goods:specifications.item goods:specifications.item
}) })
// showGoodsModal.value=true
}; };
// 判断商品是否在可售时间内 // 判断商品是否在可售时间内
const isProductAvailable = async (sellDaysStr, startTimeStr, endTimeStr) => { const isProductAvailable = async (sellDaysStr, startTimeStr, endTimeStr) => {
@@ -1692,12 +1689,13 @@
const goodsSkuList = goods ? goods.skuList : [] const goodsSkuList = goods ? goods.skuList : []
const findSku = goodsSkuList.find(sku => sku.id == v.sku_id) const findSku = goodsSkuList.find(sku => sku.id == v.sku_id)
const memberPrice = findSku ? findSku.memberPrice : 0 const memberPrice = findSku ? findSku.memberPrice : 0
const is_temporary=v.is_temporary||v.isTemporary
const is_time_discount = limitUtils.canUseLimitTimeDiscount({ const is_time_discount = limitUtils.canUseLimitTimeDiscount({
...v, ...v,
memberPrice memberPrice
}, cartStore.limitTimeDiscount, shopInfo, }, cartStore.limitTimeDiscount, shopInfo,
shopUserInfo.value, 'product_id'); shopUserInfo.value, 'product_id');
if (!goods) { if (!goods&&!is_temporary) {
console.log('删除未匹配到的商品', { console.log('删除未匹配到的商品', {
id: v.id, id: v.id,
operate_type: "del", operate_type: "del",

View File

@@ -327,9 +327,13 @@ export const useCartsStore = defineStore("cart", () => {
} }
carts.value = arr carts.value = arr
.map((v) => { .map((v) => {
const item = getProductDetails(v); const item = getProductDetails(v);
if (!item) { const is_temporary=v.is_temporary||v.isTemporary
if(is_temporary){
return v
}
if (!item&&!is_temporary) {
socketSendMsg({ socketSendMsg({
id: v.id, id: v.id,
operate_type: "del", operate_type: "del",