From a4b3ee325c7354579d495bc74a777e494e5ec38c Mon Sep 17 00:00:00 2001
From: quanwei <419654421@qq.com>
Date: Fri, 06 Feb 2026 18:18:44 +0800
Subject: [PATCH] 商品可以价格面议 选择走访时显示输入走访企业名 分会添加活动时要总会审核 分类添加人数限制,添加活动选择了填写人数限制的分类时活动名额下显示该分类人数限制为15 同一个企业30天内只能走访一次,在30天内走访同一个企业时提示该企业已被走访xx天后才可以从新走访
---
mobile/pages/product/category.vue | 464 +++++++++++++++++++++++++++++++++------------------------
1 files changed, 269 insertions(+), 195 deletions(-)
diff --git a/mobile/pages/product/category.vue b/mobile/pages/product/category.vue
index c53ba43..f2f2d9b 100644
--- a/mobile/pages/product/category.vue
+++ b/mobile/pages/product/category.vue
@@ -1,5 +1,5 @@
<template>
- <view class="category-wrap" :data-theme='theme()' :class="theme() || ''">
+ <view class="category-wrap" :data-theme='theme()' :class="theme() || ''">
<!-- #ifdef APP-PLUS -->
<header-bar></header-bar>
<!-- #endif -->
@@ -45,7 +45,7 @@
</view>
</scroll-view>
</view>
-
+
<!--一级分类 列表-->
<view class="cotegory-type cotegory-type-3" v-if="show_type==40">
<view class="category-tab">
@@ -57,10 +57,12 @@
</scroll-view>
</view>
<view class="category-content pr">
- <scroll-view scroll-y="true" @scrolltolower="scrolltolowerList" class="scroll-Y scroll-3" :style="'height:'+scrollviewHigh+'px;'">
+ <scroll-view scroll-y="true" @scrolltolower="scrolltolowerList" class="scroll-Y scroll-3"
+ :style="'height:'+scrollviewHigh+'px;'">
<view class="shop_body">
- <view class="shop_body_l_item" :class="index==productData.length-1?'noborder':''" v-for="(item,index) in productData"
- :key="index" @click="gotoList2(item.product_id)" v-if="index_open_city==0 || (index_open_city==1 && isInArray2(city_supplier_ids,item.shop_supplier_id))">
+ <view class="shop_body_l_item" :class="index==productData.length-1?'noborder':''"
+ v-for="(item,index) in productData" :key="index" @click="gotoList2(item.product_id)"
+ v-if="index_open_city==0 || (index_open_city==1 && isInArray2(city_supplier_ids,item.shop_supplier_id))">
<view>
<image :src="item.product_image" mode=""></image>
</view>
@@ -68,12 +70,15 @@
<view class="shop_body_l_item_info_title gray3 f32">{{item.product_name}}</view>
<view class="d-b-c pb10">
<view class="shop_body_l_item_info_price">
- <view class="f24 shop_red">¥<text class="f32 fb">{{item.product_price}}</text></view>
+ <view class="f24 shop_red" v-if="item.is_price_negotiable">价格面议</view>
+ <view class="f24 shop_red" v-else>¥<text
+ class="f32 fb">{{item.product_price}}</text></view>
</view>
<!-- 购物车操作组件 -->
<view class="cart-action">
<!-- 多规格商品显示选择规格按钮 -->
- <view class="spec-select-btn" v-if="item.spec_type === 20" @click.stop="showSpecPopup(item,index)">
+ <view class="spec-select-btn" v-if="item.spec_type === 20"
+ @click.stop="showSpecPopup(item,index)">
<text>选择规格</text>
<!-- 购物车数量徽章 -->
<view class="cart-badge" v-if="(item.cart && item.cart.total_num > 0)">
@@ -82,7 +87,9 @@
</view>
<!-- 单规格商品显示购物车操作 -->
<template v-else>
- <view class="cart-btn-add" v-if="!item.cart.total_num || item.cart.total_num <= 0" @click.stop="addToCart(item,index)">
+ <view class="cart-btn-add"
+ v-if="!item.cart.total_num || item.cart.total_num <= 0"
+ @click.stop="handleCartItemAction(item,index)">
<text class="icon iconfont icon-jia"></text>
</view>
<view class="cart-number-controller" v-else>
@@ -100,7 +107,7 @@
<view class="shop_body_l_item_info_others_sales">累计成交:{{item.product_sales}}笔</view>
</view> -->
</view>
-
+
</view>
</view>
</view>
@@ -109,6 +116,7 @@
<text class="iconfont icon-wushuju"></text>
<text class="cont">亲,暂无相关记录哦</text>
</view>
+ <uni-load-more v-else :loadingType="loadingType"></uni-load-more>
</scroll-view>
</view>
</view>
@@ -140,7 +148,7 @@
</view>
<tabBar></tabBar>
<request-loading :loadding='isloadding'></request-loading>
-
+
<!-- 规格选择弹窗 -->
<view class="spec-popup" :class="specPopupVisible ? 'visible' : ''" @touchmove.stop.prevent="">
<view class="popup-mask" @click="closeSpecPopup"></view>
@@ -158,24 +166,22 @@
</view>
</view>
</view>
-
+
<view class="spec-section" v-if="selectedProduct.spec_type === 20 && selectedProduct.specData">
- <view class="spec-group" v-for="(specGroup, groupIndex) in selectedProduct.specData.spec_attr" :key="groupIndex">
+ <view class="spec-group" v-for="(specGroup, groupIndex) in selectedProduct.specData.spec_attr"
+ :key="groupIndex">
<view class="spec-group-name">{{ specGroup.group_name }}</view>
<view class="spec-options">
- <view
- class="spec-option"
+ <view class="spec-option"
:class="{ active: selectedSpecs[groupIndex] === specItem.item_id }"
- v-for="(specItem, itemIndex) in specGroup.spec_items"
- :key="itemIndex"
- @click="selectSpec(groupIndex, specItem.item_id)"
- >
+ v-for="(specItem, itemIndex) in specGroup.spec_items" :key="itemIndex"
+ @click="selectSpec(groupIndex, specItem.item_id)">
{{ specItem.spec_value }}
</view>
</view>
</view>
</view>
-
+
<view class="quantity-section">
<view class="quantity-label">数量</view>
<view class="quantity-controller">
@@ -183,12 +189,13 @@
<text class="icon iconfont icon-jian"></text>
</view>
<view class="quantity-display">{{ quantity }}</view>
- <view class="quantity-btn" :class="{ disabled: quantity >= currentStock }" @click="increaseQuantity">
+ <view class="quantity-btn" :class="{ disabled: quantity >= currentStock }"
+ @click="increaseQuantity">
<text class="icon iconfont icon-jia"></text>
</view>
</view>
</view>
-
+
<view class="action-buttons">
<button class="add-cart-btn" @click="confirmAddToCart">加入购物车</button>
</view>
@@ -198,8 +205,11 @@
</template>
<script>
+ import uniLoadMore from "@/components/uni-load-more.vue";
export default {
- components: {},
+ components: {
+ uniLoadMore
+ },
data() {
return {
isloadding: true,
@@ -216,52 +226,64 @@
childlist: [],
/*当前选中的分类*/
select_index: 0,
- productData:[],
- catename:'',
+ productData: [],
+ catename: '',
/*底部加载*/
loading: true,
- index_open_city:0,
- city_supplier_ids:[],
-
+ /*没有更多*/
+ no_more: false,
+ index_open_city: 0,
+ city_supplier_ids: [],
+
// 购物车相关数据
cartData: {}, // 存储各商品在购物车中的数量
-
+
// 规格弹窗相关数据
specPopupVisible: false,
selectedProduct: null,
selectedSpecs: [],
quantity: 1,
- page:1,
- last_page:1,
+ page: 1,
+ last_page: 1,
+ category_id: 0,
+ params: {
+ page: 1,
+ category_id: 0,
+ search: '',
+ sortType: '',
+ sortPrice: 0,
+ list_rows: 10,
+ },
};
},
computed: {
selectedSpecText() {
if (!this.selectedProduct || !this.selectedProduct.specData) return '请选择规格';
-
+
const selectedNames = this.selectedSpecs
.map((specId, index) => {
const specGroup = this.selectedProduct.specData.spec_attr[index];
if (!specGroup) return '';
-
+
const selectedItem = specGroup.spec_items.find(item => item.item_id === specId);
return selectedItem ? selectedItem.spec_value : '';
})
.filter(name => name !== '');
-
+
return selectedNames.length > 0 ? `已选: "${selectedNames.join(' ')}"` : '请选择规格';
},
-
+
// 根据选中的规格获取当前SKU
currentSku() {
- if (!this.selectedProduct || !this.selectedProduct.sku || this.selectedSpecs.includes(null) || this.selectedSpecs.includes(undefined)) {
+ if (!this.selectedProduct || !this.selectedProduct.sku || this.selectedSpecs.includes(null) || this
+ .selectedSpecs.includes(undefined)) {
return null;
}
-
+
const specSkuId = this.selectedSpecs.join('_');
return this.selectedProduct.sku.find(sku => sku.spec_sku_id === specSkuId);
},
-
+
// 获取当前选中规格的价格
currentPrice() {
if (this.currentSku) {
@@ -269,7 +291,7 @@
}
return this.selectedProduct ? this.selectedProduct.product_price : '0.00';
},
-
+
// 获取当前选中规格的库存
currentStock() {
if (this.currentSku) {
@@ -277,14 +299,24 @@
}
return this.selectedProduct ? this.selectedProduct.product_stock : 0;
},
-
-
+ /*加载中状态*/
+ loadingType() {
+ if (this.isloadding) {
+ return 1;
+ } else {
+ if (this.listData.length != 0 && this.no_more) {
+ return 2;
+ } else {
+ return 0;
+ }
+ }
+ }
},
mounted() {
this.init();
this.getData();
},
- onShow(){
+ onShow() {
this.getData();
this.getTabBarLinks();
},
@@ -304,14 +336,14 @@
}
});
},
-
- isInArray2(arr,value){
- value=parseInt(value);
- var index = arr.indexOf(value);
- if(index >= 0){
- return true;
- }
- return false;
+
+ isInArray2(arr, value) {
+ value = parseInt(value);
+ var index = arr.indexOf(value);
+ if (index >= 0) {
+ return true;
+ }
+ return false;
},
/*判断是否有图片*/
@@ -329,26 +361,32 @@
_this.select_index = 0;
var city_supplier_ids = '';
- if(uni.getStorageSync('citySupplierRes')){
- let resData=uni.getStorageSync('citySupplierRes');
- _this.city_supplier_ids=resData.supplier_ids;
+ if (uni.getStorageSync('citySupplierRes')) {
+ let resData = uni.getStorageSync('citySupplierRes');
+ _this.city_supplier_ids = resData.supplier_ids;
city_supplier_ids = _this.city_supplier_ids.join(",")
}
_this.isloadding = true;
- _this._get('product.category/index', {city_supplier_ids:city_supplier_ids}, function(res) {
+ _this._get('product.category/index', {
+ city_supplier_ids: city_supplier_ids
+ }, function(res) {
_this.listData = res.data.list;
_this.show_type = res.data.template.category_style;
- if(_this.listData.length>0){
+ if (_this.listData.length > 0) {
if (_this.listData[0].child) {
_this.childlist = _this.listData[0].child;
}
+ _this.category_id = _this.listData[0]['category_id'];
}
_this.catename = _this.listData[0].name;
_this.background = res.data.background;
- _this.productData=res.data.productList.data;
- _this.index_open_city=res.data.store.index_open_city;
+ _this.productData = res.data.productList.data;
+ _this.index_open_city = res.data.store.index_open_city;
_this.isloadding = false;
_this.last_page = res.data.productList.last_page;
+ if (_this.last_page <= 1) {
+ _this.no_more = true;
+ }
});
},
@@ -361,21 +399,23 @@
},
/*获取商品数据*/
getProductData(e) {
- if(this.select_index!=e){
- this.page=1
+ if (this.select_index != e) {
+ this.page = 1
}
this.select_index = e;
- this.productData=[];
+ this.productData = [];
let self = this;
var city_supplier_ids = '';
- if(uni.getStorageSync('citySupplierRes')){
- let resData=uni.getStorageSync('citySupplierRes');
- self.city_supplier_ids=resData.supplier_ids;
+ if (uni.getStorageSync('citySupplierRes')) {
+ let resData = uni.getStorageSync('citySupplierRes');
+ self.city_supplier_ids = resData.supplier_ids;
city_supplier_ids = self.city_supplier_ids.join(",")
}
let page = self.page;;
let list_rows = 10;
- let category_id =this.listData[e].category_id;
+ let category_id = this.listData[e].category_id;
+ this.category_id = category_id
+ this.no_more = false;
let search = '';
let sortType = '';
let sortPrice = 0;
@@ -387,12 +427,15 @@
sortType: sortType,
sortPrice: sortPrice,
list_rows: list_rows,
- city_supplier_ids:city_supplier_ids
+ city_supplier_ids: city_supplier_ids
}, function(res) {
self.isloadding = false;
self.productData = res.data.list.data;
self.last_page = res.data.list.last_page;
- self.index_open_city=res.data.store.index_open_city;
+ self.index_open_city = res.data.store.index_open_city;
+ if (self.last_page <= 1) {
+ self.no_more = true;
+ }
});
},
/*跳转产品列表*/
@@ -410,20 +453,24 @@
'&search=' + search +
'&sortPrice=' + sortPrice);
},
- scrolltolowerList(){
- var self=this;
- if(self.page<self.last_page){
+ scrolltolowerList() {
+ var self = this;
+ if (self.page < self.last_page) {
self.page++
self.isloadding = true;
- var params=self.params;
- params.category_id =self.category_id;
- params.page =self.page;
+ var params = self.params;
+ params.category_id = self.category_id;
+ params.page = self.page;
self._get('product.product/lists', params, function(res) {
self.isloadding = false;
self.productData = self.productData.concat(res.data.list.data);
+ if (self.page >= self.last_page) {
+ self.no_more = true;
+ return;
+ }
});
}
-
+
},
wxGetUserInfo: function(res) {
@@ -435,7 +482,7 @@
return false;
}
},
-
+
/*跳转搜索页面*/
gotoSearch() {
this.gotoPage('/pages/product/search/search');
@@ -450,35 +497,57 @@
path: '/pages/product/category?' + self.getShareUrlParams()
};
},
-
-
+
+
// 添加到购物车或显示规格选择
- addToCartOrShowSpec(product,index) {
+ addToCartOrShowSpec(product, index) {
if (product.spec_type === 20) {
// 多规格商品,显示规格选择弹窗
this.showSpecPopup(product);
} else {
// 单规格商品,直接添加到购物车
- this.directlyAddToCart(product,index);
+ this.directlyAddToCart(product, index);
+ }
+ },
+
+ // 处理购物车操作 - 价格面议商品特殊处理
+ handleCartItemAction(product, index) {
+ // 如果是价格面议商品,提示联系客服
+ if (product.is_price_negotiable) {
+ uni.showModal({
+ title: '温馨提示',
+ content: '该商品为价格面议商品,请联系客服咨询具体价格',
+ confirmText: '联系客服',
+ cancelText: '取消',
+ success: (res) => {
+ if (res.confirm) {
+ // 跳转到商品详情页联系客服
+ this.gotoList2(product.product_id);
+ }
+ }
+ });
+ } else {
+ // 非价格面议商品,正常添加到购物车
+ this.directlyAddToCart(product, index);
}
},
// 添加到购物车(单规格商品)
- addToCart(product,index) {
- this.directlyAddToCart(product,index);
+ addToCart(product, index) {
+ this.directlyAddToCart(product, index);
},
-
+
// 直接添加到购物车(单规格商品)
- directlyAddToCart(product,index) {
+ directlyAddToCart(product, index) {
this._post('order.cart/add', {
product_id: product.product_id,
total_num: 1,
spec_sku_id: 0
}, (res) => {
if (res.code === 1) {
- if(!product.cart){
- product.cart={
- total_num:0
+ if (!product.cart) {
+ product.cart = {
+ total_num: 0
}
}
// 更新商品的购物车数量
@@ -492,12 +561,12 @@
}
});
},
-
+
// 显示规格选择弹窗
showSpecPopup(product) {
this.selectedProduct = product;
this.quantity = 1;
- let url=''
+ let url = ''
//#ifdef H5
if (this.isWeixin()) {
url = window.location.href;
@@ -506,35 +575,36 @@
// 获取商品规格数据
this._get('product.product/detail', {
product_id: product.product_id,
- url:url,
+ url: url,
visitcode: this.getVisitcode()
}, (res) => {
if (res.code === 1) {
-
- // 使用正确的路径获取规格数据
- let specData = res.data.detail.product_multi_spec || res.data.detail;
- this.$set(this.selectedProduct, 'specData', specData);
- // 同时设置SKU数据
- if (res.data.detail.sku) {
- this.$set(this.selectedProduct, 'sku', res.data.detail.sku);
- }
- console.log(this.selectedSpecs);
+
+ // 使用正确的路径获取规格数据
+ let specData = res.data.detail.product_multi_spec || res.data.detail;
+ this.$set(this.selectedProduct, 'specData', specData);
+ // 同时设置SKU数据
+ if (res.data.detail.sku) {
+ this.$set(this.selectedProduct, 'sku', res.data.detail.sku);
+ }
+ console.log(this.selectedSpecs);
// 初始化选中规格数组
-
- if (specData && specData.spec_attr) {
- this.selectedSpecs = specData.spec_attr.map(specGroup => {
- return specGroup.spec_items && specGroup.spec_items.length > 0 ? specGroup.spec_items[0].item_id : null;
- });
- this.specPopupVisible = true;
-
- } else {
- uni.showToast({
- title: '获取商品规格失败',
- icon: 'none'
- });
- return;
- }
-
+
+ if (specData && specData.spec_attr) {
+ this.selectedSpecs = specData.spec_attr.map(specGroup => {
+ return specGroup.spec_items && specGroup.spec_items.length > 0 ? specGroup
+ .spec_items[0].item_id : null;
+ });
+ this.specPopupVisible = true;
+
+ } else {
+ uni.showToast({
+ title: '获取商品规格失败',
+ icon: 'none'
+ });
+ return;
+ }
+
} else {
uni.showToast({
title: '获取商品规格失败',
@@ -543,34 +613,34 @@
}
});
},
-
+
// 关闭规格选择弹窗
closeSpecPopup() {
this.specPopupVisible = false;
this.selectedProduct = null;
this.selectedSpecs = [];
},
-
+
// 选择规格
selectSpec(groupIndex, itemId) {
// 使用 Vue.set 确保响应式更新
this.$set(this.selectedSpecs, groupIndex, itemId);
},
-
+
// 增加数量
increaseQuantity() {
if (this.quantity < this.currentStock) {
this.quantity++;
}
},
-
+
// 减少数量
decreaseQuantity() {
if (this.quantity > 1) {
this.quantity--;
}
},
-
+
// 确认添加到购物车
confirmAddToCart() {
// 检查是否选择了所有规格
@@ -581,30 +651,31 @@
});
return;
}
-
+
// 构造规格SKU ID
const specSkuId = this.selectedSpecs.join('_');
-
+
this._post('order.cart/add', {
product_id: this.selectedProduct.product_id,
total_num: this.quantity,
- spec_sku_id: specSkuId?specSkuId:0
+ spec_sku_id: specSkuId ? specSkuId : 0
}, (res) => {
if (res.code === 1) {
// 更新商品的购物车数量
- const product = this.productData.find(p => p.product_id === this.selectedProduct.product_id);
+ const product = this.productData.find(p => p.product_id === this.selectedProduct
+ .product_id);
if (product) {
- if(!product.cart){
- product.cart={
- total_num:0
+ if (!product.cart) {
+ product.cart = {
+ total_num: 0
}
}
product.cart.total_num++;
}
-
+
// 关闭弹窗
this.closeSpecPopup();
-
+
uni.showToast({
title: '已添加到购物车',
icon: 'success'
@@ -617,9 +688,9 @@
}
});
},
-
+
// 增加购物车商品数量
- increaseCart(product,index) {
+ increaseCart(product, index) {
this._post('order.cart/add', {
product_id: product.product_id,
total_num: 1,
@@ -636,18 +707,18 @@
}
});
},
-
+
// 减少购物车商品数量
- decreaseCart(product,index) {
+ decreaseCart(product, index) {
if (product.cart.total_num <= 1) {
// 如果数量为1,执行删除操作
this._post('order.cart/delete', {
product_id: product.product_id,
cart_id: product.cart.cart_id,
- spec_sku_id:product.product_sku.spec_sku_id
+ spec_sku_id: product.product_sku.spec_sku_id
}, (res) => {
if (res.code === 1) {
- this.productData[index].cart.total_num=0;
+ this.productData[index].cart.total_num = 0;
} else {
uni.showToast({
title: res.msg,
@@ -659,7 +730,7 @@
// 否则减少数量
this._post('order.cart/sub', {
product_id: product.product_id,
- spec_sku_id:product.product_sku.spec_sku_id
+ spec_sku_id: product.product_sku.spec_sku_id
}, (res) => {
if (res.code === 1) {
product.cart.total_num--;
@@ -822,18 +893,20 @@
background: #ffffff;
border-radius: 12px;
}
- .catename{
+
+ .catename {
padding-top: 10rpx;
line-height: 60rpx;
border-bottom: 1rpx solid #D9D9D9;
}
+
.shop_body {
width: 100%;
background-color: #ffffff;
padding: 0rpx 20rpx;
box-sizing: border-box;
}
-
+
.shop_body_l_item {
// width: 90%;
// height: 250rpx;
@@ -845,16 +918,16 @@
padding: 40rpx 0;
box-sizing: border-box;
border-bottom: 1rpx solid #D9D9D9;
-
+
}
-
+
.shop_body_l_item image {
width: 150rpx;
height: 150rpx;
border-radius: 12rpx;
background-color: rgba(0, 0, 0, 0.1);
}
-
+
.shop_body_l_item_info {
// width: 70%;
// height: 100%;
@@ -866,7 +939,7 @@
box-sizing: border-box;
position: relative;
}
-
+
.shop_body_l_item_info_title {
display: -webkit-box;
-webkit-box-orient: vertical;
@@ -877,23 +950,23 @@
word-break: break-all;
overflow: hidden;
}
-
+
.shop_body_l_item_info_price {
display: flex;
align-items: flex-end;
}
-
+
.shop_body_l_item_info_price view {
margin-right: 15rpx;
}
-
+
.shop_body_l_item_info_others {
// width: 100%;
height: 30rpx;
display: flex;
justify-content: space-between;
}
-
+
.shop_body_l_item_info_others_activity {
width: 150rpx;
height: 30rpx;
@@ -905,11 +978,11 @@
text-align: center;
box-sizing: border-box;
}
-
+
.shop_body_l_item_info_others_sales {
color: #333333;
}
-
+
.shop_body2 {
width: 100%;
display: flex;
@@ -917,7 +990,7 @@
flex-wrap: wrap;
background-color: #f2f2f2;
}
-
+
.shop_body_t_item {
width: 345rpx;
// margin: 0 2.5%;
@@ -927,17 +1000,17 @@
background-color: white;
border-radius: 12rpx;
}
-
+
.collect text {
color: #FFFFFF;
}
-
+
.shop_body_t_item image {
width: 100%;
height: 337.5rpx;
background-color: rgba(0, 0, 0, 0.1);
}
-
+
.shop_body_t_item_info {
// height: 182.5rpx;
display: flex;
@@ -946,7 +1019,7 @@
padding: 20rpx;
box-sizing: border-box;
}
-
+
.shop_body_t_item_info_title {
display: -webkit-box;
-webkit-box-orient: vertical;
@@ -958,55 +1031,56 @@
overflow: hidden;
margin-bottom: 30rpx;
}
-
+
.shop_body_t_item_info_price {
display: flex;
align-items: flex-end;
-
+
}
-
+
.shop_body_t_item_info_others {
display: flex;
justify-content: space-between;
margin-bottom: 8rpx;
}
-
+
.shop_body_t_item_info_others_activity {}
-
+
.shop_body_t_item_info_others_sales {
color: #999999;
}
-
+
.huaxianjia {
text-decoration: line-through;
color: #999;
margin-left: 5rpx;
}
-
+
.shop_red {
color: #F6220C;
}
-
+
.inner-tab .item .icon-sanjiao2 {
font-size: 13rpx;
}
-
+
.inner-tab .item .icon-sanjiao1 {
font-size: 13rpx;
}
-
+
.noborder {
border: none;
}
-
+
/* 购物车操作样式 */
.cart-action {
/* position: absolute;
right: 0;
bottom: 0; */
}
-
- .cart-btn-add, .cart-btn-sub {
+
+ .cart-btn-add,
+ .cart-btn-sub {
width: 48rpx;
height: 48rpx;
border-radius: 50%;
@@ -1017,7 +1091,7 @@
color: white;
font-size: 24rpx;
}
-
+
.spec-select-btn {
padding: 2rpx 4rpx;
background: #ff6b6b;
@@ -1031,22 +1105,22 @@
height: 48rpx;
position: relative;
}
-
+
.cart-btn-sub {
background: #f0f0f0;
color: #666;
}
-
+
.cart-number {
margin: 0 10rpx;
font-size: 28rpx;
}
-
+
.cart-number-controller {
display: flex;
align-items: center;
}
-
+
/* 规格选择弹窗样式 */
.spec-popup {
position: fixed;
@@ -1059,12 +1133,12 @@
opacity: 0;
transition: all 0.3s ease;
}
-
+
.spec-popup.visible {
visibility: visible;
opacity: 1;
}
-
+
.popup-mask {
position: absolute;
top: 0;
@@ -1073,7 +1147,7 @@
bottom: 0;
background: rgba(0, 0, 0, 0.6);
}
-
+
.popup-content {
position: absolute;
bottom: 0;
@@ -1088,47 +1162,47 @@
max-height: 80%;
overflow-y: auto;
}
-
+
.spec-popup.visible .popup-content {
transform: translateY(0);
}
-
+
.popup-header {
display: flex;
position: relative;
padding-right: 60rpx;
margin-bottom: 30rpx;
}
-
+
.popup-header image {
width: 160rpx;
height: 160rpx;
border-radius: 10rpx;
}
-
+
.popup-header-info {
margin-left: 20rpx;
flex: 1;
}
-
+
.price {
font-size: 36rpx;
color: #ff6b6b;
font-weight: bold;
}
-
+
.stock {
font-size: 24rpx;
color: #999;
margin-top: 10rpx;
}
-
+
.selected-spec {
font-size: 24rpx;
color: #666;
margin-top: 10rpx;
}
-
+
.popup-header-right {
position: absolute;
right: 0;
@@ -1137,7 +1211,7 @@
align-items: center;
gap: 20rpx;
}
-
+
.cart-badge {
position: absolute;
top: -12rpx;
@@ -1155,13 +1229,13 @@
padding: 0 6rpx;
z-index: 10;
}
-
+
.cart-count {
color: white;
font-size: 20rpx;
line-height: 1;
}
-
+
.close-btn {
width: 50rpx;
height: 50rpx;
@@ -1170,26 +1244,26 @@
justify-content: center;
color: #999;
}
-
+
.spec-section {
margin-bottom: 30rpx;
}
-
+
.spec-group {
margin-bottom: 30rpx;
}
-
+
.spec-group-name {
font-size: 28rpx;
font-weight: bold;
margin-bottom: 20rpx;
}
-
+
.spec-options {
display: flex;
flex-wrap: wrap;
}
-
+
.spec-option {
padding: 10rpx 20rpx;
border: 1rpx solid #ddd;
@@ -1198,28 +1272,28 @@
margin-bottom: 20rpx;
font-size: 26rpx;
}
-
+
.spec-option.active {
border-color: #ff6b6b;
color: #ff6b6b;
}
-
+
.quantity-section {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 30rpx;
}
-
+
.quantity-label {
font-size: 28rpx;
}
-
+
.quantity-controller {
display: flex;
align-items: center;
}
-
+
.quantity-btn {
width: 50rpx;
height: 50rpx;
@@ -1230,22 +1304,22 @@
justify-content: center;
font-size: 24rpx;
}
-
+
.quantity-btn.disabled {
opacity: 0.5;
}
-
+
.quantity-display {
margin: 0 20rpx;
font-size: 28rpx;
min-width: 60rpx;
text-align: center;
}
-
+
.action-buttons {
text-align: center;
}
-
+
.add-cart-btn {
width: 100%;
height: 80rpx;
--
Gitblit v1.9.2