Files
docs/悦/货代SAAS平台后台/tests/verify-sales-commission-fields.cjs
T
2026-08-21 09:20:26 +08:00

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('销售提成字段验证通过');