This commit is contained in:
duan
2024-12-04 17:46:51 +08:00
parent 4dfa7d627e
commit 9df5bc0e46
4 changed files with 241 additions and 34 deletions

View File

@@ -207,7 +207,7 @@
</template>
<scroll-view class="u-m-t-32" scroll-x="true" v-if="index==goods.sel">
<view class=" u-flex no-wrap ">
<view class="u-flex u-m-r-20 ">
<view class="u-flex u-m-r-20 " v-if="!item.isGift">
<button class="tag" hover-class="hover-class"
@tap="showModel('discount',index)">单品打折</button>
</view>

View File

@@ -3,10 +3,11 @@
<up-image :src="data.coverImg" mode="aspectFill" :width="img.width" :height="img.height"></up-image>
<!-- <image lazy-load class="img" :src="data.coverImg" mode="aspectFill" :style="computedImgStyle()"></image> -->
<view class="info u-flex u-row-between u-col-top u-flex-col" @tap="emitEvent('add')">
<view class="info u-flex u-row-between u-col-top u-flex-col" >
<view>
<view>
<text class="u-line-2">{{data.name}}</text>
<text class="u-line-2">{{data.name}}
</text>
</view>
<view class="u-font-32 font-bold u-m-t-16">
{{data.price}}
@@ -14,7 +15,7 @@
</view>
<view class="u-flex">
<template v-if="!isSellout">
<template v-if="!data.isDan">
<template v-if="!data.isDan||data.groupType==1">
<button class="btn" hover-class="btn-hover-class" @tap="emitEvent('chooseGuige')">选规格</button>
</template>
<template v-else>

View File

@@ -0,0 +1,174 @@
<template>
<my-model ref="model" borderRadius="12" :title="datas.title">
<template #desc>
<scroll-view scroll-y="true" style="height: 50vh;" class="u-p-30 guigeModel">
<view class="u-m-b-40" v-for="(item,index) in datas.skus" :key="index">
<view class="u-text-left">
<view class="color-333">{{item.title}} <text
style="color:#999">({{item.count}}{{item.number}})</text> </view>
</view>
<view class="u-flex u-m-t-20 u-flex-wrap">
<view class="item" @tap="chooseSkd(skd,item.number)" :class="{active:skd.select==true}"
v-for="(skd,skdIndex) in item.goods" :key="skdIndex">
{{skd.proName}}
</view>
</view>
</view>
</scroll-view>
</template>
<template #btn>
<view class="u-p-30 border-top ">
<view class="u-flex u-p-b-30 u-row-between">
<view class="price">
<text></text>
<text>{{datas.price}}</text>
</view>
</view>
<view class="u-m-t-10">
<my-button @tap="confirm">添加</my-button>
</view>
</view>
</template>
</my-model>
<uni-popup ref="popup" type="message">
<uni-popup-message type="info" message="请选择套餐" :duration="2000"></uni-popup-message>
</uni-popup>
</template>
<script setup>
import {
computed,
getCurrentInstance,
reactive,
ref,
watch
} from 'vue';
import util from '../util.js';
import infobox from '@/commons/utils/infoBox.js'
import myModel from '@/components/my-components/my-model.vue'
import myButton from '@/components/my-components/my-button.vue'
import {
onShow,
} from '@dcloudio/uni-app';
const props = defineProps({
goodsData: {
type: Object,
default: () => {}
},
})
let datas = reactive({
item: "",
title: "",
price: "",
skus: [],
selectData: [],
// 几选几,的和
selectNumber: 0,
})
// const selSku = computed(() => {
// return props.skus.reduce((prve, cur) => {
// prve.push(cur.sel)
// return prve
// }, []).join()
// })
// const goods = computed(() => {
// return props.skuMap[selSku.value]
// })
watch(() => props.goodsData, (newval) => {
datas.item = newval
datas.title = newval.name
datas.price = newval.price
datas.skus = newval.proGroupVo
datas.skus.forEach(ele => {
datas.selectNumber += ele.number
})
})
const emits = defineEmits(['confirm', 'updateSku'])
let number = ref(1)
function chooseSkd(skd, number) {
if (datas.selectData.includes(skd.proId)) {
skd.select = false
let indexs = datas.selectData.indexOf(skd.proId)
datas.selectData.splice(indexs, 1)
} else {
if (datas.selectData.length < number) {
skd.select = true
datas.selectData.push(skd.proId)
}
}
}
const model = ref(null)
function open() {
model.value.open()
}
function close() {
model.value.close()
}
const instance = getCurrentInstance();
function confirm() {
console.log(datas.selectData.length)
console.log(datas.selectNumber,'调试1111')
if (datas.selectData.length == datas.selectNumber) {
emits('confirm', datas.selectData,datas.item)
close()
} else {
instance.ctx.$refs.popup.open()
}
}
defineExpose({
open,
close
})
</script>
<style lang="scss">
.border-top {}
.icon {
width: 40rpx;
height: 40rpx;
}
.guigeModel {
.item {
color: #666;
font-size: 24rpx;
padding: 4rpx 28rpx;
border: 1px solid #E5E5E5;
border-radius: 8rpx;
margin-right: 20rpx;
margin-bottom: 20rpx;
transition: all .2s ease-in-out;
&.active {
border-color: $my-main-color;
color: $my-main-color;
}
&.disabled {
color: #ccc;
border-color: #eee;
}
}
}
.price {
color: #EB4F4F;
}
.border-top {
border-top: 1px solid #E5E5E5;
}
</style>

View File

@@ -105,7 +105,6 @@
@add="searchGoodsUpdate(goodsItem,goodsIndex,true)"
@reduce="searchGoodsUpdate(goodsItem,goodsIndex,false)"
:index="goodsItem.goodsIndex" :data="goodsItem"></list-goods-item>
</view>
</view>
<my-img-empty v-if="!searchResult.length" tips="未搜索到相关商品"></my-img-empty>
@@ -120,7 +119,8 @@
<my-car :isCreateOrderToDetail="isCreateOrderToDetail" @updateNumber="carsNumberChange" :user="data.vipUser"
:masterId="data.masterId" :table="data.table" :data="cars" @clear="onClearCart"></my-car>
</view>
<!-- 套餐选择规格 -->
<taocanModel ref="taocanModelRef" @confirm="taocanConfirm" :goodsData="selGoods"></taocanModel>
<!-- 选择规格 -->
<guige-model @update-sku="updateSkuSel" @confirm="guigeConfirm" ref="chooseGuigeModel" :goodsData="selGoods"
:title="guigeModelData.title" :sku-map="guigeModelData.chooseGoods.skuMap"
@@ -150,6 +150,7 @@
import util from './util.js';
import color from '@/commons/color.js';
import guigeModel from './components/guige'
import taocanModel from './components/taocanModel.vue'
import listGoodsItem from './components/list-goods-item.vue'
import mySurcharge from './components/surcharge'
import {
@@ -277,6 +278,26 @@
}
return obj
}
// 添加套餐
async function taocanConfirm(d, item) {
const cartGoods = await addCart({
num: 1,
groupProductIdList: d,
productId: item.id,
skuId: item.specList[0].id
})
infoBox.showToast('添加成功')
// guigeConfirm(item, 1)
// updateCartGoods({
// productId: item.id,
// skuId: item.specList[0].id,
// cartId: cartGoods.id
// })
cars.push({
...cartGoods,
specSnap: item.specSnap
})
}
function scanCode() {
// 只允许通过相机扫码
@@ -671,11 +692,11 @@
}
function toLinshi() {
go.to('PAGES_CHOOSE_ADD_TEMP_CUISINE',{
masterId:data.masterId,
tableId:data.table.tableId,
vipUserId:option.vipUserId?option.vipUserId:'',
useType:uni.getStorageSync('useType')
go.to('PAGES_CHOOSE_ADD_TEMP_CUISINE', {
masterId: data.masterId,
tableId: data.table.tableId,
vipUserId: option.vipUserId ? option.vipUserId : '',
useType: uni.getStorageSync('useType')
})
}
@@ -833,7 +854,7 @@
}
let selGoods = ref({})
let selGoods = ref({});
function chooseGuige(foodsindex, index) {
if (!canAddGoods()) {
@@ -843,13 +864,19 @@
}
const $goods = data.tabbar[index].foods[foodsindex]
selGoods.value = $goods
guigeModelData.title = $goods.name
const specList = $goods.specList;
const tagSnap = JSON.parse($goods.skuResult.tagSnap)
const skuMap = returnSelGoodsSkuMap(specList)
const skuList = returnSelGoodsSkuList(tagSnap)
setSkugoodsDefaultInit($goods, skuList, skuMap, specList)
chooseGuigeModel.value.open()
if ($goods.groupType == 1) {
instance.ctx.$refs.taocanModelRef.open()
} else {
guigeModelData.title = $goods.name
const specList = $goods.specList;
const skuMap = returnSelGoodsSkuMap(specList)
// 多规格,和套餐规格区分.groupType=1 套餐多规格
let tagSnap = JSON.parse($goods.skuResult.tagSnap)
const skuList = returnSelGoodsSkuList(tagSnap)
setSkugoodsDefaultInit($goods, skuList, skuMap, specList)
chooseGuigeModel.value.open()
}
}
async function guigeConfirm(sku, num) {
@@ -902,13 +929,15 @@
categoryId,
skuId
} = goods
const cartId = goods.id
const tabbarIndex = data.tabbar.findIndex(v => v.id == categoryId)
//临时菜没有对应商品数据
const $goods =!productId?undefined:data.tabbar[tabbarIndex].foods.find(v => v.id == productId)
const $goods = !productId ? undefined : data.tabbar[tabbarIndex].foods.find(v => v.id == productId)
//临时菜没有skuList
const $sku =!productId?{suit:1}:$goods.specList.find(v => v.id == skuId)
const $sku = !productId ? {
suit: 1
} : $goods.specList.find(v => v.id == skuId)
if (num === 0 || num < $sku.suit) {
//移除
@@ -1000,16 +1029,19 @@
$goods.chooseNumber = number
setSearchGoods(searchGoodsIndex, number)
} else {
//增加
const num = suit
const cartGoods = await addCart({
num,
productId,
skuId
})
infoBox.showToast('添加成功')
$goods.chooseNumber = num
cars.push(cartGoods)
// 套餐和单规格
if ($goods.groupType != 1) {
//增加
const num = suit
const cartGoods = await addCart({
num,
productId,
skuId
})
infoBox.showToast('添加成功')
$goods.chooseNumber = num
cars.push(cartGoods)
}
}
return
}
@@ -1188,7 +1220,7 @@
setTabBar($category, $originGoods, cars)
}
onBeforeUnmount(() => {})
function watchUpdate() {
uni.$off('update:createOrderIndex')
uni.$off('get:table')
@@ -1201,7 +1233,7 @@
console.log('update:createOrderIndex');
init()
})
uni.$on('add:cashCai', async() => {
uni.$on('add:cashCai', async () => {
console.log('add:cashCai');
const cartRes = await getCart()
cars.length = 0