From 0201cbee1a5cc1a0ed135bd1dbce91b2f3f13d4b Mon Sep 17 00:00:00 2001 From: Default User Date: Thu, 22 Jan 2026 17:30:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=A7=84=E6=A0=BC=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E5=AD=97=E6=AE=B5spec=5Fstatus=E7=9A=84=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Reject.js | 23 ++++++++++++----------- supply.html | 41 +++++++++++++++++++++++++++++++++++++---- 2 files changed, 49 insertions(+), 15 deletions(-) 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(','), // 将规格以中文逗号分隔的字符串形式提交