75 lines
4.8 KiB
JavaScript
75 lines
4.8 KiB
JavaScript
const assert = require('node:assert/strict');
|
|
const fs = require('node:fs');
|
|
|
|
const html = fs.readFileSync('workbench.html', 'utf8');
|
|
const list = html.match(/<div class="page-content" id="page-return-relabel-list">([\s\S]*?)<div class="page-content" id="page-return-relabel-create">/)?.[1] || '';
|
|
const detail = html.match(/<div class="page-content" id="page-return-relabel-detail">([\s\S]*?)<!-- ========== PAGE: 旧退货入库/)?.[1] || '';
|
|
const detailScript = html.match(/function openReturnRelabelDetail\(orderId\)\{([\s\S]*?)\n \}/)?.[1] || '';
|
|
|
|
function extractDivByClass(source, className) {
|
|
const opening = `<div class="${className}">`;
|
|
const start = source.indexOf(opening);
|
|
assert.notEqual(start, -1, `${className} should exist`);
|
|
const tags = /<\/?div\b[^>]*>/g;
|
|
tags.lastIndex = start;
|
|
let depth = 0;
|
|
let match;
|
|
while ((match = tags.exec(source))) {
|
|
depth += match[0].startsWith('</') ? -1 : 1;
|
|
if (depth === 0) return source.slice(start, tags.lastIndex);
|
|
}
|
|
throw new Error(`Unable to extract ${className}`);
|
|
}
|
|
|
|
assert.ok(list, '退货换标列表页 should exist');
|
|
assert.ok(detail, '退货换标详情页 should exist');
|
|
assert.match(list, /class="storage-transfer-filter-grid"/);
|
|
assert.match(list, /class="storage-transfer-filter-item"/);
|
|
assert.match(list, /class="storage-transfer-filter-label"/);
|
|
assert.match(list, /class="storage-transfer-input"/);
|
|
assert.match(list, /class="storage-transfer-select"/);
|
|
assert.match(list, /class="storage-transfer-date-range"/);
|
|
assert.match(list, /class="storage-transfer-filter-actions"/);
|
|
const filterGrid = extractDivByClass(list, 'storage-transfer-filter-grid');
|
|
const createdEndIndex = filterGrid.indexOf('id="return-relabel-filter-created-end"');
|
|
const actionsIndex = filterGrid.indexOf('<div class="storage-transfer-filter-actions">');
|
|
assert.ok(createdEndIndex >= 0, '创建时间结束日期应存在');
|
|
assert.ok(actionsIndex > createdEndIndex, '查询/重置按钮应紧跟创建时间筛选项,并位于筛选网格内');
|
|
assert.doesNotMatch(list, /return-relabel-filter-(?:card|grid|actions)/);
|
|
assert.doesNotMatch(list, /return-relabel-(?:input|select|list-card|pagination)/);
|
|
assert.match(list, /class="card"><div class="table-wrap-simple"><table class="data-table return-relabel-table"/);
|
|
assert.match(list, /class="pagination-bar"/);
|
|
assert.doesNotMatch(list, /storage-transfer-list-card|storage-transfer-pagination/);
|
|
assert.doesNotMatch(detail, /business-detail-tabs-shell/, '退货换标详情不应再使用标签页容器');
|
|
assert.match(detail, /class="labeling-detail-grid return-relabel-detail-grid"/);
|
|
assert.match(detail, /class="card labeling-detail-card"/);
|
|
assert.match(detail, /class="card labeling-detail-card return-relabel-detail-order-card"/);
|
|
assert.match(detail, /class="return-relabel-detail-order-grid" id="return-relabel-detail-summary"/);
|
|
assert.match(detail, /class="info-section-title">订单信息<\/div>/);
|
|
assert.match(detail, /class="info-section-title">商品信息<\/div>/);
|
|
assert.match(detail, /class="info-section-title">换标数据<\/div>/);
|
|
assert.match(detail, /id="return-relabel-detail-order-no"/);
|
|
assert.match(detail, /class="labeling-detail-status"[^>]*id="return-relabel-detail-status"/);
|
|
assert.match(detailScript, /return-relabel-detail-order-no/);
|
|
assert.match(detailScript, /labeling-detail-field/);
|
|
assert.match(detailScript, /return-relabel-detail-status/);
|
|
assert.match(detail, /id="return-relabel-detail-relabel-data"[\s\S]*return-relabel-detail-relabel-enabled/);
|
|
assert.match(detail, /id="return-relabel-detail-relabel-data"[\s\S]*return-relabel-detail-label-case/);
|
|
assert.match(detail, /id="return-relabel-detail-relabel-data"[\s\S]*return-relabel-detail-carton-label/);
|
|
assert.match(detail, /id="return-relabel-detail-relabel-data"[\s\S]*return-relabel-detail-sku-label/);
|
|
assert.doesNotMatch(detail, /return-relabel-detail-tail-order-no/);
|
|
assert.doesNotMatch(detail, /return-relabel-detail-tail-status/);
|
|
assert.doesNotMatch(detailScript, /\['是否换标'/);
|
|
assert.doesNotMatch(detailScript, /\['贴标要求'/);
|
|
assert.doesNotMatch(detailScript, /\['上传箱唛'/);
|
|
assert.doesNotMatch(detailScript, /\['上传 SKU 标签'/);
|
|
assert.doesNotMatch(detail, /storage-transfer-section|storage-transfer-summary-grid|storage-transfer-relation-grid/);
|
|
assert.doesNotMatch(detail, /return-relabel-(?:section|summary-grid|relation-grid|table-wrap)/);
|
|
assert.doesNotMatch(detail, /后台关联单据/);
|
|
|
|
assert.match(html, /\.return-relabel-detail-order-card\s*\{[^}]*grid-column:\s*1\s*\/\s*-1/);
|
|
assert.match(html, /\.return-relabel-detail-order-grid\s*\{[^}]*grid-template-columns:\s*repeat\(2,\s*minmax\(0,\s*1fr\)\)/);
|
|
assert.match(html, /@media\s*\(max-width:\s*760px\)[\s\S]*\.return-relabel-detail-order-grid\s*\{[^}]*grid-template-columns:\s*minmax\(0,\s*1fr\)/);
|
|
|
|
console.log('return relabel detail layout requirements: ok');
|