123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- <template>
- <view class="rf-product-list">
- <view class="rf-product-list-container">
- <block v-for="(item, index) in list" :key="index">
- <!--礼品列表-->
- <view
- v-if="(index + 1) % 2 !== 0 || isList"
- class="rf-product-item"
- @tap.stop="navTo(`/pages/product/product?id=${item.id}`)"
- :class="[isList ? 'rf-product-flex-list' : '']"
- hover-class="hover"
- :hover-start-time="150"
- >
- <view class="rf-product-image-wrapper">
- <image :src="item.picture" mode="widthFix" :preview="false" :class="[isList?'rf-product-list-img':'rf-product-img']" ></image>
- <text class="sketch in1line">{{ item.sketch }}</text>
- <view class="triangle-wrapper">
- <image class="triangle-tag" :src="item | filterTagName"></image>
- </view>
- </view>
- <view class="rf-pro-content">
- <view class="rf-pro-tit">{{ item.name }}</view>
- <view v-if="item">
- <view class="rf-pro-price">
- <text class="rf-sale-price" :class="'text-'+themeColor.name">{{ moneySymbol }}{{ item.price }}</text>
- <text class="rf-factory-price" v-if="item.market_price > item.price">{{ moneySymbol }}{{ item.market_price }}</text>
- </view>
- <view class="rf-pro-pay">
- <text
- ><text :class="'text-'+themeColor.name">{{
- item.total_sales | filterTotalSales
- }}</text>
- 人付款</text
- >
- <text
- @tap.stop="toggleSpec(item)"
- class="iconfont icongouwuche2"
- :class="'text-'+themeColor.name"
- ></text>
- </view>
- </view>
- </view>
- </view>
- <!--礼品列表-->
- </block>
- </view>
- <view class="rf-product-list-container" v-if="!isList">
- <block v-for="(item, index) in list" :key="index">
- <!--礼品列表-->
- <view
- v-if="(index + 1) % 2 === 0"
- class="rf-product-item"
- @tap.stop="navTo(`/pages/product/product?id=${item.id}`)"
- :class="[isList ? 'rf-product-flex-list' : '']"
- hover-class="hover"
- :hover-start-time="150"
- >
- <view class="rf-product-image-wrapper">
- <image :src="item.picture" mode="widthFix" :preview="false" :class="[isList?'rf-product-list-img':'rf-product-img']" ></image>
- <text class="sketch in1line">{{ item.sketch }}</text>
- <view class="triangle-wrapper" v-if="item.shipping_type === '1' || item.is_virtual === '1' || item.commissionRate || item.is_open_presell === '1'">
- <image class="triangle-tag" :src="item | filterTagName"></image>
- </view>
- </view>
- <view class="rf-pro-content">
- <view class="rf-pro-tit">{{ item.name }}</view>
- <view v-if="item">
- <view class="rf-pro-price">
- <text class="rf-sale-price" :class="'text-'+themeColor.name">{{ moneySymbol }}{{ item.price }}</text>
- <text class="rf-factory-price" v-if="item.market_price > item.price">{{ moneySymbol }}{{ item.market_price }}</text>
- </view>
- <view class="rf-pro-pay">
- <text
- ><text :class="'text-'+themeColor.name">{{
- item.total_sales | filterTotalSales
- }}</text>
- 付款</text
- >
- <text
- @tap.stop="toggleSpec(item)"
- :class="'text-'+themeColor.name"
- class="iconfont icongouwuche2"
- ></text>
- </view>
- </view>
- </view>
- </view>
- <!--礼品列表-->
- </block>
- </view>
- <!-- 规格-模态层弹窗 -->
- <view
- class="popup spec show"
- v-if="specClass === 'show'"
- @touchmove.stop.prevent="stopPrevent"
- @tap="hideSpec"
- >
- <!-- 遮罩层 -->
- <view class="mask" @tap="hideSpec"></view>
- <view class="layer" :style="{bottom: bottom ? `${bottom}upx` : 0}" @tap.stop="stopPrevent">
- <rf-attr-content
- :product="productDetail"
- @toggle="toggleSpec"
- :showBuyBtn="true"
- ></rf-attr-content>
- </view>
- </view>
- </view>
- </template>
- <script>
- /**
- * @des 礼品列表
- *
- * @author stav stavyan@qq.com
- * @date 2020-05-15 10:49
- */
- import { productDetail, cartItemCount, cartItemCreate } from '@/api/product';
- import rfAttrContent from '@/components/rf-attr-content';
- import $mAssetsPath from '@/config/assets.config';
- import { mapMutations } from 'vuex';
- export default {
- name: 'rfProductList',
- props: {
- list: {
- type: Array,
- default() {
- return [];
- }
- },
- // 是否以列表展示 | 列表或大图
- isList: {
- type: Boolean,
- default: false
- },
- // 是否以列表展示 | 列表或大图
- bottom: {
- type: Number,
- default: 0
- }
- },
- components: {
- rfAttrContent
- },
- data() {
- return {
- specClass: 'none',
- moneySymbol: this.moneySymbol,
- productDetail: {}
- };
- },
- filters: {
- filterTotalSales(val) {
- if (val > 10000) {
- val = `${(val / 10000).toFixed(2)}w`;
- }
- return val;
- },
- filterTagName(val) {
- if (val.commissionRate) {
- // 分销礼品
- return $mAssetsPath.distribution;
- } else if (val.is_virtual === '1') {
- // 虚拟产品
- return $mAssetsPath.virtual;
- } else if (val.shipping_type === '1') {
- // 包邮产品
- return $mAssetsPath.pinkage;
- }
- }
- },
- methods: {
- ...mapMutations(['setCartNum']),
- // 跳转详情
- navTo(route) {
- this.$mRouter.push({ route });
- },
- // 获取产品详情
- async getProductDetail(row) {
- await this.$http
- .get(`${productDetail}`, {
- id: row.id
- })
- .then(async r => {
- this.productDetail = await r.data;
- this.productDetail.sku_name = row.sku_name;
- this.specClass = 'show';
- });
- },
- // 规格弹窗开关
- toggleSpec(row) {
- if (parseInt(row.status, 10) === 0) return;
- if (this.specClass === 'show') {
- this.specClass = 'hide';
- if (row.stock === 0) {
- this.$mHelper.toast('库存不足');
- return;
- }
- if (row.type.toString() === '1') {
- // 加入购物车
- this.handleCartItemCreate(row.skuId, row.cartCount);
- } else if (row.type.toString() === '2') {
- // 立即购买
- const list = {};
- const data = {};
- data.sku_id = row.skuId;
- data.num = row.cartCount;
- if (
- this.productDetail.point_exchange_type.toString() === '2' ||
- this.productDetail.point_exchange_type.toString() === '4' ||
- (this.productDetail.point_exchange_type.toString() === '3' &&
- this.isPointExchange)
- ) {
- list.type = 'point_exchange';
- } else {
- list.type = 'buy_now';
- }
- list.data = JSON.stringify(data);
- this.navTo(`/pages/order/create/order?data=${JSON.stringify(list)}`);
- }
- setTimeout(() => {
- this.specClass = 'none';
- }, 250);
- } else if (this.specClass === 'none') {
- this.getProductDetail(row);
- }
- },
- stopPrevent() {},
- hideSpec() {
- this.specClass = 'hide';
- setTimeout(() => {
- this.specClass = 'none';
- }, 250);
- },
- // 添加礼品至购物车
- async handleCartItemCreate(skuId, cartCount) {
- await this.$http
- .post(`${cartItemCreate}`, {
- sku_id: skuId,
- num: cartCount
- })
- .then(async () => {
- await this.$http.get(`${cartItemCount}`).then(async r => {
- this.setCartNum(r.data);
- });
- this.$mHelper.toast('添加购物车成功');
- });
- }
- }
- };
- </script>
|