部分显示问题调整,问题修复,增加购物车初始化和商品更新未找到对应商品发送删除消息

This commit is contained in:
2025-12-24 09:21:14 +08:00
parent 9a09ac901f
commit addb9f0e75
12 changed files with 319 additions and 237 deletions

View File

@@ -58,7 +58,8 @@
限时折扣{{ limitDiscountCountdown }}</view>
<!-- <view class="limitDiscount" v-if="item.is_time_discount">
限时折扣{{ limitDiscountCountdown }}</view> -->
<view class="stock_warning" v-if="item.isStock&&item.stockNumber<=10">
<view class="stock_warning"
v-if="item.isStock&&item.stockNumber<=10&&item.stockNumber>0">
仅剩{{item.stockNumber}}</view>
</view>
@@ -208,7 +209,8 @@
<!-- <view class="limitDiscount" v-if="item1.is_time_discount">
限时折扣{{ limitDiscountCountdown }}</view> -->
<view class="stock_warning" v-if="item1.isStock&&item1.stockNumber<=10">
<view class="stock_warning"
v-if="item1.isStock&&item1.stockNumber<=10&&item.stockNumber>0">
仅剩{{item1.stockNumber}}</view>
</view>
@@ -575,46 +577,62 @@
</template>
<script setup>
import xbSwiperPreview from '@/components/xb-swiper-preview/index.vue';
//价格计算辅助函数
/**
* api合集 start
*/
import * as discountActivityApi from '@/common/api/market/discountActivity';
import {
consumeDiscount
} from '@/common/api/market/index.js';
import * as limitTimeDiscountapi from '@/common/api/market/limitTimeDiscount.js';
import {
APIshopUserInfo,
APIusershopInfodetail
} from "@/common/api/member.js";
import {
productminiApphotsquery,
APIgroupquery,
APIminiAppinfo,
APIminiAppskuinfo
} from '@/common/api/product/product.js';
import {
APIhistoryOrder,
APIcancelOrder,
APIrmPlaceOrder
} from '@/common/api/order/index.js';
import {
APIproductqueryShop
} from '@/common/api/member.js';
/**
* api合集 end
*/
/**
* 三方库 start
*/
import BigNumber from 'bignumber.js';
//价格计算辅助函数
import {
limitUtils
} from 'ysk-utils';
// 满减活动api
import * as discountActivityApi from '@/common/api/market/discountActivity';
import dayjs from 'dayjs';
import isBetween from 'dayjs/plugin/isBetween';
dayjs.extend(isBetween);
/**
* 三方库 end
*/
import BigNumber from 'bignumber.js';
import {
consumeDiscount
} from '@/common/api/market/index.js';
/**
* 组件 start
*/
import xbSwiperPreview from '@/components/xb-swiper-preview/index.vue';
import GoodsPrice from '@/components/goods-price.vue';
import * as limitTimeDiscountapi from '@/common/api/market/limitTimeDiscount.js';
import ModalList from '@/components/modal-list.vue';
import recommendGoodsModal from './components/recommend-goods-modal.vue';
import {
ref,
reactive,
onMounted,
watchEffect,
getCurrentInstance,
computed,
provide,
watch
} from 'vue';
import {
onLoad,
onReady,
onShow,
onHide,
onUnload,
onPageScroll
} from '@dcloudio/uni-app';
//导航栏
import Nav from '@/components/CustomNavbar.vue';
import shopindex from './components/shopindex.vue';
@@ -622,21 +640,18 @@
import shoppingCartes from './components/shoppingCartes.vue';
import confirmorder from './components/confirmorder.vue';
import Loading from '@/components/Loading.vue';
import dayjs from 'dayjs';
import isBetween from 'dayjs/plugin/isBetween';
/**
* 组件 end
*/
import {
APIshopUserInfo,
APIusershopInfodetail
} from "@/common/api/member.js";
dayjs.extend(isBetween);
/**
* 项目代码辅助方法 start
*/
import {
filterNumberInput,
isJsonArrayString
} from '@/utils/util.js';
import {
APIproductqueryShop
} from '@/common/api/member.js';
import {
getDistance
} from '@/utils/address.js';
@@ -644,6 +659,56 @@
isObjectEqual,
isArrayEqual
} from './components/utils.js'
/**
* 项目代码辅助方法 end
*/
/**
* store本地存储 start
*/
import {
useNavbarStore
} from '@/stores/navbarStore';
import {
useWebSocket
} from '@/stores/carts-websocket.js';
// 结账管理
import {
Memberpay
} from '@/stores/pay.js';
import {
productStore
} from '@/stores/user.js';
const storeMemberpay = Memberpay();
const store = useNavbarStore();
// 动态更新导航栏配置
store.updateNavbarConfig({
showBack: true, //左边返回键
rightText: '', //右边文字
showSearch: false, //true是标题其他事文字
title: '',
isTransparent: false,
hasPlaceholder: false //是否要占位符
});
const userStore = productStore();
// 金额管理
import {
useCartStore
} from '@/stores/order.js';
const cartStore = useCartStore();
/**
* store本地存储 end
*/
// 获取全局属性
const {
proxy
} = getCurrentInstance();
//点单智能推荐
@@ -681,81 +746,51 @@
}
}
// 获取全局属性
const {
proxy
} = getCurrentInstance();
//接口引入
import {
productminiApphotsquery,
APIgroupquery,
APIminiAppinfo,
APIminiAppskuinfo
} from '@/common/api/product/product.js';
import {
APIhistoryOrder,
APIcancelOrder,
APIrmPlaceOrder
} from '@/common/api/order/index.js';
// websocket
// import useWebSocket from '@/common/js/websocket.js';
import {
useWebSocket
} from '@/stores/carts-websocket.js';
// pinia管理
import {
useNavbarStore
} from '@/stores/navbarStore';
// 结账管理
import {
Memberpay
} from '@/stores/pay.js';
const storeMemberpay = Memberpay();
const store = useNavbarStore();
import {
productStore
} from '@/stores/user.js';
const userStore = productStore();
// 金额管理
import {
useCartStore
} from '@/stores/order.js';
const cartStore = useCartStore();
// 动态更新导航栏配置
store.updateNavbarConfig({
showBack: true, //左边返回键
rightText: '', //右边文字
showSearch: false, //true是标题其他事文字
title: '',
isTransparent: false,
hasPlaceholder: false //是否要占位符
});
/**
* 通用数据合集 start
*/
// 门店信息
const shopInfo = reactive({});
Object.assign(shopInfo, uni.cache.get('shopInfo'));
// 台桌信息
const shopTable = uni.cache.get('shopTable');
const distance = uni.cache.get('distance'); //距离
//距离
const distance = uni.cache.get('distance');
//店铺详情
const showShopInfoRef = ref(null);
// 计算高度
const navScroll = ref(null);
// 初始加载中
const isLoading = ref(true);
// 分步取值 + 每层兜底,避免某一环不存在导致 undefined
const shopExtendShopTable = uni.cache.get('shopTable') || {}; // 兜底空对象
const shopExtendMap = shopExtendShopTable.shopExtendMap || {}; // 兜底空对象
// 最终声明:即使 shopinfo_bg 不存在,也兜底为空字符串/默认值
const shopExtend = ref(shopExtendMap.shopinfo_bg || '');
/**
* 通用数据合集 end
*/
/**
* 轮播功能 staart
*/
const swiperCurrent = ref(0);
function swiperChange(e) {
swiperCurrent.value = e.current;
}
/**
* 轮播功能 end
*/
//店铺详情
const showShopInfoRef = ref(null);
// 初始加载中
const isLoading = ref(true);
//调用shop组件
const callChildMethod = () => {
@@ -764,21 +799,10 @@
}
};
// const shopExtend = ref(uni.cache.get('shopTable').shopExtendMap.shopinfo_bg);
// console.log('shopExtend', shopExtend);
// 分步取值 + 每层兜底,避免某一环不存在导致 undefined
const shopExtendShopTable = uni.cache.get('shopTable') || {}; // 兜底空对象
const shopExtendMap = shopExtendShopTable.shopExtendMap || {}; // 兜底空对象
// 最终声明:即使 shopinfo_bg 不存在,也兜底为空字符串/默认值
const shopExtend = ref(shopExtendMap.shopinfo_bg || '');
// try {
// const shopExtend = uni.cache.get('shopTable').shopExtendMap.shopinfo_bg;
// } catch (error) {}
// 计算高度
const navScroll = ref(null);
// 获取商品数据
const shopProductList = reactive({
@@ -1555,29 +1579,43 @@
// 购物车初始化时进行判断商品是否可以使用限时折扣,然后更新
let socketTimer = null
// 返回商品对应sku数据
function cartInit(arr) {
const result = []
console.log('cartInit arr',arr);
cartStore.carts = arr.map(v => {
const goods=matchedProducts.value.find(g=>g.id==v.product_id)
const goodsSkuList=goods.skuList||[]
const findSku=goodsSkuList.find(sku=>sku.id==v.sku_id)
const memberPrice=findSku?findSku.memberPrice:0
const is_time_discount = limitUtils.canUseLimitTimeDiscount({...v,memberPrice}, cartStore.limitTimeDiscount, shopInfo,
const goods = matchedProducts.value.find(g => g.id == v.product_id)
const goodsSkuList = goods?goods.skuList : []
const findSku = goodsSkuList.find(sku => sku.id == v.sku_id)
const memberPrice = findSku ? findSku.memberPrice : 0
const is_time_discount = limitUtils.canUseLimitTimeDiscount({
...v,
memberPrice
}, cartStore.limitTimeDiscount, shopInfo,
shopUserInfo.value, 'product_id');
if(!goods){
useSocket.sendMessage({
id: v.id,
operate_type: "del",
table_code: uni.cache.get('tableCode'),
shop_id: uni.cache.get('shopId'),
type: "shopping",
});
return null
}
return {
...v,
is_time_discount: is_time_discount ? 1 : 0,
memberPrice
}
})
}).filter(v=>v)
for (let cart of arr) {
const findItem = cartStore.carts.find(v => v.id == cart.id)
console.log('findItem',findItem)
console.log('matchedProducts',matchedProducts.value)
console.log('findItem', findItem)
console.log('matchedProducts', matchedProducts.value)
if (findItem && findItem.is_time_discount != cart.is_time_discount) {
result.push({
id: cart.id,
@@ -1603,12 +1641,12 @@
// 收到的消息变化
async function onMessage(Message) {
if (Message) {
console.log('product index 收到消息', Message);
// 心跳返回 过滤
if (Message.type == 'ping_interval' || Message.msg_id == 'ping_interval') {
isLoading.value = false;
return false;
}
console.log('product index 收到消息', Message);
// 检查消息是否已经处理过
if (processedMessageIds.has(Message.msg_id)) {
return;
@@ -1617,7 +1655,7 @@
// 初始化
if (Message.operate_type == 'init') {
cartStore.limitTimeDiscount = Message.time_dis_info;
// cartStore.limitTimeDiscount = Message.time_dis_info;
console.log('onMessage限时折扣', cartStore.limitTimeDiscount)
cartInit(Message.data)
@@ -1752,9 +1790,7 @@
});
}
if (Message.operate_type == 'time_discount_save') {
cartStore.limitTimeDiscount = Message.data;
}
//除去p 每次返回都回执消息
await websocketsendMessage({
@@ -1903,7 +1939,6 @@
}
});
}
console.log('limitTimeDiscountRes', item)
if (cartStore.limitTimeDiscount && cartStore.limitTimeDiscount.id && item.cartListinfo
.is_time_discount ==
1) {
@@ -2066,6 +2101,7 @@
uni.pro.switchTab('index/index');
}, 1000);
}
let allGoodsArr=[]
if (shopProductList.productInfo.length > 0 || shopProductList.hots.length > 0) {
//TODO handle the exception
//第一步:将所有商品的 cartNumber 初始化为 0
@@ -2074,6 +2110,8 @@
product.cartNumber = 0;
product.isSaleTimeshow = await isProductAvailable(product.days, product
.startTime, product.endTime);
allGoodsArr.push(product)
cartStore.setGoodsMap(product.id, product);
});
@@ -2081,9 +2119,15 @@
shopProductList.hots.forEach(async (i) => {
i.cartNumber = 0;
i.isSaleTimeshow = await isProductAvailable(i.days, i.startTime, i.endTime);
allGoodsArr.push(i)
cartStore.setGoodsMap(i.id, i);
});
console.log('shopProductList', shopProductList);
if(cartStore.carts.length>0){
cartInit(cartStore.carts)
}
cartStore.goodsIsloading = true;
scrollTopSize.value = 0;
topArr.value = [];
@@ -2285,7 +2329,6 @@
});
}
const limitTimeDiscountRes = ref(null);
onLoad(async (e) => {
if (e.type) {
orderType.value = e.type;
@@ -2302,7 +2345,7 @@
Object.assign(shopInfo, shopInfoRes.shopInfo);
uni.cache.set('shopInfo', shopInfoRes.shopInfo)
}
if (userInfo && typeof userInfo === 'object') {
shopUserInfo.value = userInfo
@@ -2505,10 +2548,10 @@
return 0
})
const oldOrder = ref(null);
// 限时折扣
async function getLimitDiscount() {
const limitRes = await limitTimeDiscountapi.getConfig({
shopId: uni.cache.get('shopId')
});
@@ -2517,15 +2560,6 @@
} else {
cartStore.limitTimeDiscount = null;
}
websocketsendMessage({
type: 'shopping',
operate_type: 'time_discount_save',
table_code: uni.cache.get('tableCode'),
shop_id: uni.cache.get('shopId'),
operate_type: 'time_discount_save',
data: cartStore.limitTimeDiscount
});
console.log('onMounted:限时折扣', cartStore.limitTimeDiscount);
return cartStore.limitTimeDiscount
}
onMounted(async () => {