更新金属机箱3.5寸小SKU:按最新标准重新生成,数据盘组合到各SKU;配件清单新增HDD-1T/3T/4T/6T

This commit is contained in:
12600k-rog-d4
2026-05-08 01:54:33 +08:00
parent 20fef11239
commit ab39e413fb
213 changed files with 1553 additions and 9691 deletions

View File

@@ -0,0 +1,158 @@
// 价格同步工具 - 将SKU文件中的价格信息同步到产品价格汇总表
const fs = require('fs');
const path = require('path');
// 产品目录路径
const PRODUCTS_DIR = path.join(__dirname, '../../../../产品');
const PRICE_SUMMARY_FILE = path.join(PRODUCTS_DIR, '产品价格汇总表.md');
// 读取价格汇总表内容
function readPriceSummary() {
return fs.readFileSync(PRICE_SUMMARY_FILE, 'utf8');
}
// 写入价格汇总表内容
function writePriceSummary(content) {
fs.writeFileSync(PRICE_SUMMARY_FILE, content, 'utf8');
}
// 递归读取所有SKU文件
function findSkuFiles(dir) {
const skuFiles = [];
function traverse(currentDir) {
const files = fs.readdirSync(currentDir);
for (const file of files) {
const fullPath = path.join(currentDir, file);
const stat = fs.statSync(fullPath);
if (stat.isDirectory()) {
traverse(fullPath);
} else if (file.endsWith('.md') && (file.includes('-') || file.includes('openclaw'))) {
skuFiles.push(fullPath);
}
}
}
traverse(dir);
return skuFiles;
}
// 解析SKU文件内容
function parseSkuFile(filePath) {
try {
const content = fs.readFileSync(filePath, 'utf8');
const skuData = {
model: '',
cost: 0,
price: 0
};
// 解析产品型号
const modelMatch = content.match(/\*\*产品型号\*\*\s*\|\s*([^|]+)\s*\|/);
if (modelMatch) {
skuData.model = modelMatch[1].trim();
} else {
console.log(`未找到产品型号: ${filePath}`);
}
// 解析总成本
const costMatch = content.match(/\*\*总成本\*\*\s*\|\s*-\s*\|\s*¥(\d+)\s*\|/);
if (costMatch) {
skuData.cost = parseInt(costMatch[1]);
} else {
console.log(`未找到总成本: ${filePath}`);
}
// 解析建议零售价
const priceMatch = content.match(/\*\*建议零售价\*\*\s*\|\s*-\s*\|\s*¥(\d+)\s*\|/);
if (priceMatch) {
skuData.price = parseInt(priceMatch[1]);
} else {
console.log(`未找到建议零售价: ${filePath}`);
}
if (skuData.model && skuData.cost && skuData.price) {
console.log(`解析成功: ${skuData.model} - 成本: ¥${skuData.cost}, 售价: ¥${skuData.price}`);
}
return skuData;
} catch (error) {
console.log(`解析文件失败: ${filePath}, 错误: ${error.message}`);
return { model: '', cost: 0, price: 0 };
}
}
// 同步价格信息到汇总表
function syncPrices() {
console.log('开始同步SKU价格到汇总表...');
// 读取所有SKU文件
const skuFiles = findSkuFiles(PRODUCTS_DIR);
console.log(`找到 ${skuFiles.length} 个SKU文件`);
// 解析所有SKU文件
const skuDataMap = new Map();
let parsedCount = 0;
for (const file of skuFiles) {
const skuData = parseSkuFile(file);
if (skuData.model && skuData.cost && skuData.price) {
skuDataMap.set(skuData.model, skuData);
parsedCount++;
}
}
console.log(`解析完成 ${parsedCount} 个SKU数据`);
// 读取汇总表内容
let summaryContent = readPriceSummary();
// 更新日期
const today = new Date().toISOString().split('T')[0];
summaryContent = summaryContent.replace(/更新日期:\d{4}-\d{2}-\d{2}/, `更新日期:${today}`);
// 逐行处理汇总表,避免一次性处理大文件
const lines = summaryContent.split('\n');
const updatedLines = [];
let updatedCount = 0;
for (const line of lines) {
let updatedLine = line;
// 检查是否是产品行
const modelMatch = line.match(/\|\s*\d+\s*\|\s*([^|]+)\s*\|\s*¥\d+\s*\|\s*¥\d+\s*\|\s*¥\d+\s*\|\s*\d+%\s*\|/);
if (modelMatch) {
const model = modelMatch[1].trim();
const skuData = skuDataMap.get(model);
if (skuData) {
const profit = skuData.price - skuData.cost;
const profitRate = Math.round((profit / skuData.cost) * 100);
// 找到行中的序号
const indexMatch = line.match(/\|\s*(\d+)\s*\|/);
const index = indexMatch ? indexMatch[1] : '1';
updatedLine = `| ${index} | ${model} | ¥${skuData.cost} | ¥${skuData.price} | ¥${profit} | ${profitRate}% |`;
updatedCount++;
}
}
updatedLines.push(updatedLine);
}
// 重新组合内容
const updatedContent = updatedLines.join('\n');
// 写入更新后的汇总表
writePriceSummary(updatedContent);
console.log(`同步完成!更新了 ${updatedCount} 个产品的价格信息`);
console.log(`价格汇总表已更新,更新日期:${today}`);
}
// 执行同步
syncPrices();