diff --git a/Reject.js b/Reject.js
index 0a8dd35..e879083 100644
--- a/Reject.js
+++ b/Reject.js
@@ -851,7 +851,7 @@ app.post('/api/supplies/create', async (req, res) => {
let connection;
try {
connection = await pool.getConnection();
- const { productName, costprice, quantity, grossWeight, yolk, specification, quality, region, imageUrls, sellerId, supplyStatus, description, sourceType, contactId, category, producting } = req.body;
+ const { productName, costprice, quantity, grossWeight, yolk, specification, quality, region, imageUrls, sellerId, supplyStatus, description, sourceType, contactId, category, producting, spec_status } = req.body;
// 开始事务
await connection.beginTransaction();
@@ -979,21 +979,21 @@ app.post('/api/supplies/create', async (req, res) => {
if (columns.length === 0) {
// 没有quality字段,不包含quality字段的插入
- insertQuery = 'INSERT INTO products (productId, sellerId, productName, category, freshness, 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 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
+ insertQuery = 'INSERT INTO products (productId, sellerId, productName, category, freshness, costprice, quantity, grossWeight, yolk, specification, producting, region, status, supplyStatus, sourceType, description, rejectReason, imageUrls, created_at, audit_time, product_contact, contact_phone, autoOfflineTime, autoOfflineDays, autoOfflineHours, spec_status) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
insertParams = [
productId, productData.sellerId, productName, category || '', req.body.freshness || '', 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 // 添加联系人信息和自动下架时间、小时数
+ productContact, contactPhone, req.body.autoOfflineTime, req.body.autoOfflineDays, req.body.autoOfflineHours, spec_status || '' // 添加联系人信息和自动下架时间、小时数、规格状态
];
} else {
// 有quality字段,包含quality字段的插入
- insertQuery = 'INSERT INTO products (productId, sellerId, productName, category, freshness, 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 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
+ insertQuery = 'INSERT INTO products (productId, sellerId, productName, category, freshness, 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, spec_status) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
insertParams = [
productId, productData.sellerId, productName, category || '', req.body.freshness || '', 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 // 添加联系人信息和自动下架时间、小时数
+ 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, spec_status || '' // 添加联系人信息和自动下架时间、小时数、规格状态
];
}
@@ -1063,7 +1063,8 @@ app.post('/api/supplies/create', async (req, res) => {
contact_phone: contactPhone,
autoOfflineTime: req.body.autoOfflineTime,
autoOfflineDays: req.body.autoOfflineDays,
- autoOfflineHours: req.body.autoOfflineHours
+ autoOfflineHours: req.body.autoOfflineHours,
+ spec_status: spec_status || ''
}, '货源创建成功');
} catch (error) {
if (connection) {
@@ -1426,7 +1427,7 @@ app.put('/api/supplies/:id/edit', async (req, res) => {
try {
const connection = await pool.getConnection();
const productId = req.params.id;
- const { productName, costprice, quantity, grossWeight, yolk, specification, supplyStatus, description, region, contactId, producting, imageUrls, autoOfflineTime, category, sourceType, freshness, autoOfflineHours } = req.body;
+ const { productName, costprice, quantity, grossWeight, yolk, specification, supplyStatus, description, region, contactId, producting, imageUrls, autoOfflineTime, category, sourceType, freshness, autoOfflineHours, spec_status } = req.body;
// 开始事务
await connection.beginTransaction();
@@ -1579,7 +1580,7 @@ app.put('/api/supplies/:id/edit', async (req, res) => {
UPDATE products
SET productName = ?, costprice = ?, quantity = ?, grossWeight = ?,
yolk = ?, specification = ?, producting = ?, supplyStatus = ?, description = ?, region = ?,
- category = ?, sourceType = ?, freshness = ?,
+ category = ?, sourceType = ?, freshness = ?, spec_status = ?,
product_contact = ?, contact_phone = ?, imageUrls = ?,
autoOfflineTime = ?, autoOfflineHours = ?, updated_at = ?
WHERE id = ?
@@ -1588,7 +1589,7 @@ app.put('/api/supplies/:id/edit', async (req, res) => {
const [result] = await connection.query(updateQuery, [
productName, costprice || '', quantityValue, grossWeight,
yolk, specification, producting, supplyStatus, description, region,
- category, sourceType, freshness,
+ category, sourceType, freshness, spec_status || '',
productContact, contactPhone, imageUrlsToUpdate,
autoOfflineTime || null, // 自动下架时间
autoOfflineHours || 24, // 默认24小时
diff --git a/supply.html b/supply.html
index 303c647..94f78b0 100644
--- a/supply.html
+++ b/supply.html
@@ -3102,6 +3102,7 @@
+
`;
container.appendChild(pair);
@@ -3121,9 +3122,11 @@
const specInput = pair.querySelector('.spec-value');
const quantityInput = pair.querySelector('.quantity-input');
const costpriceInput = pair.querySelector('.costprice-input');
+ const specStatusInput = pair.querySelector('.spec-status-input');
if (specInput) specInput.value = '';
if (quantityInput) quantityInput.value = '';
if (costpriceInput) costpriceInput.value = '';
+ if (specStatusInput) specStatusInput.value = '0';
}
}
@@ -6255,16 +6258,19 @@
const specifications = [];
const quantities = [];
const costprices = [];
+ const specStatuses = [];
pairs.forEach(pair => {
const specValue = pair.querySelector('.spec-value').value.trim();
const quantityValue = pair.querySelector('.quantity-input').value.trim();
const costpriceValue = pair.querySelector('.costprice-input').value.trim();
+ const specStatusValue = pair.querySelector('.spec-status-input').value.trim() || '0';
// 无论规格是否为空,都将所有对添加到数组中,以便后续验证
specifications.push(specValue);
quantities.push(quantityValue);
costprices.push(costpriceValue);
+ specStatuses.push(specStatusValue);
});
@@ -6291,6 +6297,7 @@
costprice: costprices.join(','), // 将采购价以英文逗号分隔的字符串形式提交
quantity: quantities.join(','), // 将件数以英文逗号分隔的字符串形式提交
+ spec_status: specStatuses.join(','), // 将规格状态以英文逗号分隔的字符串形式提交
grossWeight: document.getElementById('grossWeight').value,
yolk: document.getElementById('yolk').value,
specification: specifications.join(','), // 将规格以中文逗号分隔的字符串形式提交
@@ -7045,10 +7052,11 @@
document.getElementById('editAutoOfflineMinutes').value = Math.round(autoOfflineMinutes);
- // 规格、件数和采购价 - 支持中文逗号分隔和英文逗号分隔字符串
+ // 规格、件数、采购价和规格状态 - 支持中文逗号分隔和英文逗号分隔字符串
let specifications = [];
let quantities = [];
let costprices = [];
+ let specStatuses = [];
// 解析规格(支持中英文逗号分隔字符串)
try {
@@ -7100,8 +7108,23 @@
costprices = [supply.costprice || '0'];
}
+ // 解析规格状态(英文逗号分隔字符串)
+ try {
+ if (supply.spec_status) {
+ if (typeof supply.spec_status === 'string') {
+ specStatuses = supply.spec_status.split(',').filter(status => status.trim());
+ } else if (Array.isArray(supply.spec_status)) {
+ specStatuses = supply.spec_status;
+ } else {
+ specStatuses = [supply.spec_status];
+ }
+ }
+ } catch (e) {
+ specStatuses = [];
+ }
+
// 保存原有规格数量,用于后续判断是否允许删除
- window.originalSpecCount = Math.max(specifications.length, quantities.length, costprices.length);
+ window.originalSpecCount = Math.max(specifications.length, quantities.length, costprices.length, specStatuses.length);
if (window.originalSpecCount === 0) window.originalSpecCount = 1;
// 动态生成规格-件数对输入框
@@ -7114,17 +7137,20 @@
addEditSpecQuantityPair();
} else {
// 根据规格数量生成相应的规格-件数对
- for (let i = 0; i < Math.max(specifications.length, quantities.length, costprices.length); i++) {
+ for (let i = 0; i < Math.max(specifications.length, quantities.length, costprices.length, specStatuses.length); i++) {
// 确保即使数量不匹配,也能正确显示对应的数据
const spec = specifications[i] || '';
const qty = quantities[i] || '';
+ const costprice = costprices[i] || '';
+ const specStatus = specStatuses[i] || '0';
const pair = document.createElement('div');
pair.className = 'spec-quantity-pair';
pair.innerHTML = `
-
+
+
`;
specQuantityPairs.appendChild(pair);
@@ -7471,6 +7497,7 @@
+
`;
container.appendChild(pair);
@@ -7501,9 +7528,11 @@
const specInput = pair.querySelector('.spec-value');
const quantityInput = pair.querySelector('.quantity-input');
const costpriceInput = pair.querySelector('.costprice-input');
+ const specStatusInput = pair.querySelector('.spec-status-input');
if (specInput) specInput.value = '';
if (quantityInput) quantityInput.value = '';
if (costpriceInput) costpriceInput.value = '';
+ if (specStatusInput) specStatusInput.value = '0';
}
}
@@ -8260,17 +8289,20 @@
const specifications = [];
const quantities = [];
const costprices = [];
+ const specStatuses = [];
pairs.forEach(pair => {
const specValue = pair.querySelector('.spec-value').value.trim();
const quantityValue = pair.querySelector('.quantity-input').value.trim();
const costpriceValue = pair.querySelector('.costprice-input').value.trim();
+ const specStatusValue = pair.querySelector('.spec-status-input').value.trim() || '0';
// 保存所有添加的规格和件数对,即使其中一个为空
// 这样可以保持记忆功能,下次编辑时还能看到之前添加的对
specifications.push(specValue);
quantities.push(quantityValue);
costprices.push(costpriceValue);
+ specStatuses.push(specStatusValue);
});
@@ -8301,6 +8333,7 @@
costprice: costprices.join(','), // 将采购价以英文逗号分隔的字符串形式提交
quantity: quantities.join(','), // 将件数以英文逗号分隔的字符串形式提交
+ spec_status: specStatuses.join(','), // 将规格状态以英文逗号分隔的字符串形式提交
grossWeight: document.getElementById('editGrossWeight').value,
yolk: document.getElementById('editYolk').value,
specification: specifications.join(','), // 将规格以中文逗号分隔的字符串形式提交