套餐
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
174
pagesCreateOrder/index/components/taocanModel.vue
Normal file
174
pagesCreateOrder/index/components/taocanModel.vue
Normal 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>
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user