From 20fef112394bfccbbeba354824ea108409d733df Mon Sep 17 00:00:00 2001 From: 12600k-rog-d4 Date: Sun, 26 Apr 2026 21:04:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5SKU=E4=BB=B7=E6=A0=BC?= =?UTF-8?q?=E5=88=B0=E6=B1=87=E6=80=BB=E8=A1=A8=EF=BC=8C=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E4=BB=B7=E6=A0=BC=E5=90=8C=E6=AD=A5=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scripts/sync-prices-to-summary.js | 158 ++++++++++++++++++ user-guide/verification.html | 1 + 产品/产品价格汇总表.md | 34 ++-- 3 files changed, 176 insertions(+), 17 deletions(-) create mode 100644 .codebuddy/skills/sku-designer/scripts/sync-prices-to-summary.js create mode 100644 user-guide/verification.html diff --git a/.codebuddy/skills/sku-designer/scripts/sync-prices-to-summary.js b/.codebuddy/skills/sku-designer/scripts/sync-prices-to-summary.js new file mode 100644 index 0000000..1bce365 --- /dev/null +++ b/.codebuddy/skills/sku-designer/scripts/sync-prices-to-summary.js @@ -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(); \ No newline at end of file diff --git a/user-guide/verification.html b/user-guide/verification.html new file mode 100644 index 0000000..645a25f --- /dev/null +++ b/user-guide/verification.html @@ -0,0 +1 @@ +verify_ca7a78c8e20649ca3dd554910f193123 \ No newline at end of file diff --git a/产品/产品价格汇总表.md b/产品/产品价格汇总表.md index 8daafa2..72c66b2 100644 --- a/产品/产品价格汇总表.md +++ b/产品/产品价格汇总表.md @@ -1,6 +1,6 @@ # 全部产品成本与售价汇总表 -> 更新日期:2026-04-14 +> 更新日期:2026-04-26 > 定价策略:亚克力单:2G内存成本+20元,4G内存成本+30元;基础版:成本+30;高性能版i3:2代+50,3代+60,4代+70,5代+80;高性能版i5:成本+80;高性能版J1900:成本+50;高性能版J3160:成本+70 --- @@ -12,18 +12,18 @@ | 1 | 亚克力-单-N2840-2G-16G | ¥136 | ¥156 | ¥20 | 15% | | 2 | 亚克力-单-N2930-2G-16G | ¥141 | ¥161 | ¥20 | 14% | | 3 | 亚克力-单-N2930-2G-32G | ¥146 | ¥166 | ¥20 | 14% | -| 4 | 亚克力-单-N2930-4G-64G | ¥203 | ¥233 | ¥30 | 15% | +| 4 | 亚克力-单-N2930-4G-64G | ¥178 | ¥208 | ¥30 | 17% | | 5 | 亚克力-单-N2930-4G-128G | ¥206 | ¥236 | ¥30 | 15% | | 6 | 亚克力-单-AMD-A4-2G-16G | ¥136 | ¥156 | ¥20 | 15% | | 7 | 亚克力-单-AMD-A4-2G-32G | ¥141 | ¥161 | ¥20 | 14% | -| 8 | 亚克力-单-AMD-A4-4G-64G | ¥198 | ¥228 | ¥30 | 15% | +| 8 | 亚克力-单-AMD-A4-4G-64G | ¥173 | ¥203 | ¥30 | 17% | | 9 | 亚克力-单-J1900-2G-16G | ¥171 | ¥191 | ¥20 | 12% | | 10 | 亚克力-单-J1900-2G-32G | ¥176 | ¥196 | ¥20 | 11% | -| 11 | 亚克力-单-J1900-4G-64G | ¥233 | ¥263 | ¥30 | 13% | +| 11 | 亚克力-单-J1900-4G-64G | ¥208 | ¥238 | ¥30 | 14% | | 12 | 亚克力-单-J1900-4G-128G | ¥236 | ¥266 | ¥30 | 13% | | 13 | 亚克力-单-J3160-2G-16G | ¥181 | ¥201 | ¥20 | 11% | | 14 | 亚克力-单-J3160-2G-32G | ¥186 | ¥206 | ¥20 | 11% | -| 15 | 亚克力-单-J3160-4G-64G | ¥243 | ¥273 | ¥30 | 12% | +| 15 | 亚克力-单-J3160-4G-64G | ¥218 | ¥248 | ¥30 | 14% | | 16 | 亚克力-单-J3160-4G-128G | ¥246 | ¥276 | ¥30 | 12% | --- @@ -33,17 +33,17 @@ | 序号 | 产品型号 | 成本 | 售价 | 利润 | 利润率 | |:---:|---------|:----:|:----:|:----:|:------:| | 1 | 亚克力-双-1037U-2G-16G | ¥173 | ¥225 | ¥52 | 30% | -| 2 | 亚克力-双-1037U-2G-32G | ¥183 | ¥238 | ¥55 | 30% | -| 3 | 亚克力-双-1037U-4G-64G | ¥228 | ¥296 | ¥68 | 30% | -| 4 | 亚克力-双-1037U-4G-128G | ¥251 | ¥326 | ¥75 | 30% | -| 5 | 亚克力-双-3217U-2G-16G | ¥183 | ¥238 | ¥55 | 30% | -| 6 | 亚克力-双-3217U-2G-32G | ¥193 | ¥251 | ¥58 | 30% | -| 7 | 亚克力-双-3217U-4G-64G | ¥238 | ¥309 | ¥71 | 30% | -| 8 | 亚克力-双-3217U-4G-128G | ¥261 | ¥339 | ¥78 | 30% | -| 9 | 亚克力-双-5005U-2G-16G | ¥198 | ¥257 | ¥59 | 30% | -| 10 | 亚克力-双-5005U-2G-32G | ¥208 | ¥270 | ¥62 | 30% | -| 11 | 亚克力-双-5005U-4G-64G | ¥253 | ¥329 | ¥76 | 30% | -| 12 | 亚克力-双-5005U-4G-128G | ¥276 | ¥359 | ¥83 | 30% | +| 2 | 亚克力-双-1037U-2G-32G | ¥178 | ¥231 | ¥53 | 30% | +| 3 | 亚克力-双-1037U-4G-64G | ¥210 | ¥273 | ¥63 | 30% | +| 4 | 亚克力-双-1037U-4G-128G | ¥238 | ¥309 | ¥71 | 30% | +| 5 | 亚克力-双-3217U-2G-16G | ¥173 | ¥225 | ¥52 | 30% | +| 6 | 亚克力-双-3217U-2G-32G | ¥178 | ¥231 | ¥53 | 30% | +| 7 | 亚克力-双-3217U-4G-64G | ¥210 | ¥273 | ¥63 | 30% | +| 8 | 亚克力-双-3217U-4G-128G | ¥238 | ¥309 | ¥71 | 30% | +| 9 | 亚克力-双-5005U-2G-16G | ¥268 | ¥349 | ¥81 | 30% | +| 10 | 亚克力-双-5005U-2G-32G | ¥273 | ¥355 | ¥82 | 30% | +| 11 | 亚克力-双-5005U-4G-64G | ¥305 | ¥397 | ¥92 | 30% | +| 12 | 亚克力-双-5005U-4G-128G | ¥333 | ¥433 | ¥100 | 30% | --- @@ -152,7 +152,7 @@ | 1 | 亚克力-双-J1900-4G-32G | ¥243 | ¥293 | ¥50 | 21% | | 2 | 亚克力-双-J1900-4G-64G | ¥263 | ¥313 | ¥50 | 19% | | 3 | 亚克力-双-J1900-8G-64G | ¥313 | ¥363 | ¥50 | 16% | -| 4 | 亚克力-双-J1900-8G-128G | ¥341 | ¥391 | ¥50 | 14% | +| 4 | 亚克力-双-J1900-8G-128G | ¥341 | ¥391 | ¥50 | 15% | ---