| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- // 测试修复后的 {remark} 替换逻辑
- console.log('=== 测试修复后的 {remark} 替换逻辑 ===\n');
- // 模拟数据库中的模板(实际配置)
- const databaseTemplate = `订单号: {orderNo}
- 时间: {orderTime}
- 商品: {goodsList}
- 合计: {totalAmount}
- 备注1: {remark}
- 收货人姓名: {receiverName}
- 地址: {address}
- 联系电话: {phone}`;
- // 模拟打印内容中的模板(实际打印出来的)
- const printedTemplate = `订单号: {orderNo}
- 时间: {orderTime}
- 商品: {goodsList}
- 合计: {payAmount}
- 备注: {remark}
- 收货人姓名: {receiverName}
- 地址: {address}
- 联系电话: {receiverPhone}`;
- // 模拟变量
- const variables = {
- orderNo: 'ORD20251210112844577127',
- orderTime: '2025-12-10 19:28:44',
- goodsList: '洗护产品6 × 1 = ¥0.01',
- totalAmount: '¥0.01',
- payAmount: '¥0.01',
- remark: '测试备注',
- receiverName: '1',
- address: '1',
- phone: '13100000000',
- receiverPhone: '13100000000'
- };
- // 修复后的替换逻辑
- function robustReplace(template, variables, tenantId = 1) {
- let content = template;
- console.log(`[租户${tenantId}] 模板变量替换前:`, {
- templateContainsRemark: template.includes('{remark}'),
- templatePreview: template.substring(0, 100) + (template.length > 100 ? '...' : '')
- });
- // 使用更健壮的替换方法,处理各种格式的占位符
- for (const [key, value] of Object.entries(variables)) {
- // 处理多种格式的占位符:{key}、{ key }、{{key}}等
- const patterns = [
- `{${key}}`, // 标准格式
- `{ ${key} }`, // 有空格
- `{{${key}}}`, // 双大括号
- `{{ ${key} }}`, // 双大括号有空格
- `{${key} }`, // 右空格
- `{ ${key}}`, // 左空格
- ];
- for (const pattern of patterns) {
- if (content.includes(pattern)) {
- content = content.split(pattern).join(value);
- console.log(`[租户${tenantId}] 替换变量 ${key} (模式: ${pattern}): ${value}`);
- }
- }
- }
- // 清理未替换的变量(特别是remark)
- // 使用正则表达式匹配各种格式的{remark}
- const remarkPatterns = [
- /\{remark\}/g,
- /\{\s*remark\s*\}/g,
- /\{\{remark\}\}/g,
- /\{\{\s*remark\s*\}\}/g,
- ];
- let hasUnreplacedRemark = false;
- for (const pattern of remarkPatterns) {
- if (pattern.test(content)) {
- hasUnreplacedRemark = true;
- console.log(`[租户${tenantId}] 模板中仍有未替换的remark占位符(模式: ${pattern.source}),使用默认值替换`);
- content = content.replace(pattern, variables.remark || '无备注');
- }
- }
- // 记录是否有未替换的remark
- if (hasUnreplacedRemark) {
- console.log(`[租户${tenantId}] 清理了未替换的remark占位符`);
- }
- console.log(`[租户${tenantId}] 模板变量替换后,是否还有{remark}:`, content.includes('{remark}') || content.includes('{ remark }'));
- return content;
- }
- // 测试1: 数据库模板
- console.log('\n=== 测试1: 数据库模板 (备注1: {remark}) ===');
- const result1 = robustReplace(databaseTemplate, variables);
- console.log('\n替换结果:');
- console.log(result1);
- // 测试2: 打印模板
- console.log('\n\n=== 测试2: 打印模板 (备注: {remark}) ===');
- const result2 = robustReplace(printedTemplate, variables);
- console.log('\n替换结果:');
- console.log(result2);
- // 测试3: 空备注
- console.log('\n\n=== 测试3: 空备注测试 ===');
- const emptyVariables = {
- ...variables,
- remark: null
- };
- const result3 = robustReplace(printedTemplate, emptyVariables);
- console.log('\n替换结果:');
- console.log(result3);
- // 测试4: 有空格的情况
- console.log('\n\n=== 测试4: 有空格的情况 ===');
- const spacedTemplate = `订单号: { orderNo }
- 时间: {orderTime }
- 商品: { goodsList }
- 合计: {totalAmount }
- 备注: { remark }
- 收货人姓名: {receiverName}
- 地址: { address }
- 联系电话: { phone }`;
- const result4 = robustReplace(spacedTemplate, variables);
- console.log('\n替换结果:');
- console.log(result4);
- // 测试5: 双大括号情况
- console.log('\n\n=== 测试5: 双大括号情况 ===');
- const doubleBraceTemplate = `订单号: {{orderNo}}
- 时间: {{orderTime}}
- 商品: {{goodsList}}
- 合计: {{totalAmount}}
- 备注: {{remark}}
- 收货人姓名: {{receiverName}}
- 地址: {{address}}
- 联系电话: {{phone}}`;
- const result5 = robustReplace(doubleBraceTemplate, variables);
- console.log('\n替换结果:');
- console.log(result5);
|