1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189 |
- <template>
- <view class="app-goods-list">
- <template v-if="showCat && catList.length > 1">
- <scroll-view class="app-scroll-view dir-left-nowrap" scroll-x scroll-with-animation>
- <text class="app-nav-item" @click="change(index)"
- :class="{'app-active-current': catStyle === 1 && activeCurrent === index,
- 'app-active-current-round': catStyle === 2 && activeCurrent === index,
- 'app-current-round': catStyle === 2
- }"
- :key="index"
- v-for="(item, index) in catList"
- >{{item.menuName}}
- </text>
- </scroll-view>
- </template>
- <template v-if="showCat && catPosition === 'left'">
-
- </template>
- <template v-else>
- <app-form-id>
- <view class="goods-list" :class="listClass">
- <block v-for="(goods, index) in newData" :key="index">
- <template v-if="listStyle === -1">
- <!-- 列表模式 -->
- <view :style="[{'background-color':`${goodsStyle != 3 ? '#fff' : ''}`}]" class="goods-item app-list-mode dir-left-nowrap" @click="jump(goods)"
- :class="goodsStyle === 3 ? 'no-border' : goodsStyle === 2 ? 'border' : ''">
- <view :style="[{'border-radius': `${lisRadius}`}]" class="out-dialog" v-if="(goods.goods_stock == 0 || goods.goods.goods_stock == 0) && appSetting.is_show_stock == '1'">
- <image :style="[{'border-radius': `${lisRadius}`}]" :src="appSetting.is_use_stock == '1' ? appImg.plugins_out : appSetting.sell_out_pic"></image>
- </view>
- <view class="box-grow-0">
- <app-image
- :borderRadius="lisRadius"
- v-if="sign === 'advance'"
- :img-src="goods.goods.goodsWarehouse.cover_pic"
- width="200rpx"
- height="200rpx"
- :mode="fill === 1 ? 'aspectFill' : 'aspectFit'"
- ></app-image>
- <app-image
- v-else
- :borderRadius="lisRadius"
- :img-src="goods.cover_pic"
- width="200rpx"
- height="200rpx"
- :mode="fill === 1 ? 'aspectFill' : 'aspectFit'"
- ></app-image>
- </view>
- <view class="goods-tag" v-if="showGoodsTag">
- <app-image :img-src="goodsTagPicUrl" width="64rpx" height="64rpx"></app-image>
- </view>
- <view class="right box-grow-1 dir-top-nowrap main-between">
- <view class="box-grow-0 goods-name t-omit-two">
- <text class="dir-tag-def"
- v-if="tag && sign === 'advance'"
- >
- {{goods.people_num ? goods.people_num : ''}}{{tag}}
- </text>
- <text class="dir-tag-def"
- v-if="tag && sign === 'pick'"
- >
- {{goods.people_num ? goods.people_num : ''}}{{tag}}
- </text>
- <text class="tag"
- :class="theme + '-color ' + theme + '-border'"
- v-if="tag && sign !== 'advance' && sign !== 'pick' && ((sign == 'pintuan' && goods.people_num) || sign != 'pintuan')"
- >
- {{goods.people_num ? goods.people_num : ''}}{{tag}}
- </text>
- <text v-if="sign === 'advance'">{{showGoodsName ? goods.goods.goodsWarehouse.name : ''}}</text>
- <text v-else>{{showGoodsName ? goods.name : ''}}</text>
- </view>
- <view class=" dir-top-nowrap main-around box-grow-1">
- <view class="box-grow-0 timer" v-if="showTimer">
- <app-goods-timer
- v-if="sign === 'advance'"
- :list-style="listStyle"
- :start-date-time="goods.start_prepayment_at"
- :end-date-time="goods.end_prepayment_at"
- :sign="sign" :page-hide="pageHide"
- ></app-goods-timer>
- <app-goods-timer
- v-else
- :list-style="listStyle"
- :start-date-time="goods.start_time"
- :end-date-time="goods.end_time"
- :sign="sign" :page-hide="pageHide"
- ></app-goods-timer>
- </view>
- <view class="price dir-left-nowrap cross-bottom">
- <view class="box-grow-1" :class="theme + '-color '">
- <view v-if="goods.is_level == 1 && goods.is_negotiable != 1 && sign !== 'advance' && sign !== 'pick'">
- <app-member-price :price="goods.level_price"></app-member-price>
- </view>
- <template v-if="sign !== 'pick'">
- <app-sup-vip :is_vip_card_user="goods.vip_card_appoint.is_vip_card_user" v-if="sign != 'advance' && goods.vip_card_appoint.discount > 0" margin="8rpx 0 0" :discount="goods.vip_card_appoint.discount"></app-sup-vip>
- </template>
- <template v-if="sign === 'advance'">
- <text class="des-price">
- 定金¥{{goods.deposit}}抵¥{{goods.swell_deposit}}
- </text>
- <view class="dir-left-nowrap cross-center">
- <view class="advance-member" v-if="goods.is_level == 1 && goods.is_negotiable != 1">
- <app-member-price :price="goods.level_price"></app-member-price>
- </view>
- <app-sup-vip :is_vip_card_user="goods.vip_card_appoint.is_vip_card_user" margin="8rpx 0 0" v-if="goods.vip_card_appoint.discount > 0" :discount="goods.vip_card_appoint.discount"></app-sup-vip>
- </view>
- <view class="dir-left-nowrap main-left cross-center" v-if="showGoodsPrice">
- <view>¥{{showGoodsPrice ?
- goods.goods.price :
- ''}}
- </view>
- <view class="original-price" style="margin-left: 10upx;" v-if="goods.goods.goodsWarehouse.original_price">
- ¥{{goods.goods.goodsWarehouse.original_price}}
- </view>
- </view>
- </template>
- <template v-else-if="sign === 'pick'">
- <text class="tag">
- {{goods.rule_price}}元选{{goods.rule_num}}{{goods.unit}}
- </text>
- <view class="dir-left-nowrap cross-center">
- <!-- <view class="advance-member" v-if="goods.is_level == 1 && goods.is_negotiable != 1">-->
- <!-- <app-member-price :price="goods.level_price"></app-member-price>-->
- <!-- </view>-->
- <app-sup-vip :is_vip_card_user="goods.vip_card_appoint.is_vip_card_user" margin="8rpx 0 0" v-if="goods.vip_card_appoint.discount > 0" :discount="goods.vip_card_appoint.discount"></app-sup-vip>
- </view>
- <view class="dir-left-nowrap main-left cross-center" v-if="showGoodsPrice">
- <view>¥{{showGoodsPrice ?
- goods.price :
- ''}}
- </view>
- <view class="original-price" style="margin-left: 10upx;" v-if="goods.original_price">
- ¥{{goods.original_price}}
- </view>
- </view>
- </template>
- <template v-else>
- <view class="t-omit">{{showGoodsPrice || sign !== 'goods' ?
- goods.price_content :
- ''}}
- </view>
- <view class="original-price" v-if="goods.original_price && (showGoodsPrice || sign !== 'goods')">
- ¥{{goods.original_price}}
- </view>
- </template>
- </view>
- <template v-if="showBuyBtn && goods.is_negotiable != 1 && goods.goods_stock != 0 && goods.goods.goods_stock != 0">
- <view @click.stop="buyProduct(goods)"
- class="box-grow-0 buy-btn main-center cross-center"
- :style="btnStyle"
- :class="buyBtnClass" v-if="buyBtn === 'text' || sign !== 'goods'">
- {{buyBtnText}}
- </view>
- <icon @click.stop="buyProduct(goods)"
- class="box-grow-0 app-button-icon"
- :class="'app-button-icon-' + buyBtn" v-else></icon>
- </template>
- </view>
- </view>
- </view>
- </view>
- </template>
- <template v-else-if="listStyle === 0">
- <!-- 左右滑动 -->
- <view :style="[{'background-color':`${goodsStyle != 3 ? '#fff' : ''}`}]" class="goods-item app-scroll dir-top-nowrap" :class="goodsClass" @click="jump(goods)">
- <view :style="[{'border-radius': `${imgRadius}`}]" class="out-dialog" v-if="(goods.goods_stock == 0 || goods.goods.goods_stock == 0) && appSetting.is_show_stock == '1'">
- <image :style="[{'border-radius': `${imgRadius}`}]" :src="appSetting.is_use_stock == '1' ? appImg.plugins_out : appSetting.sell_out_pic"></image>
- </view>
- <view>
- <app-image :borderRadius="imgRadius" :img-src="goods.cover_pic" width="200rpx" height="200rpx"
- :mode="fill === 1 ? 'aspectFill' : 'aspectFit'"></app-image>
- </view>
- <view class="goods-tag" v-if="showGoodsTag">
- <app-image :img-src="goodsTagPicUrl" width="64rpx" height="64rpx"></app-image>
- </view>
- <view class="goods-name t-omit-two" v-if="showGoodsName">{{goods.name}}</view>
- <view class="box-grow-1 dir-top-nowrap main-right price">
- <view v-if="goods.is_level == 1 && goods.is_negotiable != 1 && sign !== 'pick'">
- <app-member-price :price="goods.level_price"></app-member-price>
- </view>
- <app-sup-vip :is_vip_card_user="goods.vip_card_appoint.is_vip_card_user" margin="8rpx 0 0" v-if="goods.vip_card_appoint.discount > 0" :discount="goods.vip_card_appoint.discount"></app-sup-vip>
- <view class="dir-left-nowrap cross-center">
- <view class="box-grow-1 t-omit" :class="theme + '-color'">
- {{showGoodsPrice ? goods.price_content : ''}}
- </view>
- <template v-if="showBuyBtn && textStyle != 2 && goods.is_negotiable != 1 && goods.goods_stock != 0 && goods.goods.goods_stock != 0">
- <view @click.stop="buyProduct(goods)"
- class="box-grow-0 buy-btn main-center cross-center" :style="btnStyle"
- :class="buyBtnClass" v-if="buyBtn === 'text'">
- {{buyBtnText}}
- </view>
- <icon @click.stop="buyProduct(goods)" class="box-grow-0 app-button-icon"
- :class="'app-button-icon-' + buyBtn" v-else></icon>
- </template>
- </view>
- </view>
- </view>
- </template>
- <template v-else-if="listStyle === 1">
- <!-- 一行一个 -->
- <view :style="[{'background-color':`${goodsStyle != 3 ? '#fff' : ''}`}]" class="goods-item app-column-1" :class="goodsClass" @click="jump(goods)">
- <view style="position: relative;">
- <view class="out-dialog" :style="[{'height':`${coverPicHeight}`,'border-radius': `${imgRadius}`}]" v-if="(goods.goods_stock == 0 || goods.goods.goods_stock == 0) && appSetting.is_show_stock == '1'">
- <image v-if="coverPicHeight == '468rpx'" :style="[{'height':`${coverPicHeight}`,'border-radius': `${imgRadius}`}]" :src="appSetting.is_use_stock == '1' ? appImg.rate_out : appSetting.sell_out_other_pic"></image>
- <image v-else :style="[{'height':`${coverPicHeight}`,'border-radius': `${imgRadius}`}]" :src="appSetting.is_use_stock == '1' ? appImg.one_out : appSetting.sell_out_pic"></image>
- </view>
- <view>
- <app-image :borderRadius="imgRadius" v-if="sign === 'advance'"
- :img-src="goods.goods.goodsWarehouse.cover_pic"
- width="100%"
- :height="coverPicHeight"
- :mode="fill === 1 ? 'aspectFill' : 'aspectFit'"
- ></app-image>
- <app-image :borderRadius="imgRadius" v-else
- :img-src="goods.cover_pic"
- width="100%"
- :height="coverPicHeight"
- :mode="fill === 1 ? 'aspectFill' : 'aspectFit'"
- ></app-image>
- </view>
- <view class="goods-tag" v-if="showGoodsTag">
- <app-image :img-src="goodsTagPicUrl"
- width="64rpx"
- height="64rpx"
- >
- </app-image>
- </view>
- <view class="box-grow-0 timer" v-if="showTimer">
- <template v-if="sign === 'advance'">
- <app-goods-timer
- :list-style="listStyle"
- :start-date-time="goods.start_prepayment_at"
- :end-date-time="goods.end_prepayment_at"
- :sign="sign" :page-hide="pageHide"
- ></app-goods-timer>
- </template>
- <template v-else>
- <app-goods-timer
- :list-style="listStyle"
- :start-date-time="goods.start_time"
- :end-date-time="goods.end_time"
- :sign="sign" :page-hide="pageHide"
- ></app-goods-timer>
- </template>
- </view>
- </view>
- <view class="goods-name t-omit" v-if="showGoodsName">
- <template v-if="sign === 'advance'">
- <text>{{showGoodsName ? goods.goods.goodsWarehouse.name : ''}}</text>
- </template>
- <template v-if="sign === 'pick'">
- <text class="tag-pick" :class="theme + '-color ' + theme + '-border'" v-if="tag && sign == 'pick'">
- {{tag}}
- </text>
- <text>{{showGoodsName ? goods.name : ''}}</text>
- </template>
- <template v-else>
- <text class="tag" :class="theme + '-color ' + theme + '-border'" v-if="tag && sign == 'pintuan' && goods.people_num">
- {{goods.people_num ? goods.people_num : ''}}{{tag}}
- </text>
- <text>{{showGoodsName ? goods.name : ''}}</text>
- </template>
- </view>
- <template v-if="sign === 'advance' ">
- <text class="des-price" style="margin-left: 24rpx;margin-top: 15rpx;">
- 定金¥{{goods.deposit}}抵¥{{goods.swell_deposit}}
- </text>
- </template>
- <template v-if="sign === 'pick'">
- <text class="des-price" style="margin-left: 24rpx;margin-top: 15rpx;">
- {{goods.rule_price}}元选{{goods.rule_num}}{{goods.unit}}
- </text>
- </template>
- <view class="price dir-left-nowrap cross-center" :style="{marginTop: sign === 'advance' ? '0rpx' : '16rpx'}">
- <view class="box-grow-1 t-omit" :class="theme + '-color'">
- <view v-if="sign === 'advance'" class="dir-left-nowrap cross-center" :class="textStyle == 2 ? 'main-center' : ''">
- <view v-if="goods.goods.is_level == 1">
- <app-member-price :price="goods.level_price"></app-member-price>
- </view>
- <app-sup-vip :is_vip_card_user="goods.vip_card_appoint.is_vip_card_user" margin='0 0 0 12rpx' v-if="goods.vip_card_appoint.discount > 0" :discount="goods.vip_card_appoint.discount"></app-sup-vip>
- </view>
- <template v-if="sign === 'advance'">
- <view :class="{'dir-left-nowrap': goods.goods.is_level == 1}" v-if="showGoodsPrice">
- <view class="dir-left-nowrap cross-center" :class="{'main-center' :textStyle == 2}">
- <view style="font-size: 22rpx;height: 22rpx;line-height: 22rpx">{{showGoodsPrice ? `¥${goods.goods.price}` : ''}}</view>
- </view>
- <view class="original-price" style="font-size: 17rpx;height:17rpx;line-height: 17rpx;" v-if="goods.goods.goodsWarehouse.original_price">
- ¥{{goods.goods.goodsWarehouse.original_price}}
- </view>
- </view>
- </template>
- <template v-else>
- <view class="dir-left-nowrap cross-center" :class="textStyle == 2 ? 'main-center' : ''">
- <view>{{showGoodsPrice || sign !== 'goods' ? goods.price_content : ''}}</view>
- <view class="member-price" v-if="goods.is_level == 1 && goods.is_negotiable != 1 && sign !== 'pick'">
- <app-member-price margin="" :price="goods.level_price"></app-member-price>
- </view>
- <app-sup-vip :is_vip_card_user="goods.vip_card_appoint.is_vip_card_user" margin='0 0 0 12rpx' v-if="goods.vip_card_appoint.discount > 0" :discount="goods.vip_card_appoint.discount"></app-sup-vip>
- </view>
- <view class="original-price" v-if="goods.original_price && (showGoodsPrice || sign !== 'goods')">
- ¥{{goods.original_price}}
- </view>
- </template>
- </view>
- <template v-if="showBuyBtn && textStyle != 2 && goods.is_negotiable != 1 && goods.goods_stock != 0 && goods.goods.goods_stock != 0">
- <view @click.stop="buyProduct(goods)"
- class="box-grow-0 buy-btn main-center cross-center" :style="btnStyle"
- :class="buyBtnClass" v-if="buyBtn === 'text' || sign !== 'goods'">
- {{buyBtnText}}
- </view>
- <icon @click.stop="buyProduct(goods)" class="box-grow-0 app-button-icon"
- :class="'app-button-icon-' + buyBtn" v-else></icon>
- </template>
- </view>
- </view>
- </template>
- <template v-else-if="listStyle === 2">
- <!-- 一行两个 -->
- <view :style="[{'background-color':`${goodsStyle != 3 ? '#fff' : ''}`}]" class="box-grow-0 dir-top-nowrap goods-item app-column-2" :class="goodsClass"
- @click="jump(goods)">
- <view style="position: relative;">
- <view :style="[{'border-radius': `${imgRadius}`}]" class="out-dialog" v-if="(goods.goods_stock == 0 || goods.goods.goods_stock == 0) && appSetting.is_show_stock == '1'">
- <image :style="[{'border-radius': `${imgRadius}`}]" :src="appSetting.is_use_stock == '1' ? appImg.book_out : appSetting.sell_out_pic"></image>
- </view>
- <view class="box-grow-0">
- <template v-if="sign === 'advance'">
- <app-image :borderRadius="imgRadius" :img-src="goods.goods.goodsWarehouse.cover_pic"
- width="100%"
- height="342rpx"
- :mode="fill === 1 ? 'aspectFill' : 'aspectFit'"
- ></app-image>
- </template>
- <template v-else>
- <app-image :borderRadius="imgRadius" :img-src="goods.cover_pic" width="100%" height="342rpx"
- :mode="fill === 1 ? 'aspectFill' : 'aspectFit'"></app-image>
- </template>
- </view>
- <view class="goods-tag" v-if="showGoodsTag">
- <app-image :img-src="goodsTagPicUrl" width="64rpx"
- height="64rpx"></app-image>
- </view>
- <view class="box-grow-0 timer" v-if="showTimer">
- <template v-if="sign === 'advance'">
- <app-goods-timer :list-style="listStyle" :start-date-time="goods.start_prepayment_at"
- :end-date-time="goods.end_prepayment_at"
- :sign="sign" :page-hide="pageHide"
- ></app-goods-timer>
- </template>
- <template v-else>
- <app-goods-timer :list-style="listStyle" :start-date-time="goods.start_time"
- :end-date-time="goods.end_time"
- :sign="sign" :page-hide="pageHide"
- ></app-goods-timer>
- </template>
- </view>
- </view>
- <view class="box-grow-1 dir-top-nowrap main-between">
- <view class="box-grow-0 goods-name t-omit-two" v-if="showGoodsName">
- <template v-if="sign !== 'advance' && sign !== 'pick'">
- <text class="tag" :class="theme + '-color ' + theme + '-border'" v-if="tag && ((sign == 'pintuan' && goods.people_num) || sign != 'pintuan')">
- {{goods.people_num ? goods.people_num : ''}}{{tag}}
- </text>
- </template>
- <template v-if="sign === 'pick'">
- <text class="dir-tag-def">
- {{tag}}
- </text>
- </template>
- <!-- <template v-else>-->
- <!-- <text class="dir-tag-def">-->
- <!-- {{tag}}-->
- <!-- </text>-->
- <!-- </template>-->
- <text v-if="sign === 'advance'">{{showGoodsName ? goods.goods.goodsWarehouse.name : ''}}</text>
- <text v-else>{{showGoodsName ? goods.name : ''}}</text>
- </view>
- <view v-if="sign === 'advance'">
- <text class="des-price" style="margin-left: 24rpx;">
- 定金¥{{goods.deposit}}抵¥{{goods.swell_deposit}}
- </text>
- </view>
- <view v-if="sign === 'pick'">
- <text class="des-price" style="margin-left: 24rpx;">
- {{goods.rule_price}}元选{{goods.rule_num}}{{goods.unit}}
- </text>
- </view>
- <view :class="textStyle == 2 ? 'main-center' : 'dir-left-nowrap'" style="height: 15px;padding-left: 24rpx;" v-if="sign === 'advance' && goods.goods.is_level == 1 && goods.is_negotiable != 1">
- <view class="member-price">
- <app-member-price :price="goods.level_price"></app-member-price>
- </view>
- </view>
- <app-sup-vip :is_vip_card_user="goods.vip_card_appoint.is_vip_card_user" style="padding-left: 24rpx;" :class="textStyle == 2 ? 'main-center' : ''" margin="4rpx 0" v-if="goods.vip_card_appoint.discount > 0 && sign === 'advance'" :discount="goods.vip_card_appoint.discount"></app-sup-vip>
- <view class="box-grow-0 price dir-left-nowrap cross-center main-between" :style="{marginTop: sign === 'advance' ? '0rpx' : '16rpx'}">
- <template v-if="sign === 'advance'">
- <view :class="textStyle == 2 ? 'main-center advance-center' : ''" style="width: 100%" v-if="showGoodsPrice">
- <view class="dir-top-nowrap main-right cross-top" :class="theme + '-color'">
- <text class="t-omit" style="font-size: 22rpx;height: 22rpx; line-height: 22rpx">
- {{showGoodsPrice ? `¥${goods.goods.price}` : ''}}
- </text>
- <text class="original-price" style="font-size: 17rpx;height: 22rpx; line-height: 22rpx" v-if="goods.goods.goodsWarehouse.original_price">
- ¥{{goods.goods.goodsWarehouse.original_price}}
- </text>
- </view>
- </view>
- </template>
- <template v-else>
- <view class="box-grow-1" :class="theme + '-color'">
- <view class="member-price" :class="textStyle == 2 ? 'main-center' : ''" v-if="goods.is_level == 1 && goods.is_negotiable != 1 && sign !== 'pick'">
- <app-member-price :price="goods.level_price"></app-member-price>
- </view>
- <view :class="textStyle == 2 ? 'main-center' : ''">
- <app-sup-vip :is_vip_card_user="goods.vip_card_appoint.is_vip_card_user" :margin="textStyle == 2 ? '0':'8rpx 0 0'" v-if="goods.vip_card_appoint.discount > 0" :discount="goods.vip_card_appoint.discount"></app-sup-vip>
- </view>
- <view class="t-omit">
- {{showGoodsPrice || sign !== 'goods' ? goods.price_content : ''}}
- </view>
- <view class="original-price" v-if="goods.original_price && (showGoodsPrice || sign !== 'goods')">
- ¥{{goods.original_price}}
- </view>
- </view>
- </template>
- <template v-if="showBuyBtn && textStyle !== 2 && goods.is_negotiable != 1 && goods.goods_stock != 0 && goods.goods.goods_stock != 0">
- <view @click.stop="buyProduct(goods)"
- class="box-grow-0 buy-btn main-center cross-center"
- :style="btnStyle"
- :class="buyBtnClass" v-if="buyBtn === 'text' || sign !== 'goods'">
- {{buyBtnText}}
- </view>
- <icon @click.stop="buyProduct(goods)"
- class="box-grow-0 app-button-icon"
- :class="'app-button-icon-' + buyBtn" v-else></icon>
- </template>
- </view>
- </view>
- </view>
- </template>
- <template v-else-if="listStyle === 3">
- <!-- 一行三个 -->
- <view :style="[{'background-color':`${goodsStyle != 3 ? '#fff' : ''}`}]" class="box-grow-0 dir-top-nowrap goods-item app-column-3" :class="goodsClass"
- @click="jump(goods)">
- <view class="out-dialog" :style="[{'border-radius': `${imgRadius}`}]" v-if="(goods.goods_stock == 0 || goods.goods.goods_stock == 0) && appSetting.is_show_stock == '1'">
- <image :style="[{'border-radius': `${imgRadius}`}]" :src="appSetting.is_use_stock == '1' ? appImg.list_out : appSetting.sell_out_pic" :mode="fill === 1 ? 'aspectFill' : 'aspectFit'"></image>
- </view>
- <view class="box-grow-0">
- <app-image :borderRadius="imgRadius" :img-src="goods.cover_pic" width="100%" height="220rpx"
- :mode="fill === 1 ? 'aspectFill' : 'aspectFit'"></app-image>
- </view>
- <view class="goods-tag" v-if="showGoodsTag">
- <app-image :img-src="goodsTagPicUrl" width="64rpx" height="64rpx"></app-image>
- </view>
- <view class="box-grow-1 dir-top-nowrap main-between">
- <view class="box-grow-0 goods-name t-omit-two" v-if="showGoodsName">
- {{goods.name}}
- </view>
- <view class="box-grow-1 dir-top-nowrap main-right">
- <view class="box-grow-0 member-price price" :class="textStyle == 2 ? 'main-center' : ''" v-if="goods.is_level == 1 && goods.is_negotiable != 1 && sign !== 'pick'">
- <app-member-price :price="goods.level_price"></app-member-price>
- </view>
- <view :class="textStyle == 2 ? 'main-center' : ''">
- <app-sup-vip :is_vip_card_user="goods.vip_card_appoint.is_vip_card_user" :margin="textStyle == 2 ? '0':'8rpx 0 0'" v-if="goods.vip_card_appoint.discount > 0" :discount="goods.vip_card_appoint.discount"></app-sup-vip>
- </view>
- <view class="box-grow-0 price dir-left-nowrap cross-center main-between">
- <view class="box-grow-1" :class="theme + '-color'">
- {{showGoodsPrice || sign !== 'goods' ? goods.price_content : ''}}
- </view>
- <template
- v-if="showBuyBtn && textStyle != 2 && buyBtn !== 'text' && goods.is_negotiable != 1 && goods.goods_stock != 0 && goods.goods.goods_stock != 0">
- <icon @click.stop="buyProduct(goods)"
- class="box-grow-0 app-button-icon"
- :class="'app-button-icon-' + buyBtn"></icon>
- </template>
- </view>
- </view>
- </view>
- </view>
- </template>
- </block>
- </view>
- </app-form-id>
- </template>
- <app-attr :goods="goods" :attrGroupList="goods.attr_groups" :show="attrShow"></app-attr>
- </view>
- </template>
- <script>
- import { mapState, mapGetters } from "vuex";
- import appPrice from "../../page-component/goods/app-price.vue";
- import appGoodsTimer from "./app-goods-timer.vue";
- import appAttr from "../../page-component/app-attr/app-attr.vue";
- import appMemberPrice from "../app-member-mark/app-member-price.vue";
- import appSupVip from '../app-sup-vip/app-sup-vip.vue';
-
- export default {
- name: "app-diy-goods-list",
- components: {
- 'app-price': appPrice,
- 'app-goods-timer': appGoodsTimer,
- 'app-attr': appAttr,
- 'app-member-price': appMemberPrice,
- 'app-sup-vip': appSupVip,
- },
- props: {
- catPosition: {
- type: String,
- default() {
- return 'top';
- }
- },
- showCat: {
- type: Boolean,
- default() {
- return false;
- }
- },
- catList: {
- type: Array,
- default() {
- return [];
- }
- },
- catStyle: {
- type: Number,
- default() {
- return 1;
- }
- },
- list: {
- type: Array,
- default() {
- return [];
- }
- },
- goodsStyle: {
- type: Number,
- default() {
- return 1;
- }
- },
- textStyle: {
- type: Number,
- default() {
- return 1;
- }
- },
- listStyle: {
- type: Number,
- default() {
- return -1;
- }
- },
- showBuyBtn: {
- type: Boolean,
- default() {
- return false;
- }
- },
- buyBtn: {
- type: String,
- default() {
- return 'cart';
- }
- },
- buyBtnText: {
- type: String,
- default() {
- return '购买';
- }
- },
- buyBtnStyle: {
- type: Number,
- default() {
- return 1;
- }
- },
- fill: {
- type: Number,
- default() {
- return 1;
- }
- },
- showGoodsName: {
- type: Boolean,
- default() {
- return true;
- }
- },
- showGoodsPrice: {
- type: Boolean,
- default() {
- return true;
- }
- },
- showGoodsTag: {
- type: Boolean,
- default() {
- return true;
- }
- },
- goodsCoverProportion: {
- type: String,
- default() {
- return '1-1';
- }
- },
- customizeGoodsTag: {
- type: Boolean,
- default() {
- return false;
- }
- },
- goodsTagPicUrl: String,
- sign: String,
- buttonColor: {
- type: String,
- default() {
- return '#ff4544';
- }
- },
- pageHide: Boolean,
- },
- data() {
- return {
- activeCurrent: 0,
- goods: null,
- imgRadius: '16rpx 16rpx 0 0',
- lisRadius: '16rpx',
- attrShow: 0,
- };
- },
- computed: {
- ...mapState({
- appImg: state => state.mallConfig.__wxapp_img.mall,
- appSetting: state => state.mallConfig.mall.setting,
- theme: state => state.mallConfig.theme
- }),
- ...mapGetters('mallConfig',{
- vip: 'getVip',
- getVideo: 'getVideo'
- }),
- newData() {
- if (this.showCat) {
- return this.catList[this.activeCurrent].goodsList
- } else {
- return this.list;
- }
- },
- listClass() {
- let listClass = ``;
- if (this.listStyle === 0) {
- return `dir-left-nowrap scroll`;
- } else if (this.listStyle === 2) {
- return `dir-left-wrap column-2 main-between `;
- } else if (this.listStyle === 3) {
- return `dir-left-wrap column-3 `;
- }
- return listClass;
- },
- buyBtnClass() {
- let buyBtnClass = ``;
- if (this.buyBtnStyle === 2 || this.buyBtnStyle === 4) {
- buyBtnClass += `buy-btn-border `;
- }
- if (this.buyBtnStyle === 4 || this.buyBtnStyle === 3) {
- buyBtnClass += `buy-btn-radius`;
- }
- return buyBtnClass;
- },
- btnStyle() {
- let btnStyle = ``;
- if (this.buyBtnStyle === 1 || this.buyBtnStyle === 3) {
- btnStyle += `background-color: ${this.buttonColor};color: #ffffff;`;
- } else {
- btnStyle += `border-color: ${this.buttonColor};color: ${this.buttonColor};`;
- }
- return btnStyle;
- },
- coverPicHeight() {
- if (this.goodsCoverProportion === '1-1') {
- return `702rpx`;
- } else {
- return `468rpx`;
- }
- },
- goodsClass() {
- let goodsClass = ``;
- if (this.goodsStyle === 2) {
- goodsClass += `border `;
- }
- if (this.textStyle === 2) {
- goodsClass += `text-center `;
- }
- return goodsClass;
- },
- tag() {
- let tag = '';
- if (this.sign === 'miaosha') {
- tag = '秒杀';
- } else if (this.sign === 'bargain') {
- tag = '砍价';
- } else if (this.sign === 'pintuan') {
- tag = '人团';
- } else if (this.sign === 'advance') {
- tag = '预售';
- } else if (this.sign === 'pick') {
- tag = 'N元任选'
- } else {
- tag = null;
- }
- return tag;
- },
- showTimer() {
- if (this.sign === 'miaosha' || this.sign === 'bargain' || this.sign === 'lottery' || this.sign === 'advance') {
- return true;
- } else {
- return false;
- }
- }
- },
- methods: {
- change(index) {
- this.activeCurrent = index;
- },
- jump(data) {
- console.log(data);
- // #ifndef MP-BAIDU
- if (data.video_url && this.getVideo == 1 && data.sign !== 'lottery' && data.sign !== 'bargain') {
- let id = data.id;
- if (data.sign === 'advance') {
- id = data.goods_id;
- }
- uni.navigateTo({
- url: `/pages/goods/video?goods_id=${id}&sign=${data.sign}`
- });
- } else {
- uni.navigateTo({
- url: data.page_url
- });
- }
- // #endif
- // #ifdef MP-BAIDU
- uni.navigateTo({
- url: data.page_url
- });
- // #endif
- },
- buyProduct(goods) {
- if (!(this.sign == 'goods' || this.sign == 'mch') || (typeof goods.is_negotiable != 'undefined' && goods.is_negotiable == 1)) {
- this.jump(goods);
- return;
- }
- uni.showLoading();
- let url = this.$api.goods.detail;
- if (goods.mch_id > 0) {
- url = this.$api.mch.goods_detail;
- }
- this.$request({
- url: url,
- data: {
- id: goods.id,
- mch_id: goods.mch_id,
- }
- }).then(response => {
- uni.hideLoading();
- if (response.code === 0) {
- if (goods.mch_id > 0) {
- this.goods = response.data.detail;
- } else {
- this.goods = response.data.goods;
- }
- this.attrShow = Math.random();
- } else {
- uni.showModal({
- title: '提示',
- content: response.msg,
- showCancel: false
- });
- }
- }).catch(e => {
- uni.hideLoading();
- });
- },
- }
- }
- </script>
- <style scoped lang="scss">
- .advance-member {
- margin-right: #{12rpx};
- }
- .advance-center .original-price {
- width: 100%;
- text-align: center;
- }
- .app-goods-list {
- .app-scroll-view {
- white-space: nowrap;
- width: #{750-5-5rpx};
- margin: 0 #{5rpx};
- height: #{99-1rpx};
- // background-color: #ffffff;
- // border-bottom: #{1rpx} solid #e2e2e2;
- /* #ifdef MP-ALIPAY */
- .app-nav-item {
- display: inline-block;
- height: #{97rpx};
- min-width: #{60rpx};
- line-height: #{97rpx};
- font-size: #{26rpx};
- color: #666666;
- margin: 0 #{44rpx};
- border-bottom: #{1rpx} solid transparent;
- }
- /* #endif */
- /* #ifndef MP-ALIPAY */
- .app-nav-item {
- display: inline-block;
- height: #{97rpx};
- line-height: #{97rpx};
- font-size: #{26rpx};
- color: #666666;
- margin: 0 #{44rpx};
- border-bottom: #{1rpx} solid transparent;
- }
- /* #endif */
- .app-active-current {
- border-bottom-color: #ff5c5c;
- color: #ff5c5c;
- }
- /* #ifdef MP-ALIPAY */
- .app-current-round {
- height: #{56rpx};
- padding-left: #{24rpx};
- min-width: #{100rpx};
- padding-right: #{24rpx};
- border-radius: #{30rpx};
- line-height: #{56rpx};
- margin: #{21.5rpx} #{24rpx};
- }
- /* #endif */
- /* #ifndef MP-ALIPAY */
- .app-current-round {
- height: #{56rpx};
- padding-left: #{24rpx};
- padding-right: #{24rpx};
- border-radius: #{30rpx};
- line-height: #{56rpx};
- margin: #{21.5rpx} #{24rpx};
- }
- /* #endif */
- .app-active-current-round {
- background-color: #ff5c5c;
- color: white;
- }
- }
- %background-image {
- background-repeat: no-repeat;
- background-size: cover;
- background-position: center;
- }
- .goods-list {
- padding: #{24rpx};
- font-size: $uni-font-size-general-one;
- .border {
- border: #{1rpx} solid #e2e2e2;
- }
- .goods-item {
- position: relative;
- .app-button-icon {
- width: #{36rpx};
- height: #{36rpx};
- display: block;
- @extend %background-image;
- }
- .app-button-icon-cart {
- background-image: url('../../../static/image/icon/shopping-cart.png');
- }
- .app-button-icon-add {
- background-image: url('../../../static/image/icon/add-to.png');
- }
- .buy-btn {
- height: #{48rpx};
- padding: 0 #{20rpx};
- }
- .buy-btn-radius {
- border-radius: #{24rpx};
- }
- .buy-btn-border {
- border: #{1rpx} solid;
- }
- .goods-tag {
- position: absolute;
- left: 0;
- top: 0;
- z-index: 10;
- width: #{64rpx};
- height: #{64rpx};
- }
- .original-price {
- font-size: $uni-font-size-weak-two;
- color: $uni-general-color-two;
- text-decoration: line-through;
- }
- .tag {
- padding: 0 #{10rpx};
- margin-right: #{8rpx};
- font-size: $uni-font-size-weak-two;
- border-radius: #{28rpx};
- border: #{2rpx} solid;
- }
- .timer {
- width: 100%;
- }
- .pintuan-tag {
- font-size: $uni-font-size-weak-two;
- margin: #{16rpx} #{12rpx} 0 0;
- padding: 0 #{24rpx};
- .people {
- width: #{70rpx};
- text-align: center;
- border: #{1rpx} solid;
- border-radius: #{2rpx};
- padding: #{2rpx} 0;
- }
- }
- }
- .app-list-mode {
- margin-bottom: #{32rpx};
- position: relative;
- border-radius: #{16rpx};
- .right {
- padding: #{12rpx} #{24rpx} #{12rpx} #{32rpx};
- height: #{200rpx};
- }
- &:last-child {
- margin-bottom: 0;
- }
- .pintuan-tag {
- padding: 0;
- }
- .out-dialog {
- width: #{200rpx};
- height: 100%;
- position: absolute;
- z-index: 10;
- top: 0;
- left: 0;
- background-color: rgba(0,0,0,.5);
- image {
- width: #{200rpx};
- height: #{200rpx};
- }
- }
- }
- .app-column-1 {
- margin-bottom: #{24rpx};
- padding-bottom: #{24rpx};
- border-radius: #{16rpx};
- .out-dialog {
- width: 100%;
- height: #{702rpx};
- z-index: 10;
- position: absolute;
- top: 0;
- left: 0;
- background-color: rgba(0,0,0,.5);
- image {
- width: #{702rpx};
- height: #{702rpx};
- }
- }
- .goods-name {
- margin-top: #{28rpx};
- padding: 0 #{24rpx};
- line-height: 1.4;
- }
- .price {
- margin-top: #{16rpx};
- padding: 0 #{24rpx};
- max-width: #{702rpx};
- .member-price {
- margin-left: #{10rpx};
- }
- }
- .timer {
- position: absolute;
- left: 0;
- bottom: 0;
- z-index: 10;
- }
- .pintuan-tag {
- margin: 0;
- padding-left: 0;
- }
- }
- &.scroll {
- overflow-x: auto;
- padding: #{24rpx};
- .app-scroll {
- border-radius: #{16rpx};
- margin-right: #{16rpx};
- padding-bottom: #{16rpx};
- width: #{200rpx};
- position: relative;
- .out-dialog {
- width: 100%;
- height: #{200rpx};
- z-index: 10;
- position: absolute;
- top: 0;
- left: 0;
- background-color: rgba(0,0,0,.5);
- image {
- width: #{200rpx};
- height: #{200rpx};
- }
- }
- .goods-name {
- margin-top: #{16rpx};
- width: #{200rpx};
- line-height: 1.4;
- }
- .price {
- padding: 0 #{12rpx};
- max-width: #{200rpx};
- }
- }
- }
- &.column-2 {
- padding: #{24rpx} #{23rpx} 0 #{23rpx};
- .app-column-2 {
- margin-bottom: #{24rpx};
- padding-bottom: #{24rpx};
- border-radius: #{16rpx};
- width: #{346rpx};
- .out-dialog {
- width: 100%;
- height: #{342rpx};
- position: absolute;
- z-index: 10;
- top: 0;
- left: 0;
- background-color: rgba(0,0,0,.5);
- image {
- width: #{342rpx};
- height: #{342rpx};
- }
- }
- .goods-name {
- margin-top: #{24rpx};
- padding: 0 #{24rpx};
- width: #{344rpx};
- line-height: 1.4;
- }
- .price {
- margin-top: #{16rpx};
- padding: 0 #{24rpx};
- max-width: #{344rpx};
- }
- .pintuan-tag ~ .price {
- margin-top: #{16rpx};
- }
- .timer {
- position: absolute;
- left: 0;
- bottom: 0;
- z-index: 10;
- }
- }
- }
- &.column-3 {
- padding: #{8rpx} #{24rpx} #{24rpx} #{24rpx};
- .app-column-3 {
- margin-top: #{16rpx};
- border-radius: #{16rpx};
- padding-bottom: #{16rpx};
- width: #{224rpx};
- .out-dialog {
- width: 100%;
- height: #{220rpx};
- position: absolute;
- z-index: 10;
- top: 0;
- z-index: 10;
- left: 0;
- background-color: rgba(0,0,0,.5);
- image {
- width: #{220rpx};
- height: #{220rpx};
- }
- }
- &:nth-child(3n+2) {
- margin-right: #{15rpx};
- margin-left: #{15rpx};
- }
- .goods-name {
- padding: 0 #{12rpx};
- width: #{224rpx};
- line-height: 1.4;
- }
- .price {
- padding: 0 #{12rpx};
- max-width: #{222rpx};
- }
- }
- }
- }
- }
- .des-price {
- display: inline-block;
- padding: #{4rpx 4rpx};
- border: #{1rpx} solid #ff4544;
- border-radius: #{8rpx};
- font-size: #{20rpx};
- color: #ff4544;
- line-height: 1;
- }
- .dir-tag-def {
- padding: 0 #{10rpx};
- margin-right: #{8rpx};
- font-size: $uni-font-size-weak-two;
- border-radius: #{28rpx};
- background-color: #feeeee;
- color: #ff4544
- }
- .seheight {
- height: #{110rpx};
- width: #{430rpx};
- }
- .tag-pick {
- padding: 0 #{10rpx};
- margin-right: #{8rpx};
- font-size: $uni-font-size-weak-two;
- border-radius: #{28rpx};
- background-color: #feeeee;
- color: #ff4d4c;
- }
- </style>
|