122 lines
4.8 KiB
JavaScript
122 lines
4.8 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const html = fs.readFileSync(path.resolve(__dirname, '..', 'index.html'), 'utf8');
|
|
const failures = [];
|
|
|
|
function expect(pattern, label, source = html) {
|
|
if (!pattern.test(source)) failures.push(`missing ${label}`);
|
|
}
|
|
|
|
function expectAbsent(pattern, label, source = html) {
|
|
if (pattern.test(source)) failures.push(`unexpected ${label}`);
|
|
}
|
|
|
|
const managementStart = html.indexOf('<div class="page" id="page-fba-stock-management">');
|
|
const managementEnd = html.indexOf('<!-- ==================== INVENTORY OVERVIEW', managementStart);
|
|
const management = managementStart >= 0 && managementEnd > managementStart
|
|
? html.slice(managementStart, managementEnd)
|
|
: '';
|
|
const overviewStart = html.indexOf('<div class="page" id="page-inventory-overview">');
|
|
const overviewEnd = html.indexOf('<!-- ==================== WAREHOUSE STOCK', overviewStart);
|
|
const overview = overviewStart >= 0 && overviewEnd > overviewStart
|
|
? html.slice(overviewStart, overviewEnd)
|
|
: '';
|
|
|
|
expect(/id="page-fba-stock-management"/, '库存管理页面');
|
|
expectAbsent(/class="inventory-management-tabs"/, '海外仓库存业务页签容器', management);
|
|
expectAbsent(/data-stock-tab="(?:warehouse-stock|fba-return-stock|overseas-stock|purchase-stock)"/, '仓储/退货/暂扣/采购库存页签', management);
|
|
|
|
[
|
|
'wms-inventory-summary',
|
|
'wms-summary-onhand',
|
|
'wms-summary-available',
|
|
'wms-summary-hold',
|
|
'wms-summary-defective',
|
|
'wms-summary-in-transit',
|
|
'wms-summary-purchase',
|
|
'wms-inventory-batch',
|
|
'wms-inventory-location',
|
|
'wms-inventory-status',
|
|
'tbody-inventory-overview'
|
|
].forEach(id => expect(new RegExp(`id="${id}"`), id));
|
|
|
|
['在库总量', '可用库存', '暂扣库存', '美本土散版', '在途库存', '采购库存', '更新时间'].forEach(label => {
|
|
expect(new RegExp(label), `WMS 字段 ${label}`);
|
|
});
|
|
expectAbsent(/>批次数<|>库位数</, '库存管理批次/库位统计列', overview);
|
|
expectAbsent(/不良品/, '旧不良品库存文案');
|
|
expect(/存在美本土散版/, '美本土散版库存状态');
|
|
expect(/const\s+looseboardStockData\s*=\s*\[/, '美本土散版库存数据源');
|
|
expect(/record\.defectiveStock\s*=\s*addWmsUnits\(record\.defectiveStock/, '美本土散版库存聚合');
|
|
expect(/state:['"]美本土散版['"]/, '美本土散版批次状态');
|
|
|
|
expect(/JSON\.stringify\(\[owner,warehouse,sku\]\)/, '无歧义客户 + 海外仓 + SKU 聚合键');
|
|
expect(/const warehouseLookup=new Map\(/, '暂扣库存仓储行索引');
|
|
[
|
|
'availableStock',
|
|
'lockedStock',
|
|
'holdStock',
|
|
'defectiveStock',
|
|
'inTransitStock',
|
|
'purchaseStock',
|
|
'onHandStock',
|
|
'expectedStock'
|
|
].forEach(field => expect(new RegExp(field), `库存状态字段 ${field}`));
|
|
|
|
['createWmsUnits', 'addWmsUnits', 'formatWmsUnits', 'renderWmsInventorySummary', 'getWmsInventoryStatus'].forEach(name => {
|
|
expect(new RegExp(`function\\s+${name}\\s*\\(`), name);
|
|
});
|
|
expectAbsent(/wms-summary-pending|pendingPutawayStock/, 'WMS 待上架字段');
|
|
expect(/if\(page==='fba-stock-management'\)\s*\{\s*renderUnifiedInventory\(\)/, '库存管理直接渲染 WMS 工作台');
|
|
|
|
[
|
|
'wms-detail-status',
|
|
'tbody-wms-detail-batches',
|
|
'tbody-wms-detail-pallets',
|
|
'tbody-warehouse-stock-detail-ledger'
|
|
].forEach(id => expect(new RegExp(`id="${id}"`), `库存详情 ${id}`));
|
|
expect(/function\s+openWarehouseStockDetail\s*\(\s*owner\s*,\s*warehouse\s*,\s*sku\s*\)/, '仓库维度库存详情入口');
|
|
|
|
[
|
|
'page-inventory-transactions',
|
|
'inventory-transaction-start',
|
|
'inventory-transaction-end',
|
|
'inventory-transaction-owner',
|
|
'inventory-transaction-warehouse',
|
|
'inventory-transaction-sku',
|
|
'inventory-transaction-type',
|
|
'inventory-transaction-business-order',
|
|
'inventory-transaction-inbound',
|
|
'inventory-transaction-outbound',
|
|
'tbody-inventory-transactions',
|
|
'inventory-transaction-total'
|
|
].forEach(id => expect(new RegExp(`id="${id}"`), `进销存页面 ${id}`));
|
|
|
|
[
|
|
'buildInventoryTransactionData',
|
|
'renderInventoryTransactions',
|
|
'inventoryTransactionSearch',
|
|
'inventoryTransactionReset',
|
|
'openInventoryTransactions',
|
|
'backToInventoryManagement',
|
|
'openInventoryRelatedDocument'
|
|
].forEach(name => expect(new RegExp(`function\\s+${name}\\s*\\(`), name));
|
|
|
|
['businessOrderNo', 'inboundNo', 'outboundNo'].forEach(field => {
|
|
expect(new RegExp(field), `进销存关联字段 ${field}`);
|
|
});
|
|
expect(/>业务订单号<\/th>[\s\S]{0,180}>入库单号<\/th>[\s\S]{0,180}>出库单号<\/th>/, '三类关联单据列表列');
|
|
|
|
['page-warehouse-stock', 'page-fba-return-stock', 'page-overseas-stock', 'page-purchase-stock'].forEach(id => {
|
|
expect(new RegExp(`id="${id}"`), `保留兼容页面 ${id}`);
|
|
});
|
|
|
|
if (failures.length) {
|
|
console.error('WMS_INVENTORY_ARCHITECTURE_CHECK_FAIL');
|
|
failures.forEach(failure => console.error(`- ${failure}`));
|
|
process.exitCode = 1;
|
|
} else {
|
|
console.log('WMS_INVENTORY_ARCHITECTURE_CHECK_PASS');
|
|
}
|