1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555 |
- <template>
- <view class="orderFood">
- <view class="shop-info">
- <view class="shop-name">
- {{shopInfo.shopName}}
- </view>
- <view class="address">
- {{shopInfo.address}}
- </view>
- </view>
-
- <view class="content">
- <scroll-view :scroll-y="true" class="left" :scroll-into-view="scrollTo1" scroll-with-animation>
- <!-- <view class="left"> -->
- <view class="item" :class="[active == index?'active':'']" v-for="(item,index) in list" :id="'tab'+index" :key="index" @click="handleTab(index)">
- <image class="icon" :src="item.imageCnUrl" mode=""></image>
- <view class="name">
- {{item.topName}}
- </view>
- </view>
- <!-- </view> -->
- </scroll-view>
- <scroll-view :scroll-y="true" class="right" :scroll-into-view="scrollTo" scroll-with-animation @scroll="scroll">
- <!-- <view class="test">
-
- </view> -->
- <!-- <view class="right"> -->
- <view class="section" v-for="(item,index) in list" :key="index">
- <view class="section-name" :class="'title'+index" :id="'title'+index" >
- {{item.topName}}
- </view>
- <!-- <zs-title :title="item.topName" :value="index" :class="'title'+index" :id="'title'+index" @changeTag="chooseTag"></zs-title> -->
- <view class="item" v-for="(i,d) in item.menuVoList" :key="d" >
- <image class="img" :src="i.imageUrl" mode=""></image>
- <view class="info">
- <view class="title">
- {{i.nameCn}}
- </view>
- <view class="btn-box">
- <view class="price-box">
- <view class="price">
- <view class="unit">
- ¥
- </view>
- <view class="num">
- {{i.priceHead}}
- </view>
- </view>
- <view class="old-price">
- ¥{{i.price}}
- </view>
- </view>
- <image class="btn" @click.stop="add(i,1,item)" src="../static/add-active.png" mode=""></image>
- </view>
- </view>
- </view>
- </view>
- <!-- </view> -->
- </scroll-view>
- </view>
-
- <view class="total-box">
- <view class="price-box" @click="handleCar">
- <view class="car-box">
- <image class="icon" src="../static/shop-car.png" mode=""></image>
- <view class="num" v-if="totalNum">
- {{totalNum}}
- </view>
- </view>
- <view class="price">
- <view class="unit">
- ¥
- </view>
- <view class="num">
- {{total}}
- </view>
- </view>
- </view>
-
- <button class="buy" :class="[!carList.length?'disabled':'']" :disabled="!carList.length" type="default" @click="buy">{{carList.length?'选好了':'未选择商品'}}</button>
- </view>
-
-
- <!-- 购物车 -->
- <u-popup :show="show" round="32rpx" mode="bottom" @close="close('show')">
- <view class="popup-title-box" >
- <view class="title">
- 已选商品
- </view>
- <view class="clear" v-if="carList.length" @click="clear">
- 清空
- </view>
- </view>
- <u-empty
- mode="car"
- icon="http://cdn.uviewui.com/uview/empty/car.png"
- v-if="!carList.length"
- >
- </u-empty>
- <view class="car-content" v-else>
- <view class="item" v-for="(item,index) in carList" :key="index">
- <image class="img" :src="item.imageUrl" mode=""></image>
- <view class="info">
- <view class="title">
- {{item.nameCn}}
- </view>
- <view class="type" v-if="item.config">
- {{item.config}}
- </view>
- <view class="btn-box">
- <view class="price-box">
- <view class="price">
- <view class="unit">
- ¥
- </view>
- <view class="num">
- {{item.sellPrice}}
- </view>
- </view>
- <view class="old-price">
- ¥{{item.orgPrice}}
- </view>
- </view>
- <view class="count-box">
- <image class="btn" src="../static/remove.png" v-if="item.quantity" @click="add(item,-1,{},index)" mode=""></image>
- <view class="num">
- {{item.quantity}}
- </view>
- <image class="btn" src="../static/add-active.png" @click="add(item,1,{},index)" mode=""></image>
- </view>
- </view>
- </view>
- </view>
-
- </view>
- <view class="total-box total-box1">
- <view class="price-box" @click="handleCar">
- <view class="car-box">
- <image class="icon" src="../static/shop-car.png" mode=""></image>
- <view class="num" v-if="totalNum">
- {{totalNum}}
- </view>
- </view>
- <view class="price">
- <view class="unit">
- ¥
- </view>
- <view class="num">
- {{total}}
- </view>
- </view>
- </view>
-
- <button class="buy" :class="[!carList.length?'disabled':'']" :disabled="!carList.length" type="default" @click="buy">{{carList.length?'选好了':'未选择商品'}}</button>
- </view>
- </u-popup>
-
-
- <!-- 商品详情 -->
- <u-popup :show="show2" round="32rpx" mode="bottom" @close="close('show2')">
- <view class="popup-goodsDetail">
- <view class="box">
-
- <image class="img" :src="goodsInfo.product_img" mode="aspectFit"></image>
- <view class="popup-content">
- <view class="title">
- {{goodsInfo.product_name}}
- </view>
- <view class="desc" v-html="goodsInfo.product_description" v-if="goodsInfo.product_description">
- {{goodsInfo.product_description}}
- </view>
-
- <view class="choose-box" v-if="goodsInfo.details&&ot == 'NXDC'">
- <view class="choose-item" v-for="item in goodsInfo.details.spu_specs" :key="item.code">
- <view class="choose-title">
- {{item.name}}
- </view>
- <view class="item-box">
- <view class="item" :class="[i.code == chooseInfo[item.code].code?'active':'',isDisable(i,'NXDC',item)?'disable':'']" v-for="i in item.values" :key="i.code" @click="choose(i,item.code)">
- {{i.name}} {{i.price?`¥${i.price}`:''}}
- </view>
- </view>
- </view>
- </view>
-
- <view class="choose-box" v-else-if="ot == 'MDL'">
- <view class="choose-item" v-for="item in goodsInfo.details.optional" :key="item.code">
- <view class="choose-title">
- {{item.name}}
- </view>
- <view class="item-box">
- <view class="item" :class="[i.id == chooseInfo[item.name+'-'+item.id].id?'active':'',i.disable?'disable':'']" v-for="i in item.sku_infos" :key="i.id" @click="()=>choose(i,item.name+'-'+item.id)">
- {{i.name}} {{i.price?`¥${i.price}`:''}}
- </view>
- </view>
- </view>
-
- <view class="choose-item" >
- <view class="choose-title">
- 套餐内容
- </view>
- <view class="item-box">
- <view class="item active" v-for="i in goodsInfo.details.required" :key="i.id">
- {{i.product_name}}x{{i.amount}}
- </view>
- </view>
- </view>
- </view>
-
-
- <view class="choose-box" v-else-if="ot == 'XBK'">
- <view class="choose-item" v-for="item in goodsInfo.details.optional" :key="item.code">
- <view class="choose-title">
- {{item.name}}
- </view>
- <view class="item-box">
- <view class="item" :class="[i.id == chooseInfo[item.id].id?'active':'',i.disable?'disable':'']" v-for="i in item.sku_infos" :key="i.id" @click="()=>choose(i,item.id)">
- {{i.name}} {{i.price?`¥${i.price}`:''}}
- </view>
- </view>
- </view>
- </view>
-
- <view class="choose-box" v-else-if="goodsInfo.details&&goodsInfo.details.specifications&&ot == 'XC'">
- <view class="choose-item" v-for="item in goodsInfo.details.specifications" :key="item.id">
- <view class="choose-title">
- {{item.name}}
- </view>
- <view class="item-box">
- <!-- ,isDisable(i.id,'XC')?'disable':'' -->
- <view class="item " :class="[i.id == chooseInfo[item.id].id?'active':'',isDisable(i.id,'XC')?'disable':'']" v-for="i in item.values" :key="i.id" @click="choose(i,item.id,item)">
- {{i.name}} {{i.price?`¥${i.price}`:''}}
- </view>
- </view>
- </view>
- </view>
- <view class="choose-box" v-else-if="ot == 'RXKF'">
- <view class="choose-item" v-for="item in goodsInfo.details.specifications" :key="item.code">
- <view class="choose-title">
- {{item.name}}
- </view>
- <view class="item-box">
- <view class="item" :class="[i.name == chooseInfo[item.name].name?'active':'']" v-for="(i,d) in item.ingredients" :key="d" @click="()=>choose(i,item.name,item)">
- {{i.name}} {{i.price?`¥${i.price}`:''}}
- </view>
- </view>
- </view>
- </view>
-
- <view class="choose-box" v-else-if="ot == 'KD'">
- <view class="choose-item" v-for="item in goodsInfo.specItems" :key="item.specItemNo">
- <view class="choose-title">
- {{item.specItemName}}
- </view>
- <view class="item-box">
- <view class="item" :class="[i.name == chooseInfo[item.specItemNo].specItemValueName?'active':'',isDisable(i,'KD')?'disable':'']" v-for="(i,d) in item.specValueList" :key="d" @click="()=>choose(i,item.specItemNo,item)">
- {{i.name}}
- </view>
- </view>
- </view>
- </view>
-
-
-
- </view>
- </view>
-
- <view class="btn-box">
- <view class="order-info">
- <view class="left">
- <view class="price-box">
- <view class="price">
- ¥{{(itemPrice.price*10000)*num/10000}}
- </view>
- <view class="old-price">
- ¥{{ (itemPrice.oldPrice*10000)*num/10000}}
- </view>
- </view>
- <view class="choose">
- {{config}}
- </view>
- </view>
- <view class="count-box">
- <image class="btn1" src="../static/remove.png" v-if="num" @click="add1(-1)" mode=""></image>
- <view class="num">
- {{num}}
- </view>
- <image class="btn1" src="../static/add-active.png" @click="add1(1)" mode=""></image>
- </view>
- </view>
- <button class="btn" type="default" @click="handleAdd">加入购物车</button>
- </view>
-
- </view>
- </u-popup>
-
- <u-modal :show="show1" :title="shopInfo.shopName" confirmColor="#FF4D3A" confirmText="更换门店" @confirm="confirm">
- <view class="modal-box">
- <view class="shopName">
- 店铺暂未营业或已暂停营业
- </view>
-
- <view class="notice">
- 请尝试更换门店~
- </view>
- </view>
-
- </u-modal>
-
- <u-modal :show="show3" title="提示" confirmColor="#FF4D3A" confirmText="更换门店" @confirm="goShopList">
- <view class="modal-box">
- <view class="notice">
- 当前门店暂时无商品上架,您可以切换至其他门店进行购买。
- </view>
- </view>
- </u-modal>
-
- </view>
- </template>
- <script>
- import {shopDetail,menuList,foodGoodsDetail} from '@/api/orderFood.js'
- export default {
- data() {
- return {
- shopId:"63836999-5117-4980-8632-497f007808ef",
- show:false,
- show1:false,
- show2:false,
- show3:false,
- active:0,
- list:[],
- shopInfo:{
- shopName:'',
- address:'',
- },
- carList:[],
- scrollTo:'title0',
- scrollTo1:'',
- topList:[],
- offsetTop:0,//顶部距离
- cateName:'',//跳转过来携带的分类名称
- ot:uni.getStorageSync('ot'),
- goodsInfo:{},
- num:1,
- chooseInfo:{},
- item:{},//弹窗内商品信息
- productId:'',
- itemPrice:{//弹窗内商品价格
- price:0,
- oldPrice:0
- },
- test:false
- };
- },
- computed: {
- totalNum(){
- let total = 0
- this.carList.map(item=>{
- total+=item.quantity
- })
- return total
- },
- total() {
- let total = 0
- this.carList.map(item=>{
- total+=(item.sellPrice*10000*item.quantity)
- })
- return total/10000
- },
- // 选择的规格文字 同时计算当前选择的价格
- config(){
- console.log('config');
- let str = ''
- for (let key in this.chooseInfo) {
- if(this.ot == 'KD'){
- str +=this.chooseInfo[key].specItemValueName +'/'
- }else{
- str +=this.chooseInfo[key].name +'/'
- }
- }
- if(this.goodsInfo.details&&this.goodsInfo.details.sku_infos&&this.ot=='NXDC'){
- let {productId,price,oldPrice} = this.findData()
- this.productId = productId
- this.itemPrice = {
- price,
- oldPrice
- }
- }else if(this.ot=='XC'&&this.goodsInfo.details&&this.goodsInfo.details.specifications){
- let addPrice = 0
- for (let key in this.chooseInfo) {
- addPrice += this.chooseInfo[key].price
- }
- this.itemPrice = {
- price:this.item.priceHead+addPrice,
- oldPrice:this.item.price+addPrice
- }
-
- }else if(this.ot == 'MDL'){
- this.itemPrice = {
- price:this.item.priceHead,
- oldPrice:this.item.price
- }
- }else if(this.ot == 'XBK'){
- let addPrice = 0
- for (let key in this.chooseInfo) {
- addPrice += this.chooseInfo[key].price
- }
- this.itemPrice = {
- price:this.item.priceHead+addPrice,
- oldPrice:this.item.price+addPrice
- }
- }else if(this.goodsInfo.details&&this.goodsInfo.details.sku_infos&&this.ot == 'RXKF'){
- let {productId,price,oldPrice} = this.findData1()
- this.productId = productId
- this.itemPrice = {
- price,
- oldPrice
- }
- }else if(this.goodsInfo.skuCombinList&&this.ot == 'KD'){
- this.productId = this.findData2()
- this.itemPrice = {
- price:this.item.priceHead,
- oldPrice:this.item.price
- }
- }
- return str
- }
- },
- methods: {
- isDisable(item,type,data){
- console.log('isDisable');
- if(type == 'KD'){
- let flag = true
- this.goodsInfo.skuCombinList.map(skuItem=>{
- skuItem.skusSpecs.map(skuIt=>{
- if(skuIt.specItemValueName == item.name){
- flag = false
- }
- })
- })
- return flag
- }else if(type == 'XC'){
- let flag = false
- for (let key in this.chooseInfo) {
- if(this.chooseInfo[key].exclusives.length){
- this.chooseInfo[key].exclusives.map(i=>{
- i.values.map(it=>{
- if(it.id == item){
- flag = true
- }
- })
- })
- }
- }
- return flag
- }else if(type == 'NXDC'){
- let flag = true
- let cur = {}
- for (let key in this.chooseInfo) {
- if(data.code == key){
- cur[key] = item.code
- }else{
- cur[key] = this.chooseInfo[key].code
- }
- }
- this.goodsInfo.details.sku_infos.map(item=>{
- let obj = {}
- item.specs.map(i=>{
- obj[i.code] = i.spec_code
-
- })
- if(this.areObjectsEqual(cur,obj)){
- flag = false
- }
- })
- return flag
- }
- },
- // 选择规格
- choose(item,key,data){
- console.log(item,key,data,this.chooseInfo);
- if(this.ot == 'XC'){
- if(this.chooseInfo[key]&&this.chooseInfo[key].id == item.id &&!data.mandatory){
- this.$delete(this.chooseInfo,key)
- }else{
- this.$set(this.chooseInfo,key,item)
- }
- }else if(this.ot == 'MDL'){
- if(this.chooseInfo[key]&&this.chooseInfo[key].id == item.id){//麦当劳不能不选择
- // this.$delete(this.chooseInfo,key)
- }else{
- this.$set(this.chooseInfo,key,item)
- }
- }
- else if(this.ot == 'XBK'){
- if(this.chooseInfo[key]&&this.chooseInfo[key].id == item.id){//星巴克不能不选择
- // this.$delete(this.chooseInfo,key)
- }else{
- this.$set(this.chooseInfo,key,item)
- }
- }
- else if(this.ot == 'KD'){
- let flag = false
- this.goodsInfo.skuCombinList.map(skuItem=>{
- skuItem.skusSpecs.map(skuIt=>{
- if(skuIt.specItemValueName == item.name){
- flag = true
- }
- })
- })
- // 在sku内有的才能选择
- if(flag){
- // 把数据组装成自己转换成skusSpecs格式对象
- this.$set(this.chooseInfo,key,
- {specItemName: data.specItemName,
- specItemNo: key,
- specItemValue: item.value,
- specItemValueName: item.name})
- }
-
- }
- else{//奈雪的茶 瑞幸
- this.$set(this.chooseInfo,key,item)
- }
- },
- confirm(){
- this.show1 = false
- uni.navigateTo({
- url:'./shopList'
- })
- },
- goShopList(){
- this.show3 = false
- uni.navigateTo({
- url:'./shopList'
- })
- },
- // 滚动的选择商品
- scroll(val){
- if(!this.offsetTop){
- this.offsetTop = val.currentTarget.offsetTop
- }
- this.topList.map((item,index)=>{
- if(index!=this.topList.length-1){
-
- if(val.detail.scrollTop>= (item-this.offsetTop)&&(val.detail.scrollTop <=this.topList[index+1]-this.offsetTop)){
- this.scrollTo1 = 'tab'+index
- this.active = index
- }
- }else{
- if(val.detail.scrollTop>= (item-this.offsetTop)){
- this.scrollTo1 = 'tab'+index
- this.active = index
- }
- }
- })
- },
- clear(){
- this.carList = []
- },
- // 购物车内添加数量 商品添加数量 选择规格时不走这里 但是选择规格的购物车内数量操作走这里
- add(item,num,data={},idx){//item:当前操作item num:增加或者减少 data:当前item的上层栏目,idx:购物车内当前操作商品index 方便删除
- console.log('add',item);
- // 如果需要选择规格
- if(data.childClassList) return this.handleItem(item,data)
- // 影响逻辑太大 暂时不改
- // if(item.menuFlag == "C") return this.handleItem(item,data)
- // 肯德基
- if(this.ot == 'Kfc'){
- if(this.carList.some(i=>item.productId == i.productId)){
- this.carList.forEach((row,index)=>{
- if(item.productId == row.productId){
- row.quantity+=num
- if(row.quantity == 0){
- this.carList.splice(index,1)
- }
- }
- })
- }else{
- let obj ={
- "imageUrl": item.imageUrl,
- "nameCn": item.nameCn,
- "productId": item.productId,
- "quantity": 1,
- "sellPrice": item.priceHead,
- "orgPrice": item.price,
- }
- this.carList.push(obj)
- }
- // }else if(this.ot == 'NXDC'){
- }else{
- if(this.carList.some((i,d)=>item.productId == i.productId)){
- this.carList.forEach((row,index)=>{
- if(index == idx){
- row.quantity+=num
- if(row.quantity == 0){
- this.carList.splice(index,1)
- }
- }
- })
- }else{//单品直接添加
- console.log(2222);
- this.chooseInfo = {}
- this.itemPrice = {
- price:this.item.priceHead,
- oldPrice:this.item.price
- }
- this.item = item
- this.handleAdd()
- }
- }
- },
- // 商品详情内数量操作
- add1(num){
- this.num+=num
- },
- // 计算奈雪当前选择规格价格和code
- findData(){
- let productId = ''
- let cur = {}
- let price = 0
- let oldPrice = 0
- let addPrice = 0
- for (let key in this.chooseInfo) {
- cur[key] = this.chooseInfo[key].code
- addPrice += this.chooseInfo[key].price
- }
- this.goodsInfo.details.sku_infos.map(item=>{
- let obj = {}
- item.specs.map(i=>{
- obj[i.code] = i.spec_code
-
- })
- if(this.areObjectsEqual(cur,obj)){
- price = item.salePrice
- oldPrice = item.price
- return productId = item.code
- }
- })
- console.log('找到对应的',productId,price);
- return {
- productId,
- price:price+addPrice,
- oldPrice:oldPrice+addPrice
- }
- },
- // 计算瑞幸当前选择规格价格和code
- findData1(){
- let productId = ''
- let cur = {}
- let price = 0
- let oldPrice = 0
- let addPrice = 0
- for (let key in this.chooseInfo) {
- cur[key] = this.chooseInfo[key].name
- addPrice += this.chooseInfo[key].price
- }
- this.goodsInfo.details.sku_infos.map(item=>{
- let obj = {}
- item.values.map(i=>{
- obj[i.name] = i.spec_name
-
- })
- if(this.areObjectsEqual(cur,obj)){
- price = this.item.priceHead
- oldPrice = this.item.price
- return productId = item.code
- }
- })
- console.log('找到对应的1',productId,price);
- return {
- productId,
- price:price+addPrice,
- oldPrice:oldPrice+addPrice
- }
- },
- // 计算库迪当前选择规格
- findData2(){
- let productId = ''
- let cur = {}
- for (let key in this.chooseInfo) {
- cur[key] = this.chooseInfo[key].specItemValue
- }
- this.goodsInfo.skuCombinList.map(item=>{
- let obj = {}
- item.skusSpecs.map(i=>{
- obj[i.specItemNo] = i.specItemValue
-
- })
- console.log(cur,obj);
- if(this.areObjectsEqual(cur,obj)){
- return productId = item.skuNo
- }
- })
- console.log('找到对应的3',productId);
- return productId
-
- },
- // 选择规格后,加入购物车
- handleAdd(){
- this.show2 = false
- // let {productId,price,addPrice} = this.findData()
- let obj = {}
- if(this.ot == 'NXDC'){
- obj ={
- "imageUrl": this.item.imageUrl,
- "nameCn": this.item.nameCn,
- "productId": this.item.productId,
- "quantity": this.num,
- "sellPrice": this.itemPrice.price,//市场价(如果存在套餐选项加价,这里的金额需要计算加价)
- "orgPrice": this.itemPrice.oldPrice,
- "config": JSON.parse(JSON.stringify(this.config)) , //这里只是为了直观展示套餐选项,实际下单可以传空
- "selected": [
- {
- "round": 0, //奈雪产品round目前没有使用,传0
- "products": [
- {
- "linkId": "",
- "productId": this.productId, //套餐选项skuID,商品详情的sku列表里面已经包含所有选项组合
- "quantity": 1
- }
- ]
- }
- ]
- }
- }else if(this.ot == 'XC'){
- let products = []
- for (let key in this.chooseInfo) {
- products.push(
- { "linkId": key, "productId": this.chooseInfo[key].id, "quantity": 1 }
- )
- }
- obj ={
- "imageUrl": this.item.imageUrl,
- "nameCn": this.item.nameCn,
- "productId": this.item.productId,
- "quantity": this.num,
- "sellPrice": this.itemPrice.price,//市场价(如果存在套餐选项加价,这里的金额需要计算加价)
- "orgPrice": this.itemPrice.oldPrice,
- "config": JSON.parse(JSON.stringify(this.config)) , //这里只是为了直观展示套餐选项,实际下单可以传空
- "selected": [
- {
- "round": 0,//喜茶产品round目前没有使用,传0
- "products": products
- }
- ]
- }
- }else if(this.ot == 'MDL'){
- let products = []
- if(this.goodsInfo.details.optional.length){//有可选才添加 没有默认空数组
- for (let key in this.chooseInfo) {
- products.push(
- {
- "linkId": key.split('-')[1],//下单参数linkId(有时会和主商品id相同)
- "productId": this.chooseInfo[key].id,//套餐选项商品id
- "quantity": 1
- }
- )
- }
- obj ={
- "imageUrl": this.item.imageUrl,
- "nameCn": this.item.nameCn,
- "productId": this.item.productId,
- "quantity": this.num,
- "sellPrice": this.itemPrice.price,//市场价(如果存在套餐选项加价,这里的金额需要计算加价)
- "orgPrice": this.itemPrice.oldPrice,
- "config": JSON.parse(JSON.stringify(this.config)) , //这里只是为了直观展示套餐选项,实际下单可以传空
- "selected": [
- {
- "round": 0,//喜茶产品round目前没有使用,传0
- "products": products
- }
- ]
- }
- }else{
- obj ={
- "imageUrl": this.item.imageUrl,
- "nameCn": this.item.nameCn,
- "productId": this.item.productId,
- "quantity": this.num,
- "sellPrice": this.itemPrice.price,//市场价(如果存在套餐选项加价,这里的金额需要计算加价)
- "orgPrice": this.itemPrice.oldPrice,
- "config": JSON.parse(JSON.stringify(this.config)) , //这里只是为了直观展示套餐选项,实际下单可以传空
- "selected": []
- }
- }
- }
- else if(this.ot == 'XBK'){
- let products = []
- for (let key in this.chooseInfo) {
- products.push(
- {
- "linkId": key,
- "productId": this.chooseInfo[key].id,//套餐选项商品id
- "quantity": 1
- }
- )
- }
- obj ={
- "imageUrl": this.item.imageUrl,
- "nameCn": this.item.nameCn,
- "productId": this.item.productId,
- "quantity": this.num,
- "sellPrice": this.itemPrice.price,//市场价(如果存在套餐选项加价,这里的金额需要计算加价)
- "orgPrice": this.itemPrice.oldPrice,
- "config": JSON.parse(JSON.stringify(this.config)) , //这里只是为了直观展示套餐选项,实际下单可以传空
- "selected": [
- {
- "round": 0,//喜茶产品round目前没有使用,传0
- "products": products
- }
- ]
- }
- }else if(this.ot == 'RXKF'){
- obj ={
- "imageUrl": this.item.imageUrl,
- "nameCn": this.item.nameCn,
- "productId": this.item.productId,
- "quantity": this.num,
- "sellPrice": this.itemPrice.price,//市场价(如果存在套餐选项加价,这里的金额需要计算加价)
- "orgPrice": this.itemPrice.oldPrice,
- "config": JSON.parse(JSON.stringify(this.config)) , //这里只是为了直观展示套餐选项,实际下单可以传空
- "selected": [
- {
- "round": 0, //奈雪产品round目前没有使用,传0
- "products": [
- {
- "productId": this.productId, //套餐选项skuID,商品详情的sku列表里面已经包含所有选项组合
- "quantity": 1
- }
- ]
- }
- ]
- }
- }else if(this.ot == 'KD'){
- obj ={
- "linkId": this.productId,//套餐选项skuID(必须)
- "imageUrl": this.item.imageUrl,
- "nameCn": this.item.nameCn,
- "productId": this.item.productId,
- "quantity": this.num,
- "sellPrice": this.itemPrice.price,//市场价(如果存在套餐选项加价,这里的金额需要计算加价)
- "orgPrice": this.itemPrice.oldPrice,
- "config": JSON.parse(JSON.stringify(this.config)) , //这里只是为了直观展示套餐选项,实际下单可以传空
- "selected": [
- {
- "round": 0,//库迪产品round目前没有使用,传0
- "products": [{ "productId": this.productId, "quantity": 1 }]//套餐选项skuID,跟外层的linkId值相同
- }
- ]
- }
- }
-
- this.carList.push(obj)
- },
- // 对比两个对象是否内容相同
- areObjectsEqual(obj1, obj2) {
- const keys1 = Object.keys(obj1);
- const keys2 = Object.keys(obj2);
-
- if (keys1.length!== keys2.length) {
- return false;
- }
-
- for (const key in obj1) {
- if (obj1.hasOwnProperty(key)) {
- if (obj1[key]!== obj2[key]) {
- return false;
- }
- }
- }
-
- return true;
- },
- close(key){
- this[key] = false
- },
- handleItem(i,item){
- console.log(item);
- this.num = 1
- this.item = i
- if(!item.childClassList) return
- this.show2 = true
- this.chooseInfo = {}
- foodGoodsDetail({productId:i.productId,shopId:this.shopId}).then(res=>{
- if(res.state = 'Success'){
- this.goodsInfo = res.content.data
- if(this.goodsInfo.details&&this.goodsInfo.details.spu_specs&&this.ot=='NXDC'){//奈雪的茶
- this.goodsInfo.details.spu_specs.map(item=>{
- this.$set(this.chooseInfo,item.code,item.values[0])
- })
- }else if(this.goodsInfo.details&&this.goodsInfo.details.specifications&&this.ot=='XC'){//喜茶
- this.goodsInfo.details.specifications.map(item=>{
- item.values.map(i=>{
- if(i.checked){
- this.$set(this.chooseInfo,item.id,item.values[0])
- }
- })
- })
- }else if(this.goodsInfo.details&&this.goodsInfo.details.optional&&this.goodsInfo.details.optional.length&&this.ot=='XBK'){//星巴克
- this.goodsInfo.details.optional.map(item=>{
- item.sku_infos.map(i=>{
- if(i.checked){
- this.$set(this.chooseInfo,item.id,i)
- }
- })
- // this.$set(this.chooseInfo,item.id,item.sku_infos[0])
- })
- }else if(this.goodsInfo.details&&this.goodsInfo.details.optional&&this.goodsInfo.details.optional.length){//麦当劳
- this.goodsInfo.details.optional.map(item=>{
- item.sku_infos.map(i=>{
- if(i.checked){
- this.$set(this.chooseInfo,item.name+'-'+item.id,i)
- }
- })
-
- // id可能相同 所以加上类目的name 方便创建订单时能取到id
- // this.$set(this.chooseInfo,item.name+'-'+item.id,item.sku_infos[0])
- })
- }else if(this.goodsInfo.details&&this.goodsInfo.details.specifications&&this.ot=='RXKF'){//瑞幸
- this.goodsInfo.details.specifications.map(item=>{
- item.ingredients.map(i=>{
- if(i.checked){
- this.$set(this.chooseInfo,item.name,i)
- }
- })
- // this.$set(this.chooseInfo,item.name,item.ingredients[0])
- })
- }else if(this.goodsInfo.firstSku&&this.goodsInfo.firstSku.skusSpecs&&this.ot=='KD'){//库迪
- this.goodsInfo.product_img = this.goodsInfo.detailImgUrl
- this.goodsInfo.product_name = this.goodsInfo.title
- this.goodsInfo.firstSku.skusSpecs.map(item=>{
- this.$set(this.chooseInfo,item.specItemNo,item)
- })
-
- }
- console.log(this.chooseInfo);
- }
- })
- },
- handleCar(){
- this.show = true
- },
- handleTab(index){
- this.active = index
- this.scrollTo = 'title'+index
- },
- chooseTag(val){
- console.log('当前',val);
- },
- menuList(){
- uni.showLoading({
- title:'加载中'
- })
- menuList(this.shopId).then(res=>{
- uni.hideLoading()
- if(res.state = 'Success'){
- this.list = res.content.data
- if(!this.list.length){
- this.show3 = true
- }
- this.list.map((item,index)=>{
- if(this.ot != 'Kfc'&&item.childClassList){
- item.menuVoList = JSON.parse(JSON.stringify(item.childClassList[0].menuVoList))
- // delete item.childClassList
- }
- // 滚动到对应栏目
- if(this.cateName&&(item.topName == this.cateName)){
- this.handleTab(index)
- }
- })
-
-
- this.$nextTick(()=>{
- let query = uni.createSelectorQuery().in(this);
- query.selectAll('.section-name').boundingClientRect(data=>{
- this.topList =data.map(item=>{
- return item.top
- })
- }).exec();
-
-
- })
- }
- })
- },
- shopDetail(){
- shopDetail({"id": this.shopId,
- "lat": "",
- "lon": ""}).then(res=>{
- if(res.state = 'Success'){
- this.shopInfo.shopName = res.content.data.shopName
- this.shopInfo.address = res.content.data.address
- //是否在营业时间内
- if(res.content.data.openTime&&res.content.data.closeTime&&!this.isInBusinessHours(res.content.data.openTime,res.content.data.closeTime)){
- this.show1 = true
- }
-
-
-
- }
- })
- },
-
- buy() {
- let that = this
- if (uni.getStorageSync('token')) {
- if(JSON.parse(uni.getStorageSync('userInfo')).setMealCode != 0&&JSON.parse(uni.getStorageSync('userInfo')).setMealCode){
- let info ={
- shopName:this.shopInfo.shopName,
- address:this.shopInfo.address,
- shopId:this.shopId,
- products:this.carList,
- total:this.total,
- openTime:this.shopInfo.openTime,
- closeTime:this.shopInfo.closeTime,
- totalNum:this.totalNum
- }
- uni.navigateTo({
- url:`/orderFood/pay`,
- success: function(res) {
- // 通过eventChannel向被打开页面传送数据
- res.eventChannel.emit('pay', info)
- }
- })
- }else{
- uni.showModal({
- title:'此商品需要开通会员才能购买',
- cancelText:'下次再说',
- confirmText:'立即开通',
- success(res) {
- if(res.confirm){
- uni.navigateTo({
- url:'/my/memberCenter/index'
- })
- }
- }
- })
- }
- }else{
- uni.showModal({
- title:'请登录',
- confirmText:'去登录',
- success(res){
- console.log(res);
- if(res.confirm){
- uni.navigateTo({
- url:`/login/login/login?redirect=/orderFood/shopDetail&id=${that.shopId}`
- })
- }
- }
- })
- }
-
- },
- isInBusinessHours(openTimeStr, closeTimeStr) {
- let open = openTimeStr
- let close = closeTimeStr
- if(open.indexOf('.') != -1){
- let index = open.indexOf('.')
- open = open.substr(0,index)
- }
- if(close.indexOf('.') != -1){
- let index = close.indexOf('.')
- close = close.substr(0,index)
- }
- const now = new Date();
- const openTime = new Date(open);
- const closeTime = new Date(close);
-
- // 获取当前时间的时分秒
- const nowHours = now.getHours();
- const nowMinutes = now.getMinutes();
- const nowSeconds = now.getSeconds();
-
- // 获取开店时间的时分秒
- const openHours = openTime.getHours();
- const openMinutes = openTime.getMinutes();
- const openSeconds = openTime.getSeconds();
-
- // 获取关店时间的时分秒
- const closeHours = closeTime.getHours();
- const closeMinutes = closeTime.getMinutes();
- const closeSeconds = closeTime.getSeconds();
-
- // 将当前时间、开店时间和关店时间转换为秒数
- const nowSecondsTotal = nowHours * 3600 + nowMinutes * 60 + nowSeconds;
- const openSecondsTotal = openHours * 3600 + openMinutes * 60 + openSeconds;
- const closeSecondsTotal = closeHours * 3600 + closeMinutes * 60 + closeSeconds;
-
- if ( openSecondsTotal <nowSecondsTotal && nowSecondsTotal<closeSecondsTotal ) {
- return true
- } else {
- return false
- }
- }
- },
- onLoad(options) {
- console.log(this.isInBusinessHours("2019-08-24T09:15:22.123Z","2019-08-24T14:15:22.123"));
-
- this.cateName = options.cateName
- this.shopId = options.id || "63836999-5117-4980-8632-497f007808ef"
- // this.shopId = "63836999-5117-4980-8632-497f007808ef"
- this.shopDetail()
- this.menuList()
- },
- onReady () {
- // this.Observer = uni.createIntersectionObserver(this)
-
- // this.Observer.relativeTo('.test',{bottom: 0}).observe('.title0', (res) => {
- // console.log(12312);
- // // this.$emit('changeTag',this.value)
- // })
- }
- }
- </script>
- <style lang="scss" >
- .orderFood{
- .shop-info{
- width: 100%;
- height: 140rpx;
- padding: 20rpx 24rpx;
- box-sizing: border-box;
- border-bottom: 2rpx solid #F0F0F0;
- // position: fixed;
- // top: 0%;
- // left: 0%;
- // z-index: 9;
- background: #fff;
- .shop-name{
- font-weight: bold;
- font-size: 32rpx;
- color: #222222;
- }
- .address{
- font-size: 24rpx;
- color: #AAAAAA;
- margin-top: 8rpx;
- }
- }
- .content{
- height: calc(100vh - 140rpx);
- display: flex;
- overflow: auto;
- box-sizing: border-box;
- padding-bottom: calc(98rpx + env(safe-area-inset-bottom)) ;
- .left{
- flex: 0 0 176rpx;
- background: #F7F7F7;
- .item{
- text-align: center;
- padding: 16rpx 0;
- .icon{
- width: 76rpx;
- height: 76rpx;
- }
- .name{
- font-size: 24rpx;
- color: #AAAAAA;
- }
- }
- .item.active{
- background: #FFFFFF;
- .name{
- color: #222222;
- }
- }
- }
- .right{
- flex: 1;
- padding: 0 24rpx;
- overflow: auto;
- position: relative;
- .test{
- width: 100%;
- height: 60rpx;
- background: red;
- position: fixed;
- }
- .section{
- .section-name{
- font-weight: bold;
- font-size: 28rpx;
- color: #222222;
- padding-top: 30rpx;
- }
- .item{
- display: flex;
- margin-top: 28rpx;
- .img{
- width: 160rpx;
- height: 160rpx;
- border-radius: 8rpx 8rpx 8rpx 8rpx;
- }
- .info{
- flex: 1;
- margin-left: 26rpx;
- display: flex;
- flex-direction: column;
- justify-content: space-around;
- .title{
- font-weight: bold;
- font-size: 32rpx;
- color: #222222;
- }
- .btn-box{
- display: flex;
- justify-content: space-between;
- .price-box{
- display: flex;
- align-items: center;
- .price{
- display: flex;
- align-items: flex-end;
- color: #FF4D3A;
- .unit{
- font-size: 20rpx;
- }
- .num{
- font-weight: bold;
- font-size: 36rpx;
- }
- }
- .old-price{
- font-weight: normal;
- font-size: 24rpx;
- color: #AAAAAA;
- text-decoration: line-through;
- margin-left: 16rpx;
- }
- }
- .btn{
- width: 40rpx;
- height: 40rpx;
- }
- }
- }
- }
- }
- }
- }
-
- .total-box1{
- position: inherit!important;
- padding-bottom: 0!important;
- }
- .total-box{
- position: fixed;
- left: 0%;
- bottom: 0;
- width: 100%;
- padding: 10rpx 24rpx env(safe-area-inset-bottom);
- box-sizing: border-box;
- display: flex;
- align-items: center;
- justify-content: space-between;
- border-top: 1rpx solid #EEEEEE;
- .price-box{
- display: flex;
- .car-box{
- position: relative;
- display: flex;
- align-items: center;
- .icon{
- width: 48rpx;
- height: 48rpx;
- }
- .num{
- position: absolute;
- top: -18rpx;
- right: -18rpx;
- min-width: 36rpx;
- height: 36rpx;
- line-height: 36rpx;
- text-align: center;
- border-radius: 18rpx;
- background: #222222;
- font-weight: bold;
- font-size: 24rpx;
- color: #FFFFFF;
- margin-left: 20rpx;
- }
- }
- .price{
- display: flex;
- align-items: flex-end;
- color: #FF4D3A;
- .unit{
- font-size: 20rpx;
- }
- .num{
- font-weight: bold;
- font-size: 36rpx;
- }
- }
- }
-
- .buy{
- width: 200rpx;
- height: 80rpx;
- line-height: 80rpx;
- text-align: center;
- background: #EE4320;
- border-radius: 40rpx 40rpx 40rpx 40rpx;
- font-weight: bold;
- font-size: 28rpx;
- color: #FFFFFF;
- margin: 0;
-
- }
- .buy::after{
- border: none;
- outline: none;
- }
- .buy.disabled{
- background: #F6F6F6;
- color: #AAAAAA;
-
- }
- }
- .popup-title-box{
- display: flex;
- justify-content: space-between;
- padding: 24rpx;
- .title{
- font-weight: bold;
- font-size: 28rpx;
- color: #222222;
- }
- .clear{
- font-size: 28rpx;
- color: #AAAAAA;
- }
- }
- .u-empty{
- padding: 30rpx 0;
- }
-
- .car-content{
- padding-bottom: 30rpx;
- max-height: 700rpx;
- overflow: auto;
- .item{
- display: flex;
- margin-top: 28rpx;
- padding: 0 24rpx;
- .img{
- width: 160rpx;
- height: 160rpx;
- border-radius: 8rpx 8rpx 8rpx 8rpx;
- }
- .info{
- flex: 1;
- margin-left: 26rpx;
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- .title{
- font-weight: bold;
- font-size: 32rpx;
- color: #222222;
- }
- .type{
- font-weight: normal;
- font-size: 24rpx;
- color: #AAAAAA;
- }
- .btn-box{
- display: flex;
- justify-content: space-between;
- .price-box{
- display: flex;
- align-items: center;
- .price{
- display: flex;
- align-items: flex-end;
- color: #FF4D3A;
- .unit{
- font-size: 20rpx;
- }
- .num{
- font-weight: bold;
- font-size: 36rpx;
- }
- }
- .old-price{
- font-weight: normal;
- font-size: 24rpx;
- color: #AAAAAA;
- text-decoration: line-through;
- margin-left: 16rpx;
- }
- }
- .count-box{
- display: flex;
- align-items: center;
- .num{
- width: 100rpx;
- text-align: center;
- font-size: 28rpx;
- color: #222222;
- }
- .btn{
- width: 40rpx;
- height: 40rpx;
- }
- }
- }
- }
- }
- }
- .modal-box{
- .shop-name{
- font-weight: 600;
- font-size: 32rpx;
- color: #181818;
- width: 100%;
- text-align: center;
-
- }
- .address{
- font-weight: 300;
- font-size: 24rpx;
- color: #AAAAAA;
- margin-top: 4rpx;
- width: 100%;
- text-align: center;
- }
-
- .notice{
- margin-top: 20rpx;
- font-weight: 300;
- font-size: 24rpx;
- color: #AAAAAA;
- text-align: center;
- }
- }
-
- .popup-goodsDetail{
- padding-bottom: env(safe-area-inset-bottom);
- .img{
- width: 750rpx;
- height: 400rpx;
- vertical-align: bottom;
- }
- .box{
- max-height: 60vh;
- overflow: auto;
- }
- .popup-content{
- padding: 0 24rpx;
- .title{
- font-weight: 800;
- font-size: 32rpx;
- color: #222222;
- margin-top: 24rpx;
- }
- .desc{
- font-size: 24rpx;
- color: #222222;
- margin: 24rpx 0;
- }
- .choose-box{
- margin-top: 20rpx;
- .choose-item{
- .choose-title{
- font-size: 28rpx;
- color: #222222;
- }
- .item-box{
- display: flex;
- flex-wrap: wrap;
- padding: 20rpx 0;
- .item{
- font-size: 24rpx;
- color: #222222;
- padding: 0 20rpx;
- line-height: 44rpx;
- height: 44rpx;
- background: #fff;
- border-radius: 8rpx 8rpx 8rpx 8rpx;
- border: 2rpx solid #F0F0F0;
- margin-right: 20rpx;
- margin-bottom: 10rpx;
- }
- .item.active{
- border: 2rpx solid #EE4320;
- background: #FEECE8;
- }
- .item.disable{
- color: #AAAAAA;
- pointer-events: none;
- }
- }
- }
- }
- }
- .btn-box{
- padding: 20rpx 24rpx;
- border-top: 1rpx solid #EEEEEE;
- .order-info{
- display: flex;
- align-items: center;
- justify-content: space-between;
- .left{
- .price-box{
- display: flex;
- align-items: center;
- .price{
- font-weight: bold;
- font-size: 28rpx;
- color: #222222;
- }
- .old-price{
- font-size: 22rpx;
- color: #AAAAAA;
- text-decoration: line-through;
- }
- }
- .choose{
- font-size: 20rpx;
- color: #AAAAAA;
- margin-top: 8rpx;
- }
- }
- .count-box{
- display: flex;
- align-items: center;
- .num{
- width: 100rpx;
- text-align: center;
- font-size: 28rpx;
- color: #222222;
- }
- .btn1{
- width: 40rpx;
- height: 40rpx;
- }
- }
- }
- .btn{
- width: 702rpx;
- height: 80rpx;
- background: #EE4320;
- font-weight: bold;
- font-size: 28rpx;
- color: #FFFFFF;
- margin-top: 24rpx;
- }
- }
- }
- }
- </style>
|