66 lines
3.4 KiB
JavaScript
66 lines
3.4 KiB
JavaScript
const assert = require('node:assert/strict');
|
|
const fs = require('node:fs');
|
|
const path = require('node:path');
|
|
|
|
const root = path.resolve(__dirname, '..');
|
|
const salesModule = fs.readFileSync(path.join(root, 'prototype-src/modules/09-sales.html'), 'utf8');
|
|
const appJs = fs.readFileSync(path.join(root, 'prototype-src/app.js'), 'utf8');
|
|
const salesDataBlock = appJs.slice(appJs.indexOf('const salesCommissionData='), appJs.indexOf('const sysTenantData'));
|
|
|
|
function assertInOrder(source, labels, message) {
|
|
let previous = -1;
|
|
labels.forEach((label) => {
|
|
const position = source.indexOf(label, previous + 1);
|
|
assert.ok(position > previous, `${message}: 缺少或顺序错误 “${label}”`);
|
|
previous = position;
|
|
});
|
|
}
|
|
|
|
assertInOrder(
|
|
salesModule,
|
|
['综合提成率', '固定提成(元)', '溢价提成(元)', '垫款利息(元)', '提成金额(元)'],
|
|
'销售提成列表表头'
|
|
);
|
|
|
|
['fixedCommission', 'premiumCommission', 'advanceInterest'].forEach((field) => {
|
|
assert.ok(new RegExp(`${field}:-?\\d`).test(salesDataBlock), `销售人员示例数据缺少 ${field}`);
|
|
});
|
|
const advanceInterestValues = [...salesDataBlock.matchAll(/advanceInterest:(-?\d+)/g)].map((match) => Number(match[1]));
|
|
assert.equal(advanceInterestValues.length, 5, '销售人员垫款利息示例数据数量不正确');
|
|
assert.ok(advanceInterestValues.every((value) => value < 0), '垫款利息必须全部为负值');
|
|
assert.ok(
|
|
appJs.includes("return (value<0?'-':'')+'¥'+Math.abs(value).toLocaleString"),
|
|
'负数金额必须显示为 -¥金额'
|
|
);
|
|
const salesOrderCount = (salesDataBlock.match(/{no:'SO/g) || []).length;
|
|
assert.equal((salesDataBlock.match(/floorPrice:\d/g) || []).length, salesOrderCount, '并非每条订单都有 floorPrice');
|
|
assert.equal((salesDataBlock.match(/settlementStatus:/g) || []).length, salesOrderCount, '并非每条订单都有独立结算状态');
|
|
assert.ok(/settlementStatus:'未结算'/.test(salesDataBlock), '订单示例数据缺少未结算状态');
|
|
assert.ok(/settlementStatus:'已结算'/.test(salesDataBlock), '订单示例数据缺少已结算状态');
|
|
|
|
assert.ok(/comm:fixedCommission\+premiumCommission\+advanceInterest/.test(appJs), '提成金额没有按三类提成求和');
|
|
assert.ok(/calculatedComm:total\*rate\/100/.test(appJs), '原订单比例提成结果没有保留给明细使用');
|
|
assert.ok(appJs.includes('scMoney(c.calculatedComm)'), '明细汇总没有继续使用原订单比例提成口径');
|
|
['c.fixedCommission', 'c.premiumCommission', 'c.advanceInterest'].forEach((field) => {
|
|
assert.ok(appJs.includes(field), `列表没有渲染 ${field}`);
|
|
});
|
|
assert.ok(/colspan="12"[^>]*>暂无匹配数据/.test(appJs), '列表空态列数不是 12');
|
|
|
|
assertInOrder(
|
|
appJs,
|
|
['收款时间', '状态', '客户名称'],
|
|
'订单提成明细状态表头'
|
|
);
|
|
assertInOrder(
|
|
appJs,
|
|
['单价(元/kg)', '销售底价(元/kg)', '件数'],
|
|
'订单提成明细销售底价表头'
|
|
);
|
|
assert.ok(/o\.floorPrice\.toFixed\(2\)/.test(appJs), '订单提成明细没有渲染销售底价');
|
|
assert.ok(/o\.settlementStatus/.test(appJs), '订单提成明细没有渲染独立结算状态');
|
|
assert.ok(appJs.includes("o.settlementStatus==='已结算'?'tag-green':'tag-orange'"), '结算状态没有使用约定标签颜色');
|
|
assert.ok(/colspan="10"[^>]*>合计/.test(appJs), '明细合计行列数不是 10');
|
|
assert.ok(/overflow-x:auto/.test(appJs), '13 列明细表缺少横向滚动容器');
|
|
|
|
console.log('销售提成字段验证通过');
|