jiaqingjiayi-xiaochengxu/甲情_甲意/miniprogram/pages/test1/test1.js

217 lines
6.5 KiB
JavaScript
Raw Normal View History

2024-12-10 10:35:22 +00:00
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: '请求失败,请稍后重试' });
},
});
}
},
});
},
});