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;
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小时

41
supply.html

@ -3102,6 +3102,7 @@
<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 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>
`;
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 = `
<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 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>
`;
specQuantityPairs.appendChild(pair);
@ -7471,6 +7497,7 @@
<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 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>
`;
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(','), // 将规格以中文逗号分隔的字符串形式提交

Loading…
Cancel
Save