Browse Source

feat(购物车): 实现购物车商品删除功能及空状态展示

- 新增删除单个商品和批量删除功能
- 添加购物车为空时的展示页面和"去逛逛"跳转
- 修复商品数量字段从sum改为quantity的兼容问题
- 优化价格显示样式,统一货币符号大小
- 移除个人中心页面的字体缩放功能
master
wei 4 days ago
parent
commit
6720ec1752
  1. 17
      libs/api/index.js
  2. 24
      pages/allDish/allDish.vue
  3. 6
      pages/personalInformation/personalInformation.vue
  4. 29
      pages/shoppingCart/shoppingCart.scss
  5. 88
      pages/shoppingCart/shoppingCart.vue
  6. BIN
      static/shoppingCart/pic.png

17
libs/api/index.js

@ -342,3 +342,20 @@ export function previewApi(params = {}) {
url: "/order/preview.do",
});
}
// //删除购物车中的商品
// module.exports.deleteFromCart = function (postData, success) {
// request('/cart/delete.do', 'POST', postData, success)
// }
export function deleteFromCartApi(data = {}) {
return request({
errorMessage: "删除商品",
method: "POST",
data,
header: {
"content-type": "application/x-www-form-urlencoded;charset=UTF-8",
},
url: "/cart/delete.do",
});
}

24
pages/allDish/allDish.vue

@ -990,10 +990,16 @@ onHide(() => {
<view class="under">
<view class="price-box" @click="() => onGotoDetail(item)">
<view class="price">
<text>{{ item.specs[0].price }}</text>
<text>
<text class="moneySymbol">
</text>{{ item.specs[0].price }}
</text>
</view>
<text v-if="item.specs[0].chuxiao" class="original">
正价:{{ item.specs[0].oldPrice }}/{{ item.specs[0].unit }}
正价:<text class="moneySymbol">
</text>{{ item.specs[0].oldPrice }}/{{ item.specs[0].unit }}
</text>
<text v-else class="no-original">
/{{ item.specs[0].unit }}
@ -1003,7 +1009,7 @@ onHide(() => {
<block v-if="item.specs[0].sum !== 0">
<view class="line-one" />
<view class="line-two" />
<view class="minus" @click.stop="(e) => onMinus(item.specs[0], e)">
<view class="minus" @click.stop="() => onMinus(item.specs[0])">
<image class="icon" src="/static/home/minus.png" mode="" />
</view>
<text class="input" @click="() => onShowKeyboard(item)">
@ -1032,7 +1038,10 @@ onHide(() => {
>
<view class="price-box">
<view class="price">
<text>{{ childs.price }}</text>
<text class="moneySymbol">
</text>
<text>{{ childs.price }}</text>
</view>
<text v-if="item.specs[0].chuxiao" class="original">
/{{ childs.unit }}
@ -1052,7 +1061,7 @@ onHide(() => {
class="minus"
data-quantity="-1"
data-exa="sum"
@click="onSetSum"
@click="() => onMinus(childs)"
>
<image class="icon" src="/static/home/minus.png" mode="" />
</view>
@ -1070,7 +1079,7 @@ onHide(() => {
data-id="{{childs.id}}"
data-chuxiao="{{childs.chuxiao}}"
data-exa="sum"
@click="() => setSum(childs)"
@click="(e) => onAdd(childs, e)"
>
<image class="icon" src="/static/home/add.png" mode="" />
</view>
@ -1192,4 +1201,7 @@ onHide(() => {
<style lang="scss" scoped>
@import './allDish.scss';
.moneySymbol {
font-size: $text-xs;
}
</style>

6
pages/personalInformation/personalInformation.vue

@ -5,7 +5,7 @@ import customTabBar from "@/components/custom-tab-bar/my-tab-bar.vue";
import navv from "@/components/nav/nav.vue";
// import navigation from "@/components/navigation/navigation.vue";
import { getUserInfoApi, yesterdayOrderApi } from "@/libs/api";
import { increaseFontScale } from "@/libs/utils";
// import { increaseFontScale } from "@/libs/utils";
/**
* 判断登录状态
@ -456,14 +456,14 @@ onLoad(() => {
</view>
<view class="tool-box">
<view>
<!-- <view>
<uv-button @click="() => increaseFontScale(0.1)">
加大字体
</uv-button>
<uv-button @click="() => increaseFontScale(-0.1)">
减小字体
</uv-button>
</view>
</view> -->
<block
v-for="(parent, parentIndex) in commonTools"

29
pages/shoppingCart/shoppingCart.scss

@ -325,4 +325,33 @@
}
}
}
}
.empty-box {
display: flex;
flex-direction: column;
align-items: center;
margin-top: 119rpx;
}
.empty-box .icon {
width: 430rpx;
height: 327rpx;
}
.empty-box .tips {
font-weight: bold;
font-size: 29rpx;
color: #666666;
margin-top: 81rpx;
}
.empty-box .btn {
font-weight: bold;
font-size: 33rpx;
color: #06CA64;
margin-top: 78rpx;
border-radius: 60rpx;
border: 1px solid #05B359;
padding: 18rpx 48rpx;
}

88
pages/shoppingCart/shoppingCart.vue

@ -6,6 +6,7 @@ import navv from "@/components/nav/nav.vue";
import topTitle from "@/components/topTitle/topTitle.vue";
import {
addCartApi,
deleteFromCartApi,
editDefaultAddressApi,
getCartInfoApi,
getMyAreaApi,
@ -103,9 +104,19 @@ const startY = ref(0);
*/
function onGoSelectAddress() { }
/**
* 点击管理购物车
* 点击去逛逛
*/
function onManageCart() { }
function onGotoAlls() {
uni.switchTab({
url: "/pages/allDish/allDish",
});
}
/**
* 点击管理购物车 编辑和完成
*/
function onManageCart() {
finished.value = !finished.value;
}
/**
* 计算滑动角度
* @param {object} start 起点坐标
@ -244,18 +255,69 @@ function flyY(bottomY, ballY, duration = 400) {
*/
function onMinus(e, item) {
// 0,
item.sum = Number(item.sum) || 0;
item.quantity = Number(item.quantity) || 0;
// (item.minNum), -1
const minNum = item.minNum || 1;
const diff = -(item.sum === minNum ? minNum : 1);
item.sum += diff;
const diff = -(item.quantity === minNum ? minNum : 1);
item.quantity += diff;
toCart(item, diff);
}
function onDelete() {}
/**
*
*/
function onDelete(index) {
uni.showModal({
title: "警告",
content: "确定删除当前商品?",
confirmColor: "#3cc51f",
async success(res) {
if (res.cancel) {
return;
}
const res2 = await deleteFromCartApi({
ids: cartLists.value[index].id,
});
if (res2.code !== "0") {
return;
}
cartLists.value.splice(index, 1);
initCartInfo();
},
});
}
function onSelectAllGoods() {}
function onGotoOrder() {}
function onDeleteCart() {}
/**
* 删除所选
*/
function onDeleteCart() {
uni.showModal({
title: "警告",
content: "确定删除选中商品?",
confirmColor: "#3cc51f",
async success(res) {
if (res.cancel) {
return;
}
const res2 = await deleteFromCartApi({
ids: checkedItems.value.join(","),
});
if (res2.code !== "0") {
return;
}
cartLists.value = cartLists.value.filter(item => !checkedItems.value.includes(item.id));
initCartInfo();
},
});
// uni.showToast({
// title: "",
// icon: "none",
// });
}
/**
* 更新购物车
@ -593,7 +655,7 @@ onLoad(() => {
</view>
</view>
</view>
<view class="delete" @click="onDelete">
<view class="delete" @click="() => onDelete(index)">
删除
</view>
</view>
@ -650,6 +712,16 @@ onLoad(() => {
</view>
</view>
<view v-if="cartLists.length == 0" class="empty-box">
<image class="icon" src="@/static/shoppingCart/pic.png" mode="widthFix" />
<text class="tips">
这里空空如也快去添加吧~
</text>
<view class="btn" @click="onGotoAlls">
去逛逛
</view>
</view>
<!-- 购物车小球 -->
<view
v-if="showBall"

BIN
static/shoppingCart/pic.png

After

Width: 619  |  Height: 471  |  Size: 26 KiB

Loading…
Cancel
Save