Browse Source

添加规格状态字段spec_status的处理

Boss3
Default User 1 month ago
parent
commit
0201cbee1a
  1. 23
      Reject.js
  2. 41
      supply.html

23
Reject.js

@ -851,7 +851,7 @@ app.post('/api/supplies/create', async (req, res) => {
let connection; let connection;
try { try {
connection = await pool.getConnection(); 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(); await connection.beginTransaction();
@ -979,21 +979,21 @@ app.post('/api/supplies/create', async (req, res) => {
if (columns.length === 0) { if (columns.length === 0) {
// 没有quality字段,不包含quality字段的插入 // 没有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 = [ insertParams = [
productId, productData.sellerId, productName, category || '', req.body.freshness || '', costprice || '', quantity, grossWeight, productId, productData.sellerId, productName, category || '', req.body.freshness || '', costprice || '', quantity, grossWeight,
yolk, specification, producting, region, productData.status, productData.supplyStatus, productData.sourceType, yolk, specification, producting, region, productData.status, productData.supplyStatus, productData.sourceType,
productData.description, productData.rejectReason, productData.imageUrls, new Date(), new Date(), 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 { } else {
// 有quality字段,包含quality字段的插入 // 有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 = [ insertParams = [
productId, productData.sellerId, productName, category || '', req.body.freshness || '', costprice || '', quantity, grossWeight, productId, productData.sellerId, productName, category || '', req.body.freshness || '', costprice || '', quantity, grossWeight,
yolk, specification, producting, quality, region, productData.status, productData.supplyStatus, yolk, specification, producting, quality, region, productData.status, productData.supplyStatus, productData.sourceType,
productData.sourceType, productData.description, productData.rejectReason, productData.imageUrls, productData.description, productData.rejectReason, productData.imageUrls,
new Date(), new Date(), productContact, contactPhone, req.body.autoOfflineTime, req.body.autoOfflineDays, req.body.autoOfflineHours // 添加联系人信息和自动下架时间、小时数 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, contact_phone: contactPhone,
autoOfflineTime: req.body.autoOfflineTime, autoOfflineTime: req.body.autoOfflineTime,
autoOfflineDays: req.body.autoOfflineDays, autoOfflineDays: req.body.autoOfflineDays,
autoOfflineHours: req.body.autoOfflineHours autoOfflineHours: req.body.autoOfflineHours,
spec_status: spec_status || ''
}, '货源创建成功'); }, '货源创建成功');
} catch (error) { } catch (error) {
if (connection) { if (connection) {
@ -1426,7 +1427,7 @@ app.put('/api/supplies/:id/edit', async (req, res) => {
try { try {
const connection = await pool.getConnection(); const connection = await pool.getConnection();
const productId = req.params.id; 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(); await connection.beginTransaction();
@ -1579,7 +1580,7 @@ app.put('/api/supplies/:id/edit', async (req, res) => {
UPDATE products UPDATE products
SET productName = ?, costprice = ?, quantity = ?, grossWeight = ?, SET productName = ?, costprice = ?, quantity = ?, grossWeight = ?,
yolk = ?, specification = ?, producting = ?, supplyStatus = ?, description = ?, region = ?, yolk = ?, specification = ?, producting = ?, supplyStatus = ?, description = ?, region = ?,
category = ?, sourceType = ?, freshness = ?, category = ?, sourceType = ?, freshness = ?, spec_status = ?,
product_contact = ?, contact_phone = ?, imageUrls = ?, product_contact = ?, contact_phone = ?, imageUrls = ?,
autoOfflineTime = ?, autoOfflineHours = ?, updated_at = ? autoOfflineTime = ?, autoOfflineHours = ?, updated_at = ?
WHERE id = ? WHERE id = ?
@ -1588,7 +1589,7 @@ app.put('/api/supplies/:id/edit', async (req, res) => {
const [result] = await connection.query(updateQuery, [ const [result] = await connection.query(updateQuery, [
productName, costprice || '', quantityValue, grossWeight, productName, costprice || '', quantityValue, grossWeight,
yolk, specification, producting, supplyStatus, description, region, yolk, specification, producting, supplyStatus, description, region,
category, sourceType, freshness, category, sourceType, freshness, spec_status || '',
productContact, contactPhone, imageUrlsToUpdate, productContact, contactPhone, imageUrlsToUpdate,
autoOfflineTime || null, // 自动下架时间 autoOfflineTime || null, // 自动下架时间
autoOfflineHours || 24, // 默认24小时 autoOfflineHours || 24, // 默认24小时

41
supply.html

@ -3102,6 +3102,7 @@
<input type="text" class="spec-value" placeholder="请选择规格" readonly onclick="showSpecSelectModalForPair(this, 'pair')"> <input type="text" class="spec-value" placeholder="请选择规格" readonly onclick="showSpecSelectModalForPair(this, 'pair')">
<input type="text" class="form-input quantity-input" placeholder="请输入件数" onwheel="this.blur()"> <input type="text" class="form-input quantity-input" placeholder="请输入件数" onwheel="this.blur()">
<input type="text" class="form-input costprice-input" placeholder="请输入采购价" onwheel="this.blur()"> <input type="text" class="form-input costprice-input" placeholder="请输入采购价" onwheel="this.blur()">
<input type="text" class="form-input spec-status-input" placeholder="规格状态" value="0" onwheel="this.blur()" style="width: 120px;">
<button type="button" class="remove-quantity-btn" onclick="removeSpecQuantityPair(this)">×</button> <button type="button" class="remove-quantity-btn" onclick="removeSpecQuantityPair(this)">×</button>
`; `;
container.appendChild(pair); container.appendChild(pair);
@ -3121,9 +3122,11 @@
const specInput = pair.querySelector('.spec-value'); const specInput = pair.querySelector('.spec-value');
const quantityInput = pair.querySelector('.quantity-input'); const quantityInput = pair.querySelector('.quantity-input');
const costpriceInput = pair.querySelector('.costprice-input'); const costpriceInput = pair.querySelector('.costprice-input');
const specStatusInput = pair.querySelector('.spec-status-input');
if (specInput) specInput.value = ''; if (specInput) specInput.value = '';
if (quantityInput) quantityInput.value = ''; if (quantityInput) quantityInput.value = '';
if (costpriceInput) costpriceInput.value = ''; if (costpriceInput) costpriceInput.value = '';
if (specStatusInput) specStatusInput.value = '0';
} }
} }
@ -6255,16 +6258,19 @@
const specifications = []; const specifications = [];
const quantities = []; const quantities = [];
const costprices = []; const costprices = [];
const specStatuses = [];
pairs.forEach(pair => { pairs.forEach(pair => {
const specValue = pair.querySelector('.spec-value').value.trim(); const specValue = pair.querySelector('.spec-value').value.trim();
const quantityValue = pair.querySelector('.quantity-input').value.trim(); const quantityValue = pair.querySelector('.quantity-input').value.trim();
const costpriceValue = pair.querySelector('.costprice-input').value.trim(); const costpriceValue = pair.querySelector('.costprice-input').value.trim();
const specStatusValue = pair.querySelector('.spec-status-input').value.trim() || '0';
// 无论规格是否为空,都将所有对添加到数组中,以便后续验证 // 无论规格是否为空,都将所有对添加到数组中,以便后续验证
specifications.push(specValue); specifications.push(specValue);
quantities.push(quantityValue); quantities.push(quantityValue);
costprices.push(costpriceValue); costprices.push(costpriceValue);
specStatuses.push(specStatusValue);
}); });
@ -6291,6 +6297,7 @@
costprice: costprices.join(','), // 将采购价以英文逗号分隔的字符串形式提交 costprice: costprices.join(','), // 将采购价以英文逗号分隔的字符串形式提交
quantity: quantities.join(','), // 将件数以英文逗号分隔的字符串形式提交 quantity: quantities.join(','), // 将件数以英文逗号分隔的字符串形式提交
spec_status: specStatuses.join(','), // 将规格状态以英文逗号分隔的字符串形式提交
grossWeight: document.getElementById('grossWeight').value, grossWeight: document.getElementById('grossWeight').value,
yolk: document.getElementById('yolk').value, yolk: document.getElementById('yolk').value,
specification: specifications.join(','), // 将规格以中文逗号分隔的字符串形式提交 specification: specifications.join(','), // 将规格以中文逗号分隔的字符串形式提交
@ -7045,10 +7052,11 @@
document.getElementById('editAutoOfflineMinutes').value = Math.round(autoOfflineMinutes); document.getElementById('editAutoOfflineMinutes').value = Math.round(autoOfflineMinutes);
// 规格、件数和采购价 - 支持中文逗号分隔和英文逗号分隔字符串 // 规格、件数、采购价和规格状态 - 支持中文逗号分隔和英文逗号分隔字符串
let specifications = []; let specifications = [];
let quantities = []; let quantities = [];
let costprices = []; let costprices = [];
let specStatuses = [];
// 解析规格(支持中英文逗号分隔字符串) // 解析规格(支持中英文逗号分隔字符串)
try { try {
@ -7100,8 +7108,23 @@
costprices = [supply.costprice || '0']; 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; if (window.originalSpecCount === 0) window.originalSpecCount = 1;
// 动态生成规格-件数对输入框 // 动态生成规格-件数对输入框
@ -7114,17 +7137,20 @@
addEditSpecQuantityPair(); addEditSpecQuantityPair();
} else { } 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 spec = specifications[i] || '';
const qty = quantities[i] || ''; const qty = quantities[i] || '';
const costprice = costprices[i] || '';
const specStatus = specStatuses[i] || '0';
const pair = document.createElement('div'); const pair = document.createElement('div');
pair.className = 'spec-quantity-pair'; pair.className = 'spec-quantity-pair';
pair.innerHTML = ` pair.innerHTML = `
<input type="text" class="spec-value" placeholder="请选择规格" readonly onclick="showEditSpecSelectModalForPair(this, 'pair')" value="${spec}"> <input type="text" class="spec-value" placeholder="请选择规格" readonly onclick="showEditSpecSelectModalForPair(this, 'pair')" value="${spec}">
<input type="text" class="form-input quantity-input" placeholder="请输入件数" onwheel="this.blur()" value="${qty}"> <input type="text" class="form-input quantity-input" placeholder="请输入件数" onwheel="this.blur()" value="${qty}">
<input type="text" class="form-input costprice-input" placeholder="请输入采购价" onwheel="this.blur()" value="${costprices[i] || ''}"> <input type="text" class="form-input costprice-input" placeholder="请输入采购价" onwheel="this.blur()" value="${costprice}">
<input type="text" class="form-input spec-status-input" placeholder="规格状态" value="${specStatus}" onwheel="this.blur()" style="width: 120px;">
<button type="button" class="remove-quantity-btn" onclick="removeEditSpecQuantityPair(this)">×</button> <button type="button" class="remove-quantity-btn" onclick="removeEditSpecQuantityPair(this)">×</button>
`; `;
specQuantityPairs.appendChild(pair); specQuantityPairs.appendChild(pair);
@ -7471,6 +7497,7 @@
<input type="text" class="spec-value" placeholder="请选择规格" readonly onclick="showEditSpecSelectModalForPair(this, 'pair')"> <input type="text" class="spec-value" placeholder="请选择规格" readonly onclick="showEditSpecSelectModalForPair(this, 'pair')">
<input type="text" class="form-input quantity-input" placeholder="请输入件数" onwheel="this.blur()"> <input type="text" class="form-input quantity-input" placeholder="请输入件数" onwheel="this.blur()">
<input type="text" class="form-input costprice-input" placeholder="请输入采购价" onwheel="this.blur()"> <input type="text" class="form-input costprice-input" placeholder="请输入采购价" onwheel="this.blur()">
<input type="text" class="form-input spec-status-input" placeholder="规格状态" value="0" onwheel="this.blur()" style="width: 120px;">
<button type="button" class="remove-quantity-btn" onclick="removeEditSpecQuantityPair(this)">×</button> <button type="button" class="remove-quantity-btn" onclick="removeEditSpecQuantityPair(this)">×</button>
`; `;
container.appendChild(pair); container.appendChild(pair);
@ -7501,9 +7528,11 @@
const specInput = pair.querySelector('.spec-value'); const specInput = pair.querySelector('.spec-value');
const quantityInput = pair.querySelector('.quantity-input'); const quantityInput = pair.querySelector('.quantity-input');
const costpriceInput = pair.querySelector('.costprice-input'); const costpriceInput = pair.querySelector('.costprice-input');
const specStatusInput = pair.querySelector('.spec-status-input');
if (specInput) specInput.value = ''; if (specInput) specInput.value = '';
if (quantityInput) quantityInput.value = ''; if (quantityInput) quantityInput.value = '';
if (costpriceInput) costpriceInput.value = ''; if (costpriceInput) costpriceInput.value = '';
if (specStatusInput) specStatusInput.value = '0';
} }
} }
@ -8260,17 +8289,20 @@
const specifications = []; const specifications = [];
const quantities = []; const quantities = [];
const costprices = []; const costprices = [];
const specStatuses = [];
pairs.forEach(pair => { pairs.forEach(pair => {
const specValue = pair.querySelector('.spec-value').value.trim(); const specValue = pair.querySelector('.spec-value').value.trim();
const quantityValue = pair.querySelector('.quantity-input').value.trim(); const quantityValue = pair.querySelector('.quantity-input').value.trim();
const costpriceValue = pair.querySelector('.costprice-input').value.trim(); const costpriceValue = pair.querySelector('.costprice-input').value.trim();
const specStatusValue = pair.querySelector('.spec-status-input').value.trim() || '0';
// 保存所有添加的规格和件数对,即使其中一个为空 // 保存所有添加的规格和件数对,即使其中一个为空
// 这样可以保持记忆功能,下次编辑时还能看到之前添加的对 // 这样可以保持记忆功能,下次编辑时还能看到之前添加的对
specifications.push(specValue); specifications.push(specValue);
quantities.push(quantityValue); quantities.push(quantityValue);
costprices.push(costpriceValue); costprices.push(costpriceValue);
specStatuses.push(specStatusValue);
}); });
@ -8301,6 +8333,7 @@
costprice: costprices.join(','), // 将采购价以英文逗号分隔的字符串形式提交 costprice: costprices.join(','), // 将采购价以英文逗号分隔的字符串形式提交
quantity: quantities.join(','), // 将件数以英文逗号分隔的字符串形式提交 quantity: quantities.join(','), // 将件数以英文逗号分隔的字符串形式提交
spec_status: specStatuses.join(','), // 将规格状态以英文逗号分隔的字符串形式提交
grossWeight: document.getElementById('editGrossWeight').value, grossWeight: document.getElementById('editGrossWeight').value,
yolk: document.getElementById('editYolk').value, yolk: document.getElementById('editYolk').value,
specification: specifications.join(','), // 将规格以中文逗号分隔的字符串形式提交 specification: specifications.join(','), // 将规格以中文逗号分隔的字符串形式提交

Loading…
Cancel
Save