You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

276 lines
6.4 KiB

// pages/create-supply/index.js
// 引入API工具
const API = require('../../utils/api.js');
Page({
/**
* 页面的初始数据
*/
data: {
variety: '', // 品种
price: '',
quantity: '',
grossWeight: '',
yolk: '', // 蛋黄
specification: '',
images: [] // 图片数组
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
// 页面加载时的初始化
},
/**
* 返回上一页
*/
onBackTap: function () {
wx.navigateBack({
delta: 1
});
},
/**
* 品种输入处理
*/
onVarietyInput(e) {
this.setData({
variety: e.detail.value
});
},
/**
* 蛋黄输入处理
*/
onYolkInput(e) {
this.setData({
yolk: e.detail.value
});
},
/**
* 价格输入处理
*/
onPriceInput(e) {
this.setData({
price: e.detail.value
});
},
/**
* 数量输入处理
*/
onQuantityInput(e) {
const value = parseFloat(e.detail.value);
this.setData({
quantity: isNaN(value) ? '' : value
});
},
/**
* 毛重输入处理
*/
onGrossWeightInput(e) {
this.setData({
grossWeight: e.detail.value
});
},
/**
* 规格输入处理
*/
onSpecificationInput(e) {
this.setData({
specification: e.detail.value
});
},
/**
* 表单验证
*/
validateForm() {
const { variety, price, quantity } = this.data;
if (!variety || !variety.trim()) {
wx.showToast({ title: '请输入品种', icon: 'none' });
return false;
}
if (!price || price.trim() === '') {
wx.showToast({ title: '请输入有效价格', icon: 'none' });
return false;
}
if (quantity === '' || quantity === undefined || quantity === null || quantity <= 0) {
wx.showToast({ title: '请输入有效数量', icon: 'none' });
return false;
}
return true;
},
/**
* 创建货源按钮点击事件
*/
onCreateTap() {
if (!this.validateForm()) {
return;
}
const { variety, price, quantity, grossWeight, yolk, specification, images } = this.data;
// 构建商品数据
const productData = {
productName: variety.trim(),
price: price.toString(),
quantity: quantity.toString(),
grossWeight: grossWeight || '',
yolk: yolk || '',
specification: specification || '',
images: images,
imageUrls: images
};
console.log('创建货源数据:', productData);
// 显示加载提示
wx.showLoading({ title: '正在创建货源...' });
// 使用API发布商品
API.publishProduct(productData)
.then(res => {
wx.hideLoading();
console.log('创建货源成功:', res);
// 保存到本地存储
this.saveToLocalStorage(productData, res);
// 显示成功弹窗
wx.showModal({
title: '创建成功',
content: '新货源已成功创建!',
showCancel: false,
confirmText: '确定',
success: function() {
// 返回到上一页
wx.navigateBack();
}
});
})
.catch(err => {
wx.hideLoading();
console.error('创建货源失败:', err);
wx.showToast({
title: err.message || '创建失败,请重试',
icon: 'none'
});
});
},
/**
* 保存到本地存储
*/
saveToLocalStorage(formData, apiResponse) {
// 从本地存储获取userId
const userId = wx.getStorageSync('userId') || 'anonymous';
// 获取卖家信息
const users = wx.getStorageSync('users') || {};
const sellerName = users[userId] && users[userId].info && users[userId].info.nickName
? users[userId].info.nickName
: '未知卖家';
// 获取当前已有的货源列表
const supplies = wx.getStorageSync('supplies') || [];
const newId = supplies.length > 0 ? Math.max(...supplies.map(s => s.id)) + 1 : 1;
const serverProductId = apiResponse.product && apiResponse.product.productId
? apiResponse.product.productId
: '';
// 创建新的货源记录
const newSupply = {
id: newId,
productId: serverProductId,
serverProductId: serverProductId,
name: formData.productName,
productName: formData.productName,
price: formData.price,
minOrder: formData.quantity,
yolk: formData.yolk,
spec: formData.specification,
grossWeight: formData.grossWeight || '',
seller: sellerName,
status: apiResponse.product && apiResponse.product.status
? apiResponse.product.status
: 'pending_review',
imageUrls: formData.imageUrls || [],
reservedCount: 0,
isReserved: false
};
// 保存到supplies本地存储
supplies.push(newSupply);
wx.setStorageSync('supplies', supplies);
// 同时保存到goods本地存储,供买家查看
const goods = wx.getStorageSync('goods') || [];
const newGoodForBuyer = {
id: String(newId),
productId: String(serverProductId),
name: formData.productName,
productName: formData.productName,
price: formData.price,
minOrder: formData.quantity,
yolk: formData.yolk,
spec: formData.specification,
grossWeight: formData.grossWeight || '',
displayGrossWeight: formData.grossWeight || '',
seller: sellerName,
status: apiResponse.product && apiResponse.product.status
? apiResponse.product.status
: 'pending_review',
imageUrls: formData.imageUrls || [],
reservedCount: 0,
isReserved: false
};
goods.push(newGoodForBuyer);
wx.setStorageSync('goods', goods);
},
/**
* 选择图片
*/
chooseImage() {
const that = this;
wx.chooseMedia({
count: 5 - that.data.images.length,
mediaType: ['image'],
sourceType: ['album', 'camera'],
success: function (res) {
console.log('选择图片成功:', res);
const tempFiles = res.tempFiles.map(file => file.tempFilePath);
that.setData({
images: [...that.data.images, ...tempFiles]
});
},
fail: function (err) {
console.error('选择图片失败:', err);
}
});
},
/**
* 删除图片
*/
deleteImage(e) {
const index = e.currentTarget.dataset.index;
const images = this.data.images;
images.splice(index, 1);
this.setData({
images: images
});
}
})