Browse Source

修复上架功能:编辑后自动调用上架API,确保状态为published

Boss2
Default User 2 months ago
parent
commit
7b47c7b9da
  1. 16
      Reject.js
  2. 94
      supply.html

16
Reject.js

@ -830,9 +830,9 @@ app.post('/api/supplies/create', async (req, res) => {
await connection.beginTransaction();
// 验证必填字段
if (!productName || !price || !quantity || !supplyStatus || !sourceType) {
if (!productName || !costprice || !quantity || !supplyStatus || !sourceType) {
connection.release();
return sendResponse(res, false, null, '商品名称、价、最小起订量、货源状态和货源类型不能为空');
return sendResponse(res, false, null, '商品名称、采购价、最小起订量、货源状态和货源类型不能为空');
}
// 如果sellerId为空,设置一个默认值
@ -919,7 +919,7 @@ app.post('/api/supplies/create', async (req, res) => {
sellerId: sellerId, // 使用前端传入的sellerId
productName,
category: category || '', // 添加种类
price: price.toString(), // 确保是varchar类型
price: (price || '').toString(), // 确保是varchar类型
costprice: costprice || '', // 添加采购价
quantity: quantity, // 保持为逗号分隔的字符串,不转换为整数
grossWeight,
@ -954,7 +954,7 @@ app.post('/api/supplies/create', async (req, res) => {
// 没有quality字段,不包含quality字段的插入
insertQuery = 'INSERT INTO products (productId, sellerId, productName, category, freshness, price, costprice, quantity, grossWeight, yolk, specification, producting, region, status, supplyStatus, sourceType, description, rejectReason, imageUrls, created_at, audit_time, product_contact, contact_phone, autoOfflineTime, autoOfflineDays, autoOfflineHours) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
insertParams = [
productId, productData.sellerId, productName, category || '', req.body.freshness || '', price.toString(), costprice || '', quantity, grossWeight,
productId, productData.sellerId, productName, category || '', req.body.freshness || '', (price || '').toString(), costprice || '', quantity, grossWeight,
yolk, specification, producting, region, productData.status, productData.supplyStatus, productData.sourceType,
productData.description, productData.rejectReason, productData.imageUrls, new Date(), new Date(),
productContact, contactPhone, req.body.autoOfflineTime, req.body.autoOfflineDays, req.body.autoOfflineHours // 添加联系人信息和自动下架时间、小时数
@ -963,7 +963,7 @@ app.post('/api/supplies/create', async (req, res) => {
// 有quality字段,包含quality字段的插入
insertQuery = 'INSERT INTO products (productId, sellerId, productName, category, freshness, price, costprice, quantity, grossWeight, yolk, specification, producting, quality, region, status, supplyStatus, sourceType, description, rejectReason, imageUrls, created_at, audit_time, product_contact, contact_phone, autoOfflineTime, autoOfflineDays, autoOfflineHours) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
insertParams = [
productId, productData.sellerId, productName, category || '', req.body.freshness || '', price.toString(), costprice || '', quantity, grossWeight,
productId, productData.sellerId, productName, category || '', req.body.freshness || '', (price || '').toString(), costprice || '', quantity, grossWeight,
yolk, specification, producting, quality, region, productData.status, productData.supplyStatus,
productData.sourceType, productData.description, productData.rejectReason, productData.imageUrls,
new Date(), new Date(), productContact, contactPhone, req.body.autoOfflineTime, req.body.autoOfflineDays, req.body.autoOfflineHours // 添加联系人信息和自动下架时间、小时数
@ -993,7 +993,7 @@ app.post('/api/supplies/create', async (req, res) => {
productId: productId,
productName,
category: category || '',
price: price.toString(),
price: (price || '').toString(),
costprice: costprice || '',
quantity,
grossWeight,
@ -1468,7 +1468,7 @@ app.put('/api/supplies/:id/edit', async (req, res) => {
`;
await connection.query(updateQuery, [
productName, price.toString(), costprice || '', quantityValue, grossWeight,
productName, (price || '').toString(), costprice || '', quantityValue, grossWeight,
yolk, specification, producting, supplyStatus, description, region,
productContact, contactPhone, JSON.stringify(uploadedImageUrls),
autoOfflineTime || null, // 自动下架时间
@ -1489,7 +1489,7 @@ app.put('/api/supplies/:id/edit', async (req, res) => {
data: {
id: productId,
productName,
price: price.toString(),
price: (price || '').toString(),
costprice: costprice || '',
quantity,
grossWeight,

94
supply.html

@ -1349,7 +1349,7 @@
</div>
<!-- 分配联系人 -->
<div class="form-group">
<div class="form-group" style="display: none;">
<label class="form-label">分配联系人</label>
<div class="form-select" id="contactIdSelect" onclick="showContactIdSelectModal()" style="cursor: pointer; position: relative; padding-right: 30px;">
<span id="contactIdDisplayText">请选择联系人</span>
@ -1365,7 +1365,7 @@
</div>
<!-- 价格 -->
<div class="form-group">
<div class="form-group" style="display: none;">
<label class="form-label">价格(销售价)</label>
<input type="text" class="form-input" id="price" placeholder="请输入价格" onwheel="this.blur()">
</div>
@ -1567,11 +1567,11 @@
<input type="text" id="regionSearchInput" placeholder="搜索地区" oninput="filterRegionOptions()" style="width: 100%; padding: 10px; border: 1px solid #d9d9d9; border-radius: 8px; font-size: 14px; box-sizing: border-box;">
<div id="currentRegion" style="margin-top: 10px; padding: 8px 12px; background-color: #f0f8ff; border: 1px solid #91d5ff; border-radius: 4px; font-size: 12px; color: #1890ff;">当前选择: 未选择</div>
</div>
<div class="select-body">
<div id="regionOptionsList" style="display: flex; gap: 10px; padding: 10px;">
<div class="select-body" style="height: 400px;">
<div id="regionOptionsList" style="display: flex; gap: 10px; padding: 10px; height: 100%;">
<!-- 省市选择将通过JavaScript动态生成 -->
<div id="provinceList" style="flex: 1; overflow-y: auto;"></div>
<div id="cityList" style="flex: 1; overflow-y: auto;"></div>
<div id="provinceList" style="flex: 1; overflow-y: auto; height: 350px;"></div>
<div id="cityList" style="flex: 1; overflow-y: auto; height: 350px;"></div>
</div>
</div>
<div class="select-footer" style="padding: 16px 20px; display: flex; justify-content: space-between; border-top: 1px solid #f0f0f0; background-color: #fafafa;">
@ -1765,7 +1765,7 @@
</div>
<!-- 分配联系人 -->
<div class="form-group">
<div class="form-group" style="display: none;">
<label class="form-label">分配联系人</label>
<div class="form-select" id="editContactIdSelect" onclick="showEditContactIdSelectModal()" style="cursor: pointer; position: relative; padding-right: 30px;">
<span id="editContactIdDisplayText">请选择联系人</span>
@ -1781,7 +1781,7 @@
</div>
<!-- 价格 -->
<div class="form-group">
<div class="form-group" style="display: none;">
<label class="form-label">价格(销售价)</label>
<input type="text" class="form-input" id="editPrice" placeholder="请输入价格" onwheel="this.blur()">
</div>
@ -4021,6 +4021,11 @@
updateRegionDisplay();
// 生成城市选项
generateCityOptions(province.cities);
// 直接滚动城市列表到顶部
const cityList = document.getElementById('cityList');
setTimeout(() => {
cityList.scrollTop = 0;
}, 100);
};
provinceList.appendChild(option);
});
@ -4055,10 +4060,13 @@
cityList.appendChild(option);
});
// 使用requestAnimationFrame确保滚动操作在浏览器下一次重绘前执行
requestAnimationFrame(() => {
cityList.scrollTop = 0;
});
// 使用scrollIntoView滚动到第一个城市
setTimeout(() => {
const firstCity = cityList.querySelector('.select-item');
if (firstCity) {
firstCity.scrollIntoView({ behavior: 'auto', block: 'start' });
}
}, 50);
}
@ -4127,10 +4135,13 @@
cityList.appendChild(option);
});
// 使用requestAnimationFrame确保滚动操作在浏览器下一次重绘前执行
requestAnimationFrame(() => {
cityList.scrollTop = 0;
});
// 使用scrollIntoView滚动到第一个城市
setTimeout(() => {
const firstCity = cityList.querySelector('.select-item');
if (firstCity) {
firstCity.scrollIntoView({ behavior: 'auto', block: 'start' });
}
}, 50);
}
} else {
// 否则按原逻辑过滤
@ -4150,10 +4161,13 @@
// 确认地区选择
function confirmRegionSelection() {
if (selectedProvince && selectedCity) {
if (selectedProvince) {
const regionDisplayText = document.getElementById('regionDisplayText');
const regionValue = document.getElementById('regionValue');
const regionText = `${selectedProvince} ${selectedCity}`;
let regionText = selectedProvince;
if (selectedCity) {
regionText = `${selectedProvince} ${selectedCity}`;
}
regionDisplayText.textContent = regionText;
regionValue.value = regionText;
saveFormData(); // 保存选择
@ -4642,7 +4656,7 @@
<div class="detail-item">货源描述: ${supply.description || '无'}</div>
<div class="detail-item">斤重: ${supply.grossWeight || ''}斤</div>
<div class="detail-item">地区: ${supply.region || '未设置'}</div>
<div class="detail-item" style="color: #f5222d;">价格: ¥${supply.price || '0'}</div>
<div class="detail-item" style="color: #f5222d;">价格: ¥${supply.costprice || '0'}</div>
<div class="detail-item" style="font-size: 12px; color: #999;">创建时间: ${formatDate(supply.created_at)}</div>
${supply.autoOfflineHours && supply.autoOfflineHours !== '' && supply.autoOfflineHours !== null ? `<div class="detail-item" style="color: #faad14;"><span class="countdown" data-id="${supply.id}">剩余下架时间: 计算中...</span></div>` : ''}
</div>
@ -5985,8 +5999,8 @@
alert('请选择种类');
return;
}
if (!formData.price) {
alert('请输入价');
if (!formData.costprice) {
alert('请输入采购价');
return;
}
// 验证规格和件数 - 确保至少有一个有效的规格-件数对
@ -6013,19 +6027,10 @@
alert('请选择地区');
return;
}
if (!formData.contactId) {
alert('请选择联系人');
return;
}
if (!supplyData.uploadedImages || supplyData.uploadedImages.length === 0) {
alert('请上传至少一张商品图片');
return;
}
// 增强联系人信息验证
if (!formData.contactId || formData.contactId.trim() === '') {
alert('联系人信息缺失,请分配联系人');
return;
}
// 检查是否为重复货源
const isDuplicate = await checkDuplicateSupply(formData);
@ -7832,8 +7837,8 @@
alert('请选择种类');
return false;
}
if (!formData.price) {
alert('请输入价');
if (!formData.costprice) {
alert('请输入采购价');
return false;
}
// 验证规格和件数 - 确保至少有一个有效的规格-件数对
@ -7860,15 +7865,6 @@
alert('请选择地区');
return false;
}
if (!formData.contactId) {
alert('请选择联系人');
return false;
}
// 增强联系人信息验证
if (!formData.contactId || formData.contactId.trim() === '') {
alert('联系人信息缺失,请分配联系人');
return false;
}
const response = await fetch(`/api/supplies/${currentEditSupplyId}/edit`, {
method: 'PUT',
@ -7888,13 +7884,25 @@
data: result.data
});
// 如果是直接编辑,显示成功消息;如果是编辑后上架,不显示,由上架函数处理
// 如果是直接编辑,显示成功消息;如果是编辑后上架,调用上架API
if (!window.currentEditPublishMode) {
alert('编辑成功');
hideEditSupplyModal();
loadSupplies();
} else {
// 调用上架API
const publishResponse = await fetch(`/api/supplies/${currentEditSupplyId}/publish`, {
method: 'POST'
});
const publishResult = await publishResponse.json();
if (publishResult.success) {
alert('上架成功');
hideEditSupplyModal();
loadSupplies();
} else {
alert('上架失败: ' + (publishResult.message || '未知错误'));
}
}
return true;
} else {
alert('编辑失败: ' + (result.message || '未知错误'));
return false;

Loading…
Cancel
Save