jiaqingjiayi-xiaochengxu/甲情_甲意/miniprogram/pages/test1/test1.js
2024-12-10 18:35:22 +08:00

217 lines
6.5 KiB
JavaScript
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.

import {url} from '../request'
Page({
data: {
id: '',
productList: [], // 商品列表
selectedItems: [], // 每个商品的选中状态
totalPrice: 0, // 总价
checkAll: false, // 全选标志
hhh:[]
},
onShow() {
my.getStorage({
key: 'userInfo',
success: (res) => {
const userInfo = res.data;
this.setData({
id: userInfo.id, // 获取 id
});
if (userInfo && userInfo.cookie) {
my.request({
url: url + '/api/cart/selectByUserId',
method: 'POST',
data: {
id: this.data.id
},
headers: {
'content-type': 'application/json',
'Cookie': userInfo.cookie,
},
dataType: 'json',
success: (res) => {
console.log(res);
if (res.data.code === 0) {
const cartItems = res.data.data;
this.fetchProductDetails(cartItems);
}
},
fail: (error) => {
console.error('请求失败: ', JSON.stringify(error));
my.alert({ content: '请求失败,请稍后重试' });
},
});
} else {
my.alert({
content: '您未登录,请先登录。',
success: () => {
my.navigateTo({
url: '/pages/denglu/denglu',
});
},
});
}
},
});
},
// 获取商品详细信息
fetchProductDetails(cartItems, userId) {
console.log(cartItems, 'zheshiid');
const promises = cartItems.map((item) => {
return new Promise((resolve, reject) => {
my.request({
url: url + '/api/commodities/getById/commodities',
method: 'GET',
data: { id: item.commoditiesId },
headers: { 'content-type': 'application/json' },
success: (res) => {
if (res.data.code === 0) {
const productData = res.data.data;
productData.userId = userId; // 添加 userId
productData.cartId = item.id; // 将 cartId 添加到商品数据中
resolve(productData);
} else {
reject(`商品信息获取失败: ${res.data.message}`);
}
},
fail: (error) => {
reject(error);
},
});
});
});
Promise.all(promises)
.then((productList) => {
this.setData({
productList,
selectedItems: new Array(productList.length).fill(false), // 初始化所有商品的选中状态为 false
});
console.log(productList, '这是商品');
})
.catch((error) => {
console.error('商品信息获取失败: ', error);
my.alert({ content: '商品信息获取失败,请稍后重试' });
});
},
// 计算 checkAll 是否选中
checkAll() {
return this.data.selectedItems.every(item => item); // 如果所有项都选中,返回 true
},
// 处理单个复选框的选中状态变化
onChange(event) {
const selectedItems = event.detail.value; // 获取选中的商品ID列表
const updatedSelectedItems = this.data.productList.map((item, index) => {
return selectedItems.includes(item.id); // 更新每个商品的选中状态
});
this.setData({
selectedItems: updatedSelectedItems
});
},
// 处理全选框的选中状态变化
onCheckAllChange(event) {
const allSelected = event.detail.value; // 获取全选框的状态
const updatedSelectedItems = this.data.productList.map(() => allSelected); // 全选或全不选
this.setData({
selectedItems: updatedSelectedItems
});
},
// 计算合计
calculateTotalPrice() {
const total = this.data.productList.reduce((sum, item, index) => {
if (this.data.selectedItems[index]) {
sum += item.commoditiesPrice; // 累加选中商品的价格
}
return sum;
}, 0);
this.setData({
totalPrice: total.toFixed(2) // 保留两位小数
});
},
// 处理移除商品
yichu(e) {
const cartId = e.currentTarget.dataset.id; // 获取商品的 cartId
if (!cartId) {
console.error('没有找到商品cartId');
my.alert({ content: '商品ID未找到请稍后重试' });
return;
}
console.log('需要移除的商品cartId:', cartId);
my.getStorage({
key: 'userInfo',
success: (res) => {
const userInfo = res.data;
this.setData({
id: userInfo.id, // 获取 id
});
// 发送请求移除商品
if (userInfo && userInfo.cookie) {
my.request({
url: url + '/api/cart/delete',
method: 'POST',
data: { id: cartId }, // 使用 cartId 作为参数
headers: { 'content-type': 'application/json', 'Cookie': userInfo.cookie },
dataType: 'json',
success: (res) => {
console.log(res);
if (res.data.code === 0) {
my.alert({ content: '成功移除商品' });
console.log(res);
// 更新购物车
this.updateCartList();
} else {
my.alert({ content: '移除商品失败,请稍后重试' });
console.log(res);
}
},
fail: (error) => {
console.error('请求失败: ', JSON.stringify(error));
my.alert({ content: '请求失败,请稍后重试' });
},
});
}
},
});
},
// 移除后更新
updateCartList() {
my.getStorage({
key: 'userInfo',
success: (res) => {
const userInfo = res.data;
if (userInfo && userInfo.cookie) {
my.request({
url: url + '/api/cart/selectByUserId', // 获取最新的购物车数据
method: 'POST',
data: { id: this.data.id }, // 使用当前用户ID
headers: { 'content-type': 'application/json', 'Cookie': userInfo.cookie },
dataType: 'json',
success: (res) => {
if (res.data.code === 0) {
const cartItems = res.data.data;
this.fetchProductDetails(cartItems, userInfo.id);
} else {
my.alert({ content: '获取购物车数据失败,请稍后重试' });
}
},
fail: (error) => {
console.error('请求失败: ', JSON.stringify(error));
my.alert({ content: '请求失败,请稍后重试' });
},
});
}
},
});
},
});