Files
xo_user_client/components/cart/cart.vue
2025-04-25 09:49:53 +08:00

1691 lines
80 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<view :class="theme_view">
<block v-if="is_first == 0">
<block v-if="(plugins_realstore_info || null) != null">
<!-- 顶部导航 -->
<component-nav-back propClass="bg-white" propColor="#333" :propFixed="false" :propIsShowBack="propSourceType == 'page'">
<template slot="right" class="flex-1 cart-right-title">
<view class="cart-top-nav tc auto">
<view class="cart-top-nav-content bg-grey-f7 round padding-xss cr-black">
<view :class="'item dis-inline-block round cp ' + (cart_type_value == 'shop' ? 'bg-white cr-main' : '')" data-type="shop" @tap="cart_type_event">{{ $t('cart.cart.v37ow8') }}</view>
<view :class="'item dis-inline-block round cp ' + (cart_type_value == 'realstore' ? 'bg-white cr-main' : '')" data-type="realstore" @tap="cart_type_event">{{ $t('cart.cart.09gl3g') }}</view>
</view>
</view>
</template>
</component-nav-back>
<!-- 门店数据 -->
<view v-if="cart_type_value == 'realstore'" class="realstore-nav border-radius-main margin-main oh pr">
<view class="fl padding-main cp" @tap="realstore_choice_open_event">
<view class="dis-inline-block va-m">
<iconfont name="icon-store" size="28rpx" propClass="lh-il" color="#191F39"></iconfont>
</view>
<text class="va-m margin-left-xs">{{ plugins_realstore_info.name }}</text>
<text v-if="(plugins_realstore_info.distance || null) != null" class="va-m">({{ plugins_realstore_info.distance }})</text>
<view class="dis-inline-block va-m margin-left-xs">
<iconfont name="icon-arrow-bottom" size="24rpx" propClass="lh-il" color="#666"></iconfont>
</view>
</view>
<view v-if="(plugins_realstore_info.buy_use_type_list || null) != null && plugins_realstore_info.buy_use_type_list.length > 0" class="pa top-0 right-0 padding-main cp" @tap="realstore_buy_type_switch_event">
<text class="cr-base va-m">{{ plugins_realstore_info.buy_use_type_list[plugins_realstore_buy_use_type_active_index]['name'] }}</text>
<view class="dis-inline-block va-m margin-left-xs">
<iconfont name="icon-arrow-right" size="24rpx" propClass="lh-il" color="#666"></iconfont>
</view>
</view>
</view>
</block>
<block v-else>
<!-- #ifndef MP-TOUTIAO || H5 -->
<component-nav-back propClass="bg-white" propColor="#333" propNameClass="cr-black" :propName="$t('common.cart')" :propFixed="false" :propIsShowBack="propSourceType == 'page'" :propIsRightSlot="false"></component-nav-back>
<!-- #endif -->
</block>
</block>
<!-- 提示信息 -->
<block v-if="data_list_loding_status == 1">
<component-no-data :propStatus="data_list_loding_status" :propMsg="data_list_loding_msg" propPage="cart" :propIsHeader="true"></component-no-data>
</block>
<block v-else>
<!-- 购物车商品列表 -->
<scroll-view :scroll-y="true" :class="'scroll-box ' + (data_list.length > 0 ? 'cart ' : '')" @scrolltolower="scroll_lower" lower-threshold="60" :style="scroll_style">
<view class="content">
<!-- 数据列表 -->
<view v-if="data_list.length > 0" class="padding-horizontal-main padding-bottom-xsss">
<uni-swipe-action>
<view v-for="(item, index) in data_list" :key="index" class="oh border-radius-main bg-white spacing-mb">
<uni-swipe-action-item :right-options="swipe_options" @click="swipe_opt_event" @change="swipe_change($event, index)">
<view class="cart-goods-item flex-row align-c bs-bb padding-main pr wh-auto" :class="(common_site_type == 4 ? 'cart-exhibition-mode-data' : '')">
<!-- 选择 -->
<view v-if="common_site_type != 4" @tap="selected_event" data-type="node" :data-index="index" class="cart-selected pr z-i">
<iconfont :name="'icon-zhifu-' + (item.selected || false ? 'yixuan' : 'weixuan')" size="40rpx" :color="item.selected || false ? theme_color : '#999'"></iconfont>
</view>
<view class="items oh padding-left-main flex-1 flex-row">
<view>
<view :data-index="index" :data-value="item.goods_url" @tap="goods_event" class="cp">
<!-- 图片 -->
<image :class="'cart-goods-image fl radius ' + ((item.is_error || 0) == 1 ? 'opacity' : '')" :src="item.images" mode="aspectFill"></image>
<!-- 错误 -->
<view v-if="(item.is_error || 0) == 1" class="error-msg pa tc text-size-xs">
<text class="cr-red tc bg-white round">{{ item.error_msg }}</text>
</view>
</view>
</view>
<!-- 基础 -->
<view class="cart-goods-base padding-left-main flex-1">
<!-- 标题规格 -->
<view :data-index="index" :data-value="item.goods_url" @tap="goods_event" class="cp">
<view :class="'cart-goods-title multi-text margin-bottom-sm fw-b ' + ((item.is_error || 0) == 1 ? 'cr-grey' : '')">{{ item.title }}</view>
</view>
<view v-if="item.spec != null" class="margin-bottom-sm">
<block v-for="(sv, si) in item.spec" :key="si">
<text v-if="si > 0" class="cr-grey padding-left-xs padding-right-xs">;</text>
<text class="cr-grey">{{ sv.value }}</text>
</block>
</view>
<!-- 底部内容 -->
<view class="goods-bottom pr margin-top-sm flex-row jc-sb align-c">
<!-- 价格 -->
<view v-if="(item.show_field_price_status || 0) == 1">
<text class="sales-price fw-b va-m">
<text class="text-size-sm">{{ item.show_price_symbol }}</text>
<text class="text-size-lg">{{ item.price }}</text>
</text>
<text class="cr-grey text-size-xs va-m">{{ item.show_price_unit }}</text>
</view>
<!-- 数量 -->
<view v-if="(item.is_error || 0) != 1 && common_site_type != 4" class="cart-number-content pa tc oh round br">
<view @tap="goods_buy_number_event" class="number-submit tc cr-grey fl va-m" :data-index="index" data-type="0">-</view>
<input @blur="goods_buy_number_blur" class="number-input tc cr-grey fl va-m bg-white radius-0" type="number" :value="item.stock" :data-index="index" />
<view @tap="goods_buy_number_event" class="number-submit tc cr-grey fl va-m" :data-index="index" data-type="1">+</view>
</view>
</view>
</view>
</view>
</view>
</uni-swipe-action-item>
</view>
</uni-swipe-action>
</view>
<!-- 空购物车 -->
<view v-if="data_list.length == 0 && data_list_loding_status == 0" class="cart-no-data-box tc">
<image :src="common_static_url + 'cart-empty.png'" mode="widthFix" class="margin-bottom-lg image"></image>
<view class="cr-grey text-size-sm">{{ data_list_loding_msg || $t('cart.cart.j8on74') }}</view>
<view class="margin-top-xxl">
<button class="bg-main br-main cr-white text-size-md round" type="default" size="mini" hover-class="none" @tap="no_cart_data_btn_event">{{no_cart_data_btn_text}}</button>
</view>
</view>
<!-- 底部说明 - 智能工具箱插件存在购物车商品才展示 -->
<view v-if="data_list.length > 0 && (plugins_intellectstools_data || null) != null && (plugins_intellectstools_data.bottom_desc || null) != null && plugins_intellectstools_data.bottom_desc.length > 0" class="padding-horizontal-main spacing-mb">
<view class="border-radius-main padding-main bg-white oh cr-orange">
<view v-for="(item, index) in plugins_intellectstools_data.bottom_desc" :key="index">
<view :class="index > 0 ? 'margin-top' : ''">{{item}}</view>
</view>
</view>
</view>
<!-- 猜你喜欢 -->
<view v-if="goods_list.length > 0" class="padding-horizontal-main margin-top-xxxl">
<view class="tc spacing-mb">
<view class="guess-like fw-b text-size-md">{{ $t('goods-detail.goods-detail.v2974w') }}</view>
</view>
<div class="spacing-mt">
<component-goods-list :propData="{ style_type: 1, goods_list: goods_list, random: random_value }" :propIsCartNumberTabBarBadgeSync="(plugins_realstore_info || null) == null" :propIsCartParaCurve="(plugins_realstore_info || null) == null" :propCurrencySymbol="currency_symbol" propSource="index" @CartSuccessEvent="cart_success_event"></component-goods-list>
</div>
</view>
<!-- 操作导航 -->
<block v-if="data_list.length > 0">
<view class="bottom-fixed z-i" :class="(discount_detail_status ? ' discount-detail-popup-z-index' : '')" :style="bottom_fixed_style">
<view>
<!-- 展示 -->
<view v-if="common_site_type == 4" class="cart-exhibition-mode">
<button class="item exhibition-btn bg-main br-main cr-white round wh-auto text-size-sm" type="default" @tap="exhibition_submit_event" hover-class="none">
<view class="dis-inline-block va-m margin-right-xl">
<uni-icons type="phone" size="14" color="#fff" />
</view>
<text class="va-m">{{ common_is_exhibition_mode_btn_text }}</text>
</button>
</view>
<!-- 销售,自提,虚拟销售 -->
<view v-else class="bottom-fixed-content item round bg-white flex-row jc-sb align-c">
<view class="cart-nav-base single-text padding-left flex-row jc-sb align-c">
<view class="cart-selected flex-row align-c">
<view @tap="selected_event" data-type="all">
<iconfont :name="'icon-zhifu-' + (is_selected_all ? 'yixuan' : 'weixuan')" size="40rpx" :color="is_selected_all ? theme_color : '#999'"></iconfont>
</view>
<text v-if="already_selected_status" @tap="cart_all_remove_event" class="margin-left-main cart-nav-remove-submit dis-inline-block va-m bg-white cr-red br-red round cp">{{ $t('common.del') }}</text>
<text v-else class="va-m cr-base padding-left-main" @tap="selected_event" data-type="all">{{ $t('cart.cart.pxjwv8') }}</text>
</view>
<view class="price">
<view class="flex-row jc-s flex-nowrap align-c">
<view>{{ $t('buy.buy.wx78ju') }}</view>
<view class="sales-price single-text fw-b">
<text class="text-size-sm">{{ buy_currency_symbol }}</text>
<text class="text-size-lg">{{ total_price }}</text>
</view>
</view>
<block v-if="is_cart_show_discount == 1 && total_num > 0">
<view v-if="data_list.length > 0" class="flex-row jc-s flex-nowrap align-c text-size-xss">
<block v-if="preferential_price > 0">
<view class="cr-base">{{ $t('cart.cart.3kr74b') }}{{ buy_currency_symbol }}{{ preferential_price }}</view>
</block>
<block v-else>
<block v-if="increase_price > 0">
<view class="cr-base">{{ $t('cart.cart.n76213') }}{{ buy_currency_symbol }}{{ increase_price }}</view>
</block>
</block>
<view v-if="preferential_price > 0 || increase_price > 0" class="discount-details" @tap="discount_detail_open_event">{{ $t('cart.cart.4tbj4s') }}</view>
</view>
</block>
</view>
</view>
<view class="cart-nav-submit">
<button class="nav-btn bg-main br-main cr-white round text-size-md" type="default" @tap="buy_submit_event" :disabled="!already_valid_selected_status" hover-class="none">
{{ $t('goods-category.goods-category.44f1ww') }}<block v-if="total_num > 0">({{ total_num }})</block>
</button>
</view>
</view>
</view>
</view>
</block>
<!-- 优惠明细弹窗 -->
<component-popup :propShow="discount_detail_status" propPosition="bottom" propStyle="background: #F6F6F6;" @onclose="discount_detail_close_event">
<view v-if="data_list.length > 0" class="discount_detail-popup padding-main">
<view class="oh tc discount_detail-popup-title">
<text class="text-size">{{ $t('cart.cart.t41i4x') }}</text>
<view class="fr" @tap.stop="discount_detail_close_event">
<iconfont name="icon-close-o" size="28rpx" color="#999"></iconfont>
</view>
</view>
<view class="oh border-radius-main bg-white padding-sm discount_detail-popup-goods-list">
<!-- 购物车商品列表 -->
<scroll-view :scroll-y="discount_detail_goods_list_status" :class="'scroll-box-popup ' + (data_list.length > 0 ? 'cart ' : '') + cart_type_value + (!discount_detail_goods_list_status ? ' close' : '')" lower-threshold="60">
<view class="content flex-row flex-wrap">
<!-- 数据列表 -->
<view v-for="(item, index) in data_list" :key="index" class="item">
<view class="padding-sm pr">
<!-- 选择 -->
<view v-if="common_site_type != 4" @tap="selected_event" data-type="node" :data-index="index" class="cart-selected pa top-xxxl right-xxxl z-i">
<iconfont :name="'icon-zhifu-' + (item.selected || false ? 'yixuan' : 'weixuan')" size="40rpx" :color="item.selected || false ? theme_color : '#999'"></iconfont>
</view>
<view>
<view class="cp">
<!-- 图片 -->
<image :class="'cart-goods-image radius br-e ' + ((item.is_error || 0) == 1 ? 'opacity' : '')" :src="item.images" mode="aspectFill"></image>
<!-- 错误 -->
<view v-if="(item.is_error || 0) == 1" class="error-msg pa tc text-size-xs">
<text class="cr-red tc bg-white round">{{ item.error_msg }}</text>
</view>
</view>
<view class="flex-row jc-sb align-c margin-top-xs">
<view class="fw-b text-size-xs single-text flex-1 flex-width"> {{ currency_symbol }}{{ item.price }} </view>
<view class="text-size-xss cr-grey-9">x{{ item.stock }}</view>
</view>
</view>
</view>
</view>
</view>
</scroll-view>
<view v-if="data_list.length > 4" class="tc padding-top-sm" @tap="open_goods_list_event">
<text class="cr-grey-9 text-size-xs">{{ $t('buy.buy.g2vt78') }}{{ goods_count }}{{ $t('cart.cart.miti3i') }}</text>
<iconfont :name="!discount_detail_goods_list_status ? 'icon-arrow-bottom' : 'icon-arrow-top'" size="28rpx" propClass="pr top-xs margin-left-xs"></iconfont>
</view>
</view>
<view v-if="total_num > 0" class="padding bg-white border-radius-main margin-top">
<view class="flex-row jc-sb align-c text-size fw-b margin-bottom">
<view>{{ $t('cart.cart.t41i4x') }}</view>
<view> {{ buy_currency_symbol }}{{ all_total_price }} </view>
</view>
<block v-if="preferential_price > 0">
<view class="flex-row jc-sb align-c text-size-md margin-bottom">
<view class="fw-b">{{ $t('cart.cart.9s0l57') }}</view>
<view class="cr-red"> {{ buy_currency_symbol }}{{ preferential_price }}</view>
</view>
</block>
<block v-else>
<block v-if="increase_price > 0">
<view class="flex-row jc-sb align-c text-size-md margin-bottom">
<view class="fw-b">{{ $t('cart.cart.qh35gz') }}</view>
<view class="cr-red"> {{ buy_currency_symbol }}{{ increase_price }}</view>
</view>
</block>
</block>
<view v-for="(items, indexs) in discount_detail_list" :key="indexs" :class="discount_detail_list.length > indexs + 1 ? 'br-b-f5 margin-bottom' : ''">
<view class="flex-row align-c margin-bottom-sm">
<view class="">{{ items.name }}</view>
<view v-if="(items.alias || null) !== null" class="alias">{{ items.alias }}</view>
</view>
<view v-for="(item, index) in items.order_base.extension_data" :key="index" class="flex-row jc-sb align-c text-size-sm margin-bottom-sm">
<view class="cr-grey-9">{{ item.name }}</view>
<view class="cr-red"> {{ item.tips }}</view>
</view>
</view>
</view>
</view>
</component-popup>
<!-- 结尾 -->
<component-bottom-line :propStatus="goods_bottom_line_status"></component-bottom-line>
</view>
</scroll-view>
</block>
<!-- 选择门店弹窗 -->
<component-popup :propShow="plugins_realstore_choice_status" propPosition="bottom" @onclose="realstore_choice_close_event">
<view class="padding-horizontal-main padding-top-main bg-white">
<view class="oh tc">
<text class="text-size">{{ $t('cart.cart.7gdej1') }}</text>
<view class="fr" @tap.stop="realstore_choice_close_event">
<iconfont name="icon-close-o" size="28rpx" color="#999"></iconfont>
</view>
</view>
<view class="plugins-realstore-choice-container">
<block v-if="(plugins_realstore_data || null) != null">
<block v-for="(item, index) in plugins_realstore_data" :key="index">
<view class="item" :data-index="index" @tap="realstore_choice_item_event">
<view :class="'padding-main oh ' + ((plugins_realstore_info || null) != null && plugins_realstore_info.id == item.id ? 'border-radius-main br-main' : 'br-white')">
<text class="cr-base">{{ item.name }}</text>
<text v-if="(item.distance || null) != null" class="cr-grey margin-left-xs">({{ item.distance }})</text>
<view v-if="(plugins_realstore_info || null) != null && plugins_realstore_info.id == item.id" class="fr">
<iconfont name="icon-zhifu-yixuan" size="30rpx" propClass="lh-il cr-main"></iconfont>
</view>
</view>
</view>
</block>
<view class="padding-main tc">
<view class="dis-inline-block cp" data-value="/pages/plugins/realstore/search/search" @tap="url_event">
<text class="cr-grey text-size-xs va-m">{{ $t('common.view_more') }}</text>
<view class="dis-inline-block va-m margin-left-xs">
<iconfont name="icon-arrow-right" size="24rpx" propClass="lh-il cr-grey"></iconfont>
</view>
</view>
</view>
</block>
<block v-else>
<component-no-data :propMsg="$t('cart.cart.h63814')"></component-no-data>
</block>
</view>
</view>
</component-popup>
<!-- 互联网医院问诊下单弹窗 -->
<component-popup :propShow="plugins_hospital_prescription_status" propPosition="bottom" @onclose="hospital_prescription_close_event">
<view class="padding-horizontal-main padding-top-main bg-white">
<view class="oh tc">
<text class="text-size">{{ (plugins_hospital_prescription_data || null) != null ? (plugins_hospital_prescription_data.title || '') : '' }}</text>
<view class="fr" @tap.stop="hospital_prescription_close_event">
<iconfont name="icon-close-o" size="28rpx" color="#999"></iconfont>
</view>
</view>
<view class="padding-vertical-main">
<block v-if="(plugins_hospital_prescription_data || null) != null && plugins_hospital_prescription_data.choice_data.length > 0">
<block v-for="(item, index) in plugins_hospital_prescription_data.choice_data">
<view class="padding-vertical-xxl pr">
<text>{{item.name}}</text>
<button type="default" size="mini" class="bg-main br-main cr-white round text-size-xs pa top-xxxxxl right-0" :data-index="index" @tap="hospital_prescription_confirm_event">{{item.btn_text}}</button>
</view>
</block>
</block>
<block v-else>
<component-no-data></component-no-data>
</block>
</view>
</view>
</component-popup>
<!-- 门店购物车 -->
<component-realstore-cart ref="realstore_cart" :propStatus="false" :propCurrencySymbol="currency_symbol" v-on:BuyTypeSwitchEvent="realstore_buy_type_switch_back_event"></component-realstore-cart>
</view>
</template>
<script>
const app = getApp();
import base64 from '@/common/js/lib/base64.js';
import componentNoData from '@/components/no-data/no-data';
import componentGoodsList from '@/components/goods-list/goods-list';
import componentNavBack from '@/components/nav-back/nav-back';
import componentRealstoreCart from '@/components/realstore-cart/realstore-cart';
import componentBottomLine from '@/components/bottom-line/bottom-line';
import componentPopup from '@/components/popup/popup';
var common_static_url = app.globalData.get_static_url('common');
var status_bar_height = parseInt(app.globalData.get_system_info('statusBarHeight', 0, true));
export default {
data() {
return {
status_bar_height: status_bar_height,
theme_view: app.globalData.get_theme_value_view(),
theme_color: app.globalData.get_theme_color(),
common_static_url: common_static_url,
user: null,
no_cart_data_btn_text: this.$t('login.login.6yfr9g'),
is_first: 1,
data_list_loding_status: 1,
data_list_loding_msg: '',
data_is_loading: 0,
data_list: [],
total_price: '0.00',
total_num: 0,
preferential_price: 0,
increase_price: 0,
all_total_price: 0,
goods_count: 0,
discount_detail_list: [],
buy_currency_symbol: app.globalData.currency_symbol(),
is_selected_all: false,
already_selected_status: false,
already_valid_selected_status: false,
// 基础配置
currency_symbol: app.globalData.currency_symbol(),
common_site_type: 0,
common_is_exhibition_mode_btn_text: null,
common_is_cart_show_guess_you_like: 0,
common_app_customer_service_tel: null,
swipe_item_index: null,
swipe_options: [
{
text: this.$t('goods-detail.goods-detail.dco1sc'),
style: {
backgroundColor: '#1AAD19',
},
},
{
text: this.$t('common.del'),
style: {
backgroundColor: '#E64340',
},
},
],
// 首页地址
home_page_url: app.globalData.app_tabbar_pages()[0],
// 猜你喜欢 参数
goods_list: [],
goods_bottom_line_status: false,
goods_is_loading: 0,
goods_total: 0,
goods_page_total: 0,
goods_page: 1,
// 增加随机数,避免无法监听数据列表内部数据更新
random_value: 0,
// 是否展示顶部购物车导航
is_cart_top_nav: 1,
// 购物车类型(shop 商城, realstore 门店)
cart_type_value: 'shop',
// 门店插件数据
plugins_realstore_data: null,
plugins_realstore_info: null,
plugins_realstore_buy_use_type_active_index: 0,
plugins_realstore_choice_status: false,
// 智能工具箱插件
plugins_intellectstools_data: null,
// 优惠明细弹窗
discount_detail_status: false,
// 优惠明细弹窗内商品列表显示隐藏更多
discount_detail_goods_list_status: false,
// 预下单计算开关
is_cart_show_discount: 0,
scroll_style: '',
// 底部购买导航样式
bottom_fixed_style: '',
// 互联网医院问诊数据
plugins_hospital_prescription_data: null,
plugins_hospital_prescription_status: false
};
},
props: {
// 来源类型
propSourceType: {
type: String,
default: '', // 默认主页面。当传入page时为子页面
},
// 底部菜单高度
propCartNavBottomValue: {
type: Number,
default: 0
}
},
components: {
componentNoData,
componentGoodsList,
componentNavBack,
componentRealstoreCart,
componentBottomLine,
componentPopup
},
// 属性值改变监听
watch: {
// 购物车类型是否改变
propCartType(value, old_value) {
// 数据加载
this.init();
},
// 底部购买导航距离
propCartNavBottomValue(value, old_value) {
// 页面样式处理
this.page_style_handle();
}
},
created: function () {
// 数据加载
this.init();
// 初始化配置
this.init_config();
},
methods: {
// 初始化配置
init_config(status) {
if ((status || false) == true) {
this.setData({
currency_symbol: app.globalData.get_config('currency_symbol'),
common_site_type: app.globalData.get_config('config.common_site_type'),
common_is_exhibition_mode_btn_text: app.globalData.get_config('config.common_is_exhibition_mode_btn_text') || this.$t('cart.cart.31h34v'),
common_is_cart_show_guess_you_like: parseInt(app.globalData.get_config('config.common_is_cart_show_guess_you_like', 0)),
common_app_customer_service_tel: app.globalData.get_config('config.common_app_customer_service_tel'),
is_cart_show_discount: parseInt(app.globalData.get_config('plugins_base.intellectstools.data.is_cart_show_discount', 0)),
});
} else {
app.globalData.is_config(this, 'init_config');
}
},
// 获取数据
init(params = {}) {
// 网络检查
if ((params || null) == null || (params.loading || 0) == 0) {
app.globalData.network_type_handle(this, 'init');
return false;
}
var user = app.globalData.get_user_info(this, 'init');
if (user != false) {
this.setData({
user: user,
no_cart_data_btn_text: this.$t('cart.cart.wb5465')
});
// 获取数据
this.get_data();
// 猜你喜欢、仅首次读取、还未加载过
if (this.is_first == 1 && this.goods_is_loading == 0) {
this.get_data_list(1);
}
} else {
this.setData({
is_first: 0,
user: null,
data_list: [],
plugins_realstore_info: null,
no_cart_data_btn_text: this.$t('login.login.6yfr9g'),
data_list_loding_status: 0,
data_list_loding_msg: this.$t('extraction-apply.extraction-apply.m3xdif'),
});
// 有用户信息,是否需要绑定手机
if(this.user == null) {
var cache_user = app.globalData.get_user_cache_info() || null;
if(cache_user != null && app.globalData.user_is_bind_mobile(cache_user)) {
this.setData({
no_cart_data_btn_text: this.$t('login.login.np9177')
});
}
}
// 猜你喜欢
this.get_data_list(1);
}
// 页面样式处理
this.page_style_handle();
// 分享菜单处理
app.globalData.page_share_handle();
},
// 获取数据
get_data(type = 0) {
// 是否加载中
if (this.data_is_loading == 1) {
return false;
}
this.setData({
data_is_loading: 1,
});
// 门店购物车
if (this.cart_type_value == 'realstore' && (this.plugins_realstore_info || null) != null) {
// 门店购物车初始化、避免上一个页面更改了门店下单类型
this.realstore_cart_data_init();
// 门店请求参数
var type_data = this.$refs.realstore_cart.buy_use_type_data();
var post_data = {
buy_use_type_data_index: type_data.data_index,
id: this.plugins_realstore_info.id,
};
this.get_cart_data(type, app.globalData.get_request_url('cartdata', 'detail', 'realstore'), post_data);
} else {
// 商城购物车
this.get_cart_data(type, app.globalData.get_request_url('index', 'cart'));
}
},
// 获取购物车数据
get_cart_data(type, url, post_data = {}) {
uni.request({
url: url,
method: 'POST',
data: post_data,
dataType: 'json',
success: (res) => {
if (res.data.code == 0) {
var data = res.data.data;
var data_list = data.data || [];
if (data_list.length > 0) {
// 选中状态处理
var not_use = uni.getStorageSync(app.globalData.data.cache_user_cart_not_use_data_key) || {};
for (var i in data_list) {
if ((not_use[data_list[i]['id']] || null) == null || not_use[data_list[i]['id']] != data_list[i]['stock']) {
data_list[i]['selected'] = true;
}
}
// 缓存记录用户未选中的购物车数据
uni.setStorageSync(app.globalData.data.cache_user_cart_not_use_data_key, not_use);
}
// 设置数据
this.setData({
is_first: 0,
data_is_loading: 0,
data_list: data_list,
data_list_loding_status: data_list.length == 0 ? 0 : 3,
data_list_loding_msg: this.$t('cart.cart.j8on74'),
plugins_intellectstools_data: data.plugins_intellectstools_data || null,
});
// 门店数据初始化
var realstore = data.plugins_realstore_data || null;
this.setData({
plugins_realstore_data: realstore,
});
// 门店为空、还没有初始门店信息,初始门店信息不在当前列表中则 赋值门店初始信息和门店购物车初始化
if(app.globalData.data.is_cart_header_close_realstore != 1) {
if(
realstore == null ||
this.plugins_realstore_info == null ||
!realstore
.map(function (v) {
return v.id;
})
.includes(this.plugins_realstore_info.id)
) {
this.setData({
plugins_realstore_info: realstore == null ? null : realstore[0],
});
this.realstore_cart_data_init();
}
}
// 选择处理
this.cart_selected_calculate();
// 购物车导航角标
app.globalData.set_tab_bar_badge('cart', data.buy_number);
} else {
this.setData({
is_first: 0,
data_is_loading: 0,
data_list_loding_status: 2,
data_list_loding_msg: res.data.msg,
});
if (app.globalData.is_login_check(res.data, this, 'get_data')) {
app.globalData.showToast(res.data.msg);
}
}
// 分享菜单处理、延时执行,确保基础数据已加载完成
setTimeout(function () {
app.globalData.page_share_handle();
}, 3000);
// 页面样式处理
this.page_style_handle();
},
fail: () => {
this.setData({
is_first: 0,
data_is_loading: 0,
data_list_loding_status: 2,
data_list_loding_msg: this.$t('common.internet_error_tips'),
});
// 页面样式处理
this.page_style_handle();
},
});
},
// 数量输入事件
goods_buy_number_blur(e) {
var index = e.currentTarget.dataset.index || 0;
var buy_number = parseInt(e.detail.value) || 1;
this.goods_buy_number_func(index, buy_number);
},
// 数量操作事件
goods_buy_number_event(e) {
var index = e.currentTarget.dataset.index || 0;
var type = parseInt(e.currentTarget.dataset.type) || 0;
var temp_number = parseInt(this.data_list[index]['stock']);
var buy_number = type == 0 ? temp_number - 1 : temp_number + 1;
this.goods_buy_number_func(index, buy_number, type);
},
// 删除弹窗
model_tips(id) {
var self = this;
uni.showModal({
title: self.$t('common.warm_tips'),
content: self.$t('cart.cart.3v6ulk'),
confirmText: self.$t('common.confirm'),
cancelText: self.$t('common.not_yet'),
success: (result) => {
if (result.confirm) {
self.cart_delete(id, 'delete');
}
},
});
},
// 数量处理方法
goods_buy_number_func(index, buy_number, type = null) {
var temp_data_list = this.data_list;
var buy_min_number = parseInt(temp_data_list[index]['spec_buy_min_number']) || 1;
var buy_max_number = parseInt(temp_data_list[index]['spec_buy_max_number']) || 0;
var inventory = parseInt(temp_data_list[index]['inventory']);
var inventory_unit = temp_data_list[index]['inventory_unit'];
let new_type = type === 0 ? 'del' : 'add';
if (buy_number < buy_min_number) {
buy_number = buy_min_number;
this.data_list[index].stock = buy_min_number;
if (buy_min_number > 1) {
app.globalData.showToast(this.$t('recommend-detail.recommend-detail.265vyu') + buy_min_number + inventory_unit);
this.model_tips(temp_data_list[index]['id']);
return false;
}
}
if (buy_max_number > 0 && buy_number > buy_max_number) {
buy_number = buy_max_number;
app.globalData.showToast(this.$t('goods-category.goods-category.z1eh3v') + buy_max_number + inventory_unit);
return false;
}
if (buy_number > inventory) {
buy_number = inventory;
app.globalData.showToast(this.$t('recommend-detail.recommend-detail.2sis3v') + inventory + inventory_unit);
return false;
}
if (temp_data_list[index]['stock'] == 1 && buy_number == 1) {
this.model_tips(temp_data_list[index]['id']);
return false;
}
// 更新数据库
uni.showLoading({
title: this.$t('common.processing_in_text'),
mask: true,
});
uni.request({
url: app.globalData.get_request_url('stock', 'cart'),
method: 'POST',
data: {
id: temp_data_list[index]['id'],
goods_id: temp_data_list[index]['goods_id'],
stock: buy_number,
},
dataType: 'json',
success: (res) => {
uni.hideLoading();
if (res.data.code == 0) {
// 猜你喜欢商品处理
var temp_stock = parseInt(temp_data_list[index]['stock']);
if (type === null) {
if (temp_stock > buy_number) {
type = 0;
var number = temp_stock - buy_number;
} else {
type = 1;
var number = buy_number - temp_stock;
}
} else {
var number = type == 0 ? temp_stock - buy_number : buy_number - temp_stock;
}
this.goods_change(temp_data_list[index]['goods_id'], type, number);
// 购物车数据更新
var not_use = uni.getStorageSync(app.globalData.data.cache_user_cart_not_use_data_key) || {};
var data = res.data.data;
temp_data_list[index]['stock'] = data.stock;
temp_data_list[index]['original_price'] = data.original_price;
temp_data_list[index]['price'] = data.price;
temp_data_list[index]['selected'] = true;
delete not_use[temp_data_list[index]['id']];
this.setData({
data_list: temp_data_list,
});
// 缓存记录用户未选中的购物车数据
uni.setStorageSync(app.globalData.data.cache_user_cart_not_use_data_key, not_use);
// 选择处理
this.cart_selected_calculate();
} else {
if (app.globalData.is_login_check(res.data)) {
app.globalData.showToast(res.data.msg);
} else {
app.globalData.showToast(this.$t('common.sub_error_retry_tips'));
}
}
},
fail: () => {
uni.hideLoading();
app.globalData.showToast(this.$t('common.internet_error_tips'));
},
});
},
// 收藏+删除
goods_favor_delete(id, goods_id, type) {
uni.request({
url: app.globalData.get_request_url('favor', 'goods'),
method: 'POST',
data: {
id: goods_id,
is_mandatory_favor: 1,
},
dataType: 'json',
success: (res) => {
if (res.data.code == 0) {
this.cart_delete(id, type);
} else {
if (app.globalData.is_login_check(res.data)) {
app.globalData.showToast(res.data.msg);
} else {
app.globalData.showToast(this.$t('common.sub_error_retry_tips'));
}
}
},
fail: () => {
app.globalData.showToast(this.$t('common.internet_error_tips'));
},
});
},
// 批量删除操作
cart_all_remove_event(e) {
var self = this;
uni.showModal({
title: self.$t('common.warm_tips'),
content: self.$t('cart.cart.3v6ulk'),
confirmText: self.$t('common.confirm'),
cancelText: self.$t('common.not_yet'),
success: (result) => {
if (result.confirm) {
var data = [];
var temp_data_list = self.data_list || [];
for (var i in temp_data_list) {
if ((temp_data_list[i]['selected'] || false) == true) {
data.push(temp_data_list[i]['id']);
}
}
if (data.length <= 0) {
app.globalData.showToast(self.$t('order.order.15k32o'));
return false;
}
self.cart_delete(data.join(','), 'delete');
}
},
});
},
// 滑动事件
swipe_change(e, v) {
this.setData({
swipe_item_index: e == 'none' ? null : v,
});
},
// 移除操作事件
swipe_opt_event(e) {
var index = e.index || 0;
var temp_data_list = this.data_list;
if (this.swipe_item_index === null) {
app.globalData.showToast(this.$t('cart.cart.8q2yej'));
return false;
}
if ((temp_data_list[this.swipe_item_index] || null) == null) {
app.globalData.showToast(this.$t('cart.cart.9g81jk'));
return false;
}
// 根据操作类型处理数据
var id = temp_data_list[this.swipe_item_index]['id'];
var goods_id = temp_data_list[this.swipe_item_index]['goods_id'];
if (index == 0) {
this.goods_favor_delete(id, goods_id, 'favor');
} else {
this.cart_delete(id, 'delete');
}
},
// 购物车删除
cart_delete(id, type) {
uni.request({
url: app.globalData.get_request_url('delete', 'cart'),
method: 'POST',
data: {
id: id,
},
dataType: 'json',
success: (res) => {
if (res.data.code == 0) {
var temp_list = [];
var temp_id_arr = id.toString().split(',');
var temp_del_goods_ids = [];
var temp_data_list = this.data_list;
for (var i in temp_data_list) {
if (temp_id_arr.indexOf(temp_data_list[i]['id'].toString()) == -1) {
temp_list.push(temp_data_list[i]);
} else {
// 猜你喜欢商品处理
this.goods_change(temp_data_list[i]['goods_id'], 0, temp_data_list[i]['stock']);
}
}
this.setData({
data_list: temp_list,
data_list_loding_status: temp_list.length == 0 ? 0 : this.data_list_loding_status,
random_value: Math.random(),
});
app.globalData.showToast(type == 'delete' ? this.$t('common.del_success') : this.$t('cart.cart.346c25'), 'success');
// 选择处理
this.cart_selected_calculate();
} else {
if (app.globalData.is_login_check(res.data)) {
app.globalData.showToast(type == 'delete' ? this.$t('common.del_fail') : this.$t('cart.cart.21051p'));
} else {
app.globalData.showToast(this.$t('common.sub_error_retry_tips'));
}
}
},
fail: () => {
app.globalData.showToast(this.$t('common.internet_error_tips'));
},
});
},
// 选中处理
selected_event(e) {
var type = e.currentTarget.dataset.type || null;
if (type != null) {
var temp_data_list = this.data_list;
var temp_is_selected_all = this.is_selected_all;
var not_use = uni.getStorageSync(app.globalData.data.cache_user_cart_not_use_data_key) || {};
switch (type) {
// 批量操作
case 'all':
temp_is_selected_all = temp_is_selected_all == true ? false : true;
for (var i in temp_data_list) {
temp_data_list[i]['selected'] = temp_is_selected_all;
// 选中清除则则记录
if (temp_is_selected_all) {
delete not_use[temp_data_list[i]['id']];
} else {
not_use[temp_data_list[i]['id']] = temp_data_list[i]['stock'];
}
}
break;
// 节点操作
case 'node':
var index = e.currentTarget.dataset.index || 0;
temp_data_list[index]['selected'] = temp_data_list[index]['selected'] == true ? false : true;
// 选中清除则则记录
if (temp_data_list[index]['selected']) {
delete not_use[temp_data_list[index]['id']];
} else {
not_use[temp_data_list[index]['id']] = temp_data_list[index]['stock'];
}
break;
}
this.setData({
data_list: temp_data_list,
is_selected_all: temp_is_selected_all,
});
// 缓存记录用户未选中的购物车数据
uni.setStorageSync(app.globalData.data.cache_user_cart_not_use_data_key, not_use);
// 选择处理
this.cart_selected_calculate();
}
},
// 选中计算
cart_selected_calculate() {
var cart_total = 0;
var total_price = 0;
var total_num = 0;
var data_count = 0;
var selected_count = 0;
var temp_data_list = this.data_list;
for (var i in temp_data_list) {
if ((temp_data_list[i]['selected'] || false) == true) {
selected_count++;
if ((temp_data_list[i]['is_error'] || 0) == 0) {
data_count++;
total_price += parseInt(temp_data_list[i]['stock']) * parseFloat(temp_data_list[i]['price']);
total_num += parseInt(temp_data_list[i]['stock']);
}
}
cart_total += parseInt(temp_data_list[i]['stock']);
}
this.setData({
already_selected_status: selected_count > 0,
already_valid_selected_status: data_count > 0,
is_selected_all: selected_count > 0 && selected_count >= temp_data_list.length,
});
// 预下单计算开关 0
if (this.is_cart_show_discount === 0) {
this.setData({
total_price: total_price.toFixed(2),
total_num: total_num,
});
} else {
// 调用预下单处理、优惠信息
this.pre_order_handle();
}
// 购物车导航角标
app.globalData.set_tab_bar_badge('cart', cart_total);
},
// 预下单处理
pre_order_handle() {
var data = this.buy_data_params();
if (data !== false) {
uni.request({
url: app.globalData.get_request_url('index', 'buy'),
method: 'POST',
data: {...data, ...{is_cart_init: 1}},
dataType: 'json',
success: (res) => {
if (res.data.code == 0) {
var data = res.data.data;
this.setData({
total_price: data.base.actual_price,
total_num: data.base.buy_count,
goods_count: data.base.goods_count,
preferential_price: data.base.preferential_price,
increase_price: data.base.increase_price,
all_total_price: data.base.total_price,
buy_currency_symbol: data.currency_symbol,
discount_detail_list: data.goods_list,
});
} else {
app.globalData.showToast(res.data.msg);
}
},
fail: () => {
app.globalData.showToast(this.$t('common.internet_error_tips'));
},
});
}
},
// 结算数据参数
// appoint_goods_ids 指定结算商品id多个id逗号分割
buy_data_params(appoint_goods_ids = null) {
// 解析当前选择的数据商品id
var temp_appoint_goods_ids = [];
if((appoint_goods_ids || null) != null) {
temp_appoint_goods_ids = appoint_goods_ids.split(',').map(function(v){return parseInt(v);});
}
// 匹配商品
var selected_count = 0;
var ids = [];
var temp_data_list = this.data_list || [];
for (var i in temp_data_list) {
if ((temp_data_list[i]['is_error'] || 0) == 0 && (temp_data_list[i]['selected'] || false) == true && (temp_appoint_goods_ids.length == 0 || temp_appoint_goods_ids.indexOf(parseInt(temp_data_list[i]['goods_id'])) != -1)) {
ids.push(temp_data_list[i]['id']);
selected_count++;
}
}
if (selected_count <= 0) {
this.setData({
preferential_price: 0,
increase_price: 0,
total_price: 0,
all_total_price: 0,
total_num: 0,
discount_detail_list: [],
});
return false;
}
// 结算参数
var data = {
buy_type: 'cart',
ids: ids.join(','),
};
// 是否门店模式
if (this.cart_type_value == 'realstore' && (this.plugins_realstore_info || null) != null) {
var type_data = this.$refs.realstore_cart.buy_use_type_data();
data['buy_use_type_data_index'] = type_data.data_index;
data['realstore_id'] = this.plugins_realstore_info.id;
}
return data;
},
// 结算
buy_submit_event(e) {
// 结算参数
var buy_data = this.buy_data_params();
if (buy_data === false) {
app.globalData.showToast(this.$t('cart.cart.3sy0mp'));
return false;
}
// 是否开启了互联网医院处方问诊
var is_goods_is_prescription = parseInt(app.globalData.get_config('plugins_base.hospital.data.is_goods_is_prescription', 0));
if(is_goods_is_prescription == 1) {
this.plugins_hospital_prescription_handle(buy_data);
return false;
}
// 进入结算页面
this.to_buy_handle(buy_data);
},
// 互联网医院处方问诊
plugins_hospital_prescription_handle(buy_data) {
uni.showLoading({
title: this.$t('common.processing_in_text'),
});
uni.request({
url: app.globalData.get_request_url('savecheck', 'prescription', 'hospital'),
method: 'POST',
data: buy_data,
dataType: 'json',
success: (res) => {
uni.hideLoading();
if (res.data.code == 0) {
var data = res.data.data;
if((data.choice_data || null) != null && data.choice_data.length > 0) {
this.setData({
plugins_hospital_prescription_data: data,
plugins_hospital_prescription_status: true
});
} else {
this.to_buy_handle(buy_data);
}
} else {
if (app.globalData.is_login_check(res.data)) {
this.to_buy_handle(buy_data);
} else {
app.globalData.showToast(this.$t('common.sub_error_retry_tips'));
}
}
},
fail: () => {
uni.hideLoading();
app.globalData.showToast(this.$t('common.internet_error_tips'));
},
});
},
// 互联网医院问诊确认事件
hospital_prescription_confirm_event(e) {
var index = e.currentTarget.dataset.index || 0;
var data = this.plugins_hospital_prescription_data.choice_data[index];
var buy_data = this.buy_data_params(data.goods_ids);
// 问诊开方
if(data.type == 'prescription') {
this.to_buy_handle(buy_data, '/pages/plugins/hospital/prescription/prescription');
} else {
// 普通结算
this.to_buy_handle(buy_data);
}
},
// 互联网医院问诊弹窗关闭
hospital_prescription_close_event(e) {
this.setData({
plugins_hospital_prescription_status: false
});
},
// 进入购买
to_buy_handle(buy_data, pages = '/pages/buy/buy') {
app.globalData.url_open(pages+'?data=' + encodeURIComponent(base64.encode(JSON.stringify(buy_data))));
},
// 展示型事件
exhibition_submit_event(e) {
app.globalData.call_tel(this.common_app_customer_service_tel);
},
// 滚动加载
scroll_lower(e) {
this.get_data_list();
},
// 猜你喜欢
get_data_list(is_mandatory) {
if(this.common_is_cart_show_guess_you_like == 1) {
// 分页是否还有数据
if ((is_mandatory || 0) == 0) {
if (this.goods_bottom_line_status == true) {
return false;
}
}
// 是否加载中
if (this.goods_is_loading == 1) {
return false;
}
this.setData({
goods_is_loading: 1,
});
// 获取数据
uni.request({
url: app.globalData.get_request_url('datalist', 'search'),
method: 'POST',
data: {
page: this.goods_page,
},
dataType: 'json',
success: (res) => {
if (res.data.code == 0) {
var data = res.data.data;
if (data.data.length > 0) {
if (this.goods_page <= 1) {
var temp_data_list = data.data;
} else {
var temp_data_list = this.goods_list || [];
var temp_data = data.data;
for (var i in temp_data) {
temp_data_list.push(temp_data[i]);
}
}
this.setData({
goods_list: temp_data_list,
random_value: Math.random(),
goods_total: data.total,
goods_page_total: data.page_total,
goods_page: this.goods_page + 1,
goods_is_loading: 0,
});
// 是否还有数据
this.setData({
goods_bottom_line_status: this.goods_page > 1 && this.goods_page > this.goods_page_total,
});
} else {
this.setData({
goods_total: 0,
goods_is_loading: 0,
});
if (this.goods_page <= 1) {
this.setData({
goods_list: [],
random_value: Math.random(),
goods_bottom_line_status: false,
});
}
}
} else {
this.setData({
goods_is_loading: 0,
});
app.globalData.showToast(res.data.msg);
}
},
fail: () => {
this.setData({
goods_is_loading: 0,
});
app.globalData.showToast(this.$t('common.internet_error_tips'));
},
});
}
},
// 猜你喜欢加入购物车回调
cart_success_event(e) {
// 更新猜你喜欢列表数据
this.setData({
goods_list: e.goods_list,
random_value: Math.random(),
});
// 重新加载数据
this.get_data();
},
// 猜你喜欢数据更新
goods_change(goods_id, type, number = 0) {
var temp_goods_list = this.goods_list || [];
if (temp_goods_list.length > 0) {
number = parseInt(number);
for (var i in temp_goods_list) {
if (temp_goods_list[i]['id'] == goods_id) {
var user_cart_count = parseInt(temp_goods_list[i]['user_cart_count'] || 0);
temp_goods_list[i]['user_cart_count'] = type == 0 ? user_cart_count - number : user_cart_count + number;
}
}
this.setData({
goods_list: temp_goods_list,
random_value: Math.random(),
});
}
},
// 商品事件
goods_event(e) {
// 商品数据缓存处理
var goods = this.data_list[e.currentTarget.dataset.index];
goods['id'] = goods.goods_id;
app.globalData.goods_data_cache_handle(goods.id, goods);
// 调用公共打开url地址
app.globalData.url_event(e);
},
// url事件
url_event(e) {
app.globalData.url_event(e);
},
// 购物车类型事件
cart_type_event(e) {
if (this.data_is_loading == 0) {
this.setData({
data_list_loding_status: 1,
cart_type_value: e.currentTarget.dataset.type || 'shop',
});
// 重新加载数据
this.get_data();
// 页面样式处理
this.page_style_handle();
}
},
// 门店选择事件
realstore_choice_open_event(e) {
this.setData({
plugins_realstore_choice_status: true,
});
},
// 门店选择弹层关闭
realstore_choice_close_event(e) {
this.setData({
plugins_realstore_choice_status: false,
});
},
// 门店弹窗选择
realstore_choice_item_event(e) {
this.setData({
data_list_loding_status: 1,
plugins_realstore_choice_status: false,
plugins_realstore_info: this.plugins_realstore_data[e.currentTarget.dataset.index],
});
// 重新初始化门店数据
this.realstore_cart_data_init();
// 重新加载数据
this.get_data();
},
// 门店购物车数据初始化
realstore_cart_data_init() {
if ((this.plugins_realstore_info || null) != null) {
// 初始化门店购物车
this.$refs.realstore_cart.init({ source: 'system-cart', info: this.plugins_realstore_info });
// 初始当前门店下单类型
var type_data = this.$refs.realstore_cart.buy_use_type_data();
this.setData({
plugins_realstore_buy_use_type_active_index: type_data.active_index,
});
}
},
// 门店下单类型切换
realstore_buy_type_switch_event(e) {
this.$refs.realstore_cart.buy_use_type_event();
},
// 下单类型切换事件回调
realstore_buy_type_switch_back_event(params) {
this.setData({
data_list_loding_status: 1,
plugins_realstore_buy_use_type_active_index: params.buy_use_type_active_index,
});
// 重新加载数据
this.get_data();
},
// 打开优惠明细弹窗
discount_detail_open_event(e) {
this.setData({
discount_detail_status: !this.discount_detail_status,
discount_detail_goods_list_status: false,
});
},
// 关闭优惠明细弹窗
discount_detail_close_event(e) {
this.setData({
discount_detail_status: false,
});
},
// 打开优惠明细商品列表更多或关闭
open_goods_list_event() {
if (this.data_list.length > 4) {
this.setData({
discount_detail_goods_list_status: !this.discount_detail_goods_list_status,
});
} else {
this.setData({
discount_detail_goods_list_status: false,
});
}
},
// 无购物车数据按钮事件
no_cart_data_btn_event(e) {
var url = ((this.user || null) == null) ? '/pages/login/login?event_callback=init' : this.home_page_url;
app.globalData.url_open(url);
},
// 页面样式处理
page_style_handle() {
var value = 0;
var value_unit = 'px';
if(app.globalData.data.is_use_native_tabbar == 1) {
// #ifdef H5
if(this.propSourceType != 'page') {
value += uni.getWindowInfo().windowBottom || 50;
}
// #endif
} else {
value += this.propCartNavBottomValue;
// #ifdef H5
if(app.globalData.is_pc()) {
var system = app.globalData.get_system_info(null, null, true);
if(system.windowWidth <= 960) {
value *= 2;
value_unit = 'rpx';
}
}
// #endif
}
this.setData({
bottom_fixed_style: 'bottom:'+value+value_unit,
scroll_style: 'height: calc(100vh - ' + (value+(this.cart_type_value == 'realstore' ? 200 : 70)-(this.is_first == 1 ? 100 : 0))+'rpx)',
});
}
}
};
</script>
<style scoped>
/**
* 商品列表
*/
.scroll-box {
height: 100vh;
}
.scroll-box .content {
padding-bottom: 60rpx;
}
.scroll-box.cart .content {
padding-bottom: calc(180rpx + env(safe-area-inset-bottom));
}
.cart-goods-title {
line-height: 44rpx;
min-height: 86rpx;
}
.cart-goods-image {
width: 156rpx;
height: 156rpx;
}
.cart-goods-base {
width: calc(100% - 170rpx);
}
.cart-goods-item .selected {
margin-top: 60rpx;
}
/**
* 错误提示
*/
.cart-goods-item .error-msg {
left: 80rpx;
top: 78rpx;
width: 160rpx;
filter: blur(0.3px);
}
.cart-goods-item .error-msg text {
padding: 2rpx 10rpx;
box-shadow: 0 2px 10px rgb(181 181 181 / 95%);
}
/**
* 底部
*/
.cart-goods-item .goods-bottom {
height: 58rpx;
}
/**
* 数量操作
*/
.cart-number-content {
right: 0;
top: 0;
}
.cart-number-content .number-submit {
width: 60rpx;
font-weight: bold;
}
.cart-number-content .number-input {
width: 30px;
border-width: 0 1px;
border-style: solid;
border-color: #efefef;
}
.cart-number-content .number-submit,
.cart-number-content .number-input {
padding: 0;
height: 50rpx;
line-height: 50rpx;
}
/**
* 空购物车
*/
.cart-no-data-box {
padding: 140rpx 0 80rpx 0;
}
.cart-no-data-box .image {
width: 160rpx;
}
/**
* 操作导航
*/
.bottom-fixed-content {
height: 106rpx;
}
.cart-nav-base {
width: calc(75% - 20rpx);
}
.cart-nav-submit {
padding-right: 16rpx;
white-space: nowrap;
}
.cart-nav-submit .nav-btn {
font-size: 32rpx;
padding: 0 32rpx;
height: 70rpx;
line-height: 70rpx;
border-radius: 0;
}
.bottom-fixed .price {
width: calc(100% - 170rpx);
padding: 16rpx 0 16rpx 16rpx;
}
.bottom-fixed .sales-price {
max-width: calc(100% - 80rpx);
}
.bottom-fixed .price .discount-details {
height: 32rpx;
background: #f2f2f2;
padding: 0 12rpx;
border-radius: 16rpx;
margin-left: 18rpx;
}
.cart-nav-remove-submit {
padding: 0rpx 18rpx;
}
/*
* 展示型
*/
.cart-exhibition-mode .exhibition-btn {
line-height: 80rpx;
}
.cart-exhibition-mode-data .items {
padding-left: 0;
}
.cart-exhibition-mode-data .error-msg {
left: 26rpx;
}
/**
* 猜你喜欢
*/
.guess-like {
position: relative;
text-align: center;
display: inline-block;
}
.guess-like::before,
.guess-like::after {
content: '';
width: 76px;
height: 1px;
background: #dddddd;
position: absolute;
top: 50%;
transform: translateY(-50%);
}
.guess-like::before {
left: calc(100% + 20rpx);
}
.guess-like::after {
right: calc(100% + 20rpx);
}
/**
* 顶部导航
*/
.cart-right-title {
padding-right: 40rpx;
}
.cart-top-nav {
width: 260rpx;
}
.cart-top-nav .item {
width: 50%;
height: 54rpx;
line-height: 54rpx;
}
.realstore-nav {
height: 92rpx;
background: linear-gradient(180deg, #fffaf1 0%, #ffffff 100%);
}
/**
* 门店弹窗选择
*/
.plugins-realstore-choice-container {
max-height: 60vh;
overflow-y: scroll;
overflow-x: hidden;
margin-top: 20rpx;
}
/**
* 查看明细弹窗
*/
.discount_detail-popup-title {
position: absolute;
left: 0;
right: 0;
background: #f6f6f6;
top: 0;
z-index: 2;
padding: 24rpx;
}
.discount_detail-popup-goods-list {
margin-top: 84rpx;
}
.discount-detail-popup-z-index {
z-index: 1002 !important;
}
.discount_detail-popup {
margin-bottom: 140rpx;
height: calc(70vh - 122rpx);
overflow-y: auto;
}
.scroll-box-popup {
height: 480rpx;
}
.scroll-box-popup.close {
transition: all 0.3s ease;
height: 234rpx;
}
.scroll-box-popup .content {
padding-bottom: 0 !important;
}
.scroll-box-popup .content .item {
width: 25%;
}
.scroll-box-popup .content .item .cart-goods-image {
width: 100%;
}
.scroll-box-popup .cart-selected {
background-color: #fff;
height: 46rpx;
border-radius: 50%;
padding: 0 4rpx;
}
.scroll-box-popup .alias {
margin-left: 20rpx;
padding: 0 12rpx;
line-height: 40rpx;
height: 40rpx;
font-size: 20rpx;
background: #eee;
border-radius: 20rpx;
}
</style>