123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560 |
- <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,111);
- this.num = 1
- this.item = i
- if(!item.childClassList) return
- this.show2 = true
- this.goodsInfo = {
- product_name:'-',
- product_description:'-',
- product_img:'',
- }
- 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>
|